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

2votos

Android- Buenas practicas. Donde realizar la traducción del idioma

Hola.

Es una duda teórica sobre donde pensáis que es mas adecuado realizar la traducción al idioma seleccionado del usuario. La situación es la siguiente.

Una BD con datos estilo, RN SW...

Luego esos datos se traducen al idioma seleccionado. Por ejemplo Run, Swin...

Pero donde realizar esta traducción? En la Activity? en el adaptador? o en la consulta a la BD?

Las tres formulas funcionan pero me gustaría hacerlo de forma correcta. Tal y como se aconseja.

Gracias.

0voto

white comentado

La idea que tienes es internacionalizar tu aplicación, supongo, como haces la traducción actualmente? guardas cadenas en la base de datos? o mantienes las cadenas en /strings/values-es.xml?

0voto

egoitz_gonzalez comentado

Las cadenas las guardo tal y como manda Google en /strings/values-es.xml, values-en.xml .... en la BD guardo el nombre de la "variable" que esta alojada en el XML.

0voto

white comentado

Por qué se te planteó la necesidad de guardar el nombre de las variables en la base de datos? Normalmente cuando el usuario cambia de idioma la aplicacion tomara los valores de la carpeta con la notación ll_tt ( values-es, values-en ) automáticamente sin necesidad de que explicitamente tengamos que cambiarlas. a no ser de que tu aplicacion contenga variables que vayan a ser agregadas dinámicamente, no encuentro la razon por la que tengas que guardar el nombre de la variable.

Como por ejemplo una base de datos con preguntas en varios idiomas, que podria actualizarse con mas preguntas.

si este fuese el caso lo mejor es tener una tabla con el codigo del idioma y una tabla que contenga de columna el id del idioma.

0voto

egoitz_gonzalez comentado

Um.. no entiendo muy bien lo que me comentas. Intento explicarme mejor.

Por ejmplo en la BD se guarda el valor RN.
En el values-es - string.xml se guarda:

   <string name="RN">Correr</string>  

y en el values-en-string.xml

   <string name="RN">Runing</string>  

En java. En la ejecución para realizar la traducción necesito llamar al la "variable" RN.

String nombreActividad = actividad.getNombreActividad(); //de la BD por ejemplo "RN"
int nombreActividadParaTraducirInt = mContext.getResources().getIdentifier(nombreActividad, "string", packName);
String nombreActividadTraducido = mContext.getString(nombreActividadParaTraducirInt);

1 Respuesta

1voto

white Puntos75880

No necesitas crear varios xml en la misma carpeta values/strings, me parece que confundes esa parte de acuerdo a como google nos indica como crear los directorios http://developer.android.com/training/basics/supporting-devices/languages.html

lo que actualmente haces:

+ values/
-- + strings/
------ values-es.xml
------ values-en.xml

lo que realmente deberías hacer es tener esta estructura:

+ values/
--- strings.xml
+ values-es/
--- strings.xml
+ values-fr/
--- strings.xml

de tal modo que no necesitas traducir explicitamente tu aplicacion.

tú codigo se acortaría quedando asi:

String nombreActividad = getResources().getString(R.string.RN);

en tu emulador de android o dispositivo android abre tu aplicación, la veras con un idioma, ahora ve a cambiar el idioma del dispositivo en configuracion, abre denuevo tu aplicacion, te daras cuenta que cambió el idioma automaticamente.

0voto

egoitz_gonzalez comentado

Perdona, me confundí al postear el comentario. Los string.xml los guardo tal y como pide Google. Uno en values-es y el otro en otra carpeta llamada values-en.

El problema que yo tengo es que también uso un idoma no soportado por Google. El vasco. Y en las opciones de la app doy la oportunidad de seleccionar ese idioma.

0voto

white comentado

De ser ese el motivo, lo mejor es que uses el metodo onConfigurationChanged en tu actividad, o hacer un refresh de tu actividad luego de haber cambiado de idioma http://programmerguru.com/android-tutorial/android-localization-at-runtime/ pero la estructura seguiria como siempre.

ejemplo:

@Override
public void onConfigurationChanged(Configuration config) {
    super.onConfigurationChanged(config);
    // update locale
}

PD: Al agregar lenguajes tambien dispones de la posibilidad de agregar la region del pais ( values-es-rV => para España Valencia ) o values-eu-rES, etc

puedes cambiar el idioma en tiempo de ejecucion.

    Locale locale = new Locale("es, "V");
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,
            getBaseContext().getResources().getDisplayMetrics());

PD2: el idioma euskera, vasco si tiene soporte desde android lollipop.

0voto

egoitz_gonzalez comentado

Ok. Pero entonces... la siguiente linea

String nombreActividad = getResources().getString(R.string.RN);

Donde debería de ir? en la Activity? o en el adaptador. Es decir, al adaprador se le envian los valores ya traducidos? o mejor que la traducción se realice en el adaptador?

0voto

white comentado

En los dos lados son validos, pero se supone que el adaptador es el encargado de mostrar los datos ya que este es un puente entre la vista y los datos, tienes mas control de como mostrar los datos en este.

0voto

egoitz_gonzalez comentado

Gracias White.

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