我有一个以多种语言本地化的iOS应用程序。我有英语,荷兰语和荷兰语(比利时)的Localizable.strings文件。问题是当荷兰语被设置为设备语言而比利时被设置为国家时,使用荷兰语字符串而不是荷兰语 - 比利时字符串。
我添加了一些日志记录,以确保在设备上设置了正确的语言,并且它似乎是正确的:
NSLocale *locale = [NSLocale currentLocale];
NSString *language = [locale displayNameForKey:NSLocaleIdentifier
value:[locale localeIdentifier]];
NSLog(@"language %@", language);
打印出来
2015-04-09 11:49:26.227 MyTestApp[222:7459] language Nederlands (België)
但是如果我尝试使用NSLocalizedString获取字符串,我会获得荷兰语资源,而不是荷兰语比利时资源。
我已经在运行8.1的iPhone 5s和几个7.1 / 8.1模拟器上对此进行了测试,但我无法使用它。有趣的是,如果我在编辑方案下在XCode中强制设置语言为荷兰语(比利时) - >应用程序语言,使用正确的语言。
答案 0 :(得分:0)
事实证明,问题是Xcode为每种语言创建资源文件夹,并使用连字符分隔语言和区域,例如: NL-BE.proj。但是,区域设置代码使用下划线,例如nl_BE,因此该区域永远不会匹配。这似乎是一个XCode错误。
解决方法是更改区域设置,使其包含此处讨论的连字符https://stackoverflow.com/a/14357315/416214