4

MM 使用的技术堆栈中是否已经有一些东西可以为 JS 处理 i18n?例如,从一个文件中取出一个 javascript: 部分en.yml并将es.yml其作为translation.js文件提供 - 或类似的东西(我只知道它有时在 rails 中是如何完成的)。

Fwiw,https://github.com/fnando/i18n-js似乎是一个流行的 Rails 解决方案。我猜其中的 JS 部分会正常工作。我只是不确定如何将构建过程集成到 MM 堆栈中,以便生成所有文件并最终放置在正确的位置。

@tdreyno 建议:目前还没有,但看起来我们可以连接 Sprockets (JS) 和 I18n。

有没有人这样做或对如何进行有建议(对于那些在 Ruby/Rails 中过得去但还没有在 3.1 资产路径中挖掘但不害怕尝试的人)。

4

2 回答 2

1

我只是在考虑解决完全相同的问题。所以这是我的解决方案:

source/layouts/layout.html.slim

javascript:
  var I18n = {};
  I18n.locale = 'fr';
  I18n.translations = {};
  I18n.translations['fr'] = #{I18n.backend.send(:translations)[:fr].to_json};

然后在 JS 中访问翻译就像这样简单:

I18n.translations.fr['menu']['glossaire']
#=> "Glossaire"
于 2015-05-24T19:35:30.820 回答
0

caedes 的解决方案简单易行,但在我的情况下,我希望能够使用一些i18n-js更复杂的功能,例如字符串插值,而不仅仅是拥有一组嵌套字典。

幸运的是,i18n-js可以从字典中阅读。我安装i18n-js了 browserify,将其全局导入window.I18n = require('i18n-js');并添加了部分_i18n_js.slim

javascript:
  I18n.translations = #{I18n.backend.send(:translations).to_json};

然后你就可以使用优秀的所有功能了i18n-js

于 2016-06-16T18:47:11.770 回答