2009-01-31 47 views
2

我有几个资源,我想以某种方式在头中有一个:lang参数。 So/en/posts /会用params [:lang] == en直接指向posts_controller/index。我的网站必须支持多种语言,我如何在rails中路由?

这通常如何完成?在每个链接上添加?lang = en并且感觉非常不友好,这看起来很丑陋。

我想你知道我在说什么,即使我不是很清楚,这里的规范是什么?

回答

0

是不是应该完全避开路由,并根据浏览器的HTTP Accept-Language头设置语言? See Here

我想象你应该给你的用户一个选择来改变他们的语言,然后将该值存储在一个cookie中,然后可以在before_filter中拔出该值。

为什么这样做?那么,“HTTP最佳实践”指出,每个资源应该有一个URI。一篇文章仍然是相同的文章,无论是西班牙语还是英语,所以应该有相同的URI。 site.com/en/articlesite.com/es/article显然不是相同的URI,这违反了这个原则

1

这样做的一种方式,它是:

map.resources :yourresources, :path_prefix => '/:lang' 

您还可以添加语言参数过滤:

map.resources :yourresources, :path_prefix => '/:lang', :lang => /(en|de|jp)/ 
+0

然后我会如何去创建与资源的链接? 我需要做link_to myresource_path(:lang =>“en”),还是我可以设置某种标准语言,以便在没有参数的情况下使用? – Fredrik 2009-01-31 17:31:05

+0

是的,你必须传递一些语言到链接助手。但是,您可以在environment.rb(作为常量)中设置默认语言,然后在Application控制器中创建一个方法(如get_language),如果未设置params [:lang],将返回此默认值。 – 2009-01-31 19:38:09