91 lines
2.2 KiB
Python
91 lines
2.2 KiB
Python
# coding: utf-8
|
|
import json
|
|
import os
|
|
from loguru import logger
|
|
from pathlib import Path
|
|
|
|
# 导入配置
|
|
from .config import cfg, qconfig
|
|
|
|
# 当前语言设置,默认为中文
|
|
_current_language = "zh"
|
|
# 翻译词典
|
|
_translations = {}
|
|
# 语言文件目录
|
|
_LANG_DIR = Path("app/resource/lang").absolute()
|
|
# print(Path("app/resource/lang").absolute())
|
|
|
|
|
|
def load_language(lang_code="zh"):
|
|
"""
|
|
加载指定语言的翻译文件
|
|
|
|
Args:
|
|
lang_code: 语言代码,如 "zh"、"en"
|
|
"""
|
|
global _current_language, _translations
|
|
|
|
try:
|
|
# 构建语言文件路径
|
|
lang_file = os.path.join(_LANG_DIR, f"{lang_code}.json")
|
|
|
|
# 检查文件是否存在
|
|
if not os.path.exists(lang_file):
|
|
logger.warning(f"语言文件不存在: {lang_file},使用默认语言")
|
|
lang_code = "zh"
|
|
lang_file = os.path.join(_LANG_DIR, "zh.json")
|
|
|
|
# 读取语言文件
|
|
with open(lang_file, "r", encoding="utf-8") as f:
|
|
_translations = json.load(f)
|
|
|
|
_current_language = lang_code
|
|
logger.info(f"已加载语言: {lang_code}")
|
|
|
|
except Exception as e:
|
|
logger.error(f"加载语言文件失败: {e}")
|
|
# 如果加载失败,使用空字典
|
|
_translations = {}
|
|
|
|
|
|
def lang(text):
|
|
"""
|
|
翻译文本
|
|
|
|
Args:
|
|
text: 要翻译的原文
|
|
|
|
Returns:
|
|
翻译后的文本,如果没有找到翻译,则返回原文
|
|
"""
|
|
# 如果翻译词典为空,尝试加载默认语言
|
|
if not _translations:
|
|
load_language(_current_language)
|
|
|
|
# 返回翻译后的文本,找不到则返回原文
|
|
return _translations.get(text, text)
|
|
|
|
|
|
def get_current_language():
|
|
"""
|
|
获取当前语言代码
|
|
|
|
Returns:
|
|
当前语言代码
|
|
"""
|
|
return _current_language
|
|
|
|
|
|
# 初始化时从配置加载语言
|
|
try:
|
|
if hasattr(cfg, "language"):
|
|
initial_lang = qconfig.get(cfg.language)
|
|
load_language(initial_lang)
|
|
else:
|
|
# 如果配置中没有语言设置,使用默认值
|
|
load_language()
|
|
except Exception as e:
|
|
logger.error(f"加载语言配置时出错: {e}")
|
|
# 出错时使用默认语言
|
|
load_language("zh")
|