Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

AI 翻译 · 多服务商浏览器翻译扩展

一个基于 Vercel AI SDK 的 Chrome / Edge 浏览器翻译插件(Manifest V3),零依赖运行时、无构建步骤即可加载使用。 支持划词翻译、弹窗翻译、全页翻译,统一适配 OpenAI 兼容 / Anthropic / Google Gemini 三种主流 API 格式,模型列表可从 Base URL 动态拉取。


✨ 功能特性

多服务商支持

  • 三种 API 格式:OpenAI 兼容(覆盖 DeepSeek / OpenAI / Ollama / OpenRouter / 硅基流动 / 智谱 GLM / 通义千问 / Kimi / Groq / Mistral 等 50+ 家)、Anthropic Messages 原生、Google Gemini 原生
  • 内置 12 家服务商预设,也可添加任意自定义 Base URL(含本地 Ollama,支持"无需 Key")
  • 模型列表一键拉取:从各家官方 /models 端点动态获取并选择(Ollama 自动走 /api/tags 兜底)
  • 连通性测试:每项配置可单独测试;API Key 仅保存在本机 chrome.storage.local,不同步浏览器账号

三种翻译方式

方式 说明
划词翻译 选中网页文本即弹译文气泡:可复制、替换原文、关闭;快捷键 Alt + Shift + S
弹窗翻译 点击扩展图标:输入文本 → 翻译,支持语言互换、历史记录(最近 20 条)、服务商快速切换
全页翻译 替换原文,或开启**对照翻译(沉浸)**在原文下方追加译文;支持动态加载内容、自动翻译整页、一键还原原文、失败局部重试
右键菜单 选中文字右键「翻译选中文本」;页面空白处右键「翻译此页面」

可靠性与速度

  • 防拒答提示词:禁止模型输出"我无法翻译…请提供上下文"类元叙述;数字/版本号/代码等非语言片段原样保留;模糊片段按字面直译;输出清洗兜底剥除拒答尾巴
  • 断句与并发:长文本自动分段,并发数 1–512 可调(默认 16),429 限流时并发自动减半自适应
  • 失败处理:连接中断自动重试并显示进度;翻译不完整时右下角提示,支持只重试失败部分
  • 可随时停止:点「✕ 停止」浮窗立即消失、在途请求全部取消、动态翻译一并停止
  • 速度优化:短片段极简提示词(输入 token 降低 ~70%)、翻译结果内存缓存批量落盘、429/5xx 指数退避

界面

  • 极简圆角风格:弹窗单页布局、单列卡片式设置页、页面组件风格统一
  • 深度思考(reasoner 类模型)、对照翻译、自动翻译、翻译风格(默认/正式/口语/技术/文学)、温度、快捷键等偏好自动保存
  • 设置页「数据」区可一键清空翻译缓存 / 历史 / 统计,并支持导出/导入配置(备份与迁移,导出含 API Key 需妥善保管)
  • 设置页显示翻译统计:成功/失败次数、累计字符数与最近使用时间

📦 安装(开发者模式)

扩展目录为仓库下的 deepseek-translator/(核心代码零依赖,直接加载即可用;构建流程仅用于重新打包含 AI SDK 的后台脚本)。

  1. 下载或克隆本仓库到本地
  2. 打开 Chrome(或 Edge)→ 地址栏输入 chrome://extensions
  3. 右上角开启「开发者模式」
  4. 点击「加载已解压的扩展程序」→ 选择本仓库中的 deepseek-translator 文件夹
  5. 点击扩展图标 → 「前往设置」→ 添加服务商并填入 API Key

🚀 快速开始(配置第一个服务商)

  1. 点击工具栏扩展图标,进入 设置
  2. 在「服务商」卡片中点 + 添加,选择预设(如 DeepSeek)或"自定义(OpenAI 兼容)"
  3. 填写 API Key(DeepSeek 可在 https://platform.deepseek.com/api_keys 获取)
  4. 点 获取模型 拉取可用模型并选择 → 点 测试 验证连通性
  5. 回到网页:选中文字即弹译文;点击图标可手动翻译或翻译整页

常用服务商 Base URL 速查

服务商 接口格式 Base URL
DeepSeek OpenAI 兼容 https://api.deepseek.com
OpenAI OpenAI 兼容 https://api.openai.com/v1
Anthropic Claude Anthropic 原生 https://api.anthropic.com/v1
Google Gemini Gemini 原生 https://generativelanguage.googleapis.com/v1beta
Ollama(本地) OpenAI 兼容 http://localhost:11434/v1
硅基流动 / 智谱 GLM / 通义千问 / Kimi / Groq / Mistral OpenAI 兼容 见设置页预设

⌨️ 快捷键

功能 默认 自定义
翻译整个页面 Alt + Shift + T 设置页点击按键 → 按下新组合 → 松开即保存(Esc 取消)
翻译选中文本 Alt + Shift + S 同上

快捷键基于键盘物理位置(e.code)匹配,与输入法/键盘布局无关;输入框内不触发;需页面获得焦点。


🛠 开发指南

目录结构

├── package.json / build.mjs          # 依赖与 Rollup 打包脚本(纯 JS,无子进程)
├── .test-llm.mjs / .test-bundle.mjs  # 单元测试与打包产物端到端测试(mock 服务器)
└── deepseek-translator/              # 扩展根目录
    ├── manifest.json                 # MV3 清单(host_permissions 放开 http(s))
    ├── background/
    │   ├── background.js             # Service Worker:消息路由、会话级取消、内存缓存批量落盘
    │   └── background.bundle.js      # Rollup 打包产物(含 Vercel AI SDK,已提交仓库)
    ├── content/                      # 内容脚本:划词气泡、全页翻译、动态内容、进度胶囊
    ├── popup/                        # 弹窗:翻译 + 服务商切换 + 历史
    ├── options/                      # 设置页:服务商管理 / 翻译偏好 / 快捷键 / 数据清理(自动保存)
    ├── shared/
    │   ├── llm.js                    # AI SDK 多格式适配层(翻译/模型列表/错误映射/输出清洗)
    │   ├── translator.js             # 提示词构建(短/长分档)、长文本分段
    │   ├── storage.js                # 设置/服务商存储(API Key 存本机)、批量缓存
    │   ├── language-detect.js        # 文本是否需要翻译判定(混排规则)
    │   ├── shortcuts.js              # 快捷键解析/匹配(e.code 归一化)
    │   ├── languages.js / constants.js
    ├── icons/  └── _locales/         # 图标与 i18n(zh_CN)

常用命令

npm install --ignore-scripts   # 安装依赖(--ignore-scripts 跳过无需的构建脚本)
npm test                        # 单元测试(mock 服务器覆盖三种格式与错误路径)
npm run build                   # 重新打包 background.bundle.js(改 shared/ 或 background/ 后必须执行)

改代码后记得刷新扩展:chrome://extensions → 扩展卡片上的刷新按钮;改动 shared/ 与 background/ 后需先 npm run build。

技术栈

  • Vercel AI SDK v7(ai + @ai-sdk/openai-compatible / anthropic / google):统一三种 API 格式的对话补全
  • Rollup:打包后台脚本(纯 JS 实现,任何环境可构建)
  • 页面端共享模块通过内容脚本内 import(chrome.runtime.getURL(...)) 动态加载

❓ 常见问题(FAQ)

Q:全页翻译后部分内容仍是原文/提示"翻译不完整"? A:多为服务商限流(429)或连接中断。请按提示点击「重试失败部分」;或到设置页调低并发数(默认 16)。限流会自动让并发减半。

Q:模型输出了"我无法翻译……请提供更多上下文"? A:插件已内置防拒答提示词与输出清洗。若仍出现,多半是旧版本缓存了此前的结果——到设置页「数据」清空翻译缓存后重试。

Q:为什么有些句子不被翻译(如"打开 Settings 页面")? A:新版已修复混排文本过滤:夹带 ≥2 个英文字母的目标语言句子也会翻译。若仍跳过,可能命中 URL/纯数字/已知专有名词白名单(如 API、GitHub 会原样保留)。

Q:可以翻译哪些语言? A:支持 21 种语言的互译(自动检测 / 简繁中文 / 英 / 日 / 韩 / 法 / 德 / 西 / 俄 / 阿 / 葡 / 意 / 荷 / 波 / 泰 / 越 / 印尼 / 马来 / 印地 / 土)。

Q:为什么第一次翻译慢,第二次快? A:翻译结果本地缓存 1 小时(上限 200 条);另可适当调高并发数提速。可在设置页「数据」区清空缓存。

Q:Ollama / 本地模型如何接入? A:预设"Ollama(本地)"无需 Key,确认 Ollama 已开启 OpenAI 兼容服务(OLLAMA_HOST 默认 11434)后直接测试即可。


🔒 隐私与安全

  • 各家 API Key 仅保存在本机 chrome.storage.local,不会同步到浏览器账号服务器
  • 翻译文本仅发送到你所选服务商的 Base URL
  • 主机权限说明:为支持任意自定义 Base URL(含本地 Ollama)与全页翻译,清单申请了 http://*/* 与 https://*/*;内容脚本注入全部网页。网络请求仅在你主动翻译(或点击获取模型/测试)时发起
  • 翻译结果本地缓存 1 小时(上限 200 条)、历史记录本地保存 20 条;设置页「数据」区可随时清空
  • 深度思考会向模型透传 thinking 参数,请仅对支持的服务商/模型开启
  • 后台仅处理来自本扩展自身的消息(sender 校验)

📜 版本历史

  • v1.6.0:恢复并补齐对照翻译 / 自动翻译(设置页开关);新增右键菜单翻译、划词气泡替换原文、配置导出/导入、翻译统计;修复清空缓存未清后台内存缓存的问题
  • v1.5.0:质量加固——历史写入 await 修复弹窗竞态;缓存空闲防丢落盘;后台消息 sender 校验;设置页新增清空缓存/历史;移除未暴露的沉浸对照与自动翻译(死代码清理);版本号三处对齐
  • v1.4.x:局部重试、右下角进度胶囊、翻译不完整提示、五项提速(限流自适应/合并重试/分档提示词/缓存批量写/并发上限 512)、快捷键自定义重构、停止翻译立即生效、提示词多语言适配
  • v1.3.x:多服务商支持(Vercel AI SDK)、模型列表拉取、极简圆角 UI 重写、防拒答输出清洗
  • v1.2.x:设置合并保存、API Key 迁移 local、模型感知请求体
  • v1.0–1.1:DeepSeek 单服务商版本

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages