Files
wordpress-theme-aksrt/assets/js/frontend-translate.js
T

84 lines
2.8 KiB
JavaScript

/**
* 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 = '<i class="fas fa-language"></i> 翻译本页';
btn.addEventListener('click', function () {
triggerBrowserTranslate(config.targetLang || 'en');
btn.textContent = '翻译中...';
btn.disabled = true;
});
langWidget.appendChild(btn);
}
}
document.addEventListener('DOMContentLoaded', init);
})();