Skip to content

Commit

Permalink
Don't store translations for locales not set as available
Browse files Browse the repository at this point in the history
  • Loading branch information
chipairon authored and stereobooster committed Nov 3, 2017
1 parent 11b671e commit f64088a
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/i18n.rb
Expand Up @@ -293,6 +293,12 @@ def enforce_available_locales!(locale)
end
end

def available_locales_initialized?
config.available_locales_initialized?
end

# making these private until Ruby 1.9.2 can send to protected methods again
# see http://redmine.ruby-lang.org/repositories/revision/ruby-19?rev=24280
private

# Any exceptions thrown in translate will be sent to the @@exception_handler
Expand Down
5 changes: 5 additions & 0 deletions lib/i18n/backend/simple.rb
Expand Up @@ -29,6 +29,11 @@ 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? &&
I18n.available_locales.include?(locale.to_sym) == false &&
I18n.available_locales.include?(locale.to_s) == false
return translations
end
locale = locale.to_sym
translations[locale] ||= {}
data = data.deep_symbolize_keys
Expand Down
5 changes: 5 additions & 0 deletions lib/i18n/config.rb
Expand Up @@ -57,6 +57,11 @@ def available_locales=(locales)
@@available_locales = nil if @@available_locales.empty?
@@available_locales_set = nil
end

# Returns true if the available_locales have been initialized
def available_locales_initialized?
( !!defined?(@@available_locales) && !!@@available_locales )
end

# Clears the available locales set so it can be recomputed again after I18n
# gets reloaded.
Expand Down
8 changes: 8 additions & 0 deletions test/backend/simple_test.rb
Expand Up @@ -70,6 +70,14 @@ 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
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]
end

# reloading translations

test "simple reload_translations: unloads translations" do
Expand Down

0 comments on commit f64088a

Please sign in to comment.