AndroidでChromeやメールを翻訳しようとするとGoogle翻訳が立ち上がるが精度がいまいち。
DeepLで翻訳したいんだけど公式なAndroidアプリはないので
コピー→サイト(DeepL翻訳)に貼り付け→翻訳
と少し面倒。
ということでもう少しかんたんに翻訳できるようにしてみた。
もくじ
DeepLには1か月に500,000文字まで使える無料APIがある。これを利用させてもらう。
何かしらの方法でAPIに文字を送って、レスポンスを何かしらの方法で表示すれば良い。
今回は下記の方法で実現する。
1.Androidで選択したテキストをAutoShareでTaskerに送る
2.取得した選択テキストをTaskerのcurlコマンドでAPIにPOST
3.レスポンスをTaskerのシーンに表示
なおTasker、AutoShareは有料版を購入済。無料版の範囲でできるかどうかは不明です。
公式サイトでAPIの利用登録をする
>>>DeepL APIで翻訳しましょう
アカウントを作ると認証キーが発行されれるので控えておく。
エンドポイントはhttps://www.deepl.com/docs-api。
AutoShareはTaskerのプラグイン。共有ボタンに独自アプリ的なものを追加できる。
1.AutoShare Comanndを作るためManage Commandsをタップ
2.「+」をおしてコマンド名を入力する。今回は「toDeepl」とした 。
AutoShareでの設定はこれだけ。Taskerへのトリガと作るだけのアプリらしい。
なおText ProcessorsでもできるはずなんだけどOppoのColor OSの制限?なのかうまく動かなかった。
最初に翻訳後のテキストを表示するための画面(シーン)を作成しておく。
表示する文字のグローバル変数は「%DeeplText」とした。
taskerで新規タクスを作成する。今回は「deepl」とした。
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技術資料
var data = JSON.parse(local(“deepl”));
setGlobal(“DeeplText”, data.translations[0].text);
APIからのレスポンスはJSONなのでJavaScriptでパースする。
取得したテキストはグローバル変数に格納。今回はシーンに合わせ「%DeeplText」
新規プロファイルを追加する。
イベント→プラグイン→AutoShare→AutoShare→Command→Command Filter→toDeepl
これでAutoShereCommandでtoDeeplを選択するとdeelの翻訳タスクが実行される
選択テキストにhttpやダブルクォーテーションが含まれる場合はうまく行かないのは目に見えてるんですがまぁいいかなと。
クリップボードのデータをTaskerで読み取れればもっと使いやすくなるだけど、Android10以降はセキュリティが強化されてて出来ない。なのでAutoShareで作ってみました。
そんなに使わないだろうけどまぁ自己満足ですw