varios traducir poner para pagina otros multilenguaje idiomas idioma como codigo cambiar database java-ee web-applications multilingual multilanguage

database - traducir - menu idiomas html



¿Cómo construyes un sitio web multilingüe? (5)

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

Me dijeron que la mejor manera de respaldar un sitio en varios idiomas es usar un archivo de propiedades donde almacene todas las cadenas de sus 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)? Quiero decir, contenido que no es estático, que se actualiza a menudo ... Las personas que mantienen el sitio tienen que escribir cada entrada nueva 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.


La forma en que diseñé la base de datos 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 finalmente tiene una tabla de idiomas que tiene LanguageID (int) y LanguageName (varchar).

Luego, cuando desee mostrarles a sus usuarios la página de noticias que usted hace:

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 almacena el idioma de los usuarios cuando inician sesión o ingresan al sitio por primera vez.


@Auron

eso es a lo que lo aplicamos. Nuestras aplicaciones son todas PHP, pero gettext tiene un largo historial.

Parece que hay una buena implementación de Java


Advertencia: no soy un hacker java, por lo que YMMV pero ...

El problema con el uso de una lista de "propiedades" es que necesitas mucha disciplina. Cada vez que agregue una cadena que se debe enviar al usuario, tendrá que abrir su archivo de propiedades, ver si esa cadena (o algo equivalente) ya está en el archivo, y luego ir y agregar la nueva propiedad si no lo es Además de esto, habría que esperar que el archivo de propiedades fuera legible / editable de forma bastante humana si quisiera entregarlo a un equipo externo de traducción.

El enfoque basado en la base de datos es útil para todo su contenido basado en la base de datos. Lo ideal es que sea más fácil vincular las piezas de contenido con sus traducciones. Solo se cae realmente en todos los lugares en los que desee dar salida a algo que no está fuera de una base de datos (mensajes de error, etc.).

Una tecnología bastante antigua que encontramos todavía funciona muy bien, es usar gettext. Gettext o alguna variante parece estar disponible para la mayoría de los lenguajes y plataformas. La premisa básica es que envuelva su salida en una llamada a función especial como esta:

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

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

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

Y puede agregar su 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 tus archivos po. Ni siquiera necesita extraer el archivo po de su fuente. Si sabe que es posible que desee traducir su sitio más adelante, puede usar el formato que se muestra arriba (la función subrayada) con todos sus resultados. Si no proporciona un archivo po, simplemente devolverá lo que ponga entre comillas. gettext está diseñado para funcionar con configuraciones regionales, por lo que la configuración regional de los usuarios se utiliza para recuperar el archivo po apropiado. Esto hace que sea realmente fácil agregar nuevas traducciones.

Gettext Pros

  • No se interpone en su camino mientras codifica
  • Traducciones muy fáciles de agregar
  • Los archivos PO se pueden compilar para mayor velocidad
  • Hay bibliotecas disponibles para la mayoría de los idiomas / plataformas
  • Existen buenas herramientas de plataforma cruzada para tratar las traducciones. En realidad, es posible configurar su equipo de traducción con una herramienta como poEdit para facilitarles la administración de proyectos de traducción.

Gettext Contras

  • Resuelve las necesidades de "mobiliario" de su sitio, pero normalmente aún desea un enfoque basado en la base de datos para su contenido impulsado por la base de datos

Para más información sobre gettext, vea esta página wikipedia


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


Las aplicaciones web de 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 . Utiliza Java ResourceBundle para lograr esto. Logré obtener un paquete respaldado basado en datos que funciona con la ayuda de este sitio.

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

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