| LOCALE::PO4A::XML.3PM(1) | User Contributed Perl Documentation | LOCALE::PO4A::XML.3PM(1) |
Locale::Po4a::Xml - converte documentos XML e derivados de/para arquivos PO
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.
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.
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:
Veja também: https://developer.android.com/guide/topics/resources/string-resource.html
Tenha cuidado ao usar essa opção. Ela geralmente é recomendada para corrigir o arquivo de entrada.
Extrai apenas as marcações especificadas na opção tags. Do contrário, ela extrairá todas as marcações, com exceção daquelas especificadas.
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) or W (não aplica wrap) para sobrescrever o comportamento padrão especificado pela opção global wrap.
Exemplo: W<capítulo><título>
Isso é útil quando os atributos não devam ser traduzidos, pois isso simplifica as strings para tradutores e evita erros de escrita.
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.
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>).
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>).
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.
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.
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.
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.
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.
Este é um conjunto de letras, conforme definido em translated, e essa configuração é válida apenas para tags traduzíveis.
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.
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.
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):
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.
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:
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.
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($$)".
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($$)".
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($$)".
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($$)".
As opções válidas são:
Esse módulo pode traduzir marcações e atributos.
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?)
Jordi Vilalta <jvprat@gmail.com> Nicolas François <nicolas.francois@centraliens.net>
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 v2.0 ou posterior (veja o arquivo COPYING).
| 2024-08-06 | perl v5.38.2 |