From 741845cfec0701a0240ed320b0e29a915a7f2dc1 Mon Sep 17 00:00:00 2001 From: Ryan Bigg Date: Wed, 15 Jul 2020 10:05:16 +1000 Subject: [PATCH] Always instantiate I18n::Locale::Fallbacks objects when using I18n.fallbacks= --- lib/i18n/backend/fallbacks.rb | 2 +- test/backend/fallbacks_test.rb | 19 +++++++++++++++++++ test/locale/fallbacks_test.rb | 7 +++++++ test/test_helper.rb | 1 + 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/i18n/backend/fallbacks.rb b/lib/i18n/backend/fallbacks.rb index 7188a82c..40ff1220 100644 --- a/lib/i18n/backend/fallbacks.rb +++ b/lib/i18n/backend/fallbacks.rb @@ -20,7 +20,7 @@ def fallbacks # Sets the current fallbacks implementation. Use this to set a different fallbacks implementation. def fallbacks=(fallbacks) - @@fallbacks = fallbacks + @@fallbacks = fallbacks.is_a?(I18n::Locale::Fallbacks) ? fallbacks : I18n::Locale::Fallbacks.new(fallbacks) end end diff --git a/test/backend/fallbacks_test.rb b/test/backend/fallbacks_test.rb index b7246877..688efd4a 100644 --- a/test/backend/fallbacks_test.rb +++ b/test/backend/fallbacks_test.rb @@ -109,6 +109,25 @@ def setup end end +# See Issue #534 +class I18nBackendFallbacksLocalizeTestWithDefaultLocale < I18n::TestCase + class Backend < I18n::Backend::Simple + include I18n::Backend::Fallbacks + end + + def setup + super + I18n.backend = Backend.new + I18n.enforce_available_locales = false + I18n.fallbacks = [I18n.default_locale] + store_translations(:en, time: { formats: { long: 'en fallback' } }) + end + + test "falls back to default locale - Issue #534" do + assert_equal 'en fallback', I18n.l(Time.now, format: :long, locale: "un-supported") + end +end + class I18nBackendFallbacksLocalizeTest < I18n::TestCase class Backend < I18n::Backend::Simple include I18n::Backend::Fallbacks diff --git a/test/locale/fallbacks_test.rb b/test/locale/fallbacks_test.rb index 8e2a2b47..dbfca921 100644 --- a/test/locale/fallbacks_test.rb +++ b/test/locale/fallbacks_test.rb @@ -22,6 +22,13 @@ class I18nFallbacksDefaultsTest < I18n::TestCase assert_equal [:"de-CH", :de, :"en-GB", :en], fallbacks[:"de-CH"] end + test "explicit fallback to default locale" do + I18n.default_locale = :"en-US" + fallbacks = Fallbacks.new([:"en-US"]) + assert_equal [:"de-AT", :de, :"en-US", :en], fallbacks[:"de-AT"] + assert_equal [:"de-CH", :de, :"en-US", :en], fallbacks[:"de-CH"] + end + test "defaults reflect a manually passed default locale if any" do fallbacks = Fallbacks.new(:'fi-FI') assert_equal [:'fi-FI', :fi], fallbacks.defaults diff --git a/test/test_helper.rb b/test/test_helper.rb index d4a8488f..8477fef5 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -34,6 +34,7 @@ def teardown I18n.backend = nil I18n.default_separator = nil I18n.enforce_available_locales = true + I18n.fallbacks = nil super end