我需要翻译我的网站,并且我为此目的使用I18n。
使用区域设置作为URL参数,我想将用户重定向到其区域设置,该区域设置保存在其Cookie中
这是来自routes.rb的字符串,我用它来重定向:
get "/path", to: redirect("/#{I18n.locale}/%{path}", status: 302), constraints: {path: /(?!(#{I18n.available_locales.join("|")})/)./}, format: false
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?
答案 0 :(得分:0)
您使用区域设置作为路线的一部分是否有特殊原因?如果不是,我建议你按照Rails I18n guide建议在before_action
钩子中设置区域设置,然后根据你的情况从cookie中获取它(代码是从Rails中引用的)指南):
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end