IOS: Как получить текущую настройку языка устройства?
В моем приложении есть некоторые функции, которые должны основываться на языковых настройках устройства, на котором оно работает.
Я хочу получить фактический язык, а не настройки какой-либо страны. Например, если язык является английским, мне все равно, если это США, Великобритания, Австралия и т.д.
Я знаком с объектом NSLocale
, но он, похоже, относится к параметру Region Format
, а не к настройке Язык (см. снимок экрана ниже), поэтому, когда я пытаюсь получить язык из него с помощью [locale displayNameForKey:NSLocaleIdentifier value:[locale localeIdentifier]
Я получаю такие вещи, как English (United States)
вместо English
; Кроме того, я думаю, что мне нужны данные Language, а не Формат региона (я прав?).
Может ли кто-нибудь указать мне, как восстановить языковые настройки?
![enter image description here]()
Ответы
Ответ 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)