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" });資料可信度