HTML lang 沒你想的那麼簡單

前言

作 web 無障礙相關的研究時,遇到的第一件事就是要給 <html> 設置正確的 lang 屬性,這麼簡單的一件事,想也不用就寫好了:<html lang="zh-CN">,或者直接簡寫成 <html lang="zh">,Bingo,能夠去作其它事了。php

但仔細想想,好像有些問題html

  • zh 是什麼鬼?拼音?明明是國際標準怎麼會用中文拼音?
  • CN 爲何要大寫?zh-CN表示中國中文,zh-SG表示新加坡中文,但都是用的簡體中文,貌似沒什麼區別?
  • 若是頁面上顯示的是用中文顯示的粵語用詞,如 佢系一個須刨嚟嘅 (它是一個刮鬍刀),那屏幕閱讀器是用普通話朗讀仍是用粵語朗讀呢?

爲了一探究竟,我決定開始瞭解下語言標記是如何定義的。git

過程

先從 lang 屬性的定義開始,參考 MDN 上關於 lang 上的解釋,它是由 IETFBCP47 規範來定義的, 根據 BCP47 規範的描述,它是 RFC5646RFC4647 這兩個規範的最佳實踐合集,其中取代了 RFC4646RFC3066RFC1766 這三個舊的語言標籤規範,最新的規範定義了語言標籤的描述規則以下:github

language  -  extlang       -  script  -  region  -  variant  -  extension  -  privateuse
主語言     -  擴展語言(方言)  -  書寫文字  -  區域    -  變體      -  擴展       -  私有
複製代碼

由子標籤按順序經過連字號(-)鏈接起來組成一個完整的語言標籤,各子標籤的格式遵循如下標準:web

這纔剛開始講,就遇到了一堆的專有名稱,一堆的國際規範,用一個字形象我如今的心情:懵bash

對新規範的解讀先停一下,咱們來先回過頭來從 zh-CN 的歷史開始講起ide

歷史

1995年3月 IETF(互聯網工程任務組)發佈最先的 RFC1766 語言標籤規範,使用 ISO639-1 的2字母語言代碼,ISO3166-1_alpha-2 的2字母國家地區代碼並(約定大寫)。ISO639-1 規範中漢語使用 zh 表示,來自「中文」的漢語拼音:ZhōngwénISO3166-1_alpha-2 規範中中國的代碼是 CN,這大概就是 zh-CN 的由來,也是目前使用最廣泛的一種中文語言標籤。ui

2001年1月發佈的 RFC3066 語言標籤規範, 使用 ISO639-2 的3字母語言代碼,漢語使用 zho 表示,一樣來自「中文」的漢語拼音:Zhōngwén 的前3個字母。spa

2006年9月發佈 RFC4646 (規範的主體)與 RFC4647 (處理匹配行爲) 語言標籤規範。 RFC4646 增長了使用 ISO15924 的4字母書寫文字子標籤,簡體中文是 Hans,繁體中文是 Hant,以及 UNM.49 的3數字地理分區碼。3d

2009年9月發佈 RFC5646 ,引入了3字符碼的 ISO639-3ISO639-5 做爲語言子標籤,其中 ISO639-3 認定漢語文(zho)是一個大語文(macrolanguage),包含14種語文,cdo – 閩東語,cjy – 晉語,cmn – 普通話或國語,cpx – 莆仙語,czh – 徽語,czo – 閩中語,gan – 贛語,hak – 客家話,hsn – 湘語,mnp – 閩北語,nan – 閩南語,wuu – 吳語,yue – 粵語,lzh - 文言文。

2009年9月發佈的 BCP47 整合了 RFC4647RFC5646 造成語言標籤最佳實踐,仍然使用 zh 做爲大語文(macrolanguage)標籤, ISO639-3 中引入的另外14種語文標籤做爲方言擴展標籤,但推薦方言擴展標籤直接做爲主語言標籤,所以贛語的標籤以 zh-gangan 開頭、粵語的以 zh-yueyue 開頭、普通話的以 zh-cmncmn 開頭,BCP47 規範建議優先選擇後者,但關於這點目前在業界是有爭議的,廣泛的觀點是但願保留 zh 做爲主語言標籤,這樣能更好的向前兼容。

IANA 語言子標籤註冊表

瞭解了語言標籤規範的發展歷史,咱們再回到 BCP47 規範,語言標籤描述規則中的如下子標籤:

language - extlang - script - region - variant - extension - privateuse
複製代碼

在這些子標籤中 推薦 使用 IANA語言子標籤註冊表 中的子標籤格式,這些格式一般是來源於各類 ISO 標準中的通用約定。

示例1:region 的取值 CN(中國)

%%
Type: region
Subtag: CN
Description: China
Added: 2005-10-16
%%
複製代碼

示例2:script 的取值 Hans(簡體中文)

%%
Type: script
Subtag: Hans
Description: Han (Simplified variant)
Added: 2005-10-16
%%
複製代碼

中文子標籤一覽

IANA語言子標籤註冊表中,如下 extlang 中的方言同時也被歸類到了 language 中,BCP47 規範是建議將下面的 extlang 直接做爲主語言使用,而我我的的建議是主語言仍然使用 zh,而 extlang 做爲擴展方言使用。

language

  • zh 中國字或中國話

extlang

  • cdo 閩東語
  • cjy 晉語
  • cmn 普通話或國語
  • cpx 莆仙語
  • czh 徽語
  • czo 閩中語
  • gan 贛語
  • hak 客家話
  • hsn 湘語
  • mnp 閩北語
  • nan 閩南語
  • wuu 吳語
  • yue 粵語
  • lzh 文言文

script

  • Hans 簡體漢字
  • Hant 繁體漢字

region

  • CN CHINA 中國
  • HK HONG KONG 香港
  • TW Taiwan 臺灣
  • SG Singapore 新加坡

正確的寫法

綜上所述,從 BCP47 規範的定義中,咱們不難發現 zh-CN 這種語言標籤的寫法已通過時,不符合規範,如下從網上摘抄了一些標準的寫法:

文字例子

  • 圓珠筆 zh-Hans-CN
  • 原子筆 zh-Hant-TW
  • 它是一個刮鬍刀 zh-Hans-CN
  • 佢系一個須刨嚟嘅 yue-Hans
  • 佢係一個鬚刨嚟嘅 yue-Hant
  • 驢不勝怒,蹄之 zh-lzh-Hans
  • 驢不勝怒,蹄之 zh-lzh-Hant
  • 驢發怒踢他了 zh-Hans-CN

語言標籤解釋

  • zh-Hans 簡體中文(我的推薦)
  • zh-Hans-CN 以簡體中文書寫的中國大陸用詞
  • zh-Hans-HK 以簡體中文書寫的香港地區用詞
  • zh-Hant 繁體中文
  • zh-Hant-HK 以繁體中文書寫的香港地區用詞
  • zh-Hant-TW 以繁體中文書寫的臺灣地區用詞
  • yue 粵語發音
  • cmn 普通話或國語發音
  • yue-Hans 以簡體中文書寫的粵語用詞
  • zh-yue-Hans 以簡體中文書寫的粵語用詞(我的推薦)
  • yue-Hant 以繁體中文書寫的粵語用詞
  • cmn-Hans 以簡體中文書寫的普通話用詞
  • zh-cmn-Hans 以簡體中文書寫的普通話用詞(我的推薦)
  • cmn-Hans-CN 以簡體中文書寫的中國大陸普通話用詞
  • cmn-Hant-HK 以繁體中文書寫的香港地區普通話用詞
  • cmn-Hant-TW 以繁體中文書寫的臺灣地區國語用詞

資料參考


I'm Gafish 原創文章,首發於 個人博客,內容若有錯誤,還望指正,謝謝您的閱讀。

相關文章
相關標籤/搜索