aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorKasper Timm Hansen <kaspth@gmail.com>2015-08-10 07:34:13 +0200
committerKasper Timm Hansen <kaspth@gmail.com>2015-08-10 07:34:13 +0200
commita0fa45c0e67761d53fb94b29ac7d0a0f6378904a (patch)
tree78a0b1dbffc1c98b660712e8986ed5a851162f31 /activesupport
parent67b07f809b4621aefe1956c2fa23646fee230ccc (diff)
parentf50e90a1aeaee0e1e907e51cd2a9349d0af2c087 (diff)
downloadrails-a0fa45c0e67761d53fb94b29ac7d0a0f6378904a.tar.gz
rails-a0fa45c0e67761d53fb94b29ac7d0a0f6378904a.tar.bz2
rails-a0fa45c0e67761d53fb94b29ac7d0a0f6378904a.zip
Merge pull request #21124 from kirs/feature/reload-i18n
Reload I18n.load_path in development
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/i18n_railtie.rb19
1 files changed, 17 insertions, 2 deletions
diff --git a/activesupport/lib/active_support/i18n_railtie.rb b/activesupport/lib/active_support/i18n_railtie.rb
index 95f3f6255a..6775eec34b 100644
--- a/activesupport/lib/active_support/i18n_railtie.rb
+++ b/activesupport/lib/active_support/i18n_railtie.rb
@@ -37,10 +37,12 @@ module I18n
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
- app.config.i18n.load_path.unshift(*value)
+ reloadable_paths = value
+ app.config.i18n.load_path.unshift(*value.map(&:existent).flatten)
when :load_path
I18n.load_path += value
else
@@ -53,7 +55,14 @@ module I18n
# Restore available locales check so it will take place from now on.
I18n.enforce_available_locales = enforce_available_locales
- reloader = ActiveSupport::FileUpdateChecker.new(I18n.load_path.dup){ I18n.reload! }
+ directories = watched_dirs_with_extensions(reloadable_paths)
+ reloader = ActiveSupport::FileUpdateChecker.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
ActionDispatch::Reloader.to_prepare do
reloader.execute_if_updated
@@ -96,5 +105,11 @@ module I18n
raise "Unexpected fallback type #{fallbacks.inspect}"
end
end
+
+ def self.watched_dirs_with_extensions(paths)
+ paths.each_with_object({}) do |path, result|
+ result[path.absolute_current] = path.extensions
+ end
+ end
end
end