【发布时间】:2016-07-28 20:51:29
【问题描述】:
我需要翻译我的网站,为此我使用 I18n。
使用语言环境作为 URL 参数,我想将用户重定向到他们的语言环境,该语言环境保存在他们的 cookie 中。
这是我用来重定向的 routes.rb 中的字符串:
get "/<em>path", to: redirect("/#{I18n.locale}/%{path}", status: 302), constraints: {path: /(?!(#{I18n.available_locales.join("|")})/).</em>/}, format: false
我正在使用 Rack 中间件获取 cookie 并在路由之前设置 I18n.locale:
require 'i18n'
module Rack
class Locale
def initialize(app)
@app = app
end
def call(env)
request = ActionDispatch::Request.new(env)
I18n.locale = request.cookies['locale'].to_sym if request.cookies['locale'].present? && request.params[:locale].nil?
@app.call(env)
end
end
end
问题出在 routes.rb 文件中:I18.locale 始终设置为默认语言环境,因此不会重定向到用户的语言环境,而是重定向到默认语言环境。
另外,我已经调试了中间件,正如我所见,I18n.locale 设置成功。
知道如何在 routes.rb 中设置 I18n.locale 吗?
【问题讨论】:
标签: ruby-on-rails ruby rails-i18n rack-middleware