iOS9 AppleLanguages 与旧版 iOS 不同

标签 ios xcode cocoa-touch ios9

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

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

最佳答案

使用 NSLocale 类中的 componentsFromLocaleIdentifier 方法

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]

关于iOS9 AppleLanguages 与旧版 iOS 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653220/

相关文章:

ios - 在 iOS 的自定义抽屉导航中状态栏颜色更改为白色?

ios - 现有项目的 XCTest

iphone - Xcode重复符号错误

objective-c - 用于多对多对多关系的 NSPredicate 过滤器

iphone - UIScrollView 和 setContentOffset

iOS模拟器每次都想访问麦克风

ios - swift - 如何从服务器获取 JSON 响应

ios - Admob WebFilter 日志,这是什么意思?

ios - 显示事件的容器 View

cocoa-touch - 新的 PayPal iOS SDK(测试版)- 无法连接到沙箱