【发布时间】:2009-01-31 14:44:04
【问题描述】:
我有几个资源,我想以某种方式在标题中添加一个 :lang 参数。 所以 /en/posts/ 会使用 params[:lang] == en 指向 posts_controller/index。
这通常是怎么做的?必须在每个链接上添加 ?lang=en 看起来很难看,而且感觉非常不规范。
我想你知道我在说什么,即使我不是很清楚,这里的规范是什么?
【问题讨论】:
标签: ruby-on-rails routing
我有几个资源,我想以某种方式在标题中添加一个 :lang 参数。 所以 /en/posts/ 会使用 params[:lang] == en 指向 posts_controller/index。
这通常是怎么做的?必须在每个链接上添加 ?lang=en 看起来很难看,而且感觉非常不规范。
我想你知道我在说什么,即使我不是很清楚,这里的规范是什么?
【问题讨论】:
标签: ruby-on-rails routing
一种方法是:
map.resources :yourresources, :path_prefix => '/:lang'
您还可以添加语言参数过滤器:
map.resources :yourresources, :path_prefix => '/:lang', :lang => /(en|de|jp)/
【讨论】:
您不应该完全避开路由,并根据浏览器的 HTTP Accept-Language 标头设置语言吗? See Here.
我想您应该为您的用户提供更改语言的选项,然后将该值存储在 cookie 中,然后可以在 before_filter 中提取该值。
为什么要这样做?好吧,“HTTP 最佳实践”指出每个资源都应该有一个 URI。一篇文章仍然是同一篇文章,无论是西班牙语还是英语,所以应该有相同的 URI。 site.com/en/article和site.com/es/article显然不是同一个URI,违反了这个原则
【讨论】:
Rails 2.3 的最新功能似乎就在你身边:http://afreshcup.com/2009/02/01/rails-23-localized-views/
【讨论】: