■ Emacs 全般で利用できる設定


【お知らせ】


<2021/09/10 追記>
Emacs 27.1 で動作させるための暫定対策のコードを追加しました。

<2019/12/30 追記>
Emacs 26.3 になってからのようですが、google-translate が Args out of range のエラーを吐くようになりました。対策は以下に書かれていますので、参考としてください。

<2019/06/03 追記>
リージョンの矩形選択に対応しました。コメント行の翻訳文の選択などに使えると思います。

<2019/02/19 追記>
翻訳元の文章の加工方法を改善しました。

<2019/02/16 追記>
全面的に見直しを行いました。

【本題】


google-translate は大変便利なのですが、翻訳文章に改行が含まれていると正しく翻訳してくれません。また、日本語と英語の翻訳の切り替えも少し面倒です。
本設定により、この状況を改善します。

1) melpa から noflet と google-translate package をインストールする。

2) 以下の設定を行う。
(require 'noflet)
(require 'google-translate)

(defun google-translate-at-point-autodetect (&optional override-p)
  (interactive "P")
  (noflet ((google-translate-translate
            (source-language target-language text &optional output-destination)
            (when (use-region-p)
              ;; リージョンのテキストを取得する(矩形リージョンにも対応)
              (setq text (funcall region-extract-function nil))
              ;; マークを無効にする
              (deactivate-mark)
              (when (fboundp 'cua-cancel)
                (cua-cancel)))

            ;; 行頭、行末のホワイトスペースを削除し、文章の途中にある改行をスペース
            ;; に変換してから翻訳する
            (let ((str (replace-regexp-in-string
                        "\\([^\n]\\)\n\\([^\n]\\)" "\\1 \\2"
                        (replace-regexp-in-string "^\s*\\(.*?\\)\s*$" "\\1" text))))
              ;; C-u が前置された場合は、翻訳言語を選択する
              (if current-prefix-arg
                  (funcall this-fn source-language target-language str
                           output-destination)
                ;; 翻訳する文字列に英字以外の文字が含まれている割合(閾値:20%)で翻訳方向を決定する
                (if (>= (/ (* (length (replace-regexp-in-string "[[:ascii:]]" "" str)) 100)
                           (length str))
                        20) ; %
                    (funcall this-fn "ja" "en" str output-destination)
                  (funcall this-fn "en" "ja" str output-destination))))))
    (google-translate-at-point override-p)))

;; https://qiita.com/minoruGH/items/75eb4fab53e93653f999
;; https://masaoo.blogspot.com/2020/12/emacs-271-google-translate-ad-advice.html
(defun google-translate--get-b-d1 ()
  ;; TKK='427110.1469889687'
  (list 427110 1469889687))

;; キーバインドの設定(お好みで)
(global-set-key (kbd "M-g") 'google-translate-at-point-autodetect)

本設定では、翻訳する文章が日本語か英語かを判別し、他方へ翻訳します。翻訳する文字列に英字以外の文字が含まれている率で翻訳する方向を判断しています。(上記設定では 20% としています。)また、翻訳言語を変更したい場合は、 universal-argument(C-u)を付けてコマンド起動してください。

英文の Web ページを読む時は eww と組み合わせて利用すると便利です。Emacs は GUI で動かすと画像も表示できますので、Web ブラウザとしても十分に利用可能です。


<変更履歴>
  • 2019/02/15 このページを作成した。
  • 2019/02/16 全面的に見直しを行った。
  • 2019/02/19 翻訳元の文章の加工方法を改善した。
  • 2019/06/03 リージョンの矩形選択にも対応した。


最終更新:2021年09月10日 21:40