​En Qabiria expresamos todo nuestro apoyo a todas las personas que están enfrentándose en primera línea a la emergencia COVID-19 y a los que más sufren sus consecuencias. Además de seguir trabajando para ofrecer nuestros servicios de forma regular, estamos a disposición de clientes y proveedores para encontrar soluciones a cualquier dificultad que pueda surgir de la prolongada situación de emergencia.

3 herramientas de código abierto para desarrollar sitios multilingües

(0 Votos)
3 herramientas de código abierto para desarrollar sitios multilingües
Artículo traducido al castellano por Gabriela Richarte.

Cómo configurar Grav, Git y OmegaT para crear y traducir sitios web en más de un idioma

En este artículo presentamos un sistema para crear sitios web multilingües con tres herramientas gratuitas y open source. Las tres herramientas son un CMS (sistema de gestión de contenidos), un sistema de control de versiones y un programa de traducción asistida, o sea:

  • Grav
  • Git
  • OmegaT

Grav

Grav es un CMS flat-file de código abierto. CMS significa Content Management System, sistema de gestión de contenidos.

Un CMS es un programa que se instala en un servidor web y facilita tanto la creación como la gestión de sitios web. Normalmente, presenta una interfaz gráfica de administración, llamada back-end, desde el cual es posible administrar todos los aspectos visibles del sitio (el front-end) sin necesidad de hacer cambios en el código.

El aspecto del sitio, en cambio, está controlado por los llamados «temas» o «templates», un conjunto de archivos que se instalan por separado y que modifican el diseño, los colores, la distribución del contenido en la página, etc.

Los CMS más conocidos son WordPress, Joomla y Drupal, pero existen cientos de ellos. Se calcula que alrededor de la mitad de los sitios existentes se basan en un CMS.

La mayoría de estos sistemas, como WordPress o Joomla, guarda los contenidos generados por el usuario en una base de datos (normalmente MySQL), mientras que las páginas del sitio se generan mediante archivos PHP. Estos sistemas se denominan CMS basados en base de datos.

Al contrario de WordPress, Grav no guarda los cotenidos en una base de datos. Pertenece a otra categoría, los CMS llamados «flat-file», es decir, basados en archivos.

Los contenidos generados por el usuario se guardan como un archivo de texto en formato Markdown (*.md). Markdown es un lenguaje de marcado que facilita la escritura de archivos que luego serán convertidos en HTML u otros formatos. Los archivos Markdown son archivos de texto simple que siguen una sintaxis especial.

Ventana de Grav

Esta característica agiliza enormemente el trabajo de administración y de gestión.

Un dato: para hacer una copia de seguridad de un sitio desarrollado con Grav (u otro CMS flat-file) basta con descargar el directorio que contiene el sitio. No es necesario descargar los archivos por un lado y volcar («dump») la base de datos por otro, como sería el caso de un CMS con base de datos.

Otra ventaja, importantísima para nuestro objetivo, es que para localizar el sitio basta con crear los archivos de texto en varios idiomas y cambiar algunos ajustes en el archivo de configuración del sistema.

En cambio, en un CMS con base de datos, deberíamos intervenir en la estructura de la base de datos, o bien instalar complementos (plugins) específicos para la internacionalización de la web.

Además, Grav es un proyecto open source, es decir que su código es abierto, libremente visible y modificable. Fue votado como «Mejor CMS open source» en el 2016 y «Mejor CMS flat file» en el 2017 por CMS Critic.

El hecho de no tener que recuperar el contenido de una base de datos es muy rápido, pero también es lo suficientemente versátil y potente como para ser utilizado para la creación de casi cualquier tipo de sitios.

Grav dispone de una interfaz de administración, pero también se puede realizar toda gestión directamente desde la línea de comando, lo que ofrece a los administradores una ventaja adicional en términos de flexibilidad. En lo que respecta la funcionalidad multilingüe, Grav está diseñado con la internacionalización en mente, es decir que ya está preparado para publicar sitios en varios idiomas. Para nosotros, este es un aspecto esencial y uno de los motivos por que lo estudiamos y analizamos.

Git

Git es un programa de control de versión distribuido.

El control de versión es un sistema que permite hacer un seguimiento de las modificaciones realizadas en un archivo o una serie de archivos. Estos archivos normalmente pertenecen al código fuente de un programa, pero el sistema puede registrar las modificaciones en cualquier tipo de archivo. En nuestro caso, utilizaremos el control de versión para controlar las modificaciones de los archivos pertenecientes a nuestro sitio web, como veremos a continuación.

Sin entrar en detalles, los sistemas de control de versión pueden ser:

  • locales
  • centralizados
  • distribuidos

Los sistemas de control de versión centralizados, como CVS o Subversion, tienen un único servidor que contiene todas las versiones de los archivos. Los usuarios descargan («hacen el checkout») los archivos del servidor central y luego lo vuelven a cargar una vez que terminan de modificarlos («hacen el commit»).

En los sistemas de control de versiones distribuidos, como Git, todos los usuarios tienen una copia completa del llamado «repository» (es decir, del proyecto completo) en el propio dispositivo. De esta manera, si el servidor dejara de estar disponible, el usuario podría recuperarlo a partir de su copia. Para profundizar sobre este tema, recomendamos leer la documentación oficial de Git.

Para nuestros propósitos, basta con saber que los usuarios de Git pueden trabajar cada uno en su propia «rama» de desarrollo, introducir y registrar cambios, y luego compartir esos cambios o fusionarlos con otros.

Para utilizar Git, debes instalar el programa en tu dispositivo y, si lo deseas, también una interfaz gráfica para mayor comodidad. Viene por defecto en prácticamente todas las distribuciones de Linux, mientras que para Mac y Windows se instala por separado.

También existen servicios en línea que permiten tener un repository Git en un servidor remoto sin tener que instalar Git en el ordenador. Utilizaremos uno de estos: GitLab.

GitLab

GitLab es una plataforma web, también de código abierto, para la gestión de repositories Git. Según el tipo de suscripción, ofrece varias funcionalidades. En su versión gratuita se ofrecen proyectos privados y colaborativos ilimitados, pero con un número de operaciones limitado a 2000 (expresadas como minutos de CI pipeline por grupo al mes).

Para utilizar GitLab es necesario estar registrados en su web y crear uno o más proyectos a través de la interfaz online.

Nuevo proyecto en GitLab

OmegaT

OmegaT è un programa de traducción asistida también de código abierto. Un programa de traducción asistida, o herramienta TAO, es un programa compuesto por varios módulos, que guarda los textos originales y la respectiva traducción en una base de datos (llamada «memoria de traducción») y, al mismo tiempo, pone a disposición del usuario-traductor varios instrumentos integrados para facilitar la actividad de traducción (glosarios, diccionarios, corrector ortográfico, etc.).

A menudo hemos hablado de OmegaT y recomendamos que veas nuestras presentaciones en el apartado correspondiente.

Una de las particularidades de OmegaT es que puede leer una vasta cantidad de formatos de archivos, entre los cuales los archivos markdown (*.md) y los archivos de texto simples (.txt).

Otra particularidad es que puede leer un proyecto guardado en un repository Git, y permite que varios traductores lo modifiquen. Esta función se llama «team project» y reemplaza eficazmente el uso de un sistema centralizado de memoria de traducción. Ya hemos explicado en otro tutorial cómo crear un proyecto compartido con OmegaT y Subversion. El procedimiento con Git es prácticamente el mismo.

OmegaT team project

Cómo combinar los sistemas

Grav, Git y OmegaT pueden vincularse entre sí como se explica a continuación. Para los casos en los que no se detalle el procedimiento, recomendamos leerlo en la documentación oficial de cada programa.

Damos por descontado que ya estás utilizando Grav en la creación y administración de un sitio. De no ser así, la documentación del sistema ilustra cómo descargarlo, instalarlo y configurarlo.

Para Grav es necesario instalar un plugin que permite sincronizar bidireccionalmente todo el sitio web con un repository Git. Este plugin se llama Git Sync. «Bidireccionalmente» quiere decir que las modificaciones que realiza un usuario en el repository Git se verán reflejadas en el sitio y, en forma inversa, todas las modificaciones realizadas en Grav se verán reflejadas en el repository.

Git Sync

Varios autores podrán, de esta manera, colaborar en los textos del sitio, tanto en modo compartido, es decir, entrando en el back end de Grav, como interviniendo directamente en los archivos de texto y sincronizándolos luego con Git.

Por cuestiones de comodidad, creamos el repository Git principal en GitLab, para seguir todo el proceso sin siquiera preocuparnos por descargar Git de manera local. Las instrucciones precisas para crear un repository se encuentran aqui: https://docs.gitlab.com/ee/user/project/repository/.

Nota: si hay que traducir un sitio en más de un idioma, existen dos posibilildades: o crear un repository distinto para cada idioma destino, es decir, uno por cada proyecto de OmegaT, o crear un único repository con subcarpetas donde guardar los distintos proyectos de OmegaT, o sea, una subcarpeta por idioma. Aconsejamos crear un repository para cada idioma.

Digamos que queremos crear un sitio en tres idiomas: italiano (lengua de origen o L1), español (lengua de llegada, L2) e inglés (segunda lengua de llegada, L3). Decidimos elegir la primera opción, es decir, crear tres repositories distintos:

  1. un repository Git que incluirá la estructura del sitio en la lengua original (L1)
  2. un repository Git para el proyecto de traducción de OmegaT de L1 a L2
  3. un repository Git para el proyecto de traducción de OmegaT de L1 a L3.

La sincronización entre el repository 1 y el sitio se hace a través del plugin Git Sync, cada vez que se hace clic en el icono de sincronización.

La sincronización entre el repository 2 y los respectivos proyectos locales de OmegaT tendrá lugar en el momento en que OmegaT se conecta al repository por primera vez y todas las veces que se guarde (tambien automáticamente) el proyecto de traducción por parte de uno de los traductores involucrados (si hubiera más de uno). Lo mismo pasa para el repository 3.

Los archivos traducidos con OmegaT en el repository 1 deberían guardarse cuando se selecciona el comando «Commit target files» en OmegaT. Utilizamos el condicional porque - a causa de un bug aún no resuelto - este comando no funciona si la carpeta /target se ha configurado en un repository distinto al que aloja el proyecto de traducción (mediante la función de mapeo del repository que veremos más abajo.) Mientras esperamos una solución a este problema por parte de los programadores de OmegaT, sugerimos copiar los archivos traducidos de la carpeta /target del proyecto local al servidor web mediante una conexión FTP.

Cómo configurar OmegaT

El flujo de trabajo de las traducciones se gestiona con OmegaT.

Habitualmente, un proyecto de OmegaT está formado por una serie de carpetas:

  • dictionary
  • glossary
  • omegat
  • source
  • target
  • tm

y por un archivo omegat.project que contiene las especificaciones del proyecto.

Para empezar, creamos un nuevo proyecto local, es decir, en nuestro ordenador, haciendo clic en Project > New, y seleccionando la pareja de idiomas que utilizaremos (en nuestro caso será de italiano a español). Recuerda marcar la casilla que configura reglas de segmentación específicas del proyecto, para evitar diferencias de segmentación entre los varios traductores involucrados en el proyecto. De la misma forma, marca la casilla que hace que las opciones de filtro de archivos sean específicas del proyecto.

El procedimiento habitual consiste en copiar los archivos por traducir a la carpeta /source del proyecto. Una vez traducidos, se crea los archivos de destino en la carpeta /target.

Sin embargo, en nuestro caso, los archivos que hay que traducir corresponden a los archivos *.md que se encuentran en la carpeta user/pages/ del sitio creado con Grav.

 

Para evitar copiar y pegar los archivos traducidos online se utiliza la función de «mapeo» de las carpetas del proyecto. Gracias a esta función de OmegaT, no es necesario que todas las carpetas estén dentro de la carpeta principal del proyecto.

 

Es posible configurar OmegaT de forma que cada una de las carpetas de proyecto sea redirigida a una carpeta de otro repository siempre que sea igualmente accesible.

 

Entonces, se le indica a OmegaT que use la carpeta user/pages como carpeta de origen de los archivos por traducir.

 

Los archivos traducidos, que se crearán a nivel local en la carpeta /target, también se copiarán/sincronizarán en esa carpeta. Esto resulta necesario para que funcione el mecanismo multilingüe de Grav, el cual prevée que los contenidos en varios idiomas (los archivos *.md) estén presentes en la misma carpeta.

 

Por ejemplo, para tener una págna inicial en los 3 idiomas que mencionamos más arriba, hay que tener home.it.md, home.es.md y home.en.md dentro de la carpeta 01.home.

A propósito del filtro de los archivos, antes dijimos que OmegaT puede traducir archivos en formato Markdown. Sin embargo, este filtro que pertenece a la familia de plugins Okapi para OmegaT aún se encuentra en fase de desarrollo.

Uno de los defectos actuales es que no respeta los espacios en blanco al principio de la línea al generar los archivos traducidos, que de esta forma no se pueden usar en Grav. Mientras esperamos que los desarrolladores del plugin Okapi solucionen este problema, aconsejamos usar el filtro para archivos de texto simple (Text).

La diferencia principal es que tanto el encabezado del archivo como el cuerpo de texto de los archivos de Markdown aparecerán como traducibles. La mayoría de las opciones del encabezado debería dejarse intacta, pero a veces en la cabecera también se encuentran cadenas de texto para localizar, por lo que esta aparente limitación se convierte en una ventaja. Si utilizáramos el filtro para los archivos Markdown, estaríamos obligados a intervenir de forma manual en el encabezado después de haber generado el archivo traducido.

En la ventana Project Specific File Filters, selecciona Text y luego en Options... selecciona la opción que segmenta el texto de origen en correspondencia a los saltos de línea («line breaks»).

Luego, hay que configurar OmegaT de manera que guarde los archivos traducidos con un nombre diferente del original, siguiendo la sintaxis con el sufijo de la lengua de llegada. Como hemos visto anteriormente, los archivos traducidos se deben guardar en la misma carpeta que contiene los originales, y por lo tanto es necesario renombrarlos por dos motivos:

  • no queremos que sobreescriban los originales
  • Grav necesita que los distintos archivos traducidos estén en la misma carpeta del original para que funcione correctamente el emparejamiento entre los idiomas.

Por eso, en las configuraciones del proyecto, haz clic en File Filters..., y elige el filtro Text, luego haz clic en Edit....

En la ventana emergente, agrega el patrón *.it.md y agrega >${nameOnly-0}.es.md en la casilla Translated Filename Pattern. El código nameOnly-0 indica a OmegaT que utilice la parte del nombre de un archivo, excluyendo el sufijo y su extensión.

Si estas traduciendo a otro idioma, cambia el código ISO de la lengua.

Cuando agregamos el patrón *.it.md, OmegaT ignorará los archivos contenidos en la carpeta predeterminada como origen que están en un idioma distinto del que se configuró como original (en nuestro caso el italiano).

Filtro de archivo de texto en OmegaT

En las propiedades del proyecto, es necesario hacer clic en Repository Mapping y agregar, en la primer tabla, la dirección de todos los repositories que se van a utilizar, es decir la URL del proyecto o del repository 1 creado en GitLab y, por ende, el de todos los repository que contendrán los proyectos de OmegaT.

En la parte inferior de la misma pantalla, escribe el mapeo de las carpetas:

  • la capeta source = a la carpeta user/pages del repository 1;
  • la carpeta target = a la carpeta user/pages del repository 1.

La carpeta user/pages de Grav es aquella que contiene las carpetas y los archivos correspondientes a las páginas de un sitio web.

Mapeo de carpetas en OmegaT

Para evitar cargar en la lista de archivos a traducir las imágenes y los eventuales PDF presentes en el sitio, es necesario configurar un filtro en la configuración del proyecto compartido, excluyendo todos los archivos con extensión jpg, gif, png y pdf.

También es posible escribir una regex que le diga a OmegaT que ignore cualquier otra cosa que no sea .md, pero por simplicidad decidimos hacer explícitos los archivos para excluir uno por tipo, como se ve en la imagen.

Exclusiones

Llegados hasta aquí es conveniente recargar el proyecto y controlar que funcione la sincronización con los repositories configurados.

Luego es necesario «hacer el commit» del proyecto local en un proyecto compartido mediante Git, utilizando el correspondiente comando Git,

En el caso de GitLab, el procedimiento puede realizarse por terminal, si utilizas un sistema operativo en el que Git está instalado, o puedes utilizar la interfaz web de GitLab, que sin embargo no te permite cargar carpetas, sino solo archivos.

La forma mas sencilla es crear manualmente las carpetas de un proyecto de OmegaT, es decir:

  • glossary
  • omegat
  • source
  • tm

y sucesivamente cargar el archivo omega.project en el nivel raíz (root) del proyecto (se carga el archivo omegat.project del proyecto creado localmente)

Con esta configuración, todos los traductores que trabajen en el proyecto podrán descargar localmente el proyecto de traducción correspondiente a su idioma, traducir los archivos y finalmente generar los archivos de destino, que se guardarán en la misma carpeta establecida como fuente, pero con el sufijo del idioma de destino.

Solo nos quedaría guardar en el servidor web todos los archivos traducidos, de manera que estén en línea con el resto del sitio. Hasta que no se corrija el bug de OmegaT, esto deberá hacerse a través de FTP o similar.

Además de todo lo que hemos explicado hasta aquí, hay algunos arreglos necesarios que deben hacerse dentro de Grav. Están todos explicados en el capítulo Multi-language de la documentación oficial, por lo tanto no entraremos en detalles.

Es especialmente importante agregar la opción slug dentro de cada página. Esta opción indica a Grav cómo tiene que ser traducida el URL de una página. Utilizando el mismo ejemplo de la documentación, si el sitio tuviera la siguiente estructura (en la web original en italiano):

- 01.Animali
  - 01.Mammiferi
    - 01.Pipistrelli
    - 02.Orsi
    - 03.Volpi
    - 04.Gatti
  - 02.Rettili
  - 03.Uccelli
  - 04.Insetti

tendríamos una URL del tipo http://dominio.com/animali/mammiferi/orsi. Al momento de traducir el sitio en español, resulta útil que además el URL aparezca en español. Basta con agregar la opción slug: seguida de su traducción (sin caracteres especiales). Por ejemplo:

---
title: Mamíferos
slug:  mamiferos
---

Siguiendo este criterio, la URL en español tendrá un aspecto como este: http://dominio.com/animales/mamiferos/osos

Gracias al procedimiento que se explica brevemente en este artículo es posible no solo traducir un nuevo sitio, sino también traducir todas las actualizaciones.

Bastará con configurar unas notificaciones (automáticas o no) que se recibirán cada vez que los autores añadan o editen contenido en el idioma de origen y, entonces, traducir los textos nuevos.

Por complejo que parezca, el proceso es mucho más fácil de realizar que de explicar. Una vez configurado para un primer sitio, los pasos son los mismos para todos los demás. Para un gestor de proyectos, un pequeño empresario e incluso para una agencia de traducción como nosotros, la combinación de Grav, GitLab y OmegaT abre realmente un abanico de oportunidades para gestionar la creciente demanda de desarrollo de sitios multilingües con mayor flexibilidad y eficiencia.

Para cualquier duda o pregunta, la sección de comentarios a continuación está abierta a todo el mundo. Si quieres internacionalizar tu sitio web o traducirlo a otro idioma, puede reservar una consulta gratuita y sin compromiso.

¿Necesitas ayuda para traducir tu web? ¡Contacta con nosotros!

 

Qabiria white logo

Creemos en el incremento de la productividad mediante el uso creativo de la tecnología.

Últimas noticias

Contacto

Qabiria Studio SLNE
Carrer Lleida, 3 1-2
08912 Badalona
(Barcelona)
ESPAÑA

+34 675 800 826

qabiria

Envíanos un mensaje

Recibe nuestro boletín

¿Quieres leer los artículos y novedades de Qabiria directamente en tu bandeja de entrada?