@@ -44,13 +44,19 @@ def detect_locale() -> str:
4444def _normalize_locale (raw : str ) -> str :
4545 """Normalize locale string to a supported code.
4646
47- Maps zh_CN, zh-Hans, zh_TW, zh -> 'zh'
47+ Maps zh_CN, zh-Hans, zh -> 'zh' (Simplified)
48+ Maps zh_TW, zh_HK, zh-Hant -> 'zh_Hant' (Traditional)
4849 Maps en_US, en-GB, en -> 'en'
4950 Unsupported locales fall back to 'en'
5051 """
51- code = raw .lower ().replace ("-" , "_" ).split ("_ " )[0 ]
52+ normalized = raw .lower ().replace ("-" , "_" ).split ("." )[ 0 ]. split ( "@ " )[0 ]
5253 from .locales import AVAILABLE_LOCALES
5354
55+ # Traditional Chinese variants
56+ if normalized in ("zh_tw" , "zh_hk" , "zh_hant" , "zh_mo" ):
57+ return "zh_Hant"
58+
59+ code = normalized .split ("_" )[0 ]
5460 if code in AVAILABLE_LOCALES :
5561 return code
5662 return "en"
@@ -73,6 +79,10 @@ def _load_locale(locale: str) -> None:
7379 from .locales .ko import MESSAGES
7480
7581 _messages ["ko" ] = MESSAGES
82+ elif locale == "zh_Hant" :
83+ from .locales .zh_hant import MESSAGES
84+
85+ _messages ["zh_Hant" ] = MESSAGES
7686
7787 # Always ensure English is available as fallback
7888 if "en" not in _messages :
0 commit comments