|
前页|后页| 目录|元素| 特性 语言信息和文字方向目录
文档的这部分讨论两个重要的影响HTML国际化的因素:指
定语言(lang特性)和
文档的文字方向(dir特性).
指定文档内容的语言:lang特性特性定义
语言信息能够在变化多端的场合中用来控制对标注文档
的渲染.一些此信息提供帮助的情况为:
[RFC1766] 定义和解释了在HTML文档中必须用到的语言代码. 简单地说,语言代码由主代码和可能的空系列子代码组 成: ?language-code?=primary-code *("-"subcode ) 这里是一些语言代码实例:
双字母主代码作为[ISO639]
语言缩写保留字.双字母代码包括FR(法语),DE(德语),IT(意
大利语),NL(荷兰语),EL(希腊语),ES(西班牙语),PT(葡萄牙
语),AR(阿拉伯语),HE(希伯来语),RU(俄语),ZH(汉语),JA(日
语),HI(北印度语),UR(乌尔都语)和SA(梵文,Sanskrit).
所有双字母子代码被作为[ISO3166] 定义的国家代码来理解. 语言代码的继承一个元素根据下列的优先权(从高到低)继承语言代码信 息:
Content-Language:en-cockney 在本例中,文档主语言代码是法语("fr").
其中一段被?声明为西班牙语("es"),在此以后主语言改变
回法语.下列的段落还包括了?一条日文("ja")短语,而后主
语言代码依然回到法语.
<HTML lang="fr"> <BODY> ...Interpreted as French... <P lang="es">...Interpreted as Spanish... <P>...Interpreted as French again... <P>...French text interrupted by<EM lang="ja">some Japanese</EM>French begins here again... </BODY> </HTML> 语言代码的演绎在HTML上下文关系中,一种语言代码首先应当被用户代理 器作为层次接受,其次为单个的接受.当用户代理器根据 语言信息调整了代码时(通过对风格页语言代码和lang 值的比较后)应当经常证实是否完全的符合,但同时也应 当充分判断是否完全符合主代码.因此,如果HTML 元素中的lang特性值 是"en-US",一个用户代理器首先应当?趋?向于符合"en-US"的 风格信息,然后再是更通常?的"US"值.注意:语言代码的控制者并不保证所有的
具有通常前缀的语言能够被流利地理解.他们通常接受一
个对用户来说为真的请求.
对于某些人为的语言如Elfish (译者:小精灵?恶作剧?恶 作剧的小精灵?)或Klingon,它将使用它的辨别力来使用lang 特性来指示由内容解码方式而来的语言.直到[RFC1766] 的继承者来定义一个标准的解决方法,一个可能性是使用 x-前缀,例如x-elfish. 指定文字方向:dir特性特性定义
对于一个文档的主语言指定的扩展信息.作者需要指定缺
省的文档条目和文句的文字方向.
[UNICODE] 说明书分配了Unicode 字符的方向并定义了一个(复合的)用 来决定文字适当方向的运算法则.如果文档不包含可显示 的从右到左内容,一个一致性用户代理器并不需要申请[UNICODE] 双向运算方法.如果一个文档包含从右到左的字符,并且 如果用户代理器选择来显示那个字符,用户代理器必须使 用双向运算法则. 虽然Unicode 指定了处理文字方向的特殊字符,HTML提供 了高级的标注结构来完成此事:dir 特性(不要与DIR元素混 淆)以及BDO元素.因此, 为了表达一个希伯来的引用语,可以直觉的写成 <Q lang="he" dir="rtl">...a Hebrew quotation...</Q>然后是等同于Unicode 的字符参照: ‫״...a Hebrew quotation...״‬用户代理器必须不使用lang 特性来决定文字方向. 在忽略本地文本的情况下,缺省的方向继承于包含它的 元素. 双向运算法则介绍下面的例程举例说明了双向运算法则期望的行为请仔细研究下面的例程文档:
?english1HEBREW2english3HEBREW4english5HEBREW6这此例中的字符(以及所有的相关举例?说明)在计算机中 的存储方式如下显示:在文件中首先的字符是"e",其次为 "n"而最后为"6". 设想包含这个段?落的文档的主要语言是英语(从左到右). 那么这句的正确陈述了: english12WERBEHenglish34WERBEHenglish56WERBEH ------- ?------- ?------- ?H ?H ?H -------------------------------------------------- E有点线的语句说明句子的结构:英语主导并且插入一些犹 太文.当犹太文片断被提供双向运算法则用户代理正确地 颠倒过来时并无需额外的标志来完成正确的说明. 在另一方面,如果文档的主导语言是犹太文(从右到左), 则正确的陈述为: 6WERBEHenglish54WERBEHenglish32WERBEHenglish1 ?-------- -------- -------- ?E ?E ?E -------------------------------------------------- H于此情况,整句被陈述为从右到?左而插入的英语次序被双 向运算法则颠倒了过来. 文字方向的继承Unicode 双向运算法则需要一个初始的文字方向.为了指定 基本的块一级元素的文字方向,可以设置?dir 特性.缺省的?dir特性 是"ltr"(从左到右).当?dir特性为块一级 的元素作设定时,它仍旧对持续的元素和任何的嵌套块一 级元素有影响.对嵌套元素设定dir 特性则可超越继承值. 为了对整个文档设定主导文本方向,可在HTML 元素中设定dir特性. 例: <HTML dir="RTL"> ...right-to-left text... <P dir="ltr">...left-to-right text...</P> <P>...right-to-left text again...</P> </HTML> 为插入文字设定方向[UNICODE] 双向运算法则自动地根据它们的继承方向颠倒插入字符 的次序(如前例).无论如何,只有一级插入可以被识别.为 了完成更多级别的插入方向的改变,你必须在行中元素中 使用dir特性.考虑与前相同的例?程:
作者也可以使用特殊的Unicode 字符来完成插入方向的改
变.为了完成插入文字的从左到右,可用字符LEFT-TO-RIGHT EMBEDDING
("LRE",16进制202A)和POP DIRECTIONAL FORMATTING("PDF",16进制202C)
来围绕要插入的文字.为了完成从右到左的插入,可用RIGHT-TO-LEFT
EMBEDDING("RTE",16进制202B)和PDF字符来包绕文字.
english1HEBREW2english3HEBREW4english5HEBREW6设想包含此段落的文档的主导语言是英语.上面的英语句 子从HEBREW2至HEBREW4包含了一个犹太语部分.犹太语部分 包含了英语引用(english3).因此希望得到的陈述为: english14WERBEHenglish32WERBEHenglish56WERBEH ------- ?E ------------------------ ?H -------------------------------------------------- ?E为了完成两次插入方向改变,我们必须提供额外的信息, 这里我们清楚地为第二个插入作了限制.在此例中,我们 使用SPAN元素和dir 特性来标注文本: english1 <SPAN dir="RTL">HEBREW2 english3 HEBREW4</SPAN>english5HEBREW6 使用Unicode 字符来标注HTML方向.作
者和权威软件的设计者应当意识到如果dir
属性与相对的[ISO10646]
格式字符一起使用时会引起的冲突.字愿非此即彼地来使
用.标注方法提供了一种好些的完整的文档结构保证和减
少了?在简单编辑器中编辑双向文本的问题.但某此软件可
能更倾向于[ISO10646]
字符.如果两种方法同时使用,?要非常注意并应当多多尝?
试?来保证正确的嵌套和插入方向或是否产生未定义的覆
盖和渲染结果.
超越双向运算法则:?A NAME="edef-BDO">BDO元素<!ELEMENTBDO - - (%inline)* ?-- I18N BiDi over-ride --> <!ATTLIST BDO ?lang ?NAME #IMPLIED?--[RFC1766]language value -- ?dir (ltr|rtl)?#REQUIRED -- directionality -- ?>开始标记:需要,结束标记:需要 双向运算法则和dir属 性通常足以满足插入的方向改变.无论如何,某些情况下 双向运算法则会产生错误?的陈述结果.BDO 元素允许作者对选定的文字片断关闭双向运算法则. 再来研究与前包含相同文字的英语句子:
english1HEBREW2english3HEBREW4english5HEBREW6设想字符次序正被一个用户代理器从左至右读入(位元流 以"e"并以"6"结束)."e"在"english1"中的"n"左边,这是作者 趋向的英文输入.无论如何,"HEBREW2"中的"H"在"E"的左边, 但这并不是犹太作者用来建立他们的文档的方法.例如, MIME([RFC2045]) 标准就需要电子邮件在位元流中按从?右至左的字符次序 排序.这与[UNICODE] 的双向运算法则冲突,?它希望?犹?太字符从左至右排序. 因此,如果上例中的"HEBREW4"来自于犹太邮件,它的结构
实际上为"4WERBEH".一个提供双向运算法则的用户代理器代
将以错误的次序显示字符.
在此例中最容易的解决方式为通过在BDO
元素中放入犹太文电子邮件引用来超越双向运算法则,这
里的dir特性为"LTR":
BDO应当被用于希望绝
对次序的场合(如:多语种的文档编号).dir
特性由这个元素决定.
english1 HEBREW2 english3 <BDO dir="LTR">4WERBEH</BDO>english5HEBREW6这告诉双向运算法则"让我从左到右!"并且生成希望的陈 述: english12WERBEHenglish34WERBEHenglish56WERBEH 作者也可以使用特殊的Unicode 字符来超越双向运算法 则---LEFT-TO-RIGHT OVERRIDE(202D)或RIGHT-TO-LEFT OVERRIDE(16进制 202E).而POP DIRECTIONAL FORMATTING(16进制202C)字符在两种超 越中均作为结束字符. 双向和字符解码:根据[RFC1555]
和[RFC1556],
在MIME电子邮件中有特殊的使用"chatset"参数值的协定来
指定双向流.参数值"iso-8859-8"(犹太文)指视觉解码,"iso-8859-8-i"
指暗式的双向解码,和"iso-8859-8-e"指显示的方向性.
因为HTML使用完全的双向运算方式,确认文档必须加 上"iso-8859-8-e"标签.暗式的双向性是全部Unicode 运算方式 的一部分,?所以值"iso-8859-8-i"也可以被接受,但应当不使 用. 值"iso-8859-8"定义了文档是视觉格式的,没有使用某 些标注(象右对齐的TABLE 和没有自动换行)来保证在老的用户代理器上合理地不进 行双向处理.这样的文档并不遵守目前的规格.如果需要, 它们可以通过在必须的地方加上?BDO 标记被制作成目前的规格(同时也在老的用户代理器上正 确显示).相反的,在[RFC1555] 和[RFC1556] 说到的,以及iso-8859-6(阿拉伯语)则不是可视规则的. 字符方向和加入的提供由于某些情况下特定字符的方向含糊(如阿拉伯语的某些 情况),[UNICODE] 规格包含了一些用来正确解决的字符.HTML4.0包括一套命名字符条目 来允许提供特定的Unicode 双向运算法则,并对某些在渲染 时要考虑上下文语法关系的语言提供了一些帮助.下面的DTD选录一些方向条目的陈述: <!ENTITY zwnj CDATA "‌"--=zero width non-joiner--> <!ENTITY zwj?CDATA "‍"--=zero width joiner--> <!ENTITY lrm?CDATA "‎"--=left-to-right mark--> <!ENTITY rlm?CDATA "‏"--=right-to-left mark-->zwnj条目用来在对根据上下文加入可能出现但并 不应当出现的情况下封锁加入.zwj条目则相反.例 如,阿拉件字母"HEH"被用作"Hijri"的缩写,是伊斯兰教历系 统的名称.而孤立"HEH"形式看上去象阿拉伯脚本中的数字 5(根据印度数字),为了避免"HEH"作为在年份的最后被作 为数字5,以字母开头的"HEH"被使用.无论如何,这里没有 下文可以被跟?随(就是说加入的字母).zwj字符提供 了这个关系. 相同的,在波斯语中,有些情况一个字母后在草书中加 入的字母在标准情况下是不该有的.zwnj被用来封 锁在这种情况下加入字母. 对于其它的字符,lrm和rlm 被用来考虑语 义不明字符的方向.例?如,一个双引号标记了一个阿拉伯 字母和一个拉丁字母,那么引号的方向则不明确(按阿拉 伯文字还是拉丁文字?).lrm和rlm字符有一 个方向属性但没有宽度和词/句断义属性.请参阅[UNICODE] 以获得更多细节. 纵向翻转字符:双向运算法则颠倒了很
好定义的字符组如引用语的陈述(参见[UNICODE],
表4-7).除去这此字符,双向性处理Except for these characters,
bidirectionality processing leaves the shape of each glyph unaffected.
因此,如果你想显示单词"MURDER"并且看上去的效果象在镜
子中(从右到?左的次序并纵向翻转),你可以使用一个BDO
元素并设置?dir的属性
为从右到?左的文字方向,如:
<BDO class="mirror" dir="rtl">MURDER</BDO> 风格页对双向性的影响通常,把一个元素从封闭区域的显示转换成行内或vice-versa 通过风格页可以直接进行.无论如何,?大封闭元素和行内 元素之间的差异是对于双向运算法则是重要的,必要十分 注意.当某个行内元素没有设定dir 特性而通过风格页转换成封闭元素时,它继承了这个封闭 区域的全局元素中的基础的方向dir 特性. 当一个没有dir特性 的封闭元素通过风格页转换成行内元素时,表现结果是等 价的,在双向格式部分,通过显式地设定dir 特性来获得(分配继承值)转换元素. 不可显示字符用户代理器可能无法对意义深长的字符值进行渲染,例如, 因为缺少适当的字体或因为某个字符是内部字符解码方 式无法识别的.因为在这种情况下会有许多不同的事发生,?这份文档没 有为特定行为提供解决.根据安装启用,这些可以被低层 的显示系统处理而非就应用的本身.这份说明书建议用户 代理的采取以下的行为:
|