何时,纱窗外,风摇翠竹

常用链接

统计

最新评论

  • 1. re: 慎用AJAX框架
  • AJAX是中国技术领域的红灯区。。想爽,但又怕潜伏着危险。。。
  • --阿斯顿飞
  • 2. re: 慎用AJAX框架
  • 评论内容较长,点击标题查看
  • --夏如嘏
  • 3. re: 慎用AJAX框架
  • ajax 要懂的原理,同意楼主,框架慎用
  • --骄傲
  • 4. re: 慎用AJAX框架
  • @读书、思考、生活
    2、bug满天飞,那就说明是水平不到家
    您的水平能高到没有bug?
  • --楼主
  • 5. re: 慎用AJAX框架
  • 只要你懂xmlhttp,为什么非要用ajax呢,我从2000年开始使用xmlhttp,ajax刚出来的时候看了一眼,冷笑一声。所以争论没有意义,到处都是新瓶装老酒的故事
  • --挨踢的货

Dojo 0.3.1 的国际化支持

    这两天花了点时间看 Dojo 0.3.1 的新功能, 发现Dojo果然兑现承诺, 在0.3.1加入了一点国际化支持的功能。最主要的是改动是引进了 dojo.locale 属性和 dojo.i18n 包, 从而于 javascript 实现了Client端的本地 message bundle 机制,从现在起,我们可以在客户端根据locale装载JS消息文件了! 完整的示例代码如下:

<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 ) :


{
 hello: 
"Hello",
 dojo: 
"Dojo",
 hello_dojo: 
"%{hello}, %{dojo}!",
 file_not_found:
"The file you requested, %{0}, is not found."
}

 
   把消息文件放好后,便可以在 dojo 中通过 dojo.requireLocalization() 调用这些文件了,对应的代码是:

      
//下载需要的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 了!在示例代码中我举了两个简单的例子:

   
//调用 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已经有了一个良好的开端,值得期待。

posted on 2006-09-19 11:19 weidy 阅读(1652) 评论(1)  编辑  收藏 所属分类: WEB & AJAX

评论

# re: Dojo 0.3.1 的国际化支持 2006-09-21 16:23 123bingbing

这里是全新的竞争方式,让你在无数的程序员中脱颖而出!www.mylinux.com  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: