| 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 |
| } |
|
|