[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [mindfood] Patrones / buenas prácticas en aplicaciones multi-idioma



Hola,

Creo que Jose sólo entra en la problemática de datos enumarados, pero no
en la gestión de la información que debe almacenarse y puede presentarse
en diferentes idiomas. Como Daniel pregunta por el impacto de este
requisito en las diferentes capas de una aplicación web, creo que un
buen recurso son los Java Blueprints, en concreto el capítulo de i18n y
l10n de "Designing Enterprise Applications with the J2EE Platform". [1] 


Creo que es muy bueno porque describe cómo internacionalizar la capa
web, pero también la capa de EIS (Enterprise Information Systems), es
decir, el modelo de base de datos. En el documento se proponen tres
alternativas para una base de datos internacionalizada (mirad gráfico
[2]):

1.- Repetir columnas en una misma tabla una para cada idioma. (Una tabla
pollo con columnas nombre_es, nombre_en, descripción_es, descripción_en,
etc.

2.- Crear una tabla con los datos comunes y luego una tabla con la
información específica en cada idioma. Por ejemplo una tabla pollo con
el pollo_id,  fecha nacimiento, peso, etc. Y luego una tabla
pollo_detalles_es con nombre_es, descripción_es y por supuesto con el
pollo_id como FK, y una tabla pollo_detalles_en con nombre_en,
descripción_en, etc.

Estas dos opciones tienen la desventaja que cada vez que se quiere
añadir un nuevo idioma, implica cambiar tanto el modelo de datos (crear
nuevas columnas en el primer caso y crear nuevas tablas en el segundo)
así como modificar el código para acceder a los nuevos datos.

3.- La solución que proponen es basándose en la idea 2: crear una tabla
común y luego una tabla pollo_detalles en la que cada registro está
identificado además de por el pollo_id por el locale. De esta forma si
queremos consultar los datos del pollo en castellano consultamos por el
pollo_id X con locale:es. Esta solución presenta la gran ventaja de que
el código no cambia (no hay que consultar nuevas tablas ni columnas) y
el modelo de datos tampoco, tan solo hay que añadir nuevas tuplas para
cada idioma.

Espero que te sirva la idea. 

Saludos a todos.

[1]
http://java.sun.com/blueprints/guidelines/designing_enterprise_applicati
ons_2e/i18n/i18n.html

[2]
http://java.sun.com/blueprints/guidelines/designing_enterprise_applicati
ons_2e/images/i18na.gif