Arquivos históricos do BR-Linux.org apresenta:

Traduzindo softwares como o Mozilla

Caio Begotti (entercaio@uol.com.br) nos enviou este tutorial mostrando como você pode fazer parte do time de tradutores de vários projetos que usam os arquivos DTD e POT como o Mozilla. Vale a pena ler mesmo que você não tenha interesse em participar efetivamente. É interessante entender como funciona este trabalho. Um excelente tutorial com até FAQ no final. Confiram!!!

Mozilla em Klingon, Sindarin e até em Português

Por Caio Begotti - entercaio@uol.com.br

Todo mundo que já tenha tido algum contato com grandes projetos de Software Livre sabe que a localização e internacionalização de programas é de fato importante e até essencial, em especial em lugares como a França e Itália; onde se praticamente não usa softwares que não estejam traduzidos ou pelo menos sejam traduzíveis. O projeto Mozilla possui um ótimo time L10N, porém, a ferramenta que atualmente todos usam não é muito produtiva nem
útil par a se criar um método mais colaborativo acerca das traduções.

Caso você queira traduzir alguma parte da suíte Seamonkey, suponhamos o componente ChatZilla, você precisa fazer o download da última versão do Mozilla Translator (datada de 2002), instalar o kit de desenvolvimento Java (SDK), estudar e fuçar sobre como o MT funciona e aí sim começar a traduzir. Nesse caso, a curva de aprendizado do MT é absurda demais ao ponto de pedirmos pra qualquer um ir lá e aprender a usá-lo. Entretanto, caso aprenda a usar, você não irá conseguir facilmente, por exemplo, mesclar dois pacotes de traduções no MT, o que torna as coisas difíceis, pois somente uma pessoa poderá trabalhar na tradução diretamente. Pelo menos foi isso que nós do Mozilla Brasil notamos.

Alguns projetos fantásticos como o KDE e GNOME usam por padrão o format POT para traduzir seus arquivos de interface e programas, e assim fazem um trabalho simples e rápido. Então, o que você acharia de usar algo similar pra traduzir o T-Rex? Você até poderia usar o Kbabel ou alguma outra ferramenta popular para traduzir os arquivos DTD do Mozilla. Ops, espere, um arquivo DTD não é um POT! Antes de mais nada precisamos tentar entender
os termos usados:

- Arquivos POT são arquivos com os textos e mensagens originais de um determinado programa mais os mesmos campos duplicados (respectivamente, msgid e msgstr), em branco, para que uma tradução possa ser feita. POT signifca Portable Object Template, ou em português, Modelo de Objeto Portável e é através dele que a tradução começa. Quase todos os Softwares Livres decentes possuem suporte a gnu/gettext, que é a biblioteca que dá os arquivos POT como frutos.

- Arquivos DTD significam Document Type Definition, ou Definição de Tipo de Documento e os arquivos do Mozilla usam esse tipo de mecanismo pra armazenar textos e mensagens da interface. Se você abrir algum DTD do Mozilla você poderá ver um monte de sentenças !ENTITY.

Os problemas ao lidar com esse tipo de coisa podem acabar usando o Translate. O kit Translate é o novo mozpotools, um conjunto de scripts, GPL, feitos em Python, que são usados pra se converter arquivos DTD para o formato POT e que também faz a operação inversa. Na verdade o kit converte os arquivos para outros PO, porém não existe uma grande diferença entre arquivos .pot e .po.

Atualmente o kit de scripts Translate pode ser encontrado no SourceForge e você só precisa ter uma versão recente do Python (a 2.3 está ok, mas tenha também o pacote de desenvolvimento respectivo). Para finalmente testar os scripts, você precisará baixá-los via CVS (uma versão 0.4 empacotada está para sair, contudo, você pode criar seu próprio pacote através do script setup.py, detalhado mais abaixo):

bash$ cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/translate login
bash$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/translate co src

Basta pressionar ENTER quando perguntado sobre a senha a ser usada. Após isso você terá um diretório /src, e entrando dentro dele você irá ver o script setup.py. Para ver todas as opções dele, use:

bash$ ./setup.py --help-commands

Dê uma olhada nas opções build e install. Você precisa usá-las para poder ter os scripts e arquivos instalados e fáceis de usar. Caso queira de antemão saber o que significa cada opção do setup.py, pule até o fim deste documento:

bash$ ./setup.py build ; ./setup.py install

Agora você já tem os executáveis moz2po e po2moz dentro do seu diretório /usr/bin e alguns arquivos auxiliares dentro de /usr/lib/python2.3/site-packages/translate/. Vamos testar logo! Eu sugiro que você crie um diretório separado para isso, mas também copie o diretório en-US da sua distribuição do Mozilla. Esse diretório en-US será usado como guia pelo script para converter os arquivos DTD originais. Eu estou assumindo que você irá traduzir o Mozilla para português, mas no exemplo abaixo você poderia usar qualquer código de língua.

bash$ mkdir pt-BR ; cp -R /home/voce/mozilla-1.6/chrome/en-US/ .

Note que eu peguei o diretório en-US de dentro de um pacote pronto, como o mozilla-1.6-xft-gtk2-pc-linux.tar.bz2. De qualquer maneira, poderia pegar ele de dentro do arquivo en-US.jar, que fica no seu chrome; ele é um arquivo ZIP comum, basta renomear para .zip e extrair seu conteúdo, ou mesmo abrir pelo Konqueror, que tem suporte nativo à arquivos ZIP. Você poderia inclusive pegar esse diretório en-US de qualquer projeto mozilla, suponhamos da extensão Checky, encontrada no MozDev.

Agora está na hora de finalmente converter os arquivos DTD de dentro do diretório en-US, para o formato PO, que serão armazenados então no diretório criado pt-BR. Mais uma vez, você pode ler uma descrição de cada opção do script no fim deste documento, mas vamos logo com isso, usando uma barra de progresso mais detalhista:

bash$ moz2po --progress=verbose -i en-US/ -o pt-BR/

Agora você já tem o diretório pt-BR repleto de arquivos .po convertidos dos respectivos .dtd e também dos arquivos .properties! Se você checar alguns deles você irá encontrar trechos como esse:

#: windowtitle.label
msgid "About Popups"
msgstr ""

Você só precisa abrir tais arquivos em algum decente editor de traduções como o Kbabel ou mesmo no GNU/Emacs no modo PO - na verdade, você poderia até mesmo usar o VI. Caso não saiba traduzir um arquivo .po, dê uma passada no site do TLDP ou na área de desenvolvedores do KDE, uma vez que esse documento não explica como usar o Kbabel ou mesmo editar diretamente os arquivos .po. Mas não esquente, esse jeito é muito mais fácil do que usar o Mozilla Translator. Veja uma lista de links interessantes sobre esse assunto no fim do documento.

Beleza, você é uma pessoa esperta e distribuiu alguns arquivos .po para um certo grupo de pessoas, assim eles poderão traduzir tudo e depois enviar de volta para você já tudo ok e traduzido para o português (nesse caso, como dito anteriormente). Você agora precisa fazer a operação inversa, convertendo os arquivos PO para o formato DTD, para então poder empacotar tudo e criar seu próprio .xpi ou mesmo um build inteiro.

bash$ po2moz --progress=verbose -i pt-BR/ -t en-US/ -o NEW/

Na linha acima, o diretório de entrada (-i) possui os arquivos traduzidos, e usará como guia o diretório en-US (-t) com os DTD. O resultado será passado para o diretório de saída (-o) chamado NEW, que deverá ser renomeado para pt-BR, após tudo isso.

Pronto! Você passou por todo o processo de converter, traduzir e converter novamente os arquivos. Acredito que esse documento possa ser útil para você, para que possa fácil e colaborativamente traduzir os softwares Mozilla para sua língua nativa ou quem sabe mesmo pra Klingon ou Sindarin... não?

Se você tiver alguma sugestão, crítica ou algo que faça o texto ficar melhor, envie um e-mail para a lista -dev do Mozilla Brasil, que é pra onde esse texto foi originalmente pensado. O link está logo abaixo.

Caio Begotti entercaio@uol.com.br
Mozilla Brasil http://www.mozilla.org.br


Descrição das opções:

Do script setup.py, que fica no diretório /src mencionado inicialmente:

~/translate/src: ./setup.py --help-commands
Comandos padrões:
build prepara tudo que é necessário para instalar
build_py "cria" módulos Python puros (copia pro diretório build)
build_ext cria extensões C/C++ (compila/linka pro diretório build)
build_clib cria bibliotecas C/C++ usadas pelas extensões Python
build_scripts "cria" os scripts (copia e corrige a linha #!)
clean limpa todo o lixo criado pelo comando build
install instala tudo do diretório build
install_lib instala todos os módulos Python (extensões e os puros)
install_headers instala os arquivos de cabeçalho C/C++
install_scripts instala os scripts (Python ou outros)
install_data instala os arquivos de dados
sdist cria um pacote com fontes (tarball, zip etc)
register registra o pacote com o índice de pacotes Python
bdist constrói um pacote (binário) pra distribuição
bdist_dumb constrói um pacote "nulo" pra distribuição
bdist_rpm constrói um pacote RPM pra distribuição
bdist_wininst constrói um instalador executável para o MS Windows

uso: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
ou: setup.py --help [cmd1 cmd2 ...]
ou: setup.py --help-commands
ou: setup.py comando --help

Do script moz2po localizado dentro do diretório /usr/bin/:

bash$: moz2po --help
uso: moz2po [opções] [--version] [-h|--help] [-i|--input ENTRADA]
[-t|--template GUIA] [-o|--output SAÍDA] [--progress PROGRESSO]

opções:
--version exibe a versão do programa e encerra o mesmo
-h, --help exibe esta mensagem de ajuda e encerra o programa
-iENTRADa, --input=ENTRADA
lê os .dtd e .properties do diretório de entrada
-tGUIA, --template=GUIA
lê do diretório modelo, arquivos .dtd e .properties
-oSAÍDA, --output=SAÍDA
envia para o diretório SAÍDA os arquivos .po
--progress=PROGRESSO escolhe o tipo de barra: simple, console, verbose
ou curses
-P, --pot produz modelos .pot com msgstrs em branco

Do script po2moz, usado para converter do formato .po para o .dtd:

~/Desktop/CVS-translate/src: po2moz --help
uso: po2moz [opções] [--version] [-h|--help] [-i|--input ENTRADa]
[-t|--template GUIA] [-o|--output SAÍDA] [--progress PROGRESSO]


opções:
--version exibe a versão do programa e encerra o mesmo
-h, --help exibe esta mensagem de ajuda e encerra o programa
-iENTRADa, --input=ENTRADA
lê os arquivos .po do diretório de entrada
-tGUIA, --template=GUIA
lê os arquivos .po do diretório modelo
-oSAÍDA, --output=SAÍDA
envia para o diretório SAÍDA os .dtd e .properties
--progress=PROGRESSO escolhe o tipo de barra: simple, console, verbose
ou curses

Referências:

http://translate.sf.net
http://l10ntools.mozdev.org
http://www.mozilla.org.br
http://translate.org.za
http://www.mozillatranslator.org
http://www.mozdev.org
http://tldp.org
http://i18n.kde.org/translation-howto/
http://www.mozilla.org/projects/l10n/
http://l10nzilla.mozdev.org

Referências locais:

man gettext (mais como um guia rápido)
info gettext (com informações detalhadas)


Micro-Faq:

1. Como eu poderia mesclar dois diretórios de diferentes línguas a fim de
obter um terceiro com ambas as mensagens em inglês e na minha língua
nativa?

No passado o Translate tinha um script chamado repot.py que fazia esse tipo
de coisa, mas hoje você pode usar normalmente o script moz2po, usando o
diretório de DTD da sua língua nativa como entrada e o diretório com os
originais DTD em inglês como guia:

bash$ moz2po --progress=verbose -i sua_lingua -t en-US -o mesclados/

Assim você terá dentro do diretório mesclados/ um monte de arquivos .po com
ambas as linhas msgid e msgstr. Desse jeito:

#: windowtitle.label
msgid "About Popups"
msgstr "Bloqueando popups - Mozilla"

2. Eu nunca usei o Kbabel pra traduzir alguma coisa! Me ajuda?

Ainda que o kit Translate converta arquivos DTD para o mesmo formato que o
Kbabel trabalha, não se pode dar qualquer suporte sobre isso. Por favor,
cheque a seção de links desse documento e do site translate.sf.net para
ver textos que possam te ajudar a usar o Kbabel.

3. Eu sou um usuário Windows: isso significa que eu nunca poderei usar o
formato .po para ajudar o time local de tradutores?

Absolutamente, não! Existe um interessante editor de arquivos .po para
Windows chamado poEdit. Dê uma procurada sobre ele.

4. Ok, o kit Translate é animal, mas eu não faço a mínima idéia sobre como
posso criar meu próprio pacote .xpi instalável. E agora?

É óbvio que você leu as instruções do MLP sobre esse tipo de situação,
certo? Por favor, vá até http://www.mozilla.org/projects/l10n/ para obter
mais informações sobre como criar pacotes .jar e/ou .xpi.

5. Existe algum outro jeito de converter arquivos DTD para outros formatos?

Bem... sim, existe. Veja o último link da lista de referências acima. O
programa l10nzilla faz isso usando PHP com banco de dados MySQL e uma
interface web em Java, usados pra traduzir diretamente os DTD de forma
online. No entanto, ele não me parece muito ágil e no fim acaba inventando
a roda novamente.

6. Quem fez esse kit Translate?

Um grupo de malucos sul-africanos, que fazem parte do esforço de tradução
do Mozilla, KDE e OpenOffice.org para todos os 11 idiomas diferentes que
são atualmente falados na África do Sul!


Autor: Caio Begotti
Email: entercaio@uol.com.br

Postado por fuji em março 27, 2004 10:42 AM

Comentários para "Traduzindo softwares como o Mozilla"

Antes de comentar...

- Preserve a qualidade desta discussão
- Leia os Termos de Uso.
- Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum.
- Mantenha o foco nos argumentos e no assunto
- Não faça ataques pessoais.
- Pense 5 vezes antes de entrar em discussões inúteis, como "qual é a melhor distribuição/ambiente gráfico/linguagem de programação/etc.", mesmo se alguém já tiver provocado - um erro não justifica o outro
- Não seja um e-mala ;-)


O Arquivo Histórico do BR-Linux.org mantém no ar (sem alteração, exceto quanto à formatação) notícias, artigos e outros textos publicados originalmente no site na segunda metade da década de 1990 e na primeira década do século XXI, que contam parte considerável a história do Linux e do Open Source no Brasil. Exceto quando indicado em contrário, a autoria dos textos é de Augusto Campos, e os termos de uso podem ser consultados na capa do BR-Linux.org. Considerando seu caráter histórico, é provável que boa parte dos links estejam quebrados, e que as informações deste texto estejam desatualizadas.