上周我主要工作在Ext的I18处理上, 有一个在JSP捆绑资源的功能我没有想到。所以我就实现了这个功能-可以简单的得到资源从页面中,这个类的名字是Ext.i18n.ResourceBundle.主要的想法是建立一个对象并得到一个资源包的类,它意味着通过这个资源类,IE拿到资源的名称和语言,然后试图找一个.properties文件。 如果这语言是es-ES, 它将试图寻找这[bundle]_es-ES。properties文件。如果不存在就读取[bundle].properties文件。
然后你就能用getMsg(key)方法,得到一个字符串通过这个key属性。
这是整个代码和一点例子,享受它吧:)
Bundle.js and Test.js可以在这里找到: Ext.forum
(
http://extjs.com/forum/showthread.php?t=32456)
使用方法:
var bundle = new Ext.i18n.Bundle({bundle='Application'});
bundle.onReady(
alert('example'+ bundle.getMsg('key1'));
);
如果语言是es-ES,它将会读取一个 Application_es-ES.properties 文件,文件内容像这样:
key1 "Mensaje para la propiedad key1"
如果Application_es-ES.properties 文件不存在,它将读取Application.properties文件:
#This is a simple comment
key1 "this is the message for key1"
类的构造函数是Bundle(config),参数config的格式是: {bundle: , patch:}
bundle: properties文件的名字.
{bundle: 'mybundle'}
它将查找这样的一个文件在:
http:/yourdomain/yourApp/mybundle_[language].properties.
所以如果你不想做I18n,但又要保证以后可以扩展,至少建立一个mybundle.properties文件.
patch: (可选) 这个properties文件的地址.
{bundle: 'mybundle, path: 'resources'}
它将查找这个文件:
http:/yourdomain/yourApp/resources/mybundle_[language].properties.
Take into account that you need to write your application in the bundle.onReady() method in order to be able to access to your bundle.
你需要考虑到写一个bundle。onReady方法来保证资源已经加载完成后在使用。
注意:
这个资源已经存储到一个 Ext.data.Store 对象缓存里面,不会重复读取。
完整demo:
//Test for Bundle
Ext.onReady(function(){
var bundle = new Ext.i18n.Bundle({bundle:'Application', path: 'resources'});
bundle.onReady(function(){
alert("culo"+bundle.getMsg('key1'));
});
});