From 596a71d6bb536ea0b1e8087ad9d40d18eb8d375e Mon Sep 17 00:00:00 2001 From: Will Jordan Date: Mon, 12 Feb 2018 15:57:02 -0800 Subject: [PATCH] store translations for unavailable locales if enforce_available_locales is false Fixes #404 --- lib/i18n/backend/simple.rb | 3 ++- test/backend/simple_test.rb | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/i18n/backend/simple.rb b/lib/i18n/backend/simple.rb index 7c7f4ebb..4744130f 100644 --- a/lib/i18n/backend/simple.rb +++ b/lib/i18n/backend/simple.rb @@ -29,7 +29,8 @@ def initialized? # translations will be overwritten by new ones only at the deepest # level of the hash. def store_translations(locale, data, options = {}) - if I18n.available_locales_initialized? && + if I18n.enforce_available_locales && + I18n.available_locales_initialized? && !I18n.available_locales.include?(locale.to_sym) && !I18n.available_locales.include?(locale.to_s) return data diff --git a/test/backend/simple_test.rb b/test/backend/simple_test.rb index c24ff753..be5715f5 100644 --- a/test/backend/simple_test.rb +++ b/test/backend/simple_test.rb @@ -70,12 +70,23 @@ def setup assert_equal Hash[:'en', {:foo => {:bar => 'bar', :baz => 'baz'}}], translations end - test "simple store_translations: do not store translations for locales not explicitly marked as available" do + test "simple store_translations: do not store translations unavailable locales if enforce_available_locales is true" do + begin + I18n.enforce_available_locales = true + I18n.available_locales = [:en, :es] + store_translations(:fr, :foo => {:bar => 'barfr', :baz => 'bazfr'}) + store_translations(:es, :foo => {:bar => 'bares', :baz => 'bazes'}) + assert_nil translations[:fr] + assert_equal Hash[:foo, {:bar => 'bares', :baz => 'bazes'}], translations[:es] + ensure + I18n.config.enforce_available_locales = false + end + end + + test "simple store_translations: store translations for unavailable locales if enforce_available_locales is false" do I18n.available_locales = [:en, :es] store_translations(:fr, :foo => {:bar => 'barfr', :baz => 'bazfr'}) - store_translations(:es, :foo => {:bar => 'bares', :baz => 'bazes'}) - assert_nil translations[:fr] - assert_equal Hash[:foo, {:bar => 'bares', :baz => 'bazes'}], translations[:es] + assert_equal Hash[:foo, {:bar => 'barfr', :baz => 'bazfr'}], translations[:fr] end # reloading translations