Je voudrais montrer la langue actuelle que l'interface utilisateur de l'appareil utilise. Quel code devrais-je utiliser?
Je veux que ce soit dans un NSString
format entièrement expliqué. (Pas @ "en_US")
EDIT: Pour ceux qui passent, il y a une tonne de commentaires utiles ici, car la réponse a évolué avec les nouvelles versions d'iOS.
NSLocale
. Voir ma réponse.[NSLocale preferredLanguages]
. il était séparé par un trait de soulignement (par exempleen_US
), mais maintenant il a été changé en tiret:en-US
NSLocale
a des méthodescomponentsFromLocaleIdentifier:
etlocaleIdentifierFromComponents:
qui sont probablement la bonne façon de gérer le format (potentiellement modifiable).Réponses:
Les solutions fournies renverront en fait la région actuelle de l'appareil - pas la langue actuellement sélectionnée. Ce sont souvent les mêmes. Cependant, si je suis en Amérique du Nord et que je mets ma langue au japonais, ma région sera toujours l'anglais (États-Unis). Pour récupérer la langue actuellement sélectionnée, vous pouvez:
Cela renverra un code à deux lettres pour la langue actuellement sélectionnée. "en" pour l'anglais, "es" pour l'espagnol, "de" pour l'allemand, etc. Pour plus d'exemples, veuillez consulter cette entrée Wikipedia (en particulier, la colonne 639-1):
Liste des codes ISO 639-1
Il suffit ensuite de convertir les codes à deux lettres en la chaîne que vous souhaitez afficher. Donc, si c'est "en", affichez "Anglais".
J'espère que cela aidera quelqu'un qui cherche à faire la différence entre la région et la langue actuellement sélectionnée.
ÉDITER
Vaut la peine de citer les informations d'en-tête de NSLocale.h:
Les personnes intéressées par le langage de l'application regardent la réponse de @ mindvision
la source
NSLocale preferredLanguages
modifiée. Si auparavant vous obteniez "en" uniquement, dans iOS 9, vous obtiendrez "en-US" ou "en-JP", etc. Référence: happyteamlabs.com/blog/…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 dans votre application pour la langue préférée de l'utilisateur, la première localisation disponible, commandée par la commande préférée de l'utilisateur, est utilisée.
Pour découvrir la langue actuellement sélectionnée dans vos localisations, utilisez
Exemple:
Rapide:
la source
Solution pour iOS 9:
langue = "en-US"
languageDic aura les composants nécessaires
countryCode = "US"
languageCode = "en"
la source
Cela vous donnera probablement ce que vous voulez:
Il affichera le nom de la langue, dans la langue elle-même. Par exemple:
la source
Les réponses acceptées et les autres ne tiennent pas compte du fait que la langue préférée peut être une autre langue que la langue de l'appareil .
La langue de l'appareil est la langue dans laquelle les éléments du système d'exploitation et les applications Apple sont présentés.
La langue préférée est la langue dans laquelle l'utilisateur souhaite que les applications soient localisées. Apple ne fournit qu'un ensemble limité de traductions. Si la langue préférée est une langue vers laquelle Apple a traduit ses applications, ce sera également la langue de l'appareil. Cependant, si l'utilisateur préfère une langue pour laquelle Apple ne fournit pas de traductions, l' appareil et les langues préférées ne correspondent pas . La langue de l'appareil ne sera pas en première position dans la liste des langues préférées.
La fonction suivante va parcourir la liste des langues préférées et vérifier s'il y a une traduction dans les frameworks Apple. La première langue à traduire est la langue de l'appareil. La fonction renverra son code de langue.
Cela fonctionne si la liste des langues préférées est:
La liste des langues préférées peut être modifiée dans : Settings.app -> General -> Language & Region -> Preferred Language Order
Vous pouvez alors utiliser le code de langue de l'appareil et le traduire en nom de langue. Les lignes suivantes imprimeront la langue de l'appareil dans la langue de l'appareil. Par exemple, "Español" si l'appareil est réglé sur l'espagnol.
la source
NSBundle(forClass: UIView.self)
vous essayez de fournir la langue la plus spécifique pour une vue donnée. Cependant, en utilisant cela, j'ai rencontré un problème où, pour la classe donnée, une langue n'était pas retournée. J'ai changé l'initialisation enNSBundle.mainBundle()
et est retourné le code de langue attendu.mainBundle()
semble être celle recommandée par Apple comme suggéré dans l' en- têteNSLocale
,// note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information
.NSBundle.mainBundle()
renvoie le bundle de votre application, tandis queNSBundle(forClass: UIView.self)
le bundle UIKit du système. la méthode décrite recherche les répertoires du bundle. votre ensemble d'applications ne contiendra que celles des langues dans lesquelles vous souhaitez localiser. pour déterminer la langue de l'appareil, vous devrez vérifier l'ensemble du système.NSLocale.preferredLanguages()
. j'ai mis à jour la réponse pour prendre en charge iOS 9 .j'utilise ceci
ignorer la fuite de mémoire ..
et le résultat est
la source
La traduction de codes de langue tels que en_US en anglais (États-Unis) est une fonction intégrée de
NSLocale
etNSLocale
ne se soucie pas d'où vous obtenez les codes de langue. Il n'y a donc vraiment aucune raison d'implémenter votre propre traduction comme le suggère la réponse acceptée.Impressions: anglais, allemand, suédois
la source
Même il existe un meilleur moyen d'obtenir la langue actuelle de l'appareil. Essayons par le code ci-dessous -
Proposé par Abizern sur ici
la source
Vous pouvez utiliser la
displayNameForKey:value:
méthode deNSLocale
:Cela imprimera:
Si vous spécifiez le même identificateur de paramètres régionaux pour la méthode
initWithLocaleIdentifier:
et égalementdisplayNameForKey:value:
, il vous donnera le nom natif de la langue. J'ai découvert que si vous supprimez le code de pays et utilisez simplementfr
eten
, cela supprimera également le pays du nom d'affichage (sur Mac OS X au moins, je ne suis pas sûr d'iOS).la source
Rapide
Pour obtenir la langue actuelle de l'appareil
Pour obtenir la langue de l'application
Remarque:
Il récupère le langage que vous avez donné dans CFBundleDevelopmentRegion of info.plist
si CFBundleAllowMixedLocalizations est vrai dans info.plist, le premier élément de CFBundleLocalizations dans info.plist est renvoyé
la source
J'ai essayé de trouver la bonne solution pour moi. Lorsque j'utilise a
Locale.preferredLanguages.first
été retourné la langue préférée de vos paramètres d'application.Si vous souhaitez connaître la langue à partir des paramètres de la machine utilisateur, vous devez utiliser la chaîne ci-dessous:
Swift 3
Pour déballer et utiliser, regardez la ligne ci-dessous:
la source
Pour obtenir la langue actuelle de la machine utilisateur, utilisez le code informatique suivant, cela a fonctionné pour moi.
la source
iOS13, Swift 5+, WWDC2019 https://developer.apple.com/videos/play/wwdc2019/403/
Les utilisateurs peuvent sélectionner la langue préférée d'une application indépendamment de la langue du système d'exploitation.
Vous pouvez les utiliser:
la source
Pour les développeurs MonoTouch C #, utilisez:
Remarque: je sais que c'était une question iOS, mais comme je suis développeur MonoTouch, la réponse sur cette page m'a conduit dans la bonne direction et j'ai pensé partager les résultats.
la source
Dans
Swift
:la source
Swift 3
la source
Fonction Swift 3 simple:
la source
Si vous recherchez le code de langue préféré ("en", "de", "es" ...) et le nom de langue préféré localisé (pour les paramètres régionaux actuels), voici une extension simple dans Swift:
}
la source
la source
Si vous souhaitez obtenir uniquement la langue, voici ma réponse suggérée:
Dans mon cas, je voulais seulement la langue locale et non la région locale.
Sortie: Si votre langue locale est le japonais et que la région locale est le Japon, alors:
langplusreg = ja-JP
langonly = ja
la source
Réponse de @amir dans Swift:
la source
De toute évidence, les solutions reposant, par exemple, sur
fonctionnent généralement bien et renvoient la langue actuelle de l'appareil.
Mais cela pourrait être trompeur dans certains cas:
Si l'application dans laquelle vous souhaitez obtenir cette valeur a déjà changé la langue, par exemple avec ce type de code:
Dans ce cas, [NSLocale PreferredLanguages] renvoie en fait le jeu de langues préféré (et utilisé) dans cette application particulière, pas la langue actuelle de l'appareil!
Et ... dans ce cas, le seul moyen d'obtenir correctement la langue actuelle de l'appareil actuel (et non celle précédemment définie dans l'application) est d'abord de supprimer la clé @ "appleLanguages" dans NSUserDefaults, comme ceci:
Ensuite, [NSLocale PreferredLanguages] renvoie maintenant la valeur correcte.
J'espère que cette aide.
la source
Réponse mise à jour pour Swift 4
la source
NSLocale.preferredLanguages
doit renvoyer les préférences de l'utilisateur sans respecter ce qui est pris en charge par le bundle.Pour Swift 3.0, le code ci-dessous peut être utilisé pour répondre à votre question:
la source
Dans Swift 4.2 et Xcode 10.1
la source
Selon la documentation Apple
la source
Format à deux lettres. Apple utilise la norme ISO ISO-3166 .
la source
Pour Swift 3:
NSLocale.preferredLanguages [0] en tant que chaîne
la source
À partir d'iOS 9, si vous voulez simplement le code de langue sans code de pays, vous aurez besoin de ce type de fonction d'aide - car la langue contiendra le code de pays.
la source
SWIFT-4
la source
NSLocale.preferredLanguages
doit renvoyer les préférences de l'utilisateur sans respecter ce qui est pris en charge par le bundle.