File size: 2,454 Bytes
c383152
 
875b439
c383152
875b439
c383152
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
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
# ling-space/i18n/core.py
from typing import Dict
from . import common, tab_chat, tab_code, tab_smart_writer, tab_welcome, recommended_inputs

MODULES = [common, tab_chat, tab_code, tab_smart_writer, tab_welcome, recommended_inputs]

class I18nManager:
    def __init__(self):
        self.ui_translations: Dict[str, Dict[str, str]] = {}
        self.prompt_fragments: Dict[str, Dict[str, str]] = {}
        self._load_translations()

    def _load_translations(self):
        """
        Load and merge translations from all registered modules.
        Structure:
        {
            "key_name": {
                "en": "English Text",
                "zh": "中文文本"
            },
            ...
        }
        """
        for module in MODULES:
            # Merge UI Translations
            if hasattr(module, "ui_translations"):
                for key, trans_map in module.ui_translations.items():
                    if key in self.ui_translations:
                        print(f"[I18n] Warning: Duplicate UI key '{key}' in {module}. Overwriting.")
                    self.ui_translations[key] = trans_map
            
            # Merge Prompt Fragments
            if hasattr(module, "prompt_fragments"):
                for key, trans_map in module.prompt_fragments.items():
                    if key in self.prompt_fragments:
                        print(f"[I18n] Warning: Duplicate prompt key '{key}' in {module}. Overwriting.")
                    self.prompt_fragments[key] = trans_map

    def get_all_ui_translations(self) -> Dict[str, Dict[str, str]]:
        """Returns the complete dictionary for UI translations."""
        return self.ui_translations

    def get_all_prompt_translations(self) -> Dict[str, Dict[str, str]]:
        """Returns the complete dictionary for prompt fragments."""
        return self.prompt_fragments

    def get(self, key: str, lang: str, default: str) -> str:
        """
        Get a specific translation.
        Checks UI translations first, then prompt fragments.
        """
        # Check UI dict
        if key in self.ui_translations:
            return self.ui_translations[key].get(lang, default or self.ui_translations[key].get("en", key))
        
        # Check Prompt dict
        if key in self.prompt_fragments:
            return self.prompt_fragments[key].get(lang, default or self.prompt_fragments[key].get("en", key))
            
        return default or key