首先声明,这篇文章只是我自己的理解,坛子上高手众多,希望理解有误的地方,大家可以帮我指正
研究了下EXT i18n机制,在这里我个人理解是EXT并没有过多的注重对国际化的支持。在 local文件夹下我们看到很多国际化的js文件,打开ext_lang_zh_CN.js 截取一个片段:
再看 MessageBox.js中的一个片段
则可以初步确认实际上EXT i18n机制仅仅是一个简单的属性替换.
在struts和DOJO中,由于可以使用标签,相对的国际化机制就更完善一些,通过引入一些变量,对标签值进行替代而达到语言转换的目的, EXT使用了js生成页面的机制,所以在实际使用中,国际化的方法只能在js中对一些诸如label对象进行替换,但是这也带来了对象定位的问题,一个页面有非常多的对象,准确的对每一个对象国际化,是一个很麻烦,耦合性也非常高的工作。
一个解决方法:将需要国际化的组件以pannel为单位,定义为全局变量,如:
可以通过导入内含
的js来达到国际化的目的,但是由于EXT不支持动态载入js,这也造成了每次需要刷新整个页面的问题,为了解决这个问题,我们也可以将以上两行语句包含在函数中以供调用,但是如果国际化文件相当庞大,则一开始对这些函数的导入势必占用极大的网络资源.
为了解决以上问题,我们应该也可以将键值对存于json等文件中,在需要国际化的时候动态的读入,但是这需要另外的方法支持,这种方法貌似EXT并没有提供,所以得自己编写。
总之,在调查EXT i18n的机制中,阅读了API文档和local文件夹下的两个examples,EXT只是完成了自己提供组件的国际化,而没有为我们开发页面的国际化预留接口。
研究了下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只是完成了自己提供组件的国际化,而没有为我们开发页面的国际化预留接口。