Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将locale参数附加到rails中js生成的所有路径_Javascript_Ruby On Rails 4_Internationalization_Locale_Js Routes - Fatal编程技术网

Javascript 将locale参数附加到rails中js生成的所有路径

Javascript 将locale参数附加到rails中js生成的所有路径,javascript,ruby-on-rails-4,internationalization,locale,js-routes,Javascript,Ruby On Rails 4,Internationalization,Locale,Js Routes,我正在使用js routes gem()和Rails 4.0.0 我想做的是在我的rails应用程序中js routes生成的每个路由中包含当前语言环境字符串。这个区域设置字符串(例如“en”)将从当前请求的查询字符串中提取。(因此,如果用户决定切换区域设置,页面加载可能会有所不同。) 在application_controller.rb中,我可以发送和接收以下区域设置。这成功地将locale参数附加到由Rails生成的路由中,而不是由js路由生成的路由中。(config/routes.rb中未

我正在使用js routes gem()和Rails 4.0.0

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

在application_controller.rb中,我可以发送和接收以下区域设置。这成功地将locale参数附加到由Rails生成的路由中,而不是由js路由生成的路由中。(config/routes.rb中未设置任何内容)

application\u 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
,而不必向routes函数传递任何附加选项。

如果将您的locale设置为全局变量,则可以使用当前版本的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
Routes.some_path() //=> /path/to/page?locale=es-ES