Google整页翻译一直运行-自改(不再更新,已找到原作者最新版脚本,脚本看简介)

谷歌浏览器整页翻译(原位翻译,不跳转页面),去除顶部翻译栏,适配移动端布局。在所有网页(除百度和优酷外)左下角均会显示翻译按钮。

目前为 2023-06-15 提交的版本。查看 最新版本

// ==UserScript==
// @name         Google整页翻译一直运行-自改(不再更新,已找到原作者最新版脚本,脚本看简介)
// @author       anonymous
// @author       zyb
// @license      GPL-3.0-only
// @match        http://*/*
// @include      https://*/*
// @include      file://*/*
// @exclude      /.*baidu.*/
// @exclude      /youku\.com/
// @exclude      /.bilibili.*/*
// @exclude      /.*qq.*/

// @run-at       document-end
// @noframes
// @description  谷歌浏览器整页翻译(原位翻译,不跳转页面),去除顶部翻译栏,适配移动端布局。在所有网页(除百度和优酷外)左下角均会显示翻译按钮。

// @note         去除顶部翻译栏,添加显示原文按钮;修改翻译按钮为在页面边缘附着的半透明圆角按钮,鼠标移入弹出翻译或显示原文按钮。
// @note         优化移动端布局,去除翻译时图片的请求,加快翻译速度。(除发现重大BUG外,后期将不再更新。)
// @note         只是把长度单位字符(em)改成了像素(px),防止出现按钮尺寸显示不正常的现象。
// @note         屏蔽百度和优酷网址等国内常用网址。
// @version      0.21
// @namespace    https://gf.qytechs.cn/users/574851
// ==/UserScript==

(function () {
	'use strict';
	let addNewElement = function(innerhtml,node,src) {
		let element = document.createElement(node);
		if(src){
			element.src = innerhtml;
		}else{
			element.innerHTML = innerhtml;
		}
		document.getElementsByTagName('head')[0].appendChild(element);
	}

	// 隐藏顶部栏
	const head = document.head
	const style = document.createElement('style')
	const text = [
		//翻译按钮样式设置
		'#google_translate_element {',
		'  position: fixed;',
		//'  max-width: 120px;',//按钮宽度(仅PC端生效)
		'  min-width: 90px;',//按钮宽度(仅PC端生效)
		'  height: 25px;',//按钮高度
		'  left: 0;',//左侧边距离设置;如果要靠右设置,left改成right即可
		'  bottom: 20px;',//距离底部高度
		'  border: 2px solid #4990e4;',//边框线设置
		'  border-radius: 0 13px 13px 0;',//边界半径设置
		'  z-index: 10000000;',
		'  overflow: hidden;',
		'  box-shadow: 1px 1px 3px 0 #0000;',//外边框阴影设置
		//'  opacity: 0.4;',//初始透明度设置
		'  transform: translateX(-75%);',//按钮隐藏百分比设置(仅PC端生效)
		'  transition: all 0.3s;',
		'  background-color: #ffffff;',
		'}',
		'#google_translate_element:hover {',
		'  opacity: 1;',//透明度设置
		'  transform: translateX(0);',
		'}',
		'#google_translate_element .goog-te-gadget-simple {',
		'  width: 100%;',
		'  padding-top: 2px',
		'}',
		'#google_translate_element .goog-te-gadget-simple .goog-te-gadget-icon{',
		'  display: inline-block;',
		'}',
		'.goog-te-banner-frame.skiptranslate {',
		'  display: none',
		'}',
		'html,body{',
		'  top: 0!important',
		'}',
		//通用按钮样式
		'.btnBox {',
		'  width: 45px;',//按钮宽度(仅PC端生效)
		'  background-color: #F0F8FF;',//背景色设置
		'  position: fixed;',
		'  left: 0;',//左侧边距离设置;如果要靠右设置,left改成right即可
		'  z-index: 10000000;',
		'  user-select: none;',
		'  text-align: center;',
		'  border: 2px solid #4990e4;',//边框线设置
		'  font-size: small;',
		'  line-height: 25px;',//按钮高度设置(仅PC端生效)
		'  border-radius: 0 15px 15px 0;',//边界半径设置
		'  box-shadow: 1px 1px 3px 0 #C0C0C0;',//外边框阴影设置
		// '  opacity: 0.4;',//初始透明度设置
		'  transform: translateX(-50%);',//按钮隐藏百分比设置(仅PC端生效)
		'  transition: all 0.3s;',
		'  cursor: pointer',
		' }',
		//原文按钮样式设置
		'.recoverPage {',
		'  bottom: 50px;',//距离底部高度
		' }',
		'.recoverPage:hover {',
		'  opacity: 1;',//透明度设置
		'  transform: translateX(0);',
		' }',
		'.recoverPage:active {',
		'  box-shadow: 1px 1px 3px 0 #888 inset;',
		' }',

		//翻译按钮样式设置
		'.translateBtn {',
		'  bottom: 85px;',//距离底部高度
		' }',
		'.translateBtn:hover {',
		'  opacity: 1;',//透明度设置
		'  transform: translateX(0);',
		' }',
		'.translateBtn:active {',
		'  box-shadow: 1px 1px 3px 0 #888 inset;',
		' }',
		//隐藏翻译按钮
		'.hidetranslate {',
		'  display: none;',
		' }',

		/*----移动端UI适配设置(PC端不生效)-----------------------------------------*/
		' @media handheld, only screen and (max-width: 768px) {',
		//翻译按钮样式设置
		'  #google_translate_element {',
		'   width: 104px;',//按钮宽度
		'  }',
		'  #google_translate_element .goog-te-combo {',
		'   margin: 0;',
		'   padding-top: 2px;',
		'   border: none;',
		'  }',
		//原文按钮样式设置
		'  .btnBox {',
		'   width: 34px;',//按钮宽度
		'   line-height: 24px;',//按钮高度设置
		'   transform: translateX(-40%);',//按钮隐藏百分比设置
		'   transform: translateX(1);',//隐藏功能开关,0为关闭;1为打开
		'  }',
		' }',
	].join('\n')
	const style_text = document.createTextNode(text)
	style.appendChild(style_text)
	head.appendChild(style)

	// 恢复原网页按钮设置
	const initScript = document.createElement('script')
	const initText = document.createTextNode([
		// 清除图片的请求,加快访问速度
		"  img = [].slice.call(document.querySelectorAll('#goog-gt-tt img,#google_translate_element img'));",
		"  img.forEach(function(v, i){",
		"   v.src = '';",
		"  });",

		"  //创建原文按钮",
		"  const recoverPage = document.createElement('div')",
		"  recoverPage.setAttribute('class', 'notranslate btnBox recoverPage')",
		"  recoverPage.innerText = '原文'",
		"  document.body.appendChild(recoverPage)",
		"  recoverPage.onclick = (() => {",
		"  const phoneRecoverIframe = document.getElementById(':1.container')",
		"  const PCRecoverIframe = document.getElementById(':2.container')",
		"    if (phoneRecoverIframe) {",
		"      const recoverDocument = phoneRecoverIframe.contentWindow.document",
		"      recoverDocument.getElementById(':1.restore').click()",
		" } else if (PCRecoverIframe) {",
		"      const recoverDocument = PCRecoverIframe.contentWindow.document",
		"      recoverDocument.getElementById(':2.restore').click()",
		"    }",
		"  })",
	].join("\n"))
	initScript.appendChild(initText)
	head.appendChild(initScript)

	//翻译按钮设置
	const translateBtn = document.createElement('div');
	translateBtn.setAttribute('class', 'notranslate btnBox translateBtn');
	translateBtn.innerText = '翻译';
	document.body.appendChild(translateBtn);
	translateBtn.onclick = (() => {

		translateBtn.setAttribute('class', 'notranslate btnBox translateBtn hidetranslate');
		//翻译语种按钮设置
		let google_translate_element = document.createElement('div');
		google_translate_element.id = 'google_translate_element';
		document.documentElement.appendChild(google_translate_element);

		let gtehtml="function googleTranslateElementInit() {" +
			"new google.translate.TranslateElement({" +
			"autoDisplay: true,"+
			"layout: google.translate.TranslateElement.InlineLayout.SIMPLE," +
			"multilanguagePage: true," +
			"pageLanguage: 'auto'," +
			"includedLanguages: 'zh-CN,zh-TW,en,ja,ru'" +
			"}, 'google_translate_element');}";

		addNewElement(gtehtml,'script',false);
		addNewElement('https://cdn.jsdelivr.net/gh/zs6/[email protected]/element.js','script',true);
	})

	//addNewElement(gtehtml,'script',false);
	//addNewElement('https://cdn.jsdelivr.net/gh/zs6/[email protected]/element.js','script',true);
	
	// 如果当前页面的语言、标题、主要使用语言不是中文,那么自动帮忙点击翻译按钮
	if(!isChinesePage()){
		console.log('自动点击翻译按钮');
		translateBtn.click();
	}

	// 判断是不是中文网页
	function isChinesePage() {
		// 获取 head
		const head = document.head;
		// 获取body
		const body = document.body;
		// 获取当前页面的语言
		const lang = document.documentElement.lang;
		// 获取网页的标题
		const pageTitle = document.title;
		// 获取网页使用的主要语言
		const mainLang = document.characterSet.toLowerCase();

		return (lang.substring(0, 2) === 'zh' || mainLang.substring(0, 2) === 'gb' || /[\u4E00-\u9FFF]/.test(pageTitle));
	}

}());

QingJ © 2025

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