Obtenga el idioma actual en el dispositivo

¿Cómo podemos obtener el idioma actual seleccionado en el dispositivo Android?

Si desea obtener el idioma seleccionado de su dispositivo, esto podría ayudarlo a:

Locale.getDefault().getDisplayLanguage(); 

Revisé los métodos Locale en mi dispositivo Android 4.1.2 y los resultados:

 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 

Lo que funcionó para mí fue:

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

Resource.getSystem () devuelve un objeto de recursos compartidos global que proporciona acceso solo a los recursos del sistema (sin recursos de la aplicación) y no está configurado para la pantalla actual (no puede usar unidades de dimensión, no cambia según la orientación, etc.).

Debido a que getConfiguration.locale ahora se ha desaprobado, la forma preferida de obtener la configuración regional principal en Android Nougat es:

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

Para garantizar la compatibilidad con las versiones anteriores de Android, una posible solución sería una simple comprobación:

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

Actualizar

Comenzando con la biblioteca de soporte 26.1.0 no necesita verificar la versión de Android ya que ofrece un método conveniente compatible con versiones anteriores getLocales() .

Simplemente llame:

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

Puede ‘extraer’ el idioma de la configuración regional actual. Puede extraer la configuración regional a través de la API estándar de Java o utilizando el contexto de Android. Por ejemplo, las dos líneas a continuación son equivalentes:

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

Para ahorrarle tiempo y / o confusión a otros, quería compartir que he probado las dos alternativas propuestas por Johan Pelgrim arriba y en mi dispositivo son equivalentes, ya sea que se cambie la ubicación predeterminada o no.

Así que la configuración predeterminada de mi dispositivo es inglés (United Kindom) y en este estado como se espera, ambas cadenas en la respuesta de Johan dan el mismo resultado. Si luego cambio la configuración regional en la configuración del teléfono (por ejemplo, a italiano (Italia)) y vuelvo a ejecutar, ambas cadenas en la respuesta de Johan dan la configuración regional como italiano (Italia).

Por lo tanto, creo que la publicación original de Johan es correcta y que el comentario de gregm es incorrecto.

Como se describe en la referencia de Locale, la mejor forma de obtener un idioma es:

 Locale.getDefault().getLanguage() 

este método devuelve cadena con ID de idioma de acuerdo con el estándar ISO 639-1

Puedes usar esto

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

cuando “xx” es cualquier código de idioma como “en”, “fr”, “sp”, “ar” … y así sucesivamente

Para agregar a la respuesta de Johan Pelgrim

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

son equivalentes porque la clase android.text.format.DateFormat utiliza ambos de forma intercambiable, por ejemplo

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

y

 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 ... } 

Puede intentar obtener la configuración regional a partir de los recursos del sistema:

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

Hay dos idiomas

Lenguaje por defecto del sistema operativo:

 Locale.getDefault().getDisplayLanguage(); 

Idioma actual de la aplicación:

 getResources().getConfiguration().locale.getDisplayLanguage();//return string 

Puede usar este código para averiguar el teclado actual

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

Las respuestas anteriores no distinguen entre chino simple y chino tradicional. Locale.getDefault().toString() funciona que devuelve “zh_CN”, “zh_TW”, “en_US”, etc.

Las referencias a: https://developer.android.com/reference/java/util/Locale.html , ISO 639-1 es VIEJO.

Si elige un idioma no puede escribir este griego puede ser útil.

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

Ahora pruébalo con griego

 getDisplayLanguage().toString() = Ελληνικά getLanguage().toString() = el getISO3Language().toString() = ell getDisplayLanguage()) = Ελληνικά getLanguage() = el getISO3Language() = ell 
 if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){ // your code here } 

La forma correcta de obtener el idioma de su dispositivo es la siguiente:

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

Espero eso ayude.

si el nivel de API es 24 o superior, use LocaleList.getDefault().get(0).getLanguage() else use Locale.getDefault.getLanguage()

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

referencia: https://developer.android.com/guide/topics/resources/multilingual-support

Mi solución es así

 @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); } 

y entonces

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

mostrado —> en

 Locale.getDefault().getDisplayLanguage() 

le dará un nombre Written para el idioma, por ejemplo, English, Dutch, French

 Locale.getDefault().getLanguage() 

le dará un language code , por ejemplo: en, nl, fr

Ambos métodos devuelven String

aquí hay un código para obtener el país del dispositivo. Compatible con todas las versiones de Android incluso oreo.

Solución: si el usuario no tiene tarjeta SIM que no tiene país, se usa durante la configuración del teléfono o la selección de idioma actual.

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

Si desea hacer una tarea específica para los usuarios reside en la India que habla hindi y luego use debajo si la condición

 if(Locale.getDefault().getDisplayName().equals("हिन्दी (भारत)")){ //Block executed only for the users resides in India who speaks Hindi }