use Herbaer::Translate; my $translator = new Herbaer::Translate ("Übersetzername"); my $hallo_chinesisch = $translator -> translate ("Hallo Welt", "de", "zh"); $translator -> learn ("Hallo Welt", "de", "zh", "你好世界");
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)).
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 ${
oder INT
}${
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 NAME
}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.
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
.
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:
Herbaer::Translate::Ask
(Ask.pm
(Quelltext))Herbaer::Translate::GoogleTranslate
(GoogleTranslate.pm
(Quelltext))Herbaer::Translate::Learnchain
(Learnchain.pm
(Quelltext))Herbaer::Translate::MySQLLookup
(MySQLLookup.pm
(Quelltext))Herbaer::Translate::NameReplacer
(NameReplacer.pm
(Quelltext))Herbaer::Translate::Normalizer
(Normalizer.pm
(Quelltext))Herbaer::Translate::Pipe
(Pipe.pm
(Quelltext))Herbaer::Translate::SystemItemFilter
(SystemItemFilter.pm
(Quelltext))Herbaer::Translate::WordReplacer
(WordReplacer.pm
(Quelltext))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.