1

我对 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 的手册...

http://js.devexpress.com/Documentation/Guide/SPA_Framework/Localization/?version=16_1&approach=Knockout

4

0 回答 0