Skip to content

Repository files navigation

行内翻译 Inline Translate

版本 v1.00.2 | 适用于 Microsoft Edge(Chromium 内核)与 Google Chrome 及所有 Chromium 系浏览器

一款浏览器翻译扩展:不替换、不覆盖原文,而是把译文插入到每一段文字的下方,方便逐段对照阅读——交互形式参考了「沉浸式翻译」的行内译文设计,本扩展为完全独立的实现。

同时支持两类翻译服务:

  1. 翻译网站 API:Google 翻译(免费)、DeepL、百度翻译、有道翻译(智云),设置页内附申请链接
  2. AI 大模型 API:OpenAI 兼容接口(OpenAI / DeepSeek / Moonshot Kimi / 智谱 GLM / Ollama 本地部署等)与 Anthropic Claude

✨ 特性

  • 段落级行内译文:译文显示在原文段落下方,原文完整保留
  • 布局感知嵌入:译文位置随原文空间分布自适应,不破坏原网页布局——
    • 段落状 → 译文直接嵌入为下方独立段落,与原文风格统一
    • 横向排列(菜单 / 标签 / 分栏等)→ 译文位于每个单词 / 项的下方,横排保持不变
    • 行内元素 → 译文以行内块跟在原文右侧
  • 右键菜单:在网页空白处右键,可直接「翻译此页」「隐藏 / 显示译文」「移除译文」
  • 多服务可选:免费 Google 翻译开箱即用,或接入 DeepL / 百度 / 有道 / 各类 AI 大模型
  • 智能段落识别:自动跳过按钮、代码块、过短文本、悬浮层、已是目标语言的段落;外层容器优先,避免父子段落重复翻译
  • 批量请求 + 缓存:大段文本按字符数分批请求(可配置),相同文本不重复请求
  • 进度与取消:翻译过程中右上角实时显示进度,可随时取消
  • 一键隐藏 / 移除:译文可整体隐藏或移除,页面瞬间还原
  • 单段复制:译文悬停可见「译」角标,点击复制该段译文
  • 快捷键Alt+Q 快速翻译当前页(可在 edge://extensions/shortcuts 修改)
  • 深浅色页面通用:译文跟随原文颜色与字号(略淡),无需专门适配

📦 安装(Edge)

  1. 将本项目文件夹下载 / 解压到本地(保持目录结构完整)
  2. Edge 地址栏输入 edge://extensions 并回车
  3. 打开页面左下角的 「开发人员模式」
  4. 点击 「加载解压缩的扩展」,选择本扩展所在文件夹(inline-translate
  5. 点击工具栏上的拼图图标,把「行内翻译」固定到工具栏

Chrome 用户:进入 chrome://extensions,同样开启「开发者模式」后加载即可。


🚀 快速开始

  1. 打开任意网页(如一篇英文文章)
  2. 点击工具栏的「行内翻译」图标 → 「翻译此页」(或直接按 Alt+Q,或在页面空白处右键 → 「翻译此页(行内翻译)」
  3. 段落译文直接嵌入原文下方,与原文风格统一;横向排列的菜单、标签等,译文显示在每个单词下方,横排保持不变
  4. 需要时可用弹窗(或右键菜单)中的「隐藏译文 / 移除译文」一键还原

默认使用 免费 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 兼容接口

设置页内置常用服务预设,一键填入 Base URL 与模型:

服务 Base URL 推荐模型 申请 / 安装
OpenAI https://api.openai.com/v1 gpt-4o-mini platform.openai.com/api-keys
DeepSeek https://api.deepseek.com deepseek-chat platform.deepseek.com/api_keys
Moonshot Kimi https://api.moonshot.cn/v1 kimi-latest platform.moonshot.cn
智谱 GLM https://open.bigmodel.cn/api/paas/v4 glm-4-flash open.bigmodel.cn
Ollama 本地 http://localhost:11434/v1 llama3.1 本地 ollama pull llama3.1 即可

任何兼容 OpenAI /chat/completions 接口的服务都可选择「手动填写」接入自定义 Base URL。

不支持 response_format: json_object 的服务(如部分 Ollama 模型)会自动降级重试,无需手动干预。

Anthropic Claude

选择「AI 大模型 · Anthropic Claude」,填入 API Key,默认模型 claude-haiku-4-5-20251001(速度快、成本低),也可切换 claude-sonnet-5 等更高阶模型。

工作原理(AI 模式)

每批段落会被编码为 JSON 数组发送给模型,并要求原样返回 {"translations": [...]},以保证数量与顺序对齐;若返回数量与请求不一致,会给出提示,此时在设置中调小「每批最大字符数」(默认 1200)重试即可。


🔐 权限说明

  • <all_urls>:需要读取页面正文,以及向自定义 AI 接口(任意 Base URL,含本地 Ollama)发送请求
  • storage:保存设置与翻译缓存(仅存于浏览器本地,不同步到云端)

翻译文本只发送给当前选中的翻译服务;API Key 仅保存在浏览器本地(storage.local),仅在请求对应服务时随请求发送,不会上传到任何其它服务器。


⚙️ 工作原理

  1. 段落提取(内容脚本):按启发式规则扫描 p / li / blockquote / 标题 / 表格单元格 / 段落型 div 等元素——跳过按钮、代码、输入框、悬浮层(position: fixed)、过短(< 4 字符)、超长(> 3000 字符)、纯数字、已是目标语言的文本;父级容器已选中时子元素跳过,避免重复
  2. 分批翻译(background):按「每批最大字符数」分批(百度按 UTF-8 字节数限 6000 字节);相同文本去重并命中本地缓存时直接复用
  3. 布局感知嵌入(内容脚本):检测每个元素的布局上下文后确定译文位置——
    • 父容器为 flex / grid,或元素为 float / inline-block / 表格单元格(横向项)→ 译文嵌入元素内部末尾,位于单词下方,横向排列不被插入的块级节点打断
    • 纯行内元素 → 译文以行内块紧跟原文右侧
    • 其余块级段落 → 译文作为独立段落插入原文下方
  4. 进度 / 取消 / 隐藏:分批嵌入实时更新进度;取消会中止后续批次;隐藏 / 移除一键还原页面

📁 目录结构

inline-translate/
├── manifest.json        # 扩展清单(MV3,版本 1.00.1)
├── background.js        # 后台脚本:各翻译 API 调用、分批、缓存、测试连接、快捷键
├── content.js           # 内容脚本:段落提取、译文块插入、进度 UI
├── content.css          # 译文块与页面内 UI 样式
├── providers.js         # 共享配置:服务元信息(含申请链接)、语言映射、默认设置
├── 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

📝 版本记录

v1.00.2(2026-08-03)

  • 修复布局破坏:横向排列的菜单 / 标签(flex / grid / float / inline-block 布局)翻译后不再被打成上下排列——译文改为嵌入每一项内部下方,横排保持不变
  • 新增右键菜单:页面空白处右键可「翻译此页」「隐藏 / 显示译文」「移除译文」
  • 译文样式重做:去掉粗边框与色块背景,译文直接嵌入、与原文风格统一(跟随原文颜色 / 字号 / 对齐,略淡区分);「译」角标改为悬停显示
  • 跳过悬浮层(position: fixed)元素,避免破坏其定位

v1.00.1(2026-08-03)

  • 优化段落识别:跳过导航 / 菜单 / 代码 / 过短文本,外层容器优先,避免父子段落重复翻译
  • 深色页面下译文样式适配(半透明背景,浅色 / 深色页面均可正常阅读)
  • 译文块支持一键复制单段译文
  • 翻译过程实时进度显示 + 取消功能
  • DeepL 免费 / 专业端点自动识别(Key 以 :fx 结尾自动走免费端点)

v1.00.0(2026-08-03)

  • 首个可用版本:行内段落翻译(译文显示在原文下方)、6 类翻译服务接入、弹窗与设置页、翻译缓存、快捷键

❓ 常见问题(FAQ)

Q:为什么有些段落没有翻译? A:以下情况会被有意跳过:字符数 < 4、纯数字 / 符号、超过 3000 字符、位于导航 / 菜单 / 代码块中、原文已是目标语言(如目标为中文时跳过中文段落)。AI 模式下如遇模型返回异常,可在设置中调小「每批最大字符数」后重试。

Q:翻译结果顺序错乱或数量不对? A:AI 模型偶发返回数量与请求不一致时会明确报错;请调小「每批最大字符数」重试。免费 Google 接口偶发限流,稍等片刻重试即可。

Q:API Key 安全吗? A:密钥保存在浏览器本地 storage.local(不会跨设备同步),仅在请求对应服务时随请求发送。建议不要在公共电脑上保存密钥。

Q:百度翻译的免费额度是多少? A:通用文本翻译 API 免费额度为 100 万字符/月,需要实名认证后生效。

Q:为什么申请了 <all_urls> 权限? A:翻译需要读取页面正文;同时自定义 AI 接口的域名无法预先枚举(含本地 Ollama),因此申请全域名权限。

Q:页面内容动态加载(SPA)时不生效? A:v1.00.1 翻译的是点击「翻译此页」时页面已存在的段落。页面新增内容后,再次点击翻译即可;重新翻译不会产生重复译文(原地更新)。

Q:如何修改快捷键? A:Edge 在 edge://extensions/shortcuts,Chrome 在 chrome://extensions/shortcuts

Q:与「沉浸式翻译」是什么关系? A:行内译文(译文显示在原文下方)的交互形式参考了「沉浸式翻译」,本扩展为完全独立的实现,无任何代码或资产复用,也与其无关联。


📄 License

MIT

About

Inline Translate for Edge, Chrome 行间翻译,可自定义api

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages