Locale

依國家使用語言與 locale 代碼

語言代碼與 locale tag 回答不同問題;當產品需要時,locale 會加入有用的地區或文字系統脈絡。

分清楚語言、文字系統與地區

BCP 47 標籤以 en、zh 等語言代碼開頭;可選的文字系統(例如 Hant)位於地區(例如 TW)之前,組成 zh-Hant-TW。只有地區代碼,不能表達內容語言。

HTML 與 JavaScript Intl 使用連字號分隔標籤。慣例為語言小寫、文字系統首字大寫、地區大寫;標籤本身不區分大小寫。CLDR 資料中可能出現底線分隔的識別碼,不應直接將這種寫法傳給 Intl。

分清楚語言、文字系統與地區
標籤含義適用情境
en英語內容不需區分地區
en-US美國英語需要美國地區格式
zh-Hant中文,繁體字需要繁體字,但不限定地區
zh-Hans中文,簡體字內容使用簡體字
zh-Hant-TW台灣中文,繁體字需同時明確指定文字系統與台灣地區
sr-Latn塞爾維亞語,拉丁字母需與西里爾字母內容區分

選擇正確且最不過度指定的 tag

當地區或文字系統不會改變產品行為時,使用僅含語言的 tag;只有內容、格式或使用者期待確實需要時,才加入地區或文字系統。

不要只憑國家推論使用者偏好

國家資料可作為參考頁的實用預設,但不能取代使用者自行選擇的語言。只要產品可行,就應保留使用者的選擇。

套用標籤,再確認執行環境支援

HTML 的 lang 描述內容語言;Intl.NumberFormat 選擇數字格式,locale 不會自動翻譯頁面。需要時另外指定 timeZone 與 currency,不要假設標籤會一併選定時區或幣別。

在目標執行環境使用 supportedLocalesOf() 與 resolvedOptions() 檢查支援及實際採用的設定;可用的 locale 資料可能不同。下方範例比較數字格式,並明確設定日期格式器的時區。

決定使用方式後,再查國家資料

目錄提供依國家查詢的語言、locale 與來源。先用本指南決定產品需要區分哪些設定,再到國家頁查代碼及來源;不要直接將國家預設值當成個人的語言偏好。

<html lang="zh-Hant">
new Intl.NumberFormat("en-US").format(1234.5); // "1,234.5"
new Intl.NumberFormat("de-DE").format(1234.5); // "1.234,5"
new Intl.DateTimeFormat("zh-TW", { timeZone: "Asia/Taipei" });

資料可信度

資料來源