即使加载了CLDR,Globalize.js也会失败,并显示E_MISSING_BUNDLE

时间:2018-10-31 22:06:59

标签: globalize

我正在使用Globalize.js通过以下方式为de-CH加载CLDR:

$.when(
    $.get('/json/cldr/likelySubtags.json'),
    $.get('/json/cldr/timeData.json'),
    $.get('/json/cldr/de-ch/numbers.json'),
    $.get('/json/cldr/de-ch/ca-gregorian.json')
)
.fail(function (xhr, status, error) {
    console.log("Problem loading globalization data: status: " + status + ", error: " + error);
})
.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 () {
    try {
        // Globalization is loaded
        Globalize.locale('de-ch');
        console.log("after locale");
        console.log(Globalize.parseDate("5/20/2018"));
        console.log(Globalize.parseDate("20.05.2018"));
    } catch (ex3) {
        console.log(ex3);
    }
});

浏览器显示四个.json文件已正确加载。我还可以通过在第一个.then调用中添加断点来确认这一点。但是,当调用parseDate时,我仍然会收到此异常:

Error: E_MISSING_BUNDLE: {"locale":"de-ch"}
    at createError (cldr.js:328)
    at validate (cldr.js:344)
    at Cldr.main (cldr.js:654)
    at dateExpandPattern (date.js:109)
    at Function.Globalize.dateParser.Globalize.dateParser (date.js:1788)
    at Function.Globalize.parseDate.Globalize.parseDate (date.js:1837)
    at my.js:210

当我在date.js:109检查错误时,它将调用:

result = cldr.main([
    "dates/calendars/gregorian/dateTimeFormats/availableFormats",
    skeleton
]);

所以它正在寻找main->“ dates / calendars / gregorian / dateTimeFormats / availableFormats”,该文件可以在de-CH的.json文件中找到。

上面的示例(以及函数和行号)使用globalize 1.0.0。我将程序包更新为1.4.0,并将.json文件更新为最新文件,并且仅更改了堆栈跟踪中的函数名称和行号,效果完全相同。

有什么问题吗?

1 个答案:

答案 0 :(得分:0)

我发现了问题:Globalize.locale('de-CH')工作时,Globalize.locale('de-ch')失败了,因此语言环境名称的大小写很重要。