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

18voto

norbDEV Punkte 4167

iOS13, Swift 5+, WWDC2019 https://developer.apple.com/videos/play/wwdc2019/403/

Benutzer können die bevorzugte Sprache einer Anwendung unabhängig von der Sprache des Betriebssystems auswählen.

Sie können diese verwenden:

    // Returns a list of the user's preferred languages.
    // Maybe more than (or none of) your app supports!
    Locale.preferredLanguages

    // a subset of this bundle's localizations, re-ordered into the preferred order
    // for this process's current execution environment; the main bundle's preferred localizations
    // indicate the language (of text) the user is most likely seeing in the UI
    Bundle.main.preferredLocalizations

    // The current running app language
    Bundle.main.preferredLocalizations.first

    // list of language names this bundle appears to be localized to
    Bundle.main.localizations

12voto

enzoyang Punkte 847

Ich benutze dies

    NSArray *arr = [NSLocale preferredLanguages];
for (NSString *lan in arr) {
    NSLog(@"%@: %@ %@",lan, [NSLocale canonicalLanguageIdentifierFromString:lan], [[[NSLocale alloc] initWithLocaleIdentifier:lan] displayNameForKey:NSLocaleIdentifier value:lan]);
}

Speicherleck ignorieren..

und das Ergebnis ist

2013-03-02 20:01:57.457 xx[12334:907] zh-Hans: zh-Hans 
2013-03-02 20:01:57.460 xx[12334:907] en: en English
2013-03-02 20:01:57.462 xx[12334:907] ja: ja 
2013-03-02 20:01:57.465 xx[12334:907] fr: fr français
2013-03-02 20:01:57.468 xx[12334:907] de: de Deutsch
2013-03-02 20:01:57.472 xx[12334:907] nl: nl Nederlands
2013-03-02 20:01:57.477 xx[12334:907] it: it italiano
2013-03-02 20:01:57.481 xx[12334:907] es: es español

0 Stimmen

Nur aus Neugier, wo ist das Speicherleck hier?

0 Stimmen

Leck - [[[NSLocale alloc] initWithLocaleIdentifier:lan].

1 Stimmen

Allerdings nur für Nicht-ARC-Projekte.

12voto

Erik B Punkte 38197

Übersetzen von Sprachcodes wie en_US in Englisch (Vereinigte Staaten) ist eine eingebaute Funktion von NSLocale y NSLocale ist es egal, woher Sie die Sprachcodes beziehen. Es gibt also wirklich keinen Grund, eine eigene Übersetzung zu implementieren, wie es die akzeptierte Antwort vorschlägt.

// Example code - try changing the language codes and see what happens
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"];
NSString *l1 = [locale displayNameForKey:NSLocaleIdentifier value:@"en"];
NSString *l2 = [locale displayNameForKey:NSLocaleIdentifier value:@"de"];
NSString *l3 = [locale displayNameForKey:NSLocaleIdentifier value:@"sv"];
NSLog(@"%@, %@, %@", l1, l2, l3);

Drucke: Englisch, Deutsch, Schwedisch

2 Stimmen

Eigentlich sollten Sie [NSLocale autoupdatingCurrentLocale] verwenden, um Ihre Gebietsschema-Instanz zu initialisieren. Auf diese Weise werden die Sprachnamen in der Muttersprache des Benutzers angezeigt. Zum Beispiel wird Schwedisch zu Svenska.

8voto

Roman Romanenko Punkte 670

Ich habe versucht, die richtige Lösung für mich zu finden. Wenn ich Locale.preferredLanguages.first wurde die bevorzugte Sprache aus den Einstellungen Ihrer Anwendung zurückgegeben.

Wenn Sie die Sprache über die Geräteeinstellungen des Benutzers erfahren möchten, sollten Sie die folgende Zeichenfolge verwenden:

Mauersegler 3

let currentDeviceLanguage = Locale.current.languageCode
// Will return the optional String

Zum Auspacken und Verwenden siehe die Zeile unten:

if let currentDeviceLanguage = Locale.current.languageCode {
    print("currentLanguage", currentDeviceLanguage)

    // For example
    if currentDeviceLanguage == "he" {
        UIView.appearance().semanticContentAttribute = .forceRightToLeft
    } else {
        UIView.appearance().semanticContentAttribute = .forceLeftToRight
    }
}

0 Stimmen

Sie müssen nicht auspacken, wenn Sie dieses Bundle.main.preferredLocalizations[0] as String verwenden

8voto

Praveenkumar Punkte 25555

Es gibt sogar einen besseren Weg, die aktuelle Gerätesprache zu erhalten. Versuchen wir es mit folgendem Code -

NSLog(@"Current Language - %@", [[NSLocale preferredLanguages] firstObject]);

Vorgeschlagen von Abizern auf aquí

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