Scroll to navigation

PO4A(1p) Herramientas de po4a PO4A(1p)

NOMBRE

po4a - Actualiza los ficheros PO y los documentos traducidos a la vez

SINOPSIS

po4a [opciones] fichero_de_configuración

DESCRIPCIÓN

po4a (PO para cualquier cosa) facilita el mantenimiento de la traducción de documentación utilizando las herramientas clásicas de gettext. La característica principal de po4a es que desacopla la traducción del contenido de la estructura del documento. Consulte la página po4a (7) para obtener una breve introducción a este proyecto.

Cuando ejecuta el programa po4a por primera vez, con solo un archivo de configuración y los documentos para traducir (llamados documentos maestros), produce un archivo POT (también llamado plantilla de traducción) que contiene todas las cadenas traducibles en el documento de una forma que facilita el trabajo de los traductores.

Esos archivos POT se pueden traducir con un editor específico como GNOME Translation Editor, Lokalize de KDE o poedit, o bien se pueden integrar en una plataforma de localización en línea como weblate o pootle. El resultado de la traducción es un conjunto de archivos PO, uno por idioma.

Cuando ejecuta el programa po4a con los documentos maestros y los archivos PO, produce los documentos traducidos inyectando la traducción del contenido (que se encuentra en los archivos PO) en la estructura del documento maestro original.

Si los documentos maestros cambiaron mientras tanto, po4a actualizará los archivos PO y POT de acuerdo a los cambios, de modo que los traductores puedan detectar fácilmente las modificaciones y actualizar su trabajo. Dependiendo de su configuración, po4a descartará los documentos parcialmente traducidos o producirá un documento que combine el inglés (para los párrafos nuevos o modificados) y el idioma de destino (para los párrafos donde la traducción ya está en el archivo PO).

De forma predeterminada, los documentos traducidos se producen cuando se traduce al menos el 80% de su contenido (consulte la opción --keep a continuación). Que se descarten traducciones que no están al 100% puede ser desalentador para los traductores, mientras que mostrar "traducciones" que son demasiado incompletas puede ser preocupante para los usuarios finales.

Visión esquemática

 documentos maestros -+---->-------->---------+
  (autoria doc)      |                       |
                     V   (ejecuciones po4a)  >-----+--> traducciones
                     |                       |     |
archivo PO existente->--> PO actualizados  >-+     |
      ^                            |               |
      |                            V               |
      +----------<---------<-------+               ^
      (proceso de traducción manual)               |
                                                   |
    anexo -->--------------------------------------+

Los documentos maestros son creados por los redactores de la documentación. Los cambios se reflejan automáticamente en los archivos PO debido a po4a, los cuales luego deben ser actualizados por los traductores. Todos los cambios en los archivos PO (ya sean manuales o debidos a po4a) se reflejan automáticamente en los documentos traducidos. Puede imitar este comportamiento usando los scripts po4a-updatepo (1) y po4a-translate (1) en archivos make, pero esto rápidamente se vuelve molesto y repetitivo (vea po4a (7)). Se recomienda encarecidamente utilizar el programa po4a en su proceso de compilación.

OPCIONES

El umbral mínimo del porcentaje de traducción para preservar (es decir, escribir) el fichero resultante (predefinido: 80). Es decir, por omisión los ficheros deben estar traducidos como mínimo en un 80% para que se escriba el fichero resultante en disco.
Muestra un mensaje corto de ayuda.
El juego de caracteres de los ficheros que contienen los documentos a traducir. Tenga en cuento que todos los documentos maestros deben usar el mismo juego de caracteres.
El juego de caracteres de los ficheros que contienen los documentos localizados. Tenga en cuentao que todos los documentos traducidos deben usar el mismo juego de caracteres.
El juego de caracteres del apéndice. Todos los apéndices deben usar el mismo juego de caracteres.
Muestra la versión del script y cierra.
Aumenta la cantidad de mensajes informativos del programa.
Disminuye la cantidad de mensajes informativos del programa.
Devuelve por la salida información de depuración de fallos.
Opción(es) adicionales a introducir a la extensión del formato. Consulte la documentación de cada extensión para más información acerca de las opciones aceptadas y su significado. Por ejemplo, puede pasar '-o tablecells' al intérprete AsciiDoc, mientras que el intérprete de texto aceptaría '-o tabs=split'.
Siempre genera los ficheros POT y PO, incluso si po4a no lo considera necesario.

El comportamiento predefinido (cuando no se especifica --force) es el siguiente:

Si ya existe el fichero POT, se generará otra vez si el documento original o el fichero de configuración es más reciente (a menos que se de --no-update). El fichero POT se escribe también en un documento temporal y po4a comprueba si los cambios son realmente necesarios.

Así mismo, una traducción se genera otra vez sólo si el documento original, el fichero PO, uno de sus apéndices o el fichero de configuración son más recientes. Para evitar generar otra vez las traducciones que no pasan el análisis del umbral (consulte --keep), puede crear un fichero con la extensión .po4a-stamp (consulte <B--stamp>).

Debería usar la marca --force si el documento original incluye ficheros, ya que no se toma en cuenta la fecha de modificación de estos ficheros incluidos.

Los ficheros PO siempre se regeneran en base al POT con msgmerge -U.

Activa la creación de ficheros de marcas («stamp files») cuando no se ha generado una traducción al no alcanzar éste el umbral. Estos ficheros de marcas se nombran de acuerdo al documento traducido esperado, con la extensión .po4a-stamp.

Nota: Esto sólo activa la creación de ficheros .po4a-stamp. En caso de existir siempre se usarán estos ficheros, y se eliminan con --rm-translations o cuando el fichero está completamente traducido.

No genera los documentos traducidos, sólo actualiza los ficheros POT y PO.
Impide modificar los ficheros POT y PO, solo se actualiza la traducción.
Preserva los ficheros traducidos existentes incluso si la traducción no satisface el umbral especificado por --keep. Esta opción no crea ficheros traducidos nuevos con escaso contenido, pero guarda las traducciones existentes incompletas debido a cambios en los ficheros originales.

ADVERTENCIA: Esta opción modifica el comportamiento de po4a de forma muy notable: los ficheros traducidos no se actualizan en absoluto hasta mejorar la traducción. Utilice esta opción solo en caso de preferir la distribución de documentación traducida anticuada en lugar de distribuir una documentación no traducida precisa.

Elimina los ficheros traducidos (implica --no-translations).
A partir de la versión 0.41, esta opción no tiene ningún efecto. Puede que se elimine en alguna futura publicación.
A partir de la versión 0.41, esta opción no tiene ningún efecto. Puede que se elimine en alguna futura publicación.
Traduce sólo el fichero especificado. Puede ser útil para agilizar el proceso si el fichero de configuración contiene muchos ficheros. Tenga en cuenta que esta opción no actualiza los ficheros PO y POT. Puede usar esta opción varias veces.
Define una variable que se expandirá en el fichero de configuración de po4a. Cada aparición de $(var) se reemplazará por valor. Puede introducir está opción varias veces.
Define el directorio base de todos los documentos de entrada especificados en el fichero de configuración de po4a.

Si se especifican tanto destdir como srcdir, los archivos de entrada se buscan en los siguientes directorios, en orden: destdir, el directorio actual y srcdir. Los archivos de salida se escriben en destdir si se especifica, o en el directorio actual.

Define el directorio base de todos los documentos de salida especificados en el fichero de configuración de po4a (ver --srcdir).

Opciones que modifican el encabezado POT

Define el forma de referencia: El argumento type puede ser never para no generar ninguna referencia, file para solo especificar el fichero el número de línea, counter para sustituir el número de línea con un recuento ascendente, y full para incluir referencias completas (predefinido: full).
Especifique cómo se debe ajustar el archivo po. Esto permite elegir entre archivos que están bien ajustados pero que podrían generar conflictos de git o archivos que son más fáciles de manejar automáticamente, pero más difíciles de leer para los humanos.

Históricamente, la suite gettext ha reformateado los archivos po en la columna 77 por razones cosméticas. Esta opción especifica el comportamiento de po4a. Si se establece en un valor numérico, po4a ajustará el archivo po después de esta columna y después de nuevas líneas en el contenido. Si se establece en newlines, po4a solo dividirá los msgid y msgstr después de nuevas líneas en el contenido. Si se establece en no, po4a no ajustará el archivo po en absoluto. Los comentarios de referencia siempre son ajustados por las herramientas gettext que usamos internamente.

Tenga en cuenta que esta opción no tiene ningún impacto en cómo se ajustan msgid y msgstr, es decir, en cómo se agregan nuevas líneas al contenido de estas cadenas.

El idioma de los ficheros que contienen el documento a traducir. Todos los documentos maestros deben utilizar el mismo idioma.
Define el destinatario de los informes de fallo en los msgid. Por omisión, los ficheros POT creados no tienen el campo «Report-Msgid-Bugs-To».
Define el titula de los derechos de reproducción en la cabecera del POT. El valor predefinido es «Free Software Foundation, Inc.»
Define el nombre del paquete en la cabecera del POT. El valor por omisión es «PACKAGE».
Define la versión del paquete en la cabecera del POT. El valor por omisión es «VERSION».

Opciones para modificar los archivos PO

Opciones adicionales para msgmerge(1).

Nota: $lang se expandirá al idioma actual.

Esta opción retira --previous desde las opciones aprobadas a msgmerge. Esto es necesarios para admitir versiones de gettext anteriores a 0.16.
Esta opción añade --previous a las opciones introducidas a msgmerge. Requiere gettext 0.16 o posterior, y está activada por omisión.

ARCHIVO DE CONFIGURACIÓN

po4a espera un archivo de configuraicón como argumento. Este archivo de contener los siguientes elementos:

  • La ruta a los archivos PO y la lista de idiomas en el proyecto;
  • Opcionalmente, algunas opciones globales y los denominados alias de configuración que se utilizan como plantillas para configurar archivos maestros individuales;
  • La lista con cada archivo maestro a traducir, junto con parámetros específicos.

Todas las líneas contienen una orden entre paréntesis cuadrados, seguido de sus parámetros. Los comentarios comienzan con el carácter '#' y van hasta el final de la línea. Puede escapar el final de la línea para extender una orden en varias líneas.

En esta página se presentan algunos ejemplos completos, mientras que otros ejemplos se pueden encontrar en el directorio "t/cfg" de la distribución fuente.

Encontrar los archivos PO y POT

La solución más simple es proporcionar explicitamente la ruta a los archivos POT y PO, así:

 [po4a_paths] man/po/project.pot de:man/po/de.po fr:man/po/fr.po

Este especifíca la ruta al archivo POT primero, y después las rutas a los archivos PO en alemán y frncés.

La misma información puede escribirse como sigue para reducir el riesgo de errores de copiar/pegar:

 [po4a_langs] fr de
 [po4a_paths] man/po/project.pot $lang:man/po/$lang.po

El componente $lang se expande automaticamente al usar la lista de idiomas proveida, reduciendo así el riesgo de errores de copiar/pegar cuando se añade un nuevo idioma.

Puede compactar más la misma información al proporcionalr solamente la ruta al directorio que contiene su proyecto de traducción, como se describe a continuación.

 [po_directory] man/po/

El directorio proporcionado debe contener un juego de archivo PO, cada uno con un nombre de la forma XX.po siendo "XX" el código ISO 639-1 del idioma usado en ese archivo. El directorio también debe contener un sólo archivo POT, con la extensión ".pot". En la primera ejecución, este archivo debe estar vacío pero debe existir (por4a no puee adivinar el nombre por usar antes de la extensión).

Note que usted debe elegir sólo uno entre "directorio_po" y "rutas_po4a". El primero ("directorio_po") es más compacto, reduciendo más el riesgo de errores de copiar7pegar, pero forzandolo a usar la estructura y nombres de archivos esperados del prooyecto. La segunda ("rutas_po4a"), es más explicita, probablemente más legible y se recomienda cuando esté montando su primer proyecto con po4a.

¿Archivos PO centralizados o divididos?

De manera predeterminada, po4a produce un sólo archivo PO por idioma objetivo, que contiene el contenido completo de su proyecto de traducción. A medida que su proyecto crezca, el tamaño de estos archivos puede volverse problemático. Al usar weblate, es posible especificar prioridades para cada segmento de traducción (i.e, msgid) de forma que los importante son traducidos primero. Aún así, algunos equipos de traducción prefieren dividir el contenido en varios archivos.

Para tener un archivo PO por cada archivo maestro, usted sólo tiene que usar la cadena $master en el nombre de sus archivos PO y la línea "[rutas_po4a]", como sigue.

 [po4a_paths] doc/$master/$master.pot $lang:doc/$master/$lang.po

Con esta línea, po4a producirá ficheros separados POT y PO por cada documento para traducir. Por ejemplo, si tiene tres documentos y cinco idiomas, esto resultará en tres ficheros POT y 15 ficheros PO. Estos ficheros son nombrados como especificados sobre la plantilla "po4a_paths", con $master sustituido como nombre base de cada documento a traducir. En caso de conflicto de nombres, puede especificar el fichero POT para emplear como sigue, con el parámetro "pot=". Esta característica además puede ser utilizada para agrupar varios ficheros traducidos dentro del mismo fichero POT.

 [po4a_langs] de fr ja es
 [po4a_paths] l10n/po/$master.pot $lang:l10n/po/$master.$lang.po
 [type: xml] foo/gui.xml $lang:foo/gui.$lang.xml pot=foo-gui
 [type: xml] bar/gui.xml $lang:bar/gui.$lang.xml pot=bar
 [type: xml] bar/cli.xml $lang:bar/cli.$lang.xml pot=bar

En modo despliegue, po4a compila un compendio temporal durante la actualización de PO, para compartir las traducciones entre todos los ficheros PO. Si dos PO tienen diferentes traducciones de la misma cadena, po4a marcará esta cadena como difusa («fuzzy») y mandará ambas traducciones a todos los ficheros PO que contengan está cadena. Cuando no quede difuso por el traductor, la traducción es utilizada automáticamente en cada fichero PO.

Especificar los documentos a traducir

Además debe alistar los documentos que serían traducidos. Por cada fichero maestro, debe especificar el formato del intérprete a utilizar, la ubicación de documento traducido para producir, y opcionalmente alguna configuración. Aquí hay un ejemplo:

 [type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \
              de:doc/de/mein_kram.sgml
[type: man] script fr:doc/fr/script.1 de:doc/de/script.1
 [type: docbook] doc/script.xml fr:doc/fr/script.xml \
             de:doc/de/script.xml

Pero de nuevo, estas líneas complejas son difíciles para leer y modificar, p. ej. cuando agregue un idioma nuevo. Es mucho más fácil reorganizar cosas empleando la plantilla $lang como sigue:

 [type: sgml]    doc/mi_material.sgml $lang:doc/$lang/mi_material.sgml
 [type: man]     script.1          $lang:po/$lang/script.1
 [type: docbook] doc/script.xml    $lang:doc/$lang/script.xml

Especificar opciones

Hay dos tipos de opciones: opciones po4a son valores predeterminados para las opciones de línea de orden po4a mientras que opciones de formato son utilizadas para cambiar el comportamiento de los intérpretes del formato. Como una opciones de po4a, pudo por ejemplo especificar en su fichero de configuración que el valor predeterminado del parámetro de línea de orden --keep es un 50% en vez de un 80%. Las opciones de formato están documentadas en una página específica de cada módulo de intérprete, p.ej. Locale::Po4a::Xml(3pm). Pudo por ejemplo aprobar nostrip al intérprete XML para no recortar los espacios alrededor de las cadenas extraídas.

Puede pasar estas opciones para un fichero maestro específico, o incluso para una traducción específica de ese fichero, utilizando "opt:" y "opt_XX:" para el idioma "XX". En el ejemplo siguiente, la opción nostrip es pasada al intérprete XML (para todos los idiomas), mientras que el umbral será reducido a 0% para la traducción francesa (que es por lo tanto siempre conservada).

 [type:xml] toto.xml $lang:toto.$lang.xml opt:"-o nostrip" opt_es:"--keep 0"

En cualquier caso, estos segmentos de configuración deben estar ubicados al final de la línea. La declaración de ficheros deben primero venir, después el adjunto si hay alguno (vea debajo), y después solamente las opciones. El agrupamiento de configuración de segmentos no es muy importante, debido a que los elementos están concatenados internamente como cadenas. Los siguientes ejemplos son todos equivalentes:

  [type:xml] toto.xml $lang:toto.$lang.xml opt:"--keep 20" opt:"-o nostrip" opt_es:"--keep 0"
  [type:xml] toto.xml $lang:toto.$lang.xml opt:"--keep 20 -o nostrip" opt_es:"--keep 0"
  [type:xml] toto.xml $lang:toto.$lang.xml opt:--keep opt:20 opt:-o opt:nostrip opt_es:--keep opt_es:0

Anote que las opciones específicas del idioma no son utilizadas cuando crea el fichero POT. Es por ejemplo imposible aprobar nostrip al intérprete solamente cuando construya la traducción francesa, porque el mismo fichero POT es utilizado para actualizar cada idioma. Por tanto las opciones solamente que pueda ser específicas del idioma son las que son utilizadas cuando produce la traducción, como la opción "--keep".

Configuración de aliases

Para aprobar las mismas opciones a varios ficheros, lo mejor es definir un tipo alias como sigue. En el ejemplo siguiente, "--keep 0" es pasado a cada traducción italiana utilizando este tipo "test", que es una extensión del tipo "man".

  [po4a_alias:test] man opt_it:"--keep 0"
  [type: test] man/page.1 $lang:man/$lang/page.1

También puede extender un tipo existente reutilizando el mismo nombre para el alias tal como sigue. Esto no es interpretado como una definición recursiva errónea.

  [po4a_alias:man] man opt_it:"--keep 0"
  [type: man] man/page.1 $lang:man/$lang/page.1

Opciones predeterminadas globales

Además puede utilizar líneas de "[opciones]" para definir opciones que deben ser empleadas para todos los ficheros, independientemente de su tipo.

  [opciones] --keep 20 --option sin-tira

Como con las opciones de línea de orden, puede abreviar los parámetros pasados dentro del fichero de configuración:

  [opciones] -k 20 -o nostrip

Opciones prioritarias

Las opciones de cada fuente están concatenadas, asegurando que los valores predeterminados puedan ser fácilmente anulados por opciones más específicas. El pedido es como sigue:

  • Las "[opciones]" de líneas proporciona valores predeterminados que pueden ser anuladas por cualquier otro origen.
  • Tipo de aliases estarán cuando necesite. Parámetros específicos del idioma anula los aplicables a todos los idiomas.
  • Los parámetros que son específicos a un fichero maestro dado anula ambos predeterminados y los que vengan desde el tipo alias. En este caso también, los parámetros específicos del idioma anulan los globales.
  • Finalmente, los parámetros proporcionado en la línea de orden po4a supera cualquiera de los parámetros desde el fichero de configuración.

Ejemplo

Aquí hay un ejemplo mostrando como entrecomillas los espacios y entrecomillados:

 [po_directory] man/po/
 
 [opciones] --master-charset UTF-8
 
 [po4a_alias:man] man opt:"-o \"mdoc=NOMBRE,VEA ADEMÁS\""
 [type:man] t-05-config/test02_man.1 $lang:tmp/test02_man.$lang.1 \
            opt:"-k 75" opt_es:"-L UTF-8" opt_es:--verbose

Apéndice: Añadiendo contenido adicional en la traducción

Si desea agregar una sección adicional a la traducción, por ejemplo para proporcionar reconocimiento a los traductores, entonces necesita definir un addendum a la línea definiendo su fichero maestro. Refiérase a la página po4a(7) para más detalles en la sintaxis de ficheros addendum.

 [type: pod] script es:doc/es/script.1 \
             add_es:doc/l10n/script.es.add

Además puede emplear plantillas del idioma como sigue:

 [type: pod] script $lang:doc/$lang/script.1 \
             add_$lang:doc/l10n/script.$lang.add

Si falla un addendum al aplicar, la traducción es descartada.

Modificadores para declaración de addendum

Modificadores de adjuntos pueden simplificar la configuración del fichero dentro del caso donde ninguno de los idioma proporciona un adjunto o cuando el listado de los adjuntos cambia desde un idioma al otro. El modificador es un carácter único localizado antes del nombre del fichero.

?
Incluye ruta_al_apéndice si el fichero sí existe, y no hace nada de lo contrario.
@
ruta_al_apéndice no es un apéndice normal, sino un fichero que contiene una lista de apéndices, uno por línea. Cada apéndice puede ir precedido de argumentos.
!
Si ruta_al_apéndice se descarta, no se cargará, independientemente de cualquier especificación adicional referida al apéndice.

Lo siguiente incluye un adjunto dentro de cualquier idioma, pero si solamente existe. No se comunica un error si el adjunto no existe.

 [type: pod] script $lang:doc/$lang/script.1   add_$lang:?doc/l10n/script.$lang.add

Lo siguiente incluye un listado de adjuntos por cada idioma:

 [type: pod] script $lang:doc/$lang/script.1 add_$lang:@doc/l10n/script.$lang.add

Filtrar las cadenas traducidas

A veces, desea ocultar algunos segmentos desde el proceso de traducción. Para eso extender, puede proporcionar un parámetro "pot_in" a su fichero maestro para especificar el nombre del fichero a utilizar en lugar del maestro real cuando compile el fichero POT. Aquí hay un ejemplo:

  [type:docbook] libro.xml          \
          pot_in:book-filtered.xml \
          $lang:book.$lang.xml

Con este parámetro, los segmentos a traducir serán extraídos desde el libro.filtrado.xml (ese debe ser generado antes de invocar po4a) mientras los ficheros traducidos serán compilados desde libro.xml. Como un resultado, cualquier segmento que es parte de libro.xml pero no está dentro del libro-filtrado.xml no será incluido dentro de los ficheros PO, impidiendo a los traductores desde proporionar una traducción para ellos. Por tanto estos segmentos serán dejados sin modificar cuando produzca los documentos traducidos. Esto naturalmente decrementa el nivel de traducción, por lo que quizá necesita la opción "--keep" para asegurar que el documento es generado a pesar de todo.

EJEMPLO DE CONFIGURACIÓN

TODO: ¿es esta sección realmente útil?

Supongamos que es el responsable de un programa llamado foo, que tiene una página de manual man/foo.1 que naturalmente sólo se mantiene en inglés. Ahora, al ser el mantenedor o encargado, desea crear y gestionar la traducción. Primero, cree el fichero POT, necesario para su envío a los traductores, usando po4a-gettextize(1).

En nuestro caso, invocaríamos

 cd man && po4a-gettextize -f man -m foo.1 -p foo.pot

Ahora puede enviar este fichero a las listas de idioma adecuados u ofrecerlo para su descarga en su página web.

Supongamos ahora que ha recibido tres traducciones antes de su siguiente publicación: de.po (incluyendo el apéndice, «addendum», de.add), sv.po y pt.po. Ya que no desea modificar el o los ficheros Makefile cada vez que recibe una traducción nueva, puede usar po4a dentro de su Makefile creando un fichero de configuración adecuado. Le llamaremos po4a.cfg. En nuestro ejemplo, presentaría el siguiente aspecto:

 [po_directory] man/po4a/po/
 [type: man] man/foo.1 $lang:man/translated/$lang/foo.1 \
            add_$lang:?man/po4a/add_$lang/$lang.add opt:"-k 80"

En este ejemplo suponemos que sus páginas de manual generadas (y todos los ficheros PO y de apéndice) se guardan en man/translated/$lang, (respectivamente en man/po4a/po/ y man/po4a/add_$lang/) bajo el directorio actual. En nuestro ejemplo, este directorio incluiría de.po, de.add, pt.po y sv.po, y el directorio man/po4a/add_de/ incluiría de.add.

Note el uso del modificador ?, ya que sólo la traducción al alemán (de.po) viene acompañado de un apéndice.

Para generar realmente las páginas de manual tendría que añadir (¡una sola vez!) la siguiente línea en el «target» de construcción del fichero Makefile adecuado:

        po4a po4a.cfg

Una vez que configure esto, no tendrá que tocar el Makefile cada vez que reciba una traducción nueva. Por ejemplo, si el equipo francés envía fr.po y fr.add simplemente tendría que guardarlo en man/, y la siguiente vez que construya el programa la traducción al francés se generará automáticamente.

Tenga en cuenta que es aún necesario un destino adecuado dónde instalar las páginas de manual traducidas con las páginas en inglés.

Por último, si no guarda los ficheros generados en su sistema de control de versiones, necesitara también una línea en su target clean:
-rm -rf man/translated

VÉASE TAMBIÉN

po4a-gettextize(1), po4a-normalize(1), po4a-translate(1), po4a-updatepo(1), po4a(7).

AUTORES

 Denis Barbier <barbier@linuxfr.org>
 Nicolas François <nicolas.francois@centraliens.net>
 Martin Quinson (mquinson#debian.org)

TRADUCCION

 Jordi Vilalta <jvprat@gmail.com>
 Omar Campagne <ocampagne@gmail.com>

DERECHO DE COPIA Y LICENCIA

Copyright 2002-2020 by SPI, inc.

Esto es software libre; puede redistribuirlo y/o modificarlo bajo las condiciones de la licencia GPL (consulte el fichero COPYING).

2022-07-15 Herramientas de po4a