web-dev-qa-db-fra.com

iOS: Comment obtenir le paramètre de langue actuel du périphérique?

Certaines fonctionnalités de mon application sont supposées être basées sur les paramètres de langue du périphérique sur lequel il s'exécute.

Je souhaite connaître la langue réelle et non certains paramètres de pays. Par exemple, si la langue est l'anglais, peu m'importe que ce soit aux États-Unis, au Royaume-Uni, en Australie, etc.

Je connais bien l’objet NSLocale, mais il semble se rapporter au paramètre Region Format et non au paramètre Language (voir la capture d’écran ci-dessous). Ainsi, lorsque j’essaie d’extraire la langue avec [locale displayNameForKey:NSLocaleIdentifier value:[locale localeIdentifier], j’obtiens comme English (United States) au lieu de English; aussi, je pense que ce dont j'ai besoin, c'est le Langue données et non le Région Format (ai-je raison?).

Quelqu'un peut-il m'indiquer comment récupérer le paramètre de langue?

enter image description here

21
Ohad Regev

Les langues préférées de l'utilisateur sont stockées et peuvent être extraites de l'environnement local sous forme de tableau et l'identificateur de langue actuel est le premier objet de ce tableau:

NSString *currentLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];

Si vous souhaitez utiliser un langage plus lisible, utilisez la méthode displayNameForKey:value: de NSLocale:

NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *lang = [[NSLocale currentLocale] displayNameForKey:NSLocaleLanguageCode value:langID];
51
Vladimir

Essaye ça:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* arrayLanguages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* currentLanguage = [arrayLanguages objectAtIndex:0];
5
Sergio

Obtenir la langue et la région dans Swift:

    LF.log("language", NSLocale.preferredLanguages())
    LF.log("locale", NSBundle.mainBundle().preferredLocalizations)

Dans mon cas, je reçois:

language: '(
    "zh-Hans"
)'
locale: '(
    en
)'
3
superarts.org

Solution de travail:

    let language = NSLocale.preferredLanguages()[0]
    let languageDic = NSLocale.componentsFromLocaleIdentifier(language) as NSDictionary
    //let countryCode = languageDic.objectForKey("kCFLocaleCountryCodeKey")
    let languageCode = languageDic.objectForKey("kCFLocaleLanguageCodeKey") as! String
    print(languageCode)
2
iDevAmit

Rapide:

let language = NSBundle.mainBundle().preferredLocalizations[0] as NSString
2
Esqarrouth
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 
1
Mohit

Trouvez la solution dans le document d'assistance de XCode, il écrit:

Obtenir la langue actuelle

Pour obtenir la langue utilisée par l'application à partir du groupe d'applications principal, utilisez la méthode preferredLocalizations dans la classe NSBundle:

NSString *languageID = [[NSBundle mainBundle] preferredLocalizations].firstObject;

1
liwp_Stephen

Dans Swift 4

let currentLanguage = Locale.current.languageCode

Cela vous donnera juste le code de langue, pas de code de pays.

0
mumu

Utilisez le code ci-dessous pour récupérer la langue localisée sans avoir de problème en-india, en-us etc. 

 NSString *Ph = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];

Dans et après ios9, ce code doit prendre en compte

0
Esha

Pour connaître la langue sélectionnée dans vos localisations, utilisez

[[NSBundle mainBundle] preferredLocalizations]

Exemple:

NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];

Pour obtenir un mot de deux lettres

NSString *language = [[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0] substringToIndex:2];

Rapide:

let language = NSBundle.mainBundle().preferredLocalizations.first as NSString
0
Azhar