Globalize.js 失败 E_MISSING_BUNDLE 即使 CLDR 已加载

Globalize.js failing with E_MISSING_BUNDLE even though CLDR is loaded

我正在使用 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",我可以在 .json 文件中找到 de-CH。

以上示例(以及函数和行号)使用 globalize 1.0.0。我将包更新到 1.4.0 并将 .json 文件更新为最新的,只有堆栈跟踪中的函数名称和行号发生了变化,效果完全相同。

知道问题出在哪里吗?

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