Fully display the locale language

I get the preferred user language from the code below:

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

This will return something like "en" for "English" or "de" for "Deutsch". Is there a way to automatically get the full name of the language, i.e. English, not en?

Thanks!

Mihai Fonoaj

+6
iphone
source share
4 answers
 NSArray *languages = [[NSBundle mainBundle] localizations]; NSString *language = [languages objectAtIndex:0]; 
+4
source share

For a list of preferred languages, use [NSLocale preferredLanguages] . This returns an array of lines of language code. To convert these language codes into a display name, you need to use the NSLocale instance method displayNameForKey:value: with the NSLocalIdentifier key.

For the display name of the language in your current locale, call this method on [NSLocale currentLocale] - in my case, "de" will become "German". If you need a name in the language itself, first create an instance of NSLocale for that language, and then use this object as the receiver. For example, "de" becomes "Deutsch", in German.

This code should clarify:

 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]); } 

And the output on my 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 
+36
source share

Unfortunately, I believe that you will need to create a lookup table for language codes. These are ISO 639-1 codes . See the "Language and Locale Designations" section of the Internationalization Programming Guide section for more information.

+1
source share

For a complete language string such as "English", not just "en"

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

Its quite simple for me in the language bar you will get the full name of your current device language.

+1
source share

All Articles