Preface: a workflow Google API-t használ, így feltételezem, hogy rendelkezel a használatához szükséges Google accounttal, továbbá Growl felhasználó vagy. Ha nincs Google accountod és nem is akarsz gyártani magadnak, illetve a Growl-tól is kiver a víz, akkor ez a leírás számodra nem nyújt explicit megoldást. Update: fds Mester hatására kigyomláltam a gusztustalan urlencode függvényt és az amúgyis nagyon okos curl binárisra róttam ezt a terhet.
A probléma
Idegen szóval / kifejezéssel találkozunk a computeren olvasás közben, amire a gyári Dictionary.app-ba integrált szótárunk nem ad fordítást.A megoldás
Van a Google-nek jóféle online translation API-ja, amit megkérhetünk szépen, hogy fordítson nekünk. Az OS X nagy varázslata a rendszer szintű AppleScript támogatás és az Automator fedőnevű makrózó csoda – őket szólítjuk most csatába. Első körben ellátogatunk a Google Translate API oldalára és végigolvassuk a doksit. A dokumentáció szépen elmagyarázza, hogy Google-ék egy ilyen GET requestre adnak értelmes választ:https://www.googleapis.com/language/translate/v2?parameters
https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&q=hello%20world&source=en&target=hu
set myKey to "PUT_YOUR_GOOGLE_API_KEY_HERE"
sorba a te saját Google Translate API kulcsod és lemented a file-t Translate néven.
Ha mindent jól csináltál, akkor megjelent egy Translate nevű service a gépeden, ami úgy működik, hogy egy tetszőleges alkalmazásban kijelölt szövegen jobb clicket nyomva, majd a Services menü Translate opcióját kiválasztva a script megküldi a Google Translate APInak a kijelölt szöveget és a visszakapott fordítást megjeleníti neked egy Growl notification buborékban, valahogy így:
[video mp4="/fns.hu/video/mac-workflow-translate-service.mov" width="500" options="controls"]
Végül nézzük meg a scriptet egyben, úgy, ahogy magamnak implementáltam:
(* Translate by Gabor PENOFF (//fns.pappito.com) release 20110208_092849 About: Requirements: - insert your own Google API key - install Growl from http://growl.info to get non-modal notification dialogs Usage: - select some text and run the service That's all. *) on run {input, parameters} set srcText to input as text set srcLang to "en" -- source language set tgtLang to "hu" -- target language set myKey to "AIzaSyCI-2oapEkMpRFfd6Ltv4HkZhf1Zq-VU9o" set myScriptID to "Translate" -- ID for Growl display set myTranslation to do shell script "/usr/bin/curl -G --data-urlencode q=" & quoted form of srcText & " --data-urlencode key=" & quoted form of myKey & " --data-urlencode source=" & quoted form of srcLang & " --data-urlencode target=" & quoted form of tgtLang & space & quoted form of "https://www.googleapis.com/language/translate/v2" if myTranslation = "" then tell me to notifyWithGrowl(myScriptID, "ERROR") return end if -- get rid of JSON (ugly but works) set myPrefix to "translatedText\": \"" set myPostfix to "\"" set myStartPos to (offset of myPrefix in myTranslation) + (length of myPrefix) set myText to text myStartPos thru -1 of myTranslation set myEndPos to (offset of myPostfix in myText) set myText to text 1 thru (myEndPos - 1) of myText tell me to notifyWithGrowl(myScriptID, myText) return "" -- myText end run -- GrowlCheck: on growlInstalled() try do shell script "ls /Library/PreferencePanes/Growl.prefPane/" return true on error return false end try end growlInstalled -- Growl notifier: on notifyWithGrowl(myApp, myText) set myIconApp to "Safari" set notificationID to myApp & ".default" if growlInstalled() then tell application "GrowlHelperApp" -- list of notification types set the ANL to {notificationID} -- list of enabled notifications set the DNL to {notificationID} -- register script register as application myApp all notifications ANL default notifications DNL icon of application myIconApp -- send notification notify with name notificationID title myApp description myText application name myApp end tell else -- skip alert if no Growl installed --display alert "Growl is not installed" end if end notifyWithGrowl