U

UNTAG - 专题

| 在线阅读专栏 | 卡片笔记专题 | | ------------ | ------------ | 更多专栏请见 [专题广场](https://utgd.net/topic)

用 Shortcuts 导出 Safari 网页

<img src="https://imgproxy.citrusreader.com/VrmWU3eAZUMRl79Ocvb2qlpwICW0FLZW0aml6qsQHWY/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvaW1hZ2VzL0FydGJvYXJkX0NvcHlfMi5qcGVn" referrerpolicy="no-referrer"><br><p><font color="#008000">Claim:本文仅适用于 iOS 和 iPadOS,暂时不能用在桌面端,因为 macOS 13 Ventura 中的 Shortcuts 暂无本文所需模块。不过,我四年前已经为 macOS 提供了解决方案,你可以在文中相应的位置找到链接。</font></p> <p>导出 Safari 网页——无论书签、阅读列表还是当前打开的标签页——算得上一个古老的话题。整理书签,可顺手导出一份 Markdown 文档当备份;开了一堆标签页没读完,可导出待读清单,放诸备忘录;朋友问一个技术问题,可甩他一串参考网页,令其自助解决……然而,Safari 导出方式的阙如,和需求的存在一样古老。</p> <p>早在四年前,我就在两篇文章中介绍过一些思路,可惜数据来源是系统文件,需要使用 Python 脚本才能解析,算不上多么方便(你可以在 <a href="https://github.com/BlackwinMin/Automator-gallery/">这里</a> 下载到“Export Safari”开头的几个自动化动作);几年后,MacStories <a href="https://www.macstories.net/mac/exporting-links-from-safari-reading-list-via-shortcuts-for-mac/">写了</a> 一个基于 Shortcuts 的方案,结果和我的一样依赖系统文件,只是解析工具换成了 Shortcuts(快捷指令)。@Platy 君也写过一个基于 Safari 标签组的方案,比与系统文件鏖战好一点,但限制重重,还得先用标签组不可——起码我是不用这玩意儿的[^1]。</p> <p>简单说,MacStories 的方法跨 iOS(包括 iPadOS)和 macOS 两大平台,而我的旧方案限于 macOS,但我们都支持书签、标签页和阅读列表,功能齐全;而围绕 Safari 标签页的路子,虽然不限于某个平台,却只能导出眼前的标签页,力道不足。惟本文的方案可贯通 Apple 的各个平台,通吃书签、标签页和阅读列表三大数据来源,同时原理简单鲁棒、导出方式多变,颇具自定义空间。</p> <figure> <img src="https://imgproxy.citrusreader.com/qcf-UmCmRJv-mOwDN8cJyl1gkuSPwGke3SEz3uhulnE/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDQ0NTgwNS0xMDgweDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>导出阅读列表为 Markdown</figcaption> </figure> <h2>导出书签、标签页或阅读列表</h2> <p>在 2022 年秋季的 Shortcuts 以前,iOS 上鲜有获取 Safari 数据的途径,而 macOS 也需要对付系统文件,并且还是一场车轮赛,需逐个解决书签、标签页和阅读列表,完全是一场苦差事。不过,书签、标签页或阅读列表,以后都可以在 Shortcuts 中统一处理,此事新加入的“查找”相关模块居功厥伟。以下凡例从简,以导出 Safari 数据为 Markdown 格式为例,输出的数据直接拷贝到剪贴板。</p> <ul> <li><a href="https://www.icloud.com/shortcuts/ba947e70bc5a4828892539509a8423a6">Shortcuts 动作下载:导出书签为 Markdown</a></li> <li><a href="https://www.icloud.com/shortcuts/9ccc948a9a40432680228509b447e5c1">Shortcuts 动作下载:导出标签页为 Markdown</a></li> <li><a href="https://www.icloud.com/shortcuts/fee68d16159c4676abdda8c1c6a3014a">Shortcuts 动作下载:导出阅读列表为 Markdown</a></li> <li><a href="https://github.com/BlackwinMin/Shortcuts-Actions-gallery/tree/master/Export%20Safari">GitHub</a></li> </ul> <p>三个动作,除去数据来源,其他均一致,熟悉 Shortcuts 菜单模块的读者也可以将三者做到一个动作里面。以导出当前打开的标签页作为切入:</p> <ol> <li>直接运行 Shortcuts动作,选择需要的标签页——默认是选中全部网页,免得逐个点选。</li> <li>如标签页数量较多,也可以在运行后输入关键词,做一道过滤。查资料时常常打开一场串的标签页,其中可能只有几个确有必要导出,则可以一开始就用关键词将其滤出。</li> <li>稍等一两秒,Shortcuts 会将选中的网页转换为 Markdown 格式,即 <code>[标题](链接)</code> 形式,并送到剪贴板。</li> </ol> <figure> <img src="https://imgproxy.citrusreader.com/P3LqkQrIZiXB5IO_67dqJCUnB0LrwFm7ZC3OC7LTKeg/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDM0Mjk2MC0xMDgweDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>导出标签页为 Markdown</figcaption> </figure> <p>动作所涉步骤如下,不过是查找数据、手动选择与整理输出。下图动作最后导出的是 Markdown 格式,如果你需要更简单的纯文本,可将图中的 <code>- [标题](URL)</code> 改为 <code>- 标题 URL</code>,即删去两对括号。</p> <figure> <img src="https://imgproxy.citrusreader.com/Oz6O9jrNgaydA90CCHi_K1VYj1YFzZwVcAHii424o3U/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDQyNDM2OS05Nzh4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>导出标签页的步骤</figcaption> </figure> <p>比起用到的 Shortcuts 模块本身,可能两个元认知(metacognition)更重要:第一,要有过滤思维,即通过一系列预设条件获取数据,而不是守株待兔,等着别人做好现成动作;第二,则是要关注新版本 Shortcuts 中的模块,其自身也许不起眼,但很可能成为更大拼图的一部分。</p> <p>其实还有第三,那就是理解现成动作的边界何在,我就一直对以前的书签导出动作耿耿于怀,不满意其数据来源;唯有如此,在 Shortcuts 支持获取 Safari 数据后,一个探索在前缘的玩家才能就意识到——东风已至,万事俱备。</p> <h2>导出标签页到阅读列表</h2> <p>一旦理解了查找数据的模块,之后的事情不过就是修正数据格式,然后导入各种软件。直接拷贝到剪贴板系最简单的处置方式,此外还可以追加待读文章到备忘录、Obsidian 或 Logseq,或者通过 API 连通 Notion(只是举例,这些软件我几乎都不用,恕不能效劳)。除了将网页数据导出,其实也可以在 Safari 内部自产自销,比如把当前打开的标签页添加到阅读列表,留待稍后阅读。</p> <figure> <img src="https://imgproxy.citrusreader.com/_cE3XL6iUNxKjezo54v7QauSpf5ZcMBK-YJrKKNc-T8/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDUyMTkyNi0xMDgweDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>添加标签页到阅读列表</figcaption> </figure> <p align="center"><a href="https://www.icloud.com/shortcuts/4b3e4f2fbe7749e9b94754d7a1d89ce0">&gt;&gt; Shortcuts 动作下载:将标签页添加到阅读列表 &lt;&lt;</a></p> <p>这个 Shortcuts 纯属帮 iOS 版 Safari 修桥补路。不少人把阅读列表作为文章暂存区,按理说,一时半会儿读不完的网页,确实应当添加到阅读列表才是。桌面端的 Safari 就提供了批量保存选项,但在 iOS 上却只能把标签页保存为书签,而不是添加到阅读列表。</p> <figure> <img src="https://imgproxy.citrusreader.com/rlGny1Vh517CgMel5WdFaKHvq6UycEtRI4LUgi131Nk/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDMyODk0MS5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>macOS 上的 Safari 倒是可以批量添加标签页到阅读列表</figcaption> </figure> <p>用 Shortcuts 将标签页导入阅读列表的步骤相对简单,一开始也是用查找模块获取标签页,然后从中选取想稍后阅读的——难免打开得太多,要挑挑拣拣一番——加入阅读列表。在添加阅读列表项目时,Safari(或 Shortcuts)似乎会尝试缓存网页数据,每个页面都需要几秒钟时间,这点与提取 Markdown 格式的网页链接不同。</p> <figure> <img src="https://imgproxy.citrusreader.com/BIH8inun4luKBVj_0BIYKuBHH_0M6d5VHTjqhJtUzYw/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8xMC8yMDIyMTAwOTAzNDYwMjM5MS01MDd4NzIwLmpwZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>添加标签页到阅读列表的步骤</figcaption> </figure> <p>当然,你可能有自己稍后读工具,或者更喜欢导出待读文章到备忘录或任务清单,这些都无妨本节动作充当一个示例,展示 iOS 16 中的 Shortcuts 如何与 Safari 交互。文章能直接为你充饥解渴当然很要紧,但钓鱼的工具,恐怕更重要。</p> <h2>小结</h2> <p>自 Workflow 被收购并更名 Shortcuts 以降,便不再推出强大的模块,诸如正则表达式、网页调试、SSH 等大名鼎鼎的工具,也均为上个世代的遗物。不过,这不意味着 Shortcuts 再无新意;在最近一版系统(iOS 16)中,新增的一系列查找模块打通了 Shortcuts 和系统软件之间的桥梁。Shortcuts 玩家不仅可以获取系统软件的数据,更可以添加过滤智能条件,macOS 上的骄傲——智能文件夹——被广泛运用于文件、照片、备忘录、提醒事项以及 Safari 浏览器,等等。</p> <p>Workflow 和 Shortcuts 过去的战场其实在于数据处理,不过经过几年的强度关山,相关问题几乎已经被玩家们消灭殆尽;现在的问题,其实在于数据的输入输出,即如何获取更多的系统软件数据,以及和更多的第三方软件连通。</p> <p>[^1]: 因为 Safari 的标签组功能远比其他浏览器粗躁,比如,如果你看了一眼标签组B,那么标签组A中的网页就会全部重新加载。这种设计,是远古 iOS 时代墓碑式后台机制的遗风,我无法认同。</p>

2022/11/10
阅读更多

用 DEVONthink 批量翻译外文 RSS 标题

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

2022/10/25
阅读更多

泛泛之交与忘年挚友:谈 DEVONthink 与 RSS 过滤

<img src="https://imgproxy.citrusreader.com/qo8fibcGQobxuEeO09DCgHcA60_FyWqXmCgOIlQPYBw/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvaW1hZ2VzL0FydGJvYXJkX0NvcHlfNS5wbmc" referrerpolicy="no-referrer"><br><p><font color="orange">20240303更新:更好的方案,请参阅<a href="https://utgd.net/article/20588/">《另一种在 DEVONthink 中过滤垃圾 RSS 信息的方法》</a>一文(需付费)。</font></p> <p><font color="#008000">我曾使用免费的 NetNewsWire,从在线过滤到飞跃到本地过滤;此后,我发现 DEVONthink 能够以开放格式保存 RSS 全文,且自动化功能更丰富,遂迁移至此。应读者要求,这篇文章先于 NetNewsWire 的文章发布。</font></p> <p>把过滤做成一门生意,比过滤这个需求本身还要悲哀。我原本计划为 DEVONthink 编写一套鲁布哥德堡般复杂的 RSS 工具,从正则表达式过滤、自然语义识别标签匹配到文章自动分拣,但在写完第三个脚本之前,我就意识到了更重要的事情:好文章,根本不需要过滤。高质量订阅源的首要特征就是爱惜羽毛,其读者不需要特别提防软广。</p> <p>巴别塔在前几层就停工了,但我获得了更重要的东西。如今,我每次刷出 500 条左右的文章,被过滤掉的不过十几二十篇,且仅仅是因为话题不感兴趣(比如,对 Facebook 的近况和扎克伯格又亏了多少钱我就一点都不感冒)。过滤机制的直接功能是过滤文章,长久来看,则是过滤订阅源本身。最终,我们不应当花费过多精力在过滤上,就像与人交往,与其处心积虑背后抱怨,不如一开始就认真择友。本文仍然会提供 RSS 过滤工具,但初衷不再是和广告之间的军备竞赛。</p> <p><a href="https://github.com/BlackwinMin/DEVONthink-gallery/tree/master/RSS%20Filter">脚本下载 GitHub</a></p> <h2>从稍后不读到过滤文章</h2> <p>RSS 常被用作稍后读工具,同时,后者的血缘诅咒也被继承下来:稍后读,往往会变成稍后不读。我曾经对这种调侃感到不可思议,尤其发现这不仅仅是一种自嘲,而是一个广泛存在现象时。直到我忍不住偷窥他人的收藏列表,看看其中正在腐烂的僵尸文章究竟为何物时,方恍然大悟:这些别人不读的东西,和我过滤掉的文章几乎如出一辙。<a href="https://utgd.net/article/%E8%BF%99%E9%87%8C%E7%9A%84%E8%BF%87%E6%BB%A4%EF%BC%8C%E6%8C%87%E7%AC%AC%E4%B8%80%E9%81%93%E8%BF%87%E6%BB%A4%EF%BC%8C%E5%8D%B3%E8%BF%87%E6%BB%A4%E6%96%87%E7%AB%A0%EF%BC%8C%E5%B0%A4%E5%85%B6%E6%98%AF%E5%B9%BF%E4%B9%89%E4%B8%8A%E7%9A%84%E6%96%87%E7%AB%A0%E8%BF%87%E6%BB%A4%E3%80%82">^1</a></p> <p>稍后不读,并不仅仅是意志力的指标,更是订阅源本身质量的尺度。之所以辛辛苦苦收集——往往还是向人讨要——一堆订阅源,收到文章后却又弃如敝履,原因在于没有做好过滤整理工作,尤其是过滤工作。盖阅读就像交友,有的订阅源只是点头泛泛之交,有的则值得深入交往;而没有过滤功能的 RSS 阅读器,就像一场永不散场的宴席,吃到后来身边全是酒肉朋友,以至于分不清谁值得深交,谁又只需要点头微笑就行。交友不慎,最后变成游戏人生;阅读饕餮,来者不拒,最终就没有重点,哪篇文章都想读,都以为自己有水平读或有时间看,稍后不读的条件也就水到渠成。</p> <figure> <img src="https://imgproxy.citrusreader.com/X0dwlBuj87BhZBWljow6E5QY1aV7Nc4CX_V34zUc_is/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkyMTE4MDYyODk3OS5naWY" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>DEVONthink 过滤 RSS</figcaption> </figure> <p>DEVONthink 本身并没有“屏蔽”一说,但我们可以把不想看到的文章标为已读或直接删除,效果上就近似过滤(最好是标为已读而不要删除,否则容易误删有用的文章)。我准备了一个 AppleScript 脚本,首先在下图箭头所指的括号内填写屏蔽关键词,然后选中 DEVONthink 中的 RSS 文章,再运行脚本即可——可直接使用系统脚本编辑器,有能力的读者也可以考虑自制 DEVONthink 自动化动作。此处只提供可以运行的脚本。</p> <figure> <img src="https://imgproxy.citrusreader.com/Q9PMxuOF-gtE5n9YiGukAYijEZvM18Q-Sqmie9K76EY/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wMC9taW5qYS0xMTE2MTQ0NDEyLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>填写需屏蔽的关键词</figcaption> </figure> <p>关键词需用英文双引号 <code>""</code> 包裹,如有多个关键词,可用英文逗号 <code>,</code> 隔开。关键词不限语种,也可以混用,比如 <code>VR 头戴</code>,毕竟其原理只是字符匹配,无所谓语言差异。示例脚本仅根据标题过滤文章,但 DEVONthink 也允许将 URL 甚至文章内容设为过滤条件,你可以前往脚本编辑器中查看 DEVONthink 的语法,在 record(一篇文章就算一个 record)的属性中选择需要的过滤条件。</p> <figure> <img src="https://imgproxy.citrusreader.com/edoOcyce_D-BZt5RL92MEY6vcJrH_5gIkJDfXFX43bQ/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkyMTE4MDcyNjUxNS04NjB4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>可供选择的过滤条件非常丰富</figcaption> </figure> <h2>从消极过滤到积极过滤</h2> <p>过滤功能并不常见于 RSS 阅读器,而支持过滤的阅读器往往都要付费。过滤已经成了一门生意,就和减肥、无添加食品以及极简主义家具一样,越少越费钱。</p> <p>但过滤又不等于屏蔽,这点是终日忙于造城墙的 RSS 服务私死活想不通的。屏蔽广告当然是过滤的基础含义,但这只是消极的过滤;过滤还可以积极分拣,给重点关注的内容打上星号,或者把暂时处理不了、只能留待周末腾时间对付的文章专门放进一个文件夹,甚至能够对正文做筛选,把包含图表或代码实例的文章——这些都透露着干货的气息——预先挑出来。一旦把过滤拓展到积极的方面,NetNewsWire 便显得吃力(更不要说所有的在线服务),最终搬到 DEVONthink 里读文章,也就势在必行。DEVONthink 中的文章都是 HTML 格式,而 DEVONthink 本身又是一个文件管理工具,于是我们在文件管理中的那一套——分类整理、标签管理、标记加星、全文搜索等等——可以全部用在 RSS 上。[^2]</p> <figure> <img src="https://imgproxy.citrusreader.com/X0dwlBuj87BhZBWljow6E5QY1aV7Nc4CX_V34zUc_is/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkyMTE4MDYyODk3OS5naWY" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>DEVONthink 标记 RSS</figcaption> </figure> <p>标记方式和屏蔽类似,也是先在脚本中填好需要留意的关键词,然后选中订阅源中的所有文章,运行脚本,即可标出需要关注的文章。同样,此处的关键词也可以填写多个。考虑到同一个标题可能既包含需关注的元素,又有想要屏蔽的字符,未避免殃及池鱼,最好先标记一遍,再去剩余的文章中运行过滤脚本。一定程度上,积极过滤比消极屏蔽更重要,因为单纯没被归为垃圾的文章,也可能只是快餐性质,不见得都要读;而标记出来的文章,更可能是自己翘首以盼的。</p> <figure> <img src="https://imgproxy.citrusreader.com/IwwKZo8UQKolo5CI4yoADvENVo7MSMh3rF4PxRx1qzs/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkyMTE4MDgyOTUxNy05MDJ4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>填写需标记的关键词</figcaption> </figure> <p>从屏蔽到分拣,阅读就成了任务管理:避之不及的垃圾,都阻挡在书斋之外;能够在乘车或者候餐时马上读掉的,奉行两分钟原则;而暂时读不了的大家伙,则分门别类,留给以后。如此,抓取新文章后的选择就不是只有“读”或“稍后读”两个选项——硬要说的话,当然还有无视文章,但我们往往患有松鼠症,倾向于收藏而不是果断抛弃——而是有一套完整的分类和文件管理体系。苟指望在线服务提供这些功能,则是痴心妄想;而搬出现有的文件管理系统,一切又一拍即合。</p> <p>总之,过滤不等于屏蔽,而是分类管理。苟过滤得当,则稍后不读的症状应当大大缓解。和处朋友一样,避开那些狐朋狗友,也不高攀名流公知,真正的好友也就像退潮后的礁石一样显露出来。</p> <h2>从过滤文章到过滤订阅源</h2> <p>第一道过滤针对文章,第二道过滤则直接触及订阅源本身。</p> <p>在做了一段时间的过滤工作后,我发现战斗并没有升级,因为那些不断换用肉麻标题、防不胜防的订阅源,早早就被我退订,我终归没有陷入兵来将挡水来土掩道高一尺魔高一丈的焦油坑中。不想被人践踏草坪的话,最优美的办法是种满花卉。惟不设防或者只用一两个关键词就能打理干净的订阅源,才值得留在 RSS 阅读器中;当 RSS 阅读器中多为和自己意趣相投的订阅源,垃圾信息也就没有了生长的温床——而过滤工作,到此基本可以打住。</p> <p>惟将居室打扫干净,方有心思装点打扮。此时,诸如标签管理、翻译文章、自定义 CSS 样式等想法,也接连冒了出来。我很快走出了和垃圾信息以及信息爆炸的战争,转向正面的工作。</p> <figure> <img src="https://imgproxy.citrusreader.com/vj2uXbmZ_Nyn5fcXDeFg_B8Nc8AWdi8LYfhO7OlgBSk/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkyMTE4MDcwMjQzNC0xMjEzeDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>原始样式和自定义样式</figcaption> </figure> <p>虽然可以支持正则表达式,但我自己从来没有用过,因为在一两次过滤之后,某个订阅源的品性就昭然若揭,如果它来者不善,或者我高攀不起,则是否值得继续交往,自然心中有数。苟若某个订阅源不断升级广告植入方式,逼人编写复杂的表达式,那最好的应对方法就是与其说再见——就像对付电信诈骗,不听、不接、不理会,比和他斗智斗勇要管用得多。欧美的 RSS 订阅源通常比较实诚,打广告的话,会在标题中明确标出“Sponsor”,直接填上关键词就能屏蔽。[^3]而中文互联网,简直让人感叹汉语的博大精深,在暧昧标题方面日新月异,有时候甚至读完正文才会发现是软文——这种事情只要碰上一次,整个网站都可以退订,毕竟,您怎么能指望在一个骗子那里占便宜呢?</p> <p>其实,除了——可能也包括——正则表达式以外的过滤功能基本都是防君子不防小人,如果一个订阅源能够突破关键词过滤,则它只能算是小人一个,与之割席分坐就好,犯不着搬出重兵利器。至少我对我自己而言,正则表达式更大的意义是一种威慑,让我知道自己有能力可以阻挡几乎任何形式的垃圾信息,但是我基本没有动用过这枚核武器。这就像交朋友,人品不好就足以一票否决。</p> <h2>小结</h2> <p>本文提及了 DEVONthink 的诸多特性,用于 RSS 阅读仿佛天造地设;比工具更重要的是,我发现并遵守了一套与订阅源交往的守则,这远比某一款工具的适用范围要广。</p> <p>DEVONthink 和 RSS 碰撞出的迷人火花,包括但不限于:屏蔽垃圾信息,自定义关键词;标记重点文章,自定义关键词;用正则表达式做到前两项;将外文 RSS 批量翻译成中文;自定义 CSS 主题样式;全文搜索,可指定文件夹或全局搜索;批量保存文章为离线文件,比如富文本或 PDF……不过 DEVONthink 毕竟不容易上手,这篇文章以展示效果、提供工具和分析思路为主,不能在一篇文章中涉及所有内容。如果读者兴味盎然,则也可能再写几篇技术方向的文章。</p> <p>🛍 我撰写的付费栏目《信息管理,文件为本位的方案》正在 UNTAG 售卖,对本文话题有进一步讨论,欢迎选购。</p> <p><a href="https://utgd.net/product/14">🔗 付费栏目链接</a></p> <p>[^2]: 如果你有需要,可以通过 DEVONthink 把 RSS 文章转换——而且是批量转换——为富文本或 PDF。后者的话,分页或连续的都行。 [^3]: 大概率,懂得 RSS 订阅技术的老古董们,也不是这些推广的目标用户。</p>

2022/9/23
阅读更多

用 Safari 翻译外文电子书和文档

<img src="https://imgproxy.citrusreader.com/qAfzE7TX7XW8jI6vB77g-MuGqcC61pDRyaUE6JKV3Jo/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMTAxMjE3NTQyMTgzOS5qcGVn" referrerpolicy="no-referrer"><br><p><font color="orange">2023-02-26 更新:支持 XHTML 文件,GitHub 中的动作和代码已经更新。</font></p> <p><font color="#008000">声明:本方案系过渡方案,旨在输出 PDF 或 Word 格式的翻译文件。如果您需要翻译 EPUB 或其他文本格式的电子书,请参考更好的方案 <a href="https://utgd.net/article/10001">《将外文电子书翻译成双语对照版本,并在任何设备上阅读》</a>。另,本文作者不会提供任何电子书或其翻译件的下载,请合理使用您合法取得的文件。</font></p> <p>许多刚刚上市的电子书,往往是英文或其他语言先行,随后半年甚至几年才发布中文版,以至于孜孜于阅读的读者们,要么悬梁刺股苦学外语,要么草船借箭淘台版书,更多的则是嗷嗷待哺干等简体中文版(但不少书可能永远不会有中文版)。</p> <p>其实相当一部分书,我们读的是书中“资讯”而非阅读享受,尤其是近年刚刚出版、尚未成为书林经典的书籍——特别是《解密 Instagram》《巨人的工具》等人物传记和商业书——主要目的就是看个故事、学点技巧,而非读小说、诗歌或历史那样沉浸其中。一旦明确了“获取资讯”这一目的,使用机器翻译也就无伤大雅。</p> <p>本文将分享一套外文 epub 转换为中文文档的方法[^1],支持输出 Word 文档或者 PDF,保留原始排版风格,无需安装任何软件,不用注册任何帐号,还不用掏钱。</p> <figure> <img src="https://imgproxy.citrusreader.com/2VApRuoI35x19D3HD-hL0rag6_WWXv10kae9WUMwTCs/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMDgwNDYwOC0xMTk2eDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>原文与翻译后的文档</figcaption> </figure> <p>文章演示的具体操作在 macOS 下进行,由于不依赖特定工具,Windows 甚至 iOS 也可以如法炮制。</p> <h2>转换流程</h2> <p>epub 其实是一份打包好的“网页”,其结构比较复杂,拥有表格、配图、矢量文件等元素,大概是这个原因,你可以搜到不少“在线 PDF 翻译”“在线 Doc 翻译”,却很难觅得“在线 epub 翻译”。所谓的 epub 翻译,其实就是把 epub 文件转换成其他常见格式后再进行翻译,收获的文件也以 Doc 或 PDF 居多。</p> <figure> <img src="https://imgproxy.citrusreader.com/EwxRzpqN3ZFjLIrK0kdOnYAfc52NHDCISSozl4TkLj8/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMTAwNzgxNS0xMjgweDcxNi5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>转换-翻译流程</figcaption> </figure> <p>并不推荐直接使用格式转换工具处理 epub,如果是纯文本电子书倒也无可厚非,但在转换带图片的 epub 时,“傻瓜式”的一键格式转换工具容易造成排版错乱,所以本文更推荐手工操作。</p> <p>另外,似乎直接将 epub 打印成 PDF、旋即使用 PDF 翻译工具也是一条诱人的捷径,实际上,将外语译成中文后文字篇幅会有较大变动,排版会错得离谱、不是稀稀拉拉就是溢出页面,即便本文的要求已经放低到“获取资讯”而不奢求享受,读这种支离破碎的文档也实在是摧残自己。</p> <p>总之,接下来的方法介绍就从 epub 电子书的预处理开始。</p> <h3>将 epub 电子书预处理为 Doc</h3> <p>处理 epub 的第一步就是将其还原为基础的“材料”。如前文所述,一个 epub 文件本质上是一个压缩包,所以我们可以径直将其后缀名改为 <code>.zip</code> 并双击打开,通常马上可以看到其内部结构。</p> <figure> <img src="https://imgproxy.citrusreader.com/WdbX5cnjC5jteB-VmUhoa2lpF5fuITakShRGVSMqkdE/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMDY1MDg3OS05MTB4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>一份 epub 文档的内部结构</figcaption> </figure> <p>奇怪的是,我从 macOS Big Sur 开始就发现系统经常无法解压这些改过后缀名的压缩文件,不过随便下载一个第三方解压工具就能打开,这一现象无法验证是否为个案,建议遇到类似问题也试试第三方工具。</p> <p>从上图中可以看到,epub 内部拥有大量 HTML 文件,这也是将 epub 视为本地网页的原因。当然,epub 不是从网上加载图文素材,而是从本地调用配图。现在,需要将这些分散的 HTML 文件合为一份,以便随后将其转换为独立文件,而非当前凌乱的状态。“合并 HTML”听上去是个偏门得不能再偏的需求,其实实现起来非常简单:HTML 也是一种纯文本文档,完全可以用一行命令来搞定:</p> <pre><code>cat 文件1.html 文件2.html 文件3.html …… &amp;gt; 输出文件.html </code></pre> <p>其中 <code>文件1.html 文件2.html 文件3.html</code> 犯不着手动输入,直接全选 epub 内部的 HTML 文件后拖进终端(Terminal)即可。当然,为了保留书籍的章节顺序,拖进去的文件也应当按顺序排列,为此可以先选中第一份 HTML(编号可能是 <code>000</code>),按住 <code>⇧Shift</code> 键后再选中最后一份 HTML 文件,这样拖入的文件就是顺序排列的。</p> <p>偶尔也会遇到解压后只有一份 HTML 文件的情况,那就可以不碰命令行,直接跳到之后的步骤。现在,把合并后的 HTML 文件放在 epub 文件夹中,使其可以读取到 epub 中的配图等素材,否则会丢失图片。接着在浏览器中打开这份 HTML,即可看到保留了原电子书排版的离线网页。现在你有两个选择,如果待翻译的是一份小册子或仅仅是书中的一章,页数不多,那么可以马上使用 Safari 的自带翻译引擎,不用再做多余的事情即可得到中文页面!</p> <figure> <img src="https://imgproxy.citrusreader.com/ytb0LT3jN9QHJ8-fdti5m1HtXz3YpL_TI1p0zsub4_U/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMDYxNjc0MC0xMjgweDY5OC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>Safari 自带翻译功能能够应对短篇文章</figcaption> </figure> <p>如果你想翻译的是整本书,则 Safari 可能会报错,不过根据我的经验,这个阈值大概是十万字——一般的书都够用了。配合<a href="https://utgd.net/article/4991">《一种几乎永不失效的网页中英对照翻译方案》</a>中的中英文对照翻译方法,还可以输出一段英文、一段中文的文档,方便比对阅读。</p> <figure> <img src="https://imgproxy.citrusreader.com/k6WmYRnsmEGwRXY_qcK7oxm-z_63Z88fiu12ZCqWEfU/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMDcyMDQwOC05NTB4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>中英对照翻译</figcaption> </figure> <h3>将外文 Doc 翻译成中文文档</h3> <p>继续处理 Safari 中的文件。首先,按下 <code>⌘Command-A</code> 全选当前页面的全部内容,将其复制到 Pages 或 Word 等富文本编辑器中(这样才能保留原文排版),并导出为 Doc 或 Docx 格式。这一步视电脑性能而耗时不同,作为参考,导出7万字左右、每章有几幅插图的英文电子书大概需要十几秒,而字数更多、配图更丰富的书籍可能会更耗时。</p> <figure> <img src="https://imgproxy.citrusreader.com/Yp-E6Aj8zlkiFR_KELQPRmElpQroD-JybaOO5OwkJUg/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMDg0NjU2Ny0xMTU1eDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>将 Safari 页面复制到 Pages</figcaption> </figure> <p>获得 Doc(包括 Docx 格式)文件后,就可以着手翻译工作。</p> <p>等到导出了 Doc 文件,整个翻译过程已经成功了一大半,毕竟翻译 Doc 文档的工具选择余地很大。搜索一下 <code>Doc 在线 翻译</code> 就能获得一堆工具,我通常选用的是 <a href="https://www.deepl.com/translator">DeepL</a>。这些翻译工具的使用方式都大同小异,上传文件并选取目标语言后,即可开始翻译。</p> <figure> <img src="https://imgproxy.citrusreader.com/XxTOYY0YUjdSYVNc-_RSKWv5P6u_0jpmgNPrV2iZw7w/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMDc0MjkzNi04ODd4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>使用 DeepL 翻译 Doc 文件</figcaption> </figure> <p>由于每本电子书的篇幅、排版和配图数量差异较大,很容易遇到某个翻译工具崩溃而其他工具奏效的情况,多试几款翻译工具即可,除了 DeepL,我还备有 <a href="https://www.onlinedoctranslator.com/zh-CN/translationform">Doc Translator</a>、<a href="https://pdf.youdao.com/">有道文档翻译</a> 或者 <a href="https://support.google.com/docs/answer/187189?co=GENIE.Platform%3DDesktop&amp;hl=zh-Hans">Google Docs 的翻译功能</a>。注意,如果你使用的是在线服务而非离线工具,请勿翻译任何内部文档,避免造成数据泄露、染上麻烦。</p> <p>翻译完成后可以下载 Doc 文件,有些翻译工具也提供了 PDF 格式下载,青菜萝卜各有所爱,用哪种格式全看读者自己的需求。下面是我下载的 PDF 格式译本,基本保持了原文的排版,标题底色、引言居中、首字放大(Initial)等细节都有保留,就“获取资讯”而言,这样的排版效果没什么好挑剔的。</p> <figure> <img src="https://imgproxy.citrusreader.com/4HZbaezwJ430zyQjBTL0tC6Gv061clT1yr2P_JqYZqU/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMDkzMTEzNi02MjV4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>翻译后的文档保留了原文排版</figcaption> </figure> <h2>其他格式电子书的处理</h2> <p>外文书籍并非总是 epub 格式,比如美亚(美国亚马逊)上购买的书籍就是 azw3 格式,有些较早的书籍可能还提供 mobi 格式,均需要先转换成 epub 才能处理。这里涉及一些 DRM(Digital rights management,数字版权管理)保护的问题,道德方面本文不做评价,但是因为我国大陆地区《著作权法》豁免范围较小[^2],故本文不能介绍“去除保护”相关方法,只能介绍后续的格式转换。</p> <p>下图是我以 Kindle 为例整理的电子书格式发展关系图,理论上除了最新的 KFX(一种较新的 Kindle 电子书格式,不过我还没买到过这种格式的作品),mobi 和 azw3 都可以转换为 epub 并尽可能保留原始排版。</p> <figure> <img src="https://imgproxy.citrusreader.com/zzTvqni4dYtfC_FXODEdAgsJSB9-yoX7udqBxWvxzIA/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMDkxODI0OS0xMTk1eDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>常见电子书格式</figcaption> </figure> <p>推荐使用的格式转换工具是 Calibre,它覆盖了上图 KFX 以外的多数格式,从美亚到日本、台湾主流书商处买到的电子书基本可以转换(只要书商提供电子书下载)。而只要得到了 epub 格式的文件,剩下的翻译方式则与前一节无异。</p> <figure> <img src="https://imgproxy.citrusreader.com/Q2FIulgQo5kslJWwLWYf6bIgVo3z_zSCH-xcK186ylI/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMDkwOTIwMDU0ODMxNi05NzR4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>Calibre 可以转换多种电子书格式</figcaption> </figure> <h2>小结</h2> <p>中学时,常被老师教导“(hǎo)好读书不好(hào)读书,好(hào)读书不好(hǎo)读书”,这说的是年轻时脑力正盛却不喜欢读书,等日后来劲儿了早已精力不再,以此劝君珍惜光阴;现在读外文书、特别是有时代性和时效性的商业书,我也喜欢用同样一句话鞭策自己,意思却大有不同,前后半句也要倒过来念,谓之“好(hào)读书不好(hǎo)读书,好(hǎo)读书不好(hào)读书”:发现一本好书的时候没有中文版,等条件允许、出了中文版,这些书早已成了明日黄花或者变成“全民读物”,让人失去了阅读的兴趣[^3]。</p> <p>就以获取资讯为目的的外文书而言,不如趁刚上架时就自制一份机器翻译版,只为了解故事和偷师学艺而已;如果此书果真经得起时间检验,等中译本出版后再读一遍也不吃亏。</p> <p>[^1]: 之所以是 epub,是因为针对这一格式的解决方案几乎没有,而美亚、日本书商、台湾书城的不少书籍又是 epub 或者可以转换成 epub。 [^2]: 就 DRM 保护这一技术措施而言,我国《著作权法》第50条比台湾地区“著作權法”第80条、美国 DMCA 的豁免范围都更窄,只有封闭式列举的 5 种情况,即便是“个人学习使用”也属违法。 [^3]: 不是说“全民读物”就不好,而是过时,比如大家都知道《乔布斯传》后,再有人对此书夸夸其谈,你可能就会觉得他很落伍。</p>

2022/9/12
阅读更多

一种几乎永不失效的网页中英对照翻译方案

<img src="https://imgproxy.citrusreader.com/W_NTRvuZ3SKKSruF2qFooTLJvmMGzV1HxePtT7qiEvU/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOS8yMDIyMTAxMjE3NTQxMDEzOS5qcGVn" referrerpolicy="no-referrer"><br><p><font color="orange">2024-03-05更新:将标题译文直接置于原标题之后,而非另起一行,避免“双额头”。</font></p> <p><font color="orange">2024-02-15 更新:兼容没有标签包裹的文本段落(例如 Graham 和 Minsky 的网站),GitHub 中的动作已更新。</font></p> <p><font color="orange">2023-02-26 更新:支持翻译 XHTML 文件,GitHub 中的动作和代码已经更新。</font></p> <p><font color="#008000"><b>不要跳过这段文字:</b>本文提供的是一套方案,而不是一个开箱即用的产品级软件,如果您不读文章而直接下载我提供的工具,您不会获得任何效果。请仔细阅读文章。尤其请注意,文中的 Bookmarklet <b>不能、不能、不能</b>直接翻译网页,需要配合浏览器自带翻译功能或翻译插件使用。</font></p><font color="#008000"> <p>又,如果您使用中文界面,请在下载 Keyboard Maestro 版动作后,将“Select……in the menu”步骤中的英文项目改为菜单栏中的对应中文,否则 Keyboard Maestro 无法正确运行相应项目。</p> </font><p><font color="#008000">另,Safari 等浏览器有严格的权限控制,您需要先根据“实现”一节中的步骤开启 Javascript 权限,才能使用本文的方案。</font></p> <p>网页翻译,做成不难,做好不易。算上种种套皮服务,网页翻译工具可谓人才辈出;读者若不满足于不求甚解,则难免要流转于原文和译文之间——遑论机器翻译的错漏在所难免——可惜正视对照阅读之需求的翻译工具,却是凤毛麟角,沅江九肋。</p> <p>本文将“对照”与“翻译”分而治之,既不依赖具体某个翻译服务,也不限于操作系统和浏览器,无论电脑、平板或手机,也不管 Chrome、Firefox 或 Safari,均得取一瓢饮,应是久治之方。</p> <figure> <img src="https://imgproxy.citrusreader.com/jC4tJP3yWWZDJA4Q3xIo_L1uuaMM26EWi3OoLOr0Dok/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOC8yMDIyMDgxODEyMjQxMDcxMS0xMjgweDY3OC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>在电脑和手机浏览器上均可中英对照翻译</figcaption> </figure> <ul> <li><a href="https://github.com/BlackwinMin/Keyboard-Maestro-gallery/tree/master/Safari%20Translate">Keyboard Maestro Macro 下载</a>[^1]</li> <li><a href="javascript:(function()%7Bfor%20(var%20node%20of%20document.querySelectorAll(%27p%2C%20li%2C%20h1%2C%20h2%2C%20h3%2C%20h4%27))%20%7B%20var%20copy%20%3D%20document.createElement(node.nodeName)%3B%20copy.textContent%20%3D%20node.textContent%3B%20node.parentElement.insertBefore(copy%2C%20node.nextElementSibling)%3B%20node.setAttribute(%27translate%27%2C%20%27no%27)%3B%20node.setAttribute(%27class%27%2C%20%27notranslate%27)%7D%20%7D)()%3B">Bookmarklet 浏览器插件(需拖到网址收藏夹后使用)</a></li> </ul> <h2>困境</h2> <p>曾有嗜阅读者,遇现成工具如获至宝[^2],但这些服务不是倒闭,就是开始大兴土木、建造封闭 App,若是为了翻译功能而抛弃整个浏览器,只怕是发屋求狸,惜指失掌。</p> <p>而纵观几大翻译引擎提供商,Google 限制调用(包括设置验证码和禁止使用部分网页组件),百度自由度不高,微软则干脆对普通用户关闭了网页翻译渠道,即便是有志编写工具的进阶用户,似乎也落入了指雁为羹的尴尬境地。我曾编写了一款网页分屏翻译插件,也随着 Microsoft 相关服务的下线而失效。</p> <figure> <img src="https://imgproxy.citrusreader.com/XduVqdxVYgHK-wLm2CiQzaaePG3iWw82srJoUsromRs/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOC8yMDIyMDgxODEyMjczNDE4OS0xMDkzeDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>网页分屏翻译,基于Microsoft翻译引擎(已失效)</figcaption> </figure> <p>究其根本,在于对照翻译毕竟是对照与翻译之交集,其外延之小,大概不足以支撑起一个市场,也就少有人涉足。寥寥几家服务,也多需要付费,往往还是不讨喜的订阅制。</p> <h2>思路</h2> <p>解决之道,当在于分解“对照”与“翻译”,在电脑上肆无忌惮地实现前者,而在各家服务所提供的免费额度之内,尽情享用后者——实际上,Google 和苹果的翻译限额几乎无限。前文提及的 Microsoft 分屏翻译工具(已失效),即是将翻译前后的网页嵌入同一个页面内;现在的方案,则是将网页内容原地复制,一段翻译、一段原样不动,由此生成双语对照翻译的页面。</p> <p>对照之工,可在本地完成,无涉任何服务商;翻译一事,仍由翻译引擎代劳,Chrome 和 Edge 的翻译功能和三方插件自不待言,近几代的 Safari 浏览器也已鸟枪换炮,配备了自带翻译引擎,均可使用本文方案。</p> <h2>实现</h2> <p>拆分实现,好在既能依托自动化工具,一步到位;也可以寄生于浏览器、不安装任何插件或软件,只不过多一两步操作。鉴于需要使用 Javascript 调整网页布局,使用本文方案前,需运允许浏览器(以下演示均以 Safari 为例,其他浏览器请自行调试)运行 Javascript:</p> <ol> <li>在 Safari 设置的“General”栏中,开启“Show Develop menu in menu bar”;</li> <li>在 Safari 的“Develop”菜单中,<strong>勾选“Allow JavaScript from Apple Events”(这一步不可或缺)</strong>;</li> <li>点击“Allow”,确认。</li> </ol> <figure> <img src="https://imgproxy.citrusreader.com/ryE71EMfogOKAGi-maTaCGyMPG1CT0u5uukWN0MN68Q/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOC8yMDIyMDgxODEyMjcwMjcyMy0xMjgweDQ3Ny5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>允许 Safari 运行 Javascript</figcaption> </figure> <p><font color="grey">注:经读者提醒,在不同版本的 Safari 中,“show developer menu”的位置有差异。例如在 15.5 版本中,该选项位于“Advanced”。</font></p> <p>Keyboard Maestro 最适合处理此类分步骤的杂事,以 Safari 为例,已安装文首所列 Keyboard Maestro Macro 的读者,启用之后,在所需翻译的网页按下 <code>⌘Command-K</code>,稍等即可获得对照翻译的页面[^3]。使用 Chrome 或其他浏览器的读者,也只需调整 Keyboard Maestro Macro 的最后一步,让它启动您所用浏览器的翻译功能即可。</p> <figure> <img src="https://imgproxy.citrusreader.com/t9toEy5NLfx7_kMxY7Ya1QzEvTLnBbt3n3OqKhGUtBA/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOC8yMDIyMDgxODEyMjYzMzcxOS03ODZ4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>中英对照翻译网页</figcaption> </figure> <p>若没有安装 Keyboard Maestro,或者想在 iOS 上对照翻译,则可尝试 Bookmarklet 版本的工具。将 <a href="javascript:(function()%7Bfor%20(var%20node%20of%20document.querySelectorAll(%27p%2C%20li%2C%20h1%2C%20h2%2C%20h3%2C%20h4%27))%20%7B%20var%20copy%20%3D%20document.createElement(node.nodeName)%3B%20copy.textContent%20%3D%20node.textContent%3B%20node.parentElement.insertBefore(copy%2C%20node.nextElementSibling)%3B%20node.setAttribute(%27translate%27%2C%20%27no%27)%3B%20node.setAttribute(%27class%27%2C%20%27notranslate%27)%7D%20%7D)()%3B">这个链接</a> 拖到或添加到浏览器收藏夹,然后在需要翻译的页面点击该收藏项目图标,首先会得到一个内容被复制过的网页;随后,运行浏览器自带的翻译功能,旋即可看到对照翻译效果。</p> <figure> <img src="https://imgproxy.citrusreader.com/r77mQ7vZaVah_IA4GyjAHkXBHLmaI2Tb2_7uMaUA8mY/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOC8yMDIyMDgxODEyMjQ0MDgwNi03MzF4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>Safari for iOS 上也可以翻译</figcaption> </figure> <h2>拓展:下载中英对照翻译的 PDF</h2> <p>浏览器如通渠中之地,对照翻译工具大可与其他功能结合,如虎添翼。阅读模式与对照翻译相得益彰,可撇去浮渣,清爽易读;而结合 @Hum 发明的<a href="https://utgd.net/article/8492">网页抓取方法</a>,诸君还能够将对照翻译、排版得当的网页下载到本地,方便日后细嚼慢咽,以免仓促。</p> <figure> <img src="https://imgproxy.citrusreader.com/Yue5AE0njEw1JzvtL7TWMbFgCxGKw835QQtulOAdH2M/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOC8yMDIyMDgxODEyMjUxODg0MC01NTF4NzIwLnBuZw" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>下载中英对照翻译的网页为 PDF</figcaption> </figure> <p>此外,翻译的对象并不限于网页,但凡是一个 HTML 格式的文档,也可以对照翻译。只需在浏览器中打开 HTML 文档,同样可以运行对照翻译工具——当然,如果不需要对照,也能借用浏览器的翻译引擎获得译文,此法不受服务器配额限制,适合大量翻译文献资料。</p> <figure> <img src="https://imgproxy.citrusreader.com/LA0ET_BHjb5rICjEUDLKKwcSNDlD1haezcw5wrzmQkw/raw:1/aHR0cHM6Ly9jZG4udXRnZC5uZXQvYXNzZXRzL3VwbG9hZHMvMjAyMi8wOC8yMDIyMDgxODEyMjYwMDkyNS0xMTg0eDcyMC5wbmc" alt="Alt text" referrerpolicy="no-referrer"> <figcaption>中英对照翻译本地文档</figcaption> </figure> <p>HTML 格式或许陌生,而 epub 格式电子书则尽人皆知,实则后者不过是前者的变种,稍作加工、还原为 HTML,便也能翻成中文。大量尚无中译本的原版资料,若能获取去电子书,便可以顺利转为一段原文、一段译文的文档,先人一步,朵颐舶来佳肴。此话题,可见<a href="https://utgd.net/article/6901">《用 Safari 翻译外文电子书和文档》</a>一文。</p> <p>[^1]: 直接下载的动作仅兼容英文系统,其他语种的用户请将最后一步的 Safari 英文菜单改为您所用的语言。 [^2]: 最著名的可能是“彩云小译”。 [^3]: Safari 的翻译功能需要联网。</p>

2022/8/20
阅读更多

推荐订阅

::: tip 全部站点请见 [此处](https://hot.zyw.asia/#/list) ::: | 哔哩哔哩 | 微博 | 知乎 | 36 氪 | 百度 | 少数派 | IT 之家 | 澎湃新闻 | 今日头条 | 百度贴吧 | 稀土掘金 | 腾讯新闻 | | -------- | ---- | ---- | ----- | ---- | ------ | ------- | -------- | -------- | -------- | -------- | -------- |

| ENG | 简体中文 | 日本語 | 한국어 | | --- | -------- | ------ | ------ | | en | zh | ja | kr |