Rails 5 - redirect w routes.rb

Uff, mój pierwszy post tutaj!

Mam problem z ustawieniem routes, które aktualnei wyglądają tak:

Rails.application.routes.draw do
  localized do # localized is available via routes_translator gem
  	root              to: 'home#index'
  	get 'settings', to: 'home#settings'
  end

  get '',      to: redirect("/#{I18n.default_locale}/")
  get '*path', to: redirect("/#{I18n.default_locale}/%{path}")
end

I18n ma ustawione default_locale na :pl, a ja chciałbym móc przekierować użytkownika bazując na jego lokalizacji (określanej po IP, za pomocą gemu geocoder). Napisałem małe rozszerzenie do I18n:

module I18n
  def self.dynamic_locale
    if request.location.country_code != "PL"
      return :en
    else
      return I18n.default_locale
    end
  end
end

Podczas próby użycia i zastąpienia default_locale przez dynamic_locale w routes.rb i próbie odpalenia serwera, dostaję error:

'dynamic_locale': undefined local variable or method 'request' for I18n:Module (NameError)

Spotkał się ktoś z podobnym problemem?
Czy zaproponowane przeze mnie rozwiązanie ma sens, i jeśli tak to jak sprawić, by działało?

Może warto spróbować ustawić I18n.locale w ApplicationController?

https://phraseapp.com/blog/posts/rails-i18n-setting-and-managing-locales/ Może to pomoże :slight_smile:

Dzięki wielkie za odpowiedź. Koniec końców w routes.rb wyszło mi coś takiego:

Rails.application.routes.draw do
  scope "/:locale", locale: /#{I18n.available_locales.join("|")}/ do
  	root              to: 'home#index'
  	get 'settings',   to: 'home#settings'
  end
  root                to: redirect("/#{I18n.default_locale}", status: 302), as: :redirected_root
  get "/*path",       to: redirect("/#{I18n.default_locale}/%{path}", status: 302), constraints: { path: /(?!(#{I18n.available_locales.join("|")})\/).*/ }, format: false
end

Stwierdziłem, że używanie route_translator, który koniec końców jest dobrym gemem, nie będzie na tą chwilę konieczne.