Pregunta

Un amigo mío está creando una aplicación web con J2EE y Struts, y estará preparada para mostrar páginas en varios idiomas.

Me dijeron que la mejor manera de soportar un sitio multilingüe es usar un archivo de propiedades donde almacenas todas las cadenas de tus páginas, algo como:

welcome.english = "Welcome!"
welcome.spanish = "¡Bienvenido!"
...

Esta solución está bien, pero ¿qué sucede si su sitio muestra noticias o algo así (un blog)?Es decir, contenido que no sea estático, que se actualice a menudo…Las personas que mantienen el sitio deben escribir cada nueva entrada en cada idioma admitido y almacenar cada versión de la entrada en la base de datos.La aplicación carga solo las entradas en el idioma elegido por el usuario.

¿Cómo se diseña la base de datos para soportar este tipo de implementación?

Gracias.

¿Fue útil?

Solución

La forma en que diseñé la base de datos antes es tener una tabla de noticias que contenga información básica como NewsID (int), NewsPubDate (datetime), NewsAuthor (varchar/int) y luego tener una tabla vinculada NewsText que tenga estas columnas:NewsID(int), NewsText(texto), NewsLanguageID(int).Y por fin tienes una tabla de idiomas que tiene LanguageID(int) y LanguageName(varchar).

Luego, cuando quieras mostrarles a tus usuarios la página de noticias, haz lo siguiente:

SELECT NewsText FROM News INNER JOIN NewsText ON News.NewsID = NewsText.NewsID
WHERE NewsText.NewsLanguageID = <<Session["UserLanguageID"]>>

Ese bit de sesión es una variable local donde se almacena el idioma de los usuarios cuando inician sesión o ingresan al sitio por primera vez.

Otros consejos

Advertencia:No soy un hacker de Java, así que YMMV pero...

El problema de utilizar una lista de "propiedades" es que se necesita mucha disciplina.Cada vez que agregue una cadena que debe enviarse al usuario, deberá abrir su archivo de propiedades, ver si esa cadena (o algo más o menos equivalente) ya está en el archivo y luego agregar la nueva propiedad. si no lo es.Además de esto, tendría que esperar que el archivo de propiedades fuera bastante legible/editable por humanos si quisiera entregárselo a un equipo de traducción externo para que lo tratara.

El enfoque basado en bases de datos es útil para todo el contenido basado en bases de datos.Lo ideal sería facilitar la vinculación de piezas de contenido con sus traducciones.En realidad, solo falla en todos los lugares en los que desea generar algo que no es fuera de una base de datos (mensajes de error, etc.).

Una tecnología bastante antigua que creemos que todavía funciona muy bien es utilizar gettext.Gettext o alguna variante parece estar disponible para la mayoría de los idiomas y plataformas.La premisa básica es que envuelves tu salida en una llamada de función especial así:

echo _("Please do not press this button again");

Luego, ejecutar las herramientas gettext sobre su código fuente extraerá todas las instancias empaquetadas así en un archivo "po".Este contendrá entradas como:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr ""

Y puedes agregar tu traducción al lugar apropiado:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr "s’il vous plaît ne pas appuyer sur le bouton ci-dessous à nouveau"

Las ejecuciones posteriores de las herramientas gettext simplemente actualizan sus archivos po.Ni siquiera necesitas extraer el archivo po de tu fuente.si te conoces puede Si desea traducir su sitio en el futuro, puede utilizar el formato que se muestra arriba (la función subrayada) con todos sus resultados.Si no proporciona un archivo po, simplemente devolverá lo que haya puesto entre comillas.gettext está diseñado para funcionar con configuraciones regionales, por lo que la configuración regional del usuario se utiliza para recuperar el archivo po apropiado.Esto hace que sea realmente fácil agregar nuevas traducciones.

Ventajas de Gettext

  • No se interpone en tu camino mientras codificas
  • Muy fácil de agregar traducciones.
  • Los archivos PO se pueden compilar para mayor velocidad
  • Hay bibliotecas disponibles para la mayoría de los idiomas/plataformas.
  • Existen buenas herramientas multiplataforma para gestionar las traducciones.De hecho, es posible configurar su equipo de traducción con una herramienta como poEditar para que les resulte muy fácil gestionar proyectos de traducción

Contras de Gettext

  • Resuelve las necesidades de "muebles" de su sitio, pero normalmente aún querrá un enfoque basado en bases de datos para el contenido basado en bases de datos.

Para obtener más información sobre gettext, consulte esta página de wikipedia

Las aplicaciones web Java admiten la internacionalización utilizando la biblioteca de etiquetas estándar de Java.

Realmente tienes 2 problemas.Contenido estático y contenido dinámico.

para contenido estático puedes usar jstl.usa java Paquete de recursoss para lograr esto.logré conseguir un Paquete respaldado con base de datos trabajando con la ayuda de este sitio.

El segundo problema es el contenido dinámico.Para resolver este problema, necesitará almacenar los datos para poder recuperar diferentes traducciones según la configuración regional del usuario.(La configuración regional incluye país e idioma).

No es trivial, pero es algo que puedes hacer con un poco de planificación por adelantado.

@Auron

a eso lo aplicamos.Todas nuestras aplicaciones son PHP, pero gettext tiene una larga trayectoria.

Parece que hay un buena implementación de Java

Las bibliotecas de etiquetas están bien si usa JSP, pero también puede lograr I18N usando una tecnología basada en plantillas como Marcador gratuito.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top