go-translate 更新到 v3

将 mpv 或 cvlc 可执行文件的文件夹添加到 PATH 环境变量。

或者设置 gt-tts-speaker 为 mpv/cvlc 的完整路径。

总之,确保 emacs 能发现 mpv/cvlc 等播放器的位置:

(executable-find gt-tts-speaker)

这个 gt-posframe-pop-render 弹出来的咋配置,目前这个有点丑。

文档中有。

go-translate/README-zh.org at master · lorniu/go-translate (github.com)

mpv 能找到,gt-tts-speaker 也设置了,仍然报这个错。

你的 mpv 安装路径是不是有空格?能不能贴一下你 gt-tts-speaker 的设置?

gt-tts-speaker 用的默认值nil,实际值是 C:\Users\xxx\scoop\shims\mpv.exe,没有空格.

要么不设置 gt-tts-speaker, 但是将 C:/Users/xxx/scoop/shims/ 添加进 Windows 操作系统的 PATH 环境变量;

要么设置 gt-tts-speaker 为 mpv 的全路径:

(setq gt-tts-speaker "C:/Users/xxx/scoop/shims/mpv.exe")

总之,确保 (executable-find gt-tts-speaker) 在 emacs 中不为空。

如果按上面的配置,没理由会报上述所说错误啊。如果还是有错误,麻烦调试下 gt-play-audio 方法。

时不时的出现这个问题。要另外设置proxy?

问题出在这里。用户名中有空格的话split-string就有问题了,这个条件没必要啊,直接判断就行了,为什么要分隔字符串?

(cl-defmethod gt-play-audio (data &optional wait)
  (unless (and gt-tts-speaker (executable-find (car (split-string gt-tts-speaker))))
    (user-error "You should install `mpv' first or config `gt-tts-speaker' correctly"))

我直接配置成这样是可以的。

(setq gt-tts-speaker "mpv")

为什么要分隔字符串

主要为了简化配置。通过这种方式,可以给播放器传递参数。比如:

(setq gt-tts-speaker "mpv --http-proxy=<proxy>")

最好是需要吧?我也不清楚,经常连接出错的话,大概率还是要挂代理的。

这样解决不了带空格路径的问题,可以加个args参数配置。

只要确保 mpv 能被 emacs 发现即可。

1 个赞

麻烦有在使用 go-translate 的伙伴帮我测试一下, 我这有问题

太牛了!已经替换了其他的工具在用这个包了,配置了2个engine,一个youdao,一个stardict,分别对应有网络无网络的情形!

请教下你的stardict是如何配置的?Windows和macOS好使不?

我是这么配置的,请参考。我是Mac的系统,用的挺好,没啥问题。

(setq gt-default-translator (gt-translator
                               :taker (list
                                       (gt-taker :prompt nil :if 'selection)
                                       (gt-taker :langs '(en zh) :text 'word :pick 'paragraph :prompt t))
                               :engines (list
                                         (gt-youdao-dict-engine)
                                         (gt-stardict-engine
                                          :dir (expand-file-name "~/Backup/Mac/stardict/")  ; 指定数据文件位置
                                          :dict "朗道英汉字典5.0"    ; 可以指定具体使用的字典
                                          :exact t)
                                         )
                               :render (list
                                        (gt-overlay-render :if 'selection) ; 如果翻译的是选中的文字,那么通过 overlay 方式渲染
                                        (gt-posframe-pop-render :if 'word :frame-params (list :height 40 :border-width 5)) ; 如果翻译的是单词,那么通过 posframe 方式渲染
                                        (gt-alert-render :if '(and read-only not-word)) ; 如果翻译的是只读 buffer 中的非单词,那么通过 alert 渲染
                                        (gt-buffer-render)))
3 个赞

@lorniu 不知道 go-translate 是否支持osx-dictionary?