Ext 4 언어 로 컬 중국어 패 키 지 는 날짜 달력 컨트롤 을 한 화 할 수 없 는 BUG 입 니 다.

4439 단어 ext4
판권 소유, 전재 출처 밝 혀 주세요.http://gogo1217.iteye.com위반 자 는 반드시 추궁 한다!
 
이전에 '진짜 Extjs 4.2 지원 시간 선택 달력 확장' 을 쓴 적 이 있 습 니 다.http://gogo1217.iteye.com/blog/1856265。당시 중국어 현지 화 자원 파일 을 도입 한 후 '요일' 이 일률적으로 'y' 로 변 한 것 을 발견 하고 picker 구성 요소 뒤에 Ext. picker. Date 에 따라 현지 화 코드 를 추가 하여 한 화 에 성 공 했 으 며 세부 사항 을 탐색 하지 않 았 다.
오늘 동료 가 코드 를 제출 하 였 는데, 페이지 의 달력 선택 컨트롤 이 무슨 요일 에 모두 'y' 로 바 뀌 었 는 지 발 견 했 고, 월 선택 은 아무런 문제 가 없 었 기 때문에 Ext - js 원본 코드 를 뒤 져 보 았 다.
 
 원인 분석:
1, ext - lang - zh 열기CN. js 소스 코드, Ext. Date 에 대한 현지 화 는 Ext. onReady 에 놓 여 있 는 것 을 발 견 했 습 니 다. Ext. picker. Date 등 다른 현지 화 는 즉시 효력 이 발생 하지만 Ext. picker. Date 에 서 는 dayNames 를 덮어 쓰 지 않 았 습 니 다. 그의 본의 가 무엇 인지 모 르 겠 습 니 다.
Ext4 语言本地化中文包不能汉化日期日历控件的BUG_第1张图片
 
2. Ext. picker. Month 의 소스 코드 를 열 어 보 니 212 줄 에 있 습 니 다. beforerender 방법 에서 months 는 구성 요 소 를 만 들 때 Ext. date. getShortMonthName 에서 가 져 왔 습 니 다. 다음 그림 과 같 습 니 다.
  Ext4 语言本地化中文包不能汉化日期日历控件的BUG_第2张图片
즉, 월 현지 화가 성공 한 것 은 그 가 구성 요 소 를 만 들 때 Ext. Date 에서 가 져 온 것 입 니 다. 구성 요 소 를 만 들 때 Ext. Date 는 이미 복사 되 었 습 니 다.
3. Ext. picker. Date 소스 코드 를 열 면 443 줄 beforerender 방법 에서 dayNames 는 직접 얻 은 prototype 속성 이 고 원형 중의 dayNames 는 Ext. picker. Date 로 불 러 온 후에 Ext. Date 에서 직접 얻 을 수 있 습 니 다. Ext. picker. Date 소스 코드 끝 에서 볼 수 있 습 니 다. 다음 그림 과 같 습 니 다.
  Ext4 语言本地化中文包不能汉化日期日历控件的BUG_第3张图片
Ext4 语言本地化中文包不能汉化日期日历控件的BUG_第4张图片
 Ext. picker. Date 가 덮어 쓰 지 못 하 는 이 유 는 클래스 로드 가 끝 난 후에 원형 을 직접 덮어 쓰 는 것 입 니 다. 이때 ext - lang - zhCN. js 는 Ext. Date 의 속성 을 복사 하기 위해 영어 설명 정 보 를 얻 었 습 니 다.
4. 중국어 현지 화 자원 파일 을 불 러 오지 않 을 때 영어 의 요일 대문자 가 정확하게 표 시 됩 니 다. 그러나 가입 후 마지막 자모 입 니 다. 이 유 는 ext - lang - zh 입 니 다.CN. js 는 Ext. picker. Date 의 getDay Initial 방법 을 135 줄 에 덮어 쓰 고 dayNames 의 마지막 문 자 를 가 져 오 는 것 으로 바 꾸 어 모두 'y' 로 보 여 줍 니 다.
 
수정 방법:
원본 코드 를 직접 수정 합 니까? 이런 방법 은 업그레이드 할 때 매우 불편 합 니 다.
우 리 는 다음 코드 를 통 해 수정 할 것 을 건의 합 니 다. 페이지 에 ext - lang - zh CN. js 를 도입 한 후에 우리 의 업무 코드 는 Ext. picker. Date 를 만 들 고 Ext. picker. Date 의 원형 속성 을 다시 수정 하면 됩 니 다.
Ext. Date 의 현지 화 는 Ext. onReady 에 놓 여 있 기 때문에 다시 복사 할 때 도 Ext. onReady 에 넣 어야 합 니 다.
최종 코드 는 다음 과 같 습 니 다.
 
<html>
<head>
    <title>Ext JS 4.2 Examples</title>
    <meta http-equiv="Context-Type" content="text/html;chartset=utf-8">

    <link rel="stylesheet" type="text/css" href="resources/ext-theme-neptune/ext-theme-neptune-all.css" />
    <script type="text/javascript" src="ext-all.js"></script>
    <script type="text/javascript" src="locale/ext-lang-zh_CN.js"></script>
    <script type="text/javascript">
    	Ext.onReady(function(){
    		var proto = Ext.picker.Date.prototype,
                date = Ext.Date;

            proto.monthNames = date.monthNames;
            proto.dayNames   = date.dayNames;
            proto.format     = date.defaultFormat;
    	});
    </script>
</head>
<body>
</body>
</html>

 
 

좋은 웹페이지 즐겨찾기