Globalize.js E_DEFAULT_LOCALE_NOT_DEFINED错误

时间:2016-06-22 23:35:16

标签: javascript asp.net-mvc javascript-globalize

我开发了一个使用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:尚未定义默认语言环境。

似乎全球化尚未加载。

3 个答案:

答案 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页面,所有其他页面都继承,那么看看是否可以在该页面上包含该脚本。