iOS9 AppleLanguages与旧版iOS不同

kub*_*ubo 6 xcode cocoa-touch ios ios9

我现在如何获得实际的系统语言?似乎他们在最后一次冲刺后放置了区域后缀.所以之前cs是现在cs-DE如果语言是捷克和区域设置为德语.但有些语言没有像GB语言这样的后缀,en-GB但区域设置是德语.

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* language = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [language objectAtIndex:0];
NSLog(@"localeIdentifier: %@", preferredLang);
Run Code Online (Sandbox Code Playgroud)

Imo*_*tep 9

使用类中的componentsFromLocaleIdentifier方法NSLocale

这是文档

你可以这样做:

NSString* localeID = [NSLocale currentLocale].localeIdentifier;
NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:localeID];
NSString* languageID = components[NSLocaleLanguageCode];
Run Code Online (Sandbox Code Playgroud)

编辑

如果当前翻译的应用程序语言不是设备的语言,那么以这种方式获取语言会产生一些问题.实际上, components[NSLocaleLanguageCode]将返回设备的语言.

要获得应用程序的当前语言,您应该使用[[NSBundle mainBundle] preferredLocalizations].firstObject.

要获取设备的区域,您仍然可以使用 components[NSLocaleCountryCode]


yuh*_*hua 5

我最近遇到了这个问题.根据Apple的文档,您将获得带有区域指示符的区域设置ID,就像[language designator]-[region designator]在iOS 9上一样.如果您想获得区域设置ID,我可以使用,我找到了一个解决方案
[[NSBundle mainBundle] preferredLocalizations].