2012-12-16 11 views
7

Also in meiner App versuche ich, die Geräte derzeit Sprache und ihre Abkürzung zu setzen. So mache ich das:NSLocale Language Issue

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

jedoch einige Nutzer berichten, dass die Sprache etwas zurückgibt, wie: en_UK oder etwas ähnliches, was wiederum die Funktionalität meiner App vermasselt.

Wie auch immer gibt es eine Möglichkeit, die aktuell eingestellte Sprache des Gerätes unabhängig davon zu bekommen, ob die Geräte regionale Einstellungen haben?

Danke!

+0

Ich erwarte es nur "en" zu sagen ohne zusätzliche regionale Informationen dahinter. –

Antwort

22

Um den Sprachcode zu erhalten, verwenden:

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

den vollständigen Namen, die Sprache zu erhalten:

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

Beachten Sie, dass Sie den Regionalcode verwendet wurden (die von der regionalen Variationen bietet Sprachen), und könnte einfacher wie folgt erhalten werden:

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

Regionscodes beginnen mit der Sprache Code, gefolgt von dem Unterstrich, und dann die regionale Variante. (Dies ist nach Apple-Dokumentation standardisiert.)

Auch, wenn Sie currentLocale verwenden, wissen Sie, dass es nicht aktualisiert wird, wie die Benutzereinstellungen geändert werden. Verwenden Sie stattdessen autoupdatingCurrentLocale, wenn Sie sie bei Änderungen synchron halten möchten.