0

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

在我的模拟器设置中,我的语言设置为English,我的 Region Format 设置为Singapore

在加载已本地化的 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 图片

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

4

2 回答 2

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 似乎确实会影响本地化。

于 2012-06-26T21:42:12.340 回答
0

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

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

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

于 2012-06-26T19:08:54.227 回答