Je veux obtenir le code de langue de l’appareil (en, es …) dans mon application écrite avec Swift. Comment peut-on obtenir ça?
J’essaie ça:
var preferredLanguages : NSLocale! let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)
Mais cela retourne nul.
Merci!
Dans Swift 3
let langStr = Locale.current.languageCode
Il est important de faire la différence entre la langue de l’ application et la langue locale de l’ appareil (le code ci-dessous est dans Swift 3 )
Renverra la langue du périphérique :
let locale = NSLocale.current.languageCode
Retournera la langue de l’ application :
let pre = Locale.preferredLanguages[0]
Pour utiliser la langue courante dans votre application (différente des langues préférées)
NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!
Dans Swift 3:
NSLocale.current.languageCode
Dans Swift 4:
Locale.current.languageCode
swift 3
let prefferedLanguage = Locale.preferredLanguages[0] as Ssortingng print (prefferedLanguage) //en-US let arr = prefferedLanguage.components(separatedBy: "-") let deviceLanguage = arr.first print (deviceLanguage) //en
vous pouvez utiliser le code ci-dessous, il fonctionne bien avec swift 3
var preferredLanguage : Ssortingng = Bundle.main.preferredLocalizations.first!
Je souhaite suivre la langue choisie par l’utilisateur dans l’application Paramètres à chaque fois que l’utilisateur lance mon application – qui n’est pas encore localisée (mon application est en anglais uniquement). J’ai adopté cette logique:
créer un enum pour faciliter le traitement des langues dans le tableau
enum Language: Ssortingng { case none = "" case en = "English" case fr = "French" case it = "Italian" } // add as many languages you want
créer un couple d’ extension à Locale
extension Locale { static var enLocale: Locale { return Locale(identifier: "en-EN") } // to use in **currentLanguage** to get the localizedSsortingng 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.localizedSsortingng(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 } }
Lorsque vous avez besoin, vous pouvez simplement utiliser l’extension
if let currentLanguage = Locale.currentLanguage { print(currentLanguage.rawValue) // Your code here. }