Provided by: po4a_0.66-1_all bug

NOMBRE

       Locale::Po4a::Xml - Convierte documentos XML y derivados desde/a ficheros PO

DESCRIPCIÓN

       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.

TRADUCIR CON PO4A::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.

OPCIONES ACEPTADAS POR ESTE MODULO

       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:

       nostrip
           Evita que se quiten los espacios alrededor de las cadenas extraídas.

       wrap
           Canoniza  las  cadenas  a  traducir,  considerando  que  los espacios en blanco no son importantes, y
           justifica el documento traducido. Tienen preferencia sobre esta, las opciones personalizadas de  cada
           etiqueta. Consulte la opción translated más abajo.

       unwrap_attributes
           Los atributos se justifican de forma predefinida. Esta opción desactiva el justificado.

       caseinsensitive
           Permite  que  las  búsquedas  de etiqueta y atributos no tengan en cuenta mayúsculas y minúsculas. Si
           está definido, tratará <BooK>laNG y <BOOK>Lang como <book>lang.

       escapequotes
           Escape de comillas en las cadenas de salida. Necesarias, por ejemplo, para crear recursos de  cadenas
           para us uso en herramientas de compilación Android.

           Consulte también: https://developer.android.com/guide/topics/resources/string-resource.html

       includeexternal
           Si se define, se incluirán las entidades externas en el documento (traducido) generado, así como para
           la  extracción  de  cadenas.  De  no  estar  definido  tendrá  que  traducir  las  entidades externas
           separadamente, como documentos independientes.

       ontagerror
           Esta opción define el comportamiento del módulo cuando encuentra una  sintaxis  XML  no  válida  (una
           etiqueta  de  cierre  que  no concuerda con la última etiqueta de inicio). Puede tomar los siguientes
           valores:

           fail
               Éste es el valor predefinido. El módulo cerrará con un mensaje de error.

           warn
               El módulo continuará, mostrando una advertencia.

           silent
               El módulo continuará sin advertencias.

           Sea cuidadoso a la hora de usar esta opción. En general, recomendamos arreglar el fichero de entrada.

       tagsonly
           Nota: Esta opción está obsoleta.

           Extracts only the specified tags in the tags option.  Otherwise, it will extract all the tags  except
           the ones specified.

       doctype
           La  cadena que intentará encajar con la primera línea del «doctype» del documento (si está definida).
           Una advertencia indicará que el documento puede ser de un tipo equivocado, si no encaja.

       addlang
           Cadena que indica la ruta (por ejemplo, <bbb><aaa>) de una etiqueta donde se ha de añadir el atributo
           «lang="..."». El idioma se definirá como el nombre base del fichero PO sin ninguna extensión «po».

       optionalclosingtag
           Boolean indicating whether closing tags are optional (as in HTML). By default, missing  closing  tags
           raise an error handled according to ontagerror.

       tags
           Nota:  Esta  opción  está  obsoleta.  En  lugar  de  ello,  debería  usar  las  opciones translated y
           untranslated.

           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>.

           You can also specify some tag options by putting some characters in front of the tag  hierarchy.  For
           example,  you  can  put  w (wrap) or W (don't wrap) to override the default behavior specified by the
           global wrap option.

           Ejemplo: W<chapter><title>

       attributes
           Lista separada por espacios de los atributos de etiquetas que quiere traducir. Puede especificar  los
           atributos  por  su  nombre  (por  ejemplo, «lang»), pero puede añadirle como prefijo una jerarquía de
           etiquetas para especificar que esta etiqueta sólo se debe traducir cuando esté dentro de la  etiqueta
           especificada. Por ejemplo: <bbb><aaa>lang indica que el atributo «lang» sólo se traducirá cuando esté
           dentro de la etiqueta <aaa>, y ésta esté dentro de una etiqueta <bbb>.

       foldattributes
           No  traduce  los  atributos en etiquetas en línea. En lugar de ello, reemplaza todos los atributos de
           una etiqueta con po4a-id=<id>.

           Esto es útil cuando no se deben traducir los atributos, simplificando las cadenas a  las  traductores
           evitando así errores al teclear.

       customtag
           Lista  separada  por  espacios de las etiquetas que no se deberían tratar como tales. Éstas se tratan
           como etiquetas en línea, y no precisan cierre.

       break
           Lista separada por espacios de las etiquetas que deberían romper la secuencia. Por omisión todas  las
           etiquetas rompen la secuencia.

           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.

       inline
           Lista separada por espacios de las etiquetas que quiere tratar como elementos en línea (que no rompen
           la secuencia). Por omisión todas las etiquetas rompen la secuencia.

           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.

       placeholder
           Lista  separada  por  espacios  de  las  etiquetas que se deberían tratar como marcadores de posición
           («placeholders»). Éstos no rompen la secuencia, pero su contenido se traduce separadamente.

           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.

       break-pi
           By  default,  Processing Instructions (i.e., "<? ... ?>" tags) are handled as inline tags.  Pass this
           option if you want the PI to be handled as breaking tag.  Note that unprocessed PHP tags are  handled
           as Processing Instructions by the parser.

       nodefault
           Una lista separada por espacios de etiquetas que el módulo no debería definir en ninguna categoría de
           manera predefinidas.

           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.

       cpp Compatibilidad  con  directivas  de  preprocesador  de  C.  Si  activa  esta opción, po4a tratará las
           directivas de  preprocesador  como  separadores  de  párrafo.  Esto  cobra  importancia  si  se  debe
           preprocesar  el  fichero  XML, ya que de otra forma las directivas se podrían insertar en medio de la
           línea si  po4a  considera  que  pertenecen  al  párrafo  actual,  y  serían  irreconocibles  para  el
           preprocesador. Nota: las directivas del preprocesador deben aparecer entre etiquetas (no deben romper
           etiquetas).

       translated
           Una lista separada por espacios de etiquetas que desea traducir.

           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.

           w   Las etiquetas deberían traducirse, y se puede justificar el contenido.

           W   Las etiquetas deberían traducirse, y no se debe justificar el contenido.

           i   Las etiquetas se deberían traducir como elementos en línea.

           p   Las etiquetas se deberían traducir como marcadores de posición.

           Internally, the XML parser only cares about these four options: w W i p.

           * Tags listed in break are set to w or W depending on the wrap option.

           * Tags listed in inline are set to i.

           * Tags listed in placeholder are set to p.

           * Tags listed in untranslated are without any of these options set.

           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.

       untranslated
           Lista separada por espacios de las etiquetas que no desea traducir.

           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.

           Please note a translatable inline tag in an untranslated tag is treated as  a  translatable  breaking
           tag, i setting is dropped and w or W is set depending on the wrap option.

       defaulttranslateoption
           Las  categorías  predefinidas para las etiquetas que no pertenecen a translated, untranslated, break,
           inline, o placeholder.

           Esto es un conjunto de letras como define translated, y este ajuste solo  es  válido  para  etiquetas
           traducibles.

ESCRITURA DE MÓDULOS DERIVADOS

   DEFINIR QUÉ ETIQUETAS Y ATRIBUTOS TRADUCIR
       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.

   ANULACIÓN DEL COMPORTAMIENTO PREDEFINIDO CON OPCIONES DE LA 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),

   REDEFINIR LA FUNCIÓN found_string
       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»):

       type="etiqueta"
           La cadena encontrada es el contenido de una etiqueta («tag»)  traducible.  La  entrada  «tag_options»
           (opciones  de  etiquetas) contiene los caracteres de opciones delante de la jerarquía de etiquetas en
           la opción «tags» del módulo.

       type="atributo"
           Significa que la cadena encontrada es el valor de  un  atributo  traducible.  La  entrada  «atributo»
           contiene el nombre del atributo.

       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.

   MODIFICAR LOS TIPOS DE ETIQUETA (PENDIENTE)
       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:

       beginning
           Especifica el principio de la etiqueta, después de «<».

       end Especifica el final de la etiqueta, antes de «>».

       breaking
           Indica si esta clase de etiqueta rompe la secuencia. Una etiqueta en línea («inline») que no rompe la
           secuencia es uno que se puede tomar como parte del  contenido  de  otra  etiqueta.  Puede  tomar  los
           valores  falso  (0),  verdadero  (1)  o  indefinido. Si se deja indefinido, deberá definir la función
           «f_breaking», que indicará si una etiqueta de esta clase en concreto rompe o no la secuencia.

       f_breaking
           Es una función que dirá si la siguiente etiqueta rompe o no. Debe definirla si la opción breaking  no
           lo está.

       f_extract
           Si  deja  esta  llave indefinida, la función de extracción genérica deberá extraer la etiqueta por si
           misma. Es útil con etiquetas que pueden contener otras etiquetas o estructuras especiales  dentro,  y
           que  pueden  confundir  al  analizador  principal.  Esta  función recibe un booleano que indica si la
           etiqueta se debe eliminar del documento de entrada o no.

       f_translate
           Esta función devuelve la etiqueta  (en  el  formato  «get_string_until()»)  y  devuelve  la  etiqueta
           traducida (atributos y toda la información necesaria traducidos) como una única cadena.

FUNCIONES INTERNAS utilizadas para escribir analizadores derivados

   TRABAJAR CON ETIQUETAS
       get_path()
           Esta  función  devuelve  la  ruta  hasta la etiqueta actual desde la raíz del documento, con la forma
           <html><body><p>.

           Puede introducir como argumento una lista adicional de etiquetas (sin corchetes). Estos elementos  de
           ruta se añaden la final de la ruta actual.

       tag_type()
           Esta  función  devuelve  el índice de la lista «tag_types» que encaja con la siguiente etiqueta en el
           documento de entrada, o «-1» si está al final del fichero.

           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($$)".

       extract_tag($$)
           Esta función devuelve la próxima etiqueta del documento de entrada sin el principio ni el  final,  en
           forma  de  vector  («array»),  para  mantener  las  referencias  del  fichero  de  entrada. Tiene dos
           parámetros: el tipo de la etiqueta (tal como devuelve «tag_type») y un booleano,  que  indica  si  se
           debe eliminar del fichero de entrada.

           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($$)".

       get_tag_name(@)
           Esta función devuelve el nombre de la etiqueta introducida como argumento,  en  la  forma  de  vector
           devuelta por «extract_tag».

       breaking_tag()
           Esta función devuelve un booleano que indica si la siguiente etiqueta del documento de entrada es una
           etiqueta que rompe o no (es una etiqueta en línea). Esto deja el documento de entrada intacto.

       treat_tag()
           Esta  función traduce la siguiente etiqueta del documento de entrada. Usa las funciones de traducción
           personalizadas de cada tipo de etiqueta.

           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($$)".

       tag_in_list($@)
           Esta  función devuelve una cadena que dice si el primer argumento (una jerarquía de etiquetas) encaja
           con alguna de las etiquetas del segundo argumento (una lista de etiquetas o jerarquías de  etiqueta).
           Si  no  encaja,  devuelve  cero.  De otra forma, devuelve las opciones de la etiqueta emparejada (los
           caracteres delante de la etiqueta) o 1 (si la etiqueta no tiene opciones).

   TRABAJAR CON ATRIBUTOS
       treat_attributes(@)
           This function handles the translation of the tags'  attributes.  It  receives  the  tag  without  the
           beginning  /  end  marks,  and  then it finds the attributes, and it translates the translatable ones
           (specified by the module option attributes).  This returns a plain string with the translated tag.

   TRABAJAR CON CONTENIDO ETIQUETADO
       treat_content()
           Esta función obtien el texto hasta la siguiente etiqueta de  ruptura  (no  en  línea)  del  flujo  de
           entrada. Traduzca utilizando cada función de traducción personalizada de tipo de etiqueta.

           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($$)".

   TRABAJAR CON LAS OPCIONES DEL MÓDULO
       treat_options()
           Esta función llena las estructuras internas  que  contienen  las  etiquetas,  atributos  y  datos  de
           elementos  en línea con las opciones del módulo (especificadas en la línea de órdenes o en la función
           «initialize»).

   OBTENER TEXTO DEL DOCUMENTO DE ENTRADA
       get_string_until($%)
           Esta función devuelve una lista con las lineas (y referencias) del documento  de  entrada  hasta  que
           encuentra el primer argumento. El segundo argumento es una tabla «hash» de opciones. El valor de cero
           significa desactivado (valor predefinido) y 1, activado.

           Las opciones válidas son:

           include
               Esto hace que la lista retornada contenga la cadena buscada

           remove
               Esto elimina el flujo devuelto de la entrada

           unquoted
               Esto asegura que el texto buscado se encuentra fuera de cadenas entrecomilladas

           regex
               This denotes that the first argument is a regular expression rather than an plain string

       skip_spaces(\@)
           Esta  función  recibe  como  argumento  la  referencia  a  un  párrafo  (en  el  formato devuelto por
           «get_string_until»), omite los espacios de la cabecera y los devuelve como una cadena simple.

       join_lines(@)
           Esta función devuelve una cadena simple con el texto de  la  lista  del  argumento  (descartando  las
           referencias).

ESTADO DE ESTE MODULO

       Este módulo puede traducir etiquetas y atributos.

LISTA DE TAREAS PENDIENTES

       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?)

VÉASE TAMBIÉN

       Locale::Po4a::TransTractor(3pm), po4a(7)

AUTORES

        Jordi Vilalta <jvprat@gmail.com>
        Nicolas François <nicolas.francois@centraliens.net>

TRADUCCION

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

DERECHO DE COPIA Y LICENCIA

        Copyright © 2004 Jordi Vilalta  <jvprat@gmail.com>
        Copyright © 2008-2009 Nicolas François <nicolas.francois@centraliens.net>

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

Herramientas de po4a                               2022-01-02                             Locale::Po4a::Xml(3pm)