Автоматически перезагружать файлы yails rails в config/locales

В рельсах файлы yml в config/locales позволяют вам указывать директивы для текста и форматирования, относящиеся к языку. Например, вы можете указать форматирование даты следующим образом:

# config/locales/en.yml
  date: 
    formats:
      month: "%B, %Y"

Затем в ваших представлениях вы можете использовать помощник, например:

<%= l(Date.today, format: :month) %> => "December, 2013"

Раздражающе, рельсы загружают только файлы локали при запуске вашего сервера, поэтому вам нужно перезапустить сервер разработки, если вы хотите внести изменения. Можно ли автоматически перезагрузить это при изменении файла?

Ответ 1

Я думаю, что Rails пропускает новые файлы перевода, но добавление переводов в существующий файл должно работать.

Попробуйте перезагрузить его с помощью I18n.backend.reload!

Я надеюсь, что это поможет;)

Ответ 2

Там была попытка поддержать это в рельсах 3.2:

https://github.com/rails/rails/blob/v3.2.16/activesupport/lib/active_support/i18n_railtie.rb

Однако он приходит с этим отказом:

# Add <tt>I18n::Railtie.reloader</tt> to ActionDispatch callbacks. Since, at this
# point, no path was added to the reloader, I18n.reload! is not triggered
# on to_prepare callbacks. This will only happen on the config.after_initialize
# callback below.

Там какой-то лучший код в рельсах 4, поэтому эта проблема может быть исправлена ​​там (пока я еще не использую рельсы 4).

Я добавил следующий инициализатор, который проверяет измененные файлы config/locales и перезагружает I18n:

# config/initializers/reload_locale.rb
if Rails.env == 'development'
  locale_reloader = ActiveSupport::FileUpdateChecker.new(Dir["config/locales/*yml"]) do
     I18n.backend.reload!
  end

  ActionDispatch::Callbacks.to_prepare do
    locale_reloader.execute_if_updated
  end
end