2012-12-16 13 views
7

Tak więc w mojej aplikacji staram się, aby urządzenia obecnie ustawiały język i jego akronim. Więc to zrobić:NSLocale Language Issue

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

zgłosić Jednak niektórzy użytkownicy, że język jest zwrócenie coś takiego: en_UK lub coś podobnego, co z kolei jest brudząc się funkcjonalność mojej aplikacji.

Czy istnieje sposób na uzyskanie aktualnie ustawionego języka urządzenia, niezależnie od ustawień regionalnych urządzenia?

Dzięki!

+0

Spodziewam się, że po prostu powie "en" bez żadnych dodatkowych informacji regionalnych. –

Odpowiedz

22

Aby otrzymać kod języka używać:

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

Aby uzyskać pełną nazwę język:

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

pamiętać, że były przy użyciu kodu regionu (który przewiduje regionalnych odmianach Języki) i może być łatwiejsze w ten sposób:

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

Kody regionów zaczynają się od języka kod źródłowy, a następnie podkreślenie, a następnie odmiany regionalne. (Jest to ujednolicone w dokumentacji firmy Apple).

Ponadto, jeśli używasz currentLocale, pamiętaj, że nie jest on aktualizowany po zmianie preferencji użytkownika. Użyj zamiast tego opcji autoupdatingCurrentLocale, jeśli chcesz zachować synchronizację, jeśli ulegną zmianie.