0

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

4

1 に答える 1