我有一个应用程序,无论语言如何,都以英语显示所有内容。在应用程序的产品部分中,产品内容基于 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 文件在我的项目导航器中的显示方式
我做错了什么导致我的本地化 plist 无法显示?
最佳答案
本地化(从应用程序包中的相关语言文件夹加载翻译资源的过程)完全基于语言设置。所以pathForResource只关心语言设置,忽略区域格式设置。
区域格式设置会影响字符串和区域设置相关数据类型之间的转换(双向:解析输入和格式化输出)。例如,如果您将 NSDate 转换为字符串以供显示,根据区域格式设置,您可能会得到日期之前的月份(如美国)或相反日期(如英国)。
[NSLocale currentLocale] 指的是区域格式,所以你只是在调试时看错了东西。
编辑 请参阅下面的评论,这似乎更复杂。当语言设置为中性语言(例如“en”而不是“en-US”)时,看起来 Region 确实会影响本地化。
关于ios - 针对区域本地化 iPhone 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11213808/