Files
FerdyARTs 3897b9893d Add Spanish translation (es_ES) via Qt .ts
Migrate kcc_es.json entries into translations/kcc_es_ES.ts on the latest master.

Co-authored-by: FerdyARTs <86256256+FerdyARTs@users.noreply.github.com>
2026-10-14 17:51:17 +08:00

54 lines
1.6 KiB
Python

# -*- coding: utf-8 -*-
"""KCC UI 语言切换辅助模块。"""
from PySide6.QtCore import QCoreApplication, QTranslator
# 语言代码 -> 菜单显示名(菜单按"各自语言"显示,不参与翻译)
LANGUAGES = {
'en': 'English',
'zh_CN': '中文(简体)',
'ja_JP': '日本語',
'ko_KR': '한국어',
'es_ES': 'Español',
}
DEFAULT_LANGUAGE = 'en'
# 模块级持有引用,防止 translator 被 GC 回收后失效
_translator = None
def apply_language(lang_code):
"""安装指定语言的 QTranslator,返回实际生效的 code。
语言文件打包在 qrc 资源 /i18n/ 前缀下。
"""
global _translator
app = QCoreApplication.instance()
if app is None:
# QApplication 尚未创建,无法安装翻译器;保持默认语言
return DEFAULT_LANGUAGE
if _translator is not None:
app.removeTranslator(_translator)
_translator = None
if lang_code not in LANGUAGES:
lang_code = DEFAULT_LANGUAGE
if lang_code != 'en':
t = QTranslator()
if t.load(f':/i18n/kcc_{lang_code}.qm'):
app.installTranslator(t)
_translator = t
else:
lang_code = DEFAULT_LANGUAGE
return lang_code
def tr_arg(translated_str, *args):
"""替换翻译字符串中的 %1, %2, %3 ... 占位符。
PySide6 的 tr() 返回 Python str 而非 QString,没有 .arg() 方法,
因此用此函数手动替换占位符。
"""
result = translated_str
for i, arg in enumerate(args, 1):
result = result.replace(f'%{i}', str(arg))
return result