feat(i18n): 新增中英文国际化支持,语言下拉框即时切换
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
"""国际化模块:提供 t(key, **kwargs) 翻译函数,支持语言切换。
|
||||
|
||||
模块导入时自动加载 zh_CN 作为默认语言。
|
||||
通过 switch(locale) 切换语言,t() 返回当前语言的翻译文本。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
_I18N_DIR = Path(__file__).parent
|
||||
_translations: dict[str, str] = {}
|
||||
_current_locale: str = "zh_CN"
|
||||
|
||||
|
||||
def load(locale: str) -> None:
|
||||
"""加载指定语言的翻译文件。"""
|
||||
global _translations, _current_locale
|
||||
_current_locale = locale
|
||||
path = _I18N_DIR / f"{locale}.json"
|
||||
if path.exists():
|
||||
_translations = json.loads(path.read_text(encoding="utf-8"))
|
||||
else:
|
||||
_translations = {}
|
||||
|
||||
|
||||
def switch(locale: str) -> None:
|
||||
"""切换当前语言并返回新语言代码。"""
|
||||
load(locale)
|
||||
|
||||
|
||||
def current_locale() -> str:
|
||||
"""返回当前语言代码。"""
|
||||
return _current_locale
|
||||
|
||||
|
||||
def t(key: str, **kwargs: object) -> str:
|
||||
"""获取翻译文本,支持 {name} 插值。
|
||||
|
||||
如果 key 不存在,返回 key 本身作为回退。
|
||||
"""
|
||||
text = str(_translations.get(key, key))
|
||||
if kwargs:
|
||||
text = text.format(**{k: v for k, v in kwargs.items()})
|
||||
return text
|
||||
|
||||
|
||||
# 模块导入时自动加载默认中文翻译
|
||||
load("zh_CN")
|
||||
Reference in New Issue
Block a user