LoginSignup
5
5

More than 5 years have passed since last update.

EmacsでMicrosoft Translatorを作ってみた を改良

Last updated at Posted at 2016-06-01

EmacsでMicrosoft Translatorを作ってみた を改良
Emacsで英和辞書や和英辞書をすぐに引けるようにしたい と同じ問題があった。

元のコードでは英語かどうかを判定するのに全文字がascii文字だけかどうかを調べているので、英文にスペイン語やドイツ語などの地名や人名が入っていると日本語と判定される。(El Niño エルニーニョとか)

翻訳範囲の指定方法を増やした。
C-u でパラグラフ
C-u C-u で単語
C-u C-u C-u でキーボードから単語や文を入力
引数なしでセンテンス
リージョンを指定していればそのリージョン

*Microsoft Translator*バッファをhelp-modeにしてqで消せるようにした。

C-M-m で起動。

(autoload 'microsoft-translator-translate "microsoft-translator" "" t)
(autoload 'microsoft-translator-auto-translate "microsoft-translator" "" t)

(defun microsoft-translator--get-string (arg)
  (or (cond ((stringp arg) arg)
        ((= arg 4)          ;C-u
         (thing-at-point 'paragraph))
        ((= arg 16)         ;C-u C-u
         (thing-at-point 'word))
        ((= arg 64)         ;C-u C-u C-u
         (read-string "Microsoft Translate: "))
        ((use-region-p)         ;リージョン指定
         (buffer-substring (region-beginning) (region-end)))
        (t              ;デフォルト
         (thing-at-point 'sentence)))
      ""))

(defun my-microsoft-translator-auto-translate (arg)
  "Read a string in the minibuffer with from-to is auto."
  (interactive "p")
  (let* ((translate-text (microsoft-translator--get-string arg)))
    (microsoft-translator--process
     translate-text
     (if (string-match "\\cj" translate-text) "Japanese" "English")
     (if (string-match "\\cj" translate-text) "English" "Japanese"))))
(advice-add 'microsoft-translator-auto-translate
        :override #'my-microsoft-translator-auto-translate)

(defun my-microsoft-translator--translating (translate-text from to)
  (with-current-buffer (get-buffer microsoft-translator-buffer-name)
    (help-mode)))
(advice-add 'microsoft-translator--translating
        :after #'my-microsoft-translator--translating)

(push '("*Microsoft Translator*" :height 0.5 :stick t) popwin:special-display-config)
(global-set-key (kbd "C-M-m") 'microsoft-translator-auto-translate)

ただし、日本語かどうかを判定しているので、日本語と英語の間の翻訳しかできない。
オリジナルのコードは英語かどうか(ascii文字だけから成っているかどうか)の判定をしているので英語と任意の言語の翻訳ができるが、上記の通り判定に失敗することがある。

参考:
漢字、ひらがな、カナカナにマッチ
Unicodeで「漢字」の正規表現

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5