Adds a auto-translate messages for character messages in the chat for beta.character.ai
当前为
// ==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.1
// @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);
translateContent = translateContent.replace(/<\/div>$/, '');
$(translateNode).html(translateContent + `<p>.......... end_translate ..........</p></div>`);
}
async function translate(text, sLang, tLang, format, key) {
try {
if (debug) {
console.log(`preTranslate: ${text}`);
}
if (format == null) {
format = "html";
}
if (key == null) {
key = "AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw";
}
const result = await new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: "POST",
url: `https://translate.google.com/translate_a/t?client=gtx&format=${format}&sl=${sLang}&tl=${tLang}&key=${key}`,
data: `q=${encodeURIComponent(text)}`,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
onload: response => {
resolve(JSON.parse(response.responseText)[0][0]);
},
onerror: response => {
reject(response.statusText);
}
});
});
if (debug) {
console.log(`postTranslate: ${result}`);
}
return result;
} catch (error) {
console.error(error);
}
}