我有幾個資源,我想以某種方式在頭中有一個: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