¿Por qué Locale.getDefault (). GetLanguage () en Android devuelve el nombre para mostrar en lugar del código de idioma?

De acuerdo con la referencia de Java, se supone que Locale.getLanguage () devuelve el código ISO minúsculas de 2 letras del lenguaje (por ejemplo, "en"), mientras que getDisplayLanguage () es el método para obtener el nombre legible (por ejemplo, inglés) .

Entonces, ¿cómo llega el siguiente código en Android:

Locale.getDefault().getLanguage() 

Devuelve "English" o "Español" en lugar de "en" y "es" ????

Estoy completamente desconcertado …

Utilizar

GetResources (). GetConfiguration (). Locale.getLanguage ()

Y funcionará muy bien a pesar de que consideraría su comportamiento observado un error que vale la pena informar.

Lo he descubierto. Esto sucedió porque previamente había llamado Locale.setDefault () y le había pasado una localización que a su vez yo había creado erróneamente pasándolo todo el nombre de idioma (tomé el idioma de una configuración de preferencia y me equivocadamente escogió la etiqueta de la entrada en su lugar Del valor).

Es decir, lo hice:

 String lang= //... here I assigned "English" while I thought // I was assigning it "en" Locale locale=new Locale(lang); Locale.setDefault(locale); // (*) // and later Locale.getLocale().getLanguage(); //returns "english" 

Así que cuando pregunté por la configuración por defecto, en realidad era la localidad que había creado cuyo código de idioma que había establecido erróneamente en "inglés".

Hay un par de cosas divertidas, sin embargo:

  1. La línea (*) realmente funciona y realmente cambia la configuración regional a inglés (o al español cuando utilicé "español"), es decir, setDefault () parece aceptar una configuración "mal formada" e incluso la entiende. Pero no lo arregla.
  2. Nota Utilicé el inglés en mayúsculas al establecer incorrectamente la configuración regional, pero al final devuelve "inglés" todo en minúsculas.

No sé por qué aparece este problema, pero otro estándar para idiomas es el código ISO3. Puede llamar a Locale.getDefault().getISO3Language() y debe devolver "eng" o "esp".

Android devuelve los nombres legibles en lugar de los códigos.

Locale.getDefault () tiene la cadena. Por lo tanto, si llama a cualquier impresión o registro que funcionará … significa Locale.getDefault (). ToString () tiene su código de configuración regional.

  • Cómo forzar el lenguaje en la aplicación android
  • Configuración de idioma turco e inglés: traducir caracteres turcos a equivalentes latinos
  • Cómo cambiar el idioma de com.facebook.widget.LoginButton en Android
  • ¿Se ha construido SQLite en Android con el tokenizador ICU habilitado para FTS?
  • ¿Cuál es el código de configuración regional adecuado para Android para chino simplificado y portugués-Brasil?
  • (ANDROID) que controla el idioma del usuario
  • Comprueba qué configuración regional se está ejecutando en Android
  • Obtener la variante de la configuración regional para el chino simplificado
  • Número en árabe en texto árabe en Android
  • Android: cambia la programación del sistema del dispositivo mediante programación
  • Android obtiene la configuración actual, no predeterminada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.