458 Stimmen

Aktuelle Gerätesprache in iOS abrufen?

Ich möchte die aktuelle Sprache anzeigen, die die Benutzeroberfläche des Geräts verwendet. Welchen Code würde ich verwenden?

Ich möchte dies als NSString in vollständig ausgeschriebener Form. (Nicht @"en_US")

EDIT: Für diejenigen, die vorbeifahren, gibt es hier eine Menge nützlicher Kommentare, da sich die Antwort mit neuen iOS-Versionen weiterentwickelt hat.

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".

2voto

Naresh Punkte 14268

In Swift 4.2 und Xcode 10.1

let language = NSLocale.preferredLanguages[0]
debugPrint(language)//en

In Swift 5.x

let langStr = Locale.current.languageCode
debugPrint(langStr ?? "") //en  el

2voto

Chrysotribax Punkte 739

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.

1voto

Ecuador Punkte 906

Ich habe die ursprüngliche Frage eigentlich falsch gelesen, ich dachte, sie fragte nach der "App UI"-Sprache (danach hatte ich gegoogelt), nicht nach der "Geräte-UI", in diesem Fall wären die besten Antworten die, die preferredLocalizations aber diese Antworten ergeben immer noch einen Code. Es gibt noch einen weiteren Schritt, um eine schöne Zeichenkette zur Anzeige zu erhalten. Also, während die "Gerät UI" Sprache bereits beantwortet ist, wenn Sie eine schöne Zeichenfolge für welche der UI-Sprachen, die Sie unterstützen, ist derzeit in Gebrauch angezeigt werden soll, ist natürlich die einfachste Lösung:

NSLocalizedString(@"currentLanguage", @"")

In jeder Ihrer UI-Lokalisierungen haben Sie sie genau so angegeben, wie Sie sie angezeigt haben möchten. Z.B. in der en Version Ihrer .strings Datei, die Sie haben würden:

"currentLanguage"="English";

in Ihrem fr Version des .strings Datei, die Sie haben würden:

"currentLanguage"="Francais";

usw. Sie müssen sich nicht mit Codes usw. herumschlagen, sondern erstellen Ihre eigenen Strings, die gut zu Ihrer Benutzeroberfläche passen.

1voto

anshul-systematix Punkte 406

SWIFT-4

 // To get device default selected language. It will print like short name of zone. For english, en or spain, es.

let language = Bundle.main.preferredLocalizations.first! as NSString
print("device language",language)

0 Stimmen

Beachten Sie, dass dies die aggregierte Liste der verfügbar (unterstützt durch das Bundle ie you) und bevorzugt (durch den Benutzer) Lokalisierungen. NSLocale.preferredLanguages sollte die vom Benutzer bevorzugten zurückgeben, ohne darauf zu achten, was das Bündel unterstützt.

1voto

CedricSoubrie Punkte 6537

@amir Antwort in Swift :

// Get language prefered by user
let langageRegion = NSLocale.preferredLanguages().first!
let languageDic = NSLocale.componentsFromLocaleIdentifier(langageRegion)
let language = languageDic[NSLocaleLanguageCode]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X