论坛首页 AJAX版 EXT

关于EXT2 国际化的理解

浏览 392 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-06-30
首先声明,这篇文章只是我自己的理解,坛子上高手众多,希望理解有误的地方,大家可以帮我指正
研究了下EXT i18n机制,在这里我个人理解是EXT并没有过多的注重对国际化的支持。在 local文件夹下我们看到很多国际化的js文件,打开ext_lang_zh_CN.js 截取一个片段:
if(Ext.MessageBox){
   Ext.MessageBox.buttonText = {
      ok     : "确定",
      cancel : "取消",
      yes    : "是",
      no     : "否"
   };
}


再看 MessageBox.js中的一个片段
buttonText : {
            ok : "OK",
            cancel : "Cancel",
            yes : "Yes",
            no : "No"
        }

则可以初步确认实际上EXT i18n机制仅仅是一个简单的属性替换.
在struts和DOJO中,由于可以使用标签,相对的国际化机制就更完善一些,通过引入一些变量,对标签值进行替代而达到语言转换的目的, EXT使用了js生成页面的机制,所以在实际使用中,国际化的方法只能在js中对一些诸如label对象进行替换,但是这也带来了对象定位的问题,一个页面有非常多的对象,准确的对每一个对象国际化,是一个很麻烦,耦合性也非常高的工作。
一个解决方法:将需要国际化的组件以pannel为单位,定义为全局变量,如:
simple = new Ext.FormPanel({
        labelWidth: 75, // label settings here cascade unless overridden
        
        frame:true,
        title: 'Simple Form',
        bodyStyle:'padding:5px 5px 0',
        width: 350,
        defaults: {width: 230},
        defaultType: 'textfield',
		buttons: [{
            text: 'Save'
        },{
            text: 'Cancel'
        }],

        items: [{
                fieldLabel: 'First Name',
                name: 'first',
                allowBlank:false
            },{
                fieldLabel: 'Last Name',
                name: 'last'
            },{
                fieldLabel: 'Company',
                name: 'company'
            }, {
                fieldLabel: 'Email',
                name: 'email',
                vtype:'email'
            }, combo
        ]

        
});

可以通过导入内含
simple.buttons[0].text='保存';
simple.buttons[1].text='取消';

的js来达到国际化的目的,但是由于EXT不支持动态载入js,这也造成了每次需要刷新整个页面的问题,为了解决这个问题,我们也可以将以上两行语句包含在函数中以供调用,但是如果国际化文件相当庞大,则一开始对这些函数的导入势必占用极大的网络资源.
为了解决以上问题,我们应该也可以将键值对存于json等文件中,在需要国际化的时候动态的读入,但是这需要另外的方法支持,这种方法貌似EXT并没有提供,所以得自己编写。
总之,在调查EXT i18n的机制中,阅读了API文档和local文件夹下的两个examples,EXT只是完成了自己提供组件的国际化,而没有为我们开发页面的国际化预留接口。
   
论坛首页 AJAX版 EXT

跳转论坛:
JavaEye推荐