Skip to content

A new google translate api #77

@felix-sky

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.

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