Obtener el idioma actual en el dispositivo
¿Cómo podemos seleccionar el idioma actual en el dispositivo Android?
Revisé los métodos locales 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
Locale.getDefault().toLanguageTag() ---> en-US
Si desea obtener el idioma seleccionado de su dispositivo, esto podría ayudarlo:
Locale.getDefault().getDisplayLanguage();
Puede utilizar Locale.getDefault().getLanguage();
para obtener el código de idioma habitual (por ejemplo, "de", "en")
Lo que funcionó para mí fue:
Resources.getSystem().getConfiguration().locale;
Resources.getSystem()
devuelve un objeto de Recursos compartido 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 ha quedado obsoleto, 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
A partir de la biblioteca de soporte, 26.1.0
no es necesario verificar la versión de Android, ya que ofrece un método conveniente para ser compatible con versiones anteriores getLocales()
.
Simplemente llama:
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 de Java estándar o utilizando el contexto de Android. Por ejemplo, las dos líneas siguientes son equivalentes:
String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();