Comment pouvons-nous obtenir la langue actuelle sélectionnée sur le périphérique Android?
Si vous souhaitez obtenir la langue sélectionnée sur votre appareil, cela peut vous aider:
Locale.getDefault().getDisplayLanguage();
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
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());
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();
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.
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
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
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 ...
}
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();
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
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
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();
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
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.
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.
if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){
// your code here
}
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
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.
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()));
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
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())
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.
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;
}