我有几个资源,我想以某种方式在头中有一个:lang参数。 So/en/posts /会用params [:lang] == en直接指向posts_controller/index。我的网站必须支持多种语言,我如何在rails中路由?
这通常如何完成?在每个链接上添加?lang = en并且感觉非常不友好,这看起来很丑陋。
我想你知道我在说什么,即使我不是很清楚,这里的规范是什么?
我有几个资源,我想以某种方式在头中有一个:lang参数。 So/en/posts /会用params [:lang] == en直接指向posts_controller/index。我的网站必须支持多种语言,我如何在rails中路由?
这通常如何完成?在每个链接上添加?lang = en并且感觉非常不友好,这看起来很丑陋。
我想你知道我在说什么,即使我不是很清楚,这里的规范是什么?
是不是应该完全避开路由,并根据浏览器的HTTP Accept-Language头设置语言? See Here。
我想象你应该给你的用户一个选择来改变他们的语言,然后将该值存储在一个cookie中,然后可以在before_filter
中拔出该值。
为什么这样做?那么,“HTTP最佳实践”指出,每个资源应该有一个URI。一篇文章仍然是相同的文章,无论是西班牙语还是英语,所以应该有相同的URI。 site.com/en/article
和site.com/es/article
显然不是相同的URI,这违反了这个原则
这样做的一种方式,它是:
map.resources :yourresources, :path_prefix => '/:lang'
您还可以添加语言参数过滤:
map.resources :yourresources, :path_prefix => '/:lang', :lang => /(en|de|jp)/
好像定为Rails 2.3的最新功能是对你的胡同:http://afreshcup.com/2009/02/01/rails-23-localized-views/
尽管很酷,但这不能解决路由问题...... – 2009-02-02 00:02:15
然后我会如何去创建与资源的链接? 我需要做link_to myresource_path(:lang =>“en”),还是我可以设置某种标准语言,以便在没有参数的情况下使用? – Fredrik 2009-01-31 17:31:05
是的,你必须传递一些语言到链接助手。但是,您可以在environment.rb(作为常量)中设置默认语言,然后在Application控制器中创建一个方法(如get_language),如果未设置params [:lang],将返回此默认值。 – 2009-01-31 19:38:09