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: utilizar nombre variable en String.xml

Hola.

Mi problema es el siguiente:

En la BD tengo distintos textos String, como por ejemplo "Un_Texto", "Dos_Textos"...

Para que la app funcione en distintos idiomas tengo un string.xml por cada idioma tal y como manda la documentación oficial. Los Strings dentro del fichero son tales como:

<string name="Un_Texto">"Esto es un texto"</string>
<string name="Dos_Textos">"Esto son dos textos"</string>

El problema viene a la hora de sacar en pantalla los resultado. la idea sería algo como lo siguiente que evidentemente no s epuede hacer:

String variable = getTexto();
texto.setText(R.string.variable);

variable irá cambiado. En ocasiones sera "Un_Texto" en otras ocasiones será "Dos_textos"....

Espero haberme explicado bien.

Gracias.

3 Respuestas

0voto

egoitz_gonzalez Puntos10050

Hola.

Muchas gracias a los dos por vuestras respuestas. Pero al final conseguí hacerlo de la siguiente manera.

for(int i=0; i<instalaciones.size();i++ ){
    Instalacion instalacion = instalaciones.get(i);
    nombre = instalacion.getNombre();

    int nombreParaTraducirInt = this.getResources().getIdentifier(nombre, "string", this.getPackageName());
    String nombreParaTraducir = getString(nombreParaTraducirInt);
    instalacion.setNombre(nombreParaTraducir);
    idInstalacion = instalacion.getIdInstalacion();
    Log.e("LocAndroid", instalacion.getNombre());
        }

Como podéis comprobar el valor de la variable nombre va cambiado. Esta variable en ocasiones sería "Un_texto", "Dos_textos"...

Resumiendo. La clave estaba en las siguientes lineas:

 int nombreParaTraducirInt = this.getResources().getIdentifier(nombre, "string", this.getPackageName());
 String nombreParaTraducir = getString(nombreParaTraducirInt);

Muchas gracias.

Un saludo!

1voto

Leonardo-Tadei Puntos227320

Hola Egoitz,

no estoy seguro de entenderte... si el problema es que a veces tenés que mostrar el contenido del recurso String un_texto y a veces mostrar el contenido de dos_textos, tendrás que tener en la lógica de la aplicación la desición de cuando mostrar uno y cuando otro para idicar qué hacer...

Traés el recurso necesario con algo como:

TextView txtAMostrar = (TextView)findViewById(R.id.un_texto);

Por otra parte y teniendo en cuenta consultas anteriores, si tenés dos String.xml, uno con cada idioma de la app, y siempre tenés que mostrar un_texto en pantalla pero en el idioma actual, lo que tenés que hacer es cargar el nuevo string.xml como recurso de la definición de la pantalla. Acá tenés una buena explicación de como cambiar recursos: http://www.arquitecturajava.com/android-r-java/

Saludos!

0voto

egoitz_gonzalez comentado

Hola.

Es que tal vez me lie un poco en la explicación.

Digamos que "Un_Texto", "Dos_Textos" están en una Base de datos. En ocasiones hago un select de la base de datos y dependiendo del idioma que tiene seleccionado el usuario deseo que se realice la traducción.

Por defecto la base de datos esta en castellano.

Edito: Yo recibo un array. en tamaño del array varia dependiendo de la consulta SQL. En ocasiones el array será {un_texto, dos_textos, tres_textos} pero en otras ocasiones tal vez sea {un_texto, dos_textos} y yo lo que deseo es la traduccion de eso. Por ejemplo si la configuración esta en Ingles, a la hora de leer el array no debo de plasmar en pantalla "un_texto", "dos_textos" si no "one_text" y "two_text". Pero tal como dije la BD esta en castellano.

Ahora me explique mejor?

muchas gracias.

0voto

Leonardo-Tadei comentado

Ahh... no había entendido que los textos a mostrar estaban en una DB en vez de en el String.xml que mencionabas.

Me alegra que lo hayas solucionado!

2votos

Hola Egoitz,

No entiendo muy bien por qué quieres hacer eso, pero en cualquier caso te propongo tres alternativas:

  1. Utilizar reflexión para acceder al atributo de R.string. No estoy completamente seguro de que se pueda pero, al ser una propiedad publica, imagino que sí. Aquí la documentación: Class Javadoc.
  2. Según el texto que devuelva getTexto() mostrar un mensaje u otro.
  3. ¿Utilizar formateadores? Quizá no te sirva para nada, pero por proponer ideas que no falte.

Espero haberte ayudado.

Un saludo.

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