一个 Manifest V3 插件,配套一个自建翻译中转代理。扩展端不含任何真实 API 密钥,密钥只保存在自己的服务器上。
- 网页悬浮入口:可选“自动显示”或“点击工具栏后显示”;可拖动并按域名记忆位置。悬浮标不自动翻译,点击展开面板后才读取选区,点击「翻译」后才请求服务。
- 侧边栏工作台:支持长文本翻译、复制、整页双语翻译、OCR 与翻译历史。
- 整页双语翻译:正文按批翻译,以原文 + 译文形式插入,可一键还原。
- 图片 OCR 翻译:上传图片或右键网页图片,识别后翻译文字。
- 外观设置:浅色、深色、跟随系统三种 Apple 风格毛玻璃主题。
- 桌面端(Tauri):主窗口完整工作台 + 始终置顶的快捷悬浮窗;复制文字后按
Alt+Shift+T预填,仍需点击「翻译」才请求服务。快捷键、主题和代理配置均可本地修改。
Edge 扩展(无真实 API 密钥,只有代理地址 + 访问令牌)
├─ 网页悬浮入口 / 侧边栏工作台
└─ HTTPS
▼
https://kkpg.duckdns.org
▼
Caddy ── 127.0.0.1:8080 ── FastAPI 翻译代理
├─ 访问令牌校验
├─ Redis 缓存与限流
└─ 火山方舟 doubao-seed-translation
| 文件 | 作用 |
|---|---|
manifest.json |
MV3 清单;自动加载无副作用的悬浮入口,不会自动翻译页面 |
background.js |
Service worker:转发翻译请求、按需注入整页翻译脚本 |
floating.js |
网页内悬浮入口:拖动、选区预填、快捷翻译、主题和显示方式设置 |
sidepanel.html / sidepanel.js |
侧边栏完整工作台 |
content.js |
整页双语翻译脚本,只会在用户点击「翻译整页」时按需注入 |
content-ocr.js |
网页图片 OCR 遮罩 |
content-utils.js |
可共享的纯文本处理工具函数 |
desktop-main.html / src/main.ts |
Tauri 桌面主窗口工作台 |
float.html / src/float.ts |
可拖动、始终置顶的桌面快捷悬浮窗 |
src-tauri/src/main.rs |
Tauri 原生命令、全局快捷键、托盘、剪贴板和代理请求 |
server/main.py |
FastAPI 翻译代理(密钥、缓存、限流与批量翻译) |
- 打开
edge://extensions,开启开发人员模式。 - 选择“加载解压缩的扩展”,选中本文件夹。
- 默认“手动显示”:点击浏览器工具栏扩展图标,当前标签页会显示悬浮入口并打开侧边栏。
- 悬浮入口设置中可切换“自动显示”;不会自动读取、提取或翻译网页文本。
- 选中文字后点击悬浮标,选区会预填入面板;点击「翻译」才发送请求。
桌面端不随系统启动。关闭主窗口会退出应用;悬浮窗只会在托盘点击或快捷键触发后出现。
- 安装 Rust 工具链和 Windows C++ Build Tools:
完成后关闭并重新打开终端,确认:
winget install Rustlang.Rustup
Windows 11 通常已自带 WebView2 Runtime;其他系统请先安装 WebView2 Evergreen Runtime。rustc --version cargo --version
- 安装前端依赖:
npm install
- 本地调试桌面端:
npm run tauri:dev
- 打包本地安装程序:
安装包会生成在
npm run tauri:build
src-tauri/target/release/bundle/。
桌面快捷键默认 Alt+Shift+T。它只在快捷键按下时读取一次系统剪贴板,预填悬浮窗,不会持续监听剪贴板或自动发送翻译请求。
- 上传服务端文件到 VPS:
scp server\main.py server\requirements.txt server\deploy-vps.sh <别名>:/opt/translate-proxy/
- 部署 Redis、venv 和 systemd:
ssh <别名> "bash /opt/translate-proxy/deploy-vps.sh"
- 配置 Caddy 与 DuckDNS HTTPS:
ssh <别名> "bash /opt/translate-proxy/setup-caddy.sh <你的域名>.duckdns.org <DuckDNS令牌>"
- 后端健康检查:
https://kkpg.duckdns.org/healthz - 代理日志:
ssh <别名> "journalctl -u translate-proxy -n 80 --no-pager" - 前端测试:
npm test - 桌面前端构建:
npm run build - Rust/Tauri 编译检查:
cargo check --manifest-path src-tauri/Cargo.toml - 服务端测试:
ssh <别名> "cd /opt/translate-proxy && ./venv/bin/python -m pytest test_main.py -v"
- 真实 API Key 仅存在服务器
.env。 - 悬浮入口不会监听键盘输入、不会持续读取剪贴板、不会在用户点击翻译前向服务器发送网页文字。
- 桌面端只在用户按下全局快捷键时读取一次剪贴板;预填文本不会自动上传或翻译。
- 个人分发扩展仍会暴露代理访问令牌;公开分发前应改为每人独立令牌。