我正在使用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
,无需将任何其他选项传递给路由功能。
答案 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