| @ -130,11 +130,7 @@ class ApplicationController < ActionController::Base | ||||
|   def respond_with_error(code) | ||||
|     respond_to do |format| | ||||
|       format.any  { head code } | ||||
|  | ||||
|       format.html do | ||||
|         set_locale | ||||
|         render "errors/#{code}", layout: 'error', status: code | ||||
|       end | ||||
|       format.html { render "errors/#{code}", layout: 'error', status: code } | ||||
|     end | ||||
|   end | ||||
|  | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -114,6 +114,9 @@ module Mastodon | ||||
|       Doorkeeper::AuthorizationsController.layout 'modal' | ||||
|       Doorkeeper::AuthorizedApplicationsController.layout 'admin' | ||||
|       Doorkeeper::Application.send :include, ApplicationExtension | ||||
|       Devise::FailureApp.send :include, AbstractController::Callbacks | ||||
|       Devise::FailureApp.send :include, HttpAcceptLanguage::EasyAccess | ||||
|       Devise::FailureApp.send :include, Localized | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
| @ -7,16 +7,10 @@ describe ApplicationController, type: :controller do | ||||
|     include Localized | ||||
|  | ||||
|     def success | ||||
|       head 200 | ||||
|       render plain: I18n.locale, status: 200 | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   around do |example| | ||||
|     current_locale = I18n.locale | ||||
|     example.run | ||||
|     I18n.locale = current_locale | ||||
|   end | ||||
|  | ||||
|   before do | ||||
|     routes.draw { get 'success' => 'anonymous#success' } | ||||
|   end | ||||
| @ -25,19 +19,19 @@ describe ApplicationController, type: :controller do | ||||
|     it 'sets available and preferred language' do | ||||
|       request.headers['Accept-Language'] = 'ca-ES, fa' | ||||
|       get 'success' | ||||
|       expect(I18n.locale).to eq :fa | ||||
|       expect(response.body).to eq 'fa' | ||||
|     end | ||||
|  | ||||
|     it 'sets available and compatible language if none of available languages are preferred' do | ||||
|       request.headers['Accept-Language'] = 'fa-IR' | ||||
|       get 'success' | ||||
|       expect(I18n.locale).to eq :fa | ||||
|       expect(response.body).to eq 'fa' | ||||
|     end | ||||
|  | ||||
|     it 'sets default locale if none of available languages are compatible' do | ||||
|       request.headers['Accept-Language'] = '' | ||||
|       get 'success' | ||||
|       expect(I18n.locale).to eq :en | ||||
|       expect(response.body).to eq 'en' | ||||
|     end | ||||
|   end | ||||
|  | ||||
| @ -48,7 +42,7 @@ describe ApplicationController, type: :controller do | ||||
|       sign_in(user) | ||||
|       get 'success' | ||||
|  | ||||
|       expect(I18n.locale).to eq :ca | ||||
|       expect(response.body).to eq 'ca' | ||||
|     end | ||||
|   end | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user