Auto-Translate Messages for beta.character.ai

Adds a auto-translate messages for character messages in the chat for beta.character.ai

当前为 2022-12-26 提交的版本,查看 最新版本

// ==UserScript==
// @name        Auto-Translate Messages for beta.character.ai
// @namespace   AutoTranslateMessagesForBetaCharacterAI
// @description Adds a auto-translate messages for character messages in the chat for beta.character.ai
// @version     3.0.0
// @author      CriDos
// @icon        https://www.google.com/s2/favicons?sz=64&domain=beta.character.ai
// @match       https://beta.character.ai/chat?char=*
// @grant       GM_xmlhttpRequest
// @run-at      document-end
// @require     https://cdnjs.cloudflare.com/ajax/libs/he/1.2.0/he.min.js
// @require     https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js
// @license     MIT
// ==/UserScript==

'use strict';

console.log(`Auto-Translate Messages initializing...`);

let debug = true;

setInterval(addAutoTranslate, 500);

async function addAutoTranslate() {
    var charMessages = document.getElementsByClassName("char-msg");
    for (var i = 0; i < charMessages.length; i++) {
        const node = charMessages[i].querySelector(".markdown-wrapper");

        if (node == null) {
            continue;
        }

        const parentNode = node.parentElement;
        if (parentNode.isAutoTranslate) {
            continue;
        }
        parentNode.isAutoTranslate = true;

        setInterval(async () => {
            await translateNode(node);
        }, 500);
    }
}

async function translateNode(node) {
    const translateClassName = "translate-markdown";
    const parentNode = node.parentElement;
    const nodeContent = $(node).html();

    if (node.storeContent == nodeContent) {
        return;
    }
    node.storeContent = nodeContent;

    var translateNode = parentNode.querySelector(`.${translateClassName}`);
    if (translateNode == null) {
        translateNode = node.cloneNode(true);
        translateNode.classList.add(translateClassName);
        parentNode.insertBefore(translateNode, parentNode.firstChild);
    }

    var translateContent = await translate(nodeContent, "auto", navigator.language, false, "html");
    translateContent = translateContent.replace(/<\/div>$/, '');

    $(translateNode).html(translateContent + `<p>.......... end_translate ..........</p></div>`);
}

async function translate(text, sLang, tLang, encode, format) {
    try {
        if (debug) {
            console.log(`preTranslate: ${text}`);
        }

        if (encode === true) {
            text = he.encode(text);
        }

        if (format == null) {
            format = "text";
        }

        const result = await new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
                method: "POST",
                url: "https://translate.google.com/translate_a/single",
                data: `format=${format}&client=gtx&sl=${sLang}&tl=${tLang}&dt=t&q=${encodeURIComponent(text)}`,
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded",
                    // "Authorization": `Bearer ${API_KEY}`
                },
                onload: response => {
                    const translatedText = JSON.parse(response.responseText)[0]
                        .map(text => text[0])
                        .join(" ");

                    resolve(translatedText);
                },
                onerror: response => {
                    reject(response.statusText);
                }
            });
        });

        if (debug) {
            console.log(`postTranslate: ${result}`);
        }

        return result;
    } catch (error) {
        console.error(error);
    }
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址