Skip to content

A new google translate api #77

Description

@felix-sky

As @scholastique237 suggested, the current google translate API might need a renewal like other game translator did (e.g. Translator ++).

My Attempt:

I created a Python file named _google.py, which implements the logic for calling the translate-pa.googleapis.com/v1/translateHtml API. This file is intended to serve as a new translation engine within the custom_engine plugin library.

# src/custom_engine/_google.py
# Moteur Google Translate (endpoint public via translate-pa.googleapis.com)

import traceback
import json
import requests

def get_max_length():
    return 15000

def translate_single(app_key, app_secret, source, target, proxies, text):
    try:
        filtered = text.replace('\n', '<brk>')
        data = [[ [filtered], source, target ], 'te_lib']
        url = 'https://translate-pa.googleapis.com/v1/translateHtml'
        key = app_key if app_key else 'AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520'
        headers = {
            'Content-Type': 'application/json+protobuf',
            'User-Agent': 'Mozilla/5.0 (Linux; Android 13; SM-S901B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36',
            'Referer': 'https://www.amazon.com',
            'x-goog-api-key': key,
        }
        resp = requests.post(url, data=json.dumps(data), headers=headers, proxies=proxies)
        resp.raise_for_status()
        result = resp.json()
        translated = ''.join([seg for seg in result[0][0]]).replace('<brk>', '\n')
        return translated
    except Exception:
        traceback.print_exc()
        return None
    
def translate_queue(app_key, app_secret, source, target, proxies, q):
    url = 'https://translate-pa.googleapis.com/v1/translateHtml'
    api_key_to_use = app_key if app_key else 'AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520'
    headers = {
        'Content-Type': 'application/json+protobuf',
        'User-Agent': 'Mozilla/5.0 (Linux; Android 13; SM-S901B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36',
        'Referer': 'https://www.amazon.com',
        'x-goog-api-key': api_key_to_use,
    }

    ori_dic = {str(i): text for i, text in enumerate(q)}
    text_list = list(ori_dic.values())
    data = [[text_list, source, target], 'te_lib']

    try:
        resp = requests.post(url, data=json.dumps(data), headers=headers, proxies=proxies)
        resp.raise_for_status()
        result = resp.json()
        translated_list = [''.join(seg).replace('<brk>', '\n') if isinstance(seg, list) else seg.replace('<brk>', '\n') for seg in result[0]]


        l = []
        for i, translated_text in enumerate(translated_list):
            item = {
                'untranslatedText': text_list[i],
                'translatedText': translated_text
            }
            l.append(item)

        return l

    except Exception:
        msg = traceback.format_exc()
        print(msg)
        return []

Suggestion/Purpose

I have successfully used this plugin to translate a Ren'Py game, demonstrating its effectiveness. Therefore, I propose to migrate this API into the software.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions