| LOCALE::PO4A::XML.3PM(1) | User Contributed Perl Documentation | LOCALE::PO4A::XML.3PM(1) |
Locale::Po4a::Xml - Convierte documentos XML y derivados desde/a ficheros PO
El objetivo del proyecto po4a («PO for anything», PO para todo) es facilitar la traducción (y más interesante, el mantenimiento de las traducciones) usando las herramientas de gettext en ámbitos dónde no previstos, como la documentación.
Locale::Po4a::Xml es un módulo que asiste en la traducción de documentación en el formato XML a otros lenguajes (humanos). También se puede usar como base para construir módulos para documentos basados en XML.
Este módulo se puede usar directamente para tratar documentos XML genéricos. Extraerá el contenido de todas las etiquetas, y ningún atributo, ya que ahí es donde se escribe el texto en la mayoría de documentos basados en XML.
Hay algunas opciones (descritas en la siguiente sección) que pueden personalizar este comportamiento. Si eso no es suficiente para el formato de su documento, le animo a que escriba su propio módulo derivado de éste para describir los detalles de su formato. Consulte la sección Escribir módulos derivados que encontrará más abajo para una descripción del proceso.
La opción «debug» global provoca que este módulo muestre las cadenas excluidas, para ver si se salta algo importante.
Estas son las opciones particulares de este módulo:
Consulte también: https://developer.android.com/guide/topics/resources/string-resource.html
Sea cuidadoso a la hora de usar esta opción. En general, recomendamos arreglar el fichero de entrada.
Extrae únicamente las etiquetas especificadas en la opción tags. De no ser así, extraerá todas las etiquetas excepto las especificadas.
Lista separada por espacios de las etiquetas que desea traducir u omitir. Por omisión, se excluirán las etiquetas especificadas, pero si utiliza la opción «tagsonly», las etiquetas especificadas serán los únicos incluidos. Las etiquetas deben tener la forma <aaa>, pero puede juntar algunos (<bbb><aaa>) para indicar que el contenido de la etiqueta <aaa> sólo se debe traducir cuando esté dentro de la etiqueta <bbb>.
También puede especificar algunas opciones de etiquetas poniendo algunos caracteres delante de la jerarquía de etiquetas. Por ejemplo, puede poner w (ajustar) o W (no ajustar) para hacer caso omiso del comportamiento predefinido especificado por la opción global wrap.
Ejemplo: W<chapter><title>
Esto es útil cuando no se deben traducir los atributos, simplificando las cadenas a las traductores evitando así errores al teclear.
Las etiquetas deben tener la forma <aaa>, pero puede unir algunas (<bbb><aaa>), si una etiqueta (<aaa>) sólo se debe considerar cuando está dentro de otra etiqueta.
Tenga en cuenta que una etiqueta solo se puede introducir en solo una de las cadenas de ajuste break, inline placeholder, o customtag.
Las etiquetas deben tener la forma <aaa>, pero puede unir algunas (<bbb><aaa>), si una etiqueta (<aaa>) sólo se debe considerar cuando está dentro de otra etiqueta.
La ubicación del «placeholder» dentro de su bloque se marcará con una cadena similar a:
<placeholder type=\"footnote\" id=\"0\"/>
Las etiquetas deben tener la forma <aaa>, pero puede unir algunas (<bbb><aaa>), si una etiqueta (<aaa>) sólo se debe considerar cuando está dentro de otra etiqueta.
Si existe una etiqueta cuyo ajuste predefindo se deriva de la subclase de este módulo, pero desea definir un ajuste alternativo, debe introducir tal etiqueta como parte de la cadena de ajuste nodefault.
Las etiquetas deben tener la forma <aaa>, pero puede unir algunas (<bbb><aaa>), si una etiqueta (<aaa>) sólo se debe considerar cuando está dentro de otra etiqueta.
También puede especificar algunas opciones de etiquetas poniendo algunos caracteres delante de la jerarquía de etiquetas. Esto anula el comportamiento predefinido especificado por las opciones globales wrap y defaulttranslateoption.
Internamente, el analizador XML solo tiene en cuenta estas cuatro opciones: w W i p.
* Las etiquetas listadas en break se establecen en w o W en función de la opción wrap.
* Las etiquetas que aparecen en inline se establecen en i.
* Las etiquetas listadas en placeholder se establecen en p.
* Las etiquetas listadas en untranslated no tienen ninguna de estas opciones establecidas.
Puede comprobar el comportamiento de parámatro interno real invocando po4a con la opción --debug.
Ejemplo: W<chapter><title>
Tenga en cuenta que una etiqueta se debe introducir en la cadena de ajuste de translated o untranslated.
Las etiquetas deben tener la forma <aaa>, pero puede unir algunas (<bbb><aaa>), si una etiqueta (<aaa>) sólo se debe considerar cuando está dentro de otra etiqueta.
Tenga en cuenta que una etiqueta en línea traducible en una etiqueta no traducida se trata como una etiqueta de ruptura traducible, se omite el ajuste i y se ajusta w o W según la opción wrap.
Esto es un conjunto de letras como define translated, y este ajuste solo es válido para etiquetas traducibles.
La personalización más simple es definir qué etiquetas («tags») y atributos quiere que el analizador traduzca. Esto se debe hacer en la función «initialize». Primero debe invocar la inicialización principal, para obtener las opciones de la línea de órdenes, y luego, añadir sus definiciones personalizadas a la tabla «hash» de opciones. Si quiere tratar nuevas opciones de la línea de órdenes, debe definirlas antes de invocar la función «initialize» principal:
$self->{options}{'new_option'}='';
$self->SUPER::initialize(%options);
$self->{options}{'_default_translated'}.=' <p> <head><title>';
$self->{options}{'attributes'}.=' <p>lang id';
$self->{options}{'_default_inline'}.=' <br>';
$self->treat_options;
Debería usar las opciones _default_inline, _default_break, _default_placeholder, _default_translated, _default_untranslated y _default_attributes con módulos derivados. Esto permite a los usuarios invalidar el comportamiento predefinido configurado en su módulo mediante las opciones de línea de órdenes.
Si no le satisface el comportamiento predefindo de este módulo xml y sus módulos derivados, puede proporcionar opciones de línea de órdenes para modificar su comportamiento.
Consulte Locale::Po4a::Docbook(3pm),
Otro paso simple es redefinir la función «found_string», que recibe las cadenas extraídas por el analizador para su traducción. Ahí puede controlar qué cadenas quiere traducir, y realizar pequeñas transformaciones antes o después de la traducción misma.
Recibe el texto extraído, la referencia de dónde está, y una tabla «hash» que contiene información adicional para controlar qué cadenas traducir, cómo traducirlas y generar el comentario.
El contenido de las opciones depende del tipo de cadena que sea (especificado en una entrada de este «hash»):
Debe devolver el texto que reemplazará al original en el documento traducido. Aquí hay un ejemplo básico de ésta función:
sub found_string {
my ($self,$text,$ref,$options)=@_;
$text = $self->translate($text,$ref,"type ".$options->{'type'},
'wrap'=>$self->{options}{'wrap'});
return $text;
}
Aquí tiene otro ejemplo simple en el nuevo módulo Dia, que sólo filtra algunas cadenas.
Esta personalización es más compleja, pero le permite una personalización (prácticamente) total. Está basada en una lista de tablas de elementos asociativos («hash»), cada una de las cuales define el comportamiento de un tipo de etiqueta. La lista debe estar ordenada para que las etiquetas más generales estén después de las más concretas (ordenado primero por la llave «beginning» y luego por la llave «end»). Para definir un tipo de etiqueta debe construir un «hash» con las siguientes llaves:
Puede introducir como argumento una lista adicional de etiquetas (sin corchetes). Estos elementos de ruta se añaden la final de la ruta actual.
Aquí, la etiqueta presente una estructura iniciada por < y finalizada por >, y puede contener varias líneas.
Esto funciona con la matriz "@{$self->{TT}{doc_in}}" que contiene los datos de documento de entrad y su referencia indirecta mediante "$self->shiftline()" y "$self->unshiftline($$)".
Esto funciona con la matriz "@{$self->{TT}{doc_in}}" que contiene los datos de documento de entrad y su referencia indirecta mediante "$self->shiftline()" y "$self->unshiftline($$)".
Esto funciona con la matriz "@{$self->{TT}{doc_in}}" que contiene los datos de documento de entrad y su referencia indirecta mediante "$self->shiftline()" y "$self->unshiftline($$)".
Esto funciona con la matriz "@{$self->{TT}{doc_in}}" que contiene los datos de documento de entrad y su referencia indirecta mediante "$self->shiftline()" y "$self->unshiftline($$)".
Las opciones válidas son:
Este módulo puede traducir etiquetas y atributos.
DOCTYPE (ENTIDADES)
Existe una mínima compatibilidad con la traducción de entidades. Se traducen en conjunto, y no se tienen en cuenta las etiquetas. Las entidades multi-línea no son compatibles y siempre se justifican las entidades durante la traducción.
MODIFICAR LOS TIPOS DE ETIQUETA DE LOS MÓDULOS HEREDADOS (¿mover la estructura «tag_types» dentro de la tabla hash $self?)
Jordi Vilalta <jvprat@gmail.com> Nicolas François <nicolas.francois@centraliens.net>
Jordi Vilalta <jvprat@gmail.com> Omar Campagne <ocampagne@gmail.com>
Copyright © 2004 Jordi Vilalta <jvprat@gmail.com> Copyright © 2008-2009 Nicolas François <nicolas.francois@centraliens.net>
Este programa es software libre; puede redistribuirlo y/o modificarlo bajo los términos de la GPL v2.0 o posterior (consulte el archivo COPYING).
| 2024-08-06 | perl v5.38.2 |