将Emacs和Google翻译结合

能否将Emacs和在线翻译工具,比如Google翻译相结合? 似乎目前翻译的词典比较多,但是整句整段的翻译不知道该怎么做。

我想把这样的过程自动化: “将原文本(英语)粘贴在Google翻译的左边文本框,选择翻译设置从英文到简体中文,然后点击翻译,最后复制右边文本框中的翻译结果”

不知道有没有什么好方法?

1 个赞

已有轮子。 就叫google-translate

1 个赞

试用了一下,我遇到一个正则表达式的问题,我想改一下,不知怎么写:

当我选中待译文本,调用google-translate-smooth-translate时,这个函数会首先将选中文本中内部存在的所有空格、回车、tab都替换为一个空格,我感觉其中的关键函数是:

(defun google-translate--trim-string (string)
  "Remove whitespaces in beginning and ending of STRING.
  White space here is any of: space, tab, emacs newline (line feed, ASCII 10)."
  (replace-regexp-in-string "\\`[ \t\n\r]*" ""
                            (replace-regexp-in-string "[ \t\n\r]*\\'" "" string)))

(defun google-translate--strip-string (string)
  "Replace spaces, tabs, line feeds (ASCII 10) and carridge
returns (ASCII 13) by a single space symbol."
  (replace-regexp-in-string "[[:space:]\n\r]+" " " string))

而我不想把所有的回车都替换掉,我想

  1. 当只有孤立的单个回车时,将回车替换为空格;
  2. 当连续多个回车时,只将一个回车替换为空格,其余回车保留
  3. 除回车外其他的替换不变

不知道这样的正则该怎么写?

感谢@LdBeth! 我把google-translate稍微修改了一下,可以C-ct

This is English.

变成:

:En: This is English. :END: 这是英文。

加了一个自定义的drawer—En,方便在org文件中操作。不过现有的google-translate删除了所有的换行符,这使得翻译出的文本丢失了换行符(请参阅楼上),这一点还不知道怎么改。

第一个函数不用改,只要把第二个的定义改为:

(defun foo... (string)
   (replace-regexp-in-string "\n+" "\n"
      (replace-regexp-in-string "\n{1}" " " string)))

不是很懂正则,不知道有没有bug……

好吧……其实这个和你的要求有出入,会把连续多个换行变成一个换行,而不是只变第一个。

在GNU Emacs的正式发行版中,正则表达式对环视是不支持的…

所以似乎[quote=“ziyuanjun, post:3, topic:2689”] 2. 当连续多个回车时,只将一个回车替换为空格,其余回车保留 [/quote]

是不太好做的。

我直接把google-translate--strip-string这个函数调用去掉了,缺点时需要在准备英文时做一点必要的格式调整,优点就是不会自动删分隔符。 目前其实已经很好用了!