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

[View source]

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

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

.init_fallbacks(fallbacks) ⇒ Object

[View source]

84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/active_support/i18n_railtie.rb', line 84

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
      [I18n.default_locale]
    end

  if args.empty? || args.first.is_a?(Hash)
    ActiveSupport::Deprecation.warn(<<-MSG.squish)
      Using I18n fallbacks with an empty `defaults` sets the defaults to
      include the `default_locale`. This behavior will change in Rails 6.1.
      If you desire the default locale to be included in the defaults, please
      explicitly configure it with `config.i18n.fallbacks.defaults =
      [I18n.default_locale]` or `config.i18n.fallbacks = [I18n.default_locale,
      {...}]`. If you want to opt-in to the new behavior, use
      `config.i18n.fallbacks.defaults = [nil, {...}]`.
    MSG
    args.unshift I18n.default_locale
  end

  I18n.fallbacks = I18n::Locale::Fallbacks.new(*args)
end

.initialize_i18n(app) ⇒ Object

Setup i18n configuration.

[View source]

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
78
# File 'lib/active_support/i18n_railtie.rb', line 34

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.flat_map(&:existent))
    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.flat_map(&:existent)

    I18n.reload!
  end

  app.reloaders << reloader
  app.reloader.to_run do
    reloader.execute_if_updated { require_unload_lock! }
  end
  reloader.execute

  @i18n_inited = true
end

.validate_fallbacks(fallbacks) ⇒ Object

[View source]

113
114
115
116
117
118
119
120
121
122
# File 'lib/active_support/i18n_railtie.rb', line 113

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

[View source]

124
125
126
127
128
# File 'lib/active_support/i18n_railtie.rb', line 124

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