﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-何时，纱窗外，风摇翠竹-随笔分类-WEB &amp; AJAX</title><link>http://www.blogjava.net/weidy/category/5269.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 07 Mar 2007 20:02:47 GMT</lastBuildDate><pubDate>Wed, 07 Mar 2007 20:02:47 GMT</pubDate><ttl>60</ttl><item><title>使用E4X用简单高效的方式操作XML</title><link>http://www.blogjava.net/weidy/archive/2007/03/07/e4x.html</link><dc:creator>weidy</dc:creator><author>weidy</author><pubDate>Wed, 07 Mar 2007 09:33:00 GMT</pubDate><guid>http://www.blogjava.net/weidy/archive/2007/03/07/e4x.html</guid><wfw:comment>http://www.blogjava.net/weidy/comments/102445.html</wfw:comment><comments>http://www.blogjava.net/weidy/archive/2007/03/07/e4x.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/weidy/comments/commentRss/102445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidy/services/trackbacks/102445.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 要没用过E4X，就不知道用这东西处理XML是多简单好用！过去在Java中一直是用一些用熟了的组件操作XML，这几天用Actionscript才发现了这个好东西，真是相见恨晚啊，一定要和大家分享一下。&nbsp;&nbsp;<a href='http://www.blogjava.net/weidy/archive/2007/03/07/e4x.html'>阅读全文</a><img src ="http://www.blogjava.net/weidy/aggbug/102445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidy/" target="_blank">weidy</a> 2007-03-07 17:33 <a href="http://www.blogjava.net/weidy/archive/2007/03/07/e4x.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dojo 0.4 新特性</title><link>http://www.blogjava.net/weidy/archive/2006/11/09/80136.html</link><dc:creator>weidy</dc:creator><author>weidy</author><pubDate>Thu, 09 Nov 2006 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/weidy/archive/2006/11/09/80136.html</guid><wfw:comment>http://www.blogjava.net/weidy/comments/80136.html</wfw:comment><comments>http://www.blogjava.net/weidy/archive/2006/11/09/80136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidy/comments/commentRss/80136.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidy/services/trackbacks/80136.html</trackback:ping><description><![CDATA[
		<p>    带着众多诱人的新特性，Dojo 0.4 发布了。抽出时间下载了一个体验了一把，结果用一句话来概况： 惊喜多多！</p>
		<p>    首先是这一版加入的几个新的 Widget: Clock, FilteringTable,ProgressBar。这些widget中比较重要的是 FilteringTable， FilteringTable的加入是用来替换以前的SortableTable，相比SortableTable, 它的新的特性包括：</p>
		<p>Multiple Column Sorting (number of columns settable, default is 1) <br />Sorting in place (non-destructive) <br />Per-column programmatic filtering <br />Add and remove rows on the fly <br />Update field values (with typing) on the fly <br />No restrictions on sorting on markup </p>
		<p>    从这个地址去体验一下： <a href="http://archive.dojotoolkit.org/nightly/tests/widget/test_FilteringTable.html">http://archive.dojotoolkit.org/nightly/tests/widget/test_FilteringTable.html</a>，功能非常强大，可以直接从传过来的JSON对象中构造出列表，动态的过滤数据，改变各个字段的值，可惜这个版本中还不支持分页，列、行的拖拉的功能，只能是期待下一版了。其他几个Widget也都非常的实用，dojo的官方网站上都有例子，感兴趣的可以去找找。</p>
		<p>    下一个是让人感到惊喜是新增的 dojo.charting 和 dojo.gfx 包， dojo.charting 提供了一个基于Vector实现了多种图表类型的charting engine，从demo上来看，非常不错哦！ 可以从这个地址体验一下：</p>
		<p> <a href="http://archive.dojotoolkit.org/nightly/tests/charting/test_engine.html">http://archive.dojotoolkit.org/nightly/tests/charting/test_engine.html</a></p>
		<p>   另外一个好消息是，从昨天dojo官方网站的新闻上看到 Greenplum 和 SitePen（两个技术型的企业） 宣布把他们的一些技术捐赠给Dojo的 new charting engine。dojo.gfx是一个二维矢量图形的API，能自动的根据客户浏览器的类型决定使用SVG或是VML，也很实用，比如新增加的Clock Widget就是基于这个包实现的。这两个包的加入让我们有理由相信不远的将来，dojo必然会撑起网页图表的一片天!</p>
		<p>    然后是 dojo.a11y 包，a11y 是accessibility的缩写，主要是加入对键盘按键（快捷键）的支持。官方网站上说的是在Dojo 0.4中只有一部分widget中已经加入了这方面的支持，在0.5中会加入努力更多。</p>
		<p>    国际化支持方面，这个版本的 dojo.i18n 包做了不少的改动，加入了对 collecting localized resources 的支持，提供了更多的date and time 的格式，此外对很多 widget （DatePicker, TimePicker等等） 也做了国际化的改进，不过DatePicker，TimePicker依然是丑陋无比。可以看到和dojo 0.3.1比，国际化的框架并没有很大的变动， 这次主要是具体的进行一些完善。</p>
		<p>    还有很多其他的包，像 dojo.lfx，dojo.namespaces，dojo.html等等，在这一版中也都得到了很大的提高，详细一点的列表可以查看 <a href="http://dojo.jot.com/WikiHome/Release0Point4">http://dojo.jot.com/WikiHome/Release0Point4</a> 。</p>
		<p>    从0.3.1 到 0.4 几个月的时间里dojo便得到如此大的提高，根据Dojo网站上的公告，dojo 0.4.1过几天也就要发布了，在几个月后又要出0.5，按照这效率，想想一年后的dojo，真是让人抓狂！</p>
<img src ="http://www.blogjava.net/weidy/aggbug/80136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidy/" target="_blank">weidy</a> 2006-11-09 13:51 <a href="http://www.blogjava.net/weidy/archive/2006/11/09/80136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dojo 0.3.1 的国际化支持</title><link>http://www.blogjava.net/weidy/archive/2006/09/19/70460.html</link><dc:creator>weidy</dc:creator><author>weidy</author><pubDate>Tue, 19 Sep 2006 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/weidy/archive/2006/09/19/70460.html</guid><wfw:comment>http://www.blogjava.net/weidy/comments/70460.html</wfw:comment><comments>http://www.blogjava.net/weidy/archive/2006/09/19/70460.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/weidy/comments/commentRss/70460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidy/services/trackbacks/70460.html</trackback:ping><description><![CDATA[    这两天花了点时间看 Dojo 0.3.1 的新功能， 发现Dojo果然兑现承诺， 在0.3.1加入了一点国际化支持的功能。最主要的是改动是引进了 dojo.locale 属性和 dojo.i18n 包， 从而于 javascript 实现了Client端的本地 message bundle 机制，从现在起，我们可以在客户端根据locale装载JS消息文件了! 完整的示例代码如下：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">script type</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/javascript</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">                        <br />        djConfig </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> {<br />                isDebug: </span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);"><br />        };<br /></span><span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">script</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">script type</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/javascript</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> src</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">../../dojo.js</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;&lt;/</span><span style="color: rgb(0, 0, 0);">script</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">script type</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/javascript</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> src</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">../_bootstrap.js</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;&lt;/</span><span style="color: rgb(0, 0, 0);">script</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">script type</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/javascript</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        dojo.locale </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">fr</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />        dojo.requireLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">en</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />        dojo.requireLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">fr</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />        dojo.requireLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">zh-cn</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />        dojo.require(</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">dojo.i18n.common</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">);        <br /></span><span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">script</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /><br /></span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">script type</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/javascript</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        function init() {<br />                var salutations_default </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> dojo.i18n.getLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />                dojo.debug(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">default language: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">salutations_default.hello);<br />                <br />                var salutations_zh </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> dojo.i18n.getLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">zh-cn</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />                dojo.debug(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Chinese: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">salutations_zh.hello);                <br />        }<br />        dojo.addOnLoad(init);<br /></span><span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">script</span><span style="color: rgb(0, 0, 0);">&gt;</span></div><br /><br />   首先是 dojo.locale 这个属性，这个属性是一个全局，作为用户默认的locale，如果用户不明确指定，dojo会根据浏览器的locale对这个属性赋值。和Java不同，目前在dojo中locale并没有对应对象，只是一个String对象，典型的格式应该是 "zh","zh-cn"。注意后者用的是 "-" ,而不是Java中的 "_"。<br />   <br />   现在来看最让人心动的 message bundle 机制, 首先分成三步来把message文件组织好:<br /><br />        1) 要建立一个集中存放message文件的目录，我建的是 g11n\messages;<br /><br />        2) 和在java中一样，为不同的locale建立存放message文件的文件夹，比如我建的是"en","fr","zh-cn"; 这里要注意文件夹的名称必须要全部小写，原因是dojo从文件装载消息会把传入的locale属性进行 toLowerCase() 的处理(晕，不知道作者怎么想的)。<br /><br />        3) 把翻译完并用native2ascii转换好的消息文件放入对应的文件夹内。和Java不同的是，dojo用 JSON 格式来组织message文件,所以要把property文件转换到JSON格式的js文件, 不过这也很容易: 在文件开始的位置加入一个"{", 结尾的地方加入"}", 将所有的 "=" 替换成 ":" , 然后在每一行结尾处加入一个"," ,最后把文件改成js结尾便可以了。一个典型的JSON格式的文件如下(假设文件名叫 salutations.js ) : <br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);"><br />{<br /> hello: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Hello</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br /> dojo: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Dojo</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br /> hello_dojo: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">%{hello}, %{dojo}!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br /> file_not_found:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">The file you requested, %{0}, is not found.</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />}</span></div><br />  <br />   把消息文件放好后，便可以在 dojo 中通过 dojo.requireLocalization() 调用这些文件了,对应的代码是：<br /><br />       <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">下载需要的locale的消息文件到客户端</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">dojo.requireLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">en</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />dojo.requireLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">fr</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />dojo.requireLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">zh-cn</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">调用国际化包</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">dojo.require(</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">dojo.i18n.common</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">);  </span></div><br />  <br />   现在就可以调用指定locale的 message 了！在示例代码中我举了两个简单的例子：<br /><br />    <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">调用 dojo.locale 指定的locale中对应的消息文件中 hello 那条消息</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">    var salutations_default </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> dojo.i18n.getLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />    dojo.debug(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">default language: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> salutations_default.hello);<br /><br />    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">调用"zh-cn"中 hello 那条消息</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">    var salutations_zh </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> dojo.i18n.getLocalization(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">g11n.messages</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">salutations</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">zh-cn</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />    dojo.debug(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Chinese: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">salutations_zh.hello); </span></div><br /><br />   怎么样，非常简单吧?<br /><br />    除了message bundle, dojo 还声明要支持其他的一些国际化功能，比如Date,Number,Currency等等，在0.3.1中我只发现Date有一定的实现，但是基本就是对 Javascript Date 对象的几个locale相关的方法进行了一下封装，没有多少实质性的提高，看来dojo在国际化的支持方面还有很长的路要走。无论如何0.3.1中提供的message bundle已经有了一个良好的开端，值得期待。<img src ="http://www.blogjava.net/weidy/aggbug/70460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidy/" target="_blank">weidy</a> 2006-09-19 11:19 <a href="http://www.blogjava.net/weidy/archive/2006/09/19/70460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一条JS正则表达式效率分析及优化</title><link>http://www.blogjava.net/weidy/archive/2006/08/17/64205.html</link><dc:creator>weidy</dc:creator><author>weidy</author><pubDate>Thu, 17 Aug 2006 12:50:00 GMT</pubDate><guid>http://www.blogjava.net/weidy/archive/2006/08/17/64205.html</guid><wfw:comment>http://www.blogjava.net/weidy/comments/64205.html</wfw:comment><comments>http://www.blogjava.net/weidy/archive/2006/08/17/64205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidy/comments/commentRss/64205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidy/services/trackbacks/64205.html</trackback:ping><description><![CDATA[
		<p>    前几天遇到一个bug，在一个填email的文本框，当用户录入比较长的一段文本后（比如40位以上），页面就死掉了。检查后发现校验Email的是下面这样一段javascript代码：</p>
		<p>  function checkEmail(email) <br />  {<br />        if (email.length == 0 )<br />            return true;<br />         var validEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;<br />         if (validEmail.test(email))<br />         {<br />                 return true<br />          }<br />           return false<br />    }</p>
		<p>    checkEmail("123456789012345678901234567890123456789012345abcdefghijkl");</p>
		<p>   第一反应是正则表达式写的有问题，<a href="mailto:'@'">'@'</a>前后的 ([\.-]?\w+)* 都可能会引起效率问题。下面仔细分析一下:</p>
		<p>1. 从输入的值来看， engine会首先匹配 \w+， 这是一个贪婪匹配，可以一直匹配到结尾；<br />2. 然后按优先级开始匹配 ([\.-]?\w+)*中的 [\.-]?\w+，这个时候前面的 \w+ 为了后面的匹配成功，必须要重现匹配，让出一点匹配的内容，假设先让出的是 'l'，([\.-]?\w+)*匹配成功；<br />3. ([\.-]?\w+)* 意味着要尽量去匹配多次，再第二次对 [\.-]?\w+ 匹配，这个时候为了第二次匹配的成功，第一次匹配的 [\.-]?\w+ 要让出能满足第二次 [\.-]?\w+ 的内容，也就是它匹配到的'l'，这个时候，第一次匹配的 [\.-]?\w+ 又不满足了，\w+ 又得让出来一个'k'。<br />4. 这样未知匹配次数的 ([\.-]?\w+)* 就形成了一个很大的循环，而在正则表达式中，每次匹配时被括号里模式匹配的东西都是要被存起来供以后使用的，大量的中间结果被缓存，最终导致IE死掉。</p>
		<p>   所以这是一条典型的因为循环尝试匹配导致效率低下的正则表达式， 表达式中两个 ([\.-]?\w+)* 都可能导致解释器的crash，在本例中不需要利用匹配的中间结果，所以解决的办法很简单，在括号加入一个冒号，不保存中间结果就是了。即将那个正则表达式改成如下：</p>
		<p>  /^\w+(?:[\.-]?\w+)*@\w+(?:[\.-]?\w+)*(\.\w{2,3})+$/<br /><br />如果性能还是不能满足需求，可以考虑把这个正则表达式拆成几个小的表达式，分别进行验证。<br /><br /></p>
<img src ="http://www.blogjava.net/weidy/aggbug/64205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidy/" target="_blank">weidy</a> 2006-08-17 20:50 <a href="http://www.blogjava.net/weidy/archive/2006/08/17/64205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不能再等了，快把Table换成DIV吧</title><link>http://www.blogjava.net/weidy/archive/2006/06/01/49766.html</link><dc:creator>weidy</dc:creator><author>weidy</author><pubDate>Thu, 01 Jun 2006 11:22:00 GMT</pubDate><guid>http://www.blogjava.net/weidy/archive/2006/06/01/49766.html</guid><wfw:comment>http://www.blogjava.net/weidy/comments/49766.html</wfw:comment><comments>http://www.blogjava.net/weidy/archive/2006/06/01/49766.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/weidy/comments/commentRss/49766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidy/services/trackbacks/49766.html</trackback:ping><description><![CDATA[  用了四五年的Table排版，没觉得有什么不好，这一段时间迷上了Dojo,才发现如今已经到了不用DIV不行的年代。还是赶紧跟上潮流，把Table换成DIV吧! 改了几个页面，发现比想象的简单，更是尝到了用div的甜头。share自己一点浅浅的经验：<br /><br />1. 先上网搜一下找点前人经验。推荐两篇好文：<br /><br />  http://www.glish.com/css/                         "CSS Layout Techniques: for Fun and Profit"<br />  http://www.alistapart.com/articles/practicalcss   "Practical CSS Layout Tips, Tricks, &amp; Techniques"    <br /><br />2. 随便找几个用DIV+CSS实现，结构又比较简单的网站，研究一下它的页面结构和CSS。比如我就是主要看了下面几个网站：<br /><br />      CSS禅花园          http://csszengarden.com/       <br />      Eclipse.org        http://www.eclipse.org/<br />      mozilla.com        http://www.mozilla.com/<br /><br />作为世界上CSS高手比武的擂台，CSS禅花园的模板实在多的恐怖，以前都只站在欣赏的角度不觉得，自己研究起来，也就只能是挑了一两个看看，再感慨了一番作者真是好创意好美工。有趣的是Eclipse.org的首页居然基本用的都是mozilla.com的CSS，对比着这两个网站看更能看出端倪。<br /><br />3.  自己上手干吧，让你的页面内容和显示样式彻底分离，其实并不难。<img src ="http://www.blogjava.net/weidy/aggbug/49766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidy/" target="_blank">weidy</a> 2006-06-01 19:22 <a href="http://www.blogjava.net/weidy/archive/2006/06/01/49766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GB18030,  你的产品达标了么？</title><link>http://www.blogjava.net/weidy/archive/2006/05/30/48993.html</link><dc:creator>weidy</dc:creator><author>weidy</author><pubDate>Tue, 30 May 2006 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/weidy/archive/2006/05/30/48993.html</guid><wfw:comment>http://www.blogjava.net/weidy/comments/48993.html</wfw:comment><comments>http://www.blogjava.net/weidy/archive/2006/05/30/48993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidy/comments/commentRss/48993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidy/services/trackbacks/48993.html</trackback:ping><description><![CDATA[
		<p>GB18030 的正式名称为“中文国家标准 GB 18030-2000：信息技术 － 信息交换用汉字编码字符集－ 基本集的扩充”。它是针对在中国出售的所有产品制定的政府强制标准要求，该标准于 2001 年 9 月 1 日生效。这也意味着从理论说，每个在出售的产品都要支持GB18030字编码字符集，否则就不让卖[嘿嘿，您的产品达标了么？]。</p>
		<p>有人曾经在他的一篇blog[ <a href="http://blog.cathayan.org/archive/1/2005-7-4">http://blog.cathayan.org/archive/1/2005-7-4</a> ]里非常形象的介绍过 GB18030 的历史,转贴精彩部分如下：</p>
		<p>1，GB2312是很老的东西了，早就发现不够用了。<br />2，94年（还是之前）国家推出了建议性标准gb18000（还是13000我忘了），这个标准其实就是utf-8标准（除了名字，完全一样），同时也建议微软公司采纳。－－（据说是1993年，GB13000，应该是ISO10646）<br />3，微软借口说gb18000还不成熟，为了取得中国市场的垄断地位，自己搞了一套汉字标准，于是它就随着win95和office之类的流行起来了，国家看生米已经煮成了熟饭，只好把这套标准定为国标GBK标准。－－（其实只是指导性标准，并非强制性，GB18030是强制性标准）<br />4，微软到了99年（前后吧），又说GBK已经落伍了，现在流行utf-8标准，准备全盘转换成utf-8，这些把有关部门惹怒了。NND，当年我们推utf-8你说不成熟，自己搞了一套，现在赚得盆满钵满了又自己说要推utf-8了，你丫微软分明就没把政府放在眼里。<br />5，于是政府怒了，强制推行gb18030标准（这个标准前面兼容GBK，其他码位兼容utf-8），算是过渡标准吧。要求微软强制执行，否则产品不得在大陆买。于是基本搞死了微软的WindowsMe，差点搞死了Office2000（据说发行前几个月，微软除了改字符编码就没干其他什么事情）－－（确实，WinMe是我认为的最差的Windows版本，而office2k也是前不着村，后不着店，前后兼容性都差）<br />6，由于以上历史原因，现在就是GB2312，GBK，GB18030，UTF-8并存了。<br />7，如果不是万恶的微软，我们早就用上UTF-8了。</p>
		<p>   或许正是因为微软和中国之间为GB18030发生了这么多的恩恩怨怨和当年微软的仓促上阵，直到现在微软的很多产品对GB18030支持的依然不是很好。访问下面的页面，了解MS对GB18030支持情况及下载Windows下的GB18030安装包：</p>
		<p>
				<a href="http://www.microsoft.com/globaldev/DrIntl/columns/015/default.mspx">http://www.microsoft.com/globaldev/DrIntl/columns/015/default.mspx</a>
		</p>
		<p>虽然MS声明在Windows XP 和 Windows 2000 中通过"add-on"来支持GB18030，但是IE 6.0直接显示 List Box、Drop Down Menu、Text Area、Text Field中的GB18030字符依然还是有问题，下面的这篇文章有相关的介绍：</p>
		<p>
				<a href="http://www-306.ibm.com/software/globalization/gb18030support/retrieve.jsp">http://www-306.ibm.com/software/globalization/gb18030support/retrieve.jsp</a>
		</p>
		<p>在IBM的这篇名为"Globalize your On Demand Business"的文章里，给出的solution是在要显示GB18030的元素上加上类似 "STYLE="font-family:'SimSun-18030'"的CSS声明。在当今WEB2.0如火如荼的年代，我们当然要把内容和显示分离，在CSS中进行配置！当然实际问题要比这个文档说的略微复杂一点，有下面几个比较明显的问题：</p>
		<p>1) 一般来说，大部分html标签(包括Input)都不要，但&lt;Select&gt; 要必须要在CSS中强制指定"font-family"为"SimSun-18030"。<br />2) 当要为一个元素指定多个字体的时候，要将"SimSun-18030"作为首选，即放在最前面。<br />3) 对于大部分标签,当font-family设为 SimSun-18030 时，而font-size 为：8pt,9pt,11px 时，有一部分字符比如 "㊣"和一些标点 会显示成其他的字符，对 "㊣" 这样的字符，IE 会出现乱码。原因可能是因为这些个font-size针对WEB做了优化。</p>
		<p>小结：GB18030是个形式大于内容的东西，但是如果想要让你的产品理直气壮的再中国销售，略微花点时间设置一下还是有必要的。</p>
		<p> </p>
<img src ="http://www.blogjava.net/weidy/aggbug/48993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidy/" target="_blank">weidy</a> 2006-05-30 14:56 <a href="http://www.blogjava.net/weidy/archive/2006/05/30/48993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>