web-dev-qa-db-fra.com

Comment obtenir le code de langue actuel avec Swift?

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!

97
user3739367

Dans Swift 3

let langStr = Locale.current.languageCode
155
Vadim Motorine

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]
66
raed

Pour obtenir la langue actuelle utilisée dans votre application (différente des langues préférées)

NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!
36
Benknopf

Dans Swift 3:

NSLocale.current.languageCode
36
mazorati

Dans Swift 5.1:

Locale.current.languageCode
28

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.

17
codeByThey

Swift

let preferredLanguage = Locale.preferredLanguages[0] as String
print (preferredLanguage) //en-US

let arr = preferredLanguage.components(separatedBy: "-")
let deviceLanguage = arr.first
print (deviceLanguage) //en
11
Bassant Ashraf

vous pouvez utiliser le code ci-dessous cela fonctionne très bien avec Swift 3

var preferredLanguage : String = Bundle.main.preferredLocalizations.first!
5
Amr Angry

Dans Swift, vous pouvez obtenir les paramètres régionaux à l'aide de.

let locale = Locale.current.identifier
5
Yogesh Bharate

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:

  1. 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
    
  2. 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
        }
    }
    
  3. Lorsque vous avez besoin, vous pouvez simplement utiliser l'extension

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