我们的iOS项目为“西班牙语”(es.lproj)和“西班牙语(拉丁美洲)”(es-419.lproj)提供了本地化字符串,这是从Xcode中创建的。
然而,在iPhone(美国,最新的iOS 7)上,西班牙语的唯一语言选项是“Español”和“Español(México)”,没有“拉丁美洲”。当你选择“Español(México)”时,它会使用我们应用程序中的“西班牙语”字符串,而不是“西班牙语(拉丁美洲)”字符串,正如人们所期望的那样。
进一步调查后,[[NSBundle mainBundle] preferredLocalizations]
会返回@[@"es"]
。即使[[NSBundle mainBundle] localizations]
返回包含“es”和“es-419”的数组,也是如此。
但是,[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]
返回一个包含“es-MX”的数组。
然后是以下表达式:
[NSBundle preferredLocalizationsFromArray:@[@"es-419", @"es"]
forPreferences:@[@"es-MX"]]
返回@[@"es"]
。
为什么Xcode会给我们“西班牙语(拉丁美洲)”本地化,当你在手机上实际选择唯一的拉丁美洲西班牙语选项时不使用它?
答案 0 :(得分:0)
Xcode列出的语言比iOS支持的语言多得多。 iOS支持的语言列表是一个移动目标,随着每个iOS版本的扩展而扩展。你几乎必须从当时可用的列表中选择最接近真实目标语言的东西。
答案 1 :(得分:0)
这在iOS 9和10中已经改变,应该可以正常工作。但是,如果您的项目中没有本地化,那么它将获取Base本地化(如果存在)。只有一个基地可用;如果您的用户选择了“es-MX”作为他的手机语言并且您只有“es”,它将从Base本地化而不是从“es”基础西班牙语翻译中选择字符串。