Google Chromeでは,内容を丸ごと翻訳しながらページを開けます。英語で書かれたWebサイトを日本語で読みたいときに便利です。
ページ内の見ている部分その場で原文と日本語訳を切り替えられるので,視点が迷子になりません。両方の言語を行ったり来たりしやすく,理解が早くなります。
ところが言語を変えるには,小さな翻訳アイコンをクリックして,出てきたウインドウ上でさらに英語・日本語などを選ぶ必要があります。何回も繰り返すのはきついですね。
そこで今回は,Chrome翻訳の言語を交互に切り替える(トグルする)スクリプトを紹介します。Keyboard Maestroでスクリプトにショートカットを割り振り,キーボード操作を実現する作戦です。
今回はmacOS専用です。Windowsユーザーのかたはすみません。
本質的な部分はAppleScriptなので,Keyboard MaestroはBetterTouchToolやAlfredなど別のアプリで代替できます。
あらましを教えて
Google Chromeで,翻訳の言語を交互に切り替える(トグルする)スクリプトです。AppleScriptを使い,GUIのアイコンやボタン要素を自動的に押して動作を実現します。
仕組みの都合上,macOSやGoogle Chromeの仕様変更によりすぐ動かなくなります。適宜修正してご使用ください。
Keyboard Maestro用マクロや,スクリプトファイルはこちらからダウンロードできます。
sttk3-ToggleTranslate.zip
どうやってインストールするの?
もしあなたがKeyboard Maestroを使っている場合,ダウンロードしたファイルのうち「Toggle Translate.kmmacros」をFinderで開いてください。Keyboard Maestroが開き,自動でインストールされます。「Toggle Translate.scpt」はなくてもかまいません。
マクロは,マクログループ「[sttk3] Chrome」の中です。最初は無効になっているので,メニューの View > Enable Macro などで有効化してください。初期設定では control+T のショートカットがついています。
BetterTouchToolやAlfredでは?
AppleScriptを実行するアクションにコードをコピペするか,スクリプトファイルを指定するだけです。ぜひいつものようにアクションとショートカットを設定してください。
使いかたは?
Google Chromeが前面にある状態でスクリプトを実行するだけです。翻訳アイコンが現れているページなら,自動的にそれを探し出して操作します。
ただのmacじゃできないの?
一応Automatorのクイックアクションを作ることで実現できます。しかしセキュリティが厳しく,クイックアクションに直接AppleScriptを書いても実行できません。
もしどうしても作りたい場合,次の構造にしてください。
- AppleScriptをアプリとして保存する
- クイックアクションで1のアプリを開く
作ったクイックアクション(サービス)のショートカットは,次の場所で設定します。
システム環境設定 > キーボード > ショートカット > サービス
これでまた少し仕事が速くなりました。今日もさっさと仕事を切り上げて好きなことをしましょう!
コードはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
(** * @file Chrome翻訳の言語を交互に切り替える * @version 2.2.0 * @author sttk3.com * @copyright © 2022 sttk3.com *) on run set sleep_seconds to 0.3 set key_search_window to "ページ内を検索" as text set key_translate_window1 to "このページを翻訳しますか?" as text set key_translate_window2 to "翻訳済み" as text tell application "Google Chrome" to activate delay sleep_seconds tell application "System Events" tell application process "Google Chrome" try -- 検索ウインドウが出ている場合,それを閉じる if (name of window 1 contains "ページ内を検索") then -- Escapeキーを押して検索ウインドウを閉じる key code 53 delay sleep_seconds end if -- 翻訳ウインドウ(ポップアップ)を取得する set target_window to my get_popup_window(key_translate_window1) if (target_window is missing value) then set target_window to my get_popup_window(key_translate_window2) end if -- 翻訳ウインドウが出ていなければ[このページを翻訳]ボタンを見つけて押す if (target_window is missing value) then -- メインウインドウを見つける。なぜか空のウインドウに邪魔されるので,タイトルがあるものに限定する set main_window to item 1 of (every window whose title of it is not "") -- [このページを翻訳]ボタンを見つける。なければ終了する set translate_buttons to every UI element of group 1 of toolbar 1 of group 1 of group 1 of group 1 of group 1 of main_window whose description of it contains "このページを翻訳" if (translate_buttons is {}) then return -- [このページを翻訳]ボタンを押す click item 1 of translate_buttons delay sleep_seconds end if -- 翻訳ウインドウ(ポップアップ)を取得する。なければ終了する if (target_window is missing value) then set target_window to my get_popup_window(key_translate_window1) if (target_window is missing value) then set target_window to my get_popup_window(key_translate_window2) end if end if if (target_window is missing value) then return -- 切り替え先の言語を決める。不明なら終了する try set lang_buttons to every radio button of tab group 1 of group 1 of group 1 of group 1 of group 1 of target_window whose (name of it ends with "語") and (selected is false) on error set lang_buttons to every radio button of tab group 1 of group 1 of group 1 of group 1 of group 1 of group 1 of target_window whose (name of it ends with "語") and (selected is false) end try if (lang_buttons is not {}) then set dst_lang_button to item 1 of lang_buttons else return end if -- 言語を切り替える click dst_lang_button delay sleep_seconds -- Escapeキーを押して翻訳ウインドウを閉じる key code 53 -- 通知する -- display notification dst_lang with title "現在の言語:" on error error_message number error_number log (error_message as text) -- skip end try end tell end tell end run (** * 検索・翻訳などのウインドウを取得する * @param {text} key_name "検索" "翻訳先の言語"などウインドウの特徴を示す識別子 * @return {window} *) on get_popup_window(key_name) set res to missing value tell application "System Events" tell application process "Google Chrome" -- 検索ウインドウや翻訳ウインドウを見つける set nameless_windows to every window whose name of it is key_name -- 対象のウインドウが出ている場合,それを返す if (nameless_windows is not {}) then if (every UI element of group 1 of item 1 of nameless_windows is not {}) then set res to item 1 of nameless_windows end if end if end tell end tell return res end get_popup_window |
このサイトで配布しているスクリプトやその他のファイルを,無断で転載・配布・販売することを禁じます。
それらの使用により生じたあらゆる損害について,私どもは責任を負いません。
スクリプトやファイルのダウンロードを行った時点で,上記の規定に同意したとみなします。
windowsではAHKを使って同じようなことをしていたのですが、macでは使えなくて困っていました。まさにこのスクリプトが欲しかったんです。有益な記事をありがとうございます。
どういたしまして! 役に立ったようで嬉しいです。