import os import sys from glob import glob from typing import Any, Dict, List, Union from pyUltroid import * from pyUltroid.fns.tools import translate try: from yaml import safe_load except ModuleNotFoundError: from pyUltroid.fns.tools import safe_load ULTConfig.lang = udB.get_key("language") or os.getenv("LANGUAGE", "en") languages = {} PATH = "strings/strings/{}.yml" def load(file): if not file.endswith(".yml"): return elif not os.path.exists(file): file = PATH.format("en") code = file.split("/")[-1].split("\\")[-1][:-4] try: languages[code] = safe_load( open(file, encoding="UTF-8"), ) except Exception as er: LOGS.info(f"Error in {file[:-4]} language file") LOGS.exception(er) load(PATH.format(ULTConfig.lang)) def get_string(key: str, _res: bool = True) -> Any: lang = ULTConfig.lang or "en" try: return languages[lang][key] except KeyError: try: en_ = languages["en"][key] tr = translate(en_, lang_tgt=lang).replace("\ N", "\n") if en_.count("{}") != tr.count("{}"): tr = en_ if languages.get(lang): languages[lang][key] = tr else: languages.update({lang: {key: tr}}) return tr except KeyError: if not _res: return return f"Warning: could not load any string with the key `{key}`" except TypeError: pass except Exception as er: LOGS.exception(er) if not _res: return None return languages["en"].get(key) or f"Failed to load language string '{key}'" def get_help(key): doc = get_string(f"help_{key}", _res=False) if doc: return get_string("cmda") + doc def get_languages() -> Dict[str, Union[str, List[str]]]: for file in glob("strings/strings/*yml"): load(file) return { code: { "name": languages[code]["name"], "natively": languages[code]["natively"], "authors": languages[code]["authors"], } for code in languages }