module I18n::Backend::Chain::Implementation

Attributes

Public Class Methods

# File lib/i18n/backend/chain.rb, line 27
def initialize(*backends)
  self.backends = backends
end

Public Instance Methods

# File lib/i18n/backend/chain.rb, line 52
def available_locales
  backends.map { |backend| backend.available_locales }.flatten.uniq
end
# File lib/i18n/backend/chain.rb, line 44
def eager_load!
  backends.each { |backend| backend.eager_load! }
end
# File lib/i18n/backend/chain.rb, line 76
def exists?(locale, key, options = EMPTY_HASH)
  backends.any? do |backend|
    backend.exists?(locale, key, options)
  end
end
# File lib/i18n/backend/chain.rb, line 31
def initialized?
  backends.all? do |backend|
    backend.instance_eval do
      return false unless initialized?
    end
  end
  true
end
# File lib/i18n/backend/chain.rb, line 82
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
# File lib/i18n/backend/chain.rb, line 40
def reload!
  backends.each { |backend| backend.reload! }
end
# File lib/i18n/backend/chain.rb, line 48
def store_translations(locale, data, options = EMPTY_HASH)
  backends.first.store_translations(locale, data, options)
end
# File lib/i18n/backend/chain.rb, line 56
def translate(locale, key, default_options = EMPTY_HASH)
  namespace = nil
  options = Utils.except(default_options, :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

# File lib/i18n/backend/chain.rb, line 92
def init_translations
  backends.each do |backend|
    backend.send(:init_translations)
  end
end
# File lib/i18n/backend/chain.rb, line 108
def namespace_lookup?(result, options)
  result.is_a?(Hash) && !options.has_key?(:count)
end
# File lib/i18n/backend/chain.rb, line 98
def translations
  backends.reverse.each_with_object({}) do |backend, memo|
    partial_translations = backend.instance_eval do
      init_translations unless initialized?
      translations
    end
    Utils.deep_merge!(memo, partial_translations) { |_, a, b| b || a }
  end
end