Extjs的标签国际化

首先声明,这篇文章只是我自己的理解,坛子上高手众多,希望理解有误的地方,大家可以帮我指正  
    研究了下EXT i18n机制,在这里我个人理解是EXT并没有过多的注重对国际化的支持。在 local文件夹下我们看到很多国际化的js文件,打开ext_lang_zh_CN.js 截取一个片段:
Java代码   收藏代码
    1. if(Ext.MessageBox){  
    2.    Ext.MessageBox.buttonText = {  
    3.       ok     : "确定",  
    4.       cancel : "取消",  
    5.       yes    : "是",  
    6.       no     : "否"  
    7.    };  
    8. }  


再看 MessageBox.js中的一个片段
Java代码   收藏代码
  1. buttonText : {  
  2.             ok : "OK",  
  3.             cancel : "Cancel",  
  4.             yes : "Yes",  
  5.             no : "No"  
  6.         }  

则可以初步确认实际上EXT i18n机制仅仅是一个简单的属性替换.
    在struts和DOJO中,由于可以使用标签,相对的国际化机制就更完善一些,通过引入一些变量,对标签值进行替代而达到语言转换的目的, EXT使用了js生成页面的机制,所以在实际使用中,国际化的方法只能在js中对一些诸如label对象进行替换,但是这也带来了对象定位的问题,一个页面有非常多的对象,准确的对每一个对象国际化,是一个很麻烦,耦合性也非常高的工作。
一个解决方法:将需要国际化的组件以pannel为单位,定义为全局变量,如:
Java代码   收藏代码
  1. simple = new Ext.FormPanel({  
  2.         labelWidth: 75// label settings here cascade unless overridden  
  3.           
  4.         frame:true,  
  5.         title: 'Simple Form',  
  6.         bodyStyle:'padding:5px 5px 0',  
  7.         width: 350,  
  8.         defaults: {width: 230},  
  9.         defaultType: 'textfield',  
  10.         buttons: [{  
  11.             text: 'Save'  
  12.         },{  
  13.             text: 'Cancel'  
  14.         }],  
  15.   
  16.         items: [{  
  17.                 fieldLabel: 'First Name',  
  18.                 name: 'first',  
  19.                 allowBlank:false  
  20.             },{  
  21.                 fieldLabel: 'Last Name',  
  22.                 name: 'last'  
  23.             },{  
  24.                 fieldLabel: 'Company',  
  25.                 name: 'company'  
  26.             }, {  
  27.                 fieldLabel: 'Email',  
  28.                 name: 'email',  
  29.                 vtype:'email'  
  30.             }, combo  
  31.         ]  
  32.   
  33.           
  34. });  

可以通过导入内含
Java代码   收藏代码
  1. simple.buttons[0].text='保存';  
  2. simple.buttons[1].text='取消';  

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值