版本 v1.0.3 | 适用于 Microsoft Edge(Chromium 内核)与 Google Chrome 及所有 Chromium 系浏览器
一款浏览器翻译扩展:不替换、不覆盖原文,而是把译文插入到每一段文字的下方,方便逐段对照阅读——交互形式参考了「沉浸式翻译」的行内译文设计,本扩展为完全独立的实现。
同时支持两类翻译服务:
- 翻译网站 API:Google 翻译(免费)、DeepL、百度翻译、有道翻译(智云),设置页内附申请链接
- AI 大模型 API:OpenAI 兼容接口(OpenAI / DeepSeek / Moonshot Kimi / 智谱 GLM / Ollama 本地部署等)与 Anthropic Claude
- 段落级行内译文:译文显示在原文段落下方,原文完整保留
- 布局感知嵌入:译文位置随原文空间分布自适应,不破坏原网页布局——
- 段落状 → 译文直接嵌入为下方独立段落,与原文风格统一
- 横向排列(菜单 / 标签 / 分栏等)→ 译文位于每个单词 / 项的下方,横排保持不变
- 行内元素 → 译文以行内块跟在原文右侧
- 右键菜单:在网页空白处右键,可直接「翻译此页」「隐藏 / 显示译文」「移除译文」
- 多服务可选:免费 Google 翻译开箱即用,或接入 DeepL / 百度 / 有道 / 各类 AI 大模型
- 智能段落识别:自动跳过按钮、代码块、过短文本、悬浮层、已是目标语言的段落;外层容器优先,避免父子段落重复翻译
- 批量请求 + 缓存:大段文本按字符数分批请求(可配置),相同文本不重复请求
- 进度与取消:翻译过程中右上角实时显示进度,可随时取消
- 一键隐藏 / 移除:译文可整体隐藏或移除,页面瞬间还原
- 单段复制:译文悬停可见「译」角标,点击复制该段译文
- 快捷键:
Alt+Q快速翻译当前页(可在edge://extensions/shortcuts修改) - 深浅色页面通用:译文跟随原文颜色与字号(略淡),无需专门适配
- 将本项目文件夹下载 / 解压到本地(保持目录结构完整)
- Edge 地址栏输入
edge://extensions并回车 - 打开页面左下角的 「开发人员模式」
- 点击 「加载解压缩的扩展」,选择本扩展所在文件夹(
inline-translate) - 点击工具栏上的拼图图标,把「行内翻译」固定到工具栏
Chrome 用户:进入
chrome://extensions,同样开启「开发者模式」后加载即可。
- 打开任意网页(如一篇英文文章)
- 点击工具栏的「行内翻译」图标 → 「翻译此页」(或直接按
Alt+Q,或在页面空白处右键 → 「翻译此页(行内翻译)」) - 段落译文直接嵌入原文下方,与原文风格统一;横向排列的菜单、标签等,译文显示在每个单词下方,横排保持不变
- 需要时可用弹窗(或右键菜单)中的「隐藏译文 / 移除译文」一键还原
默认使用 免费 Google 翻译,无需任何配置即可使用。要接入其它服务,见下文。
| 服务 | 类型 | 是否需要申请 | 申请链接 | 说明 |
|---|---|---|---|---|
| Google 翻译 | 翻译网站 API | ❌ 无需 | — | 免费、开箱即用,适合日常阅读 |
| DeepL | 翻译网站 API | ✅ | deepl.com/pro-api | 专业级翻译质量;免费版 50 万字符/月 |
| 百度翻译 | 翻译网站 API | ✅ | fanyi-api.baidu.com | 通用文本翻译;免费 100 万字符/月(需实名认证) |
| 有道翻译(智云) | 翻译网站 API | ✅ | ai.youdao.com | 注册赠送体验额度 |
| AI 大模型 · OpenAI 兼容 | AI API | ✅ | platform.openai.com/api-keys | 可接入 OpenAI / DeepSeek / Moonshot / 智谱 / Ollama 等 |
| AI 大模型 · Anthropic Claude | AI API | ✅ | console.anthropic.com/settings/keys | Claude 系列模型,翻译质量高 |
在扩展的「设置」页面选择服务、填写密钥(均附申请链接),点「保存设置」即可;「测试连接」可立即验证是否配置成功。
设置页的「AI 大模型 · OpenAI 兼容接口」已内置常用服务商,选中服务商后会自动填好接口地址与推荐模型,你只需要粘贴自己的 API Key:
| 服务商 | 接口地址(自动填入) | 推荐模型 | 说明 |
|---|---|---|---|
| DeepSeek | https://api.deepseek.com |
deepseek-flash |
国内直连,性价比高,闲时半价 |
| 智谱 GLM | https://open.bigmodel.cn/api/paas/v4 |
glm-4.7-flash |
有免费模型,适合先试水 |
| 硅基流动 | https://api.siliconflow.cn/v1 |
Qwen/Qwen3-8B |
国内聚合,开源模型便宜 |
| Moonshot Kimi | https://api.moonshot.cn/v1 |
kimi-k3 |
国内直连,单价偏高 |
| 阿里通义千问 | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen-flash、qwen-mt-turbo |
有翻译专用模型 |
| OpenRouter | https://openrouter.ai/api/v1 |
deepseek/deepseek-v4-flash |
一个密钥用几百个模型 |
| OpenAI | https://api.openai.com/v1 |
gpt-5-nano |
国内需自备网络条件 |
| Google Gemini | https://generativelanguage.googleapis.com/v1beta/openai |
gemini-2.5-flash-lite |
有免费额度 |
| Ollama(本地) | http://localhost:11434/v1 |
translategemma:4b |
完全免费、不联网,见下 |
| 其它 | 手动填写 | — | MiniMax、Groq、Together、自建 vLLM 等 |
要点:
- 每种服务商的密钥分开保存:切换服务商不会覆盖之前填好的密钥,来回切也不丢。
- 模型名可以自己改:下拉框只是推荐值(模型 ID 变动很频繁,旧 ID 会直接报 404),点「查看可用模型列表」可直达官方文档核对。
- 接口地址自动识别:手动粘贴一个地址,界面会提示识别成了哪家服务。
- 「测试连接」用真实文本试翻两段,模型名写错、密钥无效、网络不通都会当场报出来并给出提示,不必先保存。
装上 Ollama 后拉一个模型即可,无需任何密钥:
ollama pull translategemma:4b # 翻译专用(Google TranslateGemma,55 语种,约 3.3GB)
ollama pull hy-mt2:7b # 翻译专用(腾讯混元,33 语种,约 4.6GB)
ollama pull qwen3:8b # 通用,中文强然后在设置里选「Ollama(本地)」,接口地址会自动填成 http://localhost:11434/v1。
如果设置页提示连接失败,通常是 Ollama 没启动(命令行执行 ollama serve 即可)。
选择「AI 大模型 · Anthropic Claude」,填入 API Key,默认模型 claude-sonnet-5,也可切换 claude-haiku-4-5(更快更省)或 claude-opus-5(最强)。
每批段落会被编码为 JSON 数组发送给模型,并要求原样返回 {"translations": [...]},以保证数量与顺序对齐;若返回数量与请求不一致,会给出提示,此时在设置中调小「每批最大字符数」(默认 1200)重试即可。
<all_urls>:需要读取页面正文,以及向自定义 AI 接口(任意 Base URL,含本地 Ollama)发送请求storage:保存设置与翻译缓存(仅存于浏览器本地,不同步到云端)
翻译文本只发送给当前选中的翻译服务;API Key 仅保存在浏览器本地(storage.local),仅在请求对应服务时随请求发送,不会上传到任何其它服务器。
- 段落提取(内容脚本):按启发式规则扫描
p / li / blockquote / 标题 / 表格单元格 / 段落型 div等元素——跳过按钮、代码、输入框、悬浮层(position: fixed)、过短(< 4 字符)、超长(> 3000 字符)、纯数字、已是目标语言的文本;父级容器已选中时子元素跳过,避免重复 - 分批翻译(background):按「每批最大字符数」分批(百度按 UTF-8 字节数限 6000 字节);相同文本去重并命中本地缓存时直接复用
- 布局感知嵌入(内容脚本):检测每个元素的布局上下文后确定译文位置——
- 父容器为 flex / grid,或元素为 float / inline-block / 表格单元格(横向项)→ 译文嵌入元素内部末尾,位于单词下方,横向排列不被插入的块级节点打断
- 纯行内元素 → 译文以行内块紧跟原文右侧
- 其余块级段落 → 译文作为独立段落插入原文下方
- 进度 / 取消 / 隐藏:分批嵌入实时更新进度;取消会中止后续批次;隐藏 / 移除一键还原页面
inline-translate/
├── manifest.json # 扩展清单(MV3,版本号单一来源)
├── background.js # 后台脚本:各翻译 API 调用、分批、缓存、重试、测试连接、快捷键
├── content.js # 内容脚本:段落提取、译文块插入、进度 UI
├── content.css # 译文块与页面内 UI 样式
├── providers.js # 共享配置:服务元信息、AI 服务目录、语言映射、默认设置
├── crypto-utils.js # MD5(百度签名)与 SHA-256(有道签名)工具
├── popup.html / popup.js / popup.css # 工具栏弹窗
├── options.html / options.js / options.css # 设置页
├── icons/ # 扩展图标(16/32/48/128)
├── tools/gen_icons.py # 图标生成脚本(纯 Python 标准库)
├── README.md
└── LICENSE
- 模型配置界面重做:新增「服务商」下拉,选中后自动填好接口地址与推荐模型;模型改为下拉建议 + 可自由填写,并直接给出各厂商「查看可用模型列表」的文档链接
- 每个服务商的密钥独立保存:切换服务商不再丢失已填内容(此前切换会清空未保存的密钥)
- 服务商与模型清单更新到 2026-09 现状:DeepSeek(
deepseek-flash)、智谱 GLM(含免费模型)、硅基流动、Kimi K3、通义千问(含翻译专用模型)、OpenRouter、OpenAI、Gemini,以及 Ollama 本地翻译专用模型(TranslateGemma / 混元 MT) - 判定与提示更友好:必填项缺失时高亮对应输入框并说明还差什么;服务卡片直接标注「已配置 / 待配置」;粘贴接口地址会自动识别服务商;测试连接改用真实文本试翻两段,并按错误类型(密钥、模型名、网络)给出对应建议
- 操作逻辑:设置页有未保存改动时会有提示并阻止误关闭;弹窗显示完整的「服务商 · 模型 · 目标语言」,翻译不再立刻关闭弹窗,配置缺失时可直接跳转设置
- 修复:免费 Google 服务此前批量请求会导致第 2 段起译文错位或丢失,现改为逐段请求;更换服务或目标语言后译文不刷新;请求新增 45 秒超时与限流/网络重试(此前会一直转圈);取消标记不再无限累积
- 修复:修正缓存键中混入的不可见控制字符(该文件此前被 git 判定为二进制文件),并移除缓存键中带来隐患的分隔方式
- 修复布局破坏:横向排列的菜单 / 标签(flex / grid / float / inline-block 布局)翻译后不再被打成上下排列——译文改为嵌入每一项内部下方,横排保持不变
- 新增右键菜单:页面空白处右键可「翻译此页」「隐藏 / 显示译文」「移除译文」
- 译文样式重做:去掉粗边框与色块背景,译文直接嵌入、与原文风格统一(跟随原文颜色 / 字号 / 对齐,略淡区分);「译」角标改为悬停显示
- 跳过悬浮层(
position: fixed)元素,避免破坏其定位
- 优化段落识别:跳过导航 / 菜单 / 代码 / 过短文本,外层容器优先,避免父子段落重复翻译
- 深色页面下译文样式适配(半透明背景,浅色 / 深色页面均可正常阅读)
- 译文块支持一键复制单段译文
- 翻译过程实时进度显示 + 取消功能
- DeepL 免费 / 专业端点自动识别(Key 以
:fx结尾自动走免费端点)
- 首个可用版本:行内段落翻译(译文显示在原文下方)、6 类翻译服务接入、弹窗与设置页、翻译缓存、快捷键
Q:为什么有些段落没有翻译? A:以下情况会被有意跳过:字符数 < 4、纯数字 / 符号、超过 3000 字符、位于导航 / 菜单 / 代码块中、原文已是目标语言(如目标为中文时跳过中文段落)。AI 模式下如遇模型返回异常,可在设置中调小「每批最大字符数」后重试。
Q:翻译结果顺序错乱或数量不对? A:AI 模型偶发返回数量与请求不一致时会明确报错;请调小「每批最大字符数」重试。免费 Google 接口偶发限流,稍等片刻重试即可(v1.0.3 起已改为逐段请求,不再出现第 2 段起错位)。
Q:AI 模型报「无法解析为 json」或返回空内容?
A:多数是模型的思考模式在作怪——带思考的模型会先输出推理过程,导致 JSON 解析失败。建议:① 在设置里换成该服务商的 flash / 轻量档模型;② 关闭模型的思考模式(部分服务无法关闭);③ 若无改善,点「测试连接」看具体报错,再核对模型 ID 是否正确。
Q:提示「模型不存在 / 404」?
A:模型 ID 变更很频繁(例如 Kimi 的 moonshot-v1-* 与 kimi-latest 已下线)。请在设置里点「查看可用模型列表」到官方文档核对,或直接点推荐模型气泡填入当前可用的 ID。
Q:本地 Ollama 连不上?
A:先在命令行执行 ollama serve 确认服务已启动,并用 ollama list 确认模型已拉取;接口地址用 http://localhost:11434/v1,API Key 填任意值(如 ollama)即可,Ollama 会忽略它。
Q:为什么重新翻译同一页没有产生新费用? A:译文有本地缓存,相同文本 + 相同服务 + 相同目标语言会直接复用。翻译完成的提示里会写明有多少段来自缓存。
Q:API Key 安全吗?
A:密钥保存在浏览器本地 storage.local(不会跨设备同步),仅在请求对应服务时随请求发送。建议不要在公共电脑上保存密钥。
Q:百度翻译的免费额度是多少? A:通用文本翻译 API 免费额度为 100 万字符/月,需要实名认证后生效。
Q:为什么申请了 <all_urls> 权限?
A:翻译需要读取页面正文;同时自定义 AI 接口的域名无法预先枚举(含本地 Ollama),因此申请全域名权限。
Q:页面内容动态加载(SPA)时不生效? A:v1.0.1 翻译的是点击「翻译此页」时页面已存在的段落。页面新增内容后,再次点击翻译即可;重新翻译不会产生重复译文(原地更新)。
Q:如何修改快捷键?
A:Edge 在 edge://extensions/shortcuts,Chrome 在 chrome://extensions/shortcuts。
Q:与「沉浸式翻译」是什么关系? A:行内译文(译文显示在原文下方)的交互形式参考了「沉浸式翻译」,本扩展为完全独立的实现,无任何代码或资产复用,也与其无关联。