module I18n::Backend::Chain::Implementation
Attributes
backends[RW]
Public Class Methods
new(*backends)
click to toggle source
# File lib/i18n/backend/chain.rb, line 26 def initialize(*backends) self.backends = backends end
Public Instance Methods
available_locales()
click to toggle source
# File lib/i18n/backend/chain.rb, line 51 def available_locales backends.map { |backend| backend.available_locales }.flatten.uniq end
eager_load!()
click to toggle source
# File lib/i18n/backend/chain.rb, line 43 def eager_load! backends.each { |backend| backend.eager_load! } end
exists?(locale, key)
click to toggle source
# File lib/i18n/backend/chain.rb, line 75 def exists?(locale, key) backends.any? do |backend| backend.exists?(locale, key) end end
initialized?()
click to toggle source
# File lib/i18n/backend/chain.rb, line 30 def initialized? backends.all? do |backend| backend.instance_eval do return false unless initialized? end end true end
localize(locale, object, format = :default, options = EMPTY_HASH)
click to toggle source
# File lib/i18n/backend/chain.rb, line 81 def localize(locale, object, format = :default, options = EMPTY_HASH) backends.each do |backend| catch(:exception) do result = backend.localize(locale, object, format, options) and return result end end throw(:exception, I18n::MissingTranslation.new(locale, format, options)) end
reload!()
click to toggle source
# File lib/i18n/backend/chain.rb, line 39 def reload! backends.each { |backend| backend.reload! } end
store_translations(locale, data, options = EMPTY_HASH)
click to toggle source
# File lib/i18n/backend/chain.rb, line 47 def store_translations(locale, data, options = EMPTY_HASH) backends.first.store_translations(locale, data, options) end
translate(locale, key, default_options = EMPTY_HASH)
click to toggle source
# File lib/i18n/backend/chain.rb, line 55 def translate(locale, key, default_options = EMPTY_HASH) namespace = nil options = default_options.except(:default) backends.each do |backend| catch(:exception) do options = default_options if backend == backends.last translation = backend.translate(locale, key, options) if namespace_lookup?(translation, options) namespace = _deep_merge(translation, namespace || {}) elsif !translation.nil? || (options.key?(:default) && options[:default].nil?) return translation end end end return namespace if namespace throw(:exception, I18n::MissingTranslation.new(locale, key, options)) end
Protected Instance Methods
init_translations()
click to toggle source
# File lib/i18n/backend/chain.rb, line 91 def init_translations backends.each do |backend| backend.send(:init_translations) end end
namespace_lookup?(result, options)
click to toggle source
# File lib/i18n/backend/chain.rb, line 108 def namespace_lookup?(result, options) result.is_a?(Hash) && !options.has_key?(:count) end
translations()
click to toggle source
# File lib/i18n/backend/chain.rb, line 97 def translations backends.reverse.each_with_object({}) do |backend, memo| partial_translations = backend.instance_eval do init_translations unless initialized? translations end memo.deep_merge!(partial_translations) end end
Private Instance Methods
_deep_merge(hash, other_hash)
click to toggle source
This is approximately what gets used in ActiveSupport. However since we are not guaranteed to run in an ActiveSupport context it is wise to have our own copy. We underscore it to not pollute the namespace of the including class.
# File lib/i18n/backend/chain.rb, line 117 def _deep_merge(hash, other_hash) copy = hash.dup other_hash.each_pair do |k,v| value_from_other = hash[k] copy[k] = value_from_other.is_a?(Hash) && v.is_a?(Hash) ? _deep_merge(value_from_other, v) : v end copy end