Locale::Po4a::Po - Módulo para la manipulación de
ficheros PO
use Locale::Po4a::Po;
my $pofile=Locale::Po4a::Po->new();
# Leer el fichero PO
$pofile->read('fichero.po');
# Añadir una entrada
$pofile->push('msgid' => 'Hello', 'msgstr' => 'hola',
'flags' => "wrap", 'reference'=>'file.c:46');
# Extraer una traducción
$pofile->gettext("Hello"); # devuelve 'Hola'
# Escribir el resultado en un fichero
$pofile->write('otrofichero.po');
Locale::Po4a::Po es un módulo que permite manipular
catálogos de mensajes. Con él puede leer y escribir desde/a un
fichero (cuya extensión es a menudo po), puede crear nuevas
entradas sobre en el momento o pedir la traducción de una cadena.
Para una descripción más completa de los
catálogos de mensajes en formato PO y su uso, consulte la
documentación del programa gettext (nodo "`PO Files"').
Este módulo es parte del proyecto po4a, cuyo objetivo es
usar ficheros PO (diseñados originalmente para facilitar la
traducción de mensajes de programa) para traducir de todo, incluyendo
documentación (páginas de manual, manuales info),
descripciones de paquetes, plantillas debconf, y cualquier cosa que se pueda
beneficiar de esto.
- --porefs
type
- 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).
- --wrap-po
no|newlines|number (por omisión: 76)
- 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.
- --msgid-bugs-address
correo-e@direccion
- 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».
- --copyright-holder
cadena
- Define el titula de los derechos de reproducción en la cabecera del
POT. El valor predefinido es «Free Software Foundation,
Inc.»
- --package-name
string
- Define el nombre del paquete en la cabecera del POT. El valor por
omisión es «PACKAGE».
- --package-version
string
- Define la versión del paquete en la cabecera del POT. El valor por
omisión es «VERSION».
- new()
- Crea un nuevo catálogo de mensajes. Si se introduce un argumento,
este será el nombre del fichero PO a cargar.
- read($)
- Lee un fichero PO (cuyo nombre se introduce como argumento). Las entradas
anteriormente existentes no se eliminan, las nuevas se añaden al
final del catálogo.
- write($)
- Escribe el catálogo actual al fichero dado.
- write_if_needed($$)
- Al igual que «write», pero si el archivo PO o POT ya existe,
el objeto se escribirá en un archivo temporal para su
comparación con el fichero existente, y así determinar si
precisa una actualización (esto evita modificar el POT para
sólo actualizar una línea de referencia o el campo
«POT-Creation-Date»).
- filter($)
- Esta función extrae un catálogo desde uno existente.
Sólo se colocan en el catálogo resultante las entradas que
tengan una referencia en el fichero dado.
Esta función analiza su argumento, lo convierte en una
definición de una función de Perl, la pasa por
«eval» y filtra los campos por los que esta función
devuelve verdadero («true»).
A veces me encanta Perl ;)
- to_utf8()
- Recodifica los msgtr del PO a UTF-8. No hace nada si el juego de
caracteres no está especificado en el fichero PO (valor
«CHARSET»), o si ya está en UTF-8 o ASCII.
- gettext($%)
- Solicita la traducción de la cadena dada como argumento en el
catálogo actual. La función devuelve la cadena original (sin
traducir) si no se ha encontrado la cadena.
Después de la cadena a traducir, puede pasar una serie
asociativa («hash») de argumentos adicionales. Aquí
están las entradas válidas:
- wrap
- Booleano que indica si se puede considerar que los espacios blancos de la
cadena son irrelevantes. De ser así, la función canoniza la
cadena antes de buscar su traducción, y justifica el
resultado.
- wrapcol
- La columna en la que se debe hacer el salto de línea (por
omisión: 76).
- stats_get()
- Devuelve estadísticas sobre la tasa de aciertos de gettext desde la
última vez que se invocó
«stats_clear()». Cabe destacar que éstas no
son las mismas estadísticas que muestra «msgfmt
--statistic». Estas son sobre el uso reciente del fichero PO,
mientras que msgfmt informa del estado del fichero. Ejemplo de uso:
[algún uso del fichero PO para traducir cosas]
($percent,$hit,$queries) = $pofile->stats_get();
print "Hasta el momento hemos encontrado traducciones para el $percent\% ($hit of $queries) de cadenas.\n";
- stats_clear()
- Limpia las estadísticas de aciertos de gettext.
- push(%)
- Inserta una nueva entrada al final del catálogo actual. Los
argumentos deberían formar una tabla de elementos asociativos
(«hash»). Las claves válidas son:
- msgid
- La cadena en el idioma original.
- msgstr
- La traducción.
- reference
- Una indicación de dónde se encontró la cadena.
Ejemplo: «fichero.c:46» (significa en la línea 46 del
'fichero.c'). Puede ser una lista separada por espacios en caso de
múltiples apariciones.
- Un comentario añadido aquí manualmente (por los
traductores). El formato aquí es libre.
- automatic
- Un comentario que añadió automáticamente el programa
de extracción de cadenas. Consulte la opción
--add-comments del programa xgettext para más
información.
- flags
- Lista separada por espacios de todas la marcas («flags»)
definidas para ésta entrada.
Las marcas válidas son: c-text,
python-text, lisp-text, elisp-text,
librep-text, smalltalk-text, java-text,
awk-text, object-pascal-text, ycp-text,
tcl-text, wrap, no-wrap y fuzzy.
Consulte la documentación de gettext para conocer sus
significados.
- type
- Este es principalmente un parámetro interno: se usa cuando se
gettextizan documentos. La idea aquí es analizar el original y la
traducción en un objeto PO, y fusionarlos, usando el msgid de uno
como msgid y el msgid del otro como msgstr. Para asegurarnos de que todo
va bien, a cada msgid de los objetos PO se le da un tipo, basado en su
estructura (como «chapt», «sect1»,
«p» y demás en DocBook). Si los tipos de las cadenas
no coinciden, significa que ambos ficheros no tienen la misma estructura,
y el proceso devuelve un error.
Esta información se escribe como un comentario
automático en el fichero PO, ya que informa al traductor del
contexto de la cadena a traducir.
- wrap
- Booleano que indica si los espacios en blanco se pueden manipular en
reformateos cosméticos. Si es verdadero, la cadena se canoniza
antes de su uso.
Esta información se escribe en el fichero PO usando las
marcas wrap o no-wrap.
- wrapcol
- La columna en la que se debe hacer el salto de línea (por
omisión: 76).
Esta información no se escribe en el fichero PO.
- count_entries()
- Devuelve el número de entradas del catálogo (sin la
cabecera).
- count_entries_doc()
- Devuelve el número de entradas del documento. Si una cadena aparece
varias veces en el documento, se contará varias veces.
- msgid($)
- Devuelve el msgid con el número dado.
- msgid_doc($)
- Devuelve el msgid y su posición en el documento.
- type_doc($)
- Returns the type of the msgid with the given position in the document.
This is probably only useful to gettextization, and it's stored separately
from {$msgid}{'type'} because the later location may be overwritten by
another type when the $msgid is duplicated in the
master document.
- get_charset()
- Devuelve el juego de caracteres especificado en la cabecera PO. Si no se
le ha dado valor, devuelve «UTF-8».
- set_charset($)
- Esto define el juego de caracteres de la cabecera PO con el valor
especificado en su primer argumento. Si nunca invoca esta función
(y no se carga ningún fichero con un juego de caracteres
especificado), el valor predefinido es «UTF-8». Este valor
no cambia el comportamiento del módulo, simplemente se usa para
llenar el campo de la cabecera, y para devolverlo en
«get_charset()».
Denis Barbier <barbier@linuxfr.org>
Martin Quinson (mquinson#debian.org)
Jordi Vilalta <jvprat@gmail.com>
Omar Campagne <ocampagne@gmail.com>