“Español (México)”语言设置使用“Spanish”字符串而不是“Spanish (Latin America)”字符串

use*_*008 5 localization localizable.strings ios

我们的 iOS 项目具有本地化的字符串,用于在 Xcode 中创建的“西班牙语”(es.lproj)和“西班牙语(拉丁美洲)”(es-419.lproj)。

但是,在 iPhone(美国,最新的 iOS 7)上,西班牙语的唯一语言选项是“Español”和“Español (México)”,没有“Latin America”。当您选择“Español (México)”时,它使用我们应用程序中的“Spanish”字符串,而不是人们所期望的“Spanish (Latin America)”字符串。

经进一步调查,[[NSBundle mainBundle] preferredLocalizations]返回@[@"es"]。即使[[NSBundle mainBundle] localizations]返回包含“es”和“es-419”的数组也是如此。

但是,[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]返回一个包含“es-MX”的数组。

然后是以下表达式:

[NSBundle preferredLocalizationsFromArray:@[@"es-419", @"es"]
                           forPreferences:@[@"es-MX"]]
Run Code Online (Sandbox Code Playgroud)

返回@[@"es"]

为什么 Xcode 会给我们“西班牙语(拉丁美洲)”本地化,当您在手机上实际选择唯一的拉丁美洲西班牙语选项时不使用它?

del*_*lat 1

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