|
| 1 | +# Project: py-trans |
| 2 | +# Author: itz-fork |
| 3 | +import requests |
| 4 | + |
| 5 | +class PyTranslator: |
| 6 | + """ |
| 7 | + PyTranslator Class |
| 8 | +
|
| 9 | + Note: |
| 10 | + Before Trying to Translate Create an instance of this with provider (Default provider is google) |
| 11 | + |
| 12 | + Providers: |
| 13 | + google - Google Translate |
| 14 | + bing - Bing Translate |
| 15 | + translate.com - translate.com Translate |
| 16 | +
|
| 17 | + Argument(s): |
| 18 | + provider - Provider of Translator. (Must be a supported provider) |
| 19 | + |
| 20 | + Example(s): |
| 21 | + pytranslator = PyTranslator(provider="google") |
| 22 | + """ |
| 23 | + def __init__(self, provider="google"): |
| 24 | + self.providers = ["google", "libre", "translate.com"] |
| 25 | + if provider in self.providers: |
| 26 | + self.provider = provider |
| 27 | + else: |
| 28 | + self.provider = "google" |
| 29 | + # Headers |
| 30 | + self.gheader = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"} |
| 31 | + self.lheader = {"Origin": "https://libretranslate.com", "Host": "libretranslate.com", "Referer": "https://libretranslate.com/"} |
| 32 | + |
| 33 | + def translate(self, text, dest_lang="en"): |
| 34 | + """ |
| 35 | + Translator Function |
| 36 | +
|
| 37 | + Argument(s): |
| 38 | + text - Source Text (Text that need to be translated) |
| 39 | + dest_lang - Destination Language |
| 40 | + |
| 41 | + Example(s): |
| 42 | + pytranslator.translate(text="Hi, How are you?", dest_lang="si") |
| 43 | + """ |
| 44 | + if self.provider == "google": |
| 45 | + return self.google_translate(text, dest_lang) |
| 46 | + elif self.provider == "libre": |
| 47 | + return self.libre_translate(text, dest_lang) |
| 48 | + elif self.provider == "translate.com": |
| 49 | + return self.translate_com(text, dest_lang) |
| 50 | + else: |
| 51 | + return |
| 52 | + |
| 53 | + # Google Translate |
| 54 | + def google_translate(self, text, dest_lang): |
| 55 | + r_url = f"https://clients5.google.com/translate_a/t?client=dict-chrome-ex&sl=auto&tl={dest_lang}&q={text}" |
| 56 | + try: |
| 57 | + request_resp = requests.get(r_url, headers=self.gheader).json() |
| 58 | + translation = request_resp['sentences'][0]['trans'] |
| 59 | + origin_text = request_resp['sentences'][0]['orig'] |
| 60 | + origin_lang = request_resp['src'] |
| 61 | + tr_dict = {"status": "success", "engine": "google", "translation": translation, "dest_lang": dest_lang, "orgin_text": origin_text, "origin_lang": origin_lang} |
| 62 | + return tr_dict |
| 63 | + except Exception as e: |
| 64 | + return {"status": "failed", "error": e} |
| 65 | + |
| 66 | + # LibreTranslate |
| 67 | + def _detect_lang(self, text): |
| 68 | + r_url = requests.post("https://libretranslate.com/detect", data={"q": str(text)}, headers=self.lheader).json() |
| 69 | + return r_url[0]["language"] |
| 70 | + |
| 71 | + def libre_translate(self, text, dest_lang): |
| 72 | + try: |
| 73 | + origin_lang = self._detect_lang(text=text) |
| 74 | + r_url = requests.post("https://libretranslate.com/translate", data={"q": str(text), "source": origin_lang, "target": dest_lang}, headers=self.lheader).json() |
| 75 | + translation = r_url["translatedText"] |
| 76 | + tr_dict = {"status": "success", "engine": "libre", "translation": translation, "dest_lang": dest_lang, "orgin_text": str(text), "origin_lang": origin_lang} |
| 77 | + return tr_dict |
| 78 | + except Exception as e: |
| 79 | + return {"status": "failed", "error": e} |
| 80 | + |
| 81 | + # Translate.com |
| 82 | + def translate_com(self, text, dest_lang): |
| 83 | + try: |
| 84 | + r_url = requests.post("https://www.translate.com/translator/ajax_translate", data={"text_to_translate": str(text), "translated_lang": dest_lang}).json() |
| 85 | + translation = r_url["translated_text"] |
| 86 | + tr_dict = {"status": "success", "engine": "translate.com", "translation": translation, "dest_lang": dest_lang, "orgin_text": str(text), "origin_lang": "Not supported by engine"} |
| 87 | + return tr_dict |
| 88 | + except Exception as e: |
| 89 | + return {"status": "failed", "error": e} |
0 commit comments