Adapter für Zend_Translate
Zend_Translate kann unterschiedliche Adapter für die Übersetzung
verwenden. Jeder Adapter hat seine eigenen Vor- und Nachteile. Hier ist eine kurze
Liste aller unterstützten Adapter für Übersetzungsquelldateien.
Adapter für Zend_Translate
Adapter
Beschreibung
Benutzung
Array
Für PHP Arrays
Kleine Seiten; Einfachste Handhabung; nur für Programmierer
Csv
Für kommagetrennte (*.csv/*.txt) Dateien
Einfaches Textdatei Format; schnell; mögliche Probleme bei der Verwendung
von Unicode Zeichen
Gettext
Für binäre Gettext (*.mo) Dateien
GNU Standard für Linux; Threadsicher; benötigt Tools für die Übersetzung
Ini
Für einfache INI (*.ini) Dateien
Einfaches Testdatei Format; schnell; mögliche Probleme mit Unicode Zeichen
Tbx
Für termbase exchange (*.tbx/*.xml) Dateien
Industriestandard für anwendungsübergreifende Fachbegriffe;
XML Format
Tmx
Für TMX (*.tmx/*.xml) Dateien
Industriestandard für anwendungsübergreifende Übersetzungen;
XML Format, menschenlesbar
Qt
Für qt Linguist (*.ts) Dateien
Plattformübergreifendes Anwendungs-Framework; XML
Format, menschenlesbar
Xliff
Für XLIFF (*.xliff/*.xml) Dateien
Ein einfacheres Format als TMX aber vergleichbar;
XML Format; menschenlesbar
XmlTm
Für xmltm (*.xml) Dateien
Industriestandard für XML basierende
Übersetzungsspeicher; XML Format; menschenlesbar
Andere
*.sql
Verschiedene andere Adapter werden in Zukunft noch implementiert
Wie man entscheidet welchen Adapter man benutzen soll
Zuerst muss man die Entscheidung treffen welchen der Adapter man für
Zend_Translate benutzen soll. Oft sind externe Kriterien wie die
Vorgaben durch ein Projekt oder durch einen Kunden dafür ausschlaggebend. Aber
wenn die Entscheidungsgewalt in den eigenen Händen liegt, werden die folgenden
Hinweise die Entscheidung vereinfachen.
Wenn man den Adapter auswählt, sollte man auch auf das verwendete Encoding achten.
Selbst wenn Zend Framework UTF-8 als Standard-Encoding definiert, besteht manchmal
die Notwendigkeit, andere Encodings zu verwenden.
Zend_Translate ändert kein Encoding, welches in Quelldateien
definiert ist: wenn nun eine Gettext-Quelle das Encoding
ISO-8859-1 verwendet, werden die Strings auch in diesem Encoding
zurückgegeben, ohne dass diese konvertiert werden. Es gibt nur eine
Einschränkung:
Wenn XML basierende Quellformate wie TMX oder XLIFF verwendet
werden, muß das Encoding in den XML Dateiheadern definiert
werden, weil XML Dateien ohne definiertes Encoding durch jeden
Parser standardmäßig als UTF-8 angesehen werden. Man sollte auch darauf achten, dass
das Encoding von XML Dateien zur Zeit auf die Encodings limitiert
ist welche durch PHP unterstützt werden. Das sind UTF-8,
ISO-8859-1 und US-ASCII.
Zend_Translate_Adapter_Array
Der Array-Adapter ist der Adapter, welcher für Programmierer am einfachsten
zu verwenden ist.
Aber wenn viele Strings oder viele Sprachen zu übersetzen sind, sollte über
einen anderen Adapter nachgedacht werden. Wenn z.B. über 5000 Strings zu
übersetzen sind wird, ist der Array-Adapter nicht die beste Wahl.
Dieser Adapter sollte nur für kleine Seiten mit einer Handvoll Sprachen
verwendet werden und wenn man selbst oder das eigene Team die Übersetzungen
erstellen kann.
Zend_Translate_Adapter_Csv
Der CSV-Adapter ist der Adapter, der am einfachsten für Kunden zu benutzen ist.
CSV-Dateien sind mit Standardtexteditoren lesbar, allerdings unterstützen diese
Editoren oft keine UTF8 Zeichensätze.
Man sollte diesen Adapter nur benutzen, wenn der Kunde die Übersetzungen
selbst durchführen will.
Es ist zu beachten, dass der CSV-Adapter Probleme hat, wenn die CSV-Dateien anders
kodiert sind als die Gebietsschemaeinstellung der Umgebung. Die Ursache ist ein
Bug von PHP selbst, der nicht vor PHP 6.0
behoben sein wird (http://bugs.php.net/bug.php?id=38471). Deshalb sollte man
sich darüber im klaren sein, dass der CSV-Adapter wegen Einschränkungen durch
PHP nicht unabhängig vom Gebietsschema ist.
Zend_Translate_Adapter_Gettext
Der Gettext-Adapter ist der Adapter, der am meisten verwendet wird.
Gettext ist ein Übersetzungsformat, welches durch GNU eingeführt wurde
und jetzt weltweit Verwendung findet.
Es ist nicht menschenlesbar, allerdings existieren einige kostenlose
Freeware Tools (zum Beispiel, POEdit),
welche sehr nützlich sind. Der Zend_Translate Gettext-Adapter
ist nicht mit Hilfe von PHPs Gettext-Erweiterung realisiert
worden. Der Gettext-Adapter kann also verwendet werden, selbst wenn
PHPs Gettext-Erweiterung nicht verfügbar ist.
Ausserdem ist der Adapter im Gegensatz zu PHPs
Gettext-Erweiterung threadsicher.
Die meisten werden diesen Adapter benutzen.
Mit den vorhandenen Tools ist eine professionelle Übersetzung sehr einfach.
Aber Gettext-Dateien werden in einem machinenlesbaren Format gespeichert
und sind nicht ohne Tools lesbar.
Zend_Translate_Adapter_Ini
Der INI Adapter ist ein sehr einfacher Adapter, welcher sogar
direkt von Kunden verwendet werden kann. INI Dateien sind von
standardmäßigen Texteditoren lesbar, allerdings unterstützen manche Texteditoren
keine UTF8 Zeichensätze.
Dieser Adapter sollte nur dann verwendet werden, wenn ein Kunde Übersetzungen selbst
machen will. Verwenden Sie diesen Adapter nicht als generelle Übersetzungsquelle.
Zend_Translate_Adapter_Tbx
Der TBX Adapter ist ein Adapter, der von Kunden benutzt wird, die bereits das TBX
Format für ihre internen Übersetzungssysteme verwenden. TBX ist kein standardmäßiges
Übersetzungsformat sondern eher eine Sammlung von bereits übersetzten und
vorübersetzten Quell-Strings. Wenn dieser Adapter verwendet wird, muß sichergestellt
werden, dass alle benötigten Quell-Strings übersetzt sind. TBX ist ein dateibasiertes
und komplett neues XML Format. XML Dateien
sind menschenlesbar, aber das Lesen der Dateien ist nicht so schnell wie mit
Gettext-Dateien.
Dieser Adapter ist perfekt für Firmen, die bereits vorübersetzte Quelldateien
verwenden. Die Dateien sind menschenlesbar und unabhängig vom Betriebsystem.
Rückschritt in PHP 5.3
Vor PHP 5.3 haben parse_ini_file()
und parse_ini_string() nicht ASCII Zeichen in
INI Optionsschlüsseln ohne Probleme behandelt. Aber beginnend
mit PHP 5.3 werden derartige Schlüssel im zurückgegebenen Array
von beiden Funktionen stillschweigend entfernt. Wenn man Schlüssel hatte
die UTF-8 oder Latin-1 Zeichen verwenden, werden die eigenen Übersetzungen nicht
mehr funktionieren, wenn der INI Adapter verwendet wird. Wenn
das der Fall ist, wird empfohlen einen anderen Adapter zu verwenden.
Zend_Translate_Adapter_Tmx
Der TMX-Adapter wird meistens benutzt, wenn Kunden
mehrere Systeme haben, welche alle auf die gleichen Übersetzungen
zugreifen oder wenn die Übersetzungen systemunabhängig sein müssen.
TMX ist ein XML Dateiformat, welches als der kommende
Industriestandard gehandelt wird. XML Dateien sind menschenlesbar,
aber das Lesen der Dateien ist nicht so schnell wie mit Gettext-Dateien.
Die meisten mittleren Firmen und Großfirmen werden diesen Adapter benutzen.
Die Dateien sind menschenlesbar und systemunabhängig.
Zend_Translate_Adapter_Qt
Der Qt-Adapter ist der Adapter für alle Kunden, welche TS-Dateien
als Übersetzungsquelle haben, die von QtLinguist erstellt wurden.
QT ist ein XML basiertes Format.
XML Dateien sind menschenlesbar, aber das Lesen der Dateien
ist nicht so schnell wie mit Gettext-Dateien.
Einige "Big Player" haben Ihre Software auf dem QT Framework ausgebaut.
Die Dateien sind menschenlesbar und betriebsystemunabhängig.
Zend_Translate_Adapter_Xliff
Der XLIFF Adapter wird meistens von Kunden benutzt,
die zwar XML Dateien haben wollen, aber keine Tools für TMX
zur Verfügung haben.
XLIFF ist ein XML Dateiformat, welches ähnlich zu TMX ist, aber
etwas einfacher im Aufbau. Es unterstützt aber nicht alle Möglichkeiten von
TMX. XML Dateien sind menschenlesbar, aber das Lesen der
Dateien ist nicht so schnell wie mit Gettext-Dateien.
Die meisten Mittelständigen Unternehmen werden diesen Adapter benutzen.
Die Dateien sind menschenlesbar und systemunabhängig.
Zend_Translate_Adapter_XmlTm
Der XmlTm Adapter ist ein Adapter der von Kunden verwendet wird, die das Layout
selbst ändern wollen. XmlTm ist ein Format, das es erlaubt den kompletten
HTML Code in die Übersetzungsquelle zu inkludieren, so dass die
Übersetzung mit dem Layout verknüpft ist. XmlTm ist ein XML
Dateibasiertes Format, welches ähnlich wie XLIFF, aber nicht so einfach lesbar ist.
Dieser Adapter sollte nur verwendet werden, wenn bereits Quelldateien dieses Formats
existieren. Die Dateien sind menschenlesbar und systemunabhängig.
Selbst geschriebene Adapter integrieren
Zend_Translate erlaubt es, selbst geschriebene Adapterklassen zu
integrieren und zu verwenden. Diese können wie die Standardadapterklassen verwendet
werden, welche bereits in Zend_Translate enthalten sind.
Jede Adapter Klasse, die mit Zend_Translate verwendet werden soll,
muß eine Subklasse von Zend_Translate_Adapter sein.
Zend_Translate_Adapter ist eine abstrakte Klasse, welche bereits
alles definiert, was für eine Übersetzung notwendig ist. Nun muß lediglich noch die
Definition der Lesemethode für die Übersetzungsdaten geschrieben werden.
Die Verwendung des Prefixes "Zend" sollte dem Zend Framework vorbehalten sein. Wenn
Zend_Translate mit einem eigenen Adapter erweitert wird, sollte
er etwa "Firma_Translate_Adapter_MeinFormat" heißen. Der folgende Code zeigt ein
Beispiel, wie eine selbst geschriebene Adapter Klasse implementiert werden sollte:
'Firma_Translate_Adapter_MeinFormat',
'content' => '/path/to/translate.xx',
'locale' => 'en',
'meineoption' => 'myvalue'
)
);
} catch (Exception $e) {
// Datei nicht gefunden, keine Adapter Klasse...
// Genereller Fehler
}
]]>
Alle Adapter beschleunigen
Zend_Translate erlaubt intern die Verwendung von
Zend_Cache, um das Laden von Übersetzungsquellen zu
beschleunigen. Das kann sehr nützlich sein, wenn viele Übersetzungsquellen oder
aufwändige Quellformate wie XML basierte Dateien verwendet werden.
Um das Caching zu verwenden, muß nur ein Cache-Objekt an die
Methode Zend_Translate::setCache() übergeben werden. Diese
nimmt eine Instanz von Zend_Cache als einzigen Parameter. Auch
wenn irgendein Adapter direkt verwendet wird, kann die
Methode setCache() verwendet werden. Der Bequemlichkeit halber
gibt es die statischen Methoden getCache(),
hasCache(), clearCache() und
removeCache().
'gettext',
'content' => '/path/to/translate.mo',
'locale' => 'en'
)
);
// um den Cache irgendwo später im Code zu löschen
Zend_Translate::clearCache();
]]>
Der Cache muß vor Verwendung oder Initialisierung eines
Adapters oder einer Instanz von Zend_Translate gesetzt werden.
Andernfalls wird die Übersetzungsquelle nicht gecached, bis eine neue Quelle mit der
Methode addTranslation() hinzugefügt wird.
Wenn der zugeordnete Cache Tags unterstützt, kann man einen eigenen Tag-String durch
Verwendung der Option tag setzen. Das erlaubt es, nur den Cache von
dieser einzelnen Instanz von Zend_Translate zu löschen. Wenn man
diese Option nicht verwendet, wird das Standardtag Zend_Translate
verwendet.
Bei Verwendung der Option tag muss man das verwendete Tag an
clearCache() übergeben um anzugeben, welches Tag man
löschen will.
'gettext',
'content' => '/path/to/translate.mo',
'locale' => 'en',
'tag' => 'MyTag'
)
);
// irgendwo später im Code
Zend_Translate::clearCache('MyTag');
]]>