SelectTranslate 是一款 macOS 划词翻译工具,通过 Accessibility API 无损读取选区文本,调用 Ollama Cloud 大语言模型(联网搜索增强)生成翻译和多术语解释,结果以原生浮动面板呈现在光标旁。核心设计原则:不修改剪贴板、不切换窗口、不抢焦点。
读英文论文/文档时,经常遇到不熟悉的专业术语:
- "world model" 到底是什么?跟 "world knowledge" 有什么区别?
- "reinforcement learning from human feedback" 怎么翻译?
- "diffusion transformer" 是什么架构?
传统做法:切到浏览器 → 搜索 → 看几个结果 → 回来继续读。打断思路。
SelectTranslate:选中文字 → 按 ⌥⇧T → 光标旁弹出翻译和解释 → 点击任意位置关闭。
整个过程不超过 2 秒,不离开当前窗口。
选中 reinforcement learning from human feedback,按 ⌥⇧T:
┌─────────────────────────────────────────┐
│ reinforcement learning from... ✕ │
│─────────────────────────────────────────│
│ 基于人类反馈的强化学习 │
│ │
│ • RLHF — 一种训练方法,通过人类偏好数据 │
│ 对模型进行微调,使输出更符合人类期望 │
│ • reinforcement learning — 智能体通过 │
│ 与环境交互获得奖励来学习策略的机器学习 │
│ 范式 │
│ • human feedback — 人类对模型输出的质量 │
│ 评价,作为奖励信号指导模型优化 │
└─────────────────────────────────────────┘
- 一键翻译 — 选中文字按
⌥⇧T,翻译 + 解释同时出现 - 多术语解析 — 自动识别并解释选区内所有专业术语和关键概念
- 联网搜索 — 遇到专业术语自动搜索,给出准确释义而非字面翻译
- 动态面板 — 面板高度自动适应内容长度,长文本不再被截断
- 不干扰工作 — 不修改剪贴板、不切换窗口、不抢焦点,点击任意位置即关闭
- 任意应用通用 — 浏览器、PDF 阅读器、终端、VS Code、Obsidian 等均可使用
- 淡入淡出 — 面板带动画效果,出现在光标旁边,不遮挡选中的文字
- 基于 Ollama Cloud — 使用
deepseek-v4-flash模型,响应快,质量高
# 1. 安装(只需一次)
pip install git+https://github.com/wd041216-bit/select-translate.git
# 2. 注入 API Key(只需一次,永久保存)
select-translate --key 你的API_KEY
# 3. 以后随时一行启动
select-translateAPI Key 获取:https://ollama.com/settings/keys (免费注册)
或从源码安装
git clone https://github.com/wd041216-bit/select-translate.git
cd select-translate
pip install -e .
# 注入 key
select-translate --key 你的API_KEY
# 启动
select-translate- 在任意应用中选中文字
- 按 ⌥⇧T(Option + Shift + T)
- 光标旁弹出翻译窗口
- 点击任意位置或按 Esc 关闭
点击菜单栏 🌐 图标 → 勾选 "Auto-detect Selection",选中文字后自动弹出翻译。
需要授予终端辅助功能权限(仅首次):
- 系统设置 → 隐私与安全性 → 辅助功能
- 添加你使用的终端应用(Terminal / iTerm2 / Warp 等)
选中文字 → Accessibility API 读取选区(不修改剪贴板)
↓
联网搜索术语上下文
↓
搜索结果拼入 prompt → deepseek-v4-flash (no-think)
↓
提取翻译 + 所有关键术语解释
↓
动态调整面板高度 → 光标旁弹出结果
不修改剪贴板:优先通过 macOS Accessibility API 直接读取选区文本(AXSelectedText → AXSelectedTextRange + AXStringForRange 两级降级),仅在少数不支持的 app(如某些终端)才使用剪贴板方案。
select_translate/
├── __init__.py # 包入口
├── __main__.py # python -m select_translate
├── app.py # 主应用(菜单栏、全局快捷键、选区捕获)
├── panel.py # 原生浮动面板(NSPanel、淡入淡出、点击外部关闭)
├── translator.py # Ollama 翻译引擎(联网搜索 + 多术语解析)
└── config.py # YAML 配置管理
| 应用类型 | AXSelectedText | AXSelectedTextRange | 剪贴板降级 |
|---|---|---|---|
| Safari / Chrome / Firefox | ✅ | ✅ | — |
| Preview / PDF Expert | ✅ | ✅ | — |
| VS Code / Cursor | ✅ | ✅ | — |
| Obsidian / Notion | ✅ | ✅ | — |
| Terminal / iTerm2 / Warp | ❌ | ❌ | ✅ |
| Zed (GPUI) | ✅ |
⚠️ = 部分支持,取决于编辑区域类型
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 快捷键不响应 | 未授予辅助功能权限 | 系统设置 → 隐私与安全性 → 辅助功能 → 添加终端 |
| 翻译结果为空 | API Key 未配置 | 编辑 ~/.select_translate.yaml 填入 Ollama API Key |
| 面板不出现 | 终端无辅助功能权限 | 重新授权或重启终端 |
| 翻译速度慢 | 网络延迟或模型响应时间长 | 检查网络连接;可切换到更快的模型 |
| Zed 中快捷键失效 | GPUI 框架消费所有按键事件 | 已知限制,需使用剪贴板方式或切换到其他编辑器 |
- macOS 原生 UI — pyobjc (NSPanel, NSStatusBar, CGEventTap)
- 全局快捷键 — QuickMacHotKey (Carbon Event Manager)
- 翻译引擎 — Ollama Cloud (deepseek-v4-flash) + web_search
- 选区捕获 — Accessibility API (AXSelectedText → AXSelectedTextRange → pbpaste 三级降级)
Q: 支持哪些应用? A: 几乎所有 macOS 应用:Safari、Chrome、Firefox、Preview、PDF Expert、VS Code、iTerm2、Obsidian、Notion 等。
Q: 翻译速度如何? A: 普通词汇约 2 秒,需要联网搜索的专业术语约 3 秒。
Q: 费用? A: Ollama Cloud 有免费额度,日常阅读论文完全够用。也可以切换到本地 Ollama 模型(零费用)。
Q: 可以翻译其他语言吗?
A: 可以,修改配置中的 target_language 即可,如 "ja"(日语)、"en"(英语)等。