本地化区域的iPhone应用程序

时间:2012-06-26 18:33:07

标签: 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无法显示?

2 个答案:

答案 0 :(得分:4)

本地化(从应用程序包中的相关语言文件夹加载已翻译资源的过程)完全基于语言设置。所以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似乎会影响本地化。

答案 1 :(得分:0)

我遇到过同样的问题,不知怎的,找到了一个非本地化的文件。对我有用的是:

[[NSBundle mainBundle] pathForResource:@"Products" ofType:@"plist" inDirectory:nil]

这将始终搜索所有本地化文件,并根据用户设置返回正确的文件