Androidで選択テキストをDeepLで翻訳できるようにする

AndroidでChromeやメールを翻訳しようとするとGoogle翻訳が立ち上がるが精度がいまいち。

DeepLで翻訳したいんだけど公式なAndroidアプリはないので

コピー→サイト(DeepL翻訳)に貼り付け→翻訳

と少し面倒。

ということでもう少しかんたんに翻訳できるようにしてみた。

使うのはDeepL APITaskerAutoShare

DeepLには1か月に‪500,000‬文字まで使える無料APIがある。これを利用させてもらう。

何かしらの方法でAPIに文字を送って、レスポンスを何かしらの方法で表示すれば良い。

今回は下記の方法で実現する。

1.Androidで選択したテキストをAutoShareでTaskerに送る
2.取得した選択テキストをTaskerのcurlコマンドでAPIにPOST
3.レスポンスをTaskerのシーンに表示

なおTasker、AutoShareは有料版を購入済。無料版の範囲でできるかどうかは不明です。

DeepLのAPI利用登録

公式サイトでAPIの利用登録をする
>>>DeepL APIで翻訳しましょう

アカウントを作ると認証キーが発行されれるので控えておく。

エンドポイントはhttps://www.deepl.com/docs-api。

AutoShareの設定

AutoShareはTaskerのプラグイン。共有ボタンに独自アプリ的なものを追加できる。

1.AutoShare Comanndを作るためManage Commandsをタップ

2.「+」をおしてコマンド名を入力する。今回は「toDeepl」とした 。

AutoShareでの設定はこれだけ。Taskerへのトリガと作るだけのアプリらしい。

なおText ProcessorsでもできるはずなんだけどOppoのColor OSの制限?なのかうまく動かなかった。

Taskeでシーンを作成

最初に翻訳後のテキストを表示するための画面(シーン)を作成しておく。

表示する文字のグローバル変数は「%DeeplText」とした。

Taskeで翻訳タスク作成

taskerで新規タクスを作成する。今回は「deepl」とした。

【If 〜 Else 〜 End If】

Chromeで選択テキストをAutoShareCommandに送ると、テキスト以外にURLも送られる。

”選択テキスト”改行
httpから始まるURL

このままAPIに投げるとうまく翻訳できないので%astextに”http”が含まれるときだけダブルクォーテーションで文字を分割している。

目的のテキストは配列の2番目に入るので%text2となる。

httpが含まれない場合はそのまま%text2に変数を代入している。

【シェルで実行】

curl -X POST https://api-free.deepl.com/v2/translate -d auth_key=[認証キー] -d “text=%text2” -d “target_lang=JA”

curlコマンドでDeepLのAPIにテキストを投げている。元の言語は自動選択。レスポンスは日本語。

詳細は技術資料へ
>>>DeepL API技術資料

【Javascript】

var data = JSON.parse(local(“deepl”));
setGlobal(“DeeplText”, data.translations[0].text);

APIからのレスポンスはJSONなのでJavaScriptでパースする。

取得したテキストはグローバル変数に格納。今回はシーンに合わせ「%DeeplText」

Taskeでプロファイルを作成

新規プロファイルを追加する。
イベント→プラグイン→AutoShare→AutoShare→Command→Command Filter→toDeepl

これでAutoShereCommandでtoDeeplを選択するとdeelの翻訳タスクが実行される

まとめ的な何か

選択テキストにhttpやダブルクォーテーションが含まれる場合はうまく行かないのは目に見えてるんですがまぁいいかなと。

クリップボードのデータをTaskerで読み取れればもっと使いやすくなるだけど、Android10以降はセキュリティが強化されてて出来ない。なのでAutoShareで作ってみました。

そんなに使わないだろうけどまぁ自己満足ですw

コメントを残す

メールアドレスが公開されることはありません。