サイトを翻訳する必要があり、この目的のために 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 を設定する方法はありますか?