以下是html中的lang屬性學習筆記,歡迎交流學習!
lang屬性的值應該遵循 BCP 47 - Tags for Identifying Languages。
單一的 zh 和 zh-CN 均屬於廢棄用法。
問題主要在於,zh 現在不是語言code了,而是macrolang,能作為語言code的是cmn(國語)、yue(粵語)、wuu(吳語)等。我通常建議寫成 zh-cmn 而不是光寫 cmn,主要是考慮相容性(至少可匹配 zh),有不少軟體和框架還沒有據此更新。
zh-CN 的問題還在於,其實多數情況下標記的是簡體中文,但是不恰當的使用了地區,這導致同樣用簡體中文的 zh-SG(新加坡)等無法匹配。更典型的是 zh-TW 和 zh-HK。所以其實應該要用 zh-Hans / zh-Hant 來表示簡體和繁體。那麼完整的寫法就是 zh-cmn-Hans,表示簡體中文所寫的國語/國語。一般而言沒有必要加地區代碼,除非要表示地區特異性,一般是詞彙不一樣(例如維基百科的大陸簡體和新馬簡體)。
如何標記的範例:
1. 簡體中文頁面:html lang=zh-cmn-Hans
2. 繁體中文頁面:html lang=zh-cmn- Hant
3. 英語頁面:html lang=en
4. 《回來》的音頻,以國語演唱:audio lang=zh-cmn
5. 《海闊天空》的音頻,以粵語演唱:audio lang=yue
6. 《進來白相相》的音頻,以滬語演唱:audio lang=wuu
#注意上述因為都是音頻,所以不應加上Hans/Hant 標記。
7. 《最終信仰》的音頻,雙語演唱,因此audio不需要標記lang(如果一定需要標記可以用lang=mul),但是每個段落的歌詞可以分別用p lang=en 和p lang=zh-cmn 標記(依簡體或繁體可用zh-cmn-Hans 或zh-cmn-Hant)。
8. 《忐忑》的音頻,沒有歌詞,因此不需要標記lang(如果一定需要標記可用 audio lang=zxx)。
需要加地區代碼的情況一般比較少,除非為了強調不同地區漢語使用差異。例如:
<p lang="zh-cmn-Hans"><b lang="zh-cmn-Hans-CN">菠萝</b>和<b lang="zh-cmn-Hant-TW">鳳梨</b>其实是同一种水果。只是大陆和台湾称谓不同,且新马一带的称谓也是不同的,称之为<b lang="zh-cmn-Hans-SG">黄梨</b>。</p>
當然,由於歷史原因,有時候必須繼續使用zh-CN。例如中文維基百科,沿用了傳統的zh-CN/zh-HK/zh-SG/zh-TW(依照標準應該使用zh-cmn-Hans-CN、zh-cmn-Hant-HK、zh-cmn-Hans -SG、zh-cmn-Hant-TW)。這時候,合理的軟體行為,是將 zh-CN 等轉換為 zh-cmn-Hans(即轉換為最常見的誤用所對應的實際標準寫法)。
實際上,各相關標準,也存在一定的延遲。例如CSS的:lang選擇器,不支援選擇僅僅簡體/繁體中文(而不管是cmn或是yue或是min等漢語方言)。理想情況是CSS3對:lang選擇器的語法進行升級,也就是BCP 47中的高階匹配演算法,支援 :lang(*-Hans)這樣的寫法。
更新:Selectors Level 4 已經加入了對BCP 47高階匹配演算法的支持,即支持 :lang(*-Hans) 的寫法。