RSS

Internacionalizando uma aplicação rails

4 Comments | This entry was posted on Jan 22 2008

Internacionalizar uma aplicação exige um planejamento dada as diversas opções de ferramentas existens. Em Ruby on Rails, onde a idéia era não ter suporte oficial ao i18n(internacionalização) temos algumas ferramentas para tornar nossa aplicação multi-língua. Neste contexto, existe uma ferramenta chamada
gettext, que segundo definição da wikipedia:

é uma biblioteca do Projeto GNU que faz a internacionalização de
softwares, ou seja, a escrita de multiplas línguas em
softwares

Este tutorial tenta esclarecer o desenvolvedor ruby on rails que tem
dificuldade de internacionalizar sua aplicação utilizando o gettext.

Inicialmente vamos instalar a gem gettext em nosso sistema.

sudo gem install
gettext

Seleciona a versão de acordo com o seu sistema. (Este tutorial foi realizado
usando Ubuntu Linux, caso esteja no windows, basta retirar o comando
sudo).

Para o correto
funcionamento do gettext e deste tutorial devemos nos certificar que
todas strings e conexões ao banco de dados estão sendo
realizadas usando encoding UTF-8.

Depois de nos certificar de usarmos o encoding adequado agora vamos preparar a aplicação para
internacionalização de fato e para isso vamos adicionar algumas tarefas
no Rakefile da aplicação. Opcionalmente você pode adicionar estas
tarefas dentro da sua biblioteca de tarefas em lib/tasks. Abra seu
Rakefile e vamos adicionar as seguintes tarefas adequando as strings
myapp de acordo com o nome de sua aplicação:

desc "Create mo-files"task :makemo do
require 'gettext/utils'
 GetText.create_mofiles(true, "po", "locale")
end
desc "Update pot/po files to match newversion."
task :updatepo do
	TEXT_DOMAIN = "myapp"
	APP_VERSION = "myapp1.1.0"
	GetText.update_pofiles(TEXT_DOMAIN,
		Dir.glob("{app,lib}/**/*.{rb,rhtml}"),
		APP_VERSION)
end

O código acima é encontrado nos manuais disponíveis dentro do site Ruby on Rails . Note que a tarefa :updatepo é a responsável por varrer a sua aplicação em busca de arquivos *.rb e *.rhtml.

O próximo passo é definir a hierarquia do gettext em nosso projeto. Vamos criar uma pasta na rails da aplicação chamada “po” e dentro dela vamos criar a seguinte hierarquia:

po
| pt_BR
| en_US
| en_UK

Para cada língua que desejamos ter, devemos criar um diretório cujo nome é seu código correspondente. Para saber mais sobre que códigos usar sugiro ler este artigo do W3C.

Agora vamos informar nosso ApplicationController que vamos internacionalizar toda nossa aplicação. Abra seu ApplicationController e vamos adicionar algumas duas linhas nele. Ressalto que altere a string myapp de acordo com o nome de sua aplicação definido anteriormente.

require 'gettext/rails'
classApplicationController < ActionController::Base
	init_gettext"myapp"
end

De agora em diante devemos adotar o seguinte método toda vez que formos inserir texto que a ser traduzido em nossa
apli
cação:

< %=_("Este texto deve ser traduzido.")%>

Para padronizar o trabalho de tradução de forma a facilitar a cooperação internacional em projetos de software livre convenciona-se que se utilize o inglês como língua base de nossas strings de texto no projeto.

Lembram das tarefas que criamos em nosso Rakefile? Agora vamos rodar a tarefa :updatepo.
Abra o terminal com a raiz em sua aplicação e use o comando:

rake updatepo

Após a varredura em busca de strings a serem traduzidas, um arquivo de nome myapp.pot será
criado dentro do diretório po. Este arquivo é um template que vai ser utilizado para todas linguagens que vamos traduzir.

Abra ele com um editor de arquivos po. Eu uso em meu Ubuntu o POEdit facilmente instalado através do gerenciador de pacotes.

Com o arquivo de template aberto em nosso editor de arquivos po, vamos salvar o arquivo como myapp.po dentro do diretório po na pasta cujo nome é o código da tradução alvo. Por exemplo, se estivermos traduzindo para o inglês do estados unidos, devemos salvar dentro da pasta en_US.

Traduzidas as strings, vamos agora “compilar” a tradução para ser usada em nossa aplicação. Com o seguinte comando em seu terminal:

rake makemo

Um novo diretório chamado locale será criado na raiz de sua aplicação contendo os arquivos compilados de
tradução.

Pronto! Sua aplicação está internacionalizada!

Para ver sua aplicação na língua nativa, acesse sua aplicação normalmente pelo browser:

http://localhost:XXXX/myapp/

onde XXXX é o número da porta de sua aplicação.

Para vermos nas demais línguas que traduzimos basta alterar o código de locale:

http://localhost:XXXX/myapp?lang=en_US

Caso tenha utilizado outros códigos, teste-os também!

Espero que seja útil.
Obrigado.