mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 01:06:59 +08:00
120 lines
3.2 KiB
Python
120 lines
3.2 KiB
Python
# Author: Junjun
|
||
# Date: 2025/12/11
|
||
# i18n.py
|
||
import json
|
||
from pathlib import Path
|
||
from typing import Dict
|
||
|
||
i18n_list = ["en", "zh"]
|
||
|
||
# placeholder prefix(trans key prefix)
|
||
PLACEHOLDER_PREFIX = "PLACEHOLDER_"
|
||
|
||
# default lang
|
||
DEFAULT_LANG = "en"
|
||
|
||
LOCALES_DIR = Path(__file__).parent / "locales"
|
||
_translations_cache: Dict[str, Dict[str, str]] = {}
|
||
|
||
|
||
def load_translation(lang: str) -> Dict[str, str]:
|
||
"""Load translations for the specified language from a JSON file"""
|
||
if lang in _translations_cache:
|
||
return _translations_cache[lang]
|
||
|
||
file_path = LOCALES_DIR / f"{lang}.json"
|
||
if not file_path.exists():
|
||
if lang == DEFAULT_LANG:
|
||
raise FileNotFoundError(f"Default language file not found: {file_path}")
|
||
# If the non-default language is missing, fall back to the default language
|
||
return load_translation(DEFAULT_LANG)
|
||
|
||
try:
|
||
with open(file_path, "r", encoding="utf-8") as f:
|
||
data = json.load(f)
|
||
if not isinstance(data, dict):
|
||
raise ValueError(f"Translation file {file_path} must be a JSON object")
|
||
_translations_cache[lang] = data
|
||
return data
|
||
except json.JSONDecodeError as e:
|
||
raise ValueError(f"Invalid JSON in {file_path}: {e}")
|
||
|
||
|
||
# group tags
|
||
tags_metadata = [
|
||
{
|
||
"name": "Data Q&A",
|
||
"description": f"{PLACEHOLDER_PREFIX}data_qa"
|
||
},
|
||
{
|
||
"name": "Datasource",
|
||
"description": f"{PLACEHOLDER_PREFIX}ds_api"
|
||
},
|
||
{"name": "Dashboard",
|
||
"description": f"{PLACEHOLDER_PREFIX}db_api"
|
||
},
|
||
{
|
||
"name": "system_user",
|
||
"description": f"{PLACEHOLDER_PREFIX}system_user_api"
|
||
},
|
||
{
|
||
"name": "system_ws",
|
||
"description": f"{PLACEHOLDER_PREFIX}system_ws_api"
|
||
},
|
||
{
|
||
"name": "system_model",
|
||
"description": f"{PLACEHOLDER_PREFIX}system_model_api"
|
||
},
|
||
{
|
||
"name": "system_assistant",
|
||
"description": f"{PLACEHOLDER_PREFIX}system_assistant_api"
|
||
},
|
||
{
|
||
"name": "system_embedded",
|
||
"description": f"{PLACEHOLDER_PREFIX}system_embedded_api"
|
||
},
|
||
{
|
||
"name": "system_authentication",
|
||
"description": f"{PLACEHOLDER_PREFIX}system_authentication_api"
|
||
},
|
||
{"name": "Table Relation",
|
||
"description": f"{PLACEHOLDER_PREFIX}tr_api"
|
||
},
|
||
{
|
||
"name": "Data Permission",
|
||
"description": f"{PLACEHOLDER_PREFIX}per_api"
|
||
},
|
||
{
|
||
"name": "SQL Examples",
|
||
"description": f"{PLACEHOLDER_PREFIX}data_training_api"
|
||
},
|
||
{
|
||
"name": "Terminology",
|
||
"description": f"{PLACEHOLDER_PREFIX}terminology_api"
|
||
},
|
||
{
|
||
"name": "CustomPrompt",
|
||
"description": f"{PLACEHOLDER_PREFIX}custom_prompt_api"
|
||
},
|
||
{
|
||
"name": "mcp",
|
||
"description": f"{PLACEHOLDER_PREFIX}mcp_api"
|
||
},
|
||
{
|
||
"name": "recommended problem",
|
||
"description": f"{PLACEHOLDER_PREFIX}recommended_problem_api"
|
||
},
|
||
{
|
||
"name": "Audit",
|
||
"description": f"{PLACEHOLDER_PREFIX}audit_api"
|
||
},
|
||
{
|
||
"name": "System_variable",
|
||
"description": f"{PLACEHOLDER_PREFIX}variable_api"
|
||
}
|
||
]
|
||
|
||
|
||
def get_translation(lang: str) -> Dict[str, str]:
|
||
return load_translation(lang)
|