NSBundle 的首选语言环境 returns 错误的本地化

NSBundle's preferred locale returns wrong localization

我们有一个支持英语和法语本地化的应用程序,我们使用 NSBundle 的首选本地化来检索当前设备区域设置

    NSArray *prefLocalizations = [NSBundle preferredLocalizationsFromArray:[NSArray arrayWithObjects:@"English", @"French",nil]];

所以对于英语,它 return 是英语,法语 return 是法语,数组只有一个元素。将语言从法语更改为西班牙语时,应用程序将本地化为英语,因为它不受支持。这里的问题是我们期望 prefLocalization 为 return 英语,但它却是 return 法语。知道为什么会发生这种情况以及如何解决它吗?

编辑:CFBundleDevelopmentRegion 设置为 en

原因

当您将 OS 主要语言设置为西班牙语时,首选语言的默认顺序为:

  1. 西班牙语
  2. 法语
  3. 英语
  4. ...

我在其他操作系统上发现了相同的行为,例如 f.e。在Xbox。我实际上是在西班牙长大的,我发现大多数人都将英语作为第二语言,所以,这对我来说真的没有任何意义(也许是因为西班牙语更接近法语而不是英语?)。

如何修复

在 iOS 8,您可以在 设置 > 通用 > 语言和地区 标题 Preferred Language Order 下更改语言顺序(参见 this post).

另一种选择是自己检查主要语言和 select 本地化:

NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *languageToSelect;
if([language isEqualToString:@"fr"])
{
    languageToSelect=@"fr";
}
else
{
    languageToSelect=@"en";
}