Skip to content

Translate

Experimental module with the Translator class, which translates texts using the Google Translate API (V2 and V3).

translate

Experimental module to automate translations.

Classes:

Name Description
Translator

Class Translator is used for translation of strings based on the Google Translate API.

Translator

Translator(
    api_key: str,
    project_key: str = "",
    domain: str = "",
    logger: Logger = default_logger,
)

Class Translator is used for translation of strings based on the Google Translate API.

The class supports V2 and V3 translation APIs.

Initialize the Translate objects.

Parameters:

Name Type Description Default
api_key str

The Google Translate API key.

required
project_key str

The Google project. Defaults to "".

''
domain str

The domain. Defaults to "".

''
logger Logger

The logging object to log all messages. Defaults to default_logger.

default_logger

Methods:

Name Description
config

Return the configuration parameters.

translate

Translate a string from one language to another using the Google Translate V2 API.

translate_v3

Translate a string from one language to another using the Google Translate V3 API.

Source code in packages/pyxecm/src/pyxecm_customizer/translate.py
def __init__(
    self,
    api_key: str,
    project_key: str = "",
    domain: str = "",
    logger: logging.Logger = default_logger,
) -> None:
    """Initialize the Translate objects.

    Args:
        api_key (str):
            The Google Translate API key.
        project_key (str, optional):
            The Google project. Defaults to "".
        domain (str, optional):
            The domain. Defaults to "".
        logger (logging.Logger, optional):
            The logging object to log all messages. Defaults to default_logger.

    """

    if logger != default_logger:
        self.logger = logger.getChild("translator")
        for logfilter in logger.filters:
            self.logger.addFilter(logfilter)

    translate_config = {}

    translate_config["apiKey"] = api_key
    translate_config["translateUrlV2"] = "https://translation.googleapis.com/language/translate/v2"
    translate_config["translateUrlV3"] = "https://translation.googleapis.com/v3/projects/{}:translateText".format(
        project_key,
    )
    translate_config["project"] = project_key
    translate_config["parent"] = "projects/{}/locations/global".format(project_key)
    translate_config["model"] = f"nmt{':{}'.format(domain) if domain else ''}"

    self._headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json; charset=utf-8",
    }

    self._config = translate_config

config

config() -> dict

Return the configuration parameters.

Returns:

Name Type Description
dict dict

The configuration parameters.

Source code in packages/pyxecm/src/pyxecm_customizer/translate.py
def config(self) -> dict:
    """Return the configuration parameters.

    Returns:
        dict:
            The configuration parameters.

    """

    return self._config

translate

translate(
    source_language: str, target_language: str, text: str
) -> str

Translate a string from one language to another using the Google Translate V2 API.

Parameters:

Name Type Description Default
source_language str

The source language.

required
target_language str

The target language.

required
text str

The string to translate.

required

Returns:

Name Type Description
str str

The translated string, or None if the request failed.

Source code in packages/pyxecm/src/pyxecm_customizer/translate.py
def translate(self, source_language: str, target_language: str, text: str) -> str:
    """Translate a string from one language to another using the Google Translate V2 API.

    Args:
        source_language (str):
            The source language.
        target_language (str):
            The target language.
        text (str):
            The string to translate.

    Returns:
        str:
            The translated string, or None if the request failed.

    """

    params = {
        "key": self.config()["apiKey"],
        "q": text,
        "source": source_language,
        "target": target_language,
    }

    request_url = self.config()["translateUrlV2"]

    response = requests.post(
        url=request_url,
        params=params,
        timeout=REQUEST_TIMEOUT,
    )

    if response.status_code != 200:
        self.logger.error("Failed to translate text -> %s", response.content)
        return None

    translated_text = response.json()["data"]["translations"][0]["translatedText"]

    return translated_text

translate_v3

translate_v3(
    source_language: str, target_language: str, text: str
) -> str

Translate a string from one language to another using the Google Translate V3 API.

Parameters:

Name Type Description Default
source_language str

The source language.

required
target_language str

The destination language.

required
text str

The string to translate.

required

Returns:

Name Type Description
str str

The translated string, or None if the request failed.

Source code in packages/pyxecm/src/pyxecm_customizer/translate.py
def translate_v3(self, source_language: str, target_language: str, text: str) -> str:
    """Translate a string from one language to another using the Google Translate V3 API.

    Args:
        source_language (str):
            The source language.
        target_language (str):
            The destination language.
        text (str):
            The string to translate.

    Returns:
        str:
            The translated string, or None if the request failed.

    """

    data = {
        "source_language_code": source_language,
        "target_language_code": target_language,
        "contents": [text],
    }

    request_header = self._headers
    request_url = self.config()["translateUrlV3"]

    try:
        response = requests.post(
            url=request_url,
            headers=request_header,
            json=data,
            timeout=REQUEST_TIMEOUT,
        )

        if response.status_code != 200:
            self.logger.error("Failed to translate text -> %s", response.content)
            return None

    except Exception as error:
        self.logger.error("Failed translation request; error -> %s", str(error))

    translated_text = response.json()["data"]["translations"][0]["translatedText"]

    return translated_text