about summary refs log tree commit diff
path: root/app/controllers
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2019-07-21 18:08:02 +0200
committermultiple creatures <dev@multiple-creature.party>2020-02-21 00:15:49 -0600
commit755d96d5b5f9c7e47e2f34d299d8965f6e8d4daa (patch)
tree320287b6773667c063b597b5b31c5876626671f8 /app/controllers
parentc600f16baf66fac26ba40c0d3d4df46a822ede89 (diff)
port tootsuite#8657: Change locale detection to run once per session
Fix #6462
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/application_controller.rb7
-rw-r--r--app/controllers/concerns/localized.rb13
2 files changed, 10 insertions, 10 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 5eb3e42f6..a88be8734 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -224,11 +224,8 @@ class ApplicationController < ActionController::Base
 
   def respond_with_error(code)
     respond_to do |format|
-      format.any do
-        use_pack 'error'
-        render "errors/#{code}", layout: 'error', status: code, formats: [:html]
-      end
-      format.json { render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code }
+      format.any  { head code }
+      format.html { render "errors/#{code}", layout: 'error', status: code }
     end
   end
 
diff --git a/app/controllers/concerns/localized.rb b/app/controllers/concerns/localized.rb
index 145549bcd..b43859d9d 100644
--- a/app/controllers/concerns/localized.rb
+++ b/app/controllers/concerns/localized.rb
@@ -4,16 +4,19 @@ module Localized
   extend ActiveSupport::Concern
 
   included do
-    before_action :set_locale
+    around_action :set_locale
   end
 
   private
 
   def set_locale
-    I18n.locale = default_locale
-    I18n.locale = current_user.locale if user_signed_in?
-  rescue I18n::InvalidLocale
-    I18n.locale = default_locale
+    locale   = current_user.locale if respond_to?(:user_signed_in?) && user_signed_in?
+    locale ||= session[:locale] ||= default_locale
+    locale   = default_locale unless I18n.available_locales.include?(locale.to_sym)
+
+    I18n.with_locale(locale) do
+      yield
+    end
   end
 
   def default_locale