更新日期:2026-08-28 适用于 TextDuet
0.2.0候选版本,以及发布后对应的 Chrome Web Store、GitHub Release 和源码构建包。
TextDuet 是一款本地优先的 Chrome 双语网页阅读扩展。你选择模型服务商并提供自己的 API Key。TextDuet 不运营翻译中转服务、账号服务、遥测服务、云同步或自动上传问题的服务。
简要说明
你主动启动翻译后,符合规则的可见网页文本会从 Chrome 直接发送到 TextDuet 中配置的模型服务商。TextDuet 运营的服务器或项目维护者不会接收或转发这些文本。服务商可能按自身条款留存、处理请求并收取费用。翻译机密、个人或受监管内容前,请先阅读服务商条款。
TextDuet 处理的数据
网页内容
用户操作后,Translator Script 会在当前 HTTP 或 HTTPS 页面识别可见且符合规则的阅读文本。请求可能包含原文、源语言、目标语言和翻译指令。为判断可读性,请求还可能包含标准化原文字色、有效背景色和用户本地颜色偏好。这些数据随模型请求直接发送给所选服务商,不会发送到 TextDuet 服务器。
翻译运行期间,新加载且符合规则的内容可能在后续批次发送,直到用户停止、离开页面或页面会话结束。表单、可编辑字段、隐藏内容、代码和 TextDuet 自己插入的节点会被提取规则排除。
Provider 配置与 API Key
服务商 Origin、模型名称、语言偏好、显示设置、价格和预算偏好保存在扩展本地存储中。已保存的原始 API Key 只由 Service Worker 读取。可信扩展页面只会在用户正在输入时短暂持有 Key,并通过经过校验的消息提交;它不会获得已保存的 Key。Key 不会出现在公共设置、网页或 Translator Script 中。
TextDuet 支持两种密钥生命周期:
- 仅当前会话: Key 保存在受限的
storage.session中,浏览器会话结束时清除。 - 本地保险箱: 用户明确选择持久化时,Key 保存在版本化的 AES-GCM 加密保险箱中。密码本身不会保存;只有派生的解锁材料在当前浏览器会话中保存在受限会话存储里。浏览器重启后保险箱会锁定,需要再次解锁。
Options 提供锁定、删除和清空保险箱的操作。旧版明文 Key 槽位和按 Origin 的 Key 映射会在能够加密时执行一次迁移;无法安全迁移的数据会被删除,并要求用户重新输入。即使启用保险箱,浏览器扩展存储也不等同于操作系统密码管理器。
本地译文缓存
可选的持久译文缓存由 Service Worker 管理。在 0.2.0 版本线中,缓存使用同一保险箱加密,只有保险箱解锁时可用。缓存保存内容寻址记录、译文、语言/服务商/模型上下文和时间戳,不保存 API Key 或 URL。默认保留 30 天、上限 50 MiB,并执行过期和最近最少使用淘汰。用户可在 Options 清空缓存。
保险箱锁定时,持久缓存读取和写入都会停用。当前页面仍可在本次运行中复用仅存在内存里的译文。缓存命中不会发起服务商请求,也不会新增用量账本记录。
用量账本与诊断
本地用量账本记录本地日期、服务商、模型、服务商返回的输入/输出 Token、币种和预算提醒所需字段。账本按文档规定的滚动历史(当前为 60 个本地日)保留,不包含网页正文、URL、API Key 或请求体。预算金额是本地估算,不是服务商账单。
Options 可以在本地生成兼容性诊断预览。默认只包含脱敏主机名、扩展/Chrome 版本、标准化状态码和计数。页面路径默认排除,只有用户单独勾选同意后才加入,并会去除查询参数和片段。诊断由用户预览和下载,不会自动上传;公开提交前应再次检查。
TextDuet 不收集的数据
TextDuet 当前不包含:
- 账号注册、广告、分析 SDK、遥测或云同步;
- 项目运营的翻译后端或自动上传浏览历史;
- 自动上传 Issue、截图、诊断包或网页内容;
- 项目方获取用户 API Key、服务商账号、网页历史、表单值,或直接服务商请求之后的网页译文。
Chrome 和所选服务商可能依照各自政策处理数据。卸载 TextDuet 后,Chrome 会按其行为移除扩展存储;服务商已经收到的数据由服务商政策约束。
第三方服务商处理
所选服务商会接收生成译文所需的文本和请求元数据。TextDuet 无法控制服务商的留存、训练、地域处理、可用性或计费政策。
部分辅助请求只有在用户主动操作时才会发生:
- OpenRouter 模型价格: TextDuet 可能通过 Service Worker 请求公开的
https://openrouter.ai/api/v1/models目录。请求不包含用户 API Key、模型名、网页正文或本地用量;匹配在本机完成。 - DeepSeek 余额: 用户配置官方 DeepSeek Origin 并点击余额操作后,已保存的 DeepSeek API Key 会发送到官方
/user/balance接口。充值余额和赠送余额只显示在当前 Options 页面,不写入存储,也不会换算为 Token 用量。自定义端点不能使用此操作。
这些调用不是 TextDuet 的账号或账单服务。服务商条款、凭据、限额和费用由用户自行负责。
用户控制
用户决定何时开始或停止翻译、使用哪个服务商和模型,以及是否授予配置的 HTTPS Origin 权限。Options 提供以下控制:
- 选择会话级 Key,或使用密码解锁的本地保险箱;
- 锁定、删除或清空保险箱及其中的加密持久记录;
- 清空持久译文缓存和本地用量账本;
- 在 Chrome 扩展设置中撤销服务商 Origin 权限。
切换显示方式、锁定保险箱或清理本地数据,不会要求服务商删除已接收的数据。服务商侧删除和账单问题请联系对应服务商。
安全边界
Service Worker 是唯一读取密钥和构造服务商请求的业务上下文。Translator 只接收经过校验的块 ID、原文、语言设置和译文,不访问 Chrome Storage。运行时消息和模型响应经过 Schema 校验,译文使用纯文本插入,不作为 HTML 或可执行代码处理。
任何软件都无法保证绝对安全。请勿在 Issue 或 Discussion 中公开 Key、密码、认证头、私密 URL、私密正文或敏感截图。疑似漏洞请通过 GitHub Private Vulnerability Reporting 或 frealcat@gmail.com 私密报告。
Chrome Web Store 披露
即使数据只在本地处理或直接发送给用户选择的服务商,网页内容、翻译相关浏览活动和认证信息仍属于 Chrome Web Store 要求准确说明的用户数据类别。商店 Listing 与本政策会在发布前一起复核。
公开政策固定链接:
- English:https://frealcat.github.io/TextDuet/privacy/
- 简体中文:https://frealcat.github.io/TextDuet/zh-CN/privacy/
数据处理发生实质变化时,受影响的构建发布前会同步更新本政策和商店披露。隐私与安全联系邮箱为 frealcat@gmail.com。