O programa po4a é útil se você quiser evitar a chamada po4a-gettextize(1), po4a-updatepo(1), e po4a-translate(1) no complexo Makefiles quando você tem vários ficheiros para traduzir, de formato diferente, ou a necessidade de especificar diferentes opções para diferentes documentos.
Especificando o caminho para entradas do tradutor
Deteção automática dos caminhos e linguagens
Especificando os documentos para traduzir
Especificar opções para os módulos
Especificando aliases
Ele também permite que você misture os documentos tendo formatos diferentes no mesmo ficheiro POT para que possa ter apenas um ficheiro por projeto.
Este comportamento pode ser imitado por outras ferramentas da suite po4a (por exemplo com Makefiles), mas é um pouco difícil de fazer, e cansativo refazer o mesmo complicado Makefiles para cada projeto usando po4a.
O fluxo de dados pode ser resumido como a seguir. Quaisquer alterações ao documento principal será refletida nos ficheiros PO, e todas as alterações aos ficheiros PO (manual ou causada por etapa anterior) será refletido nos documentos de tradução.
documento principal --> ficheiros PO --> traducões
O fluxo de dados não pode ser invertido nes ferramenta, e as mudanças nas traduções são substituídas pelo conteúdo dos ficheiros PO. Por uma questão de facto, esta ferramenta não pode ser usada para converter as traduções existentes para o sistema po4a. Para essa tarefa, por favor consulte po4a-gettextize(1).
Comentários nestes ficheiros são anotados pelo caratere '#'. Comenta tudo até ao fim da linha. As linhas podem ser continuadas por escapar do fim da linha. Todas as linhas não em branco devem começar com um comando [], seguido pelos seus argumentos. (parece difícil dizer desta maneira, mas é bastante fácil, espero ;)
Este é um comando opcional que pode simplificar todo o ficheiro de configuração, e irá torná-lo mais escalável. Você tem que especificar uma lista das línguas em que deseja traduzir os documentos. Isto é tão simples como:
[po4a_langs] fr de
Isto irá permitir-lhe expandir $lang para todos os idiomas especificados no resto do ficheiro de configuração.
Primeiro, você tem que especificar onde os ficheiros de entrada do tradutor (ou seja, os ficheiros utilizado pelos tradutores para fazer o seu trabalho) estão localizados. Isso pode ser feito por uma tal linha:
[po4a_paths] doc/l10n/project.doc.pot \ fr:doc/l10n/fr.po de:doc/l10n/de.po
O comando é portanto [po4a_paths]. O primeiro argumento é o caminho para o ficheiro POT a usar. Todos os argumentos subsequentes são em forma auto-explicativa:
<lang>:<caminho para o ficheiro PO para este idioma>
Se você definiu as línguas de modelo, pode reescrever a linha acima desta forma:
[po4a_paths] doc/l10n/project.doc.pot $lang:doc/l10n/$lang.po
You can also use $master to refer to the document filename. In this case, po4a will use a split mode: one POT and one PO (for each language) will be created for each document specified in the po4a configuration file. See the Split mode section.
[po4a_paths] doc/$master/$master.pot $lang:doc/$master/$lang.po
Este comando não deve ser usado em conjunto com os comandos [po4a_langs] ou [po4a_paths].
Ao usar este comando, você tem que criar um ficheiro POT vazio na primeira invocação de po4a para deixá-lo saber o nome do ficheiro POT.
[po_directory] po4a/po/
[type: sgml] doc/my_stuff.sgml fr:doc/fr/mon_truc.sgml \ de:doc/de/mein_kram.sgml [type: pod] script fr:doc/fr/script.1 de:doc/de/script.1 \ add_fr:doc/l10n/script.fr.add
Isto deve ser também bastante auto-explicativo. Note-se que, no segundo caso, doc/l10n/script.fr.add é uma adenda para adicionar à versão francesa deste documento. Por favor, consulte po4a(7) para obter mais informações sobre adendas.
Mais formalmente, o formato é:
[type: <format>] <master_doc> (<lang>:<localized_doc>)* \ (add_<lang>:<modifier>*<addendum_path>)*
Se não houver um modificador, addendum_path é um caminho para uma adenda. Modificadores são
Se você definiu as línguas de modelo, pode reescrever a linha acima desta forma:
[type: pod] script $lang:doc/$lang/script.1 \ add_fr:doc/l10n/script.fr.add
Se todos os idiomas tinham adendas com caminhos semelhantes, você também pode escrever algo como:
[type: pod] script $lang:doc/$lang/script.1 \ add_$lang:doc/l10n/script.$lang.add
Se você precisa de uma opção específica para um documento que deseja traduzir, também pode especificá-lo no ficheiro de configuração. Opções são introduzidas pala palavra-chave opt. O argumento da palavra-chave opt deve ser citado com aspas duplas se contém um espaço (por exemplo, se você especificar várias opções, ou uma opção com um argumento). Pode também especificar opções que só aplica a um idioma específico, usando a palavra-chave opt_lang.
Aqui está um exemplo:
[type:man] data-05/test2_man.1 $lang:tmp/test2_man.$lang.1 \
opt:``-k 75'' opt_it:``-L UTF-8'' opt_fr:-v
Argumentos podem conter espaços, se você usar aspas simples ou aspas
duplas:
[po4a_alias:man] man opt:``-o \''mdoc=NAME,SEE ALSO\`` -k 20''
Se você quer especificar as mesmas opções para muitos documentos, pode querer usar um alias (consulte a secção abaixo Specifying aliases).
Você também pode definir opções para todos os documentos especificados no
ficheiro de configuração:
[options] opt: ``...''opt_fr: ``...''
[po4a_alias:test] man opt:"-k 21" opt_es:"-o debug=splitargs"
Isto define um módulo alias denominado test, com base no módulo man, com o -k 21 aplicado a todas as línguas e com -o debug=splitargsaplicada à tradução espanhola.
Este módulo alias pode ser usar como um módulo normal:
[type:test] data-05/test2_man.1 $lang:tmp/test2_man.$lang.1 \ opt_it:"-L UTF-8" opt_fr:-v
Note que pode especificar opções adicionais num ficheiro por base.
Quando o modo de divisão é usado, um temporário e grande POT e um grande POs são utilizados. Isto permite compartilhar as traduções entre todos POs.
Se dois POs tiverem traduções diferentes para a mesma sequência, po4a irá marcar essa sequência como imprecisa e apresentará duas traduções em todos os POs que contêm essa sequência. Então, quando um tradutor atualiza a tradução e remove o comando impreciso num PO, a tradução dessa sequência será atualizada automaticamente em cada POs.
If there are name conflicts because several files have the same filename, the name of the master file can be specified by adding a "master:file="name option:
[po4a_langs] de fr ja [po4a_paths] l10n/po/$master.pot $lang:l10n/po/$master.$lang.po [type: xml] foo/gui.xml $lang:foo/gui.$lang.xml master:file=foo-gui [type: xml] bar/gui.xml $lang:bar/gui.$lang.xml master:file=bar-gui
O comportamento padrão (quando --force não é especificado) é o seguinte:
Além disso, uma tradução é regenerada somente se o seu documento mestre, o ficheiro PO, uma das suas adendas ou o ficheiro de configuração é mais recente. Para evitar tentar regenerar traduções que não passam no teste de limite (ver --keep), um ficheiro com a extensão .po4a-stamp pode ser criado (ver --stamp).
Se um documento mestre inclui ficheiros, você deve usar a flag --force porque o tempo de modificação dos ficheiros incluídos não são tomados emconta.
Os ficheiros PO são sempre regenerados com base em POT com msgmerge -U.
Nota: Isso só ativa a criação dos ficheiros .po4a-stamp. Os ficheiros de informação são sempre utilizados se existirem, e são removidos com --rm-translations ou quando o ficheiro é finalmente traduzido.
O argumento pode ser seguido por uma vírgula ou pela palavra-chave wrap ou nowrap. Referências são escritas por padrão em uma única linha. A opção wrap envolve referências sobre várias linhas, para imitar as ferramentas gettext (xgettext e msgmerge). Esta opção irá tornar-se o padrão num lançamento futuro, porque é mais sensível. A opção nowrap é acessível para os utilizadores que querem manter o comportamento antigo.
Nota: $lang será estendida para o idioma atual.
Então para o nosso caso chamaríamos
cd man && po4a-gettextize -f man -m foo.1 -p foo.pot
Você teria então que enviar este ficheiro para as listas de idiomas adequadas ou oferecê-lo para descarregar em algum lugar do seu site.
Agora, vamos supor que você recebeu três traduções antes do seu próximo lançamento: de.po (incluindo uma adenda de.add), sv.po e pt.po. Desde que não queira mudar o seu Makefile(s) sempre que uma nova tradução chega, pode usar po4a com um ficheiro de configuração apropriado no seu Makefile. Vamos chamá-lo po4a.cfg. No nosso exemplo seria algo como o seguinte:
[po_directory] man/po4a/po/ [type: man] man/foo.1 $lang:man/translated/$lang/foo.1 \ add_$lang:?man/po4a/add_$lang/$lang.add opt:"-k 80"
Neste exemplo, vamos supor que suas páginas de manual geradas (e todos ficheiros PO e adendas) devem ser armazenadas em man/translated/$lang/ (respectivamente em man/po4a/po/ e man/po4a/add_$lang/) abaixo do diretório atual. No nosso exemplo o diretório man/po4a/po/ incluiria de.po, pt.po e sv.po, e o diretório man/po4a/add_de/ incluiria F <de.add>.
Observe o uso do modificador ? apenas como a tradução alemã (de.po) é acompanhado por uma adenda.
Para realmente construir as páginas do manual traduzidas você então (uma vez!) adiciona a seguinte linha no ponto build do Makefile apropriado:
po4a po4a.cfg
Uma vez que isso é configurado você não precisa de tocar em Makefile quando uma nova tradução chega, ou seja, se a equipa francesa lhe envia fr.po e fr.add, então você simplesmente larga-os em man/po4a/po/ e F <man/po4a/add_fr/> respectivamente e da próxima vez o programa é construido, a tradução francesa é construida automaticamente em man/translated/fr/.
Note que você ainda precisa de um destino apropriado para instalar páginas do manual localizadas em Inglês.
Finalmente, se você não armazenar ficheiros gerados no seu sistema de controlo de versão,
vai precisar de uma linha no seu ponto clean bem como:
-rm -rf man/translated
Denis Barbier <barbier@linuxfr.org> Nicolas François <nicolas.francois@centraliens.net> Martin Quinson (mquinson#debian.org)
Este programa é software livre, você pode redistribuí-lo e/ou modificá-lo sob os termos da GPL (consulte o ficheiro CÓPIA).