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

时间:2015-01-08 15:05:18

标签: ios localization

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

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

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

编辑:CFBundleDevelopmentRegion设置为en

1 个答案:

答案 0 :(得分:3)

原因

当您将操作系统主要语言设置为西班牙语时,默认情况下首选语言的顺序为:

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

    如何修复

    在iOS 8中,您可以在设置>中更改语言的顺序。一般>标题Preferred Language Order下的语言和地区(请参阅this post)。

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

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