2020-01-08 16:09:10 +00:00
|
|
|
'''
|
|
|
|
This file provides the functionality for
|
|
|
|
the translation function, by first converting the
|
|
|
|
country/language name to an ISO369-1 language identifier
|
|
|
|
and then translating it using the Yandex Translation API
|
|
|
|
'''
|
|
|
|
import requests, urllib.parse
|
|
|
|
from util import logging, config
|
|
|
|
import pycountry
|
|
|
|
|
|
|
|
api_key = config.settings["api_keys"]["yandex"]
|
|
|
|
langs = pycountry.languages
|
|
|
|
|
|
|
|
def name_to_ISO(name: str) -> str:
|
|
|
|
alpha = ""
|
|
|
|
for language in langs:
|
|
|
|
if language.name.lower() == name.lower():
|
2020-01-08 16:44:19 +00:00
|
|
|
try:
|
|
|
|
alpha = language.alpha_2
|
|
|
|
break
|
|
|
|
except:
|
|
|
|
logging.warning(f"Tried to get alpha2 code of unknown language {language}")
|
2020-01-08 16:09:10 +00:00
|
|
|
|
|
|
|
return alpha
|
|
|
|
|
2020-01-08 16:44:19 +00:00
|
|
|
def ISO_to_name(ISO: str) -> str:
|
|
|
|
name = ""
|
|
|
|
for language in langs:
|
|
|
|
try:
|
|
|
|
if language.alpha_2.lower() == ISO.lower():
|
|
|
|
try:
|
|
|
|
name = language.name
|
|
|
|
break
|
|
|
|
except:
|
|
|
|
logging.warning(f"Tried to get name of unknown language code {ISO}")
|
|
|
|
except:
|
|
|
|
# i dont care tbh
|
|
|
|
pass
|
|
|
|
|
|
|
|
return name
|
|
|
|
|
|
|
|
def translate(text: str, lang: str) -> (str, str):
|
2020-01-08 16:09:10 +00:00
|
|
|
url_encoded_text = urllib.parse.quote(text)
|
|
|
|
url = f"https://translate.yandex.net/api/v1.5/tr.json/translate?key={api_key}&text={url_encoded_text}&lang={lang}"
|
|
|
|
|
|
|
|
response = requests.get(url)
|
|
|
|
if not response.ok:
|
|
|
|
logging.error(f"Failed to contact Yandex API: {response.status_code}")
|
|
|
|
return ""
|
2020-01-08 16:44:19 +00:00
|
|
|
return (response.json()["text"][0], response.json()["lang"])
|