Herbaer::Translate


Übersicht

use Herbaer::Translate;
my $translator = new Herbaer::Translate ("Übersetzername");
my $hallo_chinesisch = $translator -> translate ("Hallo Welt", "de", "zh");
$translator -> learn ("Hallo Welt", "de", "zh", "你好世界");
  

Einführung

Das Modul Herbaer::Translate definiert die Funktion new. Die Funktion new bestimmt das implementierende Modul, ruft die Funktion new des implementierenden Moduls auf und gibt deren Ergebnis zurück.

Nach dem Paketnamen werden der Methode new des implementierenden Moduls zunächst die Parameter aus der Datei Translate.names, dann die weiteren Parameter nach dem Namen aus dem Aufruf der Funktion new aus diesem Modul übergeben.

Zur Ersetzung von Platzhaltern dient das Modul Herbaer::Replace (Datei Replace.pm (Quelltext)).

Datei Translate.names

Die Datei Translate.names liegt in demselben Verzeichnis wie die Datei Translate.pm. Sie ordnet einer Zeichenkette (erstes Argument der Funktion Herbaer::Translate::new) ein Modul zu und bestimmt die Argumente des Aufrufs der Methode new des Moduls.

Die Datei Translate.names wird zeilenweise verarbeitet. Leere Zeilen und Zeilen, die mit dem Zeichen # beginnen, werden ignoriert.

Zeilen, die mit der Zeichenfolge MODULE in der ersten Spalte beginnen, bestimmen ein Modul. Nach der Zeichenfolge MODULE muss wenigstens ein Leerzeichen folgen. Der Zeilenrest wird duch Folgen von einem oder mehreren Leerzeichen in „Wörter” zerlegt. Das erste Wort ist der vollständige Paketname des Moduls. Die weiteren Wörter können Platzhalter der Form ${INT} oder ${NAME} enthalten. Sie stehen für Positions-Matchgruppen oder benannte Matchgruppen des gefundenen Namens-Musters (s. unten). Die Wörter werden nach der Ersetzung der Platzhalter der Methode new des angegebenen Moduls als erste Argumente übergeben.

Alle anderen Zeilen werden „getrimmt”: Folgen von Leerraumzeichen am Anfang oder am Ende der Zeile werden entfernt, andere Folgen von mehreren Leerraumzeichen in der Zeile werden durch ein einzelnes Leerzeichen ersetzt. Das Ergebnis ist ein regulärer Ausdruck. Dem regulären Ausdruck wird die letzte vorhergehende MODULE-Zeile zugeordnet. Wenn die Zeichenkette, die der Methode Herbaer::Translate::new als erster Parameter übergeben wird, (die Bezeichnung des Übersetzers) ganz oder zu einem Teil zu dem regulären Ausdruck passt, wird das in der MODULE-Zeile angegebene Modul (das implementierende Modul) geladen. Die Matchgruppen des regulären Ausdrucks bestimmen die Werte der Platzhalter in den Wörtern der MODULE-Zeile.

Die regulären Ausdrücke werden in der Reihenfolge, in der sie in der Datei Translate.names auftreten, mit der Zeichenkette verglichen.

Die Datei Translate.names sollte der Bezeichnung default einen Übersetzer zuordnen.

Funktionen

Herbaer::Translate::new ($trname)

$trname bezeichnet ein Übersetzungs-Modul (implementierendes Modul). Wenn der Wert zu einem regulären Ausdruck in der Datei Translate.names passt, wird das dort bezeichnete Modul geladen und dessen Methode new mit den in Translate.names angegebenen Parametern aufgerufen. Wenn dieser Methode Herbaer::Translate::new nach $trname weitere Argumente übergeben werden, werden diese als weitere Argumente an die Methode new des implementierenden Moduls übergeben.

Wenn kein regulärer Ausdruck aus Translate.names zu $trname passt, wird der Wert von $trname durch Leerzeichen in Worte zerlegt. Das erste Wort ist der Paketname des implementierenden Moduls. Wenn es nicht die Zeichenfolge :: enthält, wird Herbaer::Translate:: vorangestellt. Die weiteren Wörter werden als Argumente an die Methode new des implementierenden Moduls übergeben, danach folgen die weiteren Argumente des Aufrufs von Herbaer::Translate::new.

Implementierende Module

Das Modul Herbaer::Translate::Base (Base.pm (Quelltext)) zeigt die Funktionen, die die Schnittstelle eines Übersetzungsmoduls bilden. Andere Module benutzen Herbaer::Translate::Base als Basis.

Implementierende Module (in alfabetischer Reihenfolge) sind:

Diese Module benutze ich tatsächlich. Ich habe eine Reihe weiterer Module ausprobiert. Neben Ask.pm (Quelltext) habe ich zum Test weiter Module erstellt, die eine Übersetzung simulieren.

Andere Module nutzen andere Web-Dienste zur Übersetzung. Ein Modul wählt einen Übersetzer abhängig von den Sprachen. Hier liegt der Grund für die Methode translator_name. Ich muss auf der Website natürlich auf den (oder wenigstens einen) tatsächlich benutzten Übersetzungsdienst hinweisen.

Ergänzend oder alternativ zu MySQLLookup.pm (Quelltext) gibt es Module, die Übersetzungen in Textdateien oder in „Hash”-Einträgen im Arbeitsspeicher zwischenspeichern. Hier ist der Grund für die Methode finish: Übersetzungen können so dauerhaft gespeichert werden. „DESTROY”-Methoden konnten nicht sicherstellen, dass beim finalen Aufräumen die Daten geschrieben wurden, solange die Dateihandles noch funktionierten. Beim aktuellen Stand der Übersetzung sind die beiden Methoden translator_name und finish nicht nötig.