Spaces:
Paused
Paused
import sys | |
from os import listdir, path | |
from typing import Any, Dict, List, Union | |
from pyUltroid import udB, LOGS | |
try: | |
from google_trans_new import google_translator | |
Trs = google_translator() | |
except ImportError: | |
LOGS.error("'google_trans_new' not installed!") | |
Trs = None | |
try: | |
from yaml import safe_load | |
except ModuleNotFoundError: | |
def _get_value(stri): | |
try: | |
value = eval(stri.strip()) | |
except Exception as er: | |
LOGS.debug(er) | |
value = stri.strip() | |
return value | |
def safe_load(file, *args, **kwargs): | |
read = file.readlines() | |
out = {} | |
for line in read: | |
if ":" in line: # Ignores Empty & Invalid lines | |
spli = line.split(":", maxsplit=1) | |
key = spli[0].strip() | |
value = _get_value(spli[1]) | |
out.update({key: value or []}) | |
elif "-" in line: | |
spli = line.split("-", maxsplit=1) | |
where = out[list(out.keys())[-1]] | |
if isinstance(where, list): | |
value = _get_value(spli[1]) | |
if value: | |
where.append(value) | |
return out | |
language = [udB.get_key("language") or "en"] | |
languages = {} | |
strings_folder = path.join(path.dirname(path.realpath(__file__)), "strings") | |
for file in listdir(strings_folder): | |
if file.endswith(".yml"): | |
code = file[:-4] | |
try: | |
languages[code] = safe_load( | |
open(path.join(strings_folder, file), encoding="UTF-8"), | |
) | |
except Exception as er: | |
LOGS.info(f"Error in {file[:-4]} language file") | |
LOGS.exception(er) | |
def get_string(key: str) -> Any: | |
lang = language[0] | |
try: | |
return languages[lang][key] | |
except KeyError: | |
try: | |
en_ = languages["en"][key] | |
if not Trs: | |
return en_ | |
tr = Trs.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: | |
return f"Warning: could not load any string with the key `{key}`" | |
except TypeError: | |
pass | |
except Exception as er: | |
LOGS.exception(er) | |
return languages["en"].get(key) or f"Failed to load language string '{key}'" | |
def get_languages() -> Dict[str, Union[str, List[str]]]: | |
return { | |
code: { | |
"name": languages[code]["name"], | |
"natively": languages[code]["natively"], | |
"authors": languages[code]["authors"], | |
} | |
for code in languages | |
} | |