
最近做了个佛教文献翻译器,纯前端实现,分享下技术细节。
翻译佛经时发现通用翻译器对专业术语处理很差,比如「般若」被翻成 wisdom ,丢失了 Prajā 的深层含义。于是自己动手做了一个。
在线体验: https://xr843.github.io/Buddhist-AI-Translator GitHub: https://github.com/xr843/Buddhist-AI-Translator
最关键的是让 AI 理解佛学语境,我的 prompt 结构:
function createTranslationPrompt(text, sourceLang, targetLang) { let prompt = `将${sourceDesc}翻译为${targetDesc}:\n\n${text}\n\n`; if (targetLang === 'zh') { prompt += '要求:准确翻译佛教术语,使用现代中文。'; } else if (targetLang === 'zh-classical') { prompt += '要求:翻译为文言文,保持庄严性。'; } else { prompt += '要求:准确翻译,保持佛教术语的正确性。'; } prompt += '\n\n 直接返回翻译结果,无需引号或解释。'; return prompt; } 关键点: - 明确指定目标语言风格 - 要求直接返回结果,减少后处理 - 针对不同语言给不同指令 ### 2. 术语数据库 内置了 50+ 佛教术语对照表,作为兜底: const buddhistTerms = { '般若波罗蜜多心经': 'The Heart of the Perfection of Wisdom Sutra / ', '观自在菩萨': 'Avalokiteshvara Bodhisattva / ', '涅': 'Nirvana / ', '菩萨': 'Bodhisattva / ', // ... }; 当 API 挂掉时,用术语库做基础翻译。 ### 3. 缓存策略 为了减少 API 调用和提升响应速度: const translatiOnCache= new Map(); const MAX_CACHE_SIZE = 100; function getCacheKey(text, sourceLang, targetLang) { return `${sourceLang}->${targetLang}:${text.trim()}`; } // LRU 清理 function cleanCache() { if (translationCache.size >= MAX_CACHE_SIZE) { const firstKey = translationCache.keys().next().value; translationCache.delete(firstKey); } } 相同文本+语言对直接返回缓存,秒级响应。 ### 4. XSS 防护 AI 返回的内容不可信,必须转义: function escapeHtml(text) { const div = document.createElement('div'); div.textCOntent= text; return div.innerHTML; } // 输出时转义 resultDiv.innerHTML = `<div class="translation-text">${escapeHtml(translationResult)}</div>`; ### 5. API 调用优化 const cOntroller= new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 15000); const respOnse= await fetch(API_CONFIG.baseURL, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_CONFIG.apiKey}` }, body: JSON.stringify({ model: 'deepseek-chat', messages: [...], temperature: 0.1, // 低温度保证一致性 max_tokens: 800, stream: false }), signal: controller.signal }); - 15 秒超时,避免长时间等待 - temperature 设 0.1 ,翻译需要稳定输出 - 非流式响应,简化处理逻辑 遇到的坑 1. DeepSeek 返回带引号 - AI 经常把翻译结果用引号包起来,需要后处理去掉 2. 语音合成分段 - 长文本一次性朗读会卡,需要按句子分段 3. 梵文字体 - 部分浏览器不支持 Devanagari ,需要加载 Google Fonts ## 效果 | 指标 | 数据 | |----------|-------------| | 首次翻译 | 1-3 秒 | | 缓存命中 | <100ms | | 代码量 | ~1400 行 JS | | 包大小 | 0 (无依赖) | ## 总结 纯前端 + LLM API 的组合很适合做这类垂直领域工具: - 开发快,部署简单 (GitHub Pages 直接托管) - 用户自带 API Key ,无服务器成本 - Prompt 工程 + 术语库,解决专业领域翻译问题 代码完全开源,欢迎 PR: https://github.com/xr843/Buddhist-AI-Translator --- 有问题欢迎讨论,也欢迎推荐其他需要补充的佛教术语。 --- 1 XR843 OP 为什么要做这个项目? 翻译佛经时发现通用翻译器对专业术语处理很不理想,比如: - 「般若」→ 被翻成 wisdom ,但它是 Prajā,指超越二元对立的智慧 - 「空」→ 被翻成 emptiness ,但它是 ūnyatā,指无自性 - 「涅」→ 有时被翻成 death ,完全错误 在线体验: https://xr843.github.io/Buddhist-AI-Translator GitHub: https://github.com/xr843/Buddhist-AI-Translator 详细技术实现见 GitHub README 。 |