iOS 9 beta 语言ID语法更改

6
我很困惑,为什么在iOS 9 beta中语言代码的返回值与iOS 8.4不同?
功能:
NSUserDefaults.standardUserDefaults().objectForKey("AppleLanguages")   

只需将语言设置为“简体中文”,地区设置为“中国”。

iOS 8.4返回"zh-Hanz",但iOS 9 beta 4返回"zh-Hanz-CN"。 语言ID语法更像

"[语言标识]-[脚本标识]-[地区标识]".

与苹果文档不同:

这是iOS 9的新规则吗?有人可以帮我确认一下吗。

感谢您的帮助。


我感觉苹果只是在iOS 9中加强了某些语言的代码。这是针对所有语言还是只针对“简体中文”(可能在末尾有不同的地区代码,例如“TW”)? - Michael Dautermann
谢谢您的回复。是的,如果设置不同的地区,最终会得到不同的地区代码,例如“TW”。我还测试了不同地区的英语语言,并获得了与“简体中文”相同的结果。似乎如果语言没有地区,iOS 9会在结尾添加一个地区,而iOS 8则不会,但这适用于所有语言吗?我不知道,希望得到确认。 - Paul
问题中的 Hanz 是否意味着 Hans - Pang
3个回答

6
是的,我也注意到了在使用[NSLocale preferredLanguages]时的差异。
在iOS 9 beta中,它返回的是zh-Hans-US(地区设置为美国,语言为简体中文),而在iOS 8.4中,它只返回zh-Hans。
所以我一直在使用[[NSBundle mainBundle] preferredLocalizations]。这将返回当前本地化(zh-hans),没有地区后缀(-US)。
确认一下,iOS 9对所有语言都添加了地区后缀(如-US或-CN)。

3
你应该使用componentsFromLocaleIdentifier来分割区域设置标识符并找到语言代码。就像这样:
+ (NSString*)currentLanguage
{
    NSLocale* locale = [NSLocale currentLocale];
    NSString* identifier = locale.localeIdentifier;
    NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:identifier];
    NSLog(@"components:\n%@", components);
    return [components valueForKey:NSLocaleLanguageCode];
}

2
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *allLanguage = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [allLanguage objectAtIndex:0];
NSLog(@"The current language is : %@", currentLanguage);

iOS 9之前:返回语言ID,例如:"zh-Hans"

iOS 9:返回语言ID和地区ID,例如:"zh-Hans-US"

注意:
1.不要使用以下方法来检查当前语言。

if ([currentLanguage isEqualToString:@"zh-Hans"])

你可以使用以下方法代替:
if ([currentLanguage hasPrefix:@"zh-Hans"])

同时,如果您关心中文,您必须注意以下内容:

  • 简体中文:zh-Hans
  • 繁体中文:zh-Hant
  • 香港中文:zh-HK
  • 澳门中文:zh-MO
  • 台湾中文:zh-TW
  • 新加坡中文:zh-SG

注意:在某些情况下,我们会得到不同的结果,尤其是当您处理中文时。这有点奇怪。例如:

我的手机型号是:中国大陆/中国电信/A1533/16GB版本。当我将语言设置为台湾,并将地区设置为中国、香港或台湾时,结果是“zh-TW”。而当您将地区设置为非中文地区时,语言将变为繁体中文。

因此,在处理中文时,请特别注意语言!

您还可以在此处查看iOS 9适配详细信息:https://github.com/ChenYilong/iOS9AdaptationTips


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接