Автоматическая перезагрузка файлов rails yml в config/locales

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

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

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

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

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

2 ответов


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

попробуйте принудительно перезагрузить его с I18n.backend.reload!

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


есть попытка поддержки этого в rails 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.

в rails 4 есть более красивый код, поэтому эта проблема может быть исправлена (я еще не использую rails 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