class I18n::Railtie

def self.include_fallbacks_module

def self.include_fallbacks_module
  I18n.backend.class.send(:include, I18n::Backend::Fallbacks)
end

def self.init_fallbacks(fallbacks)

def self.init_fallbacks(fallbacks)
  include_fallbacks_module
  args = case fallbacks
  when ActiveSupport::OrderedOptions
    [*(fallbacks[:defaults] || []) << fallbacks[:map]].compact
  when Hash, Array
    Array.wrap(fallbacks)
  else # TrueClass
    []
  end
  I18n.fallbacks = I18n::Locale::Fallbacks.new(*args)
end

def self.initialize_i18n(app)

Setup i18n configuration
def self.initialize_i18n(app)
  return if @i18n_inited
  fallbacks = app.config.i18n.delete(:fallbacks)
  app.config.i18n.each do |setting, value|
    case setting
    when :railties_load_path
      app.config.i18n.load_path.unshift(*value)
    when :load_path
      I18n.load_path += value
    else
      I18n.send("#{setting}=", value)
    end
  end
  init_fallbacks(fallbacks) if fallbacks && validate_fallbacks(fallbacks)
  reloader_paths.concat I18n.load_path
  reloader.execute
  @i18n_inited = true
end

def self.reloader

def self.reloader
  @reloader ||= ActiveSupport::FileUpdateChecker.new(reloader_paths){ I18n.reload! }
end

def self.reloader_paths

def self.reloader_paths
  @reloader_paths ||= []
end

def self.validate_fallbacks(fallbacks)

def self.validate_fallbacks(fallbacks)
  case fallbacks
  when ActiveSupport::OrderedOptions
    !fallbacks.empty?
  when TrueClass, Array, Hash
    true
  else
    raise "Unexpected fallback type #{fallbacks.inspect}"
  end
end