From 9317ec8eb185659b687dec2ba84c3f7463d7b61d Mon Sep 17 00:00:00 2001 From: alpaca-tc Date: Tue, 25 Apr 2017 22:06:41 +0900 Subject: Localize with i18n for Devise::FailureApp (#2309) This PR fixes I18n.locale for rake middlewares. Mastodon uses Devise that depends on Warden. Warden::Manager can be found in rake middleware. It is outside of the controller. In the case of authentication failed, warden calls throw(:warden). At the time Warden::Manager delegates request to failure_app to generate response and flash[:alert] after catching it. Unfortunately, I18n.locale is already reset then because I18n.with_locale is enabled only inside the controller. If we used I18n.locale=, Devise::FailureApp could get the current locale. --- app/controllers/concerns/localized.rb | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'app/controllers/concerns') diff --git a/app/controllers/concerns/localized.rb b/app/controllers/concerns/localized.rb index d9a7a7227..44762df2a 100644 --- a/app/controllers/concerns/localized.rb +++ b/app/controllers/concerns/localized.rb @@ -4,25 +4,16 @@ module Localized extend ActiveSupport::Concern included do - around_action :set_locale + before_action :set_locale end private def set_locale - locale = default_locale - - if user_signed_in? - begin - locale = current_user.try(:locale) || default_locale - rescue I18n::InvalidLocale - locale = default_locale - end - end - - I18n.with_locale(locale) do - yield - end + I18n.locale = default_locale + I18n.locale = current_user.locale if user_signed_in? + rescue I18n::InvalidLocale + I18n.locale = default_locale end def default_locale -- cgit