ios - 针对区域本地化 iPhone 应用程序

标签 ios localization plist nslocale

我有一个应用程序,无论语言如何,都以英语显示所有内容。在应用程序的产品部分中,产品内容基于 plist 显示。可供购买的产品取决于位置,并非所有产品在每个市场都有售。

在我的模拟器设置中,我将我的语言设置为英语,并将我的区域格式设置为新加坡

在我加载已本地化的 plist 之上,我首先做一个日志来检查我是否确实将 SG(新加坡)视为我的区域。

NSString *locale = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];
NSLog(@"LOCALE: %@", locale);
if([locale isEqualToString:@"SG"]){
    NSLog(@"singapore do something?");
    productCategory = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
                                    pathForResource:@"Products" ofType:@"plist"]];  
}

当前结果显示我的日志语句记录 LOCALE:SG,这是预期的,但是我的新加坡特定内容未加载。

我已经尝试清理项目,并从模拟器中删除应用程序。

这就是我的 plist 文件在我的项目导航器中的显示方式 Products.plist image

我做错了什么导致我的本地化 plist 无法显示?

最佳答案

本地化(从应用程序包中的相关语言文件夹加载翻译资源的过程)完全基于语言设置。所以pathForResource只关心语言设置,忽略区域格式设置。

区域格式设置会影响字符串和区域设置相关数据类型之间的转换(双向:解析输入和格式化输出)。例如,如果您将 NSDate 转换为字符串以供显示,根据区域格式设置,您可能会得到日期之前的月份(如美国)或相反日期(如英国)。

[NSLocale currentLocale] 指的是区域格式,所以你只是在调试时看错了东西。

这里有更多关于此的信息:https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPInternational/BPInternational.html#//apple_ref/doc/uid/10000171i

编辑 请参阅下面的评论,这似乎更复杂。当语言设置为中性语言(例如“en”而不是“en-US”)时,看起来 Region 确实会影响本地化。

关于ios - 针对区域本地化 iPhone 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11213808/

相关文章:

ios - swift 3 中的 Json post 方法用于以下 php 代码

Android - 翻译语言代码

ios - 本地化 xib 时出现 Xcode 链接器错误

macos - 修改 OSX 上的 "Spaces"plist 以设置默认桌面

macos - 如何在 Mac OSX 上读取 MY APP 的 plist 文件?

iphone - UITextview 调整大小后自动重新定位 View - iOS

iphone - 编辑应用程序的 .plist 文件

ios - 在 iTunes 上隐藏额外的本地化

ios - 使用 UserDefaults 保存来自 plist 的字典数组

ios - 如何解决 Sqlite.swift 中的警告消息 'BUG IN CLIENT OF libsqlite3.dylib: database integrity compromised by API violation'?