From 469709e989965f9f5c3d5293ca6275da9339bee6 Mon Sep 17 00:00:00 2001 From: mike Date: Wed, 16 Sep 2026 11:50:21 +0800 Subject: [PATCH] Update App.jsx via upload script - 2026-09-16 11:50:10 --- App.jsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/App.jsx b/App.jsx index c591b9b..d70a0f5 100644 --- a/App.jsx +++ b/App.jsx @@ -546,9 +546,12 @@ const TRANSLATION_DICTIONARY = { '磷酸铁锂电池': { en: 'LiFePO4 Battery', fr: 'Batterie LiFePO4', ru: 'Аккумулятор LiFePO4', es: 'Batería LiFePO4', ar: 'بطارية ليثيوم فوسفات الحديد' }, }; -// 解析一批中文词条在目标语言下的翻译:优先用上面内置的专业词典(永远准确、不占用AI额度), +// 解析一批词条在目标语言下的翻译:优先用上面内置的专业词典(永远准确、不占用AI额度), // 词典里没有的再查本地缓存(之前AI翻译过的词,存在 crm:translationGlossary 里), // 缓存也没有的才真的调用DeepSeek翻译,翻完存回缓存,下次同一个词就不用再调了。 +// 词条不一定是中文——extraSpecs(AI识别到但没有具名字段的参数)经常是"原样"从原始英文资料 +// 里提取的标签/数值,如果目标语言正好是英文、且词条本身没有中文字符,直接原样保留, +// 既省一次AI调用,也避免"已经是英文的内容被反向翻译成中文"这种方向搞反的问题。 async function resolveExportTranslations(terms, lang) { if (lang === 'zh' || !terms.length) { const map = {}; @@ -564,10 +567,17 @@ async function resolveExportTranslations(terms, lang) { const map = {}; const misses = []; terms.forEach(t => { + // 缓存自愈:目标是英文,但缓存里存的"翻译结果"本身却包含中文——这是老版本那个"方向 + // 搞反"的bug留下的错误缓存(比如"Temperature Compensation"被误翻译成"温度补偿"存进去了), + // 判定这条缓存无效,当成miss重新走一遍解析,不会一直卡在错误结果上。 + const cachedGlossaryHit = glossary[t] && glossary[t][lang]; + const cachedIsBad = lang === 'en' && cachedGlossaryHit && containsChinese(cachedGlossaryHit); if (TRANSLATION_DICTIONARY[t] && TRANSLATION_DICTIONARY[t][lang]) { map[t] = TRANSLATION_DICTIONARY[t][lang]; - } else if (glossary[t] && glossary[t][lang]) { - map[t] = glossary[t][lang]; + } else if (cachedGlossaryHit && !cachedIsBad) { + map[t] = cachedGlossaryHit; + } else if (lang === 'en' && !containsChinese(t)) { + map[t] = t; // 目标是英文、词条本身不含中文字符——大概率已经是英文原文,直接用,不送AI } else { misses.push(t); }