La anterior entrada de Melodía de traducción servía de introducción a los filtros de archivos, los cuales son empleados por las herramientas TAO para extraer el contenido traducible en archivos de diferentes extensiones. En esta segunda parte veremos cómo crear nuevos filtros de archivos para traducir archivos de extensiones no habituales en dos de las TAO más utilizados, memoQ y SDL Trados Studio.

memoQ

Si trabajamos con memoQ, podemos acceder a los filtros pulsando en el botón Consola de recursos situado en la esquina superior izquierda de la ventana principal de memoQ. Después iremos a Configuraciones de filtro y haremos clic en Crear nuevo filtro en cadena. Elegiremos esta opción en este caso porque primero se importa el archivo como delimitado por expresiones regulares y luego se añaden las variables.

Creación de un nuevo filtro de archivo en cadena en memoQ

En la siguiente ventana tenemos la ventana de creación de nueva configuración de filtro en cadena, donde elegiremos los diferentes filtros siguiendo el orden en que se aplicarán.

Elección de los filtros encadenados

Ahora podremos «toquetear» el nuevo filtro si lo seleccionamos en la lista y hacemos clic en Editar, como en la siguiente captura.

Edición de un nuevo filtro de archivo

En esta ventana podemos configurar cada uno de los filtros que forman en filtro en cadena. El primer filtro que modificaremos será el filtro de texto regex (dicho de otro modo, texto traducible delimitado por expresiones regulares), y para ello podemos cargar el archivo de origen como referencia. Ahora toca añadir los patrones de apertura y de cierre, para lo que iremos a la tercera pestaña, Incluir/excluir.

Configuración de los filtros

En dicha pestaña tendremos que elegir Las reglas definen el contenido a importar. Así indicamos a memoQ que solo queremos importar el contenido que escribamos en el campo Regla (en este caso, .* equivale grosso modo a cualquier conjunto de cero o más caracteres, salvo el salto de línea) y que se encuentra entre el patrón de apertura y de cierre.

Patrones de delimitación del texto traducible

La pestaña Vista previa muestra en color verde el contenido que memoQ importaría si usáramos el filtro tal como está configurado en ese momento. Tan solo queda editar el segundo filtro, Regex Tagger, para añadir las variables que hemos mencionado anteriormente.

Vista previa

Aquí añadiremos las variables una a una (se aplicarán en orden descendente) y marcaremos la casilla Obligatorio, ya que son etiquetas que no deben desaparecer del archivo traducido.

Lista de variables

Si creamos un proyecto e importamos el archivo de origen de extensión JM4 con este filtro, enseguida veremos el resultado. Ya solamente nos queda traducir el archivo siguiendo nuestro proceso habitual. Además, desde la propia consola de recursos podemos exportar este nuevo filtro (con la extensión MQRES) para usarlo en otro ordenador o mandárselo a otro usuario que a su vez importe el archivo de configuración de vuelta en su versión de memoQ.

Archivo listo para traducción tras aplicar el nuevo filtro

Studio

Como lo prometido es deuda, ahora vamos a ver cómo crear este filtro en SDL Trados Studio. La versión 2017, que es la más reciente, incorpora una nueva función de vista previa muy cómoda que permite comprobar si el filtro que estamos creando se ajusta a nuestras expectativas según los cambios que vayamos añadiendo al filtro. Para empezar con el nuevo filtro, tenemos que ir al botón Archivo (situado en la esquina superior izquierda) > Opciones > Tipos de archivo > Nuevo, como vemos en la siguiente imagen. También es posible llegar a esta misma ventana cambiando la configuración de proyecto, pero de esta forma nos aseguramos de que el filtro estará disponible para cualquier futuro proyecto.

Tipos de archivo en Studio

De entre las posibles opciones, elegiremos Texto delimitado por expresiones regulares.

Tipos de nuevos filtros

En la siguiente ventana, tenemos que cambiar el nombre del tipo de archivo y la expresión de comodín por la extensión de archivo correspondiente (en este caso, JM4). De este modo, Studio utilizará este filtro de forma automática cada vez que importemos un archivo con extensión .JM4. Puede haber varios filtros para la misma extensión de archivo, pero Studio empleará en ese caso el primer filtro con la casilla de verificación marcada en orden descendente (es decir, el filtro que esté más arriba en la lista de tipos de archivo).

Propiedades del nuevo filtro

Una vez creado el filtro, lo veremos en la lista situada en la sección izquierda de la ventana. Si pulsamos la flecha situada al lado del nombre, se desplegarán las diferentes opciones que tendremos que ir cambiando.

El nuevo filtro en la lista de tipos de archivos

En la primera sección, Estructura del documento, borraremos el patrón que viene de forma predeterminada y añadiremos el apropiado, tal y como haríamos en memoQ. La siguiente captura muestra el resultado.

Patrones de delimitación del texto traducible

Si cargamos el archivo JM4 de origen en la vista previa, nos daremos cuenta de que vamos por el bueno camino, aunque todavía quedan por añadir las variables. Para ello, iremos a la sección Patrones de línea y añadiremos las mismas expresiones regulares que escribimos al final de la anterior entrada. Según las características del archivo de origen, puede que sea necesario cambiar algunas opciones, aunque en este ejemplo las dejaremos tal cual aparecen de forma predeterminada. Tras añadir las variables, un nuevo vistazo a la vista previa del archivo nos dirá que el filtro cumple su función (es decir, recoge todo el texto traducible y bloquea las variables y otras etiquetas). Tan solo queda guardar los cambios y ya tendremos a nuestra disposición este nuevo filtro para usarlo en futuros proyectos.

Vista previa

Por último, si queremos exportar este nuevo filtro, solo tendremos que ir a la lista de tipos de archivo, marcar el que corresponda y pulsar el botón Exportar configuración. De esta forma, obtendremos un archivo con la extensión sdlftsettings. Si queremos importar este filtro en otro ordenador, iremos a esta misma lista, haremos clic en el botón Importar configuración y escogeremos el botón Importar configuración.

Importación y exportación de filtros de archivos

Si habéis llegado al final de la entrada y no habéis huido despavoridos, me imagino que será porque tenéis interés en crear filtros de archivos. Como tantas otras cosas en esta vida, hay que crear varios filtros y usar las expresiones regulares a base de prueba y error pero, una vez le hayáis cogido el truco, os servirá para vuestros propios proyectos y también para ofrecer un servicio añadido a vuestros clientes, en especial para aquellos que no estén familiarizados con las herramientas TAO.

En ocasiones mis clientes reciben archivos «extraños» que las herramientas TAO no reconocen, pues su extensión no figura entre las más habituales, y entonces me piden que busque una solución TAOísta para poder traducir el contenido de dichos archivos. En algunos casos, hay que buscar el modo de convertirlos a un formato intermedio que sí sea compatible con estas herramientas. Sin embargo, la mayoría de las veces, con un poco de maña, podemos crear un filtro para ese tipo de archivos que faciliten que la TAO en cuestión extraiga el contenido traducible. En esta entrada y en la siguiente veremos cómo crear nuevos filtros en memoQ y SDL Trados Studio 2017 y la forma de exportarlos para compartirlos con otros colegas o para usarlos en otro ordenador que tenga instalada alguna herramienta TAO. Si preferís saltaros la parte introductoria y ver directamente cómo crear nuevos filtros de archivos en Studio y memoQ, podéis ir a la siguiente entrada.

El primer paso: reconocer si el archivo contiene texto solamente

Lo primero que hay que hacer al recibir uno de estos archivos «extraños», por tonto que parezca, es probar suerte e intentar abrirlo con un editor de textos, como Notepad++ o el propio Bloc de notas. Dado que muchos archivos con extensiones poco frecuentes se utilizan en programación, se pueden modificar de una forma más o menos sencilla con cualquier editor de textos. También es posible que el propio archivo sea en sí mismo un archivo comprimido (como ocurre con los paquetes de Studio o los archivos MQXLZ de memoQ, por poner un par de ejemplos) y que entonces no se pueda abrir directamente con un editor de textos. En este último caso, basta con cambiar la extensión a ZIP y probar con un extractor de archivos para averiguar si es un archivo comprimido y, en tal caso, extraer los archivos que contiene.

En el archivo de ejemplo que usaré en esta entrada, me he inventado la extensión JM4. A pesar de ello, si trato de abrirlo con Notepad++, veremos que se trata de un archivo de texto no demasiado diferente de algunos con los que quizás ya nos hayamos topado antes, como en la siguiente captura de pantalla. Si el archivo contiene texto en un idioma que no sea el inglés y vemos caracteres que no se leen bien, la mayoría de veces solventaremos el problema cambiando la codificación a UTF-8. En Notepad++ podemos hacerlo eligiendo la opción correspondiente en el menú Codificación.

Un extracto del archivo con extensión poco habitual

Análisis previo del archivo

Antes de pasar a crear el filtro para este tipo de archivos, conviene analizar la estructura del archivo de origen con el fin de saber cuál es el contenido traducible y cuál es el contenido propio de programación que hay que aislar para que no se sobrescriba por error durante la traducción. Así daremos con la lógica empleada para separar cada elemento del archivo y podremos aplicarla en la herramienta TAO a la hora de crear el filtro. Empezaremos con la cabecera del archivo, como se observa en la siguiente imagen.

Cabecera del archivo

La sección señalada en color amarillo son líneas que comienzan con la barra lateral derecha (/). Echando un vistazo al contenido, podemos deducir que son comentarios añadidos por el desarrollador pero que no forman parte del código propiamente dicho. Por esta razón, se añade la mencionada barra lateral al principio de cada línea (siguiendo un patrón similar al que se ve en otros archivos de programación) o, dicho en lenguaje más técnico, «se comentan» las líneas. Lo más habitual es que no haya que traducir estos comentarios, pero, en caso de duda, no nos cuesta nada consultarlo con el cliente, pues pueden contener información valiosa para desarrolladores que sea recomendable traducir también.

En naranja vemos un nuevo patrón que se repite al principio de las siguientes líneas, que no es otro que el código o ID con el que se identifica cada cadena de texto. Dicho código tiene que quedar igual en el archivo traducido, por lo que lo aislaremos cuando creemos el nuevo filtro de archivo. A la derecha de este código, separado por un espacio y delimitado por comillas, se encuentra el contenido traducible. Una vez lo hayamos identificado, conviene seguir analizando el archivo en busca de secciones u otros elementos que sean traducibles pero que se desvíen de ese patrón, o bien elementos no traducibles dentro de las cadenas de texto.

La siguiente captura muestra algunos elementos muy habituales en archivos de este tipo:

  • En amarillo, el símbolo et (&), que se añade delante de la tecla de acceso rápido. Podemos cambiarlo de sitio, pero siempre teniendo en cuenta que no puede usarse la misma letra para más de una tecla de acceso rápido dentro del mismo menú y que es mejor evitar las letras con tramos descendentes por debajo del renglón, como la ge y la pe, ya que el acceso rápido se muestra subrayando dicha letra.
  • En azul tenemos un tipo de variable con el que se separan elementos dentro de una misma cadena de texto, ya sea por limitaciones de espacio u otras razones. En este caso, vemos el salto de línea (\n) y la tabulación (\t). Cuando traduzcamos cadenas de texto que aparezcan en más de una línea, aparte de tener en cuenta el límite de caracteres por línea (en su caso), hay que evitar la separación de sintagmas en la medida de lo posible, pues puede provocar problemas de fluidez al leer el texto (lo mismo que ocurre en subtitulación).
  • Por último, los elementos señalados en naranja son variables, parámetros que no son fijos y que se establecen con datos aportados por el usuario del programa (en este caso, datos referentes a un disco, como el nombre del cantante y de la canción). Se ven a simple viste porque van precedidos de un delimitador, como el símbolo del porcentaje en este archivo. Al igual que las demás variables, tendremos que buscar un patrón para poder bloquearlas y que así el traductor o revisor no las elimine en un descuido.

Nuestras amigas las variables

Ahora que ya conocemos el archivo de origen, toca pensar en cómo le indicaremos a la herramienta TAO de turno qué partes debe pasar por alto y cuáles debe importar para que se puedan traducir. En archivos como XML y HTML y sus variantes resulta más sencillo porque el texto traducible casi siempre está delimitado por etiquetas. Sin embargo, en este caso, hay que decirle a la herramienta TAO que este archivo sigue un patrón para separar el contenido traducible del no traducible.

Llegados a este punto, las preguntas clave son «¿Qué patrón sigue este archivo?» y «¿Cómo añadir este patrón a la herramienta TAO?». Nuestras «queridas» expresiones regulares serán nuestras mejores aliadas a partir de ahora. Aunque lo veremos en la siguiente entrada con más detalle, memoQ y Studio permiten crear filtros usando expresiones regulares. Dicho en pocas palabras, tenemos que indicar qué va antes y después del contenido traducible (ergo, todo lo que esté entre medias serán las cadenas de texto).

Antes de pasar a hablar de las expresiones concretas para este caso, tengo que aclarar que no soy ni mucho menos un experto en el tema, así que no me sorprendería que alguno de vosotros emplearais expresiones más precisas o más «bonitas». Dicho esto, a continuación os dejo las expresiones regulares que usaré como patrones de apertura y de cierre (dicho de otra forma, lo que va antes y después de dicho contenido):

Apertura:

^#.+#\s{1,}”

Esta expresión, en lenguaje normal, equivale a: inicio de línea seguido de almohadilla, seguida a su vez por uno o más caracteres cualesquiera y una almohadilla. Después van uno o más espacios y comillas.

Cierre:

“$

En lenguaje normal sería: comillas seguidas del final de línea.

-Variables:

Si bien solo los patrones de apertura y cierre son obligatorios, hemos visto que este tipo de archivos contienen variables que hay que mantener tal cual. Por tanto, es una buena idea convertir esas variables en etiquetas para que el traductor o el revisor no las omita en un descuido.

\\[a-z] = busca cualquier letra minúscula precedida de una barra lateral. Como la barra lateral es un carácter comodín en expresiones regulares, hay que añadir otra antes para indicar que estamos buscando el carácter literal en vez del comodín.

%[a-z]*\d = símbolo de porcentaje seguido por uno o cero caracteres de la a a la zeta minúscula y por un dígito.

Una vez tenemos claras las expresiones regulares que hay que añadir al filtro, solo nos queda utilizar una herramienta TAO para crearlo, como veremos en la siguiente entrada.

¡Hola a todos!

Retomo el blog con una entrada que mi amigo y antiguo profe Rubén me sugirió escribir en su día: Okapi Framework. Como ya habéis sido testigos de mis parrafadas habituales, y dado que esta herramienta es muy amplia, escribiré varias entradas sobre el tema. Aquí va la primera de ellas.

INTRODUCCIÓN

Me imagino que muchos de vosotros os habréis preguntado al leer el título: «¿Qué es Okapi Framework?». Nadie mejor que sus creadores para contárnoslo. Si prestamos atención a su página web, podemos averiguar que Okapi Framework (de ahora en en adelante, Okapi) es «un conjunto de componentes y aplicaciones de código abierto, libre y multiplataforma diseñado como apoyo a los procesos de traducción y localización». Así pues, nos queda claro que Okapi es gratuito y que no se trata de una herramienta de traducción asistida por ordenador al uso, sino de un complemento de ayuda en las tareas de traducción y localización.

A su vez, Okapi consta de varias herramientas escritas en lenguaje Java entre las que destaco Rainbow (a la que dedicaré esta entrada en exclusiva), que nos permite ejecutar multitud de procesos relacionados con la traducción y localización, CheckMate, utilizada para realizar controles de calidad en archivos bilingües y, dentro de las antiguas aplicaciones de Okapi en .NET framework, Olifant, que sirve para realizar búsquedas y cambios en distintos formatos de memorias de traducción. Cabe mencionar, así mismo, la presencia de aplicaciones en línea de comandos, destinadas a usuarios más avanzados, como Tikal, que permite unir varios archivos XLIFF, llevar a cabo conversiones de archivos o incluso traducir utilizando sistemas de memorias de traducción; o Ratel, un editor WYSIWYG empleado para crear reglas de segmentación SRX (Segmentation Rules eXchange).

RAINBOW

La primera vez que abrimos Rainbow, nos encontramos con una ventana como la de la siguiente imagen:

Rainbow

Ventana principal de Rainbow

Como se puede observar, en dicha ventana figura la clásica barra de menús, común a la mayoría de aplicaciones, donde nos serán de especial utilidad los menús Utilities y Tools (Utilidades y Herramientas, respectivamente) y una sección de botones que ejecutan las funciones más básicas, como abrir un proyecto, guardarlo, etc. Debajo de esta sección vemos de un directorio titulada Root (Raíz), que es el directorio de nuestro proyecto. El resto de la pantalla lo ocupa una sección con varias pestañas, destinadas a la listas de documentos con los que queremos trabajar (hasta un total de tres), así como otra pestaña, Languages and Encodings (Idiomas y codificaciones), donde podemos establecer, como su nombre indica, los idiomas y codificaciones de los archivos que hayamos añadido. Para terminar, en Other Settings (Otros ajustes) podemos configurar algunas características de los archivos de destino.

Creación de paquetes de traducción

La primera función de Rainbow que quiero destacar es la creación de paquetes de traducción. De esta manera, podemos preparar nuestros archivos para convertirlos a formatos compatibles con diversas herramientas tanto gratuitas como de pago, como QT Linguist (recordad que hablé de esta herramienta en la entrada anterior), OmegaT, Trados, Swordish III (que mencioné en esta entrada) o Wordfast. Así que por falta de alternativas no será.

Para acceder a esta función, tendremos que, en primer lugar, cargar los archivos que queremos convertir mediante la combinación de teclas Alt + Insert. Una vez elegidos, nos dirigiremos a Utilities > Translation Kit Creation… (Utilidades > Creación de paquetes de traducción). En la siguiente captura de pantalla podemos ver un ejemplo de esta ventana. En la parte derecha de la ventana que aparece, podemos ver la lista de formatos a los que se pueden convertir los archivos. Cuando seleccionamos uno, en la sección inferior se nos aporta una breve descripción que soluciona más de una duda. Asimismo, en la pestaña Output Location (Ubicación de los archivos de destino) podemos decidir la ubicación del paquete que creemos, así como si deseamos que el programa cree un archivo comprimido con los archivos de dicho paquete.

Creación de paquetes de traducción

Captura de pantalla de la ventana de Creación de paquetes de traducción de Rainbow

El programa nos creará un paquete en la carpeta que le hayamos indicado, con una carpeta destinada a los archivos originales y otra, de nombre, work, que contiene los archivos de trabajo o borradores, que son el resultado de la conversión que ha realizado Rainbow para hacerlos compatibles con el programa de traducción asistida elegido. Aquí tenemos un ejemplo de un paquete PO que puedo traducir mediante QT Linguist, y que he creado a partir de un archivo en formato ODT.

Archivo PO en QT Linguist

Captura de pantalla de un archivo PO en QT Linguist creado por Rainbow

Las siguientes capturas muestran, respectivamente, los paquetes de este mismo archivo obtenidos siguiendo este proceso para su posterior traducción en Swordfish III (a partir de un archivo XLIFF), OmegaT y Trados (a partir de un archivo RTF).

Archivo XLIFF en Swordfish

Captura de pantalla de archivo XLIFF creado con Rainbow y abierto en Swordfish

Traducción en OmegaT

Captura de pantalla de un texto para traducir abierto en OmegaT creado desde Rainbow

Archivo RTF bilingüe

Captura de pantalla de un archivo RTF bilingüe para Trados creado con Rainbow.

Como habréis podido comprobar ya, contamos con muchas opciones de creación de paquetes de traducción, compatibles tanto con herramientas de traducción asistida gratuitas como comerciales. Aparte de lo mostrado anteriormente, podemos crear archivos compatibles con Transifex, Wordfast y otras herramientas de traducción asistida.

Creación de memorias de traducción

Imaginaos que, utilizando Rainbow, hemos podido convertir un archivo siguiendo los pasos anteriores a un programa de traducción asistida de nuestra elección como, por ejemplo, QT Linguist. Cuando hemos terminado de traducir el archivo, caemos en la cuenta de que queremos guardar una memoria de traducción basada en dicho archivo para poder aprovechar la traducción en futuros proyectos. Sin embargo, herramientas como QT Linguist no funcionan con el concepto de memoria de traducción, al contrario que otras alternativas como Trados o Wordfast o, si hablamos de software libre, OmegaT o Anaphraseus. Pues bien, en vez de maldecir nuestra mala suerte, Rainbow nos puede ayudar a salir del apuro mediante su función de conversión de archivos, en concreto la conversión a formato TMX (Translation Memory eXchange).

A diferencia de la función de paquetes de traducción, la conversión de archivos se limita a convertir los documentos que queramos a otro formato, sin crear la estructura de carpetas más propia de un proyecto de traducción (es decir, carpetas para documentos originales y borradores y otros archivos necesarios para ser compatibles con el programa elegido). Si bien es cierto que estas dos funciones pueden llegar a solaparse (en especial en el caso de los archivos PO), creo que dan la posibilidad de que cada traductor trabaje según más le convenga.

En la situación que nos ocupa, el primer paso para obtener nuestro archivo TMX a partir de un archivo bilingüe (PO, XLIFF o bilingües de Trados) es añadirlo a la lista de archivos mediante al atajo Ctrl + Insert. A continuación nos dirigimos a Utilities > Conversion Utilities > File Format Conversion… (Utilidades > Utilidades de conversión > Conversión de formatos de archivos), donde aparecerá la siguiente ventana:

Conversión de archivos

Ventana de Rainbow de la función de conversión de archivos

En la sección Output Format (Formato de destino), elegimos el formato al que convertiremos el texto (en este caso, TMX). Marcando las casillas de debajo, podemos elegir, entre otras opciones, si solamente queremos convertir los segmentos aprobados o si queremos crear un único archivo de destino en vez de un archivo de destino por archivo original. Para terminar, elegimos el nombre y la ruta del archivo de destino y pulsamos el botón Ejecutar.

Una vez terminado el proceso, obtendremos un archivo TMX compatible con la gran mayoría de herramientas de traducción asistida, ya sean de pago o gratuitas. En la siguiente captura de pantalla podemos ver un archivo TMX creado con Rainbow a partir de un documento RTF bilingüe (convertido a su vez con Rainbow a este formato desde un archivo original ODT), y que he abierto con el programa Notepad++ (una alternativa al Bloc de notas de Windows que recomiendo encarecidamente), lo que supone una buena forma de averiguar más información sobre la estructura interna de un archivo TMX.

Archivo TMX

Captura de pantalla de archivo TMX abierto con Notepad++

Con estas dos funciones doy por terminada esta entrada dedicada a Okapi Framework y, en particular, a Rainbow. Como siempre, os animo a trastear con Okapi y con Rainbow, porque así seguro que descubrís muchas más funciones de las que da tiempo a hablar en este blog y, de paso, podéis sacarle el máximo partido de manera acorde con vuestras necesidades profesionales y particulares.

En las siguientes entradas seguiré hablando de Rainbow, así como de otras aplicaciones pertenecientes a Okapi Framework. Con respecto a vosotros: ¿conocíais esta herramienta? ¿Alguno la habéis utilizado? ¿Qué funciones destacáis y cuáles echáis de menos? ¡Espero vuestro comentarios! 😉