swift nslocale

¿Cómo obtener el código de idioma actual con Swift?



nslocale (8)

Quiero obtener el código de idioma del dispositivo (en, es ...) en mi aplicación escrito con Swift. ¿Cómo puede obtener esto?

Estoy intentando esto:

var preferredLanguages : NSLocale! let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)

Pero esto devuelve nil.

¡Gracias!


Deseo hacer un seguimiento del idioma elegido por el usuario en la aplicación Configuración cada vez que el usuario inicie mi aplicación, que aún no está localizado (mi aplicación está solo en inglés). Adopté esta lógica:

  1. crear una enumeración para facilitar el manejo de los idiomas en el conjunto

    enum Language: String { case none = "" case en = "English" case fr = "French" case it = "Italian" } // add as many languages you want

  2. crea un par de extensiones a Locale

    extension Locale { static var enLocale: Locale { return Locale(identifier: "en-EN") } // to use in **currentLanguage** to get the localizedString in English static var currentLanguage: Language? { guard let code = preferredLanguages.first?.components(separatedBy: "-").last else { print("could not detect language code") return nil } guard let rawValue = enLocale.localizedString(forLanguageCode: code) else { print("could not localize language code") return nil } guard let language = Language(rawValue: rawValue) else { print("could not init language from raw value") return nil } print("language: /(code)-/(rawValue)") return language } }

  3. Cuando lo necesite, puede simplemente usar la extensión

    if let currentLanguage = Locale.currentLanguage { print(currentLanguage.rawValue) // Your code here. }


En Swift 3

let langStr = Locale.current.languageCode


En Swift 3:

NSLocale.current.languageCode


Es importante marcar la diferencia entre el idioma de la aplicación y el idioma de la configuración regional del dispositivo (el código de abajo está en Swift 3 )

Devolverá el idioma del dispositivo :

let locale = NSLocale.current.languageCode

Devolverá el idioma de la aplicación :

let pre = Locale.preferredLanguages[0]


Para obtener el idioma actual en su aplicación (diferente a los idiomas preferidos)

NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!


Puede usar el siguiente código que funciona bien con swift 3

var preferredLanguage : String = Bundle.main.preferredLocalizations.first!


En Swift 4:

Locale.current.languageCode


veloz 3

let prefferedLanguage = Locale.preferredLanguages[0] as String print (prefferedLanguage) //en-US let arr = prefferedLanguage.components(separatedBy: "-") let deviceLanguage = arr.first print (deviceLanguage) //en