Comment obtenir les paramètres régionaux actuels de l'utilisateur dans Android?
Je peux obtenir celui par défaut, mais ce n'est peut-être pas celui actuel correct?
Fondamentalement, je veux le code de langue à deux lettres des paramètres régionaux actuels. Pas celui par défaut. Il n'y a pasLocale.current()
default()
est une valeur sûre, ne l'utilisez pas pour le traitement (comme le disent les docs).default()
, mais pas pour les choses qui peuvent casser le code.Réponses:
La valeur par défaut
Locale
est construite de manière statique au moment de l'exécution pour votre processus d'application à partir des paramètres de propriété système, elle représentera donc les élémentsLocale
sélectionnés sur ce périphérique lors du lancement de l'application . En règle générale, cela est correct, mais cela signifie que si l'utilisateur modifie sesLocale
paramètres dans après l'exécution de votre processus de demande, la valeur degetDefaultLocale()
ne sera probablement pas immédiatement mise à jour.Si vous avez besoin d'intercepter des événements comme celui-ci pour une raison quelconque dans votre application, vous pouvez plutôt essayer d'obtenir le
Locale
disponible à partir de l'Configuration
objet ressource , c'est-à-direVous pouvez constater que cette valeur est mise à jour plus rapidement après une modification des paramètres si cela est nécessaire pour votre application.
la source
Log.d("localeChange", "Default locale lang: " + Locale.getDefault().getLanguage()); Log.d("localeChange", "Config locale lang: " + getResources().getConfiguration().locale.getLanguage());
locale This field was deprecated in API level 24. Do not set or read this directly. Use getLocales() and setLocales(LocaleList). If only the primary locale is needed, getLocales().get(0) is now the preferred accessor.
Mise à jour Android N (Api niveau 24) (sans avertissement):
la source
LocaleList.getDefault().get(0);
car cela retournera les paramètres régionaux triés par la langue préférée.ConfigurationCompat
, commeConfigurationCompat.getLocales(getResources().getConfiguration()).get(0)
Si vous utilisez la bibliothèque de support Android, vous pouvez utiliser à la
ConfigurationCompat
place de la méthode de @ Makalele pour vous débarrasser des avertissements de dépréciation:ou à Kotlin:
la source
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0);
De
getDefault
la documentation de:Également à partir des
Locale
documents:On dirait que vous devez simplement l'utiliser.
la source
Locale.setDefault()
, il se l'appelle quand je change la langue de l' appareil au moins revenir à Android 5.0 (que les est aussi loin que je l' ai testé)Toutes les réponses ci-dessus - ne fonctionnent pas. Je vais donc mettre ici une fonction qui fonctionne sur Android 4 et 9
la source
LocaleListCompat.getDefault()
si vous utilisez AndroidX.J'ai utilisé ceci:
la source
Selon la documentation officielle , ConfigurationCompat est déconseillé dans les bibliothèques de support
Vous pouvez envisager d'utiliser
LocaleListCompat.getDefault()[0].toLanguageTag()
La 0ème position sera les paramètres régionaux préférés de l'utilisateurPour obtenir les paramètres régionaux par défaut à la position 0 serait
LocaleListCompat.getAdjustedDefault()
la source