浏览 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只是完成了自己提供组件的国际化,而没有为我们开发页面的国际化预留接口。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |


