Проблема с языком NSLocale

Итак, в моем приложении я пытаюсь получить устройства, которые в настоящее время устанавливают язык и его аббревиатуру. Итак, я делаю это:

NSString *fullLanguage = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:[[NSLocale preferredLanguages] objectAtIndex:0]];
NSString *abrlanguage = [[NSLocale preferredLanguages] objectAtIndex:0];

Однако некоторые пользователи сообщают, что язык возвращает что-то вроде: en_UK или что-то подобное, что, в свою очередь, нарушает функциональность моего приложения.

В любом случае, есть ли способ получить текущий установленный язык устройства независимо от региональных настроек устройства?

Спасибо!


person SimplyKiwi    schedule 16.12.2012    source источник
comment
Я ожидаю, что он просто скажет en без какой-либо дополнительной региональной информации.   -  person SimplyKiwi    schedule 17.12.2012


Ответы (1)


Чтобы получить код языка, используйте:

NSString *languageCode = [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode];
NSLog(@"%@", languageCode);  // Prints "en"

Чтобы получить полное название языка:

NSString *languageName = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:languageCode];
NSLog(@"%@", languageName);  // Prints "English"

Обратите внимание, что вы использовали код региона (который обеспечивает региональные варианты языков), и его можно было упростить следующим образом:

NSString *regionCode = [[NSLocale currentLocale] objectForKey:NSLocaleIdentifier];
NSLog(@"%@", regionCode);  // Prints "en_US"

Коды регионов начинаются с кода языка, за которым следует символ подчеркивания, а затем региональный вариант. (Это стандартизировано в соответствии с документацией Apple.)

Кроме того, если вы используете currentLocale, знайте, что он не обновляется по мере изменения настроек пользователя. Вместо этого используйте autoupdatingCurrentLocale, если вы хотите синхронизировать его, если они изменятся.

person lnafziger    schedule 17.12.2012