iOS:如何获取设备当前语言设置?

Oha*_*gev 22 locale local setting ios

我的应用程序中有一些功能应该基于运行它的设备的语言设置.

我想获得实际语言而不是某些国家/地区设置.例如,如果语言是英语,我不在乎它是美国,英国,澳大利亚等...

我对这个NSLocale对象很熟悉,但它似乎与Region Format设置有关,而不是语言设置(见下面的屏幕截图),所以当我尝试使用它来检索语言时,[locale displayNameForKey:NSLocaleIdentifier value:[locale localeIdentifier]我得到的东西English (United States)不是English; 另外,我认为我需要的是语言数据而不是区域格式(我是对的吗?).

任何人都可以指导我如何检索语言设置?

在此输入图像描述

Vla*_*mir 51

存储的用户首选语言可以从区域设置中检索为数组,当前语言标识符是该数组中的第一个对象:

NSString *currentLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

如果你想要更易读的语言,那么使用displayNameForKey:value:NSLocale的方法:

NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *lang = [[NSLocale currentLocale] displayNameForKey:NSLocaleLanguageCode value:langID];
Run Code Online (Sandbox Code Playgroud)

  • ***警告:在iOS 9***中,`NSLocale preferredLanguages`的返回值已更改.如果在您获得"en"之前,在iOS 9中您将获得"en-US"或"en-JP"等参考:https://happyteamlabs.com/blog/nslocale-preferredlanguages-changes-in -ios-9 / (7认同)

Ser*_*gio 5

试试这个:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* arrayLanguages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* currentLanguage = [arrayLanguages objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)