2009-01-31 48 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