SublimeText上でDeepLを呼び出す

最近エディタ上でちょっとした翻訳をしなければ成らないことがあり、 面倒なのでDeepLの無料版APIを使って、Sublime Text上から翻訳を呼び出せるようにしてみました。NeoVimでないのは、たまたまその作業をSublime Textでやっていたからです。
DeepL APIの登録を行う。
まずは、DeepL APIが使えるように DeepLで登録を行いましょう。 以下の2つが必要です。
DeepLのアカウントを作成する。
DeepL API のページで、API利用の登録を行う。
取り敢えず試すだけならば、無料枠で大丈夫です。以下に示すコードも無料枠を前提に書いています。
API登録が終わると、アカウント情報で APIキー を確認することができます。
DeepL APIを呼び出し翻訳するプログラムを作成する。
Sublime Text上から直接DeepL APIを呼び出すのは荷が重そうなので、APIを呼び出して翻訳を行うプログラムをPythonで書いてみました。
標準入力から原文を受けて標準出力に書き出すようにすれば何とかなるでしょう。
先ほど入手した APIキーは .env
ファイルに DEEPL_API_KEY=XXXXXXXXXXXX
という形式で保存しておいてください。
.env
ファイルはプログラムと同じフォルダでホームディレクトリのものに追加しても大丈夫です。
プログラムは以下のような感じです。やっつけで書いたのでエラー処理とかは書いていません。 実行方法は冒頭のコメントに書いているので確認ください。
# DeepL API 無料版を使って標準入力からのテキストを翻訳して標準出力に出力する # 使い方: python deepl.py -t j < input.txt > output.txt # cat input.txt | python deepl.py -t j > output.txt # 必要モジュールのインポート import requests import sys import argparse import os from dotenv import load_dotenv # コマンドライン引数の設定 parser = argparse.ArgumentParser(description="Translator(English <->Japanese) using DeepL API") parser.add_argument("-t", type=str, help="Target Language(j = Japanese, e = English)") args = parser.parse_args() # 翻訳元言語と翻訳先言語の設定 if args.t == "j": target_language = "JA" source_language = "EN" elif args.t == "e": target_language = "EN" source_language = "JA" else: target_language = "JA" source_language = "EN" # .envからAPIキーを取得する。 # .envファイルには、DEEPL_API_KEY="APIキー"のように記載する。 load_dotenv() auth_key = os.environ["DEEPL_API_KEY"] # 翻訳するテキストの取得 text = sys.stdin.read() # DeepL APIを利用して翻訳する。 url = "https://api-free.deepl.com/v2/translate" params = { "auth_key": auth_key, "target_lang": target_language, "source_lang": source_language, "text": text, } response = requests.post(url, data=params) # 翻訳結果の取得 translated_text = response.json()["translations"][0]["text"] # 翻訳結果の出力 sys.stdout.write(translated_text)
Sublime Textから翻訳ツールを呼び出す
Sublime Textからは範囲選択したテキストを呼び出すコマンドの標準入力に投げて、標準出力の結果を編集部分に挿入すれば OKです。
そんなことをやってくれるプラグインとして、 FilterPipes というものがあったので早速導入してためしてみました。しかし、最終更新日が8年前というのは Sublime Textの転落ぶりを感じますね。
以下の動画はFilterPipesを使って作ったプログラムを呼び出してみたサンプルです。
取り敢えず,急場凌ぎにつくったにしては便利でした。