Показать язык локали полностью - PullRequest
6 голосов
/ 11 февраля 2010

Я получаю предпочитаемый пользователем язык из приведенного ниже кода:

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString *language = [languages objectAtIndex:0];

Это вернет что-то вроде «en» для «английского» или «de» для «Deutsch». Есть ли способ, которым я могу автоматически получить полное имя языка, то есть английский вместо en?

Спасибо!

Михай Фоноаге

Ответы [ 4 ]

36 голосов
/ 14 мая 2010

Чтобы получить список предпочитаемых языков пользователя, используйте [NSLocale preferredLanguages]. Это возвращает массив строк кода языка. Чтобы преобразовать эти языковые коды в отображаемое имя, необходимо использовать метод экземпляра NSLocale displayNameForKey:value: с ключом NSLocalIdentifier.

Для отображения имени языка в вашей текущей локали, вызовите этот метод на [NSLocale currentLocale] - в моем случае «de» становится «German». Если вам нужно имя на самом языке, сначала создайте экземпляр NSLocale для этого языка, а затем используйте этот объект в качестве получателя. Например, "de" становится "Deutsch" на немецком языке.

Этот код должен прояснить:

NSArray *languages = [NSLocale preferredLanguages];
for (NSString *language in languages) {
  NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:language];
  NSLog(@"language code = %@, display name = %@, in language = %@",
        language,
        [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:language],
        [locale displayNameForKey:NSLocaleIdentifier value:language]);
}

И вывод на мой iPhone:

language code = en, display name = English, in language = English
language code = zh-Hans, display name = Chinese (Simplified Han), in language = 中文 (简体中文)
language code = ja, display name = Japanese, in language = 日本語
language code = pt, display name = Portuguese, in language = português
language code = de, display name = German, in language = Deutsch
language code = fr, display name = French, in language = français
language code = nl, display name = Dutch, in language = Nederlands
language code = it, display name = Italian, in language = italiano
language code = es, display name = Spanish, in language = español
language code = pt-PT, display name = Portuguese (Portugal), in language = português (Portugal)
language code = da, display name = Danish, in language = dansk
language code = fi, display name = Finnish, in language = suomi
language code = nb, display name = Norwegian Bokmål, in language = norsk bokmål
language code = sv, display name = Swedish, in language = svenska
language code = ko, display name = Korean, in language = 한국어
language code = zh-Hant, display name = Chinese (Traditional Han), in language = 中文 (繁體中文)
language code = ru, display name = Russian, in language = русский
language code = pl, display name = Polish, in language = polski
language code = tr, display name = Turkish, in language = Türkçe
language code = uk, display name = Ukrainian, in language = українська
language code = ar, display name = Arabic, in language = العربية
language code = hr, display name = Croatian, in language = hrvatski
language code = cs, display name = Czech, in language = čeština
language code = el, display name = Greek, in language = Ελληνικά
language code = he, display name = Hebrew, in language = עברית
language code = ro, display name = Romanian, in language = română
language code = sk, display name = Slovak, in language = slovenský
language code = th, display name = Thai, in language = ไทย
language code = id, display name = Indonesian, in language = Bahasa Indonesia
4 голосов
/ 25 апреля 2010
NSArray *languages = [[NSBundle mainBundle] localizations];
NSString *language = [languages objectAtIndex:0];
1 голос
/ 06 августа 2012

Для строки полного языка, например "английский", а не только "en"

NSString * language = [NSString stringWithFormat:@"%@",[[NSLocale preferredLanguages] objectAtIndex:0]];


language = [NSString stringWithFormat:@"%@",[[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:language]];
NSLog(@"Language=%@",language);

Это довольно просто для меня в строке языка, вы получите полное имя вашего устройства текущий язык.

1 голос
/ 12 февраля 2010

К сожалению, я считаю, что вам нужно будет создать таблицу поиска для кодов языков. Это ISO 639-1 коды . Дополнительные сведения см. В разделе «Обозначения языков и локалей» в руководстве «Темы программирования интернационализации».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...