jQuery(function ($) {
    const $panel = $('#ltat-manual-panel');
    const $select = $('#ltat-manual-lang');
    const $translateBtn = $('#ltat-manual-translate');
    const $resetBtn = $('#ltat-manual-reset');
    const $toggle = $('#ltat-toggle');
    // ---------- 填充语言下拉 ----------
    Object.keys(window.ltat_languages).forEach(code => {
        $select.append(``);
    });
    // ---------- 手动面板开关 ----------
    $toggle.on('click', () => $panel.toggle());
    // ---------- 手动翻译 ----------
    $translateBtn.on('click', function () {
        const target = $select.val();
        if (!target) return alert('请选择目标语言');
        translatePage('zh', target);   // 源语言固定为中文
    });
    // ---------- 重置 ----------
    $resetBtn.on('click', () => location.reload());
    // ---------- 自动翻译 ----------
    if (ltat.auto) {
        // 页面加载完毕后立即执行
        $(window).on('load', () => {
            translatePage(ltat.auto.source, ltat.auto.target);
        });
    }
    // ---------- 核心翻译函数 ----------
    function translatePage(source, target) {
        const selectors = 'p, h1, h2, h3, h4, h5, h6, li, td, th, .entry-content *';
        const $els = $(selectors).filter(function () {
            return this.childNodes.length === 1 && this.childNodes[0].nodeType === Node.TEXT_NODE;
        });
        const texts = [];
        const map = new Map();
        $els.each(function () {
            const txt = this.textContent.trim();
            if (txt.length > 3) {
                texts.push(txt);
                map.set(txt, this);
            }
        });
        if (!texts.length) return alert('没有可翻译的文本');
        // 合并为一个请求(LibreTranslate 支持数组)
        $.post(ltat.ajax_url, {
            action: 'ltat_translate',
            nonce: ltat.nonce,
            text: JSON.stringify(texts),   // 直接传数组
            source_lang: source,
            target_lang: target
        }, function (res) {
            if (!res.success) return alert('翻译失败:' + res.data);
            // LibreTranslate 返回 { translatedText: [...] } 或单个字符串
            const translated = Array.isArray(res.data) ? res.data : [res.data];
            texts.forEach((orig, i) => {
                const el = map.get(orig);
                if (el && translated[i]) $(el).text(translated[i]);
            });
            // 自动翻译完成提示(仅一次)
            if (ltat.auto) {
                console.log('%c 自动翻译完成 → ' + target, 'color:#0a0;font-weight:bold');
            } else {
                alert('翻译完成!');
            }
        }).fail(() => alert('请求失败,请检查网络或 API'));
    }
});
如何计算优先股的股利分配 – 0x财经百科