Служить статическим файлом JSON для переводов
Я использую ember-i18n
для переводов, и я пытаюсь получить переводы вживую, как описано в вики ember-i18n. Вместо того, чтобы загружать переводы из бэкэнда, я бы загружал их из статического файла. Я разместил файлы 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"
}
В dev это работает как шарм, но у меня есть некоторые проблемы с запуском тестов. Полученный json содержит содержимое lang.json
файл, но он не загружен в i18n
служба (например, если я запускаю тест с -s
я вижу missing translation xxx
везде.
Кроме того, выполнение теста становится все медленнее и медленнее, и после 10-15 тестов оно выдает ошибки тайм-аута.
Я делаю что-то, что не должно быть сделано, или я что-то упускаю? Спасибо
Я использую:
Ember-Cli: 2.6.2
Ember: ~ 2.6.0
ember-i18n: ~ 4.2.1
1 ответ
Просто для концепции (для вашего репо)
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