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 outro idioma [humano]. 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, nao atributos, 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 ignora 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 sobrescrita por opcoes personalizadas de marcacao. Veja a opcao translated abaixo. unwrap_attributes Atributos sao quebrados por predefinicao. Essa opcao desativa a quebra. 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 escapa 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 sair com um erro. warn O modulo continuara e emitira um aviso. silent O modulo vai continuar sem emitir um aviso. 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. Do 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 tags de fechamento sao opcionais (como em HTML). Por padrao, as tags de fechamento ausentes geram um erro tratado de acordo com ontagerror. tags Nota: Esta opcao esta obsoleta. Deve usar as opcoes translated e untranslated em vez. Lista de etiquetas separada 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 numaetiqueta . Tambem pode especificar algumas opcoes de marcacao para por alguns caracteres na frente da hierarquia de marcacoes. Por exemplo, pode por um w (wrap) or W (nao aplica wrap) para sobrescrever o comportamento padrao especificado pela opcao global wrap. Exemplo: W attributes Lista de atributos das etiquetas separada 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 em 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 etiquietas separadas por espacos que nao deviam ser tratadas como etiquetas. Estas etiquetas sao tradadas com em linha e, nao precisam de ser fechadas. break Lisat de etiquetas separada por espacos que devem quebrar a sequencia. Por predefinicao, todas as etiquetas quebrar a sequencia. As etiquetas devem estar na forma <aaa>, mas pode juntar algumas (<bbb><aaa>), se uma etiqueta (<aaa>) so deveria 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 separada por espacos que devem ser tratados 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 uma etiqueta (<aaa>) so deveria 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 uma etiqueta (<aaa>) so deveria ser considerada quando esta em outra etiqueta (<bbb>). break-pi Por padrao, 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 espaco que o modulo nao deve tentar definir por predefinicao em qualquer 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 deve ser processado, porque senao as directivas 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 directivas de pre-processamento so devem aparecer entre etiquetas (que nao deve 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 uma etiqueta (<aaa>) so deveria 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 sobrescreve o comportamento predefinido especificado pelas opcoes globais wrap e defaulttranslateoption. w Etiquetas devem ser traduzidos e o conteudo pode ser re- envolvido. W Etiquetas devem ser traduzidos e o conteudo nao devia ser reenvolvido. i As etiquetas deverao ser traduzidas em linha. p Etiquetas devem ser traduzidos em linha. Internamente, o analisador XML so se preocupa com essas quatro opcoes: w W i p. * As tags listadas em break sao definidas como w ou W dependendo da opcao wrap. * As tags listadas em inline sao definidas como i. * As tags listadas em placeholder sao definidas como p. * As tags listadas em untranslated estao sem nenhuma dessas opcoes definidas. Pode verificar o comportamento real do parametro interno a 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 uma etiqueta (<aaa>) so deveria ser considerada quando esta em outra etiqueta (<bbb>). Note que uma tag inline traduzivel numa tag nao traduzida e tratada como uma tag de quebra traduzivel, a configuracao i e descartada e w ou W e definida 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 tags traduziveis. ESCREVENDO MODULOS DERIVADOS DEFINIR QUE ETIQUETAS E ATRIBUTOS PARA TRADUCAO A mais simples personalizacao e definir quais as etiquetas e atributos mais desejados para o analisador a 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 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 opcoes _default_inline, _default_break, _default_placeholder, _default_translated, _default_untranslated e _default_attributes nos modulos derivados. Isso permite que utilizadores sobrescrevam o comportamento predefinido definido no seu modulo com opcoes de linha de comando. SUBSTITUICAO DO 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), SUBSTITUINDO A FUNCAO found_string Outro passo simples e substituir 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 o que cadeias a traduzir, como traduzi-las e gerar o comentario. O conteudo dessas opcoes depende do tipo de cadeia e (especificado numa entrada do 'hash'): type="tag" A cadeia encontrada e o conteudo de uma etiqueta traduzivel. A entrada "tag_options" contem os carateres de opcao na frente da hierarquia das etiquetas na opcao do modulo "tags". type="attribute" Significa que as cadeias encontradas 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 estao 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 Especifice o principio da etiqueta, depois de "<". end Especifice o fim da etiqueta, depois de ">". breaking Ele 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. Ele deve ser definido se a opcao breaking nao e. f_extract Se deixar esta chave indefinida, a funcao de extracao de genericos tera que extrair a etiqueta propria. E util para as etiquetas que podem ter outras etiquetas ou estruturas especiais dentro deles, de modo que o analisador principal nao fica 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 sequencia. 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 na forma <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 da corrente. tag_type() Esta funcao retorna o indice da lista tag_types que cabe na etiqueta seguinte no fluxo de entrada, ou -1, se e no fim do ficheiro de entrada. Aqui, a marcacao tem estrutura iniciada por < e finalizada por > e pode conter varias linhas. Isso funciona no vetor "@{$self->{TT}{doc_in}}" a deter 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 no vetor "@{$self->{TT}{doc_in}}" a deter 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 formulario 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). Ele deixa o fluxo de entrada intacto. treat_tag() Essa funcao converte a proxima etiqueta a partir do fluxo de entrada. Usando em cada etiqueta tipos personalizados de funcoes de traducao. Isso funciona no vetor "@{$self->{TT}{doc_in}}" a deter 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 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 nao corresponder, ele retorna 0. Caso contrario, retorna as opcoes de etiqueta correspondentes (os carateres de frente da etiqueta) ou 1 (se a etiqueta nao tem 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 MARCADOS treat_content() Essa funcao obtem o texto ate a proxima marcacao de quebra (nao em linha) do fluxo de entrada. Traduza-a a usar as funcoes de traducao personalizadas de cada tipo de marcacao. Isso funciona no vetor "@{$self->{TT}{doc_in}}" a deter 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). OBTENCAO DE 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 sequencia simples. join_lines(@) Esta funcao retorna uma cadeia simples com o texto do argumento da matriz (a descartar as referencias). ESTADO DESTE MODULO Este modulo pode traduzir etiquetas e atributos. LISTA PARAFAZER DOCTYPE (ENTITIES) 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 suportados 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?) VER 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> 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-06-26 LOCALE::PO4A::XML.3PM(1)