3

Я создаю одностраничное приложение ajax с BackboneJS и RoR 3.2 (обновлено с 3.1). Я использую библиотеку переводов javascript на стороне клиента I18n, которая хранит свои данные в объекте JSON. Я управляю переводами в бэкэнд с помощью yml-файлов и по умолчанию i18n gem. У меня есть один вариант перевода активов на язык, например английский язык:Явная перезагрузка актива в Rails 3.2

//FILE: <project_root>/app/assets/javascripts/translations/en.js.erb: 
I18n || (I18n = {}); 
I18n.translations || (I18n.translations= {}); 
I18n.translations["en"] = <%= I18n.with_locale(:en) { I18n.t(".") }.to_json %>; 

Мои переводы находятся под конфигурационными/локалей/и его подкаталогов. Я настроил путь нагрузки следующим образом:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')] 

До сих пор так хорошо, все работает отлично, однако, новые переводы добавлены в YAML файлы не будут автоматически доступны на клиенте после перезагрузки страницы в режиме разработчика. Новые переводы доступны только в том случае, если я перезапущу сервер и сделаю изменение в соответствующем активе перевода (например, добавив пустую строку). Эта процедура довольно утомительна ...

  1. Как я могу прямо указать конвейер/звездочки активов для обработки моих активов перевода по каждому запросу? Или, что еще лучше, есть ли (простое) решение для мониторинга файлов yaml и передачи звездочек для переработки активов перевода?
  2. Rails как-то не обновляет хеш перевода i18n, когда новые переводы добавляются в новые или существующие файлы yaml. Я не знаю, почему, но это должно нормально работать. Любая подсказка?

ответ

1
  1. я не видел возможности перезарядить его на каждом запросе. Я думаю, что это необходимо решить в i18n-js gem. удаление tmp/i18n-js.cache не помогло. то, что вы можете сделать, это позвонить rake i18n:js:export, который должен перезагрузить js-выход. в сочетании с охраной, вы могли бы перезагрузить себя.

  2. рельсы пропускает новые файлы переводов, но добавление переводов в существующий файл должно работать. Вы также можете заставить его I18n.backend.reload!

1

Rails 4.x

Я возникли проблемы при получении I18n.js перезагрузить файлы после внесения изменений.

После docs я обнаружил, что мне нужно было запустить rake i18n:js:setup, даже если конвейер активов не отключен в моем приложении.

После этого изменения, с файлом I18n-js.yml теперь в каталоге конфигурации, я делаю свои изменения и запускаю rake i18n:js:export и все работает.

Надеюсь, это поможет кому-то.