[Tutorial] Traduzir rotas do Ruby on Rails com o plugin translate_routes

[Tutorial] Traduzir rotas do Ruby on Rails com o plugin translate_routes

Neste tutorial vou ensinar como traduzir rotas no Ruby on Rails, usando um plugin chamado translate_routes.

No Rails, uma boa prática é usar o inglês para nomear controllers, models, views, layouts, helpers, etc. O problema é que às vezes não fica legal deixar as URLs em inglês, principalmente quando você vai desenvolver um site estático (um site institucional por exemplo), o seu cliente pode não gostar.

É aí que entra o plugin “translate_routes”. Nós traduziremos somente as URLs públicas, porém todo código backend não será afetado. Ah! Um detalhe: este plugin funciona bem mesmo usando RESTful e Named routes.

Atenção: os comandos de terminal que são usados neste tutorial foram feitos no Linux, embora pouca coisa mude no Mac ou no Windows.

Então, mãos à obra:

1. Crie um projeto novo:

rails translate_routes_test

2. Instale o plugin:

cd translate_routes_test
script/plugin install git://github.com/raul/translate_routes.git

3. Vou criar um scaffold client pra demonstrar como fica a tradução, usando RESTful:

script/generate scaffold client name:string phone:integer

4. Não esqueça da migração do banco:

rake db:migrate

5. Crie um arquivo chamado i18n-routes.yml no diretório /config/locales/:

touch config/locales/i18n-routes.yml

6. É aqui onde você realmente vai traduzir as rotas. Edite o arquivo i18n-routes.yml, para que ele fiquei assim:

pt-BR:
  clients: "clientes"
  new: "novo"
  edit: "editar"
  show: "detalhes"

7. Adicione a seguinte linha no final do arquivo ./config/routes.rb (depois do end):

ActionController::Routing::Translator.i18n('pt-BR')

8. Retire o comentário da seguinte linha do seu arquivo .config/environment.rb e altere para pt-BR:

config.i18n.default_locale = 'pt-BR'

9. Pra verificas as rotas, rode o comando rake routes. A saída será:

$ rake routes
(in /home/caton/Desktop/translate_routes_test)
    clients_pt_br GET    /clientes(.:format)
                  POST   /clientes(.:format)
 new_client_pt_br GET    /clientes/novo(.:format)
edit_client_pt_br GET    /clientes/:id/editar(.:format)
     client_pt_br GET    /clientes/:id(.:format)
                  PUT    /clientes/:id(.:format)
                  DELETE /clientes/:id(.:format)
                         /:controller/:action/:id
                         /:controller/:action/:id(.:format)

10. Rode o servidor e entre no link: http://localhost:3000/clientes/novo pra testar.

Pronto! Suas rotas estão traduzidas.

Um detalhe importante: a versão atual do plugin só funciona com Rails 2.3.x. Se você usa outra versão, consulte o wiki.

Qualquer dúvidas, sugestões ou críticas, deixem aí nos comentários!

  • Parabéns pelo tuto lucao, muito legal !

    Só pra complementar, além das rotas é bem provável que vc queira traduzir todas as outras coisas da sua app, incluindo mensagens de erro, flash messasges, conversões de unidades tipo kilômetros p/ milhas, dólar pra real e etc … então vale a pena dar uma olhada em http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale

    Abração johnny

  • Ta ai um plugin que será bastatente util!

    Parabéns pelo tutorial!

    Valeu!

  • Muito legal o plugin, obrigado pela ótima aplicação dele, parabéns.

  • Leandro

    Parabens pelo artigo.

    Estou com um probleminha talvez vc possa me ajudar, Tenho um projeto que minhas rotas
    map.namespace :adm do |adm|
    adm.resources :empresas, :has_many => :produtos
    end

    mas na hora que busco o id da empresa por params no produto.
    class Adm::ProdutosController < ApplicationController
    before_filter :load_empresa

    def load_empresa
    @empresa = Empresa.find(params[:empresa_id])
    end

    não traz o id.

  • Leandro, não entendi direito seu problema. Você já olhou no Rails guides?
    http://guias.rubyonrails.pro.br/routing.html#namespaces-de-controladores-e-roteamento

    Qualquer coisa, grita aí!

    Abraço.

  • É possível traduzir as mensagens de validação e também os atributos do model.

    O Patrick Espake fez um tutorial bem bacana:
    http://blog.patrickespake.com/2009/01/31/ruby-on-rails-22-como-usar-i18n-traduzir-as-mensagens-de-validacao-do-model-e-atributos-do-model/

  • Além de fazer isso que o Patrick ensina, eu também uso o plugin [http://github.com/iain/i18n_label/] pra traduzir as labels das views.

  • Outra coisa interessante que também não tem no post do Patrick é traduzir o nome dos models (e não só os atributos). Basta adicionar no ‘pt-BR.yml’:

    activerecord:
      models:
        event: “Evento”
      attributes:
        event:
          name: “Nome”

Comments are closed.