新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 关于 XML 的一般性技术讨论,提供 XML入门资料 和 XML教程
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XML基础 』 → [原创]关于xml:lang 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8197 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [原创]关于xml:lang 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     宇义 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究汇编)
      文章:22
      积分:297
      门派:XML.ORG.CN
      注册:2005/6/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给宇义发送一个短消息 把宇义加入好友 查看宇义的个人资料 搜索宇义在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看宇义的博客楼主
    发贴心情 [原创]关于xml:lang

    昨天在项目中需要用到xml的xml:lang属性,经过一番查找,发现这个属性的定义还比较复杂,中文的文档也比较少,因此在此记录,以便参考。

    关于xml:lang,我们先看看W3的官方定义:

    引用来自 http://www.w3.org/TR/xml/#sec-lang-tag 引用来自 http://www.w3.org/TR/xml/#sec-lang-tag

    In document processing, it is often useful to identify the natural or formal language in which the content is written. A special attribute named xml:lang may be inserted in documents to specify the language used in the contents and attribute values of any element in an XML document. In valid documents, this attribute, like any other, MUST be declared if it is used. The values of the attribute are language identifiers as defined by [IETF RFC 3066], Tags for the Identification of Languages, or its successor; in addition, the empty string may be specified.


    以上我们得知三点(见粗体):


        * 这是一个XML中一个特殊的属性。
          XML作为可扩展标记语言,除了xml:lang和xmlns以外,没有定义任何其他有语义的属性或元素。且xml这个命名空间无需通过xmlns:xml="..."定义,因此,xml:lang是个特殊的属性;
        * 其中的值需要参考RFC 3066标准。
        * 可以为空。

    其中第二点就是我们所需要的,因此我们来到RFC 3066标准的页面:http://www.ietf.org/rfc/rfc3066.txt,这里是这个标准的翻译版本:http://www.networkdictionary.cn/rfc/rfc306.php

    在此标准中并没有定义所有可选的语言代码,而是限制了语言代码的写法:

    引用来自 http://www.networkdictionary.cn/rfc/rfc306.php#4 引用来自 http://www.networkdictionary.cn/rfc/rfc306.php#4

    2.2 语言标签来源

    根据本文档第三部分的规定,语言标签的名字域由IANA(Internet Assigned Numbers Authority,见[rfc 2860])管理。

    下列规则适用于主要的标签:

    -根据ISO 标准639中的分配,所有的含2个字母的标签被解释为,“表示语言中的名称”(见[ISO 639]),或是稍后被分配为维护和调节的标准体(注意,有一处校正尚未完成,它将在ISO 639-1:2000中发布)。

    -根据IOS标准639中第二部分的分配,所有的含3个字母的标签被解释为,“表示语言名称—2:Ahpha-3 code(见ISO 639-2)“,或者稍后被分配为维护和调节的标准体(也在ISO 639-2中有说明)。

    -值I 被保留用作IANA定义的注册值;

    -值X被保留为私用,所以X就不能被IANA注册。

    -除非要修改这个标准,其他的值不可分配。

    保留所有其他标签值的原因,是要为ISO 639 标准的修改留有余地;用I和X是我们为扩展这个机制,以适应我们需求所能使用的最小权限。

    下列规则适用于第二标签(subtag):

    -根据ISO 3166 alpha-2 的国家标识码(见[ISO 3166]),所有的含2个字母的标签被阐释,或是稍后被分配为维护和调节的标准体,表示这个语言所在的区域。

    -根据本文档的第五部分,含3至8个字母的标签可以通过IANA注册。

    -除非本标准被修改,只含1个字母的标签不可用。

    除以上提到的标签,第二标签(second subtag)之外,没有对第三标签(third tag)以及之后的标签的语法规定。

    由本章所分配阐释的代码构造的标签在使用前不需要IANA注册。

    标签中的信息可以是:

    -国家鉴定,例如en-US(这种用法在ISO 639中有详细说明)。

    -方言及变体信息,例如en-scouse.

    -没有在ISO 639中列出的语言,也不是变体信息的,可以在它前面加前缀i注册,例如I—tsolyani.

    -区域鉴定,例如sgn-US-MA(马莎的葡萄园手势语,被发现于美国马萨诸塞的州)。


    总结如下:


        * 语言代码包含多段,第一段是必须的,第二段和以后是可选的。段之间用“-”分隔;
        * 第一段如果为2个字符,则其被解释为ISO 639标准中的语言代码;
        * 第一段如果为3个字符,则其被解释为ISO 639-2标准中的语言代码;
        * 第一段其他情况除了i和x有特殊用途外,不可以出现其他值。
        * 第二段如果为2个字符,则其被解释为ISO 3166标准中的国家标识码;
        * 第二段如果为3-8个字符,其值需要在IANA注册;
        * 第二段不可为1个字符;
        * 第三段及以后的段没有规定。

    标注中提到的几个例子:


        * 国家鉴定,例如en-US(这种用法在ISO 639中有详细说明)。
        * 方言及变体信息,例如en-scouse.
        * 没有在ISO 639中列出的语言,也不是变体信息的,可以在它前面加前缀i注册,例如I—tsolyani.
        * 区域鉴定,例如sgn-US-MA(马莎的葡萄园手势语,被发现于美国马萨诸塞的州)。

    标准中还对语言标签的选择做出了限制:
    引用来自 http://www.networkdictionary.cn/rfc/rfc306.php#5 引用来自 http://www.networkdictionary.cn/rfc/rfc306.php#5

    2.3 语言标签的选择

    我们可能会偶尔遇到同样的文本有几种可能的标签的情况。

    如果所有的用户发送同样的标签,在所有的文档中使用同一种语言的标签,那将是再好不过的事了。如果应用程序有需要使这些规则在特定场合不适用,则应用协议必须指明是如何变化的。

    下面几点基于为标注的实体所知的标签的集合:

    1.使用最精确的标签,使意义明确,并且在一定范围内适用;

    2.如果一种语言同时拥有ISO 639-1 的2字母码和ISO 639-2 的3字母码,必须应用由ISO 639-1衍生的2字母码。

    3.当一种语言没有ISO 639-1 的2字母码,并且ISO 639-2/T(Terminology)码和ISO 639-2/(Bibliographic)码不同,必须使用Terminology(术语)码。注意:目前,所有的语言都包含2字母码,并且开发者(对于这一点的不快)已经适当的与ISO取得了联系,所以,我们不希望这种情况发生。

    4.当一种语言同时有两种标签,一个是IANA-registered 标签,另一个是从ISO注册码衍生而来(的标签)时,你必须要使用ISO 标签。注意:当这种情况发生时,IANAregistered 标签应立即被否决(禁止使用)。

    5.你不应该是用UND(未经决定的)(标签)代码,除非应用协议迫使你给语言标签赋值,甚至于这种语言根本不被人所知时,省略标签将是较好的选择。

    6.你不应该使用MUL(多重)标签,如果协议允许你应用多重语言。

    注意:为了避免应用中的版本危机(如RFC 1766中提到的那样),ISO 639 RA-JAC(Registration Authority Joint Advisory Committee)已经在以下决策问题上达成了共识:

    “在ISO/DIS 639-1作为国际标准颁布以后,所有的新的2字节码均不可以被加入ISO 639-1中,除非某个3字节码也同时被加入ISO 639-2中。除此之外,在没有相应的合法2字节码时,3字节码也同样无效。“

    这将是一种保证。例如,一个用户应用"hwi"(hawaiian)(它不包含2字节码),他或
    她将不会发现自己的数据因为最后加入的2字节码而变得无效。


    不再细说,需要注意的就是当639-1标准中有此语言的2字节编码时不应该选用它的639-2标准中的3字节编码。如zh-cn而非zho-cn或chi-cn。

    到此,我们便了解的xml:lang中预言编码的定义了,他涉及了两个重要的标准,ISO 639语言标准和ISO 3166国家代码标准。这两个标准的详细内容可以在这里查到:

    ISO 639: http://www.sil.org/iso639-3/codes.asp
    ISO 3166: http://www.iso.org/iso/country_codes/iso_3166_code_lists.htm

    遵循这个标准,我们可以总结出常见的可在xml:lang中使用的语言编码:
    zh-cn 简体中文
    zh-tw 繁体中文
    yue 粤语
    pny 拼音 (这是在ISO 639-3中定义的,虽然RFC 3066中并没有提到,但其兼容ISO 639-2,因此应该可以使用)


    [此贴子已经被作者于2008-7-22 10:36:04编辑过]

       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/7/22 9:59:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML基础 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/9/6 4:11:47

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    3,965.820ms