Provided by: po4a_0.57-2_all 

NOME
Locale::Po4a::Xml - converte documentos XML e derivados de/para arquivos PO
DESCRIÇÃO
O objetivo do projeto po4a (PO for anything, ou PO para qualquer coisa) é facilitar traduções (e o mais
interessante, a manutenção das traduções) usando as ferramentas do gettext em áreas em que não se
esperava, como documentação.
Locale::Po4a::Xml é um módulo para ajudar a tradução de documentos XML para outros idiomas. Ele também
pode ser usado como uma base para compilar módulos para documentos baseados em XML.
TRADUZINDO COM PO4A::XML
Esse módulo pode ser usado diretamente para manipular documentos XML genéricos. Ele vai extrair o
conteúdo de todas as marcações, porém de nenhum atributo, já que é onde o texto está escrito na maioria
dos documentos baseados em XML.
Há algumas opções (descritas na próxima seção) que podem personalizar este comportamento. Se isso não se
adequar ao formato do seu documento, encorajamos você a escrever seu próprio módulo derivado deste, para
descrever os detalhes do seu formato. Veja a seção abaixo ESCREVENDO MÓDULOS DERIVADOS, para a descrição
do processo.
OPÇÕES ACEITAS POR ESTE MÓDULO
A opção de depuração global causa esse módulo a mostrar as strings excluídas, para ver se ignora alguma
coisa importante.
Estas são as opções específicas deste módulo:
nostrip
Previne-o de cortar espaços em volta das strings extraídas.
wrap
Canoniza a string para traduzir, considerando 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 padrão. Essa opção desabilita a quebra.
caseinsensitive
Isso faz com que a pesquisa por marcações e atributos funcione de uma forma que diferencie letras
maiúsculas das minúsculas. Se essa opção estiver definida, ela vai tratar <BooK>laNG e <BOOK>Lang
como <book>lang.
escapequotes
Escapa aspas em strings de saída. Necessário, por exemplo, para criação de recursos de string para
usar por ferramentas de compilação de Android.
Veja também: https://developer.android.com/guide/topics/resources/string-resource.html
includeexternal
Quando definida, entidades externas são incluídas no documento gerado (traduzido) e para a extração
de strings. Se não estiver definido, você terá que traduzir entidades externas separadamente como
documentos independentes.
ontagerror
Essa opção define o comportamento do módulo quando ele encontrar uma sintaxe XML inválida (uma
marcação fechando que não corresponde a última marcação abrindo, ou o atributo de uma marcação sem
valor). Ele pode levar os seguintes valores:
fail
Esse é o valor padrão. O módulo vai sair com um erro.
warn
O módulo vai continuar e vai fazer um aviso.
silent
O módulo vai continuar sem qualquer aviso.
Tenha cuidado ao usar essa opção. Ela geralmente é recomendada para corrigir o arquivo de entrada.
tagsonly
Nota: essa opção é 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
String que tentará corresponder com a primeira linha do tipo de documento (doctype) do documento (se
definido). Se não estiver definido, um aviso vai indicar que o documento pode ser um tipo incorreto.
addlang
String indicando o caminho (ex.: <bbb><aaa>) de uma marcação na qual um atributo lang="..." deve ser
adicionado. O idioma será definido como o nome base do arquivo PO sem qualquer extensão.
tags
Nota: Essa opção é obsoleta. Você deveria usar as opções translated e untranslated ao invés dessa.
Lista separada por espaço de marcações que você deseja traduzir ou ignorar. Por padrão, as marcações
especificadas serão excluídas, mas se você usar a opção "tagsonly", as marcações especificadas serão
as únicas incluídas. As marcações devem estar na forma <aaa>, mas você pode juntar algumas
(<bbb><aaa>) para informar que o conteúdo da tag <aaa> será traduzido apenas quando ela estiver
dentro de uma marcação <bbb>.
Você também pode especificar algumas opções de marcação para colocar alguns caracteres na frente da
hierarquia de marcações. Por exemplo, você pode colocar um "w" (wrap) ou "W" (não aplica wrap) para
sobrescrever o comportamento padrão especificado pela opção global "wrap".
Exemplo: W<capítulo><título>
attributes
Lista separada por espaço de atributos da marcação que você deseja traduzir. Você pode especificar os
atributos por seus nomes (por exemplo, "lang"), mas você pode prefixar com uma hierarquia de
marcações, para especificar que esse atributo vai ser traduzido apenas quando ele estiver na marcação
especificada. Por exemplo: <bbb><aaa>lang especifica que o atributo lang será traduzido apenas se ele
estiver dentro de uma marcação <aaa> e dentro de uma marcação <bbb>.
foldattributes
Não traduz atributos nas marcações integradas. Ao invés disso, substitui todos os atributos de uma
marcação por po4a-id=<id>.
Isso é útil quando os atributos não devam ser traduzidos, pois isso simplifica as strings para
tradutores e evita erros de escrita.
customtag
Lista separada por espaço de marcações que não deveriam ser tratadas como marcações. Essas marcações
são tratadas como integradas e não precisam ser fechadas.
break
Lista separada por espaço de marcações que deveriam interromper a sequência. Por padrão, todas as
marcações interrompem a sequência.
As marcações estar na forma <aaa>, mas você pode juntar alguns (<bbb><aaa>), se uma marcação (<aaa>)
deveria ser considerada apenas quando ela estiver dentro de outra marcação (<bbb>).
Note que uma tag deve ser listada em apenas uma string de configuração de break, inline placeholder
ou customtag.
inline
Lista separada por espaço de marcações que deveriam ser tratadas como integradas. Por padrão, todas
as marcações interrompem a sequência.
As marcações estar na forma <aaa>, mas você pode juntar alguns (<bbb><aaa>), se uma marcação (<aaa>)
deveria ser considerada apenas quando ela estiver dentro de outra marcação (<bbb>).
placeholder
Lista separada por espaço de marcações que devem ser tratadas como placeholders. Elas não interrompem
a sequência, mas o conteúdo desses placeholders é traduzido separadamente.
A localização do placeholder em seu bloco será marcado com uma string similar a:
<placeholder type=\"footnote\" id=\"0\"/>
As marcações estar na forma <aaa>, mas você pode juntar alguns (<bbb><aaa>), se uma marcação (<aaa>)
deveria ser considerada apenas quando ela estiver dentro de outra marcação (<bbb>).
nodefault
Lista separada por espaço de marcações que o módulo não deveria tentar definir por padrão em qualquer
categoria.
Se você tiver uma tag que tenha sua configuração padrão pela subclasse deste módulo, mas desejar
definir uma configuração alternativa, será necessário listar essa tag como parte da string de
configuração nodefault.
cpp Diretivas de suporte do preprocessador C. Quando essa opção está definida, po4a vai considerar as
diretivas do preprocessador como separadores de parágrafo. Isso é importante se o arquivo XML deve
ser preprocessado porque, do contrário, as diretivas podem ser inseridas no meio de linhas se po4a
considerar que elas pertencem ao parágrafo atual, e elas não serão reconhecidas pelo preprocessador.
Nota: as diretivas do preprocessador devem aparecer apenas entre marcações (elas não podem
interromper uma marcação).
translated
Lista separada por espaço de marcações que você deseja traduzir.
As marcações estar na forma <aaa>, mas você pode juntar alguns (<bbb><aaa>), se uma marcação (<aaa>)
deveria ser considerada apenas quando ela estiver dentro de outra marcação (<bbb>).
Você também pode especificar algumas opções de marcação para colocar alguns caracteres na frente da
hierarquia de marcações. Isso sobrescreve o comportamento padrão especificado pelas opções globais
wrap e defaulttranslateoption.
w Tags deveriam ser traduzidas e o conteúdo pode ser redimensionado.
W Tags deveriam ser traduzidas e o conteúdo não deveria ser redimensionado.
i Tags deveriam ser traduzidas integradas.
p Tags deveriam ser traduzidas como placeholders.
Internamente, o analisador XML só se preocupa com essas quatro opções: w W i p.
* Tags listadas em B<break> são definidas para I<w> ou I<W> dependendo da opção <wrap>.
* Tags listadas em B<inline> são definidas para I<i>.
* Tags listadas em B<placeholder> são definidas para I<p>.
* Tags listadas em B<untranslated> não são definidas com nenhuma dessas opções.
Você pode verificar o comportamento real do parâmetro interno invocando po4a com a opção --debug.
Exemplo: W<capítulo><título>
Note que uma tag deve estar listada na string de configuração translated ou untranslated.
untranslated
Lista separada por espaço de marcações que você não deseja traduzir.
As marcações estar na forma <aaa>, mas você pode juntar alguns (<bbb><aaa>), se uma marcação (<aaa>)
deveria ser considerada apenas quando ela estiver dentro de outra marcação (<bbb>).
Note que uma tag inline traduzível em uma 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 padrão para marcações que estão em nenhum entre "translated", "untranslated", "break",
"inline" ou "placeholder".
Este é um conjunto de letras, conforme definido em translated, e essa configuração é válida apenas
para tags traduzíveis.
ESCREVENDO MÓDULOS DERIVADOS
DEFINA QUAIS MARCAÇÕES E ATRIBUTOS DEVEM SER TRADUZIDOS
A personalização mais simples é definir quais marcações e atributos você deseja que o analisador
traduzida. Isso deveria ser feito na função "initialize". Primeiro, você deveria chamar o "initialize"
principal, para obter as opções de linha de comando e, então, anexe suas definições personalizadas aos
hash de opções. Se você deseja tratar algumas novas opções a partir da linha de comando, você deveria
defini-las antes de chamar 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;
Você 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 usuários sobrescrevam
o comportamento padrão definido em seu módulo com opções de linha de comando.
SUBSTITUIÇÃO DO COMPORTAMENTO PADRÃO COM AS OPÇÕES DE LINHA DE COMANDO
Se você não gostar do comportamento padrão deste módulo xml e seus módulos derivados, poderá fornecer
opções de linha de comando para alterar seu comportamento.
Veja Locale::Po4a::Docbook(3pm),
SOBRESCREVENDO A FUNÇÃO found_string
Outro passo simples é sobrescrever a função "found_string", que recebe as strings extraídas do
analisador, para traduzi-las. Lá, você pode controlar quais strings você deseja traduzir e realizar
transformações nelas antes ou após a tradução em si.
Ela recebe o texto extraído, a referência de onde ele estava e um hash que contém informações extras para
controlar quais strings devem ser traduzidas, como traduzi-las e para gerar o comentário.
O conteúdo dessas opções dependem do tipo de string (especificado em uma entrada dessa hash):
type="tag"
A string encontrada é o conteúdo de uma marcação traduzível. A entrada "tag_options" contém os
caracteres da opção na frente da hierarquia de marcação na opção "tags" do módulo.
type="attribute"
Significa que a string encontrada é o valor de um atributo traduzível. A entrada "atributo" possui o
nome do atributo.
Ela deve retornar o texto que vai substituir o original no documento traduzido. Aqui está um exemplo
básico dessa função:
sub found_string {
my ($self,$text,$ref,$options)=@_;
$text = $self->translate($text,$ref,"type ".$options->{'type'},
'wrap'=>$self->{options}{'wrap'});
return $text;
}
Há um outro exemplo simples no novo módulo do Dia, o qual filtra apenas algumas strings.
MODIFICANDO TIPOS DE MARCAÇÕES (A FAZER)
Isso é mais complexo, mas permite quase que uma personalização total. É baseado em uma lista de hashes,
cada um definindo um comportamento do tipo de marcação. A lista deveria ser organizado de forma que a
maioria das marcações gerais estão após aquelas mais concretas (organizadas primeiro pelas chaves
iniciais e, então, pelas finais). Para definir um tipo de marcação, você terá que fazer um hash com as
seguintes chaves:
beginning
Especifica o começo da marcação, após do "<".
end Especifica o fim da marcação, antes do ">".
breaking
Informa se essa é uma classe de interrupção de marcação. Uma marcação de não-interrupção (integrada)
é aquela que pode ser levada como parte do conteúdo de outra marcação. Ela pode levar os valores
falso (0), verdadeiro (1) ou indefinido. Se você deixa-la como indefinida, você terá que definir a
função f_breaking que vai dizer se uma marcação concreta dessa classe é uma marcação de interrupção
ou não.
f_breaking
Essa é uma função que vai dizer se a próxima marcação é uma de interrupção ou não. Ela deveria ser
definida se a opção breaking não estiver.
f_extract
Se você deixar essa chave indefinida, a função de extração genérica terá ela mesma que extrair a
marcação. Isso é útil para marcações que podem ter outras marcações ou estruturas especiais nelas, de
forma que o analisador principal não fique doido. Essa função recebe um booleano que informa se a
marcação deveria, ou não, ser removida do fluxo de entrada.
f_translate
Essa função recebe a marcação (no formato de get_string_until() ) e retorna a marcação traduzida
(atributos traduzidos ou todas as transformações necessárias) como uma string única.
FUNÇÕES INTERNAS usadas para escrever analisadores derivados
TRABALHANDO COM MARCAÇÕES
get_path()
Essa função retorna o caminho da marcação atual da raiz do documento, na forma de <html><body><p>.
Um vetor adicional de marcações (sem sinais de maior que, menor que) podem ser passados como
argumentos. Esses elementos de caminho são adicionados ao final do caminho atual.
tag_type()
Essa função retorna o índice da lista tag_types que ajusta à próxima aba no fluxo de entrada, ou -1
se ela está ao final do arquivo de entrada.
Aqui, a tag tem estrutura iniciada por < e finalizada por > e pode conter várias linhas.
Isso funciona no vetor "@{$self->{TT}{doc_in}}" detendo os dados do documento de entrada e referência
indiretamente via "$self->shiftline()" e "$self->unshiftline($$)".
extract_tag($$)
Essa função retorna a marcação seguinte do fluxo de entrada sem o início e fim, em uma forma de
vetor, para manter a referência do arquivo de entrada. Ela tem dois parâmetros: o tipo da marcação
(como retornada por tag_type) e um booleano, que indica se ela deveria ser removida do fluxo de
entrada.
Isso funciona no vetor "@{$self->{TT}{doc_in}}" detendo os dados do documento de entrada e referência
indiretamente via "$self->shiftline()" e "$self->unshiftline($$)".
get_tag_name(@)
Essa função retorna o nome da marcação passada como um argumento, na forma de vetor retornado por
extract_tag.
breaking_tag()
Essa função retorna um booleano que informa se a próxima marcação no fluxo de entrada é uma marcação
de interrupção ou não (marcação integrada). Ela deixa o fluxo de entrada intacto.
treat_tag()
Essa função traduz a próxima marcação do fluxo de entrada, usando as funções de tradução
personalizada de cada tipo de marcação.
Isso funciona no vetor "@{$self->{TT}{doc_in}}" detendo os dados do documento de entrada e referência
indiretamente via "$self->shiftline()" e "$self->unshiftline($$)".
tag_in_list($@)
Essa função retorna um valor de string que informa se o primeiro argumento (uma hierarquia de
marcações) corresponde a qualquer das marcações do segundo argumento (uma lista de marcações ou
hierarquias de marcações). Se ela não corresponder, retorna 0. Do contrário, retorna as opções da
marcação correspondente (os caracteres na frente da marcação) ou 1 (se aquela marcação não possuir
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 string simples com a marcação traduzida.
TRABALHANDO COM CONTEÚDOS MARCADOS
treat_content()
Essa função obtém o texto até a próxima tag de quebra (não em linha) do fluxo de entrada. Traduza-a
usando as funções de tradução personalizadas de cada tipo de marcação.
Isso funciona no vetor "@{$self->{TT}{doc_in}}" detendo os dados do documento de entrada e referência
indiretamente via "$self->shiftline()" e "$self->unshiftline($$)".
TRABALHANDO COM AS OPÇÕES DO MÓDULO
treat_options()
Essa função preenche as estruturas internal que contém as marcações, atributos e dados integrados com
as opções do módulo (especificado na linha de comando ou na função "inicialize").
OBTENDO TEXTO DO DOCUMENTO DE ENTRADA
get_string_until($%)
Essa função retorna um vetor 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 desabilitado (o
padrão) e 1, habilitado.
As opções válidas são:
include
Isso faz o vetor resultante conter o texto pesquisado
remove
Isso remove o fluxo retornado da entrada
unquoted
Isso garante que o texto pesquisado não está entre aspas
skip_spaces(\@)
Essa função recebe como argumento a referência para um parágrafo (no formato retornado por
get_string_until), ignora seu espaço inicial e retorna-as como uma string simples.
join_lines(@)
Essa função retorna uma string simples com o texto de um vetor de argumentos (descartando as
referências).
ESTADO DESTE MÓDULO
Esse módulo pode traduzir marcações e atributos.
LISTA DE TAREFAS
DOCTYPE (ENTIDADES)
Há um suporte mínimo para a tradução de entidades. Elas são traduzidos como um todo e marcações não são
levadas em conta. Não há suporte a entidades multilinhas, sofrendo elas uma quebra de linha durante a
tradução.
MODIFICAR TIPOS DE MARCAÇÃO DE MÓDULOS HERDADOS (move a estrutura de tag_types para dentro do $self
hash?)
VEJA TAMBÉM
Locale::Po4a::TransTractor(3pm), po4a(7)
AUTORES
Jordi Vilalta <jvprat@gmail.com>
Nicolas François <nicolas.francois@centraliens.net>
COPYRIGHT E LICENÇA
Copyright © 2004 Jordi Vilalta <jvprat@gmail.com>
Copyright © 2008-2009 Nicolas François <nicolas.francois@centraliens.net>
Esse programa é um software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da GPL (veja o
arquivo COPYING).
Ferramentas do Po4a 2020-04-15 Locale::Po4a::Xml(3pm)