《注意:xhtml和html网页首先声明语言信息》由会员分享,可在线阅读,更多相关《注意:xhtml和html网页首先声明语言信息(4页珍藏版)》请在金锄头文库上搜索。
1、 注意:XHTML 和 HTML 网页首先声明语言信息当我开始 XHTML 1.1 的时候,我一直不知道应该在 xml:lang 上写什么好,我想使用中文,它的值是 zh、zh-cn/zh-CN 还是 gb2312/gbk/gb18030 或者 utf8?通常遇到问题我都优先 Google 中文,无奈也是找不 到答案。看到一些权威的网站上使用 gb2312,我还差点相信了,但根据我使用 Linux 中设置语言的经验, 我直觉告诉我这是错误的。于是开始了把范围缩小到 W3C 中去 Google,找到了 Tutorial: Using language information in XHTML,
2、HTML and CSS (DRAFT),细阅,终于走出误区,愿将经验与大家分享。依旧是翻译,但这篇文章太长了,而且还有许多我们用不着的信息,这次我只选择了部分,希望能把问 题说清楚就好。声明文档与文本语言为什么要声明语言关于文档语言的信息对于屏幕阅读器和易用性都极为重要,从一开始就有利。这些程序需要了解它们是 否能从文本中生成输出,或者是否需要转到不同的语言模式。标记语言信息也对应用恰当的样式变更有好处。比如,需要改变字体来调节不同字符,依据语言来生成 不用的引号等等。有的浏览器使用语言信息为中文简体,中文繁体,日文和韩文来侦测适合的字体。但是,在一个使用 Unicode 编码的页面中,这些
3、语言可能共享相同的表意字符内码。操这些语言的人可能在使用这些字符上 的一些小细节上有所不同。下面的插图演示了仅仅改变语言标签,在 Mozilla 上的文本的效果:同一表一字符在不同语言中的形状标记语言信息也允许你使用脚本提取指定语言的元素。举个例子,使用 XSLT lang()函数可以从一个文件 中提取指定语言的文本,或者在 XSL-FO 转换的时候应用语言指定样式。在许多的案例中,第一次开发内容时,你可能不会意识到这些应用的重要性,虽然它们在创建的时候一 般非常容易添加,这就会在需要样式翻新时遇上麻烦。另外,一些为语言标签标记的程序还在早期开发或者缺乏中,但是,从现在起你就应该为你的内容增加
4、 语言信息,以便在技术成熟的时候收获未来的好处。 总体上始终为文档在标签中声明语言HTML 文档总体上应该声明文档的语言,可以通过在 html 标签中增加 lang 属性来实现。比如,下面声明 了一个使用加拿大法语(Canadian French)的文档:稍后我们会更具体地讲述如何为语言属性指定值。当把 XHTML 伺服为 text/html,你应该在 html 元素中都使用 lang 属性和 xml:lang 属性。xml:lang 属性是在 XML 中确定语言信息的标准用法。以下演示你应该如何标记先前以 text/html 伺服的 XHTML 1.0 的例 子:http:/www.w3.o
5、rg/1999/xhtml“xml:lang 属性在处理 HTML 文件时并没有实际用处,但从 lang 属性继承过来意味着你要使脚本或校验器 把该文档当作 XML。如果你以 XML(比如,使用像 applications/xhtml+xml 的 MIME 类型)或者 XHTML 1.1 来伺服 XHTML 的话,你不再需要 lang 属性,因为它已经跟 HTML 语言分离了。单独的 xml:lang 属性就已足够。http:/www.w3.org/1999/xhtml“始终声明文本的语言变更在与内容主要语言不同的文本中,应该指出该文本的语言。方法跟与总体上始终为文档在标签中 声明语言这一节相
6、同使用 lang 或者 xml:lang 属性。例如,在 HTML 中你可以写作:The French for Cat is chat.lang 属性可以用在除 applet、base、basefont、br、frame、frameset、iframe、param 和 script 之外的任何 HTML 元素上。又,以 text/html 伺服的 XHTML 1.0,可以一起使用两个属性,比如:The title in Chinese is 中国科学院文献情报中心.注意了,在最后一个例子中,在中文文本的周围没有让我们可以附加语言信息的标记,为达到目的所以 引入了 span 元素。(请查看该段的
7、源代码译者注)如果以 XML 伺服 XHTML,像上节所描述的那样,你应该只使用 xml:lang 属性。指定语言属性的值使用 RFC 3066 规则RFC 3066 是定义如何使用语言标签来识别语言的标准。语言标签由一个主要的 subtag,尾随零个或更多附属的 subtag,由连字符分开。主 subtag 代表一种语言(有两种例外,i-和 x-,在下面会讨论) ,任意尾随的 subtag 服务于修饰该语言的 方言或用法。后面的 subtag 一般代表国家,方言或文字体系。下面的例子表明了该文档不仅使用英语而且还是英式英语,就是说,跟美式英语相对的英语写成的。subtag 对大小写是敏感的,
8、包括从 A 到 Z,a 到 z,0 到 9 的字母和数字,而且不能多于 8 个字符。需要注意的是 HTML 规范仍然推荐使用 RFC 1766 来确定语言。RFC 3066 是 RFC 1766 的升级并且大大 超越,而在 HTML 规范中有一个计划勘错表,因此你应该使用 RFC 3066 不管 HTML 规范的现阶段如何 解说。主 subtag所有的初始 subtag 必须是 1,2 或者 3 个字母的长度。所有 2 和 3 字母的 subtag 都是定义代码来代表语言 的 ISO 639 part 2 中的语言代码。1 个字母的 subtag 是一个 i-或 x-前缀,稍后我们会描述。尽管
9、代码是大小写敏感,它们经常小写,但这仅仅是一个惯例而已。又注意,ISO 提供 2 字母和 3 字母代码的选择时,你应该选择 2 字母的。这就确保了为每一种语言尽快地 使用一个独一无二的代码,稍过时的使用 2 字母代码(基于 RFC 1766,不允许 3 字母长度的代码)数据 也就不用更改了。同时,哪些 3 字母代码应避免的问题不是问题,因为所有的有两种不同的 3 字母代码 的少数语言同时也会有 2 字母代码。附 subtag增加附 subtag 可以表示地理区域,方言,文字体系,或者其他对主要(语言)subtag 的改进。主 subtag 可以尾随任意数目的 subtag,尽管多于一个的并不常
10、见。RFC 3066 指出,任何位于次位置的 2 字母 subtag 都是 ISO 3166 国家代码。在任何第三位置或接下来的位 置使用 subtag 都没有规则。2 字母的用以表示国家的 ISO 代码通常大写,但这也仅仅是一个惯例。特殊的主 subtagRFC 3066 定义了一些在可能不会从 ISO 语言代码开始的例子。以 i-开始的语言标签是为 IANA 注册语言标签(IANA-registered language tags)保留的。举些例子:* i-mingo * i-klingon * i-tao以 x-开始的语言标签为用户自定义语言标签提供了构件。次位置上的标签必须多于一个字母
11、,并且不能 为以下的保留 subtag:AA, QM-QZ, XA-XZ, and ZZ。当然,在基于 2 字母或 3 字母的 ISO 代码可用的时候,这些识别语言的方法都不需要使用。这些方法用 于限制或者防止可互用语言的混淆。IANA 注册语言标签可以通过在 RFC 3066 提到的 email 提交程序来注册 IANA 语言标签。这些标签可以有 3 到 8 字母长的次 位置代码。注册 IANA 代码比使用用户自定义代码好,因为它最小化了混淆的可能性,因为 IANA 代码对其他人是 显性的。另一方面,IANA 标签是 ISO 标准声明不赞成的新代码。声明不赞成的 IANA 标签包括 no-
12、bok(挪威“Book 语言”使用 ISO 639 的 nb) ,i-navajo(Navajo使用 ISO 639 的 lb) ,i- lux((Luxembourgish使用 ISO 639 的 lb) ,还有其他更多的。基于此理由,IANA 注册代码应该只临 时出现,用以填补 ISO 代码的空缺。尽管 i-前缀为 IANA 代码所保留,但不是所有的 IANA 代码都是从它开始的。比如,有很多中文方言已经 注册了 IANA 代码,包括 zh-guoyu(国语,呵呵,为什么不是普通话 putonghua?) ,zh-hakka(客家) , zh-min(闽) ,zh-min-nan(闽南)
13、,zh-wuu(吴)等等。同时,业已注册的 IANA 代码允许你指定繁体或简体中文。过去这必须为简体中文使用 zh-CN(中国大 陆)和为繁体中文使用 zh-TW(中国台湾) 。但你不能保证其他人认知甚至遵循这个惯例。比如,有人使 用 zh-HK 来表示繁体中文。现在 IANA 使用了 zh-Hans 和 zh-Hant 代码分别指定简体中文和繁体中文。下 面两段举例说明了这两个代码的使用:当世界需要沟通时,请用 Unicode!當世界需要溝通時,請用統一碼(Unicode)语言标签的其他要点尽管大部分时候 RFC3066 语言标签运作良好,但仍然有以下一些问题:* 需要比 ISO 所提供的更
14、多的代码来转换世界上接近 6000 中的语言尚未覆盖需要表达通用区域的代码, 比如,现在仍然没有为许多组织用以创建西班牙语内容的泛拉美西班牙语代码。 * 尚未覆盖需要表达通用区域的代码,比如,现在仍然没有为许多组织用以创建西班牙语内容的泛拉美 西班牙语代码。 * 现在仍然缺乏语言标签值与 locale 的清晰性。locale 是语言加上地理区域的组合,在软件中通常用来设 置日期与时间之类的事情。 * 有时候确实需要区分使用附属于该语言的文字体系。比如,蒙古人可能写蒙语或斯拉夫语,克罗地亚 也可能写拉丁语或者斯拉夫语现在来自 ISO TC37,SIL 和 W3C 的工作人员都在为这些问题的解决方案努力着。同时,你应该始终记住,你可以在 IANA 注册你所需要的语言标签。