Question Obtenir la langue actuelle dans l'appareil


Comment pouvons-nous obtenir la langue actuelle sélectionnée dans l'appareil Android?


499
2017-11-18 06:49


origine


Réponses:


Si vous souhaitez obtenir la langue sélectionnée de votre appareil, cela pourrait vous aider:

Locale.getDefault().getDisplayLanguage();

732
2017-11-18 07:07



J'ai vérifié les méthodes locales sur mon appareil Android 4.1.2 et les résultats:

Locale.getDefault().getLanguage()       ---> en      
Locale.getDefault().getISO3Language()   ---> eng 
Locale.getDefault().getCountry()        ---> US 
Locale.getDefault().getISO3Country()    ---> USA 
Locale.getDefault().getDisplayCountry() ---> United States 
Locale.getDefault().getDisplayName()    ---> English (United States) 
Locale.getDefault().toString()          ---> en_US
Locale.getDefault().getDisplayLanguage()---> English

626
2018-04-19 09:36



Ce qui a fonctionné pour moi était:

Resources.getSystem().getConfiguration().locale;

Resource.getSystem () renvoie un objet Ressources partagées global qui donne uniquement accès aux ressources système (pas de ressources d'application) et n'est pas configuré pour l'écran actuel (impossible d'utiliser des unités de cote, ne change pas en fonction de l'orientation, etc.).

Car getConfiguration.locale a maintenant été déprécié, le moyen préféré d'obtenir le paramètre régional principal dans Android Nougat est:

Resources.getSystem().getConfiguration().getLocales().get(0);

Pour garantir la compatibilité avec les versions précédentes d'Android, une solution possible serait une simple vérification:

Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    locale = Resources.getSystem().getConfiguration().getLocales().get(0);
} else {
    //noinspection deprecation
    locale = Resources.getSystem().getConfiguration().locale;
}

Mettre à jour

À partir de la bibliothèque de support 26.1.0 vous n'avez pas besoin de vérifier la version Android car elle offre une méthode pratique rétrocompatible getLocales().

Appelez simplement:

ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());

64
2018-02-13 11:01



Vous pouvez "extraire" la langue de la localisation courante. Vous pouvez extraire les paramètres régionaux via l'API Java standard ou en utilisant le contexte Android. Par exemple, les deux lignes ci-dessous sont équivalentes:

String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();

43
2017-11-18 07:51



Pour sauver du temps et / ou de la confusion, je voulais vous faire savoir que j'ai essayé les deux alternatives proposées par Johan Pelgrim ci-dessus et qu'elles sont équivalentes sur mon appareil - que l'emplacement par défaut soit modifié ou non.

Par conséquent, le réglage par défaut de mon appareil est anglais (United Kindom) et dans cet état, comme prévu, les deux cordes dans la réponse de Johan donnent le même résultat. Si je change ensuite les paramètres régionaux dans les paramètres du téléphone (dites italiano (Italia)) et relancez, les deux chaînes dans la réponse de Johan indiquent les paramètres italiano (Italia).

Par conséquent, je crois que le message original de Johan est correct et que le commentaire de Greg est incorrect.


34
2017-11-19 08:53



Comme décrit dans Référence des paramètres régionaux la meilleure façon d'obtenir la langue est:

Locale.getDefault().getLanguage()

cette méthode renvoie la chaîne avec l'id de langue selon ISO 639-1 standart


15
2017-07-12 07:41



Vous pouvez utiliser ceci

boolean isLang = Locale.getDefault().getLanguage().equals("xx");

quand "xx" est un code de langue comme "en", "fr", "sp", "ar" .... et ainsi de suite


13
2017-09-15 16:24



Ajouter à La réponse de Johan Pelgrim

context.getResources().getConfiguration().locale
Locale.getDefault()

sont équivalents parce que android.text.format.DateFormat classe utilise à la fois de manière interchangeable, par ex.

private static String zeroPad(int inValue, int inMinDigits) {
    return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}

et

public static boolean is24HourFormat(Context context) {
    String value = Settings.System.getString(context.getContentResolver(),
            Settings.System.TIME_12_24);

    if (value == null) {
        Locale locale = context.getResources().getConfiguration().locale;

    // ... snip the rest ...
}

6
2017-12-07 06:26



Vous pouvez essayer d'obtenir des paramètres régionaux à partir des ressources système:

PackageManager packageManager = context.getPackageManager();
Resources resources = packageManager.getResourcesForApplication("android");
String language = resources.getConfiguration().locale.getLanguage();

4
2017-08-20 11:24