56.1. Para el traductor #

56.1.1. Requisitos
56.1.2. Conceptos
56.1.3. Creación y mantenimiento de catálogos de mensajes
56.1.4. Edición de los archivos PO

Los programas de PostgreSQL (servidor y cliente) pueden mostrar sus mensajes en tu idioma favorito, siempre y cuando los mensajes hayan sido traducidos. Crear y mantener conjuntos de mensajes traducidos requiere la ayuda de personas que hablen bien su propio idioma y quieran contribuir al esfuerzo de PostgreSQL. No es necesario ser programador en absoluto para hacer esto. Esta sección explica cómo ayudar.

56.1.1. Requisitos #

No juzgaremos tus habilidades lingüísticas; esta sección trata sobre herramientas de software. En teoría, solo necesitas un editor de texto. Pero esto es solo en el caso poco probable de que no quieras probar tus mensajes traducidos. Cuando configures tu árbol de fuentes, asegúrate de usar la opción --enable-nls. Esto también buscará la biblioteca libintl y el programa msgfmt, que todos los usuarios finales necesitarán de todos modos. Para probar tu trabajo, sigue las partes correspondientes de las instrucciones de instalación.

Si quieres comenzar un nuevo esfuerzo de traducción o quieres hacer una fusión de catálogos de mensajes (que se describe más adelante), necesitarás los programas xgettext y msgmerge, respectivamente, en una implementación compatible con GNU. Más adelante, intentaremos organizarlo de modo que si usas una distribución de fuentes empaquetada, no necesites xgettext. (Si trabajas desde Git, aún lo necesitarás). Actualmente se recomienda GNU Gettext 0.10.36 o posterior.

Tu implementación local de gettext debería venir con su propia documentación. Probablemente parte de ella esté duplicada en lo que sigue, pero para detalles adicionales deberías consultar allí.

56.1.2. Conceptos #

Las parejas de mensajes originales (en inglés) y sus equivalentes (posiblemente) traducidos se guardan en catálogos de mensajes, uno para cada programa (aunque los programas relacionados pueden compartir un catálogo de mensajes) y para cada idioma de destino. Hay dos formatos de archivo para los catálogos de mensajes: el primero es el archivo PO (para Portable Object), que es un archivo de texto plano con una sintaxis especial que editan los traductores. El segundo es el archivo MO (para Machine Object), que es un archivo binario generado a partir del archivo PO respectivo y se usa mientras se ejecuta el programa internacionalizado. Los traductores no manejan los archivos MO; de hecho, casi nadie lo hace.

Como es de esperar, la extensión del archivo del catálogo de mensajes es .po o .mo. El nombre base es el nombre del programa al que acompaña, o el idioma al que se destina el archivo, según la situación. Esto es un poco confuso. Algunos ejemplos son psql.po (archivo PO para psql) o fr.mo (archivo MO en francés).

El formato de archivo de los archivos PO se ilustra aquí:

# comentario

msgid "original string"
msgstr "translated string"

msgid "more original"
msgstr "another translated"
"string can be broken up like this"

...

Las líneas msgid se extraen del código fuente del programa. (No es estrictamente necesario, pero es la forma más común). Las líneas msgstr están vacías al principio y el traductor las completa con cadenas útiles. Las cadenas pueden contener caracteres de escape al estilo C y pueden continuarse en varias líneas como se muestra. (La siguiente línea debe comenzar al principio de la línea).

El carácter # introduce un comentario. Si hay un espacio en blanco inmediatamente después del carácter #, entonces se trata de un comentario mantenido por el traductor. También puede haber comentarios automáticos, que tienen un carácter que no es un espacio en blanco inmediatamente después del #. Estos son mantenidos por las diversas herramientas que operan sobre los archivos PO y tienen como objetivo ayudar al traductor.

#. automatic comment
#: filename.c:1023
#, flags, flags

Los comentarios de estilo #. se extraen del archivo fuente donde se usa el mensaje. Es posible que el programador haya insertado información para el traductor, como por ejemplo sobre la alineación esperada. Los comentarios #: indican las ubicaciones exactas donde se usa el mensaje en el código fuente. El traductor no necesita mirar el código fuente del programa, pero puede hacerlo si tiene dudas sobre la traducción correcta. Los comentarios #, contienen etiquetas (flags) que describen el mensaje de alguna manera. Actualmente existen dos etiquetas: fuzzy se establece si el mensaje posiblemente ha quedado obsoleto debido a cambios en el código fuente del programa. El traductor puede verificar esto y posiblemente eliminar la etiqueta fuzzy. Ten en cuenta que los mensajes marcados como fuzzy no se ponen a disposición del usuario final. La otra etiqueta es c-format, que indica que el mensaje es una plantilla de formato al estilo de printf. Esto significa que la traducción también debe ser una cadena de formato con la misma cantidad y tipo de marcadores de posición. Existen herramientas que pueden verificar esto basándose en la etiqueta c-format.

56.1.3. Creación y mantenimiento de catálogos de mensajes #

Bien, entonces ¿cómo se crea un catálogo de mensajes en blanco? Primero, ve al directorio que contiene el programa cuyos mensajes quieres traducir. Si existe un archivo nls.mk, significa que este programa ha sido preparado para traducción.

Si ya existen algunos archivos .po, entonces alguien ya ha avanzado con el trabajo de traducción. Los archivos se llaman idioma.po, donde idioma es el código de idioma de dos letras ISO 639-1 (en minúsculas), por ejemplo, fr.po para francés. Si realmente existe la necesidad de más de un esfuerzo de traducción por idioma, los archivos también se pueden llamar idioma_región.po donde región es el código de país de dos letras ISO 3166-1 (en mayúsculas), por ejemplo, pt_BR.po para portugués de Brasil. Si encuentras el idioma que querías, simplemente puedes comenzar a trabajar en ese archivo.

Si necesitas comenzar un nuevo esfuerzo de traducción, primero ejecuta el comando:

make init-po

Esto creará un archivo nombre_programa.pot. (.pot para distinguirlo de los archivos PO que están en producción. La T significa plantilla o template.) Copia este archivo a idioma.po y edítalo. Para dar a conocer que el nuevo idioma está disponible, edita también el archivo po/LINGUAS y añade el código de idioma (o de idioma y país) junto a los idiomas que ya están en la lista, como:

de fr

(Por supuesto, pueden aparecer otros idiomas).

A medida que el programa o biblioteca subyacente cambia, los programadores pueden modificar o añadir mensajes. En este caso no necesitas empezar de cero. En su lugar, ejecuta el comando:

make update-po

que creará un nuevo archivo de catálogo de mensajes en blanco (el archivo pot con el que empezaste) y lo fusionará con los archivos PO existentes. Si el algoritmo de fusión no está seguro sobre un mensaje en particular, lo marca como fuzzy como se explicó anteriormente. El nuevo archivo PO se guarda con la extensión .po.new.

56.1.4. Edición de los archivos PO #

Los archivos PO se pueden editar con un editor de texto normal. También existen varios editores especializados para archivos PO que pueden ayudar en el proceso con características específicas de traducción. Como es de esperar, existe un modo PO para Emacs, el cual puede ser bastante útil.

El traductor solo debe cambiar el área entre comillas después de la directiva msgstr, añadir comentarios y modificar la etiqueta fuzzy.

No es necesario completar los archivos PO en su totalidad. El software volverá automáticamente a la cadena original si no hay una traducción disponible (o si está vacía). No hay problema en enviar traducciones incompletas para su inclusión en el árbol de fuentes; eso da espacio para que otras personas continúen tu trabajo. Sin embargo, se te anima a dar prioridad a la eliminación de entradas fuzzy después de realizar una fusión. Recuerda que las entradas fuzzy no se instalarán; solo sirven como referencia de cuál podría ser la traducción correcta.

Aquí tienes algunas cosas a tener en cuenta al editar las traducciones:

  • Asegúrate de que si el original termina con un salto de línea, la traducción también lo haga. Lo mismo para tabulaciones, etc.

  • Si el original es una cadena de formato de printf, la traducción también debe serlo. La traducción también debe tener los mismos especificadores de formato en el mismo orden. A veces, las reglas naturales del idioma hacen que esto sea imposible o al menos incómodo. En ese caso, puedes modificar los especificadores de formato de esta manera:

    msgstr "Die Datei %2$s hat %1$u Zeichen."
    

    Entonces, el primer marcador de posición usará en realidad el segundo argumento de la lista. El elemento dígitos$ debe seguir al % inmediatamente, antes de cualquier otro manipulador de formato. (Esta característica realmente existe en la familia de funciones printf. Puede que no hayas oído hablar de ella antes porque se usa muy poco fuera de la internacionalización de mensajes).

  • Si la cadena original contiene un error lingüístico, infórmalo (o corrígelo tú mismo en el código fuente del programa) y traduce con normalidad. La cadena corregida se podrá fusionar cuando se hayan actualizado las fuentes del programa. Si la cadena original contiene un error de hecho, infórmalo (o corrígelo tú mismo) y no la traduzcas. En su lugar, puedes marcar la cadena con un comentario en el archivo PO.

  • Mantén el estilo y tono de la cadena original. Específicamente, los mensajes que no sean oraciones completas (cannot open file %s) probablemente no deberían comenzar con mayúscula (si tu idioma distingue mayúsculas y minúsculas) ni terminar con un punto (si tu idioma utiliza signos de puntuación). Podría ayudarte leer Section 55.3.

  • Si no sabes qué significa un mensaje, o si es ambiguo, pregunta en la lista de correo de desarrolladores. Es muy probable que los usuarios finales que hablan inglés tampoco lo entiendan o lo encuentren ambiguo, por lo que lo mejor es mejorar el mensaje.