2016-06-22 3 views
2

저는 Globalize.js를 사용하는 ASP MVC 응용 프로그램을 개발 중입니다. _Layout.cshtml에서이 코드를 추가했습니다.Globalize.js E_DEFAULT_LOCALE_NOT_DEFINED 오류

<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

페이지로드시 문제가 발생합니다. 로드 후 함수를 사용할 때 모두 작동합니다. 그것은 비동기 호출이 완료되었을 때를 감지합니다. – Sayadi

+0

$ .ajaxSetup을 추가하면 ({async : false}); _Layout에서는 모두 정상적으로 작동합니다. 하지만 다른 솔루션이 필요합니다. – Sayadi

답변

-1

JavaScript 전역 파일은 사용자가 전역 화 기능을 사용하려고 시도하는 다른 페이지의 일부가 아닐 수도 있습니다.

작동하지 않는 페이지 상단에 <script type="text/javascript" src="YourPath/Globalize.js">을 포함 시키십시오.

다른 모든 페이지가 상속하는 기본 _Layout 페이지가있는 경우 해당 페이지에 스크립트를 포함 할 수 있는지 확인하십시오.

+0

아니요, 해결책이 아닙니다. 페이지로드시 문제가 발생합니다. 로드 후 함수를 사용할 때 모두 작동합니다. 비동기 호출이 완료되었을 때를 감지합니다. – Sayadi

2

E_DEFAULT_LOCALE_NOT_DEFINED 이전에 로캘 기본값 (예 : Globalize.locale("fr"))을 설정하지 않고 전역 기능화 정적 함수 (예 : Globalize.formatMessage)를 사용하려고하면 오류가 발생합니다.

위에서 언급 한 오류를 유발하는 코드에 대해 자세히 설명해 주시겠습니까?

+0

제 문제는 전역 화 함수를 호출하는 다른 모든 페이지 코드보다 먼저 레이아웃 페이지 (Asynch Ajax 호출)의 코드가 실행되었는지 확인하는 것입니다. – Sayadi

+0

지금 언급 한 문제는 Globalize와 관련이 없습니다. ,하지만 그것은 비동기 세계와 관련이 있습니다. 내가보기에 제안하는 해결책은 약속입니다. 이에 대한 내용은 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise에서 읽어보십시오. 'Promise.all (promiseGlobalize, promiseLayoutpage)'와 같이 두 가지 비동기 함수를 동기화하는 데 Promise all을 사용하는 것이 좋습니다. 여기서'promiseGlobalize'와'promiseLayoutpage'는 모두 약속입니다. –