038e4e2f
tangwang
refactor(i18n): t...
|
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# 支持的索引语言:code -> display name(供商家勾选主市场语言等场景使用)
SUPPORTED_INDEX_LANGUAGES: Dict[str, str] = {
"en": "English",
"zh": "Chinese",
"zh_tw": "Traditional Chinese",
"ru": "Russian",
"ja": "Japanese",
"ko": "Korean",
"es": "Spanish",
"fr": "French",
"pt": "Portuguese",
"de": "German",
"it": "Italian",
"th": "Thai",
"vi": "Vietnamese",
"id": "Indonesian",
"ms": "Malay",
"ar": "Arabic",
"hi": "Hindi",
"he": "Hebrew",
"my": "Burmese",
"ta": "Tamil",
"ur": "Urdu",
"bn": "Bengali",
"pl": "Polish",
"nl": "Dutch",
"ro": "Romanian",
"tr": "Turkish",
"km": "Khmer",
"lo": "Lao",
"yue": "Cantonese",
"cs": "Czech",
"el": "Greek",
"sv": "Swedish",
"hu": "Hungarian",
"da": "Danish",
"fi": "Finnish",
"uk": "Ukrainian",
"bg": "Bulgarian",
}
DEFAULT_INDEX_LANGUAGES: List[str] = ["en", "zh"]
def normalize_index_languages(value: Any, primary_language: str = "en") -> List[str]:
"""
将 index_languages 配置规范化为合法语言代码列表。
None 或空时返回 DEFAULT_INDEX_LANGUAGES。
"""
if value is None:
return list(DEFAULT_INDEX_LANGUAGES)
if not isinstance(value, (list, tuple)):
return list(DEFAULT_INDEX_LANGUAGES)
valid: List[str] = []
seen: set = set()
for item in value:
code = (item or "").strip().lower()
if not code or code in seen:
continue
if code in SUPPORTED_INDEX_LANGUAGES:
valid.append(code)
seen.add(code)
return valid if valid else list(DEFAULT_INDEX_LANGUAGES)
def resolve_index_languages(tenant_config: Dict[str, Any]) -> List[str]:
"""
从租户配置解析 index_languages。
若存在 index_languages 则用之;否则按旧配置 translate_to_en / translate_to_zh 推导。
"""
if "index_languages" in tenant_config:
return normalize_index_languages(
tenant_config["index_languages"],
tenant_config.get("primary_language") or "en",
)
primary = (tenant_config.get("primary_language") or "en").strip().lower()
to_en = bool(tenant_config.get("translate_to_en"))
to_zh = bool(tenant_config.get("translate_to_zh"))
langs: List[str] = []
if primary and primary in SUPPORTED_INDEX_LANGUAGES:
langs.append(primary)
for code in ("en", "zh"):
if code not in langs and ((code == "en" and to_en) or (code == "zh" and to_zh)):
if code in SUPPORTED_INDEX_LANGUAGES:
langs.append(code)
return langs if langs else list(DEFAULT_INDEX_LANGUAGES)
|
0064e946
tangwang
feat: 增量索引服务、租户配置...
|
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
class TenantConfigLoader:
"""租户配置加载器。"""
def __init__(self):
"""初始化租户配置加载器。"""
self._config: Optional[Dict[str, Any]] = None
def load_config(self) -> Dict[str, Any]:
"""
加载租户配置(从统一配置文件)。
Returns:
租户配置字典,格式:{"tenants": {...}, "default": {...}}
"""
if self._config is not None:
return self._config
try:
from config import ConfigLoader
config_loader = ConfigLoader()
search_config = config_loader.load_config()
self._config = search_config.tenant_config
logger.info("Loaded tenant config from unified config.yaml")
return self._config
except Exception as e:
logger.error(f"Failed to load tenant config: {e}", exc_info=True)
|