如何使用本地化文件使Rails 3路由器本地化URL?

3

我希望能够做到以下几点:

在 config/routes.rb 文件中实现。

resources :posts

在config/locale/en.yml文件中

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

在config/locale/tr.yml文件中

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

并获取

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

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

我希望Rails能够在任何时候匹配这些路由,并将相关的语言环境传递到参数哈希中,以便当我导航到/yazilar时,请求应该路由到posts#index操作,并在参数哈希中带有:tr语言环境。是否有简单或复杂的方法实现这一点?
3个回答

7

还有一个由Guillaume Luccisano开发的i18n_routing插件http://github.com/kwi/i18n_routing可以解决大部分这些问题,但是它目前无法翻译像../new../edit这样的操作名称。不过,Guillaume表示他很快会实现这个功能。

更新:操作名称翻译已在i18n_routing中实现。感谢Guillaume。


2

他们翻译动作动词吗? - edgerunner
route_translator 可以翻译动词(例如在描述中将 new 翻译为 nuevo)。但是我不确定 rails-translate-routes 是否可以。虽然翻译文件中显示 new: crear,但是 rake routes 并没有显示翻译后的动词(我没有尝试文档中的方法)。 - Martin M

0

Raul Murciano 的 translate_routes 插件提供了您所需的一些功能:

http://github.com/raul/translate_routes

据我所知,它只适用于Rails 2.3.x。但至少你可以得到一些想法,甚至可以分叉插件并使其在Rails 3上运行。


这个程序使用作用域来识别语言环境,/:locale/:resource/:id 这种类型的 URL 不是我想要的。抱歉。 - edgerunner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接