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

7voto

dreamlax Punkte 91447

Sie können die displayNameForKey:value: Methode der NSLocale :

// get a French locale instance
NSLocale *frLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"] autorelease];

// use it to get translated display names of fr_FR and en_US
NSLog(@"%@", [frLocale displayNameForKey:NSLocaleIdentifier value:@"fr_FR"]);
NSLog(@"%@", [frLocale displayNameForKey:NSLocaleIdentifier value:@"en_US"]);

Dies wird ausgedruckt:

français (France)
anglais (États-Unis)

Wenn Sie denselben Gebietsschema-Bezeichner für die initWithLocaleIdentifier: und auch die displayNameForKey:value: Methode, dann erhalten Sie den einheimischen Namen der Sprache. Ich habe herausgefunden, dass, wenn Sie den Ländercode entfernen und nur fr y en dass es auch das Land aus dem Anzeigenamen weglässt (zumindest unter Mac OS X, bei iOS bin ich mir nicht sicher).

6voto

Durai Amuthan.H Punkte 30175

Schnell

So rufen Sie die aktuelle Sprache des Geräts ab

NSLocale.preferredLanguages()[0] as String

So erhalten Sie die Sprache der Anwendung

NSBundle.mainBundle().preferredLocalizations[0] as NSString

Note :

Sie holt die Sprache, die Sie in CFBundleDevelopmentRegion der info.plist

si CFBundleAllowMixedLocalizations in info.plist wahr ist, dann ist das erste Element von CFBundleLocalizations in info.plist wird zurückgegeben

5voto

Jovan Stankovic Punkte 4373

Wenn Sie nach dem Code der bevorzugten Sprache ("en", "de", "es" ...) und dem lokalisierten Namen der bevorzugten Sprache (für das aktuelle Gebietsschema) suchen, finden Sie hier eine einfache Erweiterung in Swift:

extension Locale {
    static var preferredLanguageIdentifier: String {
        let id = Locale.preferredLanguages.first!
        let comps = Locale.components(fromIdentifier: id)
        return comps.values.first!
    }

    static var preferredLanguageLocalizedString: String {
        let id = Locale.preferredLanguages.first!
        return Locale.current.localizedString(forLanguageCode: id)!
    }
}

5voto

shailendra Punkte 59

Um die aktuelle Sprache des Geräts abzurufen, verwenden Sie den folgenden Code, der bei mir funktioniert hat.

NSString * myString = [[NSLocale preferredlanguage]objectAtIndex:0];

3voto

Tarik Punkte 529

Mauersegler 3

let locale = Locale.current
let code = (locale as NSLocale).object(forKey: NSLocale.Key.countryCode) as! String?
print(code!)

0 Stimmen

Willkommen bei Stack Overflow! Dieses Stück Code kann zwar die Frage beantworten, aber es ist besser, eine Beschreibung des Problems beizufügen und zu erläutern, wie Ihr Code das Problem lösen wird. Für die Zukunft finden Sie hier einige Informationen, wie man eine geniale Antwort knackt auf Stack Overflow.

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