当你在阅读英文文档时,English Teacher 可以像英语老师一样给你关心和关爱,手把手给你翻译英文句子。
English Teacher 支持 google, baidu , youdao 后端。
默认使用 google 翻译,如果你需要默认百度翻译
(setq english-teacher-backend 'baidu
english-teacher-backend-baidu-appid "xxxxxxx"
english-teacher-backend-baidu-secret-key "XXXXXXXXXXX")
use-package 设置
(use-package! english-teacher
:hook ((Info-mode
elfeed-show-mode
eww-mode
Man-mode
Woman-Mode) . english-teacher-follow-mode))
选择后端: M-x english-teacher-choose-backend 切换后端: M-x english-teacher-next-backend
自定义后端
实现 english-teacher-translate 这个多态方法, 这个方法接受要翻译的文本, 返回值的格式为 (cons result origin)
;;;###autoload
(cl-defmethod english-teacher-translate ((text t) (backend (eql english-teacher-backend-youdao)))
(english-teacher-backend-youdao-request "AUTO" "AUTO" text))
随后添加你的后端到 english-teacher-backends-alist
(add-to-list english-teacher-backends-alist 'your-backend)
项目地址:
用 eldoc 显示翻译结果
(setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function)
自定义显示方式
;;;###autoload
(defun english-teacher-eldoc-show-result-function (origin translation)
(eldoc-message (format "%s:%s"
(symbol-name english-teacher-backend)
translation)))
(setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function)
16 个赞
eldoc 是不是鼠标所处的句子改变,随后自动翻译? 如果是这个的话已经实现了。
Nasy
4
不是指那个啦,现在不是用 posframe 嘛,是说,如果能用 eldoc 来显示就能结合更多的东西了w(比如那些已有的 eldoc ui
我定义了一个
(defcustom english-teacher-show-result-function
'english-teacher-default-show-result-function
""
:type 'function)
如果需要用不同的ui去现实,直接实现这个方法就行了,忘记加到文档了
我设置了延迟翻译,并且缓存了翻译结果,目前我在我的电脑上还没遇到卡顿,如果网络是在太卡,肯定是会卡顿的
(defun english-teacher-follow-mode-translate ()
(when english-teacher-timer (cancel-timer english-teacher-timer))
;; (require (alist-get english-teacher-backend english-teacher-backends-alist))
(let* ((sentence (english-teacher-sentence-at-point))
cache func args)
(when sentence
(setq cache (english-teacher-get-cache sentence))
(setq func (if cache english-teacher-show-result-function #'english-teacher-translate-sentence))
(setq args (if cache (list (funcall english-teacher-format-result-function sentence cache)) (list sentence)))
(english-teacher-lazy-execute func args))))
已经添加了 eldoc 的显示 方式
这样子设置就行了
(setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function)
lyjdwh
11
配置
(use-package english-teacher
:hook ((Info-mode
elfeed-show-mode
eww-mode
Man-mode
Woman-Mode) . english-teacher-follow-mode)
:config
(setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function)
)
开启english-teacher-follow-mode
时报这个错是为什么呀?
Error in post-command-hook (english-teacher-follow-mode-translate): (invalid-function english-teacher-lazy-execute)
你用下面的配置试试,或者你提供以下可以复现这个问题的配置
最好是 git pull 一下,english-teacher-eldoc-show-result-function 是我今天加的函数,在本地测试是 ok 的
启动的时候用 emacs -Q -l h.el
注意,把下面的 load-path 改成 english-teacher.el 的路径
;;;; h.el
(setq package-enable-at-startup nil)
(setq package-archives
'(("org" . "http://orgmode.org/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("melpa" . "https://melpa.org/packages/")
("melpa-stable" . "http://stable.melpa.org/packages/")))
(package-initialize)
;; Bootstrap `use-package'
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(require 'use-package)
(use-package english-teacher
:load-path "~/tmp/english-teacher.el" ;;; 这里使用你的路径
:hook ((Info-mode
elfeed-show-mode
eww-mode
Man-mode
Woman-Mode) . english-teacher-follow-mode)
:config
(setq english-teacher-show-result-function 'english-teacher-eldoc-show-result-function))
lyjdwh
13
lyjdwh
15
嘿,刚又git pull了一下,emacs -Q 和我的配置 都没问题了!ヽ( ^∀^)ノ
lyjdwh
17
确实一编译就会出现刚才的情况,把elc文件删除就好了。
为啥会出现这种情况呐?
你再 pull 一下,然后删除所有 elc 文件应该就好了。
lyjdwh
20
嗯嗯,现在已经不自动编译,装下来就可以用了。赞一个!ヽ( ^∀^)ノ