電子書籍「AppleScript The Latest Reference for v2.8」の翻訳作業を行うにあたって、同書を作成しているPagesを操作して、書類の言語設定を変更するAppleScriptを記述しました。なぜこれが必要になってくるかといえば、英単語のハイフネーション方式をネイティブの方式に合わせる必要があったためです。Pages自体のメニューなどのUIの表示は日本語のままで使い続けられる、というのがメリットでしょう。
本記事にScriptは掲載しておきますが、動作のためには同書に同梱しているライブラリ「dynamic Menu Clicker」が必要であり、ここではScriptの内容そのものは重要視していません。
一度作成して、テストデータで問題なく動作していたものの、数時間後に同じ書類に対して同じScriptを実行してみたら、エラー続出で動かなくなっていた、という怪奇現象が発生。この問題の解決に時間がかかりました。
このトラブルが発生した箇所はGUI Scriptingでウィンドウの上に表示されたシート、の上のポップアップボタンをクリックするという記述箇所です。
結論からいえば、Pages上で作業をしていたときにカラーピッカーのパレットを表示させたままにしたため、これがWindow 1とカウントされ、ドキュメントのウィンドウはWindow 2と認識されたため、問題が発生しました。
しかも、Pagesを後ろに持っていくとカラーピッカーのパレットは表示されなくなります。これで、何が原因なのかがわかりにくく、まさに怪奇現象のように振る舞いました。こんなのは久しぶりです。
結局、ウィンドウの名称をすべて取得して、カラーピッカーが表示されていたらドキュメント表示ウィンドウのインデックスを2にする、というやっつけで対処することになりました。
カラーピッカーはPagesが最前面のときには表示され、背面に回したときには表示されなくなります。この種類のフローティングパレットはPagesに4つ搭載されており、より広域に配布するScriptであればこれらをすべて表示させた状態を想定する必要があることでしょう。
ただし、本Scriptは自分1人が使うことを想定しているため、「パレットの非表示状態を確認したうえでScriptを実行」という申し送りをScript内に記述することで回避することにしました。ただ、なかなか原因がわからなかったので、英訳プロジェクトの第1日目にしてけっこう消耗しました。
AppleScript名:指定のPages書類の言語設定を英語に.scpt |
— – Created by: Takaaki Naganoya – Created on: 2023/11/06 — – Copyright © 2023 Piyomaru Software, All Rights Reserved — use AppleScript version "2.8" — Monterey (12) or later use framework "Foundation" use scripting additions use dClick : script "dynamicClicker" use dLib : script "display drop dialog" –注意:使用前にPagesのカラーパレットが表示されていないことを確認すること!!!! set aMainMes to "Drop Pages Document" set aSubMes to "Drag and Drop Pages files to Table (.pages)" set aUTI to "com.apple.iwork.pages.sffpages" set aRes to (display drop dialog aUTI main message aMainMes sub message aSubMes with initial folder "" OK button title "Execute") activate application "Pages" repeat with i in aRes set j to i as alias tell application "Pages" open j end tell chengeLangTo() of me tell application "Pages" close front document with saving end tell end repeat on chengeLangTo() set appName to "Pages" –Application Name set aList to {"ファイル", "詳細", "言語と地域…"} –Localized Menu Title Structure set aRes to clickSpecifiedMenuElement(appName, aList) of dClick delay 1 changeDocLanguageSetting("英語", "アメリカ合衆国") of me –"English" , "United States" –changeDocLanguageSetting("日本語", "日本") of me end chengeLangTo on changeDocLanguageSetting(targLang, targCountry) activate application "Pages" tell application "System Events" tell process "Pages" set winNum to 1 set nList to name of every window if "テキストのカラー" is in nList then set winNum to 2 –Pagesのカラーパレットが表示状態の場合 tell window winNum tell sheet 1 click pop up button 1 tell pop up button 1 tell menu 1 click menu item targLang end tell end tell click pop up button 2 tell pop up button 2 tell menu 1 click menu item targCountry end tell end tell click button "OK" end tell end tell end tell end tell end changeDocLanguageSetting |