emacs-immersive-translate: Emacs 版本的沉浸式翻译(支持多个翻译后端)

immersive-translate 的启发,在 gptel 的基础上实现了类似的功能。

  1. 在 elfeed 中

  2. 在 info 中

  3. 在 nov 中

因为翻译文本是 overlay 的形式,所以理论上可以翻译任何段落。

主要有三个函数:

  1. immersive-translate-buffer :翻译当前 buffer
  2. immersive-translate-paragraph :翻译当前段落
  3. immersive-translate-clear :清除所有翻译

项目地址:GitHub - Elilif/emacs-immersive-translate

19 个赞

非常棒 :hugs: ,之前都是看网页版的手册

用过了,非常非常丝滑 :partying_face:

1 个赞

看了下安装要求,要先安装 gptel ? gptel 要求 openai api key,第一步就难倒了

immersive-translate 本身是没这个要求的

immersive-translate 免费版可能只能使用谷歌翻译,其他好些服务需要 api,可以查看他的列表:

emacs-immersive-translate 则是把这个沉浸式翻译功能搬进emacs里,同时使用 chatgpt 服务。目前 chatgpt的翻译效果还是比较接近好的,收费确实是一个门槛。

关于chatgpt: 我之前试过免费试用版chatgpt,但模型只有3.5,且有每分钟3次的限制,在这个包里基本没法使用,因为一个buffer就不知道有多少段落了,一个段落就会用掉一次。有条件的话,可以找些价格合理的第三方提供商试试。

效果看起来不错,收费确实是个问题。

用 gptel 的原因是:

  1. chatgpt 的翻译效果比较好
  2. gptel 提供的 gptel-request 函数完美符合我的需求,想着自己写也是重复造轮子,于是做罢。
  3. 最重要的一点:懒 :rofl:

你说的对,确实应该考虑到易用性,后续有空的话应该会添加更多的翻译服务,同时去掉 gptel 的依赖。

2 个赞

现在有很多那种代理 OpenAI API 支持国内支付的平台,所以没啥难度吧

@heisaari @seagle0128 现在重构了整个项目,去掉了 gptel 的依赖,以及支持多个翻译后端。目前支持的有:

后续会增加更多的翻译服务。

想要自己添加也很简单,详见 README

7 个赞

感谢你的工作,在 Nov 和 Elfeed 中阅读外语材料体验好了一大截。

我有一个需求希望作者可以考虑一下:增加段落翻译缓存。在网页版中是有相关功能的,这样翻译过一次的整段文本下次再次阅读打开的话,能减少一些费用消耗,特别是在使用 ChatGPT 作为后端时。

2 个赞

确实应该使用缓存,我研究一下怎么实现。

@BluePadge 方便去 Github 提个 feature request 吗,这样方便后续跟进。

2 个赞

简单来就是 hash 一下请求参数然后 hash 结果作为文件名,把请求内容存在这个文件里。下次请求相同的参数时候,hash 找对应文件,然后读文件的创建时间来决定是否缓存过期。

麻烦点可以用 sqlite 啥的

2 个赞

已经实现了,默认的缓存目录是 “~/.emacs.d/var/immersive-translate/”

你看看是否符合你的需求。

3 个赞

完美。感谢你的工作,太神速了~

你好 考虑一下增加微软翻译吗?

方便去 GitHub 提个 feature request 嘛,最好能提供翻译 API 等相关说明。

大佬好,请问这个包可以从 package-install 里面安装吗?

已提交到 MELPA ,不过需要时间审核。

目前可以通过 M-x package-vc-install RET https://github.com/Elilif/emacs-immersive-translate RET 来安装。

收到,谢谢您!

MELPA 审核好了,现在可以直接用 package-install 安装了。

1 个赞