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:
parent
9110db41c5
commit
51d760960c
4 changed files with 28 additions and 51 deletions
|
@ -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
|
||||||
|
|
|
@ -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 = :en
|
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
|
||||||
|
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', '*')]
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -16,49 +16,24 @@ 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'
|
request.headers['Accept-Language'] = 'ca-ES, fa'
|
||||||
get 'success'
|
get 'success'
|
||||||
expect(I18n.locale).to eq :ca
|
expect(I18n.locale).to eq :fa
|
||||||
end
|
|
||||||
|
|
||||||
it 'sets available and preferred language if language specified by ENV is not preferred' do
|
|
||||||
request.headers['Accept-Language'] = 'ca-ES, fa'
|
|
||||||
get 'success'
|
|
||||||
expect(I18n.locale).to eq :fa
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'sets language specified by ENV if it is compatible and 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'
|
|
||||||
get 'success'
|
|
||||||
expect(I18n.locale).to eq :fa
|
|
||||||
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
|
end
|
||||||
|
|
||||||
context 'when DEFAULT_LOCALE environment variable is not set' do
|
it 'sets available and compatible langauge if none of available languages are preferred' do
|
||||||
it 'sets default locale if none of available languages are compatible' do
|
request.headers['Accept-Language'] = 'fa-IR'
|
||||||
request.headers['Accept-Language'] = ''
|
get 'success'
|
||||||
get 'success'
|
expect(I18n.locale).to eq :fa
|
||||||
expect(I18n.locale).to eq :en
|
end
|
||||||
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
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue