“Español(México)”语言设置使用“西班牙语”字符串而不是“西班牙语(拉丁美洲)”字符串

时间:2014-05-08 19:15:31

标签: ios localization localizable.strings

我们的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会给我们“西班牙语(拉丁美洲)”本地化,当你在手机上实际选择唯一的拉丁美洲西班牙语选项时不使用它?

2 个答案:

答案 0 :(得分:0)

Xcode列出的语言比iOS支持的语言多得多。 iOS支持的语言列表是一个移动目标,随着每个iOS版本的扩展而扩展。你几乎必须从当时可用的列表中选择最接近真实目标语言的东西。

答案 1 :(得分:0)

这在iOS 9和10中已经改变,应该可以正常工作。但是,如果您的项目中没有本地化,那么它将获取Base本地化(如果存在)。只有一个基地可用;如果您的用户选择了“es-MX”作为他的手机语言并且您只有“es”,它将从Base本地化而不是从“es”基础西班牙语翻译中选择字符串。