Module: I18n::Backend::Simple::Implementation

Includes:
Base
Included in:
I18n::Backend::Simple
Defined in:
lib/i18n/backend/simple.rb

Constant Summary collapse

MUTEX =

Mutex to ensure that concurrent translations loading will be thread-safe

Mutex.new

Constants included from Transliterator

Transliterator::DEFAULT_REPLACEMENT_CHAR

Instance Method Summary collapse

Methods included from Base

#exists?, #load_translations, #localize, #translate

Methods included from Transliterator

get, #transliterate

Instance Method Details

#available_localesObject

Get available locales from the translations hash



49
50
51
52
53
54
55
# File 'lib/i18n/backend/simple.rb', line 49

def available_locales
  init_translations unless initialized?
  translations.inject([]) do |locales, (locale, data)|
    locales << locale unless data.size <= 1 && (data.empty? || data.has_key?(:i18n))
    locales
  end
end

#eager_load!Object



64
65
66
67
# File 'lib/i18n/backend/simple.rb', line 64

def eager_load!
  init_translations unless initialized?
  super
end

#initialized?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/i18n/backend/simple.rb', line 28

def initialized?
  @initialized ||= false
end

#reload!Object

Clean up translations hash and set initialized to false on reload!



58
59
60
61
62
# File 'lib/i18n/backend/simple.rb', line 58

def reload!
  @initialized = false
  @translations = nil
  super
end

#store_translations(locale, data, options = EMPTY_HASH) ⇒ Object

Stores translations for the given locale in memory. This uses a deep merge for the translations hash, so existing translations will be overwritten by new ones only at the deepest level of the hash.



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/i18n/backend/simple.rb', line 36

def store_translations(locale, data, options = EMPTY_HASH)
  if I18n.enforce_available_locales &&
    I18n.available_locales_initialized? &&
    !I18n.locale_available?(locale)
    return data
  end
  locale = locale.to_sym
  translations[locale] ||= Concurrent::Hash.new
  data = Utils.deep_symbolize_keys(data) unless options.fetch(:skip_symbolize_keys, false)
  Utils.deep_merge!(translations[locale], data)
end

#translations(do_init: false) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/i18n/backend/simple.rb', line 69

def translations(do_init: false)
  # To avoid returning empty translations,
  # call `init_translations`
  init_translations if do_init && !initialized?

  @translations ||= Concurrent::Hash.new do |h, k|
    MUTEX.synchronize do
      h[k] = Concurrent::Hash.new
    end
  end
end