go-translate 更新到 v3

;; pop-to-buffer
(setq gt-buffer-render-follow-p t)

;; window config
(setq gt-buffer-prompt-window-config
      '(display-buffer-reuse-window (inhibit-same-window . nil)))

在 evil 中,默认情况下使用 , 作为前缀触发快捷键。比如 , q 表示关闭。 当前,你那样绑定也没问题,但最好在 gt-buffer-render-init-hook 中绑定。

1 个赞

Add support for LibreTranslate.

2 个赞

有感于 【讨论】一种提升英文阅读体验的可能性, 增加了透析翻译的基本实现:

道友好,添加 Libre translate 后,翻译结果显示 http 400(如下图所示)

image

配置文件如下:

  (use-package go-translate
    :config
    (setq gt-langs '(en zh))
    (setq gt-default-translator
          (gt-translator
           :taker   (gt-taker :text 'buffer :pick 'paragraph)       ; 配置拾取器
           :engines (list
                     (gt-bing-engine)
                     (gt-youdao-dict-engine)
                     (gt-libre-engine))                             ;指定多引擎
           :render  (gt-buffer-render)))                            ; 配置渲染器
    )

LibreTranslate 可以使用官方服务,也可以使用第三方或本地服务。

官方服务需要购买 token,所以我就随便设置了一个第三方(https://translate.disroot.org/)。在我这里,它能正常使用,你的上述配置不会报错。

对于你的出错,应该跟 disroot.org 有关。因此建议你搜索并使用你那里可用的 LibreTranslate 服务。比如:

配置 host:

  (setq gt-libre-host "https://translate.terraprint.co/")

或指定 host:

  ... 
  :engines
  (gt-libre-engine :host "https://translate.terraprint.co/")
  ...

增加新接口,简化适用于多场景的翻译器的配置。

现在 :taker/engines/render 都可以是列表。对于 engines,使用所有可用的;对于 taker/render,使用第一个可用的。根据 :if 值进行可用性判定。

示例:

;; 对于选中的文本,不分段,并使用 posframe 渲染
;; 对于 Info,翻译当前段落,使用 overlay 显示结果
;; 对于只读文本,翻译整个 buffer 中的生词,并使用 overlay 渲染
;; 对于 magit commit buffer,将翻译结果插入到光标位置
;; 对于单词,使用 google 引擎翻译; 其他使用 deepl 引擎
(setq gt-default-translator
      (gt-translator
       :taker   (list (gt-taker :pick nil :if 'selection)
                      (gt-taker :text 'paragraph :if (lambda (&rest _) (derived-mode-p 'Info-mode)))
                      (gt-taker :text 'buffer :pick 'fresh-word :if 'read-only)
                      (gt-taker))
       :engines (list (gt-google-engine :if 'word)
                      (gt-deepl-engine :if 'no-word))
       :render  (list (gt-posframe-pop-render :if 'selection)
                      (gt-overlay-render :if 'read-only)
                      (gt-insert-render :if (lambda (&rest _) (member (buffer-name) '("COMMIT_EDITMSG"))))
                      (gt-buffer-render))))
2 个赞

这个好评,原来我是设置了 3 个 gt-preset-translators 的,现在只需要设置一个,不用频繁切换了。