您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto-translates pages using an iframe overlay and inline Google Translate.
当前为
- // ==UserScript==
- // @name Google Auto Translate (Multilingual + Inline Translation)
- // @namespace https://greasyfork.org/en/users/1030895-universedev
- // @author UniverseDev
- // @license GPL-3.0-or-later
- // @version 1.0
- // @description Auto-translates pages using an iframe overlay and inline Google Translate.
- // @match *://*/*
- // @grant none
- // ==/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 createTranslateOverlay = (targetLang) => {
- if (document.getElementById("googleTranslateIframe")) return;
- const iframe = document.createElement("iframe");
- iframe.id = "googleTranslateIframe";
- iframe.src = `https://translate.google.com/translate?hl=${targetLang}&sl=auto&tl=${targetLang}&u=${encodeURIComponent(location.href)}`;
- 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.getElementById("google_translate_element")) 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);
- };
- window.googleTranslateInit = () => {
- new google.translate.TranslateElement(
- { pageLanguage: "auto", includedLanguages: getUserLanguage(), autoDisplay: false, multilanguagePage: true },
- "google_translate_element"
- );
- };
- const autoTranslateIfNeeded = () => {
- const targetLang = getUserLanguage();
- const pageLang = detectPageLanguage();
- if ((!pageLang || pageLang.toLowerCase() !== targetLang.toLowerCase()) && !isAlreadyTranslated()) {
- createTranslateOverlay(targetLang);
- } else {
- insertGoogleTranslateWidget();
- }
- };
- window.addEventListener("load", autoTranslateIfNeeded);
- })();