Agregar o quitar las entradas de idioma en el menú "Configuración" -> "Seleccionar configuración regional" en el teléfono Android

Mi pregunta:

¿Cómo puedo añadir o eliminar las entradas de idioma en el "Configuración" -> "Configuración de idioma y teclado" -> "Selección de idioma" en el teléfono Android desde el nivel de código fuente ?

Proporcionaré más detalles sobre lo que quiero y lo que he hecho. Por favor disculpe si le presento alguna comprensión o información tonta. Soy bastante nuevo en el desarrollo de Android, empezando a aprenderlo hace varios días. Todavía hay mucho que no sé.

Más información sobre lo que quiero:

Recientemente estoy trabajando en una tarea para localizar todo el producto del teléfono con nuevos idiomas (quiero decir, no estoy trabajando en una aplicación específica, es por eso que necesito agregar una nueva configuración regional). Cuando recibí el teléfono de desarrollo, encontré que sólo hay varias entradas de idioma disponibles en el "Select Locale", como "Inglés", "Francés" y "España". Así que en primer lugar, tengo que añadir y mostrar algunas nuevas entradas de idioma a esta lista, como "japonés", "chino", "coreano".

Tengo todo el código fuente de la plataforma Android y mi propio código, así que creo que esta tarea se puede hacer modificando el código fuente o los archivos de recursos en alguna parte . Desafortunadamente, no sé dónde están el código y los archivos.

El tutorial " Hello, L10N " muestra una forma de agregar un nuevo entorno local desde "Configuración personalizada" en tiempo de ejecución. Pero lo que quiero es añadir las nuevas configuraciones locales en el momento de la creación, de modo que cuando se inicie el teléfono, las nuevas configuraciones se muestren directamente en "Seleccionar local" sin ninguna otra acción.

Que he hecho:

Hice un montón de investigación en Internet antes de venir aquí. Esto es lo que encontré:

  1. Sinkiru en Stackoverflow hizo una pregunta sobre lo que estoy buscando exactamente. Véalo aquí . Sin embargo, nadie más le respondió. Su propia respuesta sólo indica dónde consultar el ajuste de idioma ACTUAL, que no es lo que quiero. Yo personalmente le envié un correo electrónico para esta pregunta, pero no han recibido su respuesta.

  2. Busqué mucho en Stackoverflow, con las palabras clave "android locale", "android language", "android new locale" y algo similar. La mayoría de las preguntas en este sitio están preguntando cómo cambiar la configuración regional de una aplicación, cómo agregar soporte multilingüe para una aplicación, etc. No son lo que quiero.

  3. Busqué mucho en el grupo Google de la plataforma Android ( http://groups.google.com/group/android-platform ). Algunas personas están haciendo mi pregunta, pero después de leer los mensajes todavía no obtengo mi respuesta .. 🙁 Aquí hay una lista de los mensajes que leí en el grupo (y no consigo lo que quiero de ellos) :

    • " Localización del SO " – Hablaré más abajo.

    • " Cómo agregar una nueva configuración regional y su fuente asociada en la fuente android "

    • " Cómo agregar nuevo L0cale "

    • " Adición y eliminación de idioma desde Android Phone "

    • " Localización, cometer un nuevo lenguaje "

    • " Soporte de idiomas adicionales "

    • " Localización – nuevo locale – HELP "

  4. De nuevo a la entrada "(a)" enumerada arriba. En el tema de "localización de OS", Dianne Hackborn, un ingeniero de framework de Android, dijo lo siguiente:

"La aplicación de configuración sólo muestra todas las configuraciones regionales disponibles en los recursos de la plataforma.Adicionar cadenas para una nueva configuración regional debe tener automáticamente las que se muestran en la configuración . Desafortunadamente no puedo ayudarte en esa parte, pero tal vez alguien más puede. "

Sus palabras en negrita sugieren que mi tarea puede hacerse automáticamente añadiendo un nuevo recurso local al código fuente, y configurando o cambiando algo en el sistema de compilación. Me pregunto si alguien aquí ha hecho algo similar antes? Voy a intentarlo mañana.

  1. Por último, pero no menos importante, he buscado en el sitio oficial de desarrolladores de Android. En la sección "Ejecutar y probar la aplicación localizada" del tutorial " Hola, L10N ", se dice algo acerca de las configuraciones locales disponibles en la aplicación "Configuración", pero básicamente se trata de qué hacer en el emulador y esto no debería ser lo que necesito. Quiero que se haga en un teléfono real.

  2. Yo también había buceado en el código fuente de la plataforma Android tratando de descubrir algo. Empecé en el directorio $ (ANDR_SRC_ROOT) / Packages / app / Settings / src / … / LocalePicker.java. En el método LocalePicker :: onCreate (), noté esta línea de código:

    String [] locales = getAssets (). GetLocales ();

El código debajo de esta línea intenta establecer todos los nombres de localidad obtenidos a un ArrayAdapter y, a continuación, establecer el adaptador a la vista de lista para mostrar. Por lo tanto, creo que el método "getLocales ()" es la clave de la solución.

Entonces miré en el código de getLocales (). GetLocales () es un método miembro de AssetManager y se declara como nativo, por lo que entró en el $ / (ANDR_SRC_ROOT) /frameworks/base/libs/utils/AssetManager.cpp que I GUESS debería ser la implementación real de la java getLocales () método. El C ++ AssetManager :: getLocales () finalmente me lleva al método C ++ ResTable :: getConfigurations () en el que se explora una variable miembro " mPackageGroups " para recuperar todos los elementos ResTable_config disponibles. Por lo tanto, creo que todos los locales disponibles se deben agregar a este mPackageGroups durante el sistema se inició. Sin embargo, perdí en el código por fin y no pude encontrar dónde se agregan los locales a mPackageGroups.

En los teléfonos HTC también debe modificar /system/customize/CID/default.xml … Ése es el archivo que utilizan para especificar locales en sus roms de stock. Si la rom es una WWE, supuestamente la edición CID es todo lo que se necesita hacer, pero esto no siempre es cierto.

Creo que una aplicación normal no debería agregar ubicaciones al teléfono. Hay paquetes especiales como MoreLocale 2 para ese propósito. Si agrega una configuración regional, sería responsable no sólo de proporcionar la localización para su propia aplicación, sino para todo el sistema.

Usted tiene que crear la carpeta "valores" en la carpeta "res" del paquete framework-res de android. El nombre de esa nueva carpeta debe contener el código del país de su necesidad, es decir. Valores -pl-rPL (la parte rPL es necesaria) para el idioma polaco (para inglés británico: en-rGB , etc), que debería ser suficiente – si no – crear el archivo strings.xml en esa carpeta, y añadir allí los recursos vacíos Nodo

Para crear o agregar varios idiomas a su aplicación, primero tiene que definir todos los valores de cadena en el string.xml en la carpeta de valores en lugar de codificarlos en su programa. Entonces también tienes que tener diferentes carpetas de valores para diferentes idiomas, por ejemplo, Value-es para el español y Value-fr para el francés. Esto debería hacer el trabajo. No creo que la aplicación puede cambiar la configuración regional por defecto.

Creo que tienes que editar el

PRODUCT_LOCALES

Presente en build / target / product / languages_full.mk, y agregue y quite las cadenas asignadas a esto.

Puede definir su cadena personalizada como zz_zz y agregar la carpeta valores_zz_zz en cada una de sus carpetas res.

No he probado esto, pero esto podría funcionar.

Nota: PRODUCT_LOCALES puede ser anulado en otro lugar dependiendo del sistema de compilación

Para quitar idiomas, si eliminamos la cadena de configuración regional de PRODUCT_LOCALES, funcionará.

También estoy buscando una manera de agregar nuevos idiomas, pero agregar esto no ayuda. Creo que tenemos que actualizar algunos archivos de bajo nivel o bibliotecas para agregar nuevos idiomas.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.