De vez em quando somos desafiados a desenvolver projetos que necessitam de traduções para outras línguas. Para resolver isso, usamos técnicas de localização.O Rails facilita muito a nossa vida ao guardar mensagens de erro e todo o texto customizado que você desejar traduzir em apenas um lugar.
Abaixo segue um exemplo de um trecho do arquivo de tradução com mensagens de erro do Active Record traduzidos para português:
:activerecord => { :errors => { :template => { :header => { :one => "Identificamos 1 erro nesta operação", :other => "Identificamos {{count}} erros nesta operação" }, :body => "Por favor, confira os seguintes campos:" }, :messages => { :inclusion => "não está incluso na lista", :exclusion => "não está disponível", :invalid => "não é válido", :confirmation => "é diferente da confirmação", :accepted => "precisa ser aceito", :empty => "não pode ser vazio", :blank => "não pode ser vazio", :too_long => "é muito longo (deve ser menor que {{count}} caracteres)", :too_short => "é muito curto (deve ser maior que {{count}} caracteres)", :wrong_length => "não é do tamanho correto (precisa ter {{count}} caracteres)", :taken => "não está disponível", :not_a_number => "não é um número", :greater_than => "precisa ser maior do que {{count}}", :greater_than_or_equal_to => "precisa ser maior ou igual a {{count}}", :equal_to => "precisa ser igual a {{count}}", :less_than => "precisa ser menor do que {{count}}", :less_than_or_equal_to => "precisa ser menor ou igual a {{count}}", :odd => "precisa ser ímpar", :even => "precisa ser par", } },
Seguindo o tutorial, para ativar a localização em um aplicativo Rails, basta definir as seguintes configurações em seu arquivo enviroment.rb:
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')] config.i18n.default_locale = 'pt-BR'
Dessa forma, define-se uma linguagem padrão para todo o site. Se quisermos alterar a linguagem durante a renderização das páginas, passando parâmetro na URL, pode-se definir os seguintes parâmetros no application controller.
before_filter :set_locale def set_locale # update session if passed session[:locale] = params[:locale] if params[:locale] # set locale based on session or default I18n.locale = session[:locale] || I18n.default_locale # load locale from settings @locale_files = [] ['yml', 'rb'].each do |type| locale_file = "#{LOCALES_DIRECTORY}#{I18n.locale}.#{type}" if File.exists?(locale_file) @locale_files << locale_file I18n.load_path << locale_file end end end
Como viram, é bastante fácil “localizar” em Rails. Se você desejar também traduzir o conteúdo das páginas. Veja o codigo abaixo:
}, :home => { :see_more_link => "Veja mais {{more_link}}", :see_all_link => "Saiba tudo sobre este {{all_link}}", :video_box_title => "Aperitivo", :events_box_title => "Últimos Eventos", :blog_box_title => "Blog", :followers_box_title => "Fãs", :scrapbook_box_title => "Scrapbook", :shopping_box_title => "Shopping" },
Criamos um dicionário de ítens a serem traduzidos. No template HTML, você deve fazer da seguinte forma:
<h1><%= I18n.t 'txt.home.video_box_title' %></h1>
Mais uma vez comprovamos a facilidade de traduzir com Rails. Para ter o arquivo de localização completo, entre em contato comigo que eu enviarei, pois ainda não disponibilizei no github. Se for urgente, você poderá encontrar em alguns perfis onde achei o modelo para me basear.
