Je veux obtenir le code de langue de l'appareil (en, es ...) dans mon application écrite avec Swift. Comment peut-on l'obtenir?
J'essaye ceci:
var preferredLanguages : NSLocale!
let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)
Mais cela revient à zéro.
Merci!
Dans Swift 3
let langStr = Locale.current.languageCode
Il est important de faire la différence entre le langue de l'application et le langue de l'environnement local du périphérique (le code ci-dessous se trouve dans Swift)
Retourne le Device language:
let locale = NSLocale.current.languageCode
Renverra le App langue:
let pre = Locale.preferredLanguages[0]
Pour obtenir la langue actuelle utilisée dans votre application (différente des langues préférées)
NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!
Dans Swift 3:
NSLocale.current.languageCode
Dans Swift 5.1:
Locale.current.languageCode
Swift 3 & 4 & 4.2 & 5
Locale.current.languageCode
ne compile pas régulièrement. Parce que vous n'avez pas implémenté la localisation pour votre projet.
Vous avez deux solutions possibles
1) String(Locale.preferredLanguages[0].prefix(2))
Le téléphone est renvoyé correctement.
Si vous voulez obtenir le type en-En
, vous pouvez utiliser Locale.preferredLanguages[0]
2) Sélectionnez Project(MyApp)
-> Project (not Target)
-> appuyez sur le bouton + dans Localizations
, puis ajoutez la langue de votre choix.
Swift
let preferredLanguage = Locale.preferredLanguages[0] as String
print (preferredLanguage) //en-US
let arr = preferredLanguage.components(separatedBy: "-")
let deviceLanguage = arr.first
print (deviceLanguage) //en
vous pouvez utiliser le code ci-dessous cela fonctionne très bien avec Swift 3
var preferredLanguage : String = Bundle.main.preferredLocalizations.first!
Dans Swift, vous pouvez obtenir les paramètres régionaux à l'aide de.
let locale = Locale.current.identifier
Je souhaite suivre la langue choisie par l'utilisateur dans l'application Paramètres à chaque lancement de mon application, qui n'est pas encore localisée (mon application est uniquement en anglais). J'ai adopté cette logique:
créer un enum pour faciliter la gestion des langues dans array
enum Language: String {
case none = ""
case en = "English"
case fr = "French"
case it = "Italian"
} // add as many languages you want
créer un couple de extension à 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
}
}
Lorsque vous avez besoin, vous pouvez simplement utiliser l'extension
if let currentLanguage = Locale.currentLanguage {
print(currentLanguage.rawValue)
// Your code here.
}