离线翻译工具需用本地模型或规则引擎替代云端API,满足轻量、可靠、可嵌入需求,如文档批量处理、内网辅助或无网沟通;浏览器端模型须足够轻量。

构建一个离线可用的翻译工具,核心在于绕过依赖网络 API,用本地模型或规则引擎替代云端服务。关键不是“完全模拟 Google 翻译”,而是满足特定场景下的轻量、可靠、可嵌入需求——比如文档批量处理、内网系统辅助、或无网环境下的基础沟通。
选型:轻量级本地翻译模型
浏览器端直接运行的模型必须足够小(
- Whisper.cpp + TinyBERT:适合语音转文字+短句翻译,TinyBERT 可量化到 20MB 以内,用 ONNX Runtime Web 加载
- Helsinki-NLP 的 OPUS-MT 模型(量化版):选 1–2 对常用语种(如 en-zh、zh-en),用 transformers.js + onnxruntime-web 推理
- 纯规则方案(仅限简单场景):预置高频词表 + 词性标注 + 基础语序调整逻辑(如日语主宾谓 → 中文主谓宾),适合术语固定、句式单一的工业文档
加载与缓存:让模型真正“离线”
模型文件不能靠 CDN 或 fetch 动态拉取,需打包进项目并确保首次访问即可用:
- 用 Vite 或 Webpack 的 asset imports(如
import modelData from './models/en-zh-quantized.onnx?url'),生成 base64 或 blob URL,避免额外请求 - 初始化时检查 IndexedDB 是否已存模型二进制,若无则从打包资源解压加载,并持久化——下次启动直接读库,跳过解析开销
- 禁用 service worker 的“网络优先”策略,改用 Cache-first + fallback to indexedDB,确保断网时仍能命中模型和词典
翻译流程:前端可控、可降级
不追求全语言覆盖,而要保证链路健壮:
立即学习“Java免费学习笔记(深入)”;
- 输入文本先做 长度与语言检测(用 langdetect-js 轻量库),超长文本分块(如按句号/换行切分),每块独立翻译再拼接
- 主流程走 ONNX 模型;若模型加载失败或显存不足(WebGL context lost),自动降级到 预编译的 JSON 词典映射 + 规则补全(例如 “hello → 你好”,“I love → 我爱”,加动词变位表)
- 输出结果附带 置信度估计(模型 softmax 输出最大概率值),UI 上对
工程细节:减体积、保体验
离线工具最怕“下载 50MB 模型卡住页面”:
- 模型用 Q4_K_M 量化格式(llama.cpp 风格),比 FP32 小 70%+,ONNX Runtime Web 支持直接加载
- 翻译逻辑封装为 Web Worker,避免阻塞主线程;Worker 内使用 transferable objects 传递 ArrayBuffer,零拷贝加速
- 提供“最小模式”开关:关闭模型加载,只启用词典查表(
不复杂但容易忽略:真正的离线 = 所有依赖(模型、词典、运行时)都在构建产物里,且首次加载后不发任何网络请求。测试时关掉 WiFi,清空缓存,打开 DevTools 的 Offline 模式跑一遍完整流程——这才是验证标准。


















