File size: 3,176 Bytes
1d42175 2bbc526 78d0ff1 1d42175 2bbc526 1d42175 5a8d2be 1d42175 2bbc526 5a8d2be 78d0ff1 0d1a764 1d42175 70f6ed6 9a69d6b 78d0ff1 70f6ed6 78d0ff1 70f6ed6 78d0ff1 70f6ed6 0d1a764 70f6ed6 78d0ff1 50c16a8 2bbc526 50c16a8 2bbc526 |
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 96 |
"""
LibreTranslate API
"""
import requests
from deep_translator.validate import is_empty, validate_input
from deep_translator.base import BaseTranslator
from deep_translator.constants import BASE_URLS, LIBRE_LANGUAGES_TO_CODES
from deep_translator.exceptions import (
ServerException,
TranslationNotFound,
AuthorizationException,
)
class LibreTranslator(BaseTranslator):
"""
class that wraps functions, which use libre translator under the hood to translate text(s)
"""
def __init__(self, source="auto", target="en", api_key=None, **kwargs):
"""
@param source: source language to translate from
List of LibreTranslate nedpoints can be found at : https://github.com/LibreTranslate/LibreTranslate#mirrors
Some require an API key
@param target: target language to translate to
"""
if not api_key:
raise ServerException(401)
self.api_key = api_key
super().__init__(
base_url=BASE_URLS.get("LIBRE"),
source=source,
target=target,
languages=LIBRE_LANGUAGES_TO_CODES,
)
def translate(self, text, **kwargs):
"""
function that uses microsoft translate to translate a text
@param text: desired text to translate
@return: str: translated text
"""
if validate_input(text):
if self._same_source_target() or is_empty(text):
return text
translate_endpoint = "translate"
params = {
"q": text,
"source": self._source,
"target": self._target,
"format": "text",
}
# Add API Key if required
if self.api_key:
params["api_key"] = self.api_key
# Do the request and check the connection.
try:
response = requests.post(
self._base_url + translate_endpoint, params=params
)
except ConnectionError:
raise ServerException(503)
# If the answer is not success, raise server exception.
if response.status_code == 403:
raise AuthorizationException(self.api_key)
elif response.status_code != 200:
raise ServerException(response.status_code)
# Get the response and check is not empty.
res = response.json()
if not res:
raise TranslationNotFound(text)
# Process and return the response.
return res["translatedText"]
def translate_file(self, path, **kwargs):
"""
translate directly from file
@param path: path to the target file
@type path: str
@param kwargs: additional args
@return: str
"""
return self._translate_file(path, **kwargs)
def translate_batch(self, batch=None, **kwargs):
"""
translate a list of texts
@param batch: list of texts you want to translate
@return: list of translations
"""
return self._translate_batch(batch, **kwargs)
|