Keynoteの最前面の書類中の、現在表示中のスライドの表の選択中のセル中のテキストを取得してDeepLのREST APIを呼び出して指定言語に翻訳し、表のセルに翻訳後のテキストを書き戻すAppleScriptです。
DeepLのREST API呼び出しのためには、DeepL SE社のWebサイトで「DeepL API Free」(無料コース)か「DeepL API Pro」プランにサインアップして、API Keyを取得して、プログラムリスト中に記入したうえで実行してください。
▲実行前。Keynote書類上の表の翻訳対象のセルを選択して実行
▲実行後。Keynote書類上の表の翻訳対象のセルをに翻訳後の内容をストア
実際に使ってみると、けっこう翻訳に時間がかかるのと、一度翻訳した同じフレーズを再度翻訳させるのはコストがかかるため、ローカルに「翻訳キャッシュ」を作って、翻訳ずみの内容を再翻訳しないように工夫する必要がありそうです。
AppleScript名:Keynoteの表の選択中のセルのデータをDeepLで翻訳して書き戻す.scpt |
— – Created by: Takaaki Naganoya – Created on: 2023/01/30 — – Copyright © 2023 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions property NSString : a reference to current application’s NSString property NSCountedSet : a reference to current application’s NSCountedSet property NSJSONSerialization : a reference to current application’s NSJSONSerialization property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding set myAPIKey to "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" set myTargLang to "EN" –翻訳ターゲット言語 set aTableDat to returnSelectedTableCellDataOnCurrentSlide() of me –> {"プロパティ項目", "データ型", "読み/書き", "内容(サンプル)", "説明"} set nList to {} repeat with i in aTableDat set j to contents of i set tRes to translateWithDeepL(j, myAPIKey, myTargLang) of me set the end of nList to tRes end repeat –表に翻訳した内容を書き戻す storeSelectedTableCellDataOnCurrentSlide(nList) of me on storeSelectedTableCellDataOnCurrentSlide(sList) tell application "Keynote" tell front document tell current slide try set theTable to first table whose class of selection range is range on error return false –何も選択されてなかった場合 end try tell theTable set cList to every cell of selection range if (length of cList) is not equal to (length of sList) then error set aCount to 1 repeat with i in cList set j to contents of i tell j set value of it to (contents of item aCount of sList) end tell set aCount to aCount + 1 end repeat end tell end tell end tell end tell end storeSelectedTableCellDataOnCurrentSlide on returnSelectedTableCellDataOnCurrentSlide() tell application "Keynote" tell front document tell current slide try set theTable to first table whose class of selection range is range on error return false –何も選択されてなかった場合 end try tell theTable set vList to value of every cell of selection range set cCount to count of column of selection range set rCount to count of row of selection range –複数行選択されていた場合にはエラーを返すなどの処理の布石 return vList end tell end tell end tell end tell end returnSelectedTableCellDataOnCurrentSlide –DeepLのAPIを呼び出して翻訳する on translateWithDeepL(myText, myAPIKey, myTargLang) set sText to "curl -X POST ’https://api-free.deepl.com/v2/translate’ -H ’Authorization: DeepL-Auth-Key " & myAPIKey & "’ -d ’text=" & myText & "’ -d ’target_lang=" & myTargLang & "’" try set sRes to do shell script sText on error error end try set jsonString to NSString’s stringWithString:sRes set jsonData to jsonString’s dataUsingEncoding:(NSUTF8StringEncoding) set aJsonDict to NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value) set tRes to aJsonDict’s valueForKeyPath:"translations.text" if tRes = missing value then set erMes to (aJsonDict’s valueForKey:"message") as string error erMes else return contents of first item of (tRes as list) end if end translateWithDeepL |