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

3votos

Android - Duda, buenas practicas entre uso de Base de datos y String.xml

Hola,

Tengo una duda con el siguiente caso. Una base de datos con varias tablas. Una de ellas por ejemplo "transporte" con los siguientes atributos:

  • Nombre
  • Descripción
  • Precio

En un principio la aplicación estará disponible en dos idiomas.

La duda es la siguiente:

¿Que guardar en la Base de datos? Me explico. A modo de ejemplo, la descripción deberá de estar en Español e Ingles. Entonces en la BD, en el campo descripción ¿guardo el nombre de la variable que estará alojada en el fichero string.xml de cada idioma? y en string.xml de cada idioma estará escrito el contenido.

De lo contrario la base de datos deberá de tener un campo por cada atributo multilingüe. Por ejemplo:

  • Nombre_es
  • Nombre_en
  • Descripción_es
  • Descripción
  • precio

Pero este segundo caso creo que complica mas la app porque dependiendo de el idioma actual del usuario se realizarán distitas consultas SQL.

Cual es la mejor practica para desarrollar en este tipo de casos?

Un saludo y gracias!

2 Respuestas

3votos

Leonardo-Tadei Puntos227320

Hola @egoitz_gonzalez,

lo habitual en estos casos es tener las tablas con los nombres de los campos en un solo idioma, y según la preferencia del usuario cargar un diferente XML con las constantes por idioma para las etiquetas:

Por ejemplo, me imagino una pantalla como:

Nombre: __
Descripción: __
Precio:

y una tabla con esos 3 campos.

Si se carga un XML con los datospor ejemplo en inglés, se verá en la pantalla:

Name: __
Description: __
Price:

Pero la consulta a ejecutar siempre es la misma, porque los datos que se almacenan son los que ingresa el usuario, que solo ve etiquetas diferentes, pero estas etiquetas son independientes de cómo se guardan las cosas.

Luego solo es poder cargar dinámicamente un XML u otro según se elija.

Saludos cordiales!

0voto

egoitz_gonzalez comentado

Gracias por la respuesta @Leonardo-Tadei pero parece que no me explique bien. El usuario no insertará datos en la BD, si no que de la BD se mostraran los datos previamente almacenados por mi.

Por eso, no sé si lo adecuado es, duplicar los campos de la BD y guardar los datos de cada idioma, o dentro de la BD almacenar el nombre de la variable alojada en el fichero String.xml

1voto

Leonardo-Tadei comentado

Hola @egoitz_gonzalez,

no había entendido eso... podrías poner en tu pregunta un ejemplo de lo que se debe mostrar para cada idioma?

2votos

carlossevi Puntos63580

La verdad es que hay bastantes soluciones para almacenar atributos en varios idiomas en bases de datos, te propongo una de ellas:

Tabla: idiomas
id (INT)
nombre (VARCHAR)

Tabla: transportes
id (INT)
precio (DECIMAL)

Tabla: transportes_atributos
id (INT, PK)
transporte_id (INT, FK)
idioma_id (INT, FK) 
nombre (VARCHAR)
descripcion (VARCHAR)

En la tabla de atributos puedes tener un registro para cada combinación de transporte e idioma (muy interesante añadir una clave única para la dupla) donde almacenar los valores.

La ventaja de esta opción es que en la consulta para traer los valores de cierto producto en un idioma queda muy claro y es muy sencillo añadir nuevos idiomas:

select 
    transportes.id,
    transportes.precio,
    transportes_atributos.nombre,
    transportes_atributos.descripcion   
from 
    transportes
    left join transportes_atributos on
        transportes_atributos.transporte_id = transportes.id and
        transportes_atributos.idioma_id = X
where
    transportes.id = Y

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