2011-03-01 16 views
8

Estoy en el proceso de traducir una aplicación. Mirando this, puedo ver que muchos países tienen varios códigos para el idioma.Pregunta de localización de Android

Intenté hacer una carpeta llamada values-nb, para Bokmål noruego. Cambié la configuración regional en mis teléfonos a Noruega. Esto funcionó en mi Sony Ericson Xperia 8, pero no en el Samsung Galaxy Tab.

Probé a cambiar el nombre de la carpeta a valores-no. Ahora funciona en la pestaña galaxia, pero no en la xperia. Creo ambas carpetas, y funciona. ¡Pero luego tengo que poner el mismo archivo en cada carpeta!

¿Qué pasa si alguien elige Norwegian Nynorsk, tendría que crear otra carpeta para que no tengan el inglés predeterminado pero obtengan el texto noruego? valores-nn?

Supongo que mi pregunta es la siguiente: ¿Cómo hago para que funcione? ¿Puedo hacer todas estas carpetas y luego hacer que hagan referencia a los valores, no? Por favor, ayuda :)

+0

Realmente no puedo creer que sea tan difícil admitir un solo idioma. ¡Gracias por enviar tu pregunta! – DiscDev

Respuesta

9

De acuerdo con las reglas de búsqueda actuales, no hay forma de tener una localización para un país específico y poder buscar en todos los idiomas. Al menos eso es lo que entiendo al leer las páginas al http://developer.android.com/guide/topics/resources/localization.html. Debería crear valores -nn-rNO, values-nb-rNO y values-no-rNO y tener entradas duplicadas strings.xml.

No he probado esto, pero mira a los alias de cuerda en http://developer.android.com/guide/topics/resources/providing-resources.html#AliasResources

+0

Eso apesta. Es lo que obtuve de ellos también. Miré los alias de la secuencia, pero, a mi entender, realmente no soluciona nada. Tendré varios archivos con muchos alias, que aún ocupan algo de espacio. :( – AmITheRWord

+1

¿Alguien ha intentado cambiar la configuración regional en la aplicación para resolver esto? Si nn o nb, ¿establecer no? [Link] (http://stackoverflow.com/questions/2900023/change-language-programatically-in-android) – Cremons

+1

¿Cómo fark es "nn" _not_ una sublengua de "no" cuando "en_CA" es la sublengua de "en" y "sv_FI" es la sublingual de "sv"? Parece que alguien se equivocó hace algún tiempo y ahora el sistema no se puede cambiar para asegurar la compatibilidad con versiones anteriores. Eso, o Ivar Aasen rechazó a Nynorsk como subordinado Norsk – Nilzor

9

Sé que esto es muy antigua, pero aquí hay un truco para combinar no, nb y nn como ninguna:

Locale locale = getResources().getConfiguration().locale; 
if (locale.getLanguage().equals("no") || locale.getLanguage().equals("nb") || locale.getLanguage().equals("nn")){ 
    locale = new Locale("no","NO"); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    Resources res = getBaseContext().getResources(); 
    res.updateConfiguration(config, res.getDisplayMetrics()); 
} 
+0

Una buena solución si controlas toda la pila, pero no si estás desarrollando una biblioteca – Nilzor

+2

Truco genial , pero debe usar res.getConfiguration() en lugar de crear un nuevo objeto de configuración.No quiere perder los otros datos de configuración (escalado de fuentes, etc.) – Chicowitz

0

No es una respuesta para la pregunta original, sino una solución para un problema relacionado y este es un destino probable si busca una solución para ese problema (fue para mí).

En nuestro proyecto, teníamos nuestros directorios de recursos creados, pero por algún motivo se ignoraron las cadenas localizadas.

El problema era con el soporte de Androids para generar recursos Pseudolocalized. En las versiones anteriores de Android que lo hizo con esta magia en el archivo build.gradle:

android.applicationVariants.all { variant -> 
    // see http://blog.danlew.net/2014/04/16/android-localization-tips/ 
    if (variant.buildType.isDebuggable()) { 
     variant.mergedFlavor.addResourceConfiguration("zz_ZZ") 
    } 
} 

Esto ha cambiado en las últimas versiones de Android y si se utiliza ese entonces no recibirá ninguna localización. La nueva forma es simple:

buildTypes { 
    debug { 
     pseudoLocalesEnabled true 
    } 
}