[RoR] internationalization & localization
4 nov 2011(há 14 anos)Introdução
Olá pessoal, hoje finalmente depois de algumas tentativas de iniciar este post, sobre internacionalização e localização (internationalization & localization) os famosos, i18n e l10n, mas pq essas siglas? Simples, entre i e n de internationalization existem 18 letras e entre l e n existem 10 por isso, respectivamente i18n e l10n, ou seja, internationalization & localization = globalization, mas o que de verdade significa i18n e l10n
i18n: Prepara softwares para diferentes idiomas e regiões.
l10n: Processo para adaptar um software com i18n para uma região e idioma especifico.
Durante muito tempo rails não usava globalization, acredito que até a versão 2 do rails ainda não era suportado, em russo e em alemão se não me engano existem dois tipos de plural, ou seja, em alemão 1 objeto é de uma forma, 2 objetos é de outra forma, 3 objetos é de outra forma e em existem 12 formas diferentes de formar plurais, e se precisarmos traduzir nossa aplicação para alemão é necessário preparar o backend para suportar mais de um plural, já do português para inglês e visse e versa dá para usar backend simples em inglês.
I18n na prática
Vamos abrir um terminal e rodar um rails c
para testarmos o modulo I18n...
irb(main):001:0> I18n.class => Module irb(main):002:0> I18n.locale => :en irb(main):003:0> I18n.translate :hello => "Hello world"
Vejam que no exemplo acima, retornei qual a class, qual o locale e usei o metodo translate que será muito o usando
no nosso projeto, mas pq o retorno desses metodo foi "Hello world", bem se vocês abrirem o arquivo config/locales/en.yml
:
# Sample localization file for English. Add more files in this directory for other locales. # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. en: hello: "Hello world" # adicione as linhas abaixo apple: "Apple" pirate: "Pirate"
Vamos voltar ao console...
irb(main):004:0> I18n.translate :pirate => "translation missing: en.pirate" irb(main):005:0> reload! Reloading... => true irb(main):006:0> I18n.translate :pirate => "Pirate" irb(main):007:0> I18n.translate :apple => "Apple" irb(main):008:0> I18n.translate "errors.messages.blank" => "can't be blank" irb(main):008:0> exit
Percebam que quando executo translate :pirate ele avisa que en.pirate não existe isso pq no terminal é necessário reiniciar o console, mas logo em seguida é possível retornar as mensagens por min definida e outras mensagens do active model por exemplo e saímos do console.
Agora vou criar um arquivo pt-BR.yml
, e começar com as traduções...
en: hello: "Olá mundo!"
Agora vamos abrir mais um vez um console e se rodarmos um locale e um translate...
irb(main):001:0> I18n.locale = 'pt-BR' => "pt-BR" irb(main):002:0> I18n.translate :hello => "Olá mundo!"
Está ai traduzidinho...
Conclusão.
Bem pessoal essa foi a primeira parte de globalização em breve voltarei com a continuação...