本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7580139
建立时间:2006年5月29日




[Dojo(Ajax)]Dojo 0.3.1 的国际化支持
软件技术

lhwork 发表于 2006/9/19 15:34:53

    这两天花了点时间看 Dojo 0.3.1 的新功能, 发现Dojo果然兑现承诺, 在0.3.1加入了一点国际化支持的功能。最主要的是改动是引进了 dojo.locale 属性和 dojo.i18n 包, 从而于 javascript 实现了Client端的本地 message bundle 机制,从现在起,我们可以在客户端根据locale装载JS消息文件了! 完整的示例代码如下:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><script type="text/javascript">                                djConfig = {                isDebug: true        };</script><script type="text/javascript" src="../../dojo.js"></script><script type="text/javascript" src="../_bootstrap.js"></script><script type="text/javascript">        dojo.locale = "fr";        dojo.requireLocalization("g11n.messages","salutations","en");        dojo.requireLocalization("g11n.messages","salutations","fr");        dojo.requireLocalization("g11n.messages","salutations","zh-cn");        dojo.require('dojo.i18n.common');        </script><script type="text/javascript">        function init() {                var salutations_default = dojo.i18n.getLocalization("g11n.messages", "salutations");                dojo.debug("default language: "+salutations_default.hello);                                var salutations_zh = dojo.i18n.getLocalization("g11n.messages", "salutations", "zh-cn");                dojo.debug("Chinese: "+salutations_zh.hello);                        }        dojo.addOnLoad(init);</script>   首先是 dojo.locale 这个属性,这个属性是一个全局,作为用户默认的locale,如果用户不明确指定,dojo会根据浏览器的locale对这个属性赋值。和Java不同, 目前在dojo中locale并没有对应对象,只是一个String对象,典型的格式应该是 "zh","zh-cn"。注意后者用的是 "-" ,而不是Java中的 "_"。      现在来看最让人心动的 message bundle 机制, 首先分成三步来把message文件组织好:        1) 要建立一个集中存放message文件的目录,我建的是 g11n\messages;        2) 和在java中一样,为不同的locale建立存放message文件的文件夹,比如我建的是"en","fr","zh-cn"; 这里要注意文件夹的名称必须要全部小写,原因是dojo从文件装载消息会把传入的locale属性进行 toLowerCase() 的处理(晕,不知道作者怎么想的)。        3) 把翻译完并用native2ascii转换好的消息文件放入对应的文件夹内。和Java不同的是,dojo用 JSON 格式来组织message文件,所以要把property文件转换到JSON格式的js文件, 不过这也很容易: 在文件开始的位置加入一个"{", 结尾的地方加入"}", 将所有的 "=" 替换成 ":" , 然后在每一行结尾处加入一个"," ,最后把文件改成js结尾便可以了。一个典型的JSON格式的文件如下(假设文件名叫 salutations.js ) : Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->{ hello: "Hello", dojo: "Dojo", hello_dojo: "%{hello}, %{dojo}!", file_not_found:"The file you requested, %{0}, is not found."}     把消息文件放好后,便可以在 dojo 中通过 dojo.requireLocalization() 调用这些文件了,对应的代码是:       Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//下载需要的locale的消息文件到客户端dojo.requireLocalization("g11n.messages","salutations","en");dojo.requireLocalization("g11n.messages","salutations","fr");dojo.requireLocalization("g11n.messages","salutations","zh-cn");//调用国际化包dojo.require('dojo.i18n.common');       现在就可以调用指定locale的 message 了!在示例代码中我举了两个简单的例子:    Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//调用 dojo.locale 指定的locale中对应的消息文件中 hello 那条消息    var salutations_default = dojo.i18n.getLocalization("g11n.messages", "salutations");    dojo.debug("default language: " + salutations_default.hello);    //调用"zh-cn"中 hello 那条消息    var salutations_zh = dojo.i18n.getLocalization("g11n.messages", "salutations", "zh-cn");    dojo.debug("Chinese: "+salutations_zh.hello);    怎么样,非常简单吧?    除了message bundle, dojo 还声明要支持其他的一些国际化功能,比如Date,Number,Currency等等,在0.3.1中我只发现Date有一定的实现,但是基本就是对 Javascript Date 对象的几个locale相关的方法进行了一下封装,没有多少实质性的提高,看来dojo在国际化的支持方面还有很长的路要走。无论如何0.3.1中提供的 message bundle已经有了一个良好的开端,值得期待。


阅读全文(4107) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.055 second(s), page refreshed 144771677 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号