我需要翻译我的网站,为此我使用 I18n。使用语言环境作为 URL 参数,我想将用户重定向到他们的语言环境,该语言环境保存在他们的 cookie 中。
这是我用来重定向的 routes.rb 中的字符串:
get "/path", to: redirect("/#{I18n.locale}/%{path}", status: 302), constraints: {path: /(?!(#{I18n.available_locales.join("|")})/)./}, 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?