NSLocale Language Issue

ios, locale, nslocale

Solution

To get the language code, use:

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

To get the full name of the language:

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

Note that you were using the region code (which provides for regional variations of languages), and could be gotten easier like this:

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

Region codes start with the language code, followed by the underscore, and then the regional variation. (This is standardized per Apple's documentation.)

Also, if you use `currentLocale`, know that it is not updated as the users preferences are changed. Use `autoupdatingCurrentLocale` instead if you want to keep it in sync if they change.

Problem

So in my app I am trying to get the devices currently set language and its acronym. So I do this: ``` NSString *fullLanguage = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:[[NSLocale preferredLanguages] objectAtIndex:0]]; NSString *abrlanguage = [[NSLocale preferredLanguages] objectAtIndex:0]; ``` However some users report that the language is returning something like: en_UK or something similar, which in turn is messing up the functionality of my app. Anyway is there a way to get the currently set language of the device regardless if the devices regional settings? Thanks!

Original source