我开发了一个使用Globalize.js的ASP MVC应用程序。在_Layout.cshtml中,我添加了此代码
<script>
(function () {
$(function () {
$.when(
$.getJSON("@Url.Content("~/Scripts/cldr/supplemental/likelySubtags.json")"),
$.getJSON("@Url.Content("~/Scripts/cldr/main/fr/numbers.json")"),
$.getJSON("@Url.Content("~/Scripts/cldr/supplemental/numberingSystems.json")"),
$.getJSON("@Url.Content("~/Scripts/cldr/main/fr/ca-gregorian.json")"),
$.getJSON("@Url.Content("~/Scripts/cldr/main/fr/timeZoneNames.json")"),
$.getJSON("@Url.Content("~/Scripts/cldr/supplemental/timeData.json")"),
$.getJSON("@Url.Content("~/Scripts/cldr/supplemental/weekData.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 () {
Globalize.locale("fr");
});
});
})();
</script>
它在工作。但是当我尝试在$(document).ready或$(window).load中的其他页面中使用它时我有错误JavaScript:E_DEFAULT_LOCALE_NOT_DEFINED:尚未定义默认语言环境。
似乎全球化尚未加载。
答案 0 :(得分:2)
E_DEFAULT_LOCALE_NOT_DEFINED
)而未事先设置默认语言环境(例如Globalize.formatMessage
)时,会发生 Globalize.locale("fr")
错误。
您能否提供有关触发上述错误的代码的更多详细信息?
答案 1 :(得分:1)
我知道这是一个非常古老的故事,但我偶然发现它并且答案很简单 - 你不必在$(document).ready
事件上做你想做的事情,你必须等待全球化完成加载资源,然后做你的东西。
这样做的简单方法是在加载全局化之后触发自己的事件:
function loadcldr() {
var currentCultureCode = $("#hfTwoCharsCultureCode").val();
var publicCdnGlobalizeCompleteUrl = "/Resources/cldr/";
$.when(
$.get(publicCdnGlobalizeCompleteUrl + "main/" + currentCultureCode + "/ca-gregorian.json"),
$.get(publicCdnGlobalizeCompleteUrl + "main/" + currentCultureCode + "/numbers.json"),
$.get(publicCdnGlobalizeCompleteUrl + "main/" + currentCultureCode + "/currencies.json"),
$.get(publicCdnGlobalizeCompleteUrl + "supplemental/likelySubtags.json"),
$.get(publicCdnGlobalizeCompleteUrl + "supplemental/timeData.json"),
$.get(publicCdnGlobalizeCompleteUrl + "supplemental/weekData.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 () {
Globalize.locale(currentCultureCode);
customNumberParser = Globalize.numberParser();
$(document).trigger("globalizeHasBeenLoadedEvent");
});
}
您感兴趣的行是$(document).trigger("globalizeHasBeenLoadedEvent");
,因为这会触发自定义事件。
然后你可以等待那个事件发生,然后做你的事情:
$(document).on("globalizeHasBeenLoadedEvent",
function () {
alert("I'm done loading globalize...");
});
希望它能帮助将来的某个人......(不是我曾经遇到过问题而且我搜索了SO并找到了我自己的答案): - ))
答案 2 :(得分:-1)
Globalize JavaScript文件可能不是您尝试使用Globalize功能的其他页面的一部分。
尝试将<script type="text/javascript" src="YourPath/Globalize.js">
包含在其未处理的任何网页之上。
如果有一个基本_Layout页面,所有其他页面都继承,那么看看是否可以在该页面上包含该脚本。