Показать язык локали полностью

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

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

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

спасибо!

Михай Fonoage

4 ответов


NSArray *languages = [[NSBundle mainBundle] localizations];
NSString *language = [languages objectAtIndex:0];

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

для отображаемого имени языка в текущей локали, вызовите этот метод на [NSLocale currentLocale] -- в моем случае "de "становится"немецким". Если вам нужно имя на самом языке, сначала создайте 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

для полной языковой строки, такой как" English", а не только" en"

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


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

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


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