ios - iOS9 AppleLanguages与旧版iOS不同

原文 标签 ios xcode cocoa-touch ios9

我现在如何获得实际的系统语言?似乎他们在最后一个破折号后面加上了区域后缀。因此,如果cs现在是cs-DE,并且现在的语言是捷克语,而区域设置是德语,则en-GB。但是有些语言没有后缀,例如GB语言是ojit_code,而区域设置是德语。

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

最佳答案

使用componentsFromLocaleIdentifier类中的NSLocale方法

Here is the documentation

您可以这样:

NSString* localeID = [NSLocale currentLocale].localeIdentifier;
NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:localeID];
NSString* languageID = components[NSLocaleLanguageCode];

编辑

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

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

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

相关文章:

ios - 奇怪的游戏中心行为?

iphone - 如何在iPhone SDK中执行运行比分动画

iphone - 启动之间无法保存核心数据实体关系

ios - 为什么它总是说密码不匹配?

ios - iPhone设备无法连接到App中的本地服务器

ios - 我应该为每个UIViewController创建一个NSOperationQueue吗?

ios - Swift中的UIWebView:exc_bad_access

ios - 将crittercism SDK添加到我的ios应用中

ios - 如何判断是否可以通过照片框架将给定文件添加到照片库?

ios - 在持续触摸时采取行动,而不是在刚接触时采取行动