web-dev-qa-db-fra.com

Comment obtenir les paramètres régionaux de l'application actuelle?

Je dois obtenir les paramètres régionaux actuels. Locale non utilisateur mais locale.

Supposons que mon application comporte deux localisations (dans les paramètres du projet): anglais (par défaut) et français. Si l'utilisateur définit la langue française sur l'iPhone, mon application affichera l'interface française. Si l'utilisateur définit l'allemand sur iPhone, mon application affichera l'interface anglaise (l'anglais étant la langue par défaut).

Alors, comment puis-je obtenir les paramètres régionaux de l'application en cours qui s'affichent actuellement? Merci d'avance.

11
Alexandr

La réponse sélectionnée renvoie la langue actuelle de l'appareil, mais pas la langue réelle utilisée dans l'application. Si vous ne fournissez pas de localisation pour la langue préférée dans votre application:

NSString *language = NSBundle.mainBundle.preferredLocalizations.firstObject;

NSLocale *locale = NSLocale.currentLocale;
NSString *countryCode = [locale objectForKey:NSLocaleCountryCode];

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSString *country = [usLocale displayNameForKey:NSLocaleCountryCode 
                                          value:countryCode];

NSLog(@"country: %@", country);
19
Vijay yadav

Il y a peut-être un moyen plus facile que cela (voir d'autres réponses), mais celui-ci est le plus robuste, et tant que le principe général de localisation d'une application via un fichier strings- n'est pas obsolète, cette méthode fonctionnera.

Généralement, vous n'avez pas besoin d'obtenir les paramètres régionaux de l'application (mais poursuivez votre lecture, c'est possible!) Si vous voulez du texte localisé, vous utilisez NSLocalizedString(). Si vous avez besoin de localiser des images, utilisez des ressources localisées, etc. Cependant, il y a des raisons qui me feraient penser qu'il serait agréable d'obtenir les "paramètres régionaux de l'application", comme vous l'appelez: par exemple, pour l'analyse (vous voulez savoir dans quelle langue votre application est utilisée), ou pour fournir une interface monolingue cohérente avec l'utilisateur si vous utilisez une communication serveur (par exemple, pour localiser les messages d'erreur du serveur dans la même langue que celle que l'utilisateur voit dans l'application).

Si vous souhaitez obtenir la localisation de l'application actuellement visible, je suppose que vous disposez d'un fichier Localizable.strings pour chaque paramètre régional pris en charge. Ainsi, dans le fichier de chaînes anglaises, vous pouvez ajouter la ligne

"lang" = "en";

et dans le fichier de chaînes français vous ajoutez la ligne

"lang" = "fr";

ensuite, vous pouvez toujours obtenir les paramètres régionaux de l'application en appelant NSLocalizedString("lang") (Swift) ou NSLocalizedString(@"lang") (objectif-C). Et bien sûr, chaque fois que vous ajoutez une nouvelle localisation à votre application, vous devez définir une entrée "lang" dans le nouveau fichier de chaînes de localisation.

27
Michael

Dans Swift 3, utilisez:

let language = Bundle.main.preferredLocalizations.first

9

Vous pouvez obtenir le code pays de la région, de cette façon,

NSLocale *currentLocale = [NSLocale currentLocale];  // get the current locale.
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode];

Obtenez le code du pays, par exemple es (Espagne), fr (France), etc.

Vous pouvez mapper ce code pour votre sélection d'interface.

J'espère que cela vous aidera.

3
Viral Savaj

vous pouvez obtenir la langue sélectionnée en utilisant le code suivant.

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

if ([language isEqualToString:@"fr"]){//French
    [do  your stuff]
}
else{//English

   [do  your stuff]
}

List_of_ISO_639-1_codes

J'espère que ceci vous aidera.

0
Jatin Patel