我们的读者,如果用 RSS 阅读器,想必常常接触外文内容;而绝大多数人,即便能够阅读外语,也不意味着他可以一目十行、像阅读中文那样扫过外文标题;而 RSS 中的文章偏偏源源不断,每天可能有成百上千的文章,若是一一仔细研读,未免强人所难。
于是就有人想到,能不能给 RSS 搞一个翻译功能,收到的文章(起码是标题)都翻译成读者母语,节省时间。别误会,翻译不是什么难言之隐,不仅国人有这个需求,老外照样需要翻译——几十年的硬核玩家 Dr. Drang 就 介绍过 一个 RSS 翻译方法,而人气极高的博客 Researchbuzz 同样 发表过 一系列翻译方案。毕竟,一个人有双脚,也不妨碍他在赶时间的时候打计程车甚至坐飞机。
但前述方案均在服务器上叠床架屋,似乎不是太可靠(且不论国内通常没有条件使用这些在线服务)。须知不少 RSS 订阅源本身就是网络爬虫带回来的走私品,如果再接上一个负责翻译的服务器,且不说翻译那环儿靠不靠得住,如果网络环境不佳,估计连能不能正常收到 RSS 推送都成问题。
我斗胆提出一套离线的 RSS 标题翻译方案,基于 DEVONthink,将抓取文章与翻译分开,先抓取再翻译,可以将抓到的文章标题翻译成任意语言。至少在 macOS 12.6 以后,Shortcuts 翻译已不受网络之掣肘。此外,整套方案采用模块化设计,日后如果有比 Shortcuts 更合适的本地翻译工具,本方案完全可以继续改进。
基础版动作(面向普通 DEVONthink)
注意:后文还后一套优化版,DEVONthink Pro 用户可以直接往下翻。下载后请用脚本编辑器打开脚本,确保脚本中的 Shortcuts 动作名与 Shortcuts 中的动作保持一致。使用本翻译方案,需要下载一个翻译脚本和一个 Shortcuts 翻译动作,两者需结合使用,前者负责更改文章标题,后者负责翻译。由于需要使用 Shortcuts 翻译标题,故本方案仅支持 macOS 11 以上的版本。
安装以上自动化组件以后,即可在 DEVONthink 中翻译 RSS 标题。选中 RSS 订阅源中的任意文章,运行“dt RSS Translate”脚本,等它调用 Shortcuts 获取翻译后的标题,不出几秒钟即可获得一串标题为原文加中文的文章。
以上过程简单明了,目的明确,基本没有什么自定义空间。Shortcuts 使 Apple 自带的翻译引擎,不用指望多优雅,但能够让人读懂标题,这已经令我额手称庆。我看的外语文章基本限于英文,故任凭 Shortcuts 自动检测语言、自行翻译,如果你在别的语种环境中碰壁,可以考虑手动设置语言。
原理解析
在线的 RSS 翻译方案,基本都在服务器端完成翻译,然后推送结果到阅读器中,故不管你使用什么阅读器——无论是 Reeder 还是 Inoreader——都可以收到文章。本质上,这些方案本身就提供了订阅源,以替代原始文章源。
而本地翻译方案则全然不同,它并不改动订阅源本身,只是把收到的文章标题改改,变得易读而已。一方面,本地方案当然不产生任何服务器开销,而且非常鲁棒,即便倒了大霉、翻译引擎出故障,也不影响文章本身,大不了继续读原文;另一方面,也只有极少数自动化支持全面的工具才能用本方案。
简言之,用 DEVONthink 翻译文章标题的步骤如下,本方案的细节可能过时,但你只要了解工序,完全可以用更好的工具实现一遍:
- 获取当前选中的文章标题;
- 交给 Shortcuts 去翻译;
- 将翻译结果作为新标题。
结束了。朴素的流程,却无人能及,这恰恰说明 DEVONthink 潜力之深,盖根本上,DEVONthink 就是一个文件管理工具,它抓取的 RSS 文章都是 HTML 文件,个个独立——既然是文件,改个名字还不是信手拈来。获取名字和改名的脚本附在下方,我不确定哪天就会出现一个更高效的翻译引擎,届时将脚本稍作修改,翻译全文也未尝不可。
tell application id "DNtp"
repeat with r in selected records
set iName to name of r
set the clipboard to iName
try
set fName to do shell script "shortcuts run 'Translate Text'"
set name of r to fName
end try
end repeat
end tell
优化版动作(面向 DEVONthink Pro)
前文所展示的翻译结果,直接用新标题取代原有标题,未免粗暴。如果你购买了 DEVONthink Pro,则可以考虑更好的呈现效果:把翻译后的标题添加到 custom meta data 中,和原有标题并排展示,互不影响;而且原文与译文两相对照,也有助于把握原意。如此一来,方能充分发挥 DEVONthink 文件管理工具的优势,胜过寻常的 RSS 阅读器。
Custom meta data 是专业版 DEVONthink 的一个特性,允许你给文件添加新的属性。在列表视图(list view)中,选中的文件属性都会呈现为单独一列,非常显眼;而 custom meta data 相当于加上一列自定义属性,在这里我们只需要最简单的文本,即可让翻译后的标题有容身之处。
首先,在 DEVONthink 设置的“Data”标签页中增加一个 custom meta data,你可以随便取名字,只要在之后的脚本中正确调用它。紧接着,在 DEVONthink 中列表视图中勾选“Translation”,即可看到该列信息。
随后,将 Shortcuts 动作调换为 这个,并将脚本中的 Translate Text
相应调整为 Translate Text 1
,以便调用新的 Shortcuts 动作。其余操作均与直接翻译标题无异(具体以你实际下载的 Shortcuts 动作名为准,Shortcuts 一旦分享就不能修改,我不能像管理代码那样轻松管理它们)。
tell application id "DNtp"
repeat with r in selected records
set iName to name of r
set the clipboard to iName
try
set fName to do shell script "shortcuts run 'Translate Text'"
add custom meta data fName for "Translation" to r
end try
end repeat
end tell
小结
本文所提供的 RSS 翻译方案,不依赖网络,而且翻译和更改 RSS 的自动化组件分开,方便日后自定义翻译引擎,胜在可靠。而对于 DEVONthink Pro 用户来说,翻译的同时可以保留原文,效果比直接更改标题更好。
不过,Shortcuts 并不是最理想的翻译引擎,盖 Apple 收购 Shortcuts 以来,其稳定性就一直遭到诟病。
我无法预知 Shortcuts 哪天会崩溃——不过本文提供的动作已经设计了容错机制——几乎每次系统升级它就会出现 bug;本文的 Shortcuts 动作,原本只需要获取剪贴板并翻译即可,但 macOS 12.6 前后的几个版本硬是无法识别剪贴板,只能来来回回转换几次格式。如果你下载的 Shortcuts 动作里全是各种冗余步骤,又臭又长,请勿见怪,这只是一串补丁罢了。
🛍 我撰写的付费栏目《信息管理,文件为本位的方案》正在 UNTAG 售卖,对本文话题有进一步讨论,欢迎选购。