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 主要语言设置为西班牙语时,首选语言的默认顺序为:
- 西班牙语
- 法语
- 英语
- ...
我在其他操作系统上发现了相同的行为,例如 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";
}
我们有一个支持英语和法语本地化的应用程序,我们使用 NSBundle 的首选本地化来检索当前设备区域设置
NSArray *prefLocalizations = [NSBundle preferredLocalizationsFromArray:[NSArray arrayWithObjects:@"English", @"French",nil]];
所以对于英语,它 return 是英语,法语 return 是法语,数组只有一个元素。将语言从法语更改为西班牙语时,应用程序将本地化为英语,因为它不受支持。这里的问题是我们期望 prefLocalization 为 return 英语,但它却是 return 法语。知道为什么会发生这种情况以及如何解决它吗?
编辑:CFBundleDevelopmentRegion 设置为 en
原因
当您将 OS 主要语言设置为西班牙语时,首选语言的默认顺序为:
- 西班牙语
- 法语
- 英语
- ...
我在其他操作系统上发现了相同的行为,例如 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";
}