Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Diseño multidiomas

Estas en el tema de Diseño multidiomas en el foro de Bases de Datos General en Foros del Web. Hola Amigos. Hace un buen tiempo estoy trabajando con ambiente Web y siempre he hecho lo que a continuación voy a explicar. La es idea ...
  #1 (permalink)  
Antiguo 29/11/2007, 07:26
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 21 años
Puntos: 4
Mensaje Diseño multidiomas

Hola Amigos.

Hace un buen tiempo estoy trabajando con ambiente Web y siempre he hecho lo que a continuación voy a explicar. La es idea es poder compartir por medio de la experiencia que es lo más recomendable para un sitio multidiomas.

La estructura que yo uso la quite estudiando como trabaja un programa paquete ya hace unos años.

Los sitios que deben soportar múltiples idiomas los vi de dos maneras. O se adapta la base de datos para permitir esta funcionalidad o se crean varias copias del sitio para los distintos idiomas. En este caso me centraría en los sitios que deben tener un administrador de contenidos para que los usuarios mantengan el sitio.

Hasta ahora trabajo adaptando la base de datos. Les explico con un ejemplo-.

Creo una tabla de idiomas
-id
-nombre
-diccionario


donde diccionario es la dirección de un archivo .ini por ejemplo donde tengo guardadas las etiquetas de las páginas, por ejemplo titulos, labels para formularios, textos de botones, etc. Las cosas que los usuarios no van a cambiar básicamente.

A partir de esta tabla, si quiero una tabla de producto por ejemplo tendría que crear una relación muchos a muchos. Primero una tabla que contendrá los datos básicos independientes al idioma

productos
-id
-fecha_alta
-precio
-cantidad


En un relación muchos a muchos entre idiomas productos estarían los datos dependientes del idioma

productos_x_idiomas
-id
-productos_id
-idiomas_id
-nombre
-descripcion


De esta manera al ingresar al sitio el usuario elije el idioma y yo lo guardo en una sesión y todos los filtrados en las página los hago mediantes esta sesión.

En esta era donde los frameworks empiezan a estar de moda, en mi opinión, creo que es más simple mantener las tablas muchos a muchos con un id propio como el ejemplo y no usar una PK compuesta con ambas FKS.

Por otro lado, los frameworks dan mucha ayuda en tareas repetitivas como creación de formularios CRUD (ABM). cosa que para este tipo de diseños creo que no ayudan mucho. Otro ejemplo puede ser que para hacer un alta de producto los frameworks suelen tener la funcionalidad, a través del modelo, de hacer algo así
$this->Productos->create_from_request(); Esto permite que si yo utilizo los nombre de los campos en los textbox de los formularios él simplemente lo interpreta y hacer un insert. Son tareas muy interesantes y ahorran horas y líneas de código, pero para este diseño no se podría usar así nomás.

Con esos dos ejemplos me gustaría poner en la mesa para escuchar sus opiniones sobre que forma sería la más conveniente para realizar este tipo de sitios. Ya que siempre deben de tratarse en forma especial y hasta a veces un poco tediosa.

Espero sus opiniones amigos. Un abrazo
  #2 (permalink)  
Antiguo 30/11/2007, 09:00
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 18 años, 6 meses
Puntos: 50
Re: Diseño multidiomas

Pues no entendi muy bien su metodo, pero el estilo que e visto y me parece bueno es el siguiente.

Por ejemplo la tabla productos

Id producto
Nom_ Español.
Nom_Ingles.
Nom_Portugues.

Cuando el usuario selecciona por ejemplo Portugues pues el sistema envia una variable con el $Vvalor="Portugues" terminado con la palabra portugues entonces por ejemplo el select en php quedaria algo asi:


select Nom_."$Valor" where Id_producto = '5';

Eso es solo un ejemplo simple pero asi e visto que lo trabajan.

El suyo es interesante pero es un poco largo creo yo, aqui quedarian con bastantes campos cada tabla de la base de datos pero igual facilita las consultas y demas operaciones cno la base de datos.
  #3 (permalink)  
Antiguo 30/11/2007, 09:06
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 19 años, 2 meses
Puntos: 55
Re: Diseño multidiomas

los dos puntos de vista aparentemente son validos, pero el mejor es hacer tablas para idiomas por que si el dia de mañana hay q agregar un idioma nuevo seria cuesiton de agregar los registros nada mas sin tener q modificar ninguna tabla

tabla productos
codigo PK
precio
cantidad
fecha

tabla idioma
id_codigo PK FK
idioma PK
nombre
descrip

solamente hay q hacer un pco mas de trabajo de programaicon por abajo para mantener esto
__________________
Degiovanni Emilio
developtus.com
  #4 (permalink)  
Antiguo 30/11/2007, 11:17
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 21 años
Puntos: 4
Re: Diseño multidiomas

Gracias por las respuestas amigos

Con respecto a lo que helacer propone me parece que tendríamos más problemas a la hora de crear un nuevo idioma. Es decir, al cliente no lo liberaríamos de volver a pedirnos ayuda para cambiar el diseño de la base de datos que es más crítico que cambiar la parte visual por ejemplo. A parte que en el momento de tener 5 idiomas por dar un ejemplo las tablas ya serían un poco grandes. Me parece interesante para hacer las consultas pero no creo tan conveniente para el diseño de la aplicación.

Ahora, emiliodeg.
Yo también pienso que es lo mejor. De todas maneras trato ver si se prende un poco el foquito para ver como poder lograr una estructura que ayude un poco más a este tipo de sitios ya que como lo vengo comentando arriba los frameworks que ayudan bastante casi no pueden ser utilizados ya que la estructura de tablas es más complicada. Qué opinas de esto?

Por dar un ejemplo. En lugar de usar una funcion que haga $this->Producto->create_from_request(); y solucionado el problema de un alta tengo que
1 guardar el contenido en el idiomas predeterminado,
2 preguntar si el usuario cargo algo en el idioma 2
3 consultar en la base si ya existe ese registro en el idioma 2
4 si existe lo actualizo
5 si no existe lo inserto

Se entiende?
  #5 (permalink)  
Antiguo 05/12/2007, 16:38
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 7 meses
Puntos: 25
Re: Diseño multidiomas

Lo más flexible es crear una tabla de idiomas y tener tablas de descripciones en las que incluyas el ID del idioma, tanto para lo que maneje tu aplicación como para los textos de las pantallas en si.

El problema es que TODA la aplicación implica querys a la DB, pues cada letrero, implicará una consulta para obtener cualquier mensaje.

La ventaja es que agregar un nuevo idioma es tan trivial como agregar las descripciones en las tablas correspondientes usando el ID de idioma generado.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #6 (permalink)  
Antiguo 12/12/2007, 08:56
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 21 años
Puntos: 4
Re: Diseño multidiomas

Si también creo que usar la base de datos es bastante interesante para este tipo de cosas. Hay alguien que maneje algun framework php por ejemplo phpcake, kumbia, symfony que de su opinion sobre este tipo de estructuras? con respecto al create_from_request o cosa parecida que describo arriba.

Son realmente necesaria tantas vueltas para los sitios multiidiomas?

Para los administradores suelo poner un formulario por ejemplo de productos para cada idioma una al lado del otro. Lo bueno de esto es que al mismo tiempo de cargar un idioma el usuario puede ver que tiene en el otro idioma, lo malo es que cuando hayan 5 idiomas ya no va a entrar en la pantalla jaja.

Como lo hacen ustedes?
  #7 (permalink)  
Antiguo 26/08/2008, 09:36
 
Fecha de Ingreso: agosto-2008
Ubicación: General Roca, Río Negro, Patagonia, Argentina
Mensajes: 1
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Diseño multidiomas

Yo trabajo la administración de contenidos multiidioma con un formulario para los datos no traducibles y otro para los datos multiidioma, dentro de la misma pantalla. Supongamos el siguiente modelo (las tablas a continuación):
idiomas
id
nombre

productos
id
precio

productos_trad
productos_id
idiomas_id
nombre
descripcion

En la tabla productos_trad, (productos_id, idiomas_id) es una clave UNIQUE.

En la pantalle de alta o modificación de datos, la primera parte de mi formulario está dedicada a los datos de la tabla `productos` (en este caso tendría un input para el campo `precio`).

La segunda parte de mi formulario, es un fieldset compuesto por un combo de idiomas disponibles para traducir (a partir de un query que elige de la tabla `idiomas`aquellos que no tienen una entrada en la tabla `productos_trad`- es decir, aquellos para los cuales este producto no tiene traducción), un input para `nombre` y un input para `descripcion`. Entonces, al momento de crear, eliges un idioma para el cual quieres dar de alta los datos y creas el producto, en ese idioma. Si es que hay mas de un idioma disponible, el sistema quedará en esa pantalla, dando la opción de cargar traducción para otro idioma, o editar en un abm de producto_traduccion las traducciones ya cargadas.

Es un poco largo el desarrollo, pero también necesario, y una vez que se mecaniza el proceso, se puede incorporar el modelo multiidioma como un estándar de trabajo, ya que muchos clientes exigen esta flexibilidad.
  #8 (permalink)  
Antiguo 26/08/2008, 13:49
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 9 meses
Puntos: 13
Respuesta: Diseño multidiomas

Por que alguien se registra para contestar a un hilo de hace casi un año????
  #9 (permalink)  
Antiguo 26/08/2008, 23:03
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 23 años
Puntos: 655
Respuesta: Diseño multidiomas

CERRADO...

No se permite revivir temas viejos.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 23:11.