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') 有效,因此语言环境名称的大小写很重要。
我正在使用 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') 有效,因此语言环境名称的大小写很重要。