entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Android: Programar para idiomas minoritarios

Hola.

La programación para distintos idiomas en Android es bastante simple. Basta con crear un fichero XML para cada idioma y el sistema selecciona el que necesita. Pero si queremos programar para idiomas minoritarios? Que solución me recomendáis?

gracias y un saludo!

0voto

Leonardo-Tadei comentado

Hola Egoitz,

y qué diferencia tendrían estos idiomas minoritarios para usar la estrategia de tener un XML con la traducción a cada uno de ellos ???

0voto

egoitz_gonzalez comentado

Hola Leonardo.

Yo entiendo la gestión de idiomas de android de la siguiente manera. Mi app esta en castellano. Si deseo que también este en ingles, creo una carpeta values-en y dentro coloco el String con las traduccioones.

Si el Smartphone esta configurado en ingles, automáticamente la aplicación se mostrara en ingles.

En cambio, en mi caso particular, deseo que la app este en castellano y en Vasco. En este caso Android no permite configurar el telefono en Vasco con lo cual no sé como realizar el proceso,

Adjunto una URL con lo que comentaba de el ingles.
http://mundogeek.net/android/soportando-dispositivos/idiomas.htm

Gracias y un saludo!

0voto

Leonardo-Tadei comentado

Hola Egoitz,

más abajo Carlos justamente te responde como cargar diferentes archivos de idiomas. Una forma más trabajosa para casos en los que ni siquiera exista el código ISO del lenguaje (como por ejemplo para hacer tu app en klingon o en jeringozo) es tener archivos XML con los @string de cada idioma por separado, y al momento de cargar el recurso con la pantalla, asociarla con un archivo de strings dado mediante getResourses()

Saludos!

0voto

egoitz_gonzalez comentado

Hola Leonardo.

No entiendo bien tu respuesta. En tu opinión, lo que me recomienda Carlossevi no me sirve?

0voto

Leonardo-Tadei comentado

Hola Egoitz,

lo que dice Carlos es correcto y te sirve. Yo te menciono un método aletrnativo, más artesanal, que puede ser usado con idiomas que ni siquiera tengan su código ISO.

0voto

egoitz_gonzalez comentado

Gracias por la ayuda Leonardo.

Saludos!

1 Respuesta

1voto

carlossevi Puntos63580

Según entiendo de esta conversación en Stackoverflow debería hacerse como cualquier traducción (creando los ficheros XML) pero cambiando la localización del la configuración desde programación:

Locale locale = new Locale("en_US");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getApplicationContext().getResources().updateConfiguration(config, null);

Mi duda es, este cambio ¿sólo afectará al contexto de tu aplicación?

0voto

carlossevi comentado

Aprovecho para añadir el ejemplo de este comentario en el que extienden la clase App en la definición de la aplicación para incluir la función changeLang(String lang) y poder utilizarla así:

((App)getApplicationContext()).changeLang(lang);

La función completa:

public void changeLang(String lang) {
    Configuration config = getBaseContext().getResources().getConfiguration();
    if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) {

        Editor ed = PreferenceManager.getDefaultSharedPreferences(this).edit();
        ed.putString(getString(R.string.locale_lang), lang);
        ed.commit();

        locale = new Locale(lang);
        Locale.setDefault(locale);
        Configuration conf = new Configuration(config);
        conf.locale = locale;
        getBaseContext().getResources().updateConfiguration(conf, getBaseContext().getResources().getDisplayMetrics());
    }
}

0voto

egoitz_gonzalez comentado

Hola.

Gracias por la respuesta pero sigo teniendo una duda. Entiendo que lo que me dices es para colocar el idioma ingles.

Pero si yo deseo colocar un idioma no reconocido por Android, como por ejemplo el vasco. Como hago para que lea el fichero XML correspondiente?

Imagino que el kit de la cuestión estaría en la siguiente linea:

Locale locale = new Locale("en_US");

Pero no sé que debo de escribir.

Gracias

0voto

carlossevi comentado

Hola Egoitz, aunque no lo he comprobado te digo lo que yo interpreto:

En primer lugar en la ruta donde se colocan los XML con los idiomas tendrás que crear uno nuevo "inventandote" el código ya que no está entre los soportados oficialmente. Por ejemplo, eu para Euskera.

MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-eu/
           strings.xml

Si la configuración local de Android cambia el sistema sabe qué fichero tiene que coger de ese árbol ficheros. Aunque esa configuración en Android no puede cambiar al valor eu porque no aparece ya que Android no lo soporta oficialmente, creo que siempre tienes la posibilidad de ejecutar Locale locale = new Locale("eu"); y el sistema debería utilizar el XML que has creado.

¿Has hecho alguna prueba al respecto?

0voto

egoitz_gonzalez comentado

Hola.

Acabo de realizar la prueba colocando el código en un botón de la siguiente manera.

    case R.id.btnIdioma:
        Locale locale = new Locale("eu");
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        this.getApplicationContext().getResources().updateConfiguration(config, null);
        break;

No me funciona. tal vez sea, por colocarlo en un botón?

0voto

egoitz_gonzalez comentado

Hola.

Bale, funciona todo correctamente. Había colocado mal la carpeta value-eu.

Muchas gracias a todos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta