[RoR] internationalization & localization

4 nov 2011(há 14 anos)
DevelopmentRuby on Rails

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...