網頁頭部的聲明應該是用 lang="zh" 還是 lang="zh-cn"? | 知乎問答精選

 

A-A+

網頁頭部的聲明應該是用 lang="zh" 還是 lang="zh-cn"?

2018年01月28日 知乎問答精選 暫無評論 閱讀 31 ℃ 次

【賀師俊的回答(140票)】:

把我在另一個回答裡的評論整理一下搬運過來:

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) 的寫法。(感謝 @一絲 君。)

【知乎用戶的回答(3票)】:

兩種寫法都可以,看你的需求選擇。參考 W3C: Language information and text direction:

Briefly, language codes consist of a primary code and a possibly empty series of subcodes:

language-code = primary-code ( "-" subcode )*

Here are some sample language codes:

  • "en": English
  • "en-US": the U.S. version of English.
  • "en-cockney": the Cockney version of English.
  • "i-navajo": the Navajo language spoken by some Native Americans.
  • "x-klingon": The primary tag "x" indicates an experimental language tag

【李蕭的回答(7票)】:

目前,語言的標籤表示法的國際標準是RFC 4646,名稱是《Tags for Identifying Languages》。

簡單說,這個文件規定,一種語言的標籤應該按照如下方式排列:

language-script-region-variant-extension-privateuse

1. language:這部分就是ISO 639規定的代碼,比如中文是zh。

2. script:表示變體,比如簡體漢字是zh-Hans,繁體漢字是zh-Hant。

3. region:表示語言使用的地理區域,比如zh-Hans-CN就是中國大陸使用的簡體中文。

4. variant:表示方言。

5. extension-privateus:表示擴展用途和私有標識。

一般約定,language標籤全部小寫,region標籤全部大寫,script標籤只有首字母大寫。不同標籤之間用連字號-鏈接。

下面列出一些與中文有關的語言標籤。

zh-Hans 簡體中文

zh-Hans-CN 大陸地區使用的簡體中文

zh-Hans-HK 香港地區使用的簡體中文

zh-Hans-MO 澳門使用的簡體中文

zh-Hans-SG 新加坡使用的簡體中文

zh-Hans-TW 台灣使用的簡體中文

zh-Hant 繁體中文

zh-Hant-CN 大陸地區使用的繁體中文

zh-Hant-HK 香港地區使用的繁體中文

zh-Hant-MO 澳門使用的繁體中文

zh-Hant-SG 新加坡使用的繁體中文

zh-Hant-TW 台灣使用的繁體中文

此外,還有一些目前仍在使用,但因不符合規範,將被逐步替代(grandfathered)的標籤。

zh-hakka 客家話

zh-cmn 普通話

zh-cmn-Hans 簡體普通話

zh-cmn-Hant 繁體普通話

zh-gan 江西話

zh-guoyu 國語

zh-min 福建話

zh-min-nan 閩南話

zh-wuu 吳語(上海話)

zh-xiang 湖南話

zh-yue 粵語

【參考】:語種名稱代碼

【懌褀的回答(4票)】:

<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN" xml:lang="zh-CN">

應該是 zh-cn 的,對於目前在互聯網使用的中文一般有三種:

簡體中文(中國) zh-cn

繁體中文(台灣地區) zh-tw

繁體中文(香港) zh-hk

【管斌瑞的回答(1票)】:

目前,最新的語言標籤標記法的國際標準是IETF的BCP 47(Best Current Practice),也就是RFC 5646取代了之前的RFC 4646,3066和1766.

RFC 5646和之前版本的區別:

  • 所有子標籤都在IANA registry查詢。

  • 所有子標籤有固定的位置和長度。

  • There is more flexibility around the potential components of a language tag。

RFC 5646規定語言標籤按以下形式排列:

language-extlang-script-region-variant-extension-privateuse

所有語言標籤都是大小寫無關的,但是依照慣例 language 標籤小寫,region 標籤大寫,script 標籤首字大寫。

所有標籤都可以在 IANA registry 查詢,獲取更多信息可以閱讀Choosing a language tag。

以下鏈接包含更多的介紹:

  • Language tags in HTML and XML
  • 語種名稱代碼——阮一峰

【知乎用戶的回答(0票)】:

用google翻譯試了下,只有聲明zh-cn能識別出網頁是簡體中文,其他zh、zh-hans都不能。

【知乎用戶的回答(0票)】:

個人感覺都是UTF-8的情況下,zh跟zh-?其他的表述都是一樣的,祇要能顯示出來就好了。反正繁體跟簡體都是UTF-8編碼

標籤:-前端開發 -地緣政治 -網頁設計(WebDesign)


相關資源:





給我留言