Files
openfoodnetwork/app/services/user_locale_setter.rb
2020-07-04 10:15:35 +02:00

51 lines
1.1 KiB
Ruby

# frozen_string_literal: true
class UserLocaleSetter
def initialize(current_user, params_locale = nil, cookies = {})
@current_user = current_user
@params_locale = params_locale
@cookies = cookies
end
def set_locale
save_locale_from_params
I18n.locale = valid_current_locale
end
def ensure_valid_locale_persisted
return unless current_user && !available_locale?(current_user.locale)
current_user.update!(locale: valid_current_locale)
end
def valid_current_locale
if current_user_locale && available_locale?(current_user_locale)
current_user_locale
elsif cookies[:locale] && available_locale?(cookies[:locale])
cookies[:locale]
else
I18n.default_locale
end
end
private
attr_reader :current_user, :params_locale, :cookies
def save_locale_from_params
return unless params_locale && available_locale?(params_locale)
current_user&.update!(locale: params_locale)
cookies[:locale] = params_locale
end
def available_locale?(locale)
Rails.application.config.i18n.available_locales.include?(locale)
end
def current_user_locale
current_user&.locale
end
end