iOS 9 beta语言ID语法更改

时间:2015-08-11 03:39:45

标签: ios objective-c iphone swift

我很困惑,为什么在iOS 9 beta中语言代码的返回值与iOS 8.4不同?

功能:

NSUserDefaults.standardUserDefaults().objectForKey("AppleLanguages")   

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

在iOS 8.4中,返回“zh-Hanz”,但在iOS 9 beta 4中返回“zh-Hanz-CN”。 语言ID语法更像是

  

“[语言指示符] - [脚本指示符] - [区域指示符]”。

Is different with apple document:

这是iOS 9中的新规则吗?有人可以帮我证实这一点。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您应该使用componentsFromLocaleIdentifiert来拆分语言环境标识符并查找语言代码。像这里:

+ (NSString*)currentLanguage
{
    NSLocale* locale = [NSLocale currentLocale];
    NSString* identifier = locale.localeIdentifier;
    NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:identifier];
    NSLog(@"components:\n%@", components);
    return [components valueForKey:NSLocaleLanguageCode];
}

答案 1 :(得分: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