article_image

我目前的 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 步来改进我的方案——

  1. 将 FreshRSS 的数据库服务升级到 PostgreSQL。
  2. 部署一个开源的翻译服务 LibreTranslate 替代 Google Translate。
  3. 改进插件本身,使其支持 LibreTranslate 翻译。

你可以直接用我 Fork 并添加了 LibreTranslate 的版本,这个版本还修复了源插件无法在自动刷新时进行翻译的问题。后期我会尝试提一个 PR 到源仓库。

2024-11-23-更新:作者已接受了 PR,在源仓库也可以下载到相同的版本了。

我把打包后的插件放在了 Release 里,你可以直接下载。

🔗 Releases · yarin-zhang/FreshRSS-TranslateTitlesCN

通过 Docker 部署 FreshRSS 服务

由于整套方案都是基于 FreshRSS 实现的,所以你需要跳转到这篇文章,先把 FreshRSS 部署起来。

通过 Docker 部署 LibreTranslate 服务

LibreTranslate 是一个支持多语言翻译的轻量级开源工具,并且可以通过 Docker 快速部署。

🔗 Libretranslate - DockerHub

以下是部署步骤:

首先,下载并运行 Docker 容器,在终端中运行以下命令启动 LibreTranslate 服务:

docker run -d --name libretranslate -p 5000:5000 libretranslate/libretranslate

如果你是群晖 NAS,可以通过 Container Manager 进行部署。注意 5000 端口是 DSM 管理页面的端口,因此需要改为其他的,比如 5555 。


DSM Container Manager 配置
DSM Container Manager 配置

启动后需要检查服务是否运行。打开浏览器访问 http://【NAS 的 IP 地址】:5555,如果看到 LibreTranslate 的界面,说明服务已成功运行。


Web 界面和 API 地址是同一个
Web 界面和 API 地址是同一个

如果没有看到页面,但服务已经启动了。则需要检查容器日志,LibreTranslate 会自动下载 92 种语言翻译模型,这一步可能需要耗时几分钟到数十分钟,尽量确保你的网络可以正常连接到外网。在下载完成后,会显示翻译网页。


根据日志分析问题
根据日志分析问题

注意 Docker 网络地址。如果 FreshRSS 和 LibreTranslate 在同一台机器上运行,你需要确保在配置插件时找到 Docker 容器的内部网络地址,通常类似于 http://172.17.0.10

这里有一个注意点,由于 Docker 内部的通信是不走外部端口的,所以无论你将端口映射为 5555 还是其他,只要是 Docker 间的通信,比如从 FreshRSS 访问 LibreTranslate,仍然是访问 5000 端口。

因此,将其组合为 http://172.17.0.10:5000 ,稍后会将其用作翻译服务的地址。


查看并记录 IP 地址这一项
查看并记录 IP 地址这一项

安装并使用插件

为支持 LibreTranslate,我 Fork 了原始插件并进行了修改,添加了对 LibreTranslate 的支持。你可以通过以下链接获取最新版本:

🔗 Releases · yarin-zhang/FreshRSS-TranslateTitlesCN

  1. 下载插件
    从仓库中下载最新的插件压缩包,并将其解压到 FreshRSS 的插件目录 ./extensions 中。
  2. 启用插件
    在 FreshRSS 的设置页面中,启用插件并进行配置。
  3. 配置 LibreTranslate 地址
    在插件设置中填写 LibreTranslate 服务地址,例如 http://172.17.0.10:5000
  4. 勾选订阅源 你需要勾选需要翻译的订阅源,然后会为该订阅源的每一篇文章前插入中文标题。

保存配置后,下次更新订阅源时,插件将开始使用 LibreTranslate 翻译 RSS 标题。

疑难解答

2024-11-25-更新

Slack 会员群有读者在实践过程中遇到了一些问题,再补充一些可能出现的错误以及解决方案。

”英文文章的标题只是重复显示了一遍,没有翻译成中文“

这个问题通常是没有连接上翻译服务,需要在 FreshRSS 和 LibreTranslate 中分别查看日志。

在 FreshRSS 的日志中搜索 LibreTranslate(可以导出日志后搜索),如果有明确的 failed、No Response、400、500 之类的字样,表明翻译服务配置有误。


翻译失败的日志
翻译失败的日志

正确的日志应该类似这样,有明确的 200 OKsuccessful 字样。


正确的日志
正确的日志

这种情况下,首先直接访问 LibraTranslate 的网页服务,看看是否可以正常翻译内容。也就是文中提到的这句——

打开浏览器访问 http://【NAS 的 IP 地址】:5555,如果看到 LibreTranslate 的界面,说明服务已成功运行。

如果这一步没问题,继续检查 FreshRSS 和 LibreTranslate 是否在同一个网关下。需要网关地址一致,才能通过内部 IP 地址通信。


需要同一网关
需要同一网关

此外,还有一种可能是,libretranslate 的 IP 地址可能会在容器重启之后改变,需要注意。

由于 FreshRSS 的最短刷新时间是 20 分钟,期间反复手动刷新是不会再次翻译现有内容的。这导致排查和测试起来可能有点麻烦。你可以排除上述错误后,等待一小时再去尝试刷新订阅。

总的来说,排查的思路就是“根据日志报错信息,修改相关配置”。

使用体验

在实际使用中,配合 LibreTranslate 的 FreshRSS 翻译插件表现还是不错的。手机端也可以快速阅览英文文章的标题,只读自己感兴趣的英文内容了。

网页版效果
网页版效果

当然,这个方案目前也发现一些缺点,比如 LibreTranslate 本身的翻译质量是不如 Google Translate 的。不过胜在本地部署稳定可靠。

希望本篇文章能为有类似需求的用户提供参考。如果你也感兴趣,不妨试试这个组合。


author_avatar

#UNTAG Developer