星期二, 一月 23, 2007

GOOGLE的设计就是一个非常好的国际化应用榜样,我以GOOGLE搜索引擎的国际化
支持为例说明如何实现国际化应用的设计。

  GOOGLE用户经常有这样的感觉:

  为什么我第一次去GOOGLE,出现的就是中文的界面?

  为什么在所有网站中查中文:有时候还会匹配到日文网站的结果?比如:就以
"google 秘密"这个查询为例:我们在输入框输入"google 秘密"
http://www.google.com/search?hl=zh-CN&newwindow=1&q=google+%C3%D8%C3%DC&btnG=Google%CB%D1%CB%F7&lr=

首先我将GOOGLE对查询的处理流程简单的说明如下:

* 客户端浏览器输入;
* 查询字符串按客户端系统编码方式(GBK)转换成字节流,并URL Encode后
传给GOOGLE;
* GOOLGE将输入的字符串URL Decode后,按照客户端的系统编码方式将这个字
符串(字节串)解码成UniCode;
* 查询过程,完全是基于UniCode的匹配过程,比如对于“中文”这2个字在简体
繁体中文和日文里都有,因此无论是何种语言的页面包含这2个字的页面都
能匹配上;
* 结果集输出:将查询结果集的内容(UNICODE)按客户端系统编码方式
(GBK)“编码”成的字节流,返回给浏览器。

具体说明:

* GOOGLE 如何识别出浏览器使用的“界面语言”:GOOGLE获得这个查询字符串
的同时,一般会根据hl=zh-CN这个参数,知道了客户端使用的字符集编码方
式,如果用户第一次访问:GOOGLE会根据浏览器的发送的请求中包含的
Accept language: zh_cn这个头信息来判别,这就是为什么现在很多用户第
一次去GOOGLE的时候它就能自动识别出来的原因。这个参数在之后的查询和
翻页过程中通过 cookie保存,并通过get方式一直传递给GOOGLE(因此你也
可以使用使用偏好设置界面语言),从而可靠地识别出客户端的编码方式。
* GOOGLE如何查询:也许从URL上你可以看到:传过去的“秘密”这个查询实际
上是%C3%D8%C3%DC=>"秘密" 这2个字按GBK(WINDOWS客户端缺省的编码方
式)编码方式的4个字节然后再URLEncode后的形式(关于中文编码方式请参
考:汉字的编码方式),GOOGLE将查询字符串按这个编码方式解码并转成
UniCode,然后用这个UniCode编码方式的字符串进行内部的查询操作。而任
何语言的页面都是先转换成UniCode后存储在GOOGLE的数据索引库里的。在
UniCode中日文和中文写法一样的字,用的是同样的编码。因此,如果你没
有指定语言过滤的话,日文网页的结果就首先被命中了;因此,对于中文客
户端的查询:如果相应字符在UniCode中和繁体,日文映射的字一样,就可
以匹配到相应的日文网页,繁体中文网页...,GOOGLE的查询结果也首先是
UniCode的,最后将UniCode结果按照客户端的编码方式转换成字节流,返回
到客户端。

没有评论: