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
A HTTPS request felparaméterezve így néz ki:
https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&q=hello%20world&source=en&target=hu
Miután ezt megtudtuk, a doksiban leírtak szerint látogassunk el a
Google APIs Console oldalra, készítsünk egy új Translate projectet és már meg is szereztük a Translate API híváshoz szükséges kulcsot.
Megvan a kulcs, csinálhatunk jó kis Service-et!
Elindítod az Automator alkalmazást, majd kiválasztod a Service típusú template-et:
A megjelenő editorban a Library/Utilities szekcióból kikeresed a Run AppleScript actiont és behúzod a munkaterületre:
Ezután már csak bepakolod a script helyére azt, amint én hajnalban már kiszenvedtem, beteszed a
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
Türelmetleneknek / elfoglaltaknak / lustáknak az egész service szedhető
innen – persze még ebben is be kell pakolnod a saját magad Google API kulcsát, hogy működjön.]]>