article_image

20240116 更新:针对论坛类 RSS 中重复标题较多的情况,优化了翻译逻辑,不再重复翻译,速度有明显提升(可能比原来快几倍)。 20221029 更新:macOS 13 Ventura 中的 Shortcuts 出现了文本转换错误,文中的 Shortcuts 动作暂时无法使用,请下载 这里 的应急版本。

我们的读者,如果用 RSS 阅读器,想必常常接触外文内容;而绝大多数人,即便能够阅读外语,也不意味着他可以一目十行、像阅读中文那样扫过外文标题;而 RSS 中的文章偏偏源源不断,每天可能有成百上千的文章,若是一一仔细研读,未免强人所难。

于是就有人想到,能不能给 RSS 搞一个翻译功能,收到的文章(起码是标题)都翻译成读者母语,节省时间。别误会,翻译不是什么难言之隐,不仅国人有这个需求,老外照样需要翻译——几十年的硬核玩家 Dr. Drang 就 介绍过 一个 RSS 翻译方法,而人气极高的博客 Researchbuzz 同样 发表过 一系列翻译方案。毕竟,一个人有双脚,也不妨碍他在赶时间的时候打计程车甚至坐飞机。

但前述方案均在服务器上叠床架屋,似乎不是太可靠(且不论国内通常没有条件使用这些在线服务)。须知不少 RSS 订阅源本身就是网络爬虫带回来的走私品,如果再接上一个负责翻译的服务器,且不说翻译那环儿靠不靠得住,如果网络环境不佳,估计连能不能正常收到 RSS 推送都成问题。

我斗胆提出一套离线的 RSS 标题翻译方案,基于 DEVONthink,将抓取文章与翻译分开,先抓取再翻译,可以将抓到的文章标题翻译成任意语言。至少在 macOS 12.6 以后,Shortcuts 翻译已不受网络之掣肘。此外,整套方案采用模块化设计,日后如果有比 Shortcuts 更合适的本地翻译工具,本方案完全可以继续改进。

Alt text
批量翻译 RSS(以 DEVONthink Pro 为例)

基础版动作(面向普通 DEVONthink)

注意:后文还后一套优化版,DEVONthink Pro 用户可以直接往下翻。下载后请用脚本编辑器打开脚本,确保脚本中的 Shortcuts 动作名与 Shortcuts 中的动作保持一致。
Alt text
在 DEVONthink 中翻译 RSS 标题

使用本翻译方案,需要下载一个翻译脚本和一个 Shortcuts 翻译动作,两者需结合使用,前者负责更改文章标题,后者负责翻译。由于需要使用 Shortcuts 翻译标题,故本方案仅支持 macOS 11 以上的版本。

安装以上自动化组件以后,即可在 DEVONthink 中翻译 RSS 标题。选中 RSS 订阅源中的任意文章,运行“dt RSS Translate”脚本,等它调用 Shortcuts 获取翻译后的标题,不出几秒钟即可获得一串标题为原文加中文的文章。

Alt text
翻译前后的文章

以上过程简单明了,目的明确,基本没有什么自定义空间。Shortcuts 使 Apple 自带的翻译引擎,不用指望多优雅,但能够让人读懂标题,这已经令我额手称庆。我看的外语文章基本限于英文,故任凭 Shortcuts 自动检测语言、自行翻译,如果你在别的语种环境中碰壁,可以考虑手动设置语言。

Alt text
设置 Shortcuts 动作的语言

原理解析

在线的 RSS 翻译方案,基本都在服务器端完成翻译,然后推送结果到阅读器中,故不管你使用什么阅读器——无论是 Reeder 还是 Inoreader——都可以收到文章。本质上,这些方案本身就提供了订阅源,以替代原始文章源。

而本地翻译方案则全然不同,它并不改动订阅源本身,只是把收到的文章标题改改,变得易读而已。一方面,本地方案当然不产生任何服务器开销,而且非常鲁棒,即便倒了大霉、翻译引擎出故障,也不影响文章本身,大不了继续读原文;另一方面,也只有极少数自动化支持全面的工具才能用本方案。

简言之,用 DEVONthink 翻译文章标题的步骤如下,本方案的细节可能过时,但你只要了解工序,完全可以用更好的工具实现一遍:

  1. 获取当前选中的文章标题;
  2. 交给 Shortcuts 去翻译;
  3. 将翻译结果作为新标题。

结束了。朴素的流程,却无人能及,这恰恰说明 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 阅读器。

Alt text
原文和译文对照呈现

Custom meta data 是专业版 DEVONthink 的一个特性,允许你给文件添加新的属性。在列表视图(list view)中,选中的文件属性都会呈现为单独一列,非常显眼;而 custom meta data 相当于加上一列自定义属性,在这里我们只需要最简单的文本,即可让翻译后的标题有容身之处。

首先,在 DEVONthink 设置的“Data”标签页中增加一个 custom meta data,你可以随便取名字,只要在之后的脚本中正确调用它。紧接着,在 DEVONthink 中列表视图中勾选“Translation”,即可看到该列信息。

Alt text
增加一个 custom meta data

随后,将 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 以来,其稳定性就一直遭到诟病。

Alt text
Shortcuts for macOS 经常崩溃

我无法预知 Shortcuts 哪天会崩溃——不过本文提供的动作已经设计了容错机制——几乎每次系统升级它就会出现 bug;本文的 Shortcuts 动作,原本只需要获取剪贴板并翻译即可,但 macOS 12.6 前后的几个版本硬是无法识别剪贴板,只能来来回回转换几次格式。如果你下载的 Shortcuts 动作里全是各种冗余步骤,又臭又长,请勿见怪,这只是一串补丁罢了。

🛍 我撰写的付费栏目《信息管理,文件为本位的方案》正在 UNTAG 售卖,对本文话题有进一步讨论,欢迎选购。

🔗 付费栏目链接


  1. 理论上,你可以把它改写成 DEVONthink smart rules,这样就不用打开脚本编辑器,而可以直接在 DEVONthink 中翻译标题。 2

author_avatar

Lawyer, macOS/iOS Automation Amateur