24

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

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

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

谁能指导我如何检索语言设置?

在此处输入图像描述

4

10 回答 10

52

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

NSString *currentLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];

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

NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *lang = [[NSLocale currentLocale] displayNameForKey:NSLocaleLanguageCode value:langID];
于 2011-07-26T11:49:11.630 回答
5

尝试这个:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* arrayLanguages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* currentLanguage = [arrayLanguages objectAtIndex:0];
于 2011-07-26T11:54:33.133 回答
3

获取语​​言和地区Swift

    LF.log("language", NSLocale.preferredLanguages())
    LF.log("locale", NSBundle.mainBundle().preferredLocalizations)

就我而言,我得到:

language: '(
    "zh-Hans"
)'
locale: '(
    en
)'
于 2015-05-08T02:45:49.520 回答
3

Swift 4中:

let currentLanguage = Locale.current.languageCode

它只会给你语言代码,没有国家代码。

于 2018-11-09T06:09:24.150 回答
2

迅速:

let language = NSBundle.mainBundle().preferredLocalizations[0] as NSString
于 2014-12-21T16:05:52.647 回答
2

工作解决方案:

    let language = NSLocale.preferredLanguages()[0]
    let languageDic = NSLocale.componentsFromLocaleIdentifier(language) as NSDictionary
    //let countryCode = languageDic.objectForKey("kCFLocaleCountryCodeKey")
    let languageCode = languageDic.objectForKey("kCFLocaleLanguageCodeKey") as! String
    print(languageCode)
于 2017-01-03T07:41:39.440 回答
1
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 
于 2014-03-10T13:22:43.030 回答
1

在 XCode 的帮助文档中找到解决方案,它写道:

获取当前语言

要从主应用程序包中获取应用程序使用的语言,请使用 NSBundle 类中的 preferredLocalizations 方法:

NSString *languageID = [[NSBundle mainBundle] preferredLocalizations].firstObject;

于 2016-09-05T09:35:29.937 回答
0

使用下面的代码来获取本地化语言,而不会给 en-india、en-us 等带来麻烦。

 NSString *Ph = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];

在 ios9 及之后此代码需要考虑

于 2015-12-18T10:33:19.067 回答
-1

要了解在您的本地化中选择的当前语言,请使用

[[NSBundle mainBundle] preferredLocalizations]

例子:

NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];

得到两个字母的单词

NSString *language = [[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0] substringToIndex:2];

迅速:

let language = NSBundle.mainBundle().preferredLocalizations.first as NSString
于 2015-09-28T13:39:41.207 回答