Translate Buttons for beta.character.ai

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

目前为 2022-12-13 提交的版本。查看 最新版本

// ==UserScript==
// @name        Translate Buttons for beta.character.ai
// @namespace   TranslateButtonsForBetaCharacterAI
// @version     1.5
// @description Adds a translate buttons for character messages in the chat for beta.character.ai
// @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
// @license     MIT
// ==/UserScript==

function addButtons() {
    var elements = document.getElementsByClassName("msg char-msg");
    for (var i = 0; i < elements.length; i++) {
        const charMsg = elements[i];

        if (charMsg.querySelector(".translate-button") === null) {
            var btn = document.createElement("button");
            btn.innerHTML = "Tr";
            btn.classList.add("translate-button");
            btn.style.cssText = "width: 30px; height: 30px;";

            // Add event listener for click event on translate button
            btn.addEventListener("click", function() {
                const msgElements = charMsg.querySelectorAll('p, li');
                for (var j = 0; j < msgElements.length; j++) {
                    const msgElement = msgElements[j];
                    const text = msgElement.innerHTML;

                    if (msgElement.originalText != null) {
                        console.log("Return original message text: " + msgElement.originalText);
                        msgElement.innerHTML = msgElement.originalText;
                        msgElement.originalText = null;
                        continue;
                    }

                    console.log("Message text: " + text);
                    msgElement.originalText = text;

                    // Use the user's language as the target language in the API request
                    var url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=" + navigator.language + "&dt=t&q=" + encodeURIComponent(text);

                    GM_xmlhttpRequest({
                        method: "GET",
                        url: url,
                        onload: function(response) {
                            const responseText = JSON.parse(response.responseText);

                            let translation = "";
                            responseText[0].forEach((part) => {
                                translation += part[0];
                            });

                            // Log the translation
                            console.log("Translated text: " + translation);

                            // Replace the original text with the translated text
                            msgElement.innerHTML = translation;
                        }
                    });
                }
            });

            // Log the button being added
            console.log("Added translate button for element: " + charMsg);
            charMsg.insertBefore(btn, charMsg.firstChild);
        }
    }
}

// Check every second
setInterval(addButtons, 1000);