Получить текущий язык устройства в iOS? - PullRequest
413 голосов
/ 12 октября 2010

Я хотел бы показать текущий язык, который использует пользовательский интерфейс устройства. Какой код я бы использовал?

Я хочу это как NSString в полностью прописанном формате. (Не @ "en_US")

РЕДАКТИРОВАТЬ: Для тех, кто проезжает мимо, здесь есть масса полезных комментариев, поскольку ответ эволюционировал с новыми выпусками iOS.

Ответы [ 29 ]

5 голосов
/ 27 декабря 2016

Я пытался найти правильное решение для себя.Когда я использую Locale.preferredLanguages.first был возвращен предпочитаемый язык из настроек вашего приложения.

Если вы хотите узнать язык в настройках пользовательского устройства, используйте следующую строку:

Swift 3

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

Чтобы развернутьи используйте взгляд на строку ниже:

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

    // For example
    if currentDeviceLanguage == "he" {
        UIView.appearance().semanticContentAttribute = .forceRightToLeft
    } else {
        UIView.appearance().semanticContentAttribute = .forceLeftToRight
    }
}
5 голосов
/ 27 июня 2013

Чтобы получить текущий язык пользовательского устройства, используйте следующий код, который работал для меня.

NSString * myString = [[NSLocale preferredlanguage]objectAtIndex:0];
3 голосов
/ 15 декабря 2017

Если вы ищете код предпочитаемого языка ("en", "de", "es" ...) и локализованное имя предпочитаемого языка (для текущей локали), вот простое расширение в 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)!
}

}

3 голосов
/ 10 апреля 2012

Для разработчиков MonoTouch C # используйте:

NSLocale.PreferredLanguages.FirstOrDefault() ?? "en"

Примечание: я знаю, что это был вопрос для iOS, но, поскольку я являюсь разработчиком MonoTouch, ответ на этой странице привел меня в правильном направлении, и я решил поделиться результатами.

3 голосов
/ 05 января 2017

Swift 3

let locale = Locale.current
let code = (locale as NSLocale).object(forKey: NSLocale.Key.countryCode) as! String?
print(code!)
3 голосов
/ 24 мая 2017

Функция Simple Swift 3:

  @discardableResult
  func getLanguageISO() -> String {
    let locale = Locale.current
    guard let languageCode = locale.languageCode,
          let regionCode = locale.regionCode else {
        return "de_DE"
    }
    return languageCode + "_" + regionCode
  }
3 голосов
/ 06 октября 2016

В Swift:

let languageCode = NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode) as? String
2 голосов
/ 08 октября 2013
-(NSString *)returnPreferredLanguage { //as written text

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSArray *preferredLanguages = [defaults objectForKey:@"AppleLanguages"];
NSString *preferredLanguageCode = [preferredLanguages objectAtIndex:0]; //preferred device language code
NSLocale *enLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"]; //language name will be in English (or whatever)
NSString *languageName = [enLocale displayNameForKey:NSLocaleIdentifier value:preferredLanguageCode]; //name of language, eg. "French"
return languageName;

}
2 голосов
/ 08 октября 2015

Если вы хотите получить только язык, вот мой предложенный ответ:

NSString *langplusreg = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString * langonly = [[langplusreg componentsSeparatedByString:@"-"] 
objectAtIndex:0];

В моем случае я просто хотел только язык локали, а не регион локали.

Вывод: Если языком локали является японский, а регионом локали является Япония, то:

langplusreg = ja-JP

langonly = ja

1 голос
/ 10 апреля 2019

В Swift 4.2 и Xcode 10.1

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