我正在使用BackboneJS和RoR 3.2(从3.1升级)后端构建单页ajax应用程序。我使用客户端I18n javascript翻译库将其数据保存在JSON对象中。我正在使用yml文件和默认的i18n gem来管理后端的翻译。 我每种语言都有一个翻译资产,例如英语:
//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文件的新翻译不会自动在客户端上可用。只有在我重新启动服务器并对相应的翻译资产进行更改(例如添加空白行)时,才能使用新的翻译。这个例程非常繁琐......
答案 0 :(得分:1)
我没有看到每次请求都重新加载它的可能性。我认为这需要在i18n-js gem中解决。删除tmp/i18n-js.cache
没有帮助。你能做的就是调用rake i18n:js:export
来重新加载js输出。结合守卫,你可以自己重装。
rails错过了新的翻译文件,但是将翻译添加到现有文件应该有效。你也可以用I18n.backend.reload!
答案 1 :(得分:1)
Rails 4.x
我无法让I18n.js在更改后重新加载文件。
在docs之后,我发现我必须运行rake i18n:js:setup
,即使我的应用中未禁用资产管道。
在更改之后,现在在config目录中使用I18n-js.yml文件,我进行了更改并运行rake i18n:js:export
并且一切正常。
希望这有助于某人。