2015-09-18 4 views
6

Wie bekomme ich jetzt die tatsächliche Systemsprache? Es scheint, dass sie regionales Suffix nach dem letzten Strich setzen. Also vor cs ist jetzt cs-DE wenn die Sprache Tschechisch ist und regionale Einstellung ist Deutsch. Aber es gibt einige Sprachen, die nicht das Suffix wie GB-Sprache en-GB haben, aber regionale Einstellung ist deutsch.iOS9 AppleLanguages ​​anders als ältere iOS

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; 
NSArray* language = [defs objectForKey:@"AppleLanguages"]; 
NSString* preferredLang = [language objectAtIndex:0]; 
NSLog(@"localeIdentifier: %@", preferredLang); 

Antwort

9

Verwenden Sie die componentsFromLocaleIdentifier Methode von NSLocale Klasse

Here is the documentation

Sie können wie folgt tun:

NSString* localeID = [NSLocale currentLocale].localeIdentifier; 
NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:localeID]; 
NSString* languageID = components[NSLocaleLanguageCode]; 

EDIT

gibt es die Sprache auf diese Weise werden einige Probleme schaffen, wenn die Sprache, die die App gerade übersetzt Ated ist nicht die Sprache des Geräts. In der Tat wird components[NSLocaleLanguageCode] die Sprache des Geräts zurückgeben.

Um die aktuelle Sprache der App zu erhalten, sollten Sie [[NSBundle mainBundle] preferredLocalizations].firstObject verwenden.

Um das Gerät in der Region zu erhalten, können Sie immer noch components[NSLocaleCountryCode]

+0

localeID verwenden NSString ich – kubo

+0

tatsächlich gues sein sollte, festgelegt;) – Imotep

5

Ich lief gerade in letzter Zeit auf dieses Problem. Nach Apple's documentation, erhalten Sie die Gebietsschema-ID mit Regionsbezeichner, die für wie [language designator]-[region designator] auf iOS 9. Ich fand eine Lösung, wenn Sie nur die Gebietsschema-ID erhalten möchten, können Sie
[[NSBundle mainBundle] preferredLocalizations] verwenden.

1

Eine weitere Lösung, wenn irgendeine von Ihnen gefällt,

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


    if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 2) 
      currentLanguage = [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0]; 

    // Only for chinese Language. 
    else if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 3) 
     currentLanguage = [NSString stringWithFormat:@"%@-%@", [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0], 
          [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:1] 
          ]; 

„current“ Wollen Sie Ihre aktuelle Langauge geben, so dass Sie es für localize oder Weiterverwendung verwenden können.