Class: I18n::Railtie

Inherits:
Rails::Railtie
  • Object
show all
Defined in:
lib/active_support/i18n_railtie.rb

Class Method Summary collapse

Class Method Details

.include_fallbacks_moduleObject



79
80
81
# File 'lib/active_support/i18n_railtie.rb', line 79

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

.init_fallbacks(fallbacks) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/active_support/i18n_railtie.rb', line 83

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

.initialize_i18n(app) ⇒ Object

Setup i18n configuration.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/active_support/i18n_railtie.rb', line 29

def self.initialize_i18n(app)
  return if @i18n_inited

  fallbacks = app.config.i18n.delete(:fallbacks)

  # Avoid issues with setting the default_locale by disabling available locales
  # check while configuring.
  enforce_available_locales = app.config.i18n.delete(:enforce_available_locales)
  enforce_available_locales = I18n.enforce_available_locales if enforce_available_locales.nil?
  I18n.enforce_available_locales = false

  reloadable_paths = []
  app.config.i18n.each do |setting, value|
    case setting
    when :railties_load_path
      reloadable_paths = value
      app.config.i18n.load_path.unshift(*value.map(&:existent).flatten)
    when :load_path
      I18n.load_path += value
    else
      I18n.send("#{setting}=", value)
    end
  end

  init_fallbacks(fallbacks) if fallbacks && validate_fallbacks(fallbacks)

  # Restore available locales check so it will take place from now on.
  I18n.enforce_available_locales = enforce_available_locales

  directories = watched_dirs_with_extensions(reloadable_paths)
  reloader = app.config.file_watcher.new(I18n.load_path.dup, directories) do
    I18n.load_path.keep_if { |p| File.exist?(p) }
    I18n.load_path |= reloadable_paths.map(&:existent).flatten

    I18n.reload!
  end

  app.reloaders << reloader
  app.reloader.to_run do
    reloader.execute_if_updated { require_unload_lock! }
    # TODO: remove the following line as soon as the return value of
    # callbacks is ignored, that is, returning `false` does not
    # display a deprecation warning or halts the callback chain.
    true
  end
  reloader.execute

  @i18n_inited = true
end

.validate_fallbacks(fallbacks) ⇒ Object



99
100
101
102
103
104
105
106
107
108
# File 'lib/active_support/i18n_railtie.rb', line 99

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

.watched_dirs_with_extensions(paths) ⇒ Object



110
111
112
113
114
# File 'lib/active_support/i18n_railtie.rb', line 110

def self.watched_dirs_with_extensions(paths)
  paths.each_with_object({}) do |path, result|
    result[path.absolute_current] = path.extensions
  end
end