W3C home > Mailing lists > Public > public-html-ig-zh@w3.org > October 2010

Re: 我也贡献一个话题:关于lang()伪类选择器的问题

From: John Hax <johnhax@gmail.com>
Date: Mon, 25 Oct 2010 17:12:52 +0800
Message-ID: <AANLkTinWbkLyiVtGY2efzhsLA+ysBA0q5exBb2q8iTAG@mail.gmail.com>
To: (wrong string) 樂會ML <public-html-ig-zh@w3.org>
刚刚我读了一下RFC 4647 *Matching of Language Tags*,lang()选择器目前的算法实际上就是RFC4647中的*Basic
Filtering*算法(3.3.1.),而我提议的方案一实际接近于RFC4647中的*Extended Filtering*
算法(3.3.2.)【只有在对*的理解上有微小差别】

所以我稍微修正一下之前的提议。

方案一:

lang()改用RFC4647的Extended Filtering算法。

(原方案二舍弃。)

新方案二:

lang()保持不变(即仍然使用Basic Filtering算法)。
新增langx()选择器,使用Extended Filtering算法。

方案三:

lang(C)改用这样的算法:
如果C不包含 * ,仍然使用Basic Filtering算法。
如果C包含 * ,则使用Extended Filtering算法。



2010/10/23 John Hax <johnhax@gmail.com>

>
> lang()伪类选择器用于选择语言,比如我们之前提到过的书名号问题:
>
>
> cite:lang(zh) {
> font-style: normal;
> quotes: '《' '》' '〈' '〉';
> }
> cite:lang(zh):before {
> content: open-quote;
> }
> cite:lang(zh):after {
> content: close-quote;
> }
> cite:lang(zh-Hant-TW) {
>     quotes: none;
>     text-decoration: wave underline;
> }
>
>
> lang()匹配的规则同[att|=val],即lang(C)匹配值等于C,或以C开头跟一个 - 。
>
>
> 问题出在新的BCP47(http://www.ietf.org/rfc/bcp/bcp47.txt)上。
>
> 按照新的语言tag,zh属于macrolang(语族?),而具体的语言如:
> cmn(普通话、国语)
> yue(粤语)
> wuu(吴语)
>
> 按照BCP47,zh-cmn这种写法是冗余的,尽量用cmn直接表示。
>
> 此外还有Hans/Hant表示简体和繁体。加上地区code,完整的写法是:
>
> 台湾用繁体中文写的国语 cmn-Hant-TW
> 大陆用简体中文写的普通话 cmn-Hans-CN
> 香港用繁体中文写的粤语 yue-Hant-HK
>
> 问题是,如果一个文档的lang被标记为上述tag,则前述书名号的CSS样式就无法匹配。
>
> 当然,根据W3C国际化工作组的选择语言Tag的FAQ(
> http://www.w3.org/International/questions/qa-choosing-language-tags)
> ,为了向后兼容,可以继续用zh。
>
> 这样就是
>
> 台湾用繁体中文写的国语 zh-cmn-Hant-TW
> 大陆用简体中文写的普通话 zh-cmn-Hans-CN
> 香港用繁体中文写的粤语 zh-yue-Hant-HK
>
> 问题在于,这样可以匹配前述《》,但是仍然无法匹配zh-Hant-TW所写的浪线规则。
>
>
> 在这个case里,首先:
>
> 样式表的语言选择器的值,是没有问题的。因为书名号规则与是国语还是粤语并无关系,标点符号规则只与所用文字,还有国家地区的标准和习惯有关。
>
> 如果说有什么问题,那只有
> cite:lang(zh) {
>  font-style: normal;
> quotes: '《' '》' '〈' '〉';
> }
> 这里写得过于宽泛。如zh-Latn-pinyin或zh-Latn-wadegile(威妥瑪拼音<http://zh.wikipedia.org/wiki/%E5%A8%81%E5%A6%A5%E7%91%AA%E6%8B%BC%E9%9F%B3>
> )是不用书名号的。但是这里表示的是绝大多数被标记为zh-*的都用书名号。然后可用进一步的lang()规则来override。
>
>
> 其次:
>
>
> 文档的语言tag,也是没有问题的。因为文档可能包含语言相关因素。如粤语(yue)的书面语可能包含特殊的汉字。比如文档的语言标记为zh-gan-Hant,表示这是一个繁体中文写的赣语文章。而标记为zh-wuu-Hans表示这是一个简体中文写的吴语文章。
>
>
> 所以只能说是lang()选择器有所不足。
>
> 对于 cite:lang(zh-Hant-TW) 实际上我们希望匹配 zh-*-Hant-TW ,例如 zh-nan-Hant-TW
> ,用繁体中文写的闽南语文章。
>
>
>
>
> 提议的解决方案
>
> 扩展lang()选择器及[att|=val]选择器
>
>
> 方案一:
>
> 允许用*匹配。比如可写:
> cite:lang(zh-*-Hant-TW) {...}
>
> 该选择器应该匹配以下tag
> zh-Hant-TW
> zh-cmn-Hant-TW
> zh-nan-Hant-TW
> ...
>
>
> 方案二:
>
> 允许匹配部分subtag【前提是不同用途的subtag不会重复】。比如可写:
>
> cite:lang(zh):lang(Hant-TW)
> 或
> cite:lang(zh):lang(Hant):lang(TW)
>
> 也可以达到上述目标。
>
>
>
>
> 以上。
>
>
>
>
Received on Monday, 25 October 2010 09:13:34 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 20:43:46 UTC