Adds a translate buttons for character messages in the chat for beta.character.ai
当前为
// ==UserScript==
// @name Translate Buttons for beta.character.ai
// @namespace TranslateButtonsForBetaCharacterAI
// @version 1.7
// @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];
const markdownWrapper = charMsg.querySelector(".markdown-wrapper");
const rootMarkdownWrapper = markdownWrapper.parentElement;
if (charMsg.querySelector(".translate-button") === null) {
var btn = document.createElement("button");
btn.textContent = "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 translateNodeName = "translate-markdown-wrapper";
var translateNode = rootMarkdownWrapper.querySelector(`.${translateNodeName}`);
if (translateNode) {
rootMarkdownWrapper.removeChild(translateNode)
}
var clone = markdownWrapper.cloneNode(true);
clone.className = translateNodeName;
rootMarkdownWrapper.insertBefore(clone, rootMarkdownWrapper.firstChild);
const text = clone.innerHTML;
console.log("Message text: " + 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=en&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
clone.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);