/** * AKSRT Frontend Translate — 前端即时翻译 * * 渐进增强,默认关。通过 Settings 启用后, * 在语言切换 Widget 中添加"翻译本页"按钮, * 使用浏览器原生翻译或自定义翻译 API。 * * @package AKSRT */ (function () { 'use strict'; var config = (window.aksrtData && window.aksrtData.translate) || {}; if (!config.enabled) return; /** * 触发浏览器原生翻译(Chrome/Edge 内置) */ function triggerBrowserTranslate(targetLang) { // Chrome/Edge 有内置翻译功能 if (document.querySelector('.goog-te-banner-frame') || document.querySelector('#goog-gt-tt')) { return; // 已经在翻译中 } // 尝试使用 Google Translate Element if (window.google && window.google.translate) { new google.translate.TranslateElement({ pageLanguage: config.sourceLang || 'zh-CN', includedLanguages: targetLang || '', layout: google.translate.TranslateElement.InlineLayout.SIMPLE, autoDisplay: false, }, 'aksrt-translate-container'); return; } // 动态加载 Google Translate var script = document.createElement('script'); script.src = '//translate.google.com/translate_a/element.js?cb=aksrtTranslateInit'; document.head.appendChild(script); window.aksrtTranslateInit = function () { if (!window.google || !window.google.translate) return; new google.translate.TranslateElement({ pageLanguage: config.sourceLang || 'zh-CN', includedLanguages: targetLang || config.targetLang || 'en', layout: google.translate.TranslateElement.InlineLayout.SIMPLE, autoDisplay: false, }, 'aksrt-translate-container'); }; } /** * 创建翻译容器和按钮 */ function init() { // 检查是否有语言切换 Widget var langWidget = document.querySelector('.aksrt-lang-switch, [data-aksrt-lang-switch]'); if (!langWidget && !config.showButton) return; // 创建隐藏的翻译容器 var container = document.createElement('div'); container.id = 'aksrt-translate-container'; container.style.cssText = 'position:fixed;top:-9999px;left:-9999px;visibility:hidden;'; document.body.appendChild(container); // 如果配置了显示按钮,在语言切换 Widget 旁添加 if (config.showButton && langWidget) { var btn = document.createElement('button'); btn.type = 'button'; btn.className = 'aksrt-translate-btn'; btn.innerHTML = ' 翻译本页'; btn.addEventListener('click', function () { triggerBrowserTranslate(config.targetLang || 'en'); btn.textContent = '翻译中...'; btn.disabled = true; }); langWidget.appendChild(btn); } } document.addEventListener('DOMContentLoaded', init); })();