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.
- comment
- 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 <[email protected]>
Martin Quinson (mquinson#debian.org)
Jordi Vilalta <[email protected]>
Omar Campagne <[email protected]>