Last active
September 8, 2023 15:47
-
-
Save masatoi/ec90d49331e40983427025f8167d01ee to your computer and use it in GitHub Desktop.
emacs deepl client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;; Install | |
;; requestが必要なので M-x package-install request などでインストールしておく | |
;; init.elなどでロードする | |
;; (load-file "/path/to/deepl.el") | |
;; キーバインドを設定しておく | |
;; (global-set-key (kbd "C-c t") 'deepl-translate) | |
;;; Usage | |
;; 翻訳したい部分をリージョン選択して設定したキーバインド、または M-x deepl-translate | |
;; 翻訳結果がミニバッファに出る。また、同じ内容がクリップボードにコピーされている | |
(require 'request) | |
(defvar deepl-auth-key) ; この変数にdeeplから発行されるキーを設定する | |
(defvar deepl-confirmation-threshold 3000) | |
(defvar deepl-endpoint "api.deepl.com") ; 無料版は api-free.deepl.com | |
(cl-defun confirm-send-long-string (&key retry) | |
(let ((send-it-p | |
(read-from-minibuffer | |
(if retry | |
"Please answer with \"yes\" or \"no\". [yes/no]: " | |
(format "It's over %S characters, do you really want to send it? [yes/no]: " | |
deepl-confirmation-threshold))))) | |
(cond ((equal send-it-p "yes") t) | |
((equal send-it-p "no") nil) | |
(t (confirm-send-long-string :retry t))))) | |
(cl-defun deepl-translate-internal (text source-lang target-lang success-callback) | |
(when (and (> (length text) deepl-confirmation-threshold) | |
(not (confirm-send-long-string))) | |
(cl-return-from deepl-translate-internal)) | |
(request (format "https://%s/v2/translate" deepl-endpoint) | |
:type "POST" | |
:data `(("auth_key" . ,deepl-auth-key) | |
("text" . ,text) | |
("source_lang" . ,source-lang) | |
("target_lang" . ,target-lang)) | |
:parser 'json-read | |
:success success-callback)) | |
(cl-defun deepl--output-to-messages (&key data &allow-other-keys) | |
(let ((translated-text (cdr (assoc 'text (aref (cdr (assoc 'translations data)) 0))))) | |
(kill-new translated-text) | |
(message translated-text))) | |
(defun deepl-ej (start end) | |
(interactive "r") | |
(let ((region (buffer-substring start end))) | |
(deepl-translate-internal region "EN" "JA" #'deepl--output-to-messages))) | |
(defun deepl-je (start end) | |
(interactive "r") | |
(let ((region (buffer-substring start end))) | |
(deepl-translate-internal region "JA" "EN" #'deepl--output-to-messages))) | |
(defun ja-char-p (char) | |
(or (<= #x3041 char #x309f) ; hiragana | |
(<= #x30a1 char #x30ff) ; katakana | |
(<= #x4e01 char #x9faf) ; kanji | |
)) | |
(defun ja-string-p (str) | |
(>= (cl-count-if #'ja-char-p str) 3)) | |
(defun deepl-translate (start end) | |
(interactive "r") | |
(let ((region (buffer-substring start end))) | |
(if (ja-string-p region) | |
(deepl-translate-internal region "JA" "EN" #'deepl--output-to-messages) | |
(deepl-translate-internal region "EN" "JA" #'deepl--output-to-messages)))) |
Author
masatoi
commented
Jan 16, 2021
- 翻訳結果をmessageとして出す他にkill ringに突っ込むようにした。
- 文字数に応じてお金がかかるため、長すぎる入力は確認を取るようにした
- regionに日本語文字(ひらがな、カタカナ、漢字)を3字以上含んでいるときには日英翻訳、そうでないときは英日翻訳するようにした
DeepL API Free だと https://api-free.deepl.com/v2/translate
なので変更できるようにしてみました。
--- deepl.el.orig 2022-02-01 20:54:31.103199131 +0900
+++ deepl.el 2022-02-01 21:16:25.836504027 +0900
@@ -13,6 +13,7 @@
(defvar deepl-auth-key) ; この変数にdeeplから発行されるキーを設定する
(defvar deepl-confirmation-threshold 3000)
+(defvar deepl-endpoint "api.deepl.com")
(cl-defun confirm-send-long-string (&key retry)
(let ((send-it-p
@@ -30,7 +31,7 @@
(not (confirm-send-long-string)))
(cl-return-from deepl-translate-internal))
- (request "https://api.deepl.com/v2/translate"
+ (request (format "https://%s/v2/translate" deepl-endpoint)
:type "POST"
:data `(("auth_key" . ,deepl-auth-key)
("text" . ,text)
ありがとうございます。反映しました
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment