Module: I18n::Backend::Chain::Implementation

Includes:
Base
Included in:
I18n::Backend::Chain
Defined in:
lib/i18n/backend/chain.rb

Constant Summary

Constants included from Transliterator

Transliterator::DEFAULT_REPLACEMENT_CHAR

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Base

#load_translations

Methods included from Transliterator

get, #transliterate

Instance Attribute Details

#backendsObject

Returns the value of attribute backends.



23
24
25
# File 'lib/i18n/backend/chain.rb', line 23

def backends
  @backends
end

Instance Method Details

#available_localesObject



37
38
39
# File 'lib/i18n/backend/chain.rb', line 37

def available_locales
  backends.map { |backend| backend.available_locales }.flatten.uniq
end

#exists?(locale, key) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
64
65
# File 'lib/i18n/backend/chain.rb', line 61

def exists?(locale, key)
  backends.any? do |backend|
    backend.exists?(locale, key)
  end
end

#initialize(*backends) ⇒ Object



25
26
27
# File 'lib/i18n/backend/chain.rb', line 25

def initialize(*backends)
  self.backends = backends
end

#localize(locale, object, format = :default, options = EMPTY_HASH) ⇒ Object



67
68
69
70
71
72
73
74
# File 'lib/i18n/backend/chain.rb', line 67

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!Object



29
30
31
# File 'lib/i18n/backend/chain.rb', line 29

def reload!
  backends.each { |backend| backend.reload! }
end

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



33
34
35
# File 'lib/i18n/backend/chain.rb', line 33

def store_translations(locale, data, options = EMPTY_HASH)
  backends.first.store_translations(locale, data, options)
end

#translate(locale, key, default_options = EMPTY_HASH) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/i18n/backend/chain.rb', line 41

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