Rails 3.2中显式重新加载资产

3

我正在使用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}')]

目前为止,一切顺利,然而,在“dev mode”下重新加载页面后,yaml文件中添加的新翻译无法自动在客户端上使用。如果我重新启动服务器并更改相应的翻译资源(例如添加空行),则可以使用新翻译。这个例程相当繁琐...

  1. 如何明确地告诉资产管道/ sprockets每个请求重新处理我的翻译资产?或者更好的是,是否有(简单的)解决方案来监视yaml文件并告诉sprockets重新处理翻译资产?
  2. 当新的翻译添加到新的或现有的yaml文件中时,Rails似乎不会自动更新i18n翻译哈希表。我不知道为什么,但通常应该起作用。任何线索?
2个回答

1

Rails 4.x

我在使用I18n.js时遇到了问题,无法在更改后重新加载文件。

根据文档,我发现即使我的应用程序中未禁用资产管道,我也必须运行rake i18n:js:setup

更改后,在config目录中现在有一个I18n-js.yml文件,我进行更改并运行rake i18n:js:export,一切正常。

希望这能帮助别人。


1
  1. 我没有看到每个请求重新加载的可能性。我认为这需要在i18n-js gem中解决。删除tmp/i18n-js.cache没有帮助。你可以调用rake i18n:js:export,它应该重新加载js输出。结合guard,你可以自己进行重新加载。

  2. rails缺少新的翻译文件,但是向现有文件添加翻译应该是可行的。你也可以使用I18n.backend.reload!来强制重新加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接