4

我正在使用js-routes gem(https://github.com/railsware/js-routes)和Rails 4.0.0。將語言環境參數追加到由軌道中的js-routes gem生成的所有路徑中

我想要做的是在我的rails應用程序中包含js-routes生成的每條路線中的當前區域設置字符串。此語言環境字符串(例如「en」)將從當前請求的查詢字符串中提取。 (因此,如果用戶決定切換語言環境,它可以從一個頁面負載變化到另一個頁面負載。)

在application_controller.rb中,我有以下內容來發送和接收語言環境。這成功地追加由Rails生成的路由中的語言環境參數,但不能由js-routes追加。 (沒有在配置/ routes.rb中設置)

application_controller.rb:

before_filter :set_locale 

def set_locale 
    I18n.locale = params[:locale] || I18n.default_locale 
end 

def default_url_options(options={}) 
    { locale: I18n.locale } 
end 

在javascript中我可以打電話Routes.login_path()得到/login,但我想/login?locale=en而無需語言環境傳遞給login_path()方法。對於我所有的其他路線也是如此。

我的問題是如何讓js-routes爲其生成的所有路由添加「locale」參數,例如, /login?locale=fr,而不必將任何其他選項傳遞給路線功能。

回答

0

如果您在區域設置的地方作爲一個全局變量,你可以用JS-路線的當前版本以下(假設使用i18next,例如)

# config/initializers/js_routes.rb 

JsRoutes.setup do |config| 
    config.serializer = <<~'JS' 
    function(object) { 
     object.locale = i18next.language 
     return Routes.default_serializer(object) 
    } 
    JS 
end 

現在你的locale PARAM將附加到您的所有js路線:

Routes.some_path() //=> /path/to/page?locale=es-ES