Skript zur schnellen Englisch - Deutsch / Deutsch - Englisch Übersetzung

Geschrieben von Eric Scheibler am 30.12.2010

Mit Autohotkey habe ich ein kleines Skript erstellt, welches sehr schnell und einfach Wörter vom Deutschen ins Englische und umgekehrt übersetzt. Dabei gibt es zwei Möglichkeiten, die man optimalerweise beide durch eine Tastenkombination aufrufen sollte:.

  • Es öffnet sich eine ganz normale Textbox, in die das zu übersetzende Wort eingegeben werden kann.
  • Man markiert ein beliebiges Wort und aktiviert das Übersetzungsskript mittels Tastenkombination (siehe unten)

Code der translate.ahk

;-- Skript zur Einfachen Englisch - Deutsch, Deutsch - Englisch Übersetzung
;-- Suchergebnisse stammen von leo.org
;-- ein großer Teil des Webseitenparsers ist nicht von mir sondern aus irgend einem Thread des Autohotkey Forums (http://de.autohotkey.com/forum/)

;-- globale Variablen
leotemp = %A_AppData%leotemp.txt
IfExist, %leotemp%
FileDelete, %leotemp%
;-- versuche, die Datei leotemp.txt anzulegen
FileAppend, , %leotemp%
if(errorlevel != 0)
{
Msgbox, 0, Fehler, Die Datei %leotemp% konnte nicht erstellt werden.
exitapp
}

;-- Übergabeparameter prüfen
;-- wenn "copy" übergeben wurde, übersetzt das Skript das gerade markierte Wort (realisiert durch ein Simulieren von CTRL + c), funktioniert leider nicht im Firefox
;-- wurde kein Parameter übergeben, kann man das zu übersetzende Wort in eine Inputbox eingeben
ifequal, 1, copy
{
oCB := Clipboard   ;-- Zwischenablage sichern
clipboard =
Send, ^c   ;-- markiertes Wort in die Zwischenablage kopieren
ClipWait, 1
wort := ClipBoard
ClipBoard  := oCB   ;-- Zwischenablage wiederherstellen
}
else
{
inputbox wort,Übersetzung,Bitte das zu übersetzende Wort eingeben:
}

;-- Übersetzung
;-- prüfen, ob die Variable ein zu übersetzendes Wort enthält
if(wort == "")
exitapp

;-- Anfrage bei leo.org, Ergebnis wird temporär als .txt abgespeichert
URLDownloadToFile,http://pda.leo.org/?search=%wort%,%leotemp%
if(errorlevel != 0)
{
msgbox, 0, Fehler, Beim Abfragen der Leo.org Webseite ist ein Fehler aufgetreten.`nFehlercode %errorlevel%.
exitapp
}
Found := False
Line =
Loop, Read, %leotemp%
{
IfInString, A_LoopReadLine, Unmittelbare Treffer
{
Line = %Line%%A_Tab%%A_LoopReadLine%
Found := True
}
Else IfInString, A_LoopReadLine, Verben und Verbzusammensetzungen
{
Line = %Line%%A_Tab%%A_LoopReadLine%
Found := True
}
Else IfInString, A_LoopReadLine, lieferte keine Treffer
{
Found := False
break
}
}
FileDelete, %leotemp%

;-- wenn Leo ein Ergebnis geliefert hat, den HTML Code parsen
If Found
{
StringReplace, Line, Line, %A_Tab%,, All
StringReplace, Line, Line,  ,, All
StringReplace, Line, Line, Forumsdiskussion,, All
StringReplace, Line, Line, ENGLISCH,, All
StringReplace, Line, Line, DEUTSCH,, All
StringReplace, Line, Line, .gif"></a></td, , All
StringReplace, Line, Line, </tr>,`n, All
StringReplace, Line, Line, </td>, %A_Tab%, All
Loop
{
StringReplace, Line, Line, %A_space%%A_space%,%A_space%, All
StringReplace, Line, Line, %A_space%`n,`n, All
StringReplace, Line, Line, `n%A_space%,`n, All
StringReplace, Line, Line, %A_Tab%`n,`n, All
StringReplace, Line, Line, `n%A_Tab%,`n, All
StringReplace, Line, Line, `n`n,`n, All
StringGetPos, FirstPos, Line, <
If ErrorLevel
break
StringGetPos, SecondPos, Line, >
StringLen, Length, Line
StringLeft, LineFront, Line, %FirstPos%
StringRight, LineBack, Line, % Length - SecondPos - 1
Line = %LineFront% %LineBack%
}

Text =
Loop, Parse, Line , `n
{
If A_LoopField is space
Text = %Text%
Else IfInString, A_LoopField , %A_Tab%
Text = %Text%`n%A_LoopField%
Else IfInString, A_LoopField , Link zu
Text = %Text%
Else
Text = %Text%`n`n %A_LoopField%`n
}

;-- noch ein paar Ersetzungen, u.A. Umlaute (Problem mit UTF8)
StringReplace, text, text,ü,ü,1
StringReplace, text,text,Ãœ,Ü,1
StringReplace, text,text,ö,ö,1
StringReplace, text,text,Ö,Ö,1
StringReplace, text,text,ä,ä,1
StringReplace, text,text,Ä,Ä,1
StringReplace, text,text,ß,ß,1
StringReplace, text, text,&amp;#160;,,1
StringReplace, text, text,&amp;lt;,,1
StringReplace, text, text,&amp;gt;,,1

;-- GUI
Gui, add, edit, r15 w600 -wantreturn veingabe, %text%
gui, add, button, default, OK
gui, show, , Übersetzung von %wort%

;-- Cursor an den Anfang des Eingabefeldes setzen
sleep 100
Send, ^{HOME}   ;-- CTRL + HOME
return

GuiClose:
GuiEscape:
ButtonOk:
exitapp
return
}
Else
MsgBox, 0, , Keine Übersetzung vorhanden.
exitapp

Komfortabler Aufruf des Skripts

Wie schon im vorherigen Beitrag erwähnt, nutze ich wieder ein zweites Autohotkey Skript, welches permanent läuft und auf die gewünschten Tastenkombinationen wartet. Diese Hotkeys sind natürlich frei wählbar, in meinem Beispiel habe ich mal STRG + SHIFT + 1 bzw. 2 gewählt. Optimalerweise sollte dieses Skript im Autostart - Ordner von Windows liegen (oder eine Verknüpfung davon).

Wichtig: translate.exe muss sich im gleichen Verzeichnis befinden, sonst muss der Pfad in der Hotkeys.exe angepasst werden.

Hotkeys.ahk
;--#noTrayIcon   ;-- Kommentarzeichen löschen, wenn man kein Icon neben der Uhr haben will

^+1::   ;-- CTRL + SHIFT + 1 drücken
run, translate.exe
return

;-- Aufruf mit Parameter "copy"
^+2::   ;-- CTRL + SHIFT + 2 drücken
run, %comspec% /c "translate.exe copy", , hide
return

Download

Hier gibts Das Archiv mit den beschriebenen Dateien zum Download: Translate.zip