Подтвердить что ты не робот

IOS: Как получить текущую настройку языка устройства?

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

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

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

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

enter image description here

4b9b3361

Ответ 1

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

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

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

NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *lang = [[NSLocale currentLocale] displayNameForKey:NSLocaleLanguageCode value:langID];

Ответ 2

Попробуйте следующее:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* arrayLanguages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* currentLanguage = [arrayLanguages objectAtIndex:0];

Ответ 3

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

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

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

language: '(
    "zh-Hans"
)'
locale: '(
    en
)'

Ответ 4

Swift:

let language = NSBundle.mainBundle().preferredLocalizations[0] as NSString

Ответ 5

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

Ответ 6

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

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

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

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

Ответ 7

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

[[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

Ответ 8

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

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

В и после ios9 этот код нужно взять в cosideration

Ответ 9

Рабочее решение:

    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)