# Keyboard Maestro 查词翻译一体化解决方案

> 本文公开全文。

原文：https://utgd.net/article/20423

macOS 原生查词功能（Look up）备受好评，选中一个生词，按一下快捷键或者重按触控板，便能就地弹出一个小弹窗，占地不大、查完就关，不打断阅读。可惜查词功能只能对付单词，一个长句，或者一个词组，就能让原生查词功能歇菜——毕竟它只是依赖本地词典的查词工具，而非万能的翻译工具。

工作需要，我本人也苦于外文资料久矣，遇到长句和一些词组搭配，往往需要在翻译网页和阅读材料之间反复辗转，操作步骤多且不谈，最难受的当属这种界面切换会频频打断阅读。

本文介绍一套基于 Keyboard Maestro 的查词翻译一体化解决方案，它继承了 macOS 原生查词功能，可以自动检测当前选中的是单词还是句子、词组，并在遇到后两者时主动呈现翻译页面的浮动窗口，兼具查词、翻译两种功能，并保持显示效果的干净简洁。

## 动作使用

整个查词翻译动作由 Keyboard Maestro 和 Automator 两部分组成，前者负责交互和逻辑判断，后者主司翻译，需下载并安装两部分自动化动作。

\>\>Keyboard Maestro 和 Automator 动作下载\<\<

用前注意三点：

- 请检查 Keyboard Maestro Macro 中的 Automator workflow 文件路径，确保其安装在您电脑的 /Users/Min/Library/Services/ 文件夹下，如有移动，请将 Keyboard Maestro 中的路径改为实际位置。

- 动作默认提供的 Trigger 是点击鼠标中键，这是考虑到选词几乎必然要使用光标（触控板的场景稍后再说），搭配中键，就能只靠一个输入装置、单手实现“划词、查词、翻译一条龙”，不需再记忆快捷键。另，由于所用 Trigger 高度个人化，您需要重新再录入一遍按键。

- 为了避免和别的中键操作撞车，动作默认只在 Preview（预览工具）中生效，你可以在 Keyboard Maestro 编辑界面扩大其应用范围。

现在用 Preview 打开一份文档，挑一个生词或一句话，点击鼠标中键即可分情况查词或翻译——如果选中的只是一个单词，动作会调用系统原生查词功能，弹出一个词典窗口；如果选中了一整句话，也会弹出一个小浮窗，其中显示的是在线翻译的结果（本文选择 Google 翻译）。

### 自定义操作方式

鼠标并不是唯一的查词翻译方式，实际上，许多使用内置触控板的读者就用不了鼠标。这时候，仍然可以选择最传统的自动化工具启动方式——快捷键。在动作编辑界面添加一个 Hotkey Trigger，然后录入你喜欢的快捷键。建议的键位是 ⌃Control\-⌥Option\-⌘Command\-D，可以和系统查词（Look Up）快捷键保持相似（系统键位是 ⌃Control\-⌘Command\-D），更重要的是这三颗键挨在一起，使用时可以一股脑地按下，不需要纠结到底按哪几颗。

但是不要试图直接用 ⌃Control\-⌘Command\-D 代替系统快捷键，会弹出两次查词搜索窗口，效果不佳。另外可以留意一下，鼠标中键触发方式是通过 USB Device Key Trigger 实现的，这一触发方式和 Hotkey Trigger 区别在于前者可以控制几乎任意单颗“按键”，而不论其位于键盘还是触控板。Hotkey 则常见于多颗按键的组合。

### 找回原生体验：搭配 BetterTouchTool

使用 Keyboard Maestro 是为了利用其逻辑模块，减少写脚本的工作量，同时其操作方式也较丰富，快捷键、鼠标皆可。美中不足的是，Keyboard Maestro 对于触控板的支持却表现平平，而 macOS 原生就支持用触控板重按查词，在 Twitter 上就有网友表示更想用触控板完成查词&翻译。

最常见的优化方向是结合 Keyboard Maestro 动作和 BetterTouchTool 的触控板操作。BetterTouchTool 可以覆盖系统原生的操作方式，其中就包括“Single Finger FORCE Click”，可以取代原生的重按。接着在“Single Finger FORCE Click”中加入一段启动 Keyboard Maestro 动作的 AppleScript 脚本，就可以将重按查词改为重按后启动 Keyboard Maestro 动作，实现重按查词/翻译。

其中的脚本摘录如下，可以拷贝即用。如果你修改过本文所提供 Keyboard Maestro 动作的名字，需要同时修改脚本中的动作名，将 "Look Up X" 内的 Look Up X 改为你重命名后的动作名。

```
tell application "Keyboard Maestro Engine"
    do script "Look Up X"
end tell
```

## 原理分析

深入一些核心步骤之前，我们来整体浏览一下查词翻译的整个流程，大致了解 Keyboard Maestro 和 Automator 是怎样协作的。过程中有一些和查词或翻译并无直接关联的细节设置，这里一并指出，以免遗漏，也避免和核心步骤混淆。

- 开始之前，取得当前剪贴板数据存入 Keyboard Maestro 的变量，因为后续得借助剪贴板传递数据，故需要通过这一步把原有数据保护起来；

- 模拟快捷键 ⌘Command\-C，拷贝当前所选内容；

- 运行 AppleScript 脚本，判断方才拷贝下来的内容有几个单词，并根据单词数据执行不同操作；

- 如果多于一个单词，证明选中了词组或句子，需执行负责翻译功能的 Automator 动作；

- 如果只有一个单词，证明选中了单词，径直模拟查词快捷键 ⌃Control\-⌘Command\-D 呼出原生查词界面；

- 查词或翻译结束后，从 Keyboard Maestro 变量中将临时保存的数据恢复回剪贴板，避免改动其中的原有内容。

### 一个操作，通吃查词\+翻译

视情况进行查词或翻译，这一想法源自大量的阅读需求。同样是想“查”，查单词可以简单到按一下触控板，而翻译词组或句子却要复制、前往网页、粘贴；即便借助 LaunchBar 等自动化操作简化了中间操作，查单词和查词组或句子仍然是两套平行、独立的操作。好像双手各拿一双筷子吃饭，没有必要。

真应该把它们合在一起，实现尽量少、尽可能统一的操作。

在这样的需求驱动下，就要求把区分单词和词组/句子的任务交给机器。判断当前所选内容属于单词还是词组/句子，关键依据就是所选内容的词数——只有 1 个，自然是单词；多于 1 个，则是词组或句子。

AppleScript 原生支持了词数（Words）统计，我已经据此写好了脚本；而 Keyboard Maestro 又和 AppleScript 一拍即合，可以根据 AppleScript 的结果执行不同的操作，即视 AppleScript 统计结果是否大于 1，分情况查词或者翻译。

### 实现弹窗翻译效果

查词的操作比较简单，直接调用系统快捷键 ⌃Control\-⌘Command\-D 即可；而显示翻译结果的弹窗则需要自己动手实现。本文推荐利用原生工具 Automator 的 Website Popup 模块，设置简单，同时经过细节调整，能够实现和系统查词界面类似的显示效果，保持查询效果的统一。

Keyboard Maestro 支持直接启动 Automator 动作，不过有一点小瑕疵，即只能单纯启动动作，不能再附带处理所选内容，所以有了之前在剪贴板和 Keyboard Maestro 变量间转移数据的一通折腾，通过剪贴板把词组或句子传递给 Automator。所以，Automator 的运行机制就可以归结为：获取剪贴板，和 Google Translate 的搜索链接组合起来（步骤 2），显示组合后的链接页面（步骤 3）。

Website Popup 模块所显示的其实是一个完整的网页，差不多等于一个 Safari 浏览器窗口，故熟悉其他翻译引擎的读者也可以对本文动作施以改造，使其支持其他翻译引擎。关于链接组合和 Website Popup 模块的自定义，之前在《用 Automator 在迷你浮窗中即时搜索选中的内容》和《在 macOS 上随手贴图，Pin 住常用信息（Automator）》两篇文章中有过介绍，本文动作也无需额外的设置，诸位对于自定义显示效果感兴趣的话，阅读前两篇文章即可。

🛍 我撰写的付费栏目《Keyboard Maestro 进阶指引》正在 UNTAG 售卖，详解 Keyboard Maestro Macro 高级设计思路，欢迎选购：付费内容链接

---

[前往标准阅读页](https://utgd.net/article/20423?audience=web)
