po-debconf - Introducción
La meta de "debconf" es facilitar la configuración de paquetes.
Para ello, es importante asegurar que la pregunta se planteará al
usuario en su propio idioma. Los traductores necesitan un marco de trabajo
para trabajar en las traducciones sin necesidad de seguir el desarrollo del
paquete; "po-debconf" está diseñado para que pueda
trabajar con herramientas estándar de "gettext" al traducir
ficheros de plantillas de debconf.
Si está añadiendo a su paquete la compatibilidad con debconf, es
que ha creado un fichero de plantilla que contiene texto en inglés.
Para añadir la capacidad de i18n a su paquete, tiene que:
- - Crear debian/po/POTFILES.in
- Este fichero contiene la lista de plantillas originales.
Generalmente, contiene una sola línea:
[type: gettext/rfc822deb] templates
Las rutas son relativas al directorio superior.
- - Anteponga un guión bajo antes de los campos
traducibles en cada plantilla
- Habitualmente, se pueden traducir los campos
"Description". "Choices" y "Default".
- - Ejecute debconf-updatepo
- Creará el fichero debian/po/templates.pot que
los traductores traducirán a su idioma.
- - Añada una dependencia sobre "po-debconf"
en debian/control
Para ayudar a los traductores, los ficheros PO en su paquete deberían
estar siempre actualizados o, de no ser así, puede que pierdan el
tiempo traduciendo cadenas en desuso. Para ello, invoque la siguiente orden
sin argumentos:
$ debconf-updatepo
Debería ejecutar esta orden cada vez que modifique las plantillas en
inglés, pero también cuando reciba una traducción nueva o
actualizada, ya que puede que los traductores hayan trabajado con un fichero
PO obsoleto.
Si renombra, añade o elimina algunos ficheros de plantillas, recuerde
también editar
debian/po/POTFILES.in. En caso contrario, las
cadenas en inglés se omiten en los ficheros PO, y se mostrarán a
los usuarios incluso si los ficheros PO están totalmente traducidos.
El programa
debconf-updatepo es idempotente, modifica ficheros PO
sólo si el contenido se ha actualizado. Por ello, la mejor forma de
ofrecer ficheros actualizados en su paquete fuente es invocar esta orden desde
el objetivo "clean" del fichero
debian/rules.
Tenga en cuenta que necesita ejecutar
debconf-updatepo incluso si usa
dh_installdebconf. El último invoca
po2debconf, que
solía invocar
debconf-updatepo si se detectaban ficheros
desactualizados, pero este ya no es el caso ya que no era una buena
solución por dos motivos:
- 1.
-
po2debconf dependía de marcas de tiempo para
detectar ficheros desactualizados, y puede provocar un fallo al usar
"pbuilder" o si se ha guardado en el disco una traducción
desactualizada después de modificar las marcas de tiempo.
- 2.
-
dh_installdebconf se invoca mucho después de
generar el fichero ".diff.gz".
Debe comprobar que se incluyan las traducciones en el paquete generado al
compilar el paquete. Puede hacerlo manualmente, o automáticamente
usando el script
dh_installdebconf (compruebe que tiene una dependencia
de construcción versionada sobre "debhelper (>= 4.1.16)").
Para hacerlo manualmente, tendrá que fusionar las plantillas y las
traducciones en durante la compilación (y tiene que especificar una
dependencia de construcción sobre "po-debconf") como puede
ver a continuación:
$ po2debconf debian/templates > debian/tmp/DEBIAN/templates
ADVERTENCIA: los dos ficheros llamados
templates no son lo mismo.
El primero sólo contiene el texto en inglés, con marcas que
indican los campos a traducir, mientras que el segundo contiene todos los
idiomas. Esto es, NO PUEDE guardar sólo las plantillas fusionadas, o no
podrá tratar las traducciones a medida que las personas las
envían.
El nuevo formato de fichero de plantilla fuente es casi idéntico a los
ficheros de plantilla distribuidos, pero se antepone un guión bajo a
los campos traducibles. Ejemplo:
Template: debconf/frontend
Type: select
_Choices: Dialog, Readline, Gnome, Editor, Noninteractive
Default: Dialog
_Description: Interface to use for configuring packages:
Packages that use debconf for configuration share a common look and
feel. You can select the type of user interface they use.
.
The dialog frontend is a full-screen, character based interface,
while the readline frontend uses a more traditional plain text
interface, and the gnome frontend is a modern X interface. The
editor frontend lets you configure things using your favorite text
editor. The noninteractive frontend never asks you any questions.
A partir de la versión 0.6.0 de "po-debconf", los ficheros
localizados pueden contener dos guiones bajos prefijados. En este caso, se
supone que el valor del campo es una lista de valores separados por comas, las
cuales se ubican en msgids separados. Por ello, si el anterior ejemplo
contenía
__Choices: Dialog, Readline, Gnome, Editor, Noninteractive
habría 5 msgids diferentes. Note que los espacios después de las
comas no son significativos.
"_Choices" es adecuado cuando la lista de elecciones nunca cambia. Por
otra parte, dividir tales listas puede ayudar a evitar errores comunes en las
traducciones tales como omitir una elección o usar comas no
estándar. Debido a ello, el uso de "__Choices"
facilitará el trabajo a los traductores y es altamente recomendado.
Por desgracia, si decide cambiar "_Choices" a "__Choices",
todas las traducciones se marcarán como difusas. Aquí tiene una
explicación de cómo realizar este cambio sin pérdida de
traducciones (requiere "po-debconf" >= 1.0). Suponga que desea
cambiar el ejemplo anterior a "__Choices". Para ello, copie el
fichero
templates a un fichero temporal.
$ cp debian/templates debian/foo
Edite
debian/foo y guarde sólo los campos "Template",
"Type" y "_Choices", presentes en este ejemplo.
Template: debconf/frontend
Type: select
_Choices: Dialog, Readline, Gnome, Kde, Editor, Noninteractive
Ejecute
debconf-gettextize con las opciones "--merge" y
"--choices" para construir ficheros PO como si se hubiese escrito
"__Choices", y fusione estos ficheros PO con los existentes:
$ debconf-gettextize --merge --choices debian/foo
Por último, elimine
foo y edite
debian/templates
manualmente para reemplazar "_Choices" con "__Choices"
antes de ejecutar
debconf-updatepo.
Los desarrolladores de "dpkg" decidieron que, por convención,
las líneas que comienzan con un signo de almohadilla ("#")
son comentarios en ficheros
debian/control, y "po-debconf"
respeta esta regla. Estos comentarios se insertan en los ficheros PO a partir
de la versión 0.8.0 de "po-debconf", y pueden contener
información valiosa para los traductores. Incidentalmente, todas las
versiones anteriores de "po-debconf" ignoran líneas que no
contienen dos puntos y, por ello, si sus comentarios no contienen dos puntos
no necesita añadir una dependencia de construcción versionada
sobre "po-debconf". Aquí tiene un ejemplo:
Template: debconf/button-yes
Type: text
# Translators, this text will appear on a button, so KEEP IT SHORT
_Description: Yes
La versión 1.0 de "po-debconf" introduce comentarios especiales
para tratar con cadenas compuestas de varios elementos (como el campo
Choices), o párrafos (como
Description). Con estas
normas, los desarrolladores tienen un mayor control sobre lo que se muestra a
los traductores. Tienen la forma "#flag:
norma"; las normas
se detallan a continuación.
-
translate:spec,
translate!:spec
- Sólo marca algunos elementos como traducibles;
spec es una lista de números separados por comas, que define
qué cadenas aparecen en los ficheros PO. También puede
definir un rango mediante el signo de resta (por ejemplo "2-6"),
y un asterisco ("*") implica a todas las cadenas. Por ejemplo,
con
Template: partman-basicfilesystems/fat_mountpoint
Type: select
#flag:translate:3,4
__Choices: /dos, /windows, Enter manually, Do not mount it
_Description: Mount point for this partition:
"Enter manually" y "Do not mount it" aparecerán
en los ficheros PO, pero no "/dos" ni "/windows".
Cuando un signo de exclamación sigue a la palabra clave
translate, spec define qué cadenas descartar en los
ficheros PO, y se muestran todas las demás cadenas. El ejemplo
anterior es similar a
Template: partman-basicfilesystems/fat_mountpoint
Type: select
#flag:translate!:1,2
__Choices: /dos, /windows, Enter manually, Do not mount it
_Description: Mount point for this partition:
La misma palabra clave también se puede aplicar al campo
Description para asegurar que no se traducen algunas cadenas.
Template: partman-crypto/options_missing
Type: error
#flag:translate!:3
_Description: Required encryption options missing
The encryption options for ${DEVICE} are incomplete. Please
return to the partition menu and select all required options.
.
${ITEMS}
Pero tiene peligro ya que puede que se pierda el contexto en algunos
ficheros PO. En este caso, añada comentarios para que los
traductores no se confundan.
-
comment:spec,
comment!:spec
- El comentario a continuación de esta norma afecta a
las cadenas definidas con spec, definido anteriormente. Por
omisión, un comentario escrito antes de un campo traducible aparece
en todas las cadenas que pertenecen a ese campo. (Nota: con
"po-debconf" < 1.0, el comentario sólo aparecía
en la primera cadena.)
Template: arcboot-installer/prom-variables
Type: note
# Translators, the 4th string of this description has been dropped
# from PO files. It contains shell commands and should not be
# translated.
#flag:comment:3
# "Stop for Maintenance" should be left in English
#flag:translate!:4
_Description: Setting PROM variables for Arcboot
If this is the first Linux installation on this machine, or if the
hard drives have been repartitioned, some variables need to be set
in the PROM before the system is able to boot normally.
.
At the end of this installation stage, the system will reboot.
After this, enter the command monitor from the "Stop for
Maintenance" option, and enter the following commands:
.
setenv OSLoader arcboot
setenv OSLoadFilename Linux
.
You will only need to do this once. Afterwards, enter the "boot"
command or reboot the system to proceed to the next stage of the
installation.
El ejemplo anterior tiene un comentario sin la norma
"#flag:comment", donde se añade implícitamente
"#flag:comment:*". Este comentario aparece en todas las cadenas,
pero el que se encuentra en torno a Stop for Maintenance
sólo aparece antes de la cadena relevante.
- partial
- Esta palabra clave indica a po2debconf que mantenga
cadenas traducidas incluso si no se han traducido todas las cadenas.
Úselo con precaución, esta palabra clave se ha introducido
con propósitos muy específicos.
Generalmente, los traductores se informan en las páginas web de
estadísticas (véase a continuación) de las traducciones
desactualizadas, enviando parches a incluir en futuros envíos de
paquetes. Se anima a las desarrolladores que contacten con los responsables de
las traducciones desactualizadas para una actualización previa al
envío del paquete. Se ha creado una herramienta específica para
ello,
podebconf-report-po. ¡No dude en abusar de él!
Verá que
debconf-loadtemplate no aceptará un fichero de
plantillas con marcas de i18n. Sin embargo, aceptará un fichero
fusionado, así que si ha estado depurando su configuración
mediante debconf de la siguiente manera
rm /tmp/{config,templates}.dat{,-old}
debconf-loadtemplate debian/templates
DEBIAN_PRIORITY=low debconf -freadline debian/config configure 28.0
ahora tendrá que hacer algo así:
po2debconf debian/templates > debian/tmp/DEBIAN/templates
rm /tmp/{config,templates}.dat{,-old}
debconf-loadtemplate debian/tmp/DEBIAN/templates
DEBIAN_PRIORITY=low debconf -freadline debian/config configure 28.0
- •
- "Debconf" 1.2.0 reconoce campos con la forma
Nombre- idioma.codificación. Por ejemplo,
"Description-de.ISO-8859-1" o "Choices-ru.KOI8-R".
po2debconf escribe las plantillas en este nuevo formato de forma
predefinida. Las versiones anteriores de "debconf"
ignorarán estos campos, y se mostrará el texto en
inglés. Para saber cómo cambiar la codificación y el
formato de salida consulte po2debconf(1).
- •
- Una cadena dada en inglés puede tener una
única traducción a un idioma dado. Es imposible dar dos
traducciones, dependiendo del contexto. Para resolver este problema, debe
añadir marcas especiales en las diferentes apariciones de la cadena
dada para así diferenciarlas. (Estas marcas sólos son
visibles para el traductor, y se eliminarán de la cadena antes de
mostrarse al usuario.)
Tales marcas se deben añadir al principio de las cadenas a traducir,
y deben comenzar con "[ " (un paréntesis izquierdo
seguido de un espacio) y finalizar con "]" (un paréntesis
derecho), y puede contener cualquier carácter a excepción de
paréntesis y nuevas líneas. Por ejemplo, "[
blahblah]" es una marca válida, mientras que "[
bla[bla]bla]" no lo es. Para adictos a las expresiones regulares de
Perl, las marcas se reconocen (y eliminan) con la siguiente regla:
$msg =~ s/\[\s[^\[\]]*\]$//s;
- •
- "po-debconf" y "debconf-utils" no
tratan el espaciado de la misma forma; el segundo reformatea
párrafos al actualizar y fusionar traducciones.
"debconf-utils" es muy astuto, y no considera los espacios como
parte de la cadena al determinar las entradas difusas (esto es, las que
necesitan la atención del traductor porque el original ha
cambiado).
Por otra parte, "po-debconf" depende de "gettext" para
detectar entradas difusas, y no trata los espacios como caracteres
especiales. Por ello, debe eliminar los espacios superfluos al final de
las cadenas de los ficheros de plantilla originales, o aparecerán
en los ficheros POT y PO.
Por la misma razón, debconf-gettextize puede marcar el texto
como difuso por la falta de coincidencia de caracteres de espacio, y los
traductores tendrán que quitar la marca de difusa a tales cadenas
manualmente. Esto sólo ocurre una vez al convertir las plantillas
al formato "po-debconf", a menos que cambie al azar los espacios
en los ficheros de plantillas originales, lo cuál
dificultaría la labor de los traductores.
- •
- Habitualmente, el campo Default: no se debe traducir
cuando el tipo de plantilla es Select o Multiselect. Bajo
ciertas circunstancias (por ejemplo, al seleccionar el idioma para una
aplicación) los valores localizados pueden ser significativos.
El valor localizado no debe estar traducido, sino seleccionado de la lista
de valores en inglés en el campo Choices. La mejor de forma
de lograr esto es insertar un comentario en su fichero de plantillas que
se copiará a los ficheros PO.
Template: geneweb/lang
Type: select
__Choices: Danish (da), Dutch (nl), English (en), Esperanto (eo)
# You must NOT translate this string, but you can change its value.
# The comment between brackets is used to distinguish this msgid
# from the one in the Choices list; you do not have to worry about
# them, and have to simply choose a msgstr among the English values
# listed in the Choices field above, e.g. msgstr "Dutch (nl)"
_Default: English (en)[ default language]
_Description: Geneweb default language
El valor predefinido también aparece en el campo Choices, y
ambos tiene diferentes traducciones: el primero es un valor no traducido
seleccionado entre los valores de Choices, mientras que el segundo
es una traducción normal. Como "gettext" no puede tener
dos traducciones diferentes para el mismo msgid, ambos
msgids deben ser diferentes usando los comentarios entre
paréntesis descritos en una sub-sección anterior.
Antes de la versión 0.8.0 de "po-debconf", tales
comentarios no estaban disponibles, y los desarrolladores tenían
que reemplazar el campo _Default: con _DefaultChoice: para
así resaltar esos campos en los ficheros PO:
#. DefaultChoice
msgid ""
"English[ default: do not translate bracketed material, put your "
"own language here but UNTRANSLATED. If it is not in the list, "
"put English (without bracketed material)]"
msgstr ""
"Swedish"
Se recomienda usar comentarios sencillos en los ficheros de plantillas,
menos proclives a causar un error.
Las estadísticas de traducciones basadas en "po-debconf"
están disponibles en
<
http://www.debian.org/intl/l10n/po-debconf/> (o réplicas); se
actualizan automáticamente cuando se envían paquetes nuevos.
Sólo se consideran los paquetes que contienen ficheros
debian/po/templates.pot y
debian/po/POTFILES.in, compruebe que
su paquete fuente los proporciona.
Los traductores pueden obtener aquí ficheros PO y POT, pero siempre deben
contactar con el anterior traductor (la dirección de correo
electrónico está dentro del fichero PO) y puede que
también con los otros traductores del equipo en debian-l10n-
<idioma>@lists.debian.org (si existe tal lista de correo) para
comprobar que nadie está trabajando en la misma traducción, y
también revisar los informes de fallo remitidos al paquete que van a
traducir para ver si ya se ha enviado una traducción.
Después de traducir estos ficheros, deberían enviar su trabajo al
desarrollador como un informe de fallo con severidad
wishlist, y la
etiqueta
patch.
debconf-gettextize(1),
debconf-updatepo(1),
dh_installdebconf(1),
podebconf-report-po(1),
po2debconf(1),
debconf-devel(7).
Martin Quinson <[email protected]>
Denis Barbier <[email protected]>
Omar Campagne Polaino <[email protected]>, 2010.
Esta traducción se ha realizado como parte del equipo de
traducción al español de Debian, <debian-l10n-spanish.org>.