4

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

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

在 application_controller.rb 我有以下发送和接收语言环境。这成功地在 Rails 生成的路由中附加了 locale 参数,但不是由 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()get /login,但我想获取/login?locale=en而不必将语言环境传递给该login_path()方法。对于我所有的其他路线也是如此。

我的问题是如何让 js-routes 将 'locale' 参数添加到它生成的所有路由中,例如/login?locale=fr,无需将任何其他选项传递给 Routes 函数。

4

1 回答 1

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
于 2017-08-17T00:45:34.977 回答