¿Cómo obtengo la configuración regional actual del usuario en Android?
Puedo obtener el predeterminado, pero puede que este no sea el correcto.
Básicamente quiero el código de idioma de dos letras de la configuración regional actual. No es el predeterminado. No hayLocale.current()
default()
es una apuesta bastante segura, simplemente no la use para procesar (como dicen los documentos).default()
, pero no para cosas que pueden romper el código.Respuestas:
El valor predeterminado
Locale
se construye estáticamente en tiempo de ejecución para el proceso de su aplicación a partir de la configuración de propiedades del sistema, por lo que representará loLocale
seleccionado en ese dispositivo cuando se inició la aplicación . Por lo general, esto está bien, pero significa que si el usuario cambia suLocale
configuración después de que se esté ejecutando el proceso de su aplicación, el valor degetDefaultLocale()
probablemente no se actualizará de inmediato.Si necesita atrapar eventos como este por alguna razón en su aplicación, puede intentar obtener los
Locale
disponibles delConfiguration
objeto de recurso , es decirEs posible que este valor se actualice más rápidamente después de un cambio de configuración si es necesario para su aplicación.
fuente
Log.d("localeChange", "Default locale lang: " + Locale.getDefault().getLanguage()); Log.d("localeChange", "Config locale lang: " + getResources().getConfiguration().locale.getLanguage());
locale This field was deprecated in API level 24. Do not set or read this directly. Use getLocales() and setLocales(LocaleList). If only the primary locale is needed, getLocales().get(0) is now the preferred accessor.
Actualización de Android N (Api nivel 24) (sin advertencias):
fuente
LocaleList.getDefault().get(0);
ya que esto devolverá las configuraciones regionales ordenadas por el idioma preferido.ConfigurationCompat
, comoConfigurationCompat.getLocales(getResources().getConfiguration()).get(0)
Si está utilizando la Biblioteca de soporte de Android, puede usar en
ConfigurationCompat
lugar del método de @ Makalele para deshacerse de las advertencias de desaprobación:o en Kotlin:
fuente
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()).get(0);
De
getDefault
la documentación de:También de los
Locale
documentos:Parece que deberías usarlo.
fuente
Locale.setDefault()
, se consigue de llamadas cuando cambio el idioma del dispositivo, al menos, volver a Android 5.0 (que es por lo que he probado)Todas las respuestas anteriores: no funcionan. Así que pondré aquí una función que funciona en Android 4 y 9
fuente
LocaleListCompat.getDefault()
si usas AndroidX.He usado esto:
fuente
Según la documentación oficial ConfigurationCompat está en desuso en las bibliotecas de soporte
Puedes considerar usar
LocaleListCompat.getDefault()[0].toLanguageTag()
La posición 0 será la configuración regional preferida por el usuarioPara obtener la configuración regional predeterminada en la posición 0 sería
LocaleListCompat.getAdjustedDefault()
fuente