Явная перезагрузка ресурса в Rails 3.2 - PullRequest
3 голосов
/ 27 января 2012

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

//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 / locales / и его подкаталогах. Я настроил путь загрузки следующим образом:

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

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

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

Ответы [ 2 ]

1 голос
/ 02 сентября 2014

Рельсы 4.x

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

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

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

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

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

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

...