iOS: как получить текущие настройки языка устройства? - PullRequest
21 голосов
/ 26 июля 2011

В моем приложении есть некоторые функции, которые, как предполагается, основаны на языковых настройках устройства, на котором оно работает.

Я хочу получить реальный язык, а не некоторые настройки страны.Например, если английский язык, мне все равно, США, Великобритания, Австралия и т. Д.

Я знаком с объектом NSLocale, но, похоже, он относится кRegion Format, а не Language (см. Снимок экрана ниже), поэтому, когда я пытаюсь извлечь из него язык, используя [locale displayNameForKey:NSLocaleIdentifier value:[locale localeIdentifier], я получаю такие вещи, как English (United States) вместо English;Кроме того, я думаю, что мне нужны данные Language , а не Region Format (я прав?).

Может кто-нибудь подсказать мне, как получитьнастройка языка?

enter image description here

Ответы [ 10 ]

51 голосов
/ 26 июля 2011

Сохраненные предпочтительные для пользователя языки могут быть получены из локали в виде массива, и идентификатор текущего языка является первым объектом в этом массиве:

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

Если вы хотите, чтобы язык был более читабельным, используйте метод displayNameForKey:value:NSLocale:

NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *lang = [[NSLocale currentLocale] displayNameForKey:NSLocaleLanguageCode value:langID];
5 голосов
/ 26 июля 2011

Попробуйте это:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* arrayLanguages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* currentLanguage = [arrayLanguages objectAtIndex:0];
3 голосов
/ 08 мая 2015

Получение языка и региона в Swift:

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

В моем случае я получаю:

language: '(
    "zh-Hans"
)'
locale: '(
    en
)'
2 голосов
/ 03 января 2017

Рабочий раствор:

    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)
2 голосов
/ 21 декабря 2014

Swift:

let language = NSBundle.mainBundle().preferredLocalizations[0] as NSString
1 голос
/ 09 ноября 2018

In Swift 4 :

let currentLanguage = Locale.current.languageCode

Он даст вам только код языка, без кода страны.

1 голос
/ 05 сентября 2016

Найдите решение в вспомогательном документе XCode, в нем написано:

Получение текущего языка

Чтобы получить язык, который приложение использует из основного пакета приложения, используйте метод предпочитаемое расположение вкласс NSBundle:

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

1 голос
/ 10 марта 2014
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 
0 голосов
/ 18 декабря 2015

Используйте приведенный ниже код для извлечения локализованного языка, не беспокоясь об en-india, en-us и т. Д.

0 голосов
/ 28 сентября 2015

Чтобы узнать текущий язык, выбранный в вашей локализации, используйте

[[NSBundle mainBundle] preferredLocalizations]

Пример:

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

Чтобы получить двухбуквенное слово

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

Swift:

let language = NSBundle.mainBundle().preferredLocalizations.first as NSString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...