0

我正在使用ember-i18n翻译,我正在尝试按照ember-i18n wiki中的描述实时获取翻译, 而不是从后端加载翻译,而是从静态文件加载它们。我已将文件放在文件lang.json夹中/public/i18n/,并使用服务检索它们:

export default Ember.Service.extend({
  ajax: inject.service(),  // ember-ajax service
  i18n: inject.service(),

  fetch(lang) {
    if (isEmpty(lang) || !ENV.APP.languages.contains(lang)) {
      lang = "en";
    }
    let url = "http://" + window.location.host + "/i18n/" + lang + ".json";
    return new Ember.RSVP.Promise((resolve, reject) => {
      this.get("ajax").request(url, {
        type: "GET"
      }).then((json) => {
        this.get('i18n').addTranslations(lang, json);
        resolve(lang);
      }, (params) => {
        Ember.Logger.debug(params);
        reject();
      });
    });
  }
});

lang.json 文件只包含 json:

{
  "key.foo": "Foo",
  "key.bar": "Bar"
}

在开发中它就像一个魅力,但我在运行测试时遇到了一些问题。检索到的 json 包含lang.json文件的内容,但它没有加载到i18n服务中(例如,如果我运行测试,-s我看到missing translation xxx到处都可以看到。

此外,测试执行变得越来越慢,并且在 10-15 次测试之后,它会抛出超时错误。

我是在做一些不应该做的事情,还是我错过了什么?谢谢

我正在使用:
ember-cli:2.6.2
ember:~2.6.0
ember-i18n:~4.2.1

4

1 回答 1

0

只是为了概念(为了你的回购) 1)我打开tests/index.html并修改它的下一个方式

<script src="assets/vendor.js"></script>
<!-- Next was added -->
<script>
  var translations;
  $.getJSON('/i18n/en.json').then(function(data){ translations = data; });
</script>

2) 内部app/mirage/config.js

export default function() {
  this.get("/i18n/:lang", function() {
    return window.translations;
  });
}

我在此处更改的 Git diff http://pastebin.com/eGwAXM77

于 2016-07-17T15:45:42.200 回答