web-dev-qa-db-fra.com

Comment obtenir les paramètres régionaux actuels (API de niveau 24)?

Je faisais comme ça:

context.getResources().getConfiguration().locale

Configuration.locale est obsolète si la cible est égale à 24. J'ai donc apporté cette modification:

context.getResources().getConfiguration().getLocales().get(0)

Maintenant, il est dit que c'est seulement pour minSdkVersion24, donc je ne peux pas l'utiliser parce que ma cible minimale est plus basse.

Quelle est la bonne méthode?

16
user3290180

Vérifiez la version que vous utilisez et utilisez la solution obsolète:

Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    locale = context.getResources().getConfiguration().getLocales().get(0);
} else {
    locale = context.getResources().getConfiguration().locale;
}
43
Egor

Vous pouvez utiliser Locale.getDefault(), qui est le moyen standard de Java d’obtenir le Locale actuel.

6
Ken Van Hoeylandt

Dans Configuration.Java, il y a:

/**
 * ...
 * @deprecated Do not set or read this directly. Use {@link #getLocales()} and
 * {@link #setLocales(LocaleList)}. If only the primary locale is needed,
 * <code>getLocales().get(0)</code> is now the preferred accessor.
 */
@Deprecated public Locale locale;
...
configOut.mLocaleList = LocaleList.forLanguageTags(localesStr);
configOut.locale = configOut.mLocaleList.get(0);

Donc, fondamentalement, utiliser locale renvoie fondamentalement le primary locale que l'utilisateur définit. La réponse d'acceptation fait exactement la même chose que de lire locale directement.

Cependant, ces paramètres régionaux ne sont pas nécessairement ceux utilisés lors de l'obtention de ressources. Il peut s'agir des paramètres régionaux secondaires de l'utilisateur si les paramètres régionaux principaux ne sont pas disponibles.

Voici une version plus correcte:

Resources resources = context.getResources();
Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
        ? resources.getConfiguration().getLocales()
            .getFirstMatch(resources.getAssets().getLocales())
        : resources.getConfiguration().locale;
0
Mygod