划词收藏
选中任意网页上的单词或句子,浮出“译”按钮;也可以右键菜单或 Alt+Shift+E。
每一件都在本机完成。外网只在你真的需要新数据时才被访问一次,结果立刻落库。
选中任意网页上的单词或句子,浮出“译”按钮;也可以右键菜单或 Alt+Shift+E。
按“规范化原文 + 源语言”判重。同一个词从别的网站再收藏,不新增词条,只更新译文和最近来源。
IPA 音标、中文词性、音节拆分和主重音。Datamuse 与 Dictionary API 并发取、互为回退,慢的那个不会拖住整张卡。
大模型给 1–3 个 emoji 加一句不超过 36 字的中文联想,优先拆词根词缀。同一个单词只花一次 token。
每个词条一条独立对话。历史超预算时自动摘要旧消息,只把摘要和最近几轮发出去,并显示这轮的 token 消耗。
视频页侧边出现“学词”,读公开英文字幕按首次出现排词,点词直接跳转重播;详情页还能一键在 YouTube 搜真实视频。
启动后它会自动在 http://127.0.0.1:3789 开一个只绑回环地址的后台服务。设置页的“后台服务”卡片能看到监听状态、扩展要填的地址和请求计数,端口被占用时可以在这里改。
构建一次,然后在 chrome://extensions 打开开发者模式,“加载已解压的扩展程序”选择 apps/extension/dist。进扩展设置点“测试连接并保存”,确认地址是 3789。
pnpm install
pnpm build # 产物在 apps/extension/dist
在 App 设置页填 OpenAI 兼容的 Base URL、模型名和 API Key(默认走阿里百炼兼容地址 + qwen-plus)。Key 存在系统钥匙串里,不是明文写进数据库。扩展的翻译和对话共用这一把。
在任意网页划词收藏;回到 App 里按掌握度分桶复习(不知道 / 1 个月 / 2 个月 / 3 个月前)。默认隐藏中文释义,点一下才揭晓——先想,再看答案。
业务逻辑收敛在一个平台无关的 Rust 核心里,SwiftUI 和 C# 通过同一套窄 C ABI 调它。Chrome 扩展连的 HTTP 服务也由核心自己实现,只开放扩展真正需要的五个端点。
GET /api/healthPOST /api/translateGET /api/entries/statusPUT /api/entriesPOST /api/video-learning/save-words其余能力都在 App 进程内直接调核心,不暴露成 HTTP。服务只绑回环地址,填 0.0.0.0 会被核心直接拒绝。
音标、词性、音节、重音和助记都会写进本机 SQLite 数据库,词典那部分有效期一年。库里已有的单词不会再请求外部服务,断网也能复习。
只有“上游正常回答、但词典里确实没有这个词”才记一条 10 分钟的 miss。超时、5xx、代理拦截页都算“服务没答上”,不写进数据库——否则一次网络抖动会把单词长期钉在“没有拼读信息”上。
没有账号、没有云同步、没有遥测。词库就是一个你能用 sqlite3 打开的文件。
保存原文、译文、页面标题、规范化 URL、所在句、首次与更新时间。不保存完整网页正文。
后台服务只监听 127.0.0.1 / ::1,并限制浏览器 Origin;App 退出即释放端口。
API Key 存在系统钥匙串(Windows 上是凭据管理器),不写进数据库明文,接口也不会回显它。
默认数据库位置:~/Library/Application Support/EnglishGarden/learn-english.sqlite
arm64-apple-ios,缺真机验证扩展的按钮挂在页面自己身上,遇到强隔离的站点、Shadow DOM 或页面自己拦截了选区事件时可能不出现。可以先试右键菜单“翻译选中内容”,或用快捷键 Alt+Shift+E。
说明地址填错了:扩展要连的是 App 后台服务的 3789。旧的网页版端口 5173 已经随 web 端一起移除,填它必然失败。
能。已存过的单词、音标、助记和全部词条都在本机 SQLite 里,复习、朗读、跳转都不依赖网络。只有收藏新词、翻译新词、查新单词的拼读才需要外网。
翻译有回退:支持 Translator API 的 Chrome 可以先用浏览器内置翻译。但词性、音标之外的中文释义、助记联想和对话需要你自己的一把兼容密钥。
那些都要配额和密钥,还会把访问记录留在第三方。现在详情页的“去真实视频里听”直接用系统浏览器打开 YouTube 搜索结果,登录态和地区限制都交回 YouTube 自己;配图改成本地大模型生成的 emoji 助记,结果存进本机数据库。