Herbaer::Translate::GoogleTranslate


Zweck

Das Modul Herbaer::Translate::GoogleTranslate (Datei GoogleTranslate.pm) nutzt den Web-Dienst Google Translate zur Übersetzung.

Verzögerung

Um das Netz und den Übersetzungsdienst nicht zu überlasten, kann eine Wartezeit zwischen zwei Requests zur Übersetzung eingestellt werden. Damit die Wartezeit nicht die gesamte lokale Verarbeitung blockiert, wird ein neuer Prozess (Kindprozess) gestartet, der über das Web kommuniziert.

Die Kommunikation des Hauptprozesses mit dem Kindprozess erfolgt über Pipes. Der Hauptprozess sendet zeilenweise „Übersetzungsbefehle” an den Kindprozess. Ein Übersetzungsbefehl hat den Aufbau tr:SRCTEXT:SRCLANG:TGTLANG. SRCTEXT steht für den zu übersetzdenden Text in der Quellsprache, SRCLANG für die Kennung der Quellsprache, TGTLANG für die Kennung der Zielsprache. Der Kindprozess sendet als Antwort eine Zeile mit dem übersetzten Text. Das Zeilenende-Zeichen und der Doppelpunkt im Text werden in der Kommunikation zwischen den Prozessen „geschützt”, also durch andere Zeichenfolgen ersetzt. Dazu dienen die beiden Hilfsfunktionen _encode und _decode.

Im Hauptprozess schließt der Destructor (DESTROY) die Pipes zum Kindprozess und wartet auf dessen Beendigung.

Übersetzung

Ein kurzer zu übersetzender Text wird in der URL eines GET-Requests kodiert, ein längerer Text wird als Rumpf eines POST-Requests.

Die Antwort ist JSON-kodiert.

Der HTTP-Request erfolgt in der Funktion _translate, die im Falle einer Verzögerung im Kindprozess, sonst im Hauptprozess aufgerufen wird.

Schlüssel und Einstellungen

Um Google Translate zu nutzen, ist ein Schlüssel (apikey) erforderlich. Er wird aus einer Textdatei (Beispiel secrets) gelesen. Die Textdatei enthält eine Zeile

google.translate.apikey=mein_geheimer_google_api_schluessel
  

mein_geheimer_google_api_schluessel ist ein Platzhalter für den wirklichen Schlüssel. In der Textdatei kann auch die Wartezeit zwischen zwei Übersetzungs-Requests in Mikrosekunden angegeben werden. Die folgende Zeile erzwingt eine halbe Sekunde Wartezeit zwischen zwei Requests:

google.translate.wait=500000
  

Funktionen

$translator = Herbaer::Translate::GoogleTranslate::new ($secrets, $debug)

Ergibt ein neues Übersetzer-Objekt. Diese Funktion wird normalerweise nicht direkt aufgerufen, sondern von Herbaer::Translate::new (s. Translate.pm (Quelltext)).

$secrets ist der Dateipfad der Datei, die den Google-Anwendungsschlüssel enthält.

Wenn der Wert von $debug logisch wahr ist, werden Meldungen nach STDERR ausgegeben.

$translator->translate ($text, $quellsprache, $zielsprache)

Ergibt die Übersetzung des Textes $text aus der Sprache $quellsprache in die Sprache $zielsprache. ([BCP47] http://www.ietf.org/rfc/bcp/bcp47.txt, [IETF RFC 3066] http://www.ietf.org/rfc/rfc3066.txt)

In den Kennungen der Sprachen werden die Zeichen vom ersten „-”-Zeichen an entfernt. An die Kennung zh wird -CN angehängt.

Im übersetzten Text sind in asiatischen Sprachen die „Null-Leerzeichen” ein Problem. Sie zeigen dem Browser Stellen an, an denen ein Zeilenwechsel möglich ist. Aber ein „Null-Leerzeichen” unmittelbar bei einem anderen Leerzeichen ist nicht nötig und wird entfernt. An einigen Stellen zwischen lateinischen Buchstaben und asiatischen Satzzeichen werden „Null-Leerzeichen” eingefügt.

$translator->languages ($quellsprache)

Ergibt eine Liste (ARRAY-Ref) der Kennungen der Sprachen, in die Text aus der Sprache mit der Kennung $quellsprache übersetzt werden kann. Der dazu nötige HTTP-Request erfolgt im Hauptprozess unabhängig von der Wartezeit zwischen zwei Übersetzungs-Requests.

$translator->translator_name ()
Ergibt die Zeichenkette google.