Comment puis-je 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 l'actuel correct?
Fondamentalement, je veux le code de langue à deux lettres de la locale actuelle. Pas celui par défaut. Il n'y a pas de Locale.current()
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 la propriété système. Elle représentera donc la Locale
sélectionnée sur ce périphérique au lancement de l'application . En règle générale, cela convient, mais cela signifie que si l'utilisateur modifie sa Locale
dans les paramètres après l'exécution de votre processus d'application, la valeur de getDefaultLocale()
ne sera probablement pas immédiatement mise à jour.
Si vous devez intercepter des événements comme celui-ci pour une raison quelconque dans votre application, vous pouvez plutôt essayer d'obtenir la variable Locale
disponible à partir de l'objet de ressource Configuration
, c'est-à-dire.
Locale current = getResources().getConfiguration().locale;
Vous constaterez peut-être que cette valeur est mise à jour plus rapidement après la modification d'un paramètre si cela est nécessaire pour votre application.
Mise à jour d'Android N (niveau 24 d'API) (aucun avertissement):
Locale getCurrentLocale(Context context){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
return context.getResources().getConfiguration().getLocales().get(0);
} else{
//noinspection deprecation
return context.getResources().getConfiguration().locale;
}
}
Si vous utilisez la bibliothèque de support Android, vous pouvez utiliser ConfigurationCompat
au lieu de la méthode de @ Makalele pour supprimer les avertissements de suppression:
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
ou à Kotlin:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
De la documentation de getDefault
:
Renvoie les paramètres régionaux préférés de l'utilisateur. Cela peut avoir été remplacé pour ce processus par setDefault (Locale).
Également dans la documentation Locale
:
Les paramètres régionaux par défaut sont appropriés pour les tâches impliquant la présentation de données à l'utilisateur.
On dirait que vous devriez juste l'utiliser.
private Locale getLocale(Context context){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
return context.getResources().getConfiguration().getLocales().get(0);
} else{
//noinspection deprecation
return context.getResources().getConfiguration().locale;
}
}