我对 DevExtreme v.16.1 与 Globalize 1.x 的结合有疑问。他们从 0.x 升级到 1.x,自从更新后我无法让它工作。
我将库的加载放在一个外部文件中,并在 promise 解决后加载应用程序的其余部分。
这是我 localize.js 的重要部分
$(function () {
MK.localisation.init = $.when(
// CLDR libraries for NL-nl
$.getJSON("js/localization/nl/ca-gregorian.json"),
$.getJSON("js/localization/nl/numbers.json"),
$.getJSON("js/localization/nl/currencies.json"),
// CLDR libraries for DE-de
$.getJSON("js/localization/de/ca-gregorian.json"),
$.getJSON("js/localization/de/numbers.json"),
$.getJSON("js/localization/de/currencies.json"),
// CLDR libraries for EN-uk
$.getJSON("js/localization/en/ca-gregorian.json"),
$.getJSON("js/localization/en/numbers.json"),
$.getJSON("js/localization/en/currencies.json"),
//additional CLDR libraries
$.getJSON("js/cldr/supplemental/likelySubtags.json"),
$.getJSON("js/cldr/supplemental/timeData.json"),
$.getJSON("js/cldr/supplemental/weekData.json"),
$.getJSON("js/cldr/supplemental/currencyData.json"),
$.getJSON("js/cldr/supplemental/numberingSystems.json")
).then(function () {
// Normalize $.get results, we only need the JSON, not the request statuses.
return [].slice.apply(arguments, [0]).map(function (result) {
return result[0];
});
}).then(
Globalize.load
).then(function () {
return $.when(
$.getJSON("js/localization/nl/dx.all.nl.json"),
$.getJSON("js/localization/nl/localization.nl.json"),
$.getJSON("js/localization/de/dx.all.de.json"),
$.getJSON("js/localization/de/localization.de.json"),
$.getJSON("js/localization/en/dx.all.en.json"),
$.getJSON("js/localization/en/localization.en.json")
).done(function (r1,r2,r3,r4,r5,r6) {
Globalize.loadMessages(r1[0]);
Globalize.loadMessages(r2[0]);
Globalize.loadMessages(r3[0]);
Globalize.loadMessages(r4[0]);
Globalize.loadMessages(r5[0]);
Globalize.loadMessages(r6[0]);
Globalize.locale("nl");
$.each(MK.config.navigation, function () {
if (this.title.indexOf('@') === 0) {
this.title = Globalize.formatMessage(this.title.substring(1));
}
});
});
});
如果我在 Globalize.locale("nl") 处设置断点,我会看到所有消息都加载到 Globalize 对象中。
我通过以下方式在 index.js 的顶部调用此函数:
$(function () {
//setup localisation
MK.localisation.init.done(function () {
Globalize.locale("de");
//rest of the app decalration follows here
})
我也可以毫无问题地在 JavaScript 中使用翻译
Globalize.formatMessage("someString")
但是,不会翻译 DevExtreme 模块。他们仍然使用英语。也可以使用@someString 语法让字符串直接在视图内部进行翻译。这也不适用于我声明的字符串。不过,它确实适用于内置字符串,因此解析确实有效。
我怀疑时间问题,也许在加载字符串之前解析了视图?虽然无法解决问题,但我认为遵循 devextreme 的手册...