Spaces:
Paused
Paused
File size: 2,837 Bytes
be3098f 026189f ea7f80a be3098f c46d195 be3098f c46d195 026189f ea7f80a 026189f d669394 026189f ea7f80a 026189f d669394 026189f d669394 026189f ea7f80a be3098f ea7f80a d669394 ea7f80a d669394 026189f d669394 be3098f d178a8d be3098f 026189f |
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
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
}
|