La mejor manera de determinar automáticamente el idioma del usuario
Estoy desarrollando un proyecto en el que necesito determinar automáticamente cuál es el idioma de usuario utilizado para crear el contenido.
En realidad estamos usando Locale.getDefault().getLanguage()
pero esto no puede ser la elección correcta porque, por istance, vivo en Italia, escribo contenido en italiano, pero mi configuración por defecto en mi teléfono es en_US.
- Configuración de idioma turco e inglés: traducir caracteres turcos a equivalentes latinos
- Android obtiene el idioma del dispositivo
- Lenguaje hindi
- Hablar con TTS como Hindi
- Cambiar la configuración regional, pero mantener orientaciones de izquierda a derecha y de otros teléfonos
Así que pensé que tal vez podría determinarlo desde el país de SIM (y de retorno a la configuración de usuario cuando el dispositivo no tiene uno), pero no hay una relación de uno a uno de un país a un idioma. Por suerte, US tiene en_US y es_US.
¿Tienes alguna sugerencia? ¿Debería preguntar al usuario por la configuración regional de su contenido actual?
- Los números arábigos con ar-ae y ar-sa locale en Android
- Texto de Android a voz en diferentes idiomas
- OnConfigurationChange no se llama después de cambiar la configuración regional
- Código de configuración local para hebreo / Referencia a otros códigos de configuración regional?
- Aplicación de Android con ActionBar NullPointerException con configuración regional no predeterminada
- Android 7.0 Nougat recoge cadenas predeterminadas cuando el idioma del dispositivo es en_US
- Cómo crear una instancia de moneda con un país no ISO 3166 como en_UK?
- Cómo obtener el formato de fecha de configuración regional en mes y día
¿Por qué necesita el idioma del usuario?
Yo también tengo mi configuración local en en_US, y tengo que porque prefiero tener menús, etc en inglés. (La traducción de los menús y ajustes, etc se siente tenso en mi lengua materna.)
Lo más probable es que tus usuarios se molesten (sé que lo haría) si utilizas cualquier cosa que no sea Locale.getDefault().getLanguage()
para lo que estás usando el lenguaje para.
Dicho esto, si realmente quieres usar un idioma local, te sugiero que averigües el código del país por algunas heurísticas basadas en
- Configuración predeterminada
- País SIM
- País actual de la red
Y utilice una tabla de búsqueda codificada de código de país a uno de los códigos de idioma oficial. Hay bases de datos abiertas con esta información, vea por ejemplo estos recursos:
- Lista de códigos de idiomas por país
- Códigos de país / códigos de idioma en el wiki de OpenStreetMap