将locale参数附加到由rails中的js-routes gem生成的所有路径

时间:2014-04-04 00:11:09

标签: javascript ruby-on-rails-4 internationalization locale js-routes

我正在使用js-routes gem(https://github.com/railsware/js-routes)和Rails 4.0.0。

我想要做的是在我的rails应用程序中包含js-routes生成的每个路由中的当前语言环境字符串。此区域设置字符串(例如" en")将从当前请求的查询字符串中提取。 (因此,如果用户决定切换区域设置,它可以从一个页面加载到下一个加载不同。)

在application_controller.rb中,我有以下内容来发送和接收语言环境。这成功地将locale参数附加到Rails生成的路由中,但不是js-routes。 (在config / 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,无需将任何其他选项传递给路由功能。

1 个答案:

答案 0 :(得分:0)

如果您将区域设置设置为全局变量,则可以使用当前版本的js-routes执行以下操作(例如,假设使用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

现在您的语言环境参数将附加到您的所有js-routes:

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