web-dev-qa-db-fra.com

Obtenir la langue actuelle dans l'appareil

Comment pouvons-nous obtenir la langue actuelle sélectionnée sur le périphérique Android?

529
Pinki

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

Locale.getDefault().getDisplayLanguage();
764
DeRagan

J'ai vérifié les méthodes Locale 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
687
trante

Ce qui a fonctionné pour moi a été:

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

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

Étant donné que getConfiguration.locale est désormais obsolète, la méthode privilégiée pour obtenir les paramètres régionaux principaux dans Android Nougat est la suivante:

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

En commençant par 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 et compatible avec les versions antérieures getLocales() .

Appelez simplement: 

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

Vous pouvez «extraire» la langue des paramètres régionaux actuels. Vous pouvez extraire les paramètres régionaux via l'API Java standard ou à l'aide du 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
Johan Pelgrim

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

Le paramètre par défaut de mon appareil est donc l'anglais (Royaume-Uni) et dans cet état attendu, les deux chaînes de la réponse de Johan donnent le même résultat. Si je modifie ensuite les paramètres régionaux dans les paramètres du téléphone (par exemple, en italiano (Italia)) et le relance, les deux chaînes de la réponse de Johan indiquent les paramètres régionaux sous la forme italiano (Italia).

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

34
airewyre

Comme décrit dans Référence de la région , le meilleur moyen d’obtenir une langue est:

Locale.getDefault().getLanguage()

cette méthode retourne une chaîne avec un identifiant de langue selon ISO 639-1 standard

16
Opsenas

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
Simon K. Gerges

Pour ajouter à la réponse de Johan Pelgrim

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

sont équivalents car la classe Android.text.format.DateFormat utilise les deux termes 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
armandino

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();
5
stefan.nsk

Il y a deux langues.

Langue par défaut du système d'exploitation:

Locale.getDefault().getDisplayLanguage();

Langue d'application actuelle: 

getResources().getConfiguration().locale.getDisplayLanguage();//return string
4
ayed abboushi

si le niveau de l'API est égal ou supérieur à 24, utilisez LocaleList.getDefault().get(0).getLanguage() sinon, utilisez Locale.getDefault.getLanguage()

private fun getSystemLocale(): String {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        return LocaleList.getDefault().get(0).getLanguage();
    } else {
        return Locale.getDefault.getLanguage();
    }
}

référence: https://developer.Android.com/guide/topics/resources/multilingual-support

3
clybe

Vous pouvez utiliser ce code pour trouver le clavier actuel 

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
String locale = ims.getLocale();
3
Ramkailash

Si vous choisissez une langue que vous ne pouvez pas taper ce grec peut être utile.

getDisplayLanguage().toString() = English
getLanguage().toString() = en 
getISO3Language().toString() = eng
getDisplayLanguage()) = English
getLanguage() = en
getISO3Language() = eng

Maintenant, essayez-le avec le grec

getDisplayLanguage().toString() = Ελληνικά
getLanguage().toString() = el
getISO3Language().toString() = ell
getDisplayLanguage()) = Ελληνικά
getLanguage() = el
getISO3Language() = ell
2
user462990

Les réponses ci-dessus ne font pas la distinction entre le chinois simple et le chinois traditionnel .Locale.getDefault().toString() fonctionne et renvoie "zh_CN", "zh_TW", "en_US", etc. 

Références à: https://developer.Android.com/reference/Java/util/Locale.html , ISO 639-1 est OLD.

2
rensq

La manière correcte d’obtenir la langue de votre appareil est la suivante:

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

J'espère que ça aide.

1
andrea.rinaldi
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
    // your code here
}
1
Pratibha Sarode
Locale.getDefault().getDisplayLanguage()

vous donnera le nom Written de la langue, par exemple, English, Dutch, French

Locale.getDefault().getLanguage()

vous donnera language code, par exemple: en, nl, fr

Les deux méthodes retournent String

1

Les autres ont donné de bonnes réponses pour la langue de l'appareil,

si vous souhaitez utiliser la langue app , le moyen le plus simple de le faire consiste à ajouter une clé app_lang à votre strings.xml, et spécifiez également la langue pour chacune des langues.

Ainsi, si la langue par défaut de votre application est différente de la langue de l'appareil, vous pouvez choisir de l'envoyer comme paramètre pour vos services.

1
htafoya
public class LocalUtils {

    private static final String LANGUAGE_CODE_ENGLISH = "en";


    // returns application language eg: en || fa ...
    public static String getAppLanguage() {
        return Locale.getDefault().getLanguage();
    }

    // returns device language eg: en || fa ...
    public static String getDeviceLanguage() {
        return ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getLanguage();
    }

    public static boolean isDeviceEnglish() {
        return getDeviceLanguage().equals(new Locale(LANGUAGE_CODE_ENGLISH).getLanguage());
    }

    public static boolean isAppEnglish() {
        return getAppLanguage().equals(new Locale(LANGUAGE_CODE_ENGLISH).getLanguage());
    }


}

Log.i("AppLanguage: ",     LocalUtils.getAppLanguage());
Log.i("DeviceLanguage: ",  LocalUtils.getDeviceLanguage());
Log.i("isDeviceEnglish: ", String.valueOf(LocalUtils.isDeviceEnglish()));
Log.i("isAppEnglish: ",    String.valueOf(LocalUtils.isAppEnglish()));
0
S.R

Ma solution est comme ça 

@SuppressWarnings("deprecation")
public String getCurrentLocale2() {
    return Resources.getSystem().getConfiguration().locale.getLanguage();
}

@TargetApi(Build.VERSION_CODES.N)
public Locale getCurrentLocale() {
    getResources();
    return Resources.getSystem().getConfiguration().getLocales().get(0);
}

et alors

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Log.e("Locale", getCurrentLocale().getLanguage());
            } else {
                Log.e("Locale", getCurrentLocale2().toString());
            }

montré ---> en

0
biyoalp

Si vous voulez vérifier une langue actuelle, utilisez la réponse de @Sarpe (@Thorbear):

val language = ConfigurationCompat.getLocales(Resources.getSystem().configuration)?.get(0)?.language
// Check here the language.
val format = if (language == "ru") "d MMMM yyyy г." else "d MMMM yyyy"
val longDateFormat = SimpleDateFormat(format, Locale.getDefault())
0
CoolMind

Cette solution a fonctionné pour moi. Cela vous retournera la langue de l'appareil Android (pas la langue locale de l'application)

String locale = getApplicationContext().getResources().getConfiguration().locale.getLanguage();

Cela retournera "en" ou "de" ou "fr" ou quelle que soit la langue de votre appareil.

0
Arjun

voici le code pour obtenir le pays du périphérique. Compatible avec toutes les versions d'Android même oreo.

Solution: si l'utilisateur ne possède pas de carte SIM, le pays où il est utilisé lors de la configuration du téléphone ou de la sélection de la langue actuelle 

public static String getDeviceCountry(Context context) {
    String deviceCountryCode = null;

    final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        if(tm != null) {
            deviceCountryCode = tm.getNetworkCountryIso();
        }

    if (deviceCountryCode != null && deviceCountryCode.length() <=3) {
        deviceCountryCode = deviceCountryCode.toUpperCase();
    }
    else {
        deviceCountryCode = ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0).getCountry().toUpperCase();
    }

  //  Log.d("countryCode","  : " + deviceCountryCode );
    return deviceCountryCode;
}
0
Abhiode