Halbautomatische Übersetzung mit DeepL

Seit einiger Zeit nutze ich DeepL, um fremdsprachige Texte ins Deutsche oder deutschen Text in eine andere Sprache zu übersetzen. Die Qualität der Übersetzung ist dabei erheblich besser, als das was Google oder Microsoft liefern. Im Unterschied zu beiden ist DeepL aber nicht grundsätzlich kostenlos. In der kostenfreien Version können über das Webformular immerhin 5000 Zeichen am Stück übersetzt werden. Danach kann das Formular geleert werden, um die nächsten 5000 Zeichen einzufügen.

Un weil es für die Browser bisher auch keine praktikablen Addons gibt, die markieren Text direkt übersetzen können, habe ich mir meine eigene Lösung gebastelt. Dazu nutze ich Autohotkey, dass ich schon seit über zehn Jahren nutze. Zu meiner kleinen Einführung zu Autohotkey mit praktischen Beispielen gehts hier entlang.

Ich habe mir ein kleines Script gebastelt, dass markierten Text per [Strg + D] in die Zwischenablage übernimmt, DeepL in einem neuen Tab öffnet und den Text in das Formular kopiert. Die Übersetzung läuft dann ganz normal an.

; Übersetzen mit DeepL (Strg + d) (nur im Firefox)
#IfWinActive ahk_class MozillaWindowClass
^d::
xres = 1920 ; Breite des ersten Bildschirms in Pixeln
MouseGetPos, xpos, ypos 
ClipSaved := ClipboardAll
Send, ^c
run https://www.deepl.com/translator
sleep, 1000
if(xpos > xres) 
{ 
	posx := xres + 500 
} else 
	{ 
	posx = 500 
	}
MouseClick, left, %posx%, 500
Send, ^v
sleep, 1000
Clipboard := ClipSaved
return 
#IfWinActive

Das funktioniert nur im Firefox, wer den Chrome nutzt, kann die Zeile

#IfWinActive ahk_class MozillaWindowClass

durch

#IfWinActive ahk_class Chrome_WidgetWin_1

ersetzen. Für Microsoft Edge muss die Zeile hingegen so lauten:

#IfWinActive ahk_class ApplicationFrameWindow

Beim einem Aufruf der DeepL-Seite als eigenen Tab ist das Eingabeformular nicht aktiv, weswegen die Zeile

MouseClick, left, %posx%, 500

einen Mausklick darauf simuliert. Die Werte %posx%,500 entsprechen dabei der Klickposition.Wer zwei Bildschirme verwendet, muss die Breite des ersten Bildschrirms (in px) bei:

xres = 1920 ; Breite des ersten Bildschirms in Pixeln

eintragen. Nur damit funktioniert das Script auch auf dem zweiten Monitor. Ach und das Script sorgt natürlich auch dafür, dass der ursprüngliche Inhalt der Zwischenablage vor der Übernahme des Textes gespeichert und danach wieder hergestellt wird.

Hier mal ein Video, das zeigt, wie der ganze Kram funktioniert:

Ich nutze das Script jetzt schon eine ganze Weile und es funktioniert einwandfrei. Texte, die länger als 5000 Zeichen sind, werden komplett übernommen, aber eben nicht komplett übersetzt. Wenn man am Ende angekommen ist, kann man einfach die vorherigen 5000 Zeichen löschen und DeepL übersetzt dann den Rest des Textes ganz automatisch.

Weil die Qualität der Übersetzung so gut ist und ich den Dienst auch schon länger nutze, habe ich mich jetzt entschieden, mir ein Jahresabonnement des Starterpaketes zu gönnen. Damit kann ich dann mehr als 5000 Zeichen übersetzen lassen.

Update vom 25.12.2018: Ich habe die Pausen im Script auf jeweils eine Sekunde erhöht, weil ich festgestellt habe, dass der markierte Text nicht immer übernommen wurde. Das sollte jetzt besser funktionieren.

Update vom 20.06.2019: Ich habe noch eine Unterstützung für den Zweimontorbetrieb eingebaut, da die bisherige Version nur auf dem ersten Monitor funktionierte.

Sprachumschaltung unter Windows deaktivieren

Im Techniktagebuch lese ich gerade, dass es auch andere stört, dass Windows hin- und wieder die Sprache umstellt. Drückt man nämlich die [Umsch] und die [Alt]-Taste gleichzeitig (oder unter Windows 8 auch die [Win + Leer]), wechselt Windows zur nächsten Sprache, meist Englisch.

Im oben verlinkten Beitrag wird eine Lösung bei Heise verlinkt, die aber so in Windows 8 bzw. 8.1 nicht mehr funktioniert. Ich habe mal für Windows 8.1 rausgesucht, wie es nun funktioniert. Und weiter unten stelle ich noch eine Lösung mit und für Autohotkey vor.

Sprachumschaltung in Windows 8.1 entfernen

Alternativ kann man die Sprachumschaltung auch direkt in der Systemsteuerung abschalten. Das ist allerdings etwas schwierig zu finden, sodass ich es auch jetzt erst entdeckt habe:

1. Systemsteuerung öffnen

2. „Sprache“ auswählen

3. Links auf „Erweiterte Einstellungen“ klicken

4. In etwa in der Mitte bei „Wechseln der Eingabemethode“ den Haken bei (1) setzen:

eingabemethode

5. Danach auf „Abkürzungstasten der Sprachleiste verändern“ (2) klicken.

6. Im Dialog „Textdienste und Eingabesprachen“ unten auf „Tastenkombination ändern …“

tastenkombi

7. Im Dialog „Tastenkombination ändern“ oben alle beide Spalten auf „Nicht zugewiesen“ setzen.

8. Dialog mit „OK“ verlassen

9. Im Dialog „Textdienste und Eingabesprachen“ jetzt auch die Registerkarte „Sprachenleiste“ wechseln und den Haken bei „Ausblenden“ setzen. Damit verschwindet auch das „DEU“-Symbol aus der Taskleiste neben der Uhr:

sprachleiste

10. Diesen Dialog mit „OK“ verlassen und das Gleiche mit den „Erweiterten Einstellungen“ machen.

Sprachumschaltung mit Autohotkey deaktivieren

Wer viel auf anderen Rechnern unterwegs ist und nicht jedesmal diese Einstellungen durchhecheln will, kann sich auch ein Autohotkeyscript bauen. Mit diesen Zeilen wird die Umschaltung deaktiviert, allerdings bleibt das Symbol in der Taskleiste erhalten.

LShift & LAlt::SendPlay {Space} 
LAlt & LShift::SendPlay {Space}
#Space::SendPlay {Space}

Die erste Zeile fängt [Umsch + Alt] ab und sendet stattdessen ein Leerzeichen, das nur Autohotkeyintern verwendet, aber nicht dargestellt wird. Die zweite Zeile fängt die umgekehrte Kombination, nämlich [Alt + Umsch], ab. Die dritte Zeile schließlich sorgt dafür, dass [Win + Leer] oder [Leer + Win] unter Windows 8 nicht mehr funktioniert.

Soundausgabe unter Windows 7 und 8 per Knopfdruck umschalten

Bei meinem Soundkartentreiber kann man einstellen, dass die Musik auf den Lautsprechern abgespielt wird, Skype aber immer über das Headset kommt. Die entsprechenden Einstellungen im Realtek HD-Audio-Manager sehen so aus:

Realtek Soundkarte: Erweiterte Einstellungen

Das Problem dabei ist allerdings, dass ich jedesmal diese Einstellung ändern muss, wenn ich spätabends meine Musik über das Headset hören will. Ist doch ziemlich umständlich auf Dauer.

Jetzt habe ich das Programm SSD — Set Sound Device on Win7 gefunden, was es ermöglicht, die Soundausgabe (auch per Kommandozeile) umzuschalten:

ssd

Praktischerweise legt das Programm bei der ersten Auswahl im Programmverzeichnis (das beschreibbar sein muss) passende Verknüpfungen an, um nur die Lautsprecher oder nur das Headset einzuschalten.

Das ist zwar ok, aber ich wollte das schon per Tastendruck machen. Also hab ichs mal mit Autohotkey probiert. Herausgekommen ist dieser Schnipsel, den ich ich meine Standardtastaturdatei gepackt habe:

Browser_Search::
if ls_an = 0
run, c:\Users\Michael\Anwendungen\SSD\SSD.exe 1
ls_an = 1

if ls_an = 1
run, c:\Users\Michael\Anwendungen\SSD\SSD.exe 2
ls_an = 0
return

Ich gehe mal wieder durch:

Browser_Search::

Bei mir schaltet die „Suche“-Taste auf der Tastatur das Ausgabegerät um, weil ich diese Taste nie benutze.

if ls_an = 0

Um unterscheiden zu können, ob die Lautsprecher oder das Headset läuft habe ich die Variable „ls_an“ (Lautsprecher an?), die ich auf 1 setze, wenn die Lautsprecher laufen oder auf 0 wenn die Töne aus dem Headset kommen. Hier wird abgefragt, ob das Headset läuft.

run, c:\Users\Michael\Anwendungen\SSD\SSD.exe 1

Da festgestellt wurde, dass die Lautsprecher nicht tönen, werden sie hier eingeschaltet. Die 1 hinter ssd.exe ist in diesem Fall die Nummer des Audioausgabegeräts, wie es in der Systemsteuerung steht.

ls_an = 1

Jetzt wird noch der Status von „ls_an“ auf 1 gesetzt. Weiter gehts mit

if ls_an = 1
run, c:\Users\Michael\Anwendungen\SSDS\SSD.exe 2
ls_an = 0
return

Wieder fast die gleiche Abfrage, nur mit dem Unterschied, dass „ls_an“ diesmal abgefragt wird, ob die Lautsprecher schon an sind. Dann wird die Ausgabe auf das Headset geschaltet.

Ich weiß nicht, ob man das mit Autohotkey noch eleganter lösen kann, aber es ist eine Lösung mit der ich leben kann.

Update:
Nachdem ich das Script jetzt einige Zeit ausprobiert habe, erscheint es mir sinnvoller, jedes Ausgabegerät mit einer Taste zu belegen, denn die Umschalterei funktioniert oft nicht. Dann bleiben Überreste des Programms im Tray hängen. Also sehen meine AHK-Schnipsel jetzt so aus:

Browser_Refresh::
	run, c:\Users\Michael\Anwendungen\SSDS\SSD.exe 1
return

Browser_Search::
	run, c:\Users\Michael\Anwendungen\SSDS\SSD.exe 2
return

Beide Tasten liegen auf der Tastatur nebeneinander. Damit ichs nicht vergesse, habe ich mir einen Aufkleber über den Tasten auf die Tastatur geklebt, auf den ich beide Symbole aufgemalt habe. Das funktioniert jetzt einwandfrei.

Update vom 15.05.2013: Nachdem ich Windows 8 jetzt rund ein halbes Jahr am laufen habe und SSD immer öfter schmerzlich vermisst habe (weil es nur bis Windows 7 funktionierte), habe ich mich mal an den Quellcode gesetzt und das Programm auch zu Windows 8 kompatibel gemacht.