59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
from google.cloud import translate
|
|
import yaml
|
|
|
|
|
|
class GoogleAuthTranslation:
|
|
def __init__(self, project_id, yaml_path='lang.yaml'):
|
|
self.translator = translate.TranslationServiceClient()
|
|
self.location = "global"
|
|
self.parent = f"projects/{project_id}/locations/{self.location}"
|
|
|
|
with open(yaml_path) as f:
|
|
self.supporting_languages = yaml.load(f, Loader=yaml.FullLoader)
|
|
|
|
def _detect(self, query):
|
|
response = self.translator.detect_language(
|
|
request={
|
|
"parent": self.parent,
|
|
"content": query,
|
|
"mime_type": "text/plain", # mime types: text/plain, text/html
|
|
}
|
|
)
|
|
|
|
for language in response.languages:
|
|
# First language is the most confident one
|
|
return language.language_code
|
|
|
|
def _get_dest_from_lang(self, lang):
|
|
try:
|
|
return self.supporting_languages[lang]['google_dest']
|
|
|
|
except KeyError as e:
|
|
raise e
|
|
|
|
def _get_lang_from_dest(self, dest):
|
|
for key in self.supporting_languages:
|
|
if self.supporting_languages[key]['google_dest'] == dest:
|
|
return key
|
|
|
|
raise RuntimeError(f"Detected langauge is not supported in our multilingual TTS. |\n Code: {dest} | See https://cloud.google.com/translate/docs/languages")
|
|
|
|
def translate(self, query, lang):
|
|
|
|
dest = self._get_dest_from_lang(lang)
|
|
|
|
response = self.translator.translate_text(
|
|
request={
|
|
"parent": self.parent,
|
|
"contents": [query],
|
|
"mime_type": "text/plain", # mime types: text/plain, text/html
|
|
"target_language_code": dest,
|
|
}
|
|
)
|
|
|
|
return " ".join([translation.translated_text for translation in response.translations])
|
|
|
|
def detect(self, query):
|
|
dest = self._detect(query)
|
|
return self._get_lang_from_dest(dest)
|