Set the default locale in config (#6580)

Previously the default locale was set by Localized concern for controllers,
but it was not enforced for mailers.

config is enforced throughout the application and an appropriate place to
set the default locale.
This commit is contained in:
Akihiko Odaki 2018-03-04 17:21:35 +09:00 committed by Eugen Rochko
parent 9110db41c5
commit 51d760960c
4 changed files with 28 additions and 51 deletions

View file

@ -17,11 +17,7 @@ module Localized
end end
def default_locale def default_locale
request_locale || env_locale || I18n.default_locale request_locale || I18n.default_locale
end
def env_locale
ENV['DEFAULT_LOCALE']
end end
def request_locale def request_locale
@ -29,12 +25,10 @@ module Localized
end end
def preferred_locale def preferred_locale
http_accept_language.preferred_language_from([env_locale]) ||
http_accept_language.preferred_language_from(I18n.available_locales) http_accept_language.preferred_language_from(I18n.available_locales)
end end
def compatible_locale def compatible_locale
http_accept_language.compatible_language_from([env_locale]) ||
http_accept_language.compatible_language_from(I18n.available_locales) http_accept_language.compatible_language_from(I18n.available_locales)
end end
end end

View file

@ -31,7 +31,7 @@ module Mastodon
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)' # config.time_zone = 'Central Time (US & Canada)'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. # All translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.available_locales = [ config.i18n.available_locales = [
:en, :en,
@ -73,7 +73,12 @@ module Mastodon
:'zh-TW', :'zh-TW',
] ]
config.i18n.default_locale = ENV['DEFAULT_LOCALE']&.to_sym
if config.i18n.available_locales.include?(config.i18n.default_locale)
config.i18n.fallbacks = [:en]
else
config.i18n.default_locale = :en config.i18n.default_locale = :en
end
# config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb') # config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
# config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')] # config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]

View file

@ -51,6 +51,9 @@ Rails.application.configure do
# Raises error for missing translations # Raises error for missing translations
# config.action_view.raise_on_missing_translations = true # config.action_view.raise_on_missing_translations = true
config.i18n.default_locale = :en
config.i18n.fallbacks = true
end end
Paperclip::Attachment.default_options[:path] = "#{Rails.root}/spec/test_files/:class/:id_partition/:style.:extension" Paperclip::Attachment.default_options[:path] = "#{Rails.root}/spec/test_files/:class/:id_partition/:style.:extension"

View file

@ -16,51 +16,26 @@ describe ApplicationController, type: :controller do
end end
shared_examples 'default locale' do shared_examples 'default locale' do
context 'when DEFAULT_LOCALE environment variable is set' do after { I18n.locale = I18n.default_locale }
around do |example|
ClimateControl.modify 'DEFAULT_LOCALE' => 'ca', &example.method(:run)
I18n.locale = I18n.default_locale
end
it 'sets language specified by ENV if preferred' do it 'sets available and preferred language' do
request.headers['Accept-Language'] = 'ca, fa'
get 'success'
expect(I18n.locale).to eq :ca
end
it 'sets available and preferred language if language specified by ENV is not preferred' 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(I18n.locale).to eq :fa
end end
it 'sets language specified by ENV if it is compatible and none of available languages are preferred' do it 'sets available and compatible langauge if none of available languages are preferred' do
request.headers['Accept-Language'] = 'ca-ES, fa-IR'
get 'success'
expect(I18n.locale).to eq :ca
end
it 'sets available and compatible langauge if language specified by ENV is not compatible 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(I18n.locale).to eq :fa
end end
it 'sets language specified by ENV if none of available languages are compatible' do
request.headers['Accept-Language'] = ''
get 'success'
expect(I18n.locale).to eq :ca
end
end
context 'when DEFAULT_LOCALE environment variable is not set' do
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(I18n.locale).to eq :en
end end
end end
end
context 'user with valid locale has signed in' do context 'user with valid locale has signed in' do
it "sets user's locale" do it "sets user's locale" do