O Processo de tradução de Software Livre: O arquivo po

Uma coisa que tenho feito nos últimos tempos é traduzir software livre e uma lista razoável destes: Pidgin, Mono, Anjuta, pacman entre outros. Então, pretendo nesta série de posts dar alguma dicas e dizer como é o processo de tradução, ferramentas extras que uso e como preparo meu ambiente para fazer uma tradução.

Neste primeiro post vou falar sobre o processo de tradução. O processo de revisão virá em outro post. O processo de tradução é bem complexo: tradutores automáticos normalmente não traduzem direito e nada melhor que um cérebro humano para fazer um bom trabalho.

Softwares livres escritos em C/C++ e outras linguagens populares normalmente utilizam o software livre GNU Gettext que permite que você faça programas em mais de um idioma. E o mais interessante: dependendo da variável LANG, o programa é automaticamente iniciado no idioma correto. Obviamente, se o programa não possuir uma tradução o programa será carregado no seu idioma original (que normalmente é o inglês). Porém, se o programa estiver com a tradução incompleta, o que não foi traduzido aparecerá no idioma original e o resto aparecerá traduzido. Como normalmente traduzo usando um editor de texto (vim rlz!), eu explicarei como funciona a tradução em um editor de texto. Para os softwares que editam arquivos po (por exemplo o poedit)

Traduzindo um arquivo do zero

Antes de traduzir algo do zero, veja se não tem ninguém traduzindo perguntando na lista de discussão. Isso pode evitar que você trabalhe a toa.

O Gettext gera um arquivo .pot que é um arquivo com todas as frases que devem ser traduzidas mas sem nenhuma tradução. Se você for começar a traduzir um software que não possui tradução em português do (verifique se existe algum pt-BR.po na pasta po/). Este arquivo deve conter um monte de coisas parecidas com estas:

 
# arquivoteste.c:231
msgid "The book is on the table"
msgstr ""
 

Em um arquivo po, comentários começam com #, normalmente eles indicam onde está aquela frase no código fonte. O msgid é a frase original, que existe no programa. No msgstr você deverá colocar a tradução. Então ficaria assim:

# arquivoteste.c:231
msgid "The book is on the table"
msgstr "O livro está sobre a mesa"

Pronto. Você traduziu a frase. Algumas frases utilizam o conteúdo de variáveis, um exemplo (retirado do .po do Pidgin) é esse:

#: ../libpurple/protocols/msn/error.c:243
#: ../libpurple/protocols/msnp9/error.c:249
#, c-format
msgid "Unknown Error Code %d"
msgstr "Código de erro desconhecido: %d"

Esse %d é um "símbolo" da linguagem C (que também pode ser usado em C++) que nos informa que o conteúdo de uma variável será impresso (certamente se você vascular o código fonte do programa você verá que variável que é). Obviamente, a tradução deverá também conter esse "símbolo".

Atualizando uma tradução já existente

Muitas vezes você não começa uma tradução já existente, mas sim atualiza um arquivo .po existente. Neste caso você encontrará frases já traduzidas, frases não traduzidas e um terceiro status: fuzzies!

As traduzidas você não precisa mexer (mas sempre vale a pena você dar um lida para encontrar eventuais erros ou se acostumar com o vocabulário do programa). As não traduzidas você traduz como explicado na seção anterior. Mas e as fuzzies?

# teste.c: 192
#, fuzzy
msgid "The book is on the chair"
msgstr "O livro está sobre a mesa"

A primeira vista pode parecer que alguém traduziu errado, mas o que aconteceu foi que a tradução foi atualizada e o programa que fez a intercalação do arquivo .pot (o arquivo que é gerado com as frases) e o arquivo .po achou que a tradução fosse a mesma pelas frases serem parecidas, mas como ele não é um oráculo, ele marcou a frase como fuzzy (que significa incerta, confusa) para um ser humano verificar se a frase está correta (algumas vezes é necessário mudar uma coisinha, algumas vezes é necessário reescrever a frase).

Vendo se uma tradução funciona

Existem dois comandos importantes para tradutores: um deles é o msgfmt (que gerá arquivos po "compilados") o outro é o pofilter (que é mais utilizado na revisão e falarei dele no post sobre revisão). Se você está apenas traduzindo um software não será necessário "compilar" a tradução, porém seria interessante você ver se algum erro aconteceu na "compilação" da tradução (traduções que não compilam normalmente são rejeitadas por projetos).

msgfmt -cvo /dev/null arquivo.po

Esse comando "compila" o arquivo .po propriamente dito porém ele joga a saída (com o argumento -o) no buraco negro do sistema (aka /dev/null). O argumento -c significa que irá ser feito uma verificação (check), o -v aumenta a verbosidade. Se houver algum erro ele irá avisar onde está o problema, se não houver ele lhe dirá quantas frases estão traduzidas, incertas e não traduzidas.

"Lugares" úteis

Dois sites são "obrigatórios" se você quiser traduzir um software livre: o vocabulário padrão (a.k.a. VP) e o open-tran.

O vocabulário padrão é utilizado para garantir a consistência: delete por exemplo pode ser traduzido para remover, apagar, deltar e excluir. E o que garante que todos os tradutores usem o mesmo termo ? O VP. Ele é atualizado por alguns membros da LDP-BR (Linux-Documentation-Project) após o termo ser discutido na lista do LDP (falarei sobre ela em breve). Vocẽ pode pesquisar por um termo lá. Sugestões/reclamações/relatórios de erros podem ser feitos na própria lista do LDP. Claro que o VP não possui todos os termos: alguns deles tem uma tradução diferente dependendo do contexto. Cabe a você escolher a melhor (ou pedir ajuda :-) )

O Open-Tran tem um propósito parecido, mas ele não é atualizado por membros mas sim automaticamente. Se você pesquisar por exemplo "checkbox" ele lhe mostrará vários exemplos de frases traduzidas com este termo junto com o logo do projeto que traduziu aquela frase. Você também pode ver a frase original + o software que tem aquela frase simplesmente clicando na frase.

A lista do LDP-BR é povoada por muitos tradutores de Software Livre que podem te ajudar no caso de alguma dúvida de termo ou do processo de tradução. Lá também vocẽ pode ver as discussões sobre termos novos do VP assim como sugerir termos novos.

Também existe um canal de IRC #tradutores no freenode onde você pode tirar uma dúvida em tempo real.

[Post to Twitter] Tweet This Post 

11 Comments »

  1. Jonh Wendell Said,

    March 21, 2009 @ 11:05 am

    Ótimo tutorial cara!

    Considere colocar um link no nosso (GNOME) site apontando pra cá ;)

  2. Vladimir Melo Said,

    March 21, 2009 @ 11:26 am

    Legal, Rodrigo!
    Se puder depois escrever sobre a formatação de cabeçalho dos catálogos, seria bastante útil.
    Essa costuma ser a parte em que os tradutores iniciantes deixam algo passar.

  3. tombs Said,

    March 21, 2009 @ 12:50 pm

    Também achei o “rau-tu” bem legal!

  4. Krix Said,

    March 22, 2009 @ 7:29 am

    Parabéns Rodrigo pelo excelênte post.
    Com certeza essas informações são de grande ajuda para quem está iniciando e está com milhões de duvidas.

    :)

  5. Rodrigo Said,

    March 23, 2009 @ 10:27 am

    Parabéns chará !! Sempre quis ajudar nas traduções do Fedora, mas faltava um bom tutorial como o seu (agora não falta mais).

  6. Djavan Fagundes Said,

    March 23, 2009 @ 11:28 am

    Muito legal Rodrigo.. =)

  7. Krix Apolinário» Blog Archive » Dica - O Processo de Tradução de Software Livre Said,

    March 24, 2009 @ 6:03 am

    [...] irá abordar sobre O Processo de Tradução de Software Livre e no primeiro post ele falou sobre o Arquivo po. Uma coisa que tenho feito nos últimos tempos é traduzir software livre e uma lista razoável [...]

  8. Rui Gouveia Said,

    April 2, 2009 @ 1:35 pm

    Passe a publicidade. Para quem quem perceber o processo de registo no Fedora e traduções com o poedit.

    http://blogs.globaltek.pt/rui.gouveia/2009/03/04/traduzir-fedora-11-recapitulando/

  9. João Santana Said,

    April 25, 2009 @ 8:23 am

    Estou querendo que alguns projetos de programas meus possam ser traduzidos com arquivos .po, mas não sei como devo criá-los. Pode me ajudar?

  10. Willian Said,

    April 27, 2009 @ 5:54 am

    Ótimo! Continue falando sobre traduções, por favor :)
    Deu uma vontade louca de traduzir software livre!
    Parabéns!

  11. Guilherme Cunha Said,

    June 30, 2009 @ 5:37 am

    Muito legal, estou traduzindo o trac.

Leave a Comment

Tweet This Post links powered by Tweet This v1.3.9, a WordPress plugin for Twitter.

Creative Commons Attribution-NonCommercial 2.5 Brazil
Creative Commons Attribution-NonCommercial 2.5 Brazil