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?
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];
Essaye ça:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* arrayLanguages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* currentLanguage = [arrayLanguages objectAtIndex:0];
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
)'
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)
Rapide:
let language = NSBundle.mainBundle().preferredLocalizations[0] as NSString
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
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;
Dans Swift 4 :
let currentLanguage = Locale.current.languageCode
Cela vous donnera juste le code de langue, pas de code de pays.
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
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