iOS 9测试版语言ID语法更改

iOS 9测试版语言ID语法更改,ios,objective-c,iphone,swift,Ios,Objective C,Iphone,Swift,我很困惑,为什么在iOS9测试版中,语言代码的返回值不同于iOS8.4 功能: NSUserDefaults.standardUserDefaults().objectForKey("AppleLanguages") 只需将语言设置为“简单中文”,将区域设置为“中国” 在iOS 8.4中,返回“zh Hanz”,但在iOS 9 beta 4中,返回“zh Hanz CN”。 语言ID语法更像 “[语言指示符]-[脚本指示符]-[区域指示符]” 这是iOS 9中的新规则吗?有人能帮我确认

我很困惑,为什么在iOS9测试版中,语言代码的返回值不同于iOS8.4

功能:

NSUserDefaults.standardUserDefaults().objectForKey("AppleLanguages")   
只需将语言设置为“简单中文”,将区域设置为“中国”

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

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

这是iOS 9中的新规则吗?有人能帮我确认一下吗


谢谢你的帮助。

是的,我在使用时也注意到了 [NSLocale首选语言]

在iOS 9测试版中,它返回zh Hans US(区域设置为US,语言设置为简体中文),而在iOS 8.4中,它只返回zh Hans

因此,与此同时,我一直在使用 [[NSBundle mainBundle]首选本地化] 这将返回当前本地化(zh-hans),该本地化没有区域后缀(-US)

为了确认这一点,iOS9在所有语言中添加了区域后缀(如-US或-CN)

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *allLanguage = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [allLanguage objectAtIndex:0];
NSLog(@"The current language is : %@", currentLanguage);
iOS 9 Before:返回:语言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 TW
  • 新加坡华人:zh SG
注意:在某些情况下,我们会有不同的结果,特别是当你和中国人打交道时。这有点奇怪。例如:

我的手机是:中国大陆/中国电信/A1533/16GB 当我选择台湾语时,该地区是 在中国、香港或台湾,结果是“zh TW”,当您设置 由于地区不是汉语地区,语言也会变为汉语 繁体中文

所以请多注意语言,尤其是当你使用汉语的时候


您还可以在此处查看iOS 9自适应详细信息:

您应该使用ComponentsFromLocaleIdentifier拆分区域设置标识符并查找语言代码。就像这里:

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

在我看来,苹果只是在增强iOS 9中某些语言的代码。这是适用于所有语言还是仅适用于“简单中文”(结尾可能有不同的地区代码,例如“TW”)。谢谢您的回复。是,如果设置了不同的区域,则在末尾获取不同的区域代码,例如“TW”。我还测试了不同地区的英语,得到了与“简单汉语”相同的结果。似乎如果语言没有区域,iOS 9在末尾比iOS 8添加了一个区域,但它适用于所有语言吗?我不知道,我想确认一下。问题中的
Hanz
是指
Hans