mirror of https://github.com/mastodon/mastodon
parent
dead24a773
commit
9bb23b8d19
|
@ -130,11 +130,7 @@ class ApplicationController < ActionController::Base
|
||||||
def respond_with_error(code)
|
def respond_with_error(code)
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.any { head code }
|
format.any { head code }
|
||||||
|
format.html { render "errors/#{code}", layout: 'error', status: code }
|
||||||
format.html do
|
|
||||||
set_locale
|
|
||||||
render "errors/#{code}", layout: 'error', status: code
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,16 +4,19 @@ module Localized
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
included do
|
included do
|
||||||
before_action :set_locale
|
around_action :set_locale
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_locale
|
def set_locale
|
||||||
I18n.locale = default_locale
|
locale = current_user.locale if respond_to?(:user_signed_in?) && user_signed_in?
|
||||||
I18n.locale = current_user.locale if user_signed_in?
|
locale ||= session[:locale] ||= default_locale
|
||||||
rescue I18n::InvalidLocale
|
locale = default_locale unless I18n.available_locales.include?(locale.to_sym)
|
||||||
I18n.locale = default_locale
|
|
||||||
|
I18n.with_locale(locale) do
|
||||||
|
yield
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_locale
|
def default_locale
|
||||||
|
|
|
@ -114,6 +114,9 @@ module Mastodon
|
||||||
Doorkeeper::AuthorizationsController.layout 'modal'
|
Doorkeeper::AuthorizationsController.layout 'modal'
|
||||||
Doorkeeper::AuthorizedApplicationsController.layout 'admin'
|
Doorkeeper::AuthorizedApplicationsController.layout 'admin'
|
||||||
Doorkeeper::Application.send :include, ApplicationExtension
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,16 +7,10 @@ describe ApplicationController, type: :controller do
|
||||||
include Localized
|
include Localized
|
||||||
|
|
||||||
def success
|
def success
|
||||||
head 200
|
render plain: I18n.locale, status: 200
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
around do |example|
|
|
||||||
current_locale = I18n.locale
|
|
||||||
example.run
|
|
||||||
I18n.locale = current_locale
|
|
||||||
end
|
|
||||||
|
|
||||||
before do
|
before do
|
||||||
routes.draw { get 'success' => 'anonymous#success' }
|
routes.draw { get 'success' => 'anonymous#success' }
|
||||||
end
|
end
|
||||||
|
@ -25,19 +19,19 @@ describe ApplicationController, type: :controller do
|
||||||
it 'sets available and preferred language' do
|
it 'sets available and preferred language' do
|
||||||
request.headers['Accept-Language'] = 'ca-ES, fa'
|
request.headers['Accept-Language'] = 'ca-ES, fa'
|
||||||
get 'success'
|
get 'success'
|
||||||
expect(I18n.locale).to eq :fa
|
expect(response.body).to eq 'fa'
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets available and compatible language if none of available languages are preferred' do
|
it 'sets available and compatible language if none of available languages are preferred' do
|
||||||
request.headers['Accept-Language'] = 'fa-IR'
|
request.headers['Accept-Language'] = 'fa-IR'
|
||||||
get 'success'
|
get 'success'
|
||||||
expect(I18n.locale).to eq :fa
|
expect(response.body).to eq 'fa'
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets default locale if none of available languages are compatible' do
|
it 'sets default locale if none of available languages are compatible' do
|
||||||
request.headers['Accept-Language'] = ''
|
request.headers['Accept-Language'] = ''
|
||||||
get 'success'
|
get 'success'
|
||||||
expect(I18n.locale).to eq :en
|
expect(response.body).to eq 'en'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -48,7 +42,7 @@ describe ApplicationController, type: :controller do
|
||||||
sign_in(user)
|
sign_in(user)
|
||||||
get 'success'
|
get 'success'
|
||||||
|
|
||||||
expect(I18n.locale).to eq :ca
|
expect(response.body).to eq 'ca'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue