Es liegt auf der Hand, dass die Lösungen, die sich zum Beispiel auf
[[NSLocale preferredLanguages] objectAtIndex:0]
funktionieren in der Regel einwandfrei und geben die aktuelle Gerätesprache zurück.
In einigen Fällen könnte dies jedoch irreführend sein:
Wenn die Anwendung, in der Sie diesen Wert abrufen möchten, die Sprache bereits geändert hat, zum Beispiel mit dieser Art von Code:
NSString *lg = @"en"; // or anything like @"en", @"fr", etc.
[[NSUserDefaults standardUserDefaults]
setObject:[NSArray arrayWithObjects:lg, nil]
forKey:@"AppleLanguages"]
In diesem Fall ist die [NSLocale preferredLanguages] gibt tatsächlich die bevorzugte Sprache zurück, die in dieser bestimmten Anwendung eingestellt ist (und verwendet wird), nicht die aktuelle Gerätesprache!
Und... in diesem Fall ist die einzige Möglichkeit, die tatsächliche aktuelle Gerätesprache (und nicht die zuvor in der App eingestellte) zu erhalten, zunächst das Löschen des Schlüssels @"appleLanguages" in NSUserDefaults, wie folgt:
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"AppleLanguages"];
Dann gibt [NSLocale preferredLanguages] jetzt den richtigen Wert zurück.
Ich hoffe, das hilft.
1 Stimmen
Dies ist eingebaut in
NSLocale
. Siehe meine Antwort.18 Stimmen
iOS9 Kommentar: achten Sie darauf, dass Apple aus irgendeinem Grund das Format geändert hat, das von
[NSLocale preferredLanguages]
. früher wurde sie durch einen Unterstrich getrennt (z. B.en_US
), aber jetzt wurde er in einen Bindestrich umgewandelt:en-US
7 Stimmen
Mehr zu iOS9: Der Erhalt von [NSLocale preferredLanguages] auf einem iOS 8.4-Simulator im Vergleich zu einem 9.0-Simulator weist ebenfalls Diskrepanzen auf. Auf iOS 8.4 ist es "en" und iOS 9.0 ist es "en-US".
0 Stimmen
Dieser Kommentar hat mir sehr geholfen! Wir steckten mit einem einfachen Problem fest und fragten uns, was etwa 1 Stunde lang falsch lief, bis ich Ihren Kommentar sah.
4 Stimmen
NSLocale
hat MethodencomponentsFromLocaleIdentifier:
ylocaleIdentifierFromComponents:
die wahrscheinlich der richtige Weg sind, um das (potenziell veränderbare) Format zu handhaben.