Provided by: po4a_0.73-2ubuntu1_all 

NOME
Locale::Po4a::Xml - converte documentos XML e derivados de/para ficheiros PO
DESCRIÇÃO
O objetivo do projeto po4a (PO for anything: PO para qualquer coisa) é facilitar traduções (e o mais
interessante, a manutenção das traduções) a usar as ferramentas do gettext em áreas em que não se
esperava, como na documentação.
Locale::Po4a::Xml é um módulo para ajudar a tradução de documentos XML em outro idioma [humano]. Também
pode ser usado como uma base para a construção de módulos de documentos com base em XML.
TRADUZIR COM PO4A::XML
Este módulo pode ser usado diretamente para lidar com documentos XML genéricos. Isto irá extrair todo o
conteúdo das etiquetas e, não atributos, já que é onde o texto é escrito na maioria dos documentos com
base XML.
Existem algumas opções (descrito na próxima secção), que podem personalizar este comportamento. Se isto
não se encaixa no seu formato de documento que está encorajado a escrever o seu próprio módulo derivado
deste, para descrever os detalhes do seu formato. Consulte a secção WRITING DERIVATE MODULES abaixo, para
descrição do processo.
OPÇÕES ACEITES POR ESTE MÓDULO
A opção de depuração global faz com que este módulo mostre as cadeia excluídas, para ver se ele ignora
algo importante.
Estas são as opções particulares deste módulo:
nostrip
Impede-o para tirar os espaços em torno das cadeias extraídas.
wrap
Canoniza a cadeia para traduzir, a considerar que espaços em branco não são importantes e dimensiona
o documento traduzido. Essa opção pode ser sobrescrita por opções personalizadas de marcação. Veja a
opção translated abaixo.
unwrap_attributes
Atributos são quebrados por predefinição. Essa opção desativa a quebra.
caseinsensitive
Faz as etiquetas e atributos a procurar trabalhar de forma em maiúsculas e minúsculas. Se for
definido, ele vai tratar <BooKe<gt>laNG e <BOOK>Lang como <book>lang.
escapequotes
Aspas de escapa em cadeias de saída. Necessário, por exemplo, para criação de recursos de cadeias
para usar por ferramentas de compilação de Android.
Veja também: https://developer.android.com/guide/topics/resources/string-resource.html
includeexternal
Quando definido, entidades externas estão incluídas no documento gerado (traduzido) e para a extração
de cadeias. Se não for definido, vai ter que traduzir entidades externas separadamente como
documentos independentes.
ontagerror
Esta opção define o comportamento do módulo quando ele encontrar uma sintaxe de XML inválida (uma
etiqueta de fecho, que não coincide com a última etiqueta de abertura). Ele pode ter os seguintes
valores:
fail
Este é o valor predefinido. O módulo irá sair com um erro.
warn
O módulo continuará e emitirá um aviso.
silent
O módulo vai continuar sem emitir um aviso.
Tenha cuidado ao usar esta opção. Recomenda-se geralmente para corrigir o ficheiro de entrada.
tagsonly
Nota: Esta opção está obsoleta.
Extrai apenas as marcações especificadas na opção tags. Do contrário, ela extrairá todas as
marcações, com exceção daquelas especificadas.
doctype
A cadeias que vai tentar combinar com a primeira linha do doctype do documento (se definido). Se isso
não acontecer, um aviso indicará que o documento poderá ser de um tipo incorreto.
addlang
A cadeia a indicar o caminho (por exemplo, <bbb><AAA>) de uma etiqueta onde um atributo lang="..."
deve ser adicionado. O idioma será definido como o nome base do ficheiro PO sem qualquer extensão po.
optionalclosingtag
Booleano indicando se as tags de fechamento são opcionais (como em HTML). Por padrão, as tags de
fechamento ausentes geram um erro tratado de acordo com ontagerror.
tags
Nota: Esta opção está obsoleta. Deve usar as opções translated e untranslated em vez.
Lista de etiquetas separada por espaços que deseja traduzir ou ignorar. Por predefinição, as
etiquetas especificadas serão excluídas, mas se usar a opção "tagsonly", etiquetas especificadas
serão as únicas incluídas. As etiquetas devem estar em forma <aaa>, mas podem-se juntar a algum
(<bbb><aaa>) para dizer que o conteúdo da etiqueta <aaa> só será traduzido quando está numaetiqueta
<bbb>.
Também pode especificar algumas opções de marcação para pôr alguns caracteres na frente da hierarquia
de marcações. Por exemplo, pode pôr um w (wrap) or W (não aplica wrap) para sobrescrever o
comportamento padrão especificado pela opção global wrap.
Exemplo: W<chapter><title>
attributes
Lista de atributos das etiquetas separada por espaços que deseja traduzir. Pode especificar os
atributos pelo nome deles (por exemplo, "lang"), mas pode prefixar com uma hierarquia de etiquetas,
para especificar que este atributo só será traduzido quando está na etiqueta especificada. Por
exemplo:<bbb><aaa>lang especifica que o atributo lang só será traduzido se for em numa etiqueta <aaa>
e é numa etiqueta <bbb>.
foldattributes
Não traduzir atributos em etiquetas em linha. Vez disso, substitua todos os atributos duma etiqueta
por po4a-id=<id>.
Isto é útil quando atributos não serão traduzidas, como isso simplifica as cadeias para tradutores e
evita erros de digitação.
customtag
lista de etiquietas separadas por espaços que não deviam ser tratadas como etiquetas. Estas etiquetas
são tradadas com em linha e, não precisam de ser fechadas.
break
Lisat de etiquetas separada por espaços que devem quebrar a sequência. Por predefinição, todas as
etiquetas quebrar a sequência.
As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se uma etiqueta
(<aaa>) só deveria ser considerada quando está em outra etiqueta (<bbb>).
Note que uma marcação deve ser listada em apenas uma cadeia de configuração de break, inline
placeholder ou customtag.
inline
Lista de etiquetas separada por espaços que devem ser tratados como em linha. Por predefinição todas
as etiquetas quebram a sequência.
As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se uma etiqueta
(<aaa>) só deveria ser considerada quando está em outra etiqueta (<bbb>).
placeholder
Lista de etiquetas separadas por espaços que devem ser tratadas como espaços reservados. Os espaços
reservados não quebram a sequência, mas o conteúdo dos espaços reservados é traduzido separadamente.
A localização do espaço reservado no bloco dele será marcado com uma cadeia semelhante a:
<placeholder type=\"footnote\" id=\"0\"/>
As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se uma etiqueta
(<aaa>) só deveria ser considerada quando está em outra etiqueta (<bbb>).
break-pi
Por padrão, as Instruções de Processamento (ou seja, tags "<? ... ?>") são tratadas como tags
embutidas. Passe essa opção se desejar que as I.P. sejam tratadas como tag de quebra. Note que tags
PHP não processadas são tratadas como Instruções de Processamento pelo analisador.
nodefault
lista de etiquetas separadas por espaço que o módulo não deve tentar definir por predefinição em
qualquer categoria.
Se tiver uma marcação que tenha a configuração predefinida dela pela subclasse deste módulo, mas
desejar definir uma configuração alternativa, será necessário listar essa marcação como parte da
cadeia de configuração nodefault.
cpp Diretivas de suporte do pré-processador C. Quando esta opção está definida, po4a irá considerar as
diretivas de pré-processamento como separadores de parágrafo. Isso é importante se o ficheiro XML
deve ser processado, porque senão as directivas podem ser inseridas no meio de linhas se o po4a
considerar que pertencem ao parágrafo corrente, que não será reconhecido pelo pré-processador. Nota:
as directivas de pré-processamento só devem aparecer entre etiquetas (que não deve quebrar uma
etiqueta).
translated
Listas de etiquetas separadas por espaços que quer traduzir.
As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se uma etiqueta
(<aaa>) só deveria ser considerada quando está em outra etiqueta (<bbb>).
Também pode especificar algumas opções de marcação para por alguns caracteres na frente da hierarquia
de marcações. Isso sobrescreve o comportamento predefinido especificado pelas opções globais wrap e
defaulttranslateoption.
w Etiquetas devem ser traduzidos e o conteúdo pode ser re-envolvido.
W Etiquetas devem ser traduzidos e o conteúdo não devia ser reenvolvido.
i As etiquetas deverão ser traduzidas em linha.
p Etiquetas devem ser traduzidos em linha.
Internamente, o analisador XML só se preocupa com essas quatro opções: w W i p.
* As tags listadas em break são definidas como w ou W dependendo da opção wrap.
* As tags listadas em inline são definidas como i.
* As tags listadas em placeholder são definidas como p.
* As tags listadas em untranslated estão sem nenhuma dessas opções definidas.
Pode verificar o comportamento real do parâmetro interno a invocar po4a com a opção --debug.
Exemplo: W<chapter><title>
Note que uma marcação deve estar listada na cadeia de configuração translated ou untranslated.
untranslated
Listas de etiquetas separadas por espaços que não quer traduzir.
As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se uma etiqueta
(<aaa>) só deveria ser considerada quando está em outra etiqueta (<bbb>).
Note que uma tag inline traduzível numa tag não traduzida é tratada como uma tag de quebra
traduzível, a configuração i é descartada e w ou W é definida dependendo da opção wrap.
defaulttranslateoption
As categorias predefinidas para etiquetas que não são nenhuns de: traduzidos, não traduzidos,
partidos, em linha ou espaço reservado.
Este é um conjunto de letras, conforme definido em translated e essa configuração é válida apenas
para tags traduzíveis.
ESCREVENDO MÓDULOS DERIVADOS
DEFINIR QUE ETIQUETAS E ATRIBUTOS PARA TRADUÇÃO
A mais simples personalização é definir quais as etiquetas e atributos mais desejados para o analisador a
traduzir. Isto deve ser feito na função 'initialize'. Primeiro, deve invocar o 'initialize' principal,
para obter as opções de linha de comando e, em seguida, acrescentar as suas definições personalizadas
para as opções de 'hash'. Se quiser tratar de algumas novas opções de linha de comando, deve defini-las
antes invocar o '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;
Deveria usar as opções _default_inline, _default_break, _default_placeholder, _default_translated,
_default_untranslated e _default_attributes nos módulos derivados. Isso permite que utilizadores
sobrescrevam o comportamento predefinido definido no seu módulo com opções de linha de comando.
SUBSTITUIÇÃO DO COMPORTAMENTO PREDEFINIDO COM AS OPÇÕES DE LINHA DE COMANDO
Se não gostar do comportamento predefinido deste módulo xml e módulos derivados dele, poderá fornecer
opções de linha de comando para alterar o comportamento deles.
Veja Locale::Po4a::Docbook(3pm),
SUBSTITUINDO A FUNÇÃO found_string
Outro passo simples é substituir a função "found_string", que recebe as cadeias extraídas do analisador,
a fim de traduzi-las. Lá pode controlar quais cadeias deseja traduzir e realizar neles as transformações
antes ou depois da tradução em si.
Ele recebe o texto extraído, a referência de onde ele estava e um 'hash' que contém informações extras
para controlar o que cadeias a traduzir, como traduzi-las e gerar o comentário.
O conteúdo dessas opções depende do tipo de cadeia é (especificado numa entrada do 'hash'):
type="tag"
A cadeia encontrada é o conteúdo de uma etiqueta traduzível. A entrada "tag_options" contém os
carateres de opção na frente da hierarquia das etiquetas na opção do módulo "tags".
type="attribute"
Significa que as cadeias encontradas é o valor de um atributo traduzível. A entrada "attribute" tem o
nome do atributo.
Ela deve retornar o texto que irá substituir o original no documento traduzido. Aqui está um exemplo
básico desta função:
sub found_string {
my ($self,$text,$ref,$options)=@_;
$text = $self->translate($text,$ref,"type ".$options->{'type'},
'wrap'=>$self->{options}{'wrap'});
return $text;
}
Aqui está outro exemplo simples no novo módulo Dia , que só filtra algumas cadeias.
MODIFICANDO TIPOS DE ETIQUETAS (A FAZER)
Este é mais complexo, mas permite uma personalização (quase) total. É baseado numa lista de 'hashes',
cada um define o comportamento de um tipo de etiqueta. A lista deve ser ordenada para que as etiquetas
mais gerais estão antes das mais concretas (ordenadas primeiro no início e, depois, pelas chaves de
fecho). Para definir um tipo de etiqueta vai ter que fazer um hash com as seguintes chaves:
beginning
Especifice o princípio da etiqueta, depois de "<".
end Especifice o fim da etiqueta, depois de ">".
breaking
Ele diz que se esta é uma classe de etiquetas quebradas. Uma etiqueta não-quebrada (inline) é uma que
pode ser tomada como parte do conteúdo de outra etiqueta. Pode levar o valor falso (0), verdadeiro
(1) ou indefinido. Se deixá-lo indefinido, vai ter que definir a função f_breaking que vai dizer se
uma etiqueta concreta desta classe é uma etiqueta de quebrar ou não.
f_breaking
É uma função que vai dizer se a próxima etiqueta é uma quebra ou não. Ele deve ser definido se a
opção breaking não é.
f_extract
Se deixar esta chave indefinida, a função de extração de genéricos terá que extrair a etiqueta
própria. É útil para as etiquetas que podem ter outras etiquetas ou estruturas especiais dentro
deles, de modo que o analisador principal não fica louco. Esta função recebe um booleano que diz se a
etiqueta deve ser removida do fluxo de entrada ou não.
f_translate
Esta função recebe a etiqueta (no formato get_string_until()) e retorna a etiqueta traduzida
(atributos traduzidos ou todos as necessárias transformações) como uma única sequência.
FUNÇÕES INTERNAS usadas para escrever analisadores derivados
TRABALHANDO COM ETIQUETAS
get_path()
Esta função retorna o caminho para a etiqueta corrente a partir da raiz do documento na forma
<html><body><p>.
Um conjunto adicional de etiquetas (sem parênteses) pode ser passado como argumento. Estes elementos
de caminho são adicionados ao fim do caminho da corrente.
tag_type()
Esta função retorna o índice da lista tag_types que cabe na etiqueta seguinte no fluxo de entrada, ou
-1, se é no fim do ficheiro de entrada.
Aqui, a marcação tem estrutura iniciada por < e finalizada por > e pode conter várias linhas.
Isso funciona no vetor "@{$self->{TT}{doc_in}}" a deter os dados do documento de entrada e referência
indiretamente via "$self->shiftline()" e "$self->unshiftline($$)".
extract_tag($$)
Esta função retorna a próxima etiqueta do fluxo de entrada sem o início e o fim, numa forma de
matriz, para manter as referências do ficheiro de entrada tem dois parâmetros: o tipo de etiqueta
(como retornado por tag_type) e um booleano, que indica se deve ser removido a partir do fluxo de
entrada.
Isso funciona no vetor "@{$self->{TT}{doc_in}}" a deter os dados do documento de entrada e referência
indiretamente via "$self->shiftline()" e "$self->unshiftline($$)".
get_tag_name(@)
Esta função retorna o nome da etiqueta passada como um argumento, no formulário da matriz retornada
por extract_tag.
breaking_tag()
Esta função retorna um booleano que diz que se a próxima etiqueta no fluxo de entrada é uma etiqueta
quebrada ou não (etiqueta inline). Ele deixa o fluxo de entrada intacto.
treat_tag()
Essa função converte a próxima etiqueta a partir do fluxo de entrada. Usando em cada etiqueta tipos
personalizados de funções de tradução.
Isso funciona no vetor "@{$self->{TT}{doc_in}}" a deter os dados do documento de entrada e referência
indiretamente via "$self->shiftline()" e "$self->unshiftline($$)".
tag_in_list($@)
Esta função retorna um valor de cadeia que diz que se o primeiro argumento (a hierarquia das
etiquetas) corresponde a qualquer uma das etiquetas do segundo argumento (a lista de etiquetas ou a
hierarquia). Se não corresponder, ele retorna 0. Caso contrário, retorna as opções de etiqueta
correspondentes (os carateres de frente da etiqueta) ou 1 (se a etiqueta não tem opções).
TRABALHANDO COM ATRIBUTOS
treat_attributes(@)
Essa função manipula a tradução dos atributos das marcações. Ela recebe a marcação sem as marcas de
início / fim e, então, ela encontra os atributos e traduz os traduzíveis (especificado pela opção do
módulo attributes). Isso retorna uma cadeia simples com a marcação traduzida.
TRABALHANDO COM CONTEÚDOS MARCADOS
treat_content()
Essa função obtém o texto até a próxima marcação de quebra (não em linha) do fluxo de entrada.
Traduza-a a usar as funções de tradução personalizadas de cada tipo de marcação.
Isso funciona no vetor "@{$self->{TT}{doc_in}}" a deter os dados do documento de entrada e referência
indiretamente via "$self->shiftline()" e "$self->unshiftline($$)".
TRABALHANDO COM OPÇÕES DE MÓDULOS
treat_options()
Esta função preenche as estruturas internas que contêm as etiquetas, atributos e dados em linha com
as opções do módulo (especificado na linha de comando ou na função de inicialização).
OBTENÇÃO DE TEXTO A PARTIR DO DOCUMENTO DE ENTRADA
get_string_until($%)
Esta função retorna uma matriz com as linhas (e referências) do documento de entrada até encontrar o
primeiro argumento. O segundo argumento é um 'hash' de opções. Valor 0 significa desativado (a
predefinição) e 1 ativado.
As opções válidas são:
include
Isto faz com que a matriz retornada contenha o texto procurado
remove
Isto remove o fluxo retornado a partir da entrada
unquoted
Isto assegura que o text procurado está fora de qualquer citação
regex
Isso indica que o primeiro argumento é uma expressão regular e não uma cadeia simples
skip_spaces(\@)
Esta função recebe como argumento a referência a um parágrafo (no formato retornado por
get_string_until), ignora os espaços de título dele e retorna-os como uma sequência simples.
join_lines(@)
Esta função retorna uma cadeia simples com o texto do argumento da matriz (a descartar as
referências).
ESTADO DESTE MÓDULO
Este módulo pode traduzir etiquetas e atributos.
LISTA PARAFAZER
DOCTYPE (ENTITIES)
Há um suporte mínimo para a tradução de entidades. Elas são traduzida como um todo e as etiquetas não são
tidas em conta. As entidades multi linhas não são suportados e as entidades são sempre re-envolvidas
durante a tradução.
MODIFICAR TIPOS DE ETIQUETAS A PARTIR DE MÓDULOS HERDADOS (move a estrutura tag_types dentro de hash
$self hash?)
VER TAMBÉM
Locale::Po4a::TransTractor(3pm), po4a(7)
AUTORES
Jordi Vilalta <jvprat@gmail.com>
Nicolas François <nicolas.francois@centraliens.net>
DIREITOS DE AUTOR E LICENÇA
Copyright © 2004 Jordi Vilalta <jvprat@gmail.com>
Copyright © 2008-2009 Nicolas François <nicolas.francois@centraliens.net>
This program is free software; you may redistribute it and/or modify it under the terms of GPL v2.0 or
later (see the COPYING file).
perl v5.38.2 2024-08-28 LOCALE::PO4A::XML.3PM(1)