LOCALE::PO4A::XML.3PM(1) User Contributed Perl Documentation NOME Locale::Po4a::Xml - converte documentos XML e derivados de/para ficheiros PO DESCRICAO O objetivo do projeto po4a (PO for anything: PO para qualquer coisa) e facilitar traducoes (e o mais interessante, a manutencao das traducoes) a usar as ferramentas do gettext em areas em que nao se esperava, como na documentacao. Locale::Po4a::Xml e um modulo para ajudar a traducao de documentos XML em outros idiomas [humanos]. Tambem pode ser usado como uma base para a construcao de modulos de documentos com base em XML. TRADUZIR COM PO4A::XML Este modulo pode ser usado diretamente para lidar com documentos XML genericos. Isto ira extrair todo o conteudo das etiquetas e, e nenhum atributo, ja que e onde o texto e escrito na maioria dos documentos com base XML. Existem algumas opcoes (descrito na proxima seccao), que podem personalizar este comportamento. Se isto nao se encaixa no seu formato de documento que esta encorajado a escrever o seu proprio modulo derivado deste, para descrever os detalhes do seu formato. Consulte a seccao WRITING DERIVATE MODULES abaixo, para descricao do processo. OPCOES ACEITES POR ESTE MODULO A opcao de depuracao global faz com que este modulo mostre as cadeia excluidas, para ver se ele salta algo importante. Estas sao as opcoes particulares deste modulo: nostrip Impede-o para tirar os espacos em torno das cadeias extraidas. wrap Canoniza a cadeia para traduzir, a considerar que espacos em branco nao sao importantes e dimensiona o documento traduzido. Essa opcao pode ser sobreposta por opcoes personalizadas de marcacao. Veja a opcao translated abaixo. unwrap_attributes Atributos sao envolvidos por predefinicao. Essa opcao desativa o envolucro. caseinsensitive Faz as etiquetas e atributos a procurar trabalhar de forma em maiusculas e minusculas. Se for definido, ele vai tratar laNG e Lang como lang. escapequotes Aspas de escape em cadeias de saida. Necessario, por exemplo, para criacao de recursos de cadeias para usar por ferramentas de compilacao de Android. Veja tambem: https://developer.android.com/guide/topics/resources/string-resource.html includeexternal Quando definido, entidades externas estao incluidas no documento gerado (traduzido) e para a extracao de cadeias. Se nao for definido, vai ter que traduzir entidades externas separadamente como documentos independentes. ontagerror Esta opcao define o comportamento do modulo quando ele encontrar uma sintaxe de XML invalida (uma etiqueta de fecho, que nao coincide com a ultima etiqueta de abertura). Ele pode ter os seguintes valores: fail Este e o valor predefinido. O modulo ira terminar com um erro. warn O modulo ira continuar e emitir um aviso. silent O modulo vai continuar sem emitir nenhuns avisos. Tenha cuidado ao usar esta opcao. Recomenda-se geralmente para corrigir o ficheiro de entrada. tagsonly Nota: Esta opcao esta obsoleta. Extrai apenas as marcacoes especificadas na opcao tags. Caso contrario, ela extraira todas as marcacoes, com excecao daquelas especificadas. doctype A cadeias que vai tentar combinar com a primeira linha do doctype do documento (se definido). Se isso nao acontecer, um aviso indicara que o documento podera ser de um tipo incorreto. addlang A cadeia a indicar o caminho (por exemplo, ) de uma etiqueta onde um atributo lang="..." deve ser adicionado. O idioma sera definido como o nome base do ficheiro PO sem qualquer extensao .po. optionalclosingtag Booleano indicando se as etiquetas de fecho sao opcionais (como em HTML). Por predefinicao, as etiquetas de fecho ausentes geram um erro tratado de acordo com ontagerror. tags Nota: Esta opcao esta obsoleta. Deve usar as opcoes translated e untranslated em vez desta. Lista de etiquetas separadas por espacos que deseja traduzir ou ignorar. Por predefinicao, as etiquetas especificadas serao excluidas, mas se usar a opcao "tagsonly", etiquetas especificadas serao as unicas incluidas. As etiquetas devem estar em forma , mas podem-se juntar a algum () para dizer que o conteudo da etiqueta so sera traduzido quando esta numa etiqueta . Tambem pode especificar algumas opcoes de marcacao para por alguns caracteres na frente da hierarquia de marcacoes. Por exemplo, pode por um w (wrap) ou W (nao aplica wrap) para sobrescrever o comportamento predefinido especificado pela opcao global wrap. Exemplo: W attributes Lista de atributos das etiquetas separadas por espacos 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 so sera traduzido quando esta na etiqueta especificada. Por exemplo:<bbb><aaa>lang especifica que o atributo lang so sera traduzido se for numa etiqueta <aaa> e e numa etiqueta <bbb>. foldattributes Nao traduzir atributos em etiquetas em linha. Vez disso, substitua todos os atributos duma etiqueta por po4a-id=<id>. Isto e util quando atributos nao serao traduzidas, como isso simplifica as cadeias para tradutores e evita erros de digitacao. customtag Lista de etiquetas separadas por espacos que nao deviam ser tratadas como etiquetas. Estas etiquetas sao tradadas com em linha e, nao precisam de ser fechadas. break Lista de etiquetas separadas por espacos que devem quebrar a sequencia. Por predefinicao, todas as etiquetas quebram a sequencia. As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se a etiqueta (<aaa>) so deve ser considerada quando esta em outra etiqueta (<bbb>). Note que uma marcacao deve ser listada em apenas uma cadeia de configuracao de break, inline placeholder ou customtag. inline Lista de etiquetas separadas por espacos que devem ser tratadas como em linha. Por predefinicao todas as etiquetas quebram a sequencia. As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se a etiqueta (<aaa>) so deve ser considerada quando esta em outra etiqueta (<bbb>). placeholder Lista de etiquetas separadas por espacos que devem ser tratadas como espacos reservados. Os espacos reservados nao quebram a sequencia, mas o conteudo dos espacos reservados e traduzido separadamente. A localizacao do espaco reservado no bloco dele sera 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 a etiqueta (<aaa>) so deve ser considerada quando esta em outra etiqueta (<bbb>). break-pi Por predefinicao, as Instrucoes de Processamento (ou seja, tags "<? ... ?>") sao tratadas como tags embutidas. Passe essa opcao se desejar que as I.P. sejam tratadas como tag de quebra. Note que tags PHP nao processadas sao tratadas como Instrucoes de Processamento pelo analisador. nodefault Lista de etiquetas separadas por espacos que o modulo nao deve tentar definir por predefinicao em nenhuma categoria. Se tiver uma marcacao que tenha a configuracao predefinida dela pela subclasse deste modulo, mas desejar definir uma configuracao alternativa, sera necessario listar essa marcacao como parte da cadeia de configuracao nodefault. cpp Diretivas de suporte do pre-processador C. Quando esta opcao esta definida, po4a ira considerar as diretivas de pre-processamento como separadores de paragrafo. Isso e importante se o ficheiro XML tiver de ser processado, porque senao as diretivas podem ser inseridas no meio de linhas se o po4a considerar que pertencem ao paragrafo corrente, que nao sera reconhecido pelo pre-processador. Nota: as diretivas de pre-processamento so devem aparecer entre etiquetas (nao devem quebrar uma etiqueta). translated Listas de etiquetas separadas por espacos que quer traduzir. As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se a etiqueta (<aaa>) so deve ser considerada quando esta em outra etiqueta (<bbb>). Tambem pode especificar algumas opcoes de marcacao para por alguns caracteres na frente da hierarquia de marcacoes. Isso sobrepoe o comportamento predefinido especificado pelas opcoes globais wrap e defaulttranslateoption. w Etiquetas devem ser traduzidas e o conteudo pode ser re-envolvido. W Etiquetas devem ser traduzidas e o conteudo nao deve ser re-envolvido. i As etiquetas devem ser traduzidas em linha. p Etiquetas devem ser traduzidas como marcadores de posicao. Internamente, o analisador XML so se preocupa com essas quatro opcoes: w W i p. * As etiquetas listadas em break sao definidas como w ou W dependendo da opcao wrap. * As etiquetas listadas em inline sao definidas como i. * As etiquetas listadas em placeholder sao definidas como p. * As etiquetas listadas em untranslated nao tem nenhuma dessas opcoes definidas. Pode verificar o comportamento real do parametro interno ao invocar po4a com a opcao --debug. Exemplo: W<chapter><title> Note que uma marcacao deve estar listada na cadeia de configuracao translated ou untranslated. untranslated Listas de etiquetas separadas por espacos que nao quer traduzir. As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se a etiqueta (<aaa>) so deve ser considerada quando esta em outra etiqueta (<bbb>). Note que uma etiqueta em linha traduzivel numa etiqueta nao traduzivel e tratada como uma etiqueta de quebra traduzivel, a configuracao i e descartada e w ou W e definido dependendo da opcao wrap. defaulttranslateoption As categorias predefinidas para etiquetas que nao sao nenhuns de: traduzidos, nao traduzidos, partidos, em linha ou espaco reservado. Este e um conjunto de letras, conforme definido em translated e essa configuracao e valida apenas para etiquetas traduziveis. ESCREVENDO MODULOS DERIVADOS DEFINIR QUE ETIQUETAS E ATRIBUTOS TRADUZIR A mais simples personalizacao e definir quais as etiquetas e atributos mais desejados para o analisador traduzir. Isto deve ser feito na funcao 'initialize'. Primeiro, deve invocar o 'initialize' principal, para obter as opcoes de linha de comando e, em seguida, acrescentar as suas definicoes personalizadas para as opcoes de 'hash'. Se quiser tratar de algumas novas opcoes na 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; Voce deve usar as opcoes _default_inline, _default_break, _default_placeholder, _default_translated, _default_untranslated e _default_attributes nos modulos derivados. Isso permite que utilizadores sobreponham o comportamento predefinido definido no seu modulo com opcoes de linha de comando. SOBREPOR O COMPORTAMENTO PREDEFINIDO COM AS OPCOES DE LINHA DE COMANDO Se nao gostar do comportamento predefinido deste modulo xml e modulos derivados dele, podera fornecer opcoes de linha de comando para alterar o comportamento deles. Veja Locale::Po4a::Docbook(3pm), SOBREPONDO A FUNCAO found_string Outro passo simples e sobrepor a funcao "found_string", que recebe as cadeias extraidas do analisador, a fim de traduzi-las. La pode controlar quais cadeias deseja traduzir e realizar neles as transformacoes antes ou depois da traducao em si. Ele recebe o texto extraido, a referencia de onde ele estava, e um 'hash' que contem informacoes extras para controlar que cadeias a traduzir, como traduzi-las e gerar o comentario. O conteudo dessas opcoes depende do tipo de cadeia e (especificado numa entrada deste 'hash'): type="tag" A cadeia encontrada e o conteudo de uma etiqueta traduzivel. A entrada "tag_options" contem os caracteres de opcao na frente da hierarquia das etiquetas no modulo "tags". type="attribute" Significa que a cadeia encontrada e o valor de um atributo traduzivel. A entrada "attribute" tem o nome do atributo. Ela deve retornar o texto que ira substituir o original no documento traduzido. Aqui esta um exemplo basico desta funcao: sub found_string { my ($self,$text,$ref,$options)=@_; $text = $self->translate($text,$ref,"type ".$options->{'type'}, 'wrap'=>$self->{options}{'wrap'}); return $text; } Aqui esta outro exemplo simples no novo modulo Dia , que so filtra algumas cadeias. MODIFICANDO TIPOS DE ETIQUETAS (A FAZER) Este e mais complexo, mas permite uma personalizacao (quase) total. E 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 estejam antes das mais concretas (ordenadas primeiro no inicio e, depois, pelas chaves de fecho). Para definir um tipo de etiqueta vai ter que fazer um hash com as seguintes chaves: beginning Especifica o principio da etiqueta, depois de "<". end Especifica o fim da etiqueta, depois de ">". breaking Diz que se esta e uma classe de etiquetas quebradas. Uma etiqueta nao-quebrada (inline) e uma que pode ser tomada como parte do conteudo de outra etiqueta. Pode levar o valor falso (0), verdadeiro (1) ou indefinido. Se deixa-lo indefinido, vai ter que definir a funcao f_breaking que vai dizer se uma etiqueta concreta desta classe e uma etiqueta de quebrar ou nao. f_breaking E uma funcao que vai dizer se a proxima etiqueta e uma quebra ou nao. Deve ser definida se a opcao breaking nao e. f_extract Se deixar esta chave indefinida, a funcao de extracao de genericos tera que extrair a propria etiqueta. E util para as etiquetas que podem ter outras etiquetas ou estruturas especiais dentro delas, de modo que o analisador principal nao fique louco. Esta funcao recebe um booleano que diz se a etiqueta deve ser removida do fluxo de entrada ou nao. f_translate Esta funcao recebe a etiqueta (no formato get_string_until()) e retorna a etiqueta traduzida (atributos traduzidos ou todos as necessarias transformacoes) como uma unica cadeia. FUNCOES INTERNAS usadas para escrever analisadores derivados TRABALHANDO COM ETIQUETAS get_path() Esta funcao retorna o caminho para a etiqueta corrente a partir da raiz do documento no formato <html><body><p>. Um conjunto adicional de etiquetas (sem parenteses) pode ser passado como argumento. Estes elementos de caminho sao adicionados ao fim do caminho atual. tag_type() Esta funcao retorna o indice da lista tag_types que cabe na etiqueta seguinte no fluxo de entrada, ou -1, se esta no fim do ficheiro de entrada. Aqui, a marcacao tem estrutura iniciada por < e finalizada por > e pode conter varias linhas. Isso funciona na matriz "@{$self->{TT}{doc_in}}" que detem os dados do documento de entrada e referencia indiretamente via "$self->shiftline()" e "$self->unshiftline($$)". extract_tag($$) Esta funcao retorna a proxima etiqueta do fluxo de entrada sem o inicio e o fim, numa forma de matriz, para manter as referencias do ficheiro de entrada tem dois parametros: 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 na matriz "@{$self->{TT}{doc_in}}" que detem os dados do documento de entrada e referencia indiretamente via "$self->shiftline()" e "$self->unshiftline($$)". get_tag_name(@) Esta funcao retorna o nome da etiqueta passada como um argumento, no formato da matriz retornada por extract_tag. breaking_tag() Esta funcao retorna um booleano que diz que se a proxima etiqueta no fluxo de entrada e uma etiqueta quebrada ou nao (etiqueta inline). Ela deixa o fluxo de entrada intacto. treat_tag() Essa funcao traduz a proxima etiqueta do fluxo de entrada. Usando funcoes de traducao personalizadas em cada tipo de etiqueta. Isso funciona na matriz "@{$self->{TT}{doc_in}}" que detem os dados do documento de entrada e referencia indiretamente via "$self->shiftline()" e "$self->unshiftline($$)". tag_in_list($@) Esta funcao retorna um valor de cadeia que diz 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 nao corresponder, ele retorna 0. Caso contrario, retorna as opcoes de etiqueta correspondentes (os caracteres de frente da etiqueta) ou 1 (se a etiqueta nao tiver opcoes). TRABALHANDO COM ATRIBUTOS treat_attributes(@) Essa funcao manipula a traducao dos atributos das marcacoes. Ela recebe a marcacao sem as marcas de inicio / fim e, entao, ela encontra os atributos e traduz os traduziveis (especificado pela opcao do modulo attributes). Isso retorna uma cadeia simples com a marcacao traduzida. TRABALHANDO COM CONTEUDOS ETIQUETADOS treat_content() Essa funcao obtem o texto ate a proxima marcacao de quebra (nao em linha) do fluxo de entrada. Traduz-a a usar as funcoes de traducao personalizadas de cada tipo de etiqueta. Isso funciona na matriz "@{$self->{TT}{doc_in}}" que detem os dados do documento de entrada e referencia indiretamente via "$self->shiftline()" e "$self->unshiftline($$)". TRABALHANDO COM OPCOES DE MODULOS treat_options() Esta funcao preenche as estruturas internas que contem as etiquetas, atributos e dados em linha com as opcoes do modulo (especificado na linha de comando ou na funcao de inicializacao). OBTER TEXTO A PARTIR DO DOCUMENTO DE ENTRADA get_string_until($%) Esta funcao retorna uma matriz com as linhas (e referencias) do documento de entrada ate encontrar o primeiro argumento. O segundo argumento e um 'hash' de opcoes. Valor 0 significa desativado (a predefinicao) e 1 ativado. As opcoes validas sao: 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 esta fora de qualquer citacao regex Isso indica que o primeiro argumento e uma expressao regular e nao uma cadeia simples skip_spaces(\@) Esta funcao recebe como argumento a referencia a um paragrafo (no formato retornado por get_string_until), ignora os espacos de titulo dele e retorna-os como uma cadeia simples. join_lines(@) Esta funcao retorna uma cadeia simples com o texto do argumento da matriz (descartando as referencias). ESTADO DESTE MODULO Este modulo pode traduzir etiquetas e atributos. LISTA de A FAZER DOCTYPE (ENTIDADES) Ha um suporte minimo para a traducao de entidades. Elas sao traduzida como um todo e as etiquetas nao sao tidas em conta. As entidades multi linhas nao sao suportadas e as entidades sao sempre re-envolvidas durante a traducao. MODIFICAR TIPOS DE ETIQUETAS A PARTIR DE MODULOS HERDADOS (move a estrutura tag_types dentro de hash $self hash?) VEJA TAMBEM Locale::Po4a::TransTractor(3pm), po4a(7) AUTORES Jordi Vilalta <jvprat@gmail.com> Nicolas Francois <nicolas.francois@centraliens.net> DIREITOS DE AUTOR E LICENCA Copyright (C) 2004 Jordi Vilalta <jvprat@gmail.com> Copyright (C) 2008-2009 Nicolas Francois <nicolas.francois@centraliens.net> Este programa e um software livre; pode redistribui-lo e/ou modifica-lo sob os termos da GPL v2.0 ou posterior (veja o ficheiro COPYING). perl v5.42.0 2025-11-22 LOCALE::PO4A::XML.3PM(1)