Live Botghost Translator

Translates English text to the selected language on Botghost (Overlay)

目前为 2023-05-20 提交的版本。查看 最新版本

// ==UserScript==
// @name         Live Botghost Translator
// @namespace    https://thelostmoon.net
// @license      MIT
// @version      3.7.5
// @description  Translates English text to the selected language on Botghost (Overlay)
// @match        http://https://dashboard.botghost.com/*
// @match        https://dashboard.botghost.com/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
  'use strict';

  // Language options
  const languages = [
    { code: "af", name: "Afrikaans" },
    { code: "ar", name: "Arabic" },
    { code: "bn", name: "Bengali" },
    { code: "zh-CN", name: "Chinese (Simplified)" },
    { code: "zh-TW", name: "Chinese (Traditional)" },
    { code: "en", name: "English" },
    { code: "fr", name: "French" },
    { code: "de", name: "German" },
    { code: "hi", name: "Hindi" },
    { code: "it", name: "Italian" },
    { code: "ja", name: "Japanese" },
    { code: "ko", name: "Korean" },
    { code: "pt", name: "Portuguese" },
    { code: "ru", name: "Russian" },
    { code: "es", name: "Spanish" },
    { code: "th", name: "Thai" },
  ];

  // Create overlay and center the dropdown
  const overlay = document.createElement("div");
  overlay.style.position = "fixed";
  overlay.style.top = "0";
  overlay.style.left = "0";
  overlay.style.width = "100%";
  overlay.style.height = "100%";
  overlay.style.background = "rgba(0, 0, 0, 0.5)";
  overlay.style.display = "flex";
  overlay.style.alignItems = "center";
  overlay.style.justifyContent = "center";
  overlay.style.zIndex = "9999";

  // Language selection dropdown
  function createLanguageDropdown() {
    const dropdownContainer = document.createElement("div");
    dropdownContainer.style.display = "flex";
    dropdownContainer.style.alignItems = "center";
    dropdownContainer.style.gap = "5px";

    // Close button (X)
    const closeButton = document.createElement("div");
    closeButton.innerHTML = "X";
    closeButton.style.cursor = "pointer";
    closeButton.style.fontSize = "16px";
    closeButton.style.fontWeight = "bold";
    closeButton.style.color = "#fff";
    closeButton.addEventListener("click", function() {
      document.body.removeChild(overlay);
    });

    // Language dropdown
    const dropdown = document.createElement("select");
    dropdown.style.width = "200px";

    for (let i = 0; i < languages.length; i++) {
      const option = document.createElement("option");
      option.value = languages[i].code;
      option.text = languages[i].name;
      dropdown.appendChild(option);
    }

    // OK button
    const okButton = document.createElement("div");
    okButton.innerHTML = "OK";
    okButton.style.cursor = "pointer";
    okButton.style.padding = "4px 8px";
    okButton.style.background = "#fff";
    okButton.style.borderRadius = "4px";
    okButton.style.color = "#000";
    okButton.addEventListener("click", function() {
      selectedLanguage = dropdown.value;
      translateSubtree(document.body, selectedLanguage);
      document.body.removeChild(overlay);
    });

    dropdownContainer.appendChild(closeButton);
    dropdownContainer.appendChild(dropdown);
    dropdownContainer.appendChild(okButton);

    return dropdownContainer;
  }

  // Google Translate API URL
  const API_BASE_URL = "https://translate.googleapis.com/translate_a/single?client=gtx&dt=t&q=";

  // Translate function
  function translate(text, language, callback) {
    const url = API_BASE_URL + encodeURIComponent(text) + "&tl=" + language;
    GM_xmlhttpRequest({
      method: "GET",
      url: url,
      onload: function(response) {
        const translation = JSON.parse(response.responseText)[0][0][0];
        callback(translation);
      }
    });
  }

  // Translate all text nodes in the given DOM node
  function translateNode(node, language) {
    if (node.nodeType === Node.TEXT_NODE) {
      const text = node.textContent.trim();
      if (text) {
        translate(text, language, function(translation) {
          node.textContent = translation;
        });
      }
    } else if (node.nodeType === Node.ELEMENT_NODE) {
      const children = node.childNodes;
      for (let i = 0; i < children.length; i++) {
        translateNode(children[i], language);
      }
    }
  }

  // Translate all text nodes in the given subtree
  function translateSubtree(subtree, language) {
    const nodes = subtree.querySelectorAll('*');
    for (let i = 0; i < nodes.length; i++) {
      translateNode(nodes[i], language);
    }
  }

  // Add overlay and language dropdown when the script is first loaded
  let selectedLanguage = "";
  const languageDropdown = createLanguageDropdown();
  overlay.appendChild(languageDropdown);
  document.body.appendChild(overlay);
})();

QingJ © 2025

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