`
gogo1217
  • 浏览: 152346 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ext4 语言本地化中文包不能汉化日期日历控件的BUG

 
阅读更多

版权所有,转载请注明来源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,不知道他的本意是什么?

 

2、打开Ext.picker.Month的源码,发现在212行 beforeRender方法中,months是在创建组件的时候从Ext.Date.getShortMonthName获取的,如下图所示:

 

即月份本地化能成功是源于,他在组件创建的时候从Ext.Date中获取,在组件创建时,Ext.Date已经被覆写。

3、打开Ext.picker.Date源码,发现在443行beforeRender方法中,dayNames是直接获取的prototype属性,而原型中的dayNames是Ext.picker.Date加载完毕后,直接从Ext.Date中获取的,可以在Ext.picker.Date源码尾部看到,如下图所示:

 

 Ext.picker.Date不能覆写成功的原因在于,他是在类加载完毕后,直接对原型覆写,而此时ext-lang-zh_CN.js并为对Ext.Date的属性覆写,所以获取的还是英文的描述信息。

4、在不加载中文本地化资源文件时,能正确显示英文的星期几首字母大写,但加入后却是最后一个字母,原因是ext-lang-zh_CN.js在135行对Ext.picker.Date中的getDayInitial方法覆写,改为获取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>

 

 

 

  • 大小: 27 KB
  • 大小: 94 KB
  • 大小: 59.6 KB
  • 大小: 32.9 KB
0
2
分享到:
评论
5 楼 dongyuxu1990 2013-07-17  
棒!就是没搞明白代码应该放哪里,desktop有放,zh_CN也有放但是都没达到效果呀。
4 楼 sky_lichao 2013-05-22  
厉害啊,正在为这事犯愁呢,太感谢你了
3 楼 wangxiang243 2013-05-17  
  厉害
2 楼 gogo1217 2013-05-10  
从Date和Month拾取器的代码看来,应该不是同一个写的。
今天发现另外一个蹊跷,有可能是Ext js的资源文件代码的问题,在一个老版的资源文件中,它是将所有的汉化覆写全部放在Ext.onReady里面,因此不会出现汉化失败的问题。而4.2版本是将部分代码放在onReady之外了。
1 楼 sunny_1976 2013-05-09  
嘿嘿,多谢了,我就知道一定有你这种大牛出来解决这个问题

相关推荐

    ext 日期时间控件

    在EXT中,日期时间控件(DateTimeField)是一个非常实用的组件,允许用户选择日期和时间,从而提高用户体验和数据输入的准确性。EXT提供了丰富的UI组件,包括表格、面板、窗口、表单等,而日期时间控件则是表单组件...

    ext4 年月时间控件 年月日时间控件 年月日时分秒时间控件

    - **本地化**:支持多语言,可以根据用户的浏览器设置自动调整日期和时间的显示格式。 - **事件处理**:提供丰富的事件接口,如选择更改、验证失败等,方便开发者编写相应的业务逻辑。 在"带时分秒和年月的日空间...

    ext日期时间控件2

    EXT日期时间控件2是一款基于EXT JavaScript库的高级UI组件,专为网页应用设计,用于提供用户友好的日期和时间选择功能。EXT是一个强大的前端框架,由Sencha公司开发,广泛应用于构建富互联网应用程序(RIA)。EXT的...

    EXT js 4带时间的日期控件

    EXT JS 4 版本在日期控件方面提供了丰富的功能,使得开发者可以方便地处理日期和时间输入。在这个特定的资源中,我们关注的是一个集成时间选择的日期控件,这在需要精确到时、分、秒的场景下非常有用。 EXT JS 4 的...

    4.0Ext 本地化

    4.0Ext 本地化的实现主要依靠其根目录下的 `/locale/` 文件夹,这个文件夹包含了多达45种语言的包,覆盖了全球大部分地区。实现本地化有两种方式:静态和动态。静态本地化通常是在开发阶段就确定好语言设置,而动态...

    EXT日期加时间控件

    EXT日期加时间控件 EXT日期加时间控件

    ext 下拉日期时间控件

    本控件名为"EXT下拉日期时间控件",具有高度可定制性和灵活性,能够满足开发者对日期时间选择的精确需求。 该控件的独特之处在于它可以将日期和时间精确到秒,这意味着用户可以选择一个特定的日期,然后在时间部分...

    ext 4.0 日期选择控件 时分秒 中文版

    这个"EXT 4.0 日期选择控件 时分秒 中文版"显然是一个经过本地化处理的版本,支持中文显示,并且在选择日期的同时还能选择具体的时间,精确到时、分、秒。 日期选择控件在Web应用中非常常见,用于用户输入或选择...

    Extjs日期控件汉化版

    "Extjs日期控件汉化版"就是针对这个需求,提供了一个已经进行了中文语言转换的版本,使得日期控件的标签、提示信息和日期格式都符合中文语境。 在ExtJS中,日期控件通常用`Ext.form.field.Date`类来创建。这个控件...

    Ext时间日期选择控件,精确到秒

    在EXTJS框架中,时间日期选择控件是一个重要的组件,特别是在构建用户界面时,需要用户输入精确的时间或日期信息。EXTJS 5.0及更高版本提供了更丰富的功能和改进的用户体验,使得开发者能够创建更加直观和用户友好的...

    Ext日期时间控件 Spinner控件 Ext代码 Extjs Grid

    总的来说,`Ext日期时间控件`和`Spinner控件`是`ExtJS`框架中不可或缺的组件,它们极大地增强了用户界面的交互性和数据操作的便利性。结合`Grid`使用,开发者可以构建出高效且用户友好的数据管理界面。通过不断探索...

    不错的日历控件(JavaScript、ext)

    在IT行业中,日历控件是一种常见的用户界面元素,它允许用户方便地选择日期或进行日期相关的操作。本文将深入探讨“不错的日历控件”,特别是基于JavaScript和EXT技术实现的这种控件。 首先,JavaScript是一种广泛...

    EXT 时间控件

    3. **多语言支持**:EXT 支持多种语言,时间控件可以根据用户浏览器的设置显示对应的语言。 4. **样式可定制**:EXT 提供了丰富的主题,开发者可以通过CSS来调整时间控件的外观以符合整体应用的风格。 5. **事件...

    Ext扩展dateField时间控件,可以选择年月日、年月、年、月

    总的来说,`Ext`框架中的`dateField`扩展为开发者提供了强大的工具,使他们能够创建适应各种场景的时间选择控件,不仅满足基本的日期输入需求,还能提供更加精细化和定制化的用户体验。通过深入学习和理解`...

    ext4.2 日历日期控件,可以选择时分秒

    "ext4.2 日历日期控件,可以选择时分秒"是一个专门针对这个需求的组件,它允许用户在网页应用中方便地选择日期、时间和秒数。这个控件是EXTJS库的一个组成部分,EXTJS是一个基于JavaScript的富客户端应用框架,广泛...

    extjs日期+时间控件

    4. **日期时间格式化**:在ExtJS中,日期和时间的格式化使用`Ext.util.Format.date`函数,可以定制如"YYYY-MM-DD HH:mm:ss"这样的输出格式。在日期时间控件中,可以通过`format`配置项来设置显示和解析的日期时间...

    ext日期控件时分秒

    综上所述,EXT JS中的日期控件扩展是解决日期时间选择问题的关键,开发者需要理解EXT JS的组件体系,熟练运用继承和扩展机制,以创建或定制满足特定需求的DateTimeField控件。这不仅提高了用户体验,也丰富了EXT JS...

    Ext中文语言包ext

    ext 的中文语言包extext的中文语言包extext的中文语言包extext

    日期控件,EXt、My97

    日期控件在IT界是网页开发中不可或缺的一部分,主要用于用户输入或选择日期的交互界面。在给定的信息中,我们关注的是两种特定的日期控件:EXT和My97。这两种控件都提供了不同的视觉风格和用户体验,以适应不同的...

    extjs3.0 日期时间控件

    在3.0版本中,它提供了丰富的UI组件,包括日期时间控件。这个控件是开发人员在网页应用中处理日期和时间输入的重要工具,尤其适用于需要用户输入特定日期或时间的情况。 标题中的"extjs3.0 日期时间控件"指的是...

Global site tag (gtag.js) - Google Analytics