電子書籍「AppleScript最新リファレンスv2.8対応」の英訳プロジェクトを開始しました。
同書は、1,000ページを超えるボリウムを持つ大規模書籍であるため、いきなりすべてを翻訳することはできません(間違いなく挫折します)。そこで、おおよそ250ページごとに分けた4分冊にする方向で作業を進めることにしました。
まずは、スクリプトエディタ内のローカリゼーションファイルから情報をClaris FileMaker Proに書き出して、検索できるようにしてみました。
実際にAppleScriptを書いてスクリプトエディタ内のloctableファイルを読み込んで言語ごとに分け(macOSは39言語にローカライズされている)、Claris FileMaker Proにデータを順次格納してみたら、1万レコードを超えてもまだ処理が続きそうだったので、強制停止。
enと「en_GB」、それと「ja」のローカライズ情報のみに限定して書き出しておいたほうがよさそうです。
あとは、macOS/AppleScriptの専門用語について日本語と英語の対訳データベースを作っておきたいところです。
AppleScript名:Script Editor内部のloctable情報を抽出.scpt |
use AppleScript version "2.4" use scripting additions use framework "Foundation" script spdB property urlList : {} end script property NSPredicate : a reference to current application’s NSPredicate property NSArray : a reference to current application’s NSArray –Script Editorのバンドル内のResourceから「.loctable」で終わるファイル名のパスを抽出 tell application "Finder" set defPath to application file id "com.apple.ScriptEditor2" end tell set defPath to (POSIX path of (defPath as alias)) & "Contents/Resources" –Cocoa流のPOSIX path set fList to getFilesIn(defPath) of me set anArray to NSArray’s arrayWithArray:fList set aPred to NSPredicate’s predicateWithFormat:"SELF ENDSWITH ’.loctable’" set locRes to (anArray’s filteredArrayUsingPredicate:aPred) as list –.loctableファイルでループ repeat with i in locRes set j to contents of i set (urlList of spdB) to (my readPlistAt:(j)) set langKeys to ((urlList of spdB)’s allKeys()) as list –Language Codeでループ repeat with ii in langKeys set jj to contents of ii set aLangDat to ((urlList of spdB)’s valueForKey:jj) —plist(=loctable)のlabelでループ set allLangKeys to (aLangDat’s allKeys()) as list repeat with iii in allLangKeys set jjj to contents of iii set aVal to (aLangDat’s valueForKey:(jjj)) copy {j, jj, jjj, aVal as string} to tmpList createFMRec(tmpList) of me end repeat end repeat end repeat on createFMRec(aList) copy aList to {f1, f2, f3, f4} tell application "FileMaker Pro" tell database 1 set curRec to create new record tell curRec set cell "FilePath" to f1 set cell "LangID" to f2 set cell "LabelName" to f3 set cell "stringVal" to f4 end tell end tell end tell end createFMRec –Read Plist on readPlistAt:thePath set thePath to current application’s NSString’s stringWithString:thePath set thePath to thePath’s stringByExpandingTildeInPath() set theDict to current application’s NSDictionary’s dictionaryWithContentsOfFile:thePath return theDict end readPlistAt: –指定フォルダ内のファイルのフルパス一覧を返す on getFilesIn(posixPath) script spd property allItems : {} end script set allItems of spd to {} — make URL set theNSURL to current application’s |NSURL|’s fileURLWithPath:posixPath — make file manager set theNSFileManager to current application’s NSFileManager’s new() — get URL enumerator set theNSFileEnumerator to theNSFileManager’s enumeratorAtURL:theNSURL includingPropertiesForKeys:{current application’s NSURLIsDirectoryKey, current application’s NSURLIsPackageKey} options:((current application’s NSDirectoryEnumerationSkipsPackageDescendants) + (current application’s NSDirectoryEnumerationSkipsHiddenFiles as integer)) errorHandler:(missing value) — get all items from enumerator set (allItems of spd) to theNSFileEnumerator’s allObjects() set theFolders to {} — to store folders — loop through repeat with i from 1 to count of (allItems of spd) — is it a directory? set {theResult, isDirectory} to ((item i of (allItems of spd))’s getResourceValue:(reference) forKey:(current application’s NSURLIsDirectoryKey) |error|:(missing value)) if isDirectory as boolean = false then set {theResult, isPackage} to ((item i of (allItems of spd))’s getResourceValue:(reference) forKey:(current application’s NSURLIsPackageKey) |error|:(missing value)) — is it not a package? if not isPackage as boolean then set end of theFolders to (item i of (allItems of spd))’s |path|() as string –«class furl» end if end if end repeat return theFolders end getFilesIn |