Quem utiliza algum software-livre sabe como é fácil conseguir qualquer aplicativo no seu idioma nativo. Se a tradução ainda não foi feita, basta entrar em contato com o autor para contribuir. Um exemplo que vale ser citado é o grupo de tradutores do Ubuntu Brasil (Og Maciel, Fábio Nogueira e cia). Provavelmente, existem muitos outros grupos ativos, mas como assino o feed do Planeta Ubuntu Brasil, é o que me chama mais a atenção.

De um outro lado, é preciso que o desenvolvedor se preocupe em distribuir seu software de maneira internacionalizada. Com Python, isso pode ser feito de maneira muito simples utilizando o módulo gettext. Irei explicar aqui como utilizá-lo.

Colocando a mão na massa

Primeiro, vamos criar um script que imprime algumas frases na tela.

#! /usr/bin/python
# -*- coding: utf-8 -*-
 
print "Hi. We're going to test the gettext module."
print "The book is on the table."
print "Hello %s. I'm glad you're back!" % "Nando"

Crie um novo diretório chamado "gettext-example" e salve o script como "test.py".

Da maneira como fizemos nosso script, não importa qual idioma selecionemos, nossas frases serão escritas sempre no idioma inglês.

O primeiro passo para internacionalizar nosso aplicativo é extrair todas as frases de nosso código. Para isso, iremos utilizar o poEdit. No Ubuntu, instale-o com o seguinte comando:

~$ sudo aptitude install poedit

Quando formos utilizar o módulo gettext, iremos criar um atalho para a função que pega o texto traduzido. E é esta mesma função que o poEdit procura no seu código, indicando as frases que precisam ser traduzidas. Esta função é simplesmente um _ (underscore). Altere seu script para o código abaixo:

#! /usr/bin/python
# -*- coding: utf-8 -*-
 
print _("Hi. We're going to test the gettext module.")
print _("The book is on the table.")
print _("Hello %s. I'm glad you're back!") % "Nando"

Não tente rodar este script, pois irá ocorrer um erro, já que ainda não definimos a função _.

Agora, abra o poEdit em Applications > Programming > poEdit. Crie um novo catálogo em File > New catalog.... Preencha as informações da janela que irá surgir.

poEdit: Settings

Na aba "Paths", coloque o caminho do diretório que você salvou o script "test.py". Salve o arquivo no diretório "locale", dentro do diretório principal (o mesmo que você salvou "test.py") com o nome "pt_BR.po". Agora, já podemos extrair todas as frases que iremos traduzir. No menu "Catalog", selecione a opção "Update from sources". Se tudo saiu conforme o planejado, você verá um resumo de todas as frases encontradas.

poEdit: Update Summary

Agora, basta traduzir as frases! Uma coisa que deve ser levada em consideração na hora da tradução, é o tamanho das frases. É aconselhável que você traduza cada frase com o mesmo tamanho da original. Não exatamente o mesmo tamanho, mas o mais próximo possível, pois algumas telas podem não exibir todo o texto caso ele seja muito longo. Salve o arquivo traduzido.

poEdit: Translated Strings

Se você notou, ele salvou no mesmo diretório do arquivo "pt_BR.po" um outro arquivo, de mesmo nome, mas sob a extensão ".mo". Este arquivo nada mais é que uma versão compilada do arquivo ".po" e que será efetivamente utilizado em nosso script. Mova este arquivo (pt_BR.mo) para um diretório "pt_BR/LC_MESSAGES", dentro do diretório "locale". Renomeie o arquivo para "app.mo".

Gettext: Estrutura de Diretórios

Agora que já criamos o arquivo com as frases traduzidas, já podemos implementar a chamada do módulo gettext em nosso script.

#! /usr/bin/python
# -*- coding: utf-8 -*-
 
import locale
import gettext
 
locale.setlocale(locale.LC_ALL, '')
gettext.bindtextdomain('app', './locale')
gettext.textdomain('app')
_ = gettext.gettext
 
print _("Hi. We're going to test the gettext module.")
print _("The book is on the table.")
print _("Hello %s. I'm glad you're back!") % 'Nando'

O Python identifica o aplicativo por seu domínio, que deve ser também o nome do arquivo compilado (app.mo). Por isso, definimos o domínio "app" na função gettext.bindtextdomain e gettext.textdomain. Quando você for criar seu aplicativo, defina seu próprio domínio.

Para ver o script acima, é preciso que você logue com o idioma Português. Isso pode ser um problema na hora de desenvolver, já que necessariamente teríamos que ter o idioma que queremos testar instalado. Para alterar o idioma sem verificar qual é o padrão do sistema operacional, podemos forçar a localização instalando o idioma desejado:

#! /usr/bin/python
# -*- coding: utf-8 -*-
 
import gettext
 
PT_BR = gettext.translation('app', './locale', languages=['pt_BR'])
PT_BR.install()
_ = PT_BR.gettext
 
print _("Hi. We're going to test the gettext module.")
print _("The book is on the table.")
print _("Hello %s. I'm glad you're back!") % 'Nando'

A abordagem acima também pode ser utilizada para definir o idioma do aplicativo através de opções, onde o usuário escolhe qual idioma quer usar. Ao rodar o script, veremos:

nando:~/gettext-example$ python test2.py
Olá. Nós iremos testar o módulo gettext.
O livro está sobre a mesa.
Olá Nando. Fico feliz que você voltou!

Se você está desenvolvendo um aplicativo, seja ele comercial ou livre, vale a pena fazer a sua internacionalização, pois a abrangência será, provavelmente, muito maior.

Agradecimento: Obrigado Nilton Volpato (Lista Python-Brasil) por me esclarecer o funcionamento da estrutura de diretórios.

Comentários #

#1 Fábio Nogueira disse:
18 Out 06, 08:36AM

Parabéns pela iniciativa!
;)
[]'s

#2 Fábio Nogueira disse:
30 Out 06, 07:15PM

Amigão.. meu blog mudou para:

http://ubuntuser.gnulinuxbrasil.org

[]'s

#3 Gabriel Falcão disse:
14 Jan 07, 02:55PM

Funcionou perfeito aqui! Valeu!

#4 Nação Livre » Blog Archive » Pequena melhoria…... disse:
14 Jan 07, 03:01PM

[...] Agradeço ao Nando Vieira pelo tutorial de internacionalização simples e funcional! [...]

#5 Luis disse:
26 Fev 07, 01:04PM

Muito bom!
Tomei a iniciativa de postar no fórum iEvolution (forum.ievolution.com.br). Espero que não leve a mal. ;)

Link: http://forum.ievolution.com.br/index.php?showtopic=8816&pid=61467&st=0&

Abraço.

#6 Nando Vieira disse:
26 Fev 07, 01:10PM

Tranquilo! A única coisa que peço são os créditos (e você colocou)! ;)

Deixe um comentário





Não é aceito código HTML: adicione-o no pastie.org ou paste.milk-it.net e poste apenas o link.

Se este é seu primeiro comentário, ele terá que ser aprovado antes de ser exibido.

jQuery: Dominando o framework

Você quer aprender a usar jQuery de verdade? Então chegou a hora! Neste workshop você verá como funciona este framework de JavaScript, entendendo todos os aspectos que fazem do jQuery uma das melhores ferramentas para desenvolvimento de interfaces.

Saiba mais Fechar

Conheça também o HOWTO