lenML/ChatTTS-Forge
301
1import json2import logging3import os4 5import gradio as gr6 7logger = logging.getLogger(__name__)8 9current_translation = {}10localization_root = os.path.join(11 os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "language"12)13 14 15def localization_js(filename):16 global current_translation17 18 if isinstance(filename, str):19 full_name = os.path.abspath(os.path.join(localization_root, filename + ".json"))20 if os.path.exists(full_name):21 try:22 with open(full_name, encoding="utf-8") as f:23 current_translation = json.load(f)24 assert isinstance(current_translation, dict)25 for k, v in current_translation.items():26 assert isinstance(k, str), f"Key is not a string, got {k}"27 assert isinstance(v, str) or isinstance(28 v, list29 ), f"Value for key {k} is not a string or list"30 31 logger.info(f"Loaded localization file {full_name}")32 except Exception as e:33 logger.warning(str(e))34 logger.warning(f"Failed to load localization file {full_name}")35 else:36 logger.warning(f"Localization file {full_name} does not exist")37 else:38 logger.warning(f"Localization file {filename} is not a string")39 40 # current_translation = {k: 'XXX' for k in current_translation.keys()} # use this to see if all texts are covered41 42 return f"window.localization = {json.dumps(current_translation)}"43 44 45def dump_english_config(components):46 all_texts = []47 for c in components:48 if isinstance(c, gr.Markdown) and "no-translate" in c.elem_classes:49 continue50 if isinstance(c, gr.Dropdown):51 continue52 if isinstance(c, gr.HTML):53 continue54 if isinstance(c, gr.Textbox):55 continue56 57 label = getattr(c, "label", None)58 value = getattr(c, "value", None)59 choices = getattr(c, "choices", None)60 info = getattr(c, "info", None)61 62 if isinstance(label, str):63 all_texts.append(label)64 if isinstance(value, str):65 all_texts.append(value)66 if isinstance(info, str):67 all_texts.append(info)68 if isinstance(choices, list):69 for x in choices:70 if isinstance(x, str):71 all_texts.append(x)72 if isinstance(x, tuple):73 for y in x:74 if isinstance(y, str):75 all_texts.append(y)76 77 config_dict = {k: k for k in all_texts if k != "" and "progress-container" not in k}78 full_name = os.path.abspath(os.path.join(localization_root, "en.json"))79 80 with open(full_name, "w", encoding="utf-8") as json_file:81 json.dump(config_dict, json_file, indent=4, ensure_ascii=False)82 83 return84 