您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto-translates pages using an iframe overlay and inline Google Translate, only when translation is requested.
当前为
// ==UserScript== // @name Google Auto Translate (Multilingual + Inline Translation) // @namespace https://gf.qytechs.cn/en/users/1030895-universedev // @author UniverseDev // @license GPL-3.0-or-later // @version 1.4 // @description Auto-translates pages using an iframe overlay and inline Google Translate, only when translation is requested. // @match *://*/* // @grant unsafeWindow // ==/UserScript== (function () { "use strict"; const STORAGE_KEY = "userTranslateLang"; const DEFAULT_LANG = "en"; const getUserLanguage = () => localStorage.getItem(STORAGE_KEY) || DEFAULT_LANG; const setUserLanguage = (lang) => { localStorage.setItem(STORAGE_KEY, lang); location.reload(); }; const detectPageLanguage = () => document.documentElement.lang || document.querySelector("html")?.getAttribute("lang") || null; const isAlreadyTranslated = () => { return document.querySelector("body").classList.contains("translated-ltr") || document.querySelector("body").classList.contains("translated-rtl"); }; const canEmbedIframe = (url) => { const iframe = document.createElement("iframe"); iframe.style.display = "none"; iframe.src = url; return new Promise((resolve, reject) => { iframe.onload = () => resolve(true); iframe.onerror = () => reject(false); document.body.appendChild(iframe); setTimeout(() => { document.body.removeChild(iframe); }, 2000); }); }; const createTranslateOverlay = async (targetLang) => { const pageLang = detectPageLanguage(); if (pageLang && pageLang.toLowerCase() === targetLang.toLowerCase()) { return; } const translateUrl = `https://translate.google.com/translate?hl=${targetLang}&sl=auto&tl=${targetLang}&u=${encodeURIComponent(location.href)}`; const canEmbed = await canEmbedIframe(translateUrl); if (!canEmbed) { console.log("Iframe embedding is not allowed on this page."); return; } if (document.getElementById("googleTranslateIframe")) return; const iframe = document.createElement("iframe"); iframe.id = "googleTranslateIframe"; iframe.src = translateUrl; Object.assign(iframe.style, { position: "fixed", top: 0, left: 0, width: "100vw", height: "100vh", border: "none", zIndex: 99999, backgroundColor: "#fff", }); document.body.appendChild(iframe); }; const insertGoogleTranslateWidget = () => { if (document.querySelector("script[src*='translate_a/element.js']")) { return; } const translateDiv = document.createElement("div"); translateDiv.id = "google_translate_element"; Object.assign(translateDiv.style, { position: "fixed", bottom: "10px", right: "10px", zIndex: 100000, }); document.body.appendChild(translateDiv); const script = document.createElement("script"); script.src = "//translate.google.com/translate_a/element.js?cb=googleTranslateInit"; document.body.appendChild(script); }; unsafeWindow.googleTranslateInit = () => { new google.translate.TranslateElement( { pageLanguage: "auto", includedLanguages: getUserLanguage(), autoDisplay: false, multilanguagePage: true }, "google_translate_element" ); const translateWidget = document.querySelector(".goog-te-combo"); if (translateWidget) { translateWidget.addEventListener("change", async () => { const targetLang = translateWidget.value; const pageLang = detectPageLanguage(); if (!pageLang || pageLang.toLowerCase() !== targetLang.toLowerCase()) { await createTranslateOverlay(targetLang); } else { console.log("Translation not needed: Page is already in the selected language."); } }); } }; const initTranslationWidget = async () => { await insertGoogleTranslateWidget(); }; window.addEventListener("load", initTranslationWidget); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址