class I18n::Locale::Fallbacks

def [](locale)

def [](locale)
  raise InvalidLocale.new(locale) if locale.nil?
  raise Disabled.new('fallback#[]') if locale == false
  locale = locale.to_sym
  super || store(locale, compute(locale))
end

def compute(tags, include_defaults = true, exclude = [])

def compute(tags, include_defaults = true, exclude = [])
  result = []
  Array(tags).each do |tag|
    tags = I18n::Locale::Tag.tag(tag).self_and_parents.map! { |t| t.to_sym } - exclude
    result += tags
    tags.each { |_tag| result += compute(@map[_tag], false, exclude + result) if @map[_tag] }
  end
  result.push(*defaults) if include_defaults
  result.uniq!
  result.compact!
  result
end

def defaults=(defaults)

def defaults=(defaults)
  @defaults = defaults.flat_map { |default| compute(default, false) }
end

def empty?

def empty?
  @map.empty? && @defaults.empty?
end

def initialize(*mappings)

def initialize(*mappings)
  @map = {}
  map(mappings.pop) if mappings.last.is_a?(Hash)
  self.defaults = mappings.empty? ? [] : mappings
end

def inspect

def inspect
 "#<#{self.class.name} @map=#{@map.inspect} @defaults=#{@defaults.inspect}>"
end

def map(*args, &block)

def map(*args, &block)
  if args.count == 1 && !block_given?
    mappings = args.first
    mappings.each do |from, to|
      from, to = from.to_sym, Array(to)
      to.each do |_to|
        @map[from] ||= []
        @map[from] << _to.to_sym
      end
    end
  else
    @map.map(*args, &block)
  end
end