web-dev-qa-db-fra.com

Android obtenir les paramètres régionaux actuels, pas par défaut

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()

238
CQM

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.

435
Devunwired

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;
        }
    }
143
Makalele

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]
24
ElegyD

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.

14
kabuko
 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;
        }
    }
0
Vinayak