xhtml中的语言控制lang值

在建立自己的个人博客之前,我一直试用过很多博客网站,live space,blogger,新浪博客,博客中国等等等等。但是最终我不得不抛弃这些,一个重要原因就是这些网站没有很好的支持xhtml的语言选项。下面细细道来。

每一个html页面都有头部(header),一般会长的像下面这样。译言

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml"  dir="ltr" lang="zh-CN">

每一本HowToMakeLove的教科书都应该告诉你这两句是干嘛用的,没有的话立刻扔了它,但是却很少有人告诉你它究竟干嘛用。这两句是给浏览器“带个话”用的。给浏览器传个话,这句话里面有个重要内容就是告诉浏览器俺这个页面自己提供了哪种语言的内容——就是这个”lang”。这个值包含两个下面两个内容:

  • 语言代码(ISO-639)
  • 国家代码(ISO-3611)

比如上面的例子里写的”zh-CN”标记的是“中文-中国大陆”。在网页头部嵌入这两个代码之后,就标志这这个网页表述的内容是简体中文。浏览器得到根据网页本身传达的这则消息,将使用正确的语言设置表现/描画网页——描绘的最重要的内容之一当然是字体。Firefox浏览器在Tools-Preference-Contents-Fonts里面有各种语言与使用字体的一一对应,用户可以自定义Firefox的字体选项。IE这个自作聪明的笨蛋,根本无视这种需求。

当网页并没有特别声明自己所包含内容的语言时,浏览器一般会根据操作系统的locale或者网页内容编码猜测一种语言套上去。在这种情况下,即使网页本身并没有声明lang值,简体中文版本的Windows用户也不会发现他们浏览的中文网页或者英文网页有什么问题。因为,正好,浏览器自己猜对了!

然而,像我这样身在异国他乡的可怜人,就没那么幸运了。操作系统的默认locale可能是日语或者葡萄牙语,相应的浏览器猜出来的语言就不能每次都懵对,于是乎我只能忍受着毁掉视力的危险,巴巴的看着各种变形的中文网页。下面是同一网页声明和不声明lang的对比:

不声明lang值的情况

不声明lang值的情况

声明lang值的情况

声明lang值的情况

造成网页显示不正常的另一个原因是因为Unicode的编码。Unicode中将中日韩三国使用的相同汉字不加区分的编码为一个唯一值。这就造成了在语言lang值缺少的情况下浏览器不能区分这三国的汉字的窘境。这一点也是Unicode的CJK空间编码饱受诽议的一个重要原因。比如“直”(zhi2)直线的直,在简体中文中,它的写法是“直”

zhi in Chinese

Chinese

,而在日语中,它的写法是“

tyoku in Japanese

Japanese

。如果,网页没有特别声明自身的语言,在一个日文操作系统上显示的中文网页可能到处都是错别字。

解决这个问题的方法就是给你的网页加上正确的lang值,特别是“国际化”背景下的(说大话了),你也不晓得你的用户到底从哪里来,而且这件事情,简直就是举手之劳,何乐不为?

如果一个网页是多语言的,比如译言这样的翻译社区,就更应该注意lang值的使用。lang,可以出现在DOM的多个子元素上,这里就不一一列举了,自己查文档吧。仅仅举个例子。

我可以将中文“直线”翻译成日语“直線”。

这句话一般可能在一个<p>标签中出现,为了解决显示多语言的问题可以采用<span>标签把文字分割开来写,像下面这样:

<p>我可以将中文“<span lang=”zh-CN”>直线</span>”翻译成日语“<span lang=”jp”>直線</span>”。</p>

当然,你可以给你的p标签,div标签等等加上特有的lang来保证网页的局部正常显示。

3 thoughts on “xhtml中的语言控制lang值

发表评论