views:

373

answers:

2

What I'd like to be able to do is:

in config/routes.rb

resources :posts

in config/locale/en.yml

en:
  resources:
    posts: "posts"
    new: "new"
    edit: "edit"

in config/locale/tr.yml

tr:
  resources:
    posts: "yazilar"
    new: "yeni"
    edit: "duzenle"

and get

I18n.locale = :en
edit_post_path(3) #=> /posts/3/edit

I18n.locale = :tr
edit_post_path(3) #=> /yazilar/3/duzenle

I'd also like Rails to match any of these routes anytime and pass the associated locale in the params hash such that when I navigate to /yazilar , the request should be routed to the posts#index action with the :tr locale in the params hash.

Any simple or complex way of doing that?

A: 

The translate_routes plugin by Raul Murciano provides some of the features you are asking for:

http://github.com/raul/translate_routes

It only works for Rails 2.3.x as far as I know though. But at least you can either get some ideas or even fork the plugin and make it work on Rails 3 yourself.

marzagao
This one uses scopes to identify locales, a `/:locale/:resource/:id` type of URL is not what I want. Sorry.
edgerunner
A: 

There is also the i18n_routing plugin by Guillaume Luccisano at http://github.com/kwi/i18n_routing that solves most of those problems however, it currently lacks translating the action names like ../new and ../edit. Guillaume says he will implement that "soon", though.

Update: Action name translating has been implemented in i18n_routing. Thanks Guillaume. :)

edgerunner