为 TED 演讲稿与字幕、TED 博客文章添加第二语言翻译、双语阅读、点击查词和 AI 总结的 Chrome Manifest V3 扩展。
- 优先直接读取 TED 已有的目标语言官方译稿与字幕;仅在官方版本不存在时调用第三方翻译服务或大模型。
- 演讲稿支持“仅译文”和“原文 + 译文”两种模式。
- 根据 TED 演讲稿自带的时间戳显示双语字幕或仅译文字幕。
- 点击演讲稿或扩展字幕中的单词,查询当前目标语言释义。
- 点击演讲稿时间戳跳转到对应播放位置。
- 长演讲按可见区域分批翻译,并在本机缓存结果,减少请求与费用。
- 支持播放器全屏;不含原生
<video>的播放器会回退到监听页面已有字幕。 - TED 博客文章(blog.ted.com、ideas.ted.com)在每段原文后自动插入第二语言翻译,支持“原文 + 译文”和“仅译文”两种模式。
- 博客文章与演讲一样,可点击右下角
T译按钮打开 AI 总结面板,流式生成并缓存总结结果。
| 服务 | 配置 |
|---|---|
| MyMemory | 默认可直接使用;可选填写联系邮箱 |
| LibreTranslate | 自定义服务地址,可选 API 密钥 |
| OpenAI 兼容接口 | 自定义地址、模型和 Bearer API 密钥,调用 /chat/completions |
| Anthropic | 自定义地址、模型和 API 密钥,调用 /v1/messages |
自定义服务地址在保存或测试时才会向 Chrome 申请该域名的访问权限。API 密钥保存在本机扩展存储中,并限制内容脚本直接读取;扩展存储并非操作系统级加密保险库,不建议在共享浏览器配置中保存敏感密钥。
- 打开 Chrome,进入
chrome://extensions/。 - 打开右上角“开发者模式”。
- 点击“加载已解压的扩展程序”。
- 选择本项目根目录。
- 打开
https://www.ted.com/首页、任意https://www.ted.com/talks/...,或https://blog.ted.com/...、https://ideas.ted.com/...页面。
更新代码后,在扩展管理页点击“重新加载”,然后刷新 TED 页面。
- 点击扩展图标,在快捷弹窗中选择目标语言和阅读模式。
- 点击“在当前 TED 页面打开翻译稿”,或点击 TED 首页、演讲页与博客页右下角的
T译按钮。 - 需要自定义接口时,进入“翻译服务与全部设置”,填写地址、模型和密钥。
- 点击“测试当前服务”,确认
Hello world能得到译文。 - 播放演讲时,扩展会按当前设置显示字幕;点击字幕或演讲稿中的单词可查词。
- 打开任意 TED 博客文章页,正文每段原文后会自动插入第二语言译文(可在“翻译服务与全部设置 → 阅读体验”中关闭“博客文章翻译”)。
- 在设置页的“演讲稿模式”中选择“原文后添加译文”或“用译文替换原文”,博客段落会同步生效。
- 点击页面右下角
T译按钮,在面板中选择总结语言并点击“开始总结”,即可像演讲页面一样生成 AI 文章总结(需使用 OpenAI 兼容接口)。
manifest.json
src/
├── background/
│ ├── providers.js # 翻译服务适配器
│ └── service-worker.js # 请求、缓存、消息和密钥隔离
├── content/
│ ├── content-script.js # TED 数据解析、演讲稿、字幕、博客段落翻译和 AI 总结
│ └── content-style.css
├── options/ # 完整设置与服务测试
├── popup/ # 快捷设置与打开演讲稿
└── shared/config.js # 配置模型和消息常量
扩展优先读取 TED 页面内嵌的 transcriptData,其中包含段落、句子和毫秒时间戳。扩展会使用目标语言请求同一演讲的 view=transcript 页面,并核验 TED 实际返回的语言;目标语言官方译稿存在时直接使用,不存在或请求失败时才调用配置的翻译服务。原文仍不可用时,再从已经渲染的演讲稿 DOM 中提取文本。
字幕优先与页面原生 <video> 时间同步。对于第三方 iframe 播放器,扩展会尝试观察页面字幕文本;不同 TED 播放器或未来页面改版可能影响字幕同步,但不会影响使用独立翻译演讲稿。
博客翻译解析文章正文容器(blog.ted.com 的 .entry-content、ideas.ted.com 的 .article-content)内的段落,按滚动可见区域分批翻译并在段落后插入译文;译文单词同样支持点击查词。AI 总结与演讲页面共用同一流式接口、语言选项和缓存。