iOS 9测试版语言ID语法更改
我很困惑,为什么在iOS9测试版中,语言代码的返回值不同于iOS8.4 功能: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中的新规则吗?有人能帮我确认
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
您还可以在此处查看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
?