我目前的 RSS 阅读方案是,在 NAS 上部署了 FreshRSS,桌面端用网页来做大部分的 RSS 阅读。手机端则用 Fiery Feeds(iOS)、FeedMe(Android)做快速阅读。
由于 RSS 有较多外文订阅源,一部分源比较高频,我并不想每一篇都去精读,我想尽量做到“快速了解外文 RSS 的标题”,这样可以极大提高信息获取效率。
浏览器阅读时可以通过浏览器插件进行整页翻译,但很可惜大多数手机端 RSS 阅读器都没有这样的功能。
为了提高手机端快速阅览外文内容。我试着改进了一个 FreshRSS 插件 TranslateTitlesCN,使其支持了本地翻译方案 LibreTranslate,这样就不需要考虑网络的问题。
这张图是最终实现的效果,接下来我会介绍详细的步骤。
插件介绍
本文用到的是 FreshRSS-TranslateTitlesCN 插件,该插件已经支持 DeepLX 和 Google Translate 这两个在线翻译服务。
不过我使用过后发现经常出现网络方面的问题,导致时常无法进行 Google 翻译。改用 DeeplX 也需要注意频繁请求的问题。有时候还会由于插件写入速度过快导致 FreshRSS 默认的 SQLite 被搞挂了。
所以我决定用 3 步来改进我的方案——
- 将 FreshRSS 的数据库服务升级到 PostgreSQL。
- 部署一个开源的翻译服务 LibreTranslate 替代 Google Translate。
- 改进插件本身,使其支持 LibreTranslate 翻译。
你可以直接用我 Fork 并添加了 LibreTranslate 的版本,这个版本还修复了源插件无法在自动刷新时进行翻译的问题。后期我会尝试提一个 PR 到源仓库。
2024-11-23-更新:作者已接受了 PR,在源仓库也可以下载到相同的版本了。
我把打包后的插件放在了 Release 里,你可以直接下载。
🔗 Releases · yarin-zhang/FreshRSS-TranslateTitlesCN
通过 Docker 部署 FreshRSS 服务
由于整套方案都是基于 FreshRSS 实现的,所以你需要跳转到这篇文章,先把 FreshRSS 部署起来。
通过 Docker 部署 LibreTranslate 服务
LibreTranslate 是一个支持多语言翻译的轻量级开源工具,并且可以通过 Docker 快速部署。
以下是部署步骤:
首先,下载并运行 Docker 容器,在终端中运行以下命令启动 LibreTranslate 服务:
docker run -d --name libretranslate -p 5000:5000 libretranslate/libretranslate
如果你是群晖 NAS,可以通过 Container Manager 进行部署。注意 5000 端口是 DSM 管理页面的端口,因此需要改为其他的,比如 5555 。
启动后需要检查服务是否运行。打开浏览器访问 http://【NAS 的 IP 地址】:5555
,如果看到 LibreTranslate 的界面,说明服务已成功运行。
如果没有看到页面,但服务已经启动了。则需要检查容器日志,LibreTranslate 会自动下载 92 种语言翻译模型,这一步可能需要耗时几分钟到数十分钟,尽量确保你的网络可以正常连接到外网。在下载完成后,会显示翻译网页。
注意 Docker 网络地址。如果 FreshRSS 和 LibreTranslate 在同一台机器上运行,你需要确保在配置插件时找到 Docker 容器的内部网络地址,通常类似于 http://172.17.0.10
。
这里有一个注意点,由于 Docker 内部的通信是不走外部端口的,所以无论你将端口映射为 5555
还是其他,只要是 Docker 间的通信,比如从 FreshRSS 访问 LibreTranslate,仍然是访问 5000
端口。
因此,将其组合为 http://172.17.0.10:5000
,稍后会将其用作翻译服务的地址。
安装并使用插件
为支持 LibreTranslate,我 Fork 了原始插件并进行了修改,添加了对 LibreTranslate 的支持。你可以通过以下链接获取最新版本:
🔗 Releases · yarin-zhang/FreshRSS-TranslateTitlesCN
- 下载插件
从仓库中下载最新的插件压缩包,并将其解压到 FreshRSS 的插件目录./extensions
中。 - 启用插件
在 FreshRSS 的设置页面中,启用插件并进行配置。 - 配置 LibreTranslate 地址
在插件设置中填写 LibreTranslate 服务地址,例如http://172.17.0.10:5000
。 - 勾选订阅源 你需要勾选需要翻译的订阅源,然后会为该订阅源的每一篇文章前插入中文标题。
保存配置后,下次更新订阅源时,插件将开始使用 LibreTranslate 翻译 RSS 标题。
疑难解答
2024-11-25-更新
Slack 会员群有读者在实践过程中遇到了一些问题,再补充一些可能出现的错误以及解决方案。
”英文文章的标题只是重复显示了一遍,没有翻译成中文“
这个问题通常是没有连接上翻译服务,需要在 FreshRSS 和 LibreTranslate 中分别查看日志。
在 FreshRSS 的日志中搜索 LibreTranslate(可以导出日志后搜索),如果有明确的 failed、No Response、400、500 之类的字样,表明翻译服务配置有误。
正确的日志应该类似这样,有明确的 200 OK
、successful
字样。
这种情况下,首先直接访问 LibraTranslate 的网页服务,看看是否可以正常翻译内容。也就是文中提到的这句——
打开浏览器访问
http://【NAS 的 IP 地址】:5555
,如果看到 LibreTranslate 的界面,说明服务已成功运行。
如果这一步没问题,继续检查 FreshRSS 和 LibreTranslate 是否在同一个网关下。需要网关地址一致,才能通过内部 IP 地址通信。
此外,还有一种可能是,libretranslate 的 IP 地址可能会在容器重启之后改变,需要注意。
由于 FreshRSS 的最短刷新时间是 20 分钟,期间反复手动刷新是不会再次翻译现有内容的。这导致排查和测试起来可能有点麻烦。你可以排除上述错误后,等待一小时再去尝试刷新订阅。
总的来说,排查的思路就是“根据日志报错信息,修改相关配置”。
使用体验
在实际使用中,配合 LibreTranslate 的 FreshRSS 翻译插件表现还是不错的。手机端也可以快速阅览英文文章的标题,只读自己感兴趣的英文内容了。
当然,这个方案目前也发现一些缺点,比如 LibreTranslate 本身的翻译质量是不如 Google Translate 的。不过胜在本地部署稳定可靠。
希望本篇文章能为有类似需求的用户提供参考。如果你也感兴趣,不妨试试这个组合。