Webs multilingües

Translate Web

En mi trabajo he tenido que hacer muchas webs, la mayoría de ellas no demasiado complicadas, pero si con un aspecto común a muchas. Que son multilingues

Al principio puse el soporte para varios lenguaje a lo bruto, es decir, mediante un parámetro que se pasa por la url y con los textos en el código. Obviamente esto es una aberración.

Así que me he puesto a hacer un sistema para hacer webs multilingües. Los objetivos que quería cumplir son:

  • Que los textos se guarden en base de datos, ni en archivos de texto plano y mucho menos en el propio código. No se porqué, pero me resulta más cómodo trabajar con bases de datos que con archivos
  • Que sea fácil añadir nuevos idiomas a una web ya hecha. Básicamente, que se pueda hacer esto sin tener que tocar nada de código
  • Que tenga un sistema de usuarios para realizar las traducciones de los textos

Estos tres puntos creo que ya los he conseguido terminar. Tal vez el tercer punto es un poco precario, pero bueno. Lo iré probando en mis distintas webs, a ver que tal funciona.


Publicado

en

por

Etiquetas:

Comentarios

2 respuestas a «Webs multilingües»

  1. Avatar de Doc
    Doc

    Bueno, yo llevo así como cinco años currando en un proyecto muy grande (creo que es más grande del mundo hecho en PHP) y es multilenguaje. Probamos varias opciones para gestionar los idiomas y depende de muchos factores, desde la cantidad de idiomas hasta la cantidad de textos a traducir. Por si te sirve de ayuda, te comento algunas de las soluciones que hemos usado:

    1) Textos asociados a campos de una base de datos: la típica tabla «perfil» donde guardas la descripción del perfil, por ejemplo.
    –a)Crear una tabla perfil_language (o similar) donde guardas el ID del perfil, el ID del idioma y el texto
    –b)Crear una tabla «diccionario». En la tabla «perfil» metes un campo con el ID_diccionario y en la «diccionario» el ID, el ID del idioma y el texto. Aquí es muy útil (y mejora mucho el rendimiento) crearte algún proceso almacenado para gestionar los inserts y las lecturas

    2) Textos del front-end (textitos escritos a puro huevo, del pelo de «pulse aquí para ver la foto»
    –a) Usar «semi»templates. Haces uno para cada idioma y lo incluyes después de la lógica. Muy buen rendimiento y útil sobre todo cuando tienes pocos idiomas y si las páginas no cambian mucho.
    –b)Usar una tabla «Wordlist» (o así) en la que la clave primaria es el identificador del texto (pero esta vez en texto; en el ejemplo sería «PULSE AQUI PARA VER LA FOTO»), texto en el idioma e ID del idioma. Luego te curras una función (si quieres te paso alguna, la mía se llama txt) tal que cuando haces un echo pones . La función busca el idioma y te recupera el texto traducido, y si no lo encuentra lo inserta en la tabla en un lenguaje por defecto. Esta es muy cómoda para desarrollos largos y que cambien mucho.

    Todo un mundo esto de las webs multilingÌes.

  2. Avatar de Angelito
    Angelito

    Gracias, doc. De momento, lo que yo necesito es algo del tipo 2.b. En principio, solo necesito que la interfaz de mi web sea en varios idiomas. Otra parte importante es que un traductor totalmente externo a la aplicación pueda añadir un nuevo idioma vía una interfaz web.

    Más o menos he cogido la opción que usas tú. Una tabla con los textos y dos claves ajenas, una a una tabla de idiomas y otra a otra tabla de identificadores de textos.

    La diferencia es que yo tengo agrupados los textos por secciones. Así, por ejemplo, tengo una sección home, otra usuarios, otra faq y una global. Mediante una funcion getSectionText, recupero un array con los textos de dicha sección.

    Supongo que cuando tenga el sistema más o menos funcional, lo distribuya bajo GPL.

    Chao

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *