mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: Using the default_locale in locale fallbacks caused problems
Locale files get precompiled after deployment and they contained translations from the `default_locale`. That's especially bad in multisites, because the initial `default_locale` is `en_US`. Sites where the `default_locale` isn't `en_US` could see missing translations. The same thing could happen when users are allowed to chose a different locale. This change simplifies the logic by not using the `default_locale` in the locale chain. It always falls back to `en` in case of missing translations.
This commit is contained in:
@@ -13,7 +13,6 @@ describe I18n::Backend::DiscourseI18n do
|
||||
backend.store_translations(:en, foo: 'Foo in :en', bar: 'Bar in :en', wat: 'Hello %{count}')
|
||||
backend.store_translations(:en, items: { one: 'one item', other: '%{count} items' })
|
||||
backend.store_translations(:de, bar: 'Bar in :de')
|
||||
backend.store_translations(:ru, baz: 'Baz in :ru')
|
||||
backend.store_translations(:en, link: '[text](url)')
|
||||
end
|
||||
|
||||
@@ -54,13 +53,6 @@ describe I18n::Backend::DiscourseI18n do
|
||||
expect(backend.translate(:de, 'bar')).to eq('Bar in :de')
|
||||
expect(backend.translate(:de, 'foo')).to eq('Foo in :en')
|
||||
end
|
||||
|
||||
it 'uses default_locale as fallback when key exists' do
|
||||
SiteSetting.default_locale = 'ru'
|
||||
expect(backend.translate(:de, 'bar')).to eq('Bar in :de')
|
||||
expect(backend.translate(:de, 'baz')).to eq('Baz in :ru')
|
||||
expect(backend.translate(:de, 'foo')).to eq('Foo in :en')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#exists?' do
|
||||
@@ -75,7 +67,6 @@ describe I18n::Backend::DiscourseI18n do
|
||||
it 'returns true when an existing key and an existing locale is given' do
|
||||
expect(backend.exists?(:en, :foo)).to eq(true)
|
||||
expect(backend.exists?(:de, :bar)).to eq(true)
|
||||
expect(backend.exists?(:ru, :baz)).to eq(true)
|
||||
end
|
||||
|
||||
it 'returns false when a non-existing key and an existing locale is given' do
|
||||
|
||||
@@ -16,7 +16,7 @@ describe I18n::Backend::FallbackLocaleList do
|
||||
it "works when default_locale is English (United States)" do
|
||||
SiteSetting.default_locale = :en_US
|
||||
|
||||
expect(list[:ru]).to eq([:ru, :en_US, :en])
|
||||
expect(list[:ru]).to eq([:ru, :en])
|
||||
expect(list[:en_US]).to eq([:en_US, :en])
|
||||
expect(list[:en]).to eq([:en])
|
||||
end
|
||||
@@ -24,7 +24,7 @@ describe I18n::Backend::FallbackLocaleList do
|
||||
it "works when default_locale is not English" do
|
||||
SiteSetting.default_locale = :de
|
||||
|
||||
expect(list[:ru]).to eq([:ru, :de, :en])
|
||||
expect(list[:ru]).to eq([:ru, :en])
|
||||
expect(list[:de]).to eq([:de, :en])
|
||||
expect(list[:en]).to eq([:en])
|
||||
expect(list[:en_US]).to eq([:en_US, :en])
|
||||
@@ -34,6 +34,7 @@ describe I18n::Backend::FallbackLocaleList do
|
||||
before do
|
||||
DiscoursePluginRegistry.register_locale("es_MX", fallbackLocale: "es")
|
||||
DiscoursePluginRegistry.register_locale("de_AT", fallbackLocale: "de")
|
||||
DiscoursePluginRegistry.register_locale("de_AT-formal", fallbackLocale: "de_AT")
|
||||
end
|
||||
|
||||
after do
|
||||
@@ -44,15 +45,27 @@ describe I18n::Backend::FallbackLocaleList do
|
||||
SiteSetting.default_locale = :en
|
||||
|
||||
expect(list[:de_AT]).to eq([:de_AT, :de, :en])
|
||||
expect(list[:"de_AT-formal"]).to eq([:"de_AT-formal", :de_AT, :de, :en])
|
||||
expect(list[:de]).to eq([:de, :en])
|
||||
expect(list[:en]).to eq([:en])
|
||||
end
|
||||
|
||||
it "works when default_locale is English (United States)" do
|
||||
SiteSetting.default_locale = :en_US
|
||||
|
||||
expect(list[:de_AT]).to eq([:de_AT, :de, :en])
|
||||
expect(list[:"de_AT-formal"]).to eq([:"de_AT-formal", :de_AT, :de, :en])
|
||||
expect(list[:de]).to eq([:de, :en])
|
||||
expect(list[:en]).to eq([:en])
|
||||
expect(list[:en_US]).to eq([:en_US, :en])
|
||||
end
|
||||
|
||||
it "works when default_locale is not English" do
|
||||
SiteSetting.default_locale = :de
|
||||
|
||||
expect(list[:es_MX]).to eq([:es_MX, :es, :de, :en])
|
||||
expect(list[:es]).to eq([:es, :de, :en])
|
||||
expect(list[:es_MX]).to eq([:es_MX, :es, :en])
|
||||
expect(list[:"de_AT-formal"]).to eq([:"de_AT-formal", :de_AT, :de, :en])
|
||||
expect(list[:es]).to eq([:es, :en])
|
||||
expect(list[:en]).to eq([:en])
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user