feat(i18n): 新增中英文国际化支持,语言下拉框即时切换

This commit is contained in:
2026-07-28 15:18:58 +08:00
parent 935665e7e8
commit 015f2636b3
5 changed files with 446 additions and 116 deletions
+50
View File
@@ -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")