Scroll to navigation

PO4A-GETTEXTIZE(1p) Ferramentas Po4a PO4A-GETTEXTIZE(1p)

NOME

po4a-gettextize - converte um ficheiro original (e a tradução dele) para um ficheiro PO

SINOPSE

po4a-gettextize -f fmt -m master.doc [-l XX.doc] -p XX.po

(XX.po é a saída, todos os outros são entradas)

DESCRIÇÃO

po4a (PO for anything) facilita a manutenção de tradução da documentação a usar as ferramentas clássicas do gettext. A característica principal do po4a é que ele dissocia a tradução do conteúdo da estrutura documental. Consulte a página po4a(7) para uma introdução suave a este projeto.

O script po4a-gettextize é responsável pela conversão de ficheiros de documentação em ficheiros PO. Só precisa dele para configurar o seu projeto de tradução com o po4a, nunca depois.

Se começar do zero, po4a-gettextize extrairá as cadeias traduzíveis da documentação e gravará um ficheiro POT. Se fornecer um ficheiro traduzido existente anteriormente com o sinalizador -l, po4a-gettextize tentará usar as traduções que ele contém no ficheiro PO produzido. Esse processo permanece tedioso e manual, conforme explicado na Secção "Converter uma tradução manual em po4a" abaixo.

Se o documento principal tiver caracteres não ASCII, o novo ficheiro PO gerado estará em UTF-8. Caso contrário (se o documento principal estiver completamente em ASCII), o PO gerado utilizará a codificação do documento de entrada traduzido, ou UTF-8 se não for fornecido nenhum documento traduzido.

OPÇÕES

O formato da documentação que pretende processar. Use a opção --help-format para ver a lista de formatos disponíveis.
Ficheiro que contem o documento principal para traduzir. Pode usar esta opção várias vezes se quiser 'gettextize' vários documentos.
Conjunto de carateres do ficheiro que contém o documento a traduzir.
Ficheiro que contem o documento localizado (traduzido). Se forneceu ficheiros mestres múltiplos, pode fornecer múltiplos ficheiros localizados a usar esta opção mais de uma vez.
Conjunto de carateres do ficheiro que contém o documento localizado.
Ficheiro onde o catálogo de mensagens deve ser escrito. Se não for dado, a mensagem catálogo será escrito na saída predefinido.
Opção/ções adicional/ais para passar ao plugin de formato. Veja a documentação de cada plugin para mais informações sobre as opções válidas e os significados deles. Por exemplo, poderia passar '-o tablecells' para o analisador AsciiDoc, enquanto o analisador de texto aceitaria '-o tabs=split'.
Mostrar uma pequena mensagem de ajuda.
Lista os formatos de documentação compreendidos por po4a.

= item -k --keep-temps

Keep the temporary master and localized POT files built before merging. This can be useful to understand why these files get desynchronized, leading to gettextization problems

Mostrar a versão do script e sair.
Aumentar o detalhe do programa.
Saída de alguma informação de depuração.
Definir o endereço do relatório para msgid bugs. Por predefinição, os ficheiros POT criados não têm campos Report-Msgid-bugs-To.
Definir o titular dos direitos de autor no cabeçalho POT. O valor predefinido é " Free Software Foundation, Inc."
Definir o nome do pacote para o cabeçalho POT. A predefinição é "PACKAGE".
Definir o nome do pacote para o cabeçalho POT. A predefinição é "VERSION".

Converter a tradução manual para po4a

po4a-gettextize tentará extrair o conteúdo de qualquer ficheiro de tradução fornecido e utilizará esse conteúdo como msgstr no ficheiro PO produzido. Este processo é muito frágil: a N-ésima cadeia do ficheiro traduzido deve ser a tradução da N-ésima cadeia no original. Isto naturalmente não vai funcionar a menos que ambos os ficheiros compartilhem a mesma estrutura.

Internamente, cada analisador po4a reporta o tipo sintático de cada cadeia extraída. Esta é a forma como a dessincronização é detetada durante a gettext-ização. Por exemplo, se os ficheiros têm a seguinte estrutura, é muito improvável que a 4ª cadeia na tradução (do tipo 'capítulo') seja a tradução da 4ª cadeia no original (do tipo 'parágrafo'). É provável que um novo parágrafo tenha sido adicionado ao original ou que dois parágrafos originais tenham sido fundidos na tradução.

    Original          Tradução
  capítulo            capítulo
    parágrafo           parágrafo
    parágrafo           parágrafo
    parágrafo         capítulo
  capítulo              parágrafo
    parágrafo           parágrafo

po4a-gettextize diagnosticará verbalmente qualquer dessincronização de estrutura detectada. Quando isso acontece, deve editar os ficheiros manualmente (isso provavelmente requer que tenha algumas noções do idioma de destino). Deve adicionar parágrafos falsos ou remover algum conteúdo de um dos documentos (ou ambos) para corrigir as disparidades relatadas, até que a estrutura dos dois documentos corresponda perfeitamente. Alguns truques são dados na próxima secção.

Mesmo quando o documento é processado com sucesso, disparidades não detetadas e erros silenciosos ainda são possíveis. É por isso que qualquer tradução associada automaticamente pelo po4a-gettextize é marcada como fuzzy para exigir uma inspeção manual por seres humanos. É preciso verificar se cada msgstr recuperado é realmente a tradução do msgid associado e não a cadeia antes ou depois.

Como pode ver, a chave aqui é de ter exatamente a mesma estrutura no documento traduzido e no original. O melhor é fazer a gettextização na versão exata de master.doc que foi usada para a tradução e atualizar o ficheiro PO somente no ficheiro mestre mais recente depois que a gettextização tiver êxito.

Se tiver a sorte de ter uma correspondência perfeita nas estruturas do ficheiro, construir um ficheiro PO correto é uma questão de segundos. Caso contrário, logo entenderá porque este processo tem um nome tão feio :) Mas lembre-se que este trabalho grunhido é o preço a pagar para ter o conforto de po4a depois. Uma vez convertido, a sincronização entre os documentos mestres e as traduções será sempre totalmente automática.

Mesmo quando as coisas correm mal, a gettext-ização permanece muitas vezes mais rápida do que a tradução de tudo de novo. Consegui fazer a gettext-ização da tradução francesa existente de toda a documentação Perl num dia, embora a estrutura de muitos documentos tenha sido dessincronizada. Foram mais que dois megabytes de texto original (2 milhões de caracteres): reiniciar a tradução a partir do zero teria exigido vários meses de trabalho.

Dicas e truques para o processo de gettextização

A gettextização acaba assim que uma dessincronização é detetada. Em teoria, provavelmente seria possível ressincronizar a gettextização posteriormente nos documentos a usar, por exemplo, o mesmo algoritmo que o utilitário diff(1). Mas uma intervenção manual ainda seria obrigatória para corresponder aos elementos manualmente que não puderam ser correspondidos automaticamente, a explicar por que a ressincronização automática ainda não foi implementada (ainda?).

Quando isso acontece, tudo se resume novamente ao alinhamento das malditas estruturas desses ficheiros através de edições manuais. po4a-gettextize é bastante verboso sobre o que deu errado quando isso acontece. Ele relata as cadeias que não correspondem, as posições delas no texto e o tipo de cada uma delas. Além disso, o ficheiro PO gerado até o momento é descartado como gettextization.failed.po para uma inspeção posterior.

Aqui estão alguns outros truques para ajudar-lo neste processo tedioso:

  • Remova todo o conteúdo adicional das traduções, como a secção que dá méritos aos tradutores. Pode adicioná-lo novamente no po4a posteriormente, a usar um adendo (consulte po4a(7)).
  • Se precisar de editar os ficheiros para alinhar as estruturas deles, deve preferir editar a tradução, se possível. De fato, se as alterações no original forem muito intrusivas, a versão antiga e nova não corresponderão durante a atualização do pedido e a tradução correspondente será despejada de qualquer maneira. Mas não hesite em editar também o documento original, se for necessário: o importante é obter um primeiro ficheiro PO para começar.
  • Não hesite em eliminar qualquer conteúdo original que não exista na versão traduzida. Este conteúdo será reintroduzido automaticamente posteriormente, ao sincronizar o ficheiro PO com o documento.
  • Provavelmente deve informar o autor original de qualquer mudança estrutural na tradução que pareça justificada. Questões no documento original devem ser relatadas ao autor. Fixá-los na sua tradução apenas os corrige para uma parte da comunidade. Além disso, é impossível fazê-lo quando se utiliza o po4a ;)
  • Algumas vezes, o conteúdo do parágrafo não corresponde, mas tipos deles não. Corrigir isso é até dependente do formato. No POD e man, frequentemente vem do fato que um deles contém uma linha a começar com espaço em branco, mas a outra não. Naqueles formatos tal parágrafo não pode ser dimensionado e, então, se torna um tipo diferente. Basta remover o espaço e está terminado. Pode ser um erro de escrita no nome da marcação em XML.

    Da mesma forma, dois parágrafos podem ser mesclados num POD quando a linha separadora contém alguns espaços ou quando não há linha vazia entre a linha =item e o conteúdo do item.

  • Às vezes a mensagem de dessincronização parece estranha porque a tradução está anexada ao parágrafo original errado. É o sinal de um problema não detetado no início do processo. Procure o ponto real de dessincronização a inspecionar gettextization.failed.po e conserte o problema onde ele realmente está.
  • In some case, po4a adds a space at the end of either the original or the translated strings. This is because every string must be deduplicated during the gettextize process. Imagine that a string appearing several times unmodified in the original, but is translated in differing way, or that different paragraphs are translated in the exact same way.

    Without deduplication, such case would break the gettexization algorithm, as it is a simple one to one pairing between the msgids of both the master and the localized files. Since one of the PO files would miss an entry (that would be reported as duplicate, with two references), the pairing would fail.

    Since po4a uses the entry type ("title" or "plain paragraph", etc) to detect whether the parsing streams got desynchronized, similar issues could occur if two identical entries (same content but differing type) of the master file are translated in the exact same way in the localized file. po4a would detect a fake desyncronization in such case.

    In most cases, the extra space added by po4a to deduplicate the strings has no impact on the formatting. Strings are fuzzied anyway, and msgmerge will probably match the strings accordingly afterward.

  • Como nota final, não se surpreenda se a primeira sincronização do seu ficheiro PO demorar muito tempo. Isso acontece porque a maioria do msgid do ficheiro PO resultante da gettextização não corresponde exatamente a nenhum elemento do ficheiro POT criado dos ficheiros mestre recentes. Isso força o gettext a procurar o mais próximo a usar um algoritmo de proximidade de cadeias caro.

    Por exemplo, o primeiro po4a-updatepo da tradução em francês da documentação do Perl (ficheiro PO de 5.5 MB) levou cerca de 48 horas (sim, dois dias), enquanto os subsequentes demoram apenas uma dúzia de segundos.

VER TAMBÉM

po4a(1), po4a-normalize(1), po4a-translate(1), po4a-updatepo(1), po4a(7).

AUTORES

 Denis Barbier <barbier@linuxfr.org>
 Nicolas Francois <nicolas.francois@centraliens.net>
 Martin Quinson (mquinson#debian.org)

DIREITOS DE AUTOR E LICENÇA

Direitos de Autor 2002-2020 por SPI, inc.

Este programa é software livre, pode redistribuí-lo e/ou modificá-lo sob os termos da GPL (consulte o ficheiro CÓPIA).

2022-07-15 Ferramentas Po4a