| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15617 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.translate.adapter">
- <title>Adapter für Zend_Translate</title>
- <para>
- <classname>Zend_Translate</classname> 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 Übersetzungs Quell Dateien.
- </para>
- <table id="zend.translate.adapter.table">
- <title>Adapter für Zend_Translate</title>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Adapter</entry>
- <entry>Beschreibung</entry>
- <entry>Benutzung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>Array</entry>
- <entry>Für PHP Arrays</entry>
- <entry>Kleine Seiten; Einfachste Handhabung; nur für Programmierer</entry>
- </row>
- <row>
- <entry>Csv</entry>
- <entry>Für kommagetrennte (*.csv/*.txt) Dateien</entry>
- <entry>
- Einfaches Textdatei Format; schnell; mögliche Probleme bei der Verwendung
- von Unicode Zeichen
- </entry>
- </row>
- <row>
- <entry>Gettext</entry>
- <entry>Für binäre Gettext (*.mo) Dateien</entry>
- <entry>
- GNU Standard für Linux; Threadsicher; benötigt Tools für die Übersetzung
- </entry>
- </row>
- <row>
- <entry>Ini</entry>
- <entry>Für einfache ini (*.ini) Dateien</entry>
- <entry>
- Einfaches Testdatei Format; schnell; mögliche Probleme mit Unicode Zeichen
- </entry>
- </row>
- <row>
- <entry>Tbx</entry>
- <entry>Für termbase exchange (*.tbx/*.xml) Dateien</entry>
- <entry>
- Industrie Standard für Applikations übergreifende terminologie Strings; XML
- Format
- </entry>
- </row>
- <row>
- <entry>Tmx</entry>
- <entry>Für TMX (*.tmx/*.xml) Dateien</entry>
- <entry>
- Industrie Standard für Applikations übergreifende Übersetzungen; XML Format,
- menschlich lesbar
- </entry>
- </row>
- <row>
- <entry>Qt</entry>
- <entry>Für qt Linguist (*.ts) Dateien</entry>
- <entry>
- Plattform übergreifender Anwendungs Framework; XML Format, menschlich lesbar
- </entry>
- </row>
- <row>
- <entry>Xliff</entry>
- <entry>Für XLIFF (*.xliff/*.xml) Dateien</entry>
- <entry>
- Ein einfacheres Format als TMX aber vergleichbar; XML Format; menschlich
- lesbar
- </entry>
- </row>
- <row>
- <entry>XmlTm</entry>
- <entry>Für xmltm (*.xml) Dateien</entry>
- <entry>
- Industrie Standard für XML basierende Übersetzungsspeicher; XML Format;
- menschlich lesbar
- </entry>
- </row>
- <row>
- <entry>Andere</entry>
- <entry>*.sql</entry>
- <entry>Verschiedene andere Adapter werden in Zukunft noch implementiert</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <sect2 id="zend.translate.adapter.decision">
- <title>Wie man entscheidet welchen Adapter man benutzen soll</title>
- <para>
- Zuerst muss man die Entscheidung treffen welchen der Adapter man für
- <classname>Zend_Translate</classname> benutzen soll. Oft sind externe Kriterien wie die
- Vorgaben durch ein Projekt oder durch eien Kunden dafür ausschlaggebend. Aber
- wenn die Entscheidungsgewalt in den eigenen Händen liegt, werden die folgenden
- Hinweise die Entscheidung vereinfachen.
- </para>
- <note>
- <para>
- 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.
- <classname>Zend_Translate</classname> ändert kein Encoding welches in Quelldateien
- definiert ist was bedeutet das, wenn eine Gettext Quelle auf ISO-8859-1 aufgebaut
- ist, die Strings auch in diesem Encoding zurückgegeben werden ohne das diese
- Konvertiert werden. Es gibt nur eine Einschränkung:
- </para>
- <para>
- 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 das aktuell das Encoding von XML Dateien auf die Encodings
- limitiert ist welche durch PHP unterstützt werden. Das sind aktuell UTF-8,
- ISO-8859-1 und US-ASCII.
- </para>
- </note>
- <sect3 id="zend.translate.adapter.array">
- <title>Zend_Translate_Adapter_Array</title>
- <para>
- Der Array Adapter ist der Adapter welcher am einfachsten für Programmierer
- zu verwenden ist.
- Aber wenn viele Strings oder viele Sprachen zu übersetzen sind sollte über
- einen anderen Adapter nachgedachte werden. Wenn z.B. über 5000 Strings zu
- übersetzen sind wird der Array Adapter nicht die beste Wahl sein.
- </para>
- <para>
- 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.
- </para>
- </sect3>
- <sect3 id="zend.translate.adapter.csv">
- <title>Zend_Translate_Adapter_Csv</title>
- <para>
- Der CSV Adapter ist der Adapter der am einfachsten für Kunden zu benutzen ist.
- CSV Dateien sind mit Standard Texteditoren lesbar, aber diese Editoren
- unterstützen oft nicht UTF8 Zeichen.
- </para>
- <para>
- Man sollte diesen Adapter nur benutzen wenn der Kunde die Übersetzungen
- selbst durchführen will.
- </para>
- <note>
- <para>
- Es ist zu beachten das der Csv Adapter Probleme hat wenn die Csv Dateien anders
- kodiert sind als die Gebietsschema-Einstellung 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 achtgeben das der Csv
- Adapter wegen Einschränkungen durch PHP nicht unabhängig vom Gebietsschema ist.
- </para>
- </note>
- </sect3>
- <sect3 id="zend.translate.adapter.gettext">
- <title>Zend_Translate_Adapter_Gettext</title>
- <para>
- 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 menschlich lesbar, allerdings existieren einige kostenlose
- Freeware Tools (zum Beispiel, <ulink
- url="http://sourceforge.net/projects/poedit/">POEdit</ulink>),
- welche sehr nützlich sind. Der <classname>Zend_Translate</classname> Gettext Adapter
- ist nicht mit Hilfe von PHP's Gettext Erweiterung realisiert worden.
- Der Gettext Adapter kann also verwendet werden selbst wenn PHP's Gettext
- Erweiterung nicht verfügbar ist.
- Ausserdem ist der Adapter im Gegensatz zu PHP's Gettext Erweiterung Threadsicher.
- </para>
- <para>
- Die meisten werden diesen Adapter benutzen.
- Mit den vorhandenen Tools ist eine Professionelle Übersetzung sehr einfach.
- Aber Gettext Dateien werden in einem machinen-lesbaren Format gespeichert
- und sind nicht ohne Tools lesbar.
- </para>
- </sect3>
- <sect3 id="zend.translate.adapter.ini">
- <title>Zend_Translate_Adapter_Ini</title>
- <para>
- Der INI Adapter ist ein sehr einfacher Adapter welcher sogar direkt von Kunden
- verwendet werden kann. INI Dateien sind von standardmäßigen Texteditoren lesbar,
- aber Texteditoren unterstützen oftmals keine UTF8 Zeichensets.
- </para>
- <para>
- Dieser Adapter sollte nur dann verwendet werden wenn ein Kunde Übersetzungen selbst
- machen will. Verwenden Sie diesen Adapter nicht als generelle Übersetzungsquelle.
- </para>
- </sect3>
- <sect3 id="zend.translate.adapter.tbx">
- <title>Zend_Translate_Adapter_Tbx</title>
- <para>
- 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 Quellstrings. Wenn dieser Adapter verwendet wird, muß sichergestellt
- werden das alle benötigten Quell Strings übersetzt sind. TBX ist ein dateibasiertes
- und komplett neues Format. XML Dateien sind menschlich lesbar, aber das Lesen der
- Dateien ist nicht so schnell wie mit Gettext Dateien.
- </para>
- <para>
- Dieser Adapter ist perfekt für Firmen die bereits vor-übersetzte Quell Dateien
- verwenden. Die Dateien sind menschlich lesbar und Betriebsystem unabhängig.
- </para>
- </sect3>
- <sect3 id="zend.translate.adapter.tmx">
- <title>Zend_Translate_Adapter_Tmx</title>
- <para>
- Der TMX Adapter ist der Adapter welcher am meisten benutzt wird wenn
- Kunden mehrere Systeme haben welche alle auf die gleichen Übersetzungen
- zugreifen, oder wenn die Übersetzungen Systemunabhängig sein muß.
- TMX ist ein XML Datei Format, welches als der kommende Industriestandard
- gehandelt wird. XML Dateien sind menschlich lesbar, aber das Lesen der
- Dateien ist nicht so schnell wie mit Gettext Dateien.
- </para>
- <para>
- Die meisten Mittel- und Großfirmen werden diesen Adapter benutzen.
- Die Dateien sind menschlich lesbar und systemunabhängig.
- </para>
- </sect3>
- <sect3 id="zend.translate.adapter.qt">
- <title>Zend_Translate_Adapter_Qt</title>
- <para>
- Der Qt Adapter ist der Adapter ist für alle Kunden welche TS Dateien
- als Übersetzungs-Quelle haben, die von QtLinguist erstellt wurden.
- QT ist ein XML basiertes Format.
- XML Dateien sind menschlich lesbar, aber das Lesen der Dateien ist nicht
- so schnell wie mit Gettext Dateien.
- </para>
- <para>
- Einige "Big Player" haben Ihre Software auf dem QT Framework ausgebaut.
- Die Dateien sind menschlich lesbar und Betriebsystem unabhängig.
- </para>
- </sect3>
- <sect3 id="zend.translate.adapter.xliff">
- <title>Zend_Translate_Adapter_Xliff</title>
- <para>
- Der XLIFF Adapter ist der Adapter der von den meisten Kunden benutzt
- wird 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 menschlich lesbar, aber das Lesen der
- Dateien ist nicht so schnell wie mit Gettext Dateien.
- </para>
- <para>
- Die meisten Mittelständigen Unternehmen werden diesen Adapter benutzen.
- Die Dateien sind menschlich lesbar und systemunabhängig.
- </para>
- </sect3>
- <sect3 id="zend.translate.adapter.xmltm">
- <title>Zend_Translate_Adapter_XmlTm</title>
- <para>
- 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, sodas die Übersetzung mit dem Layout
- verknüpft ist. XmlTm ist ein XML Dateibasiertes Format, welches ähnlich wie XLIFF,
- aber nicht so einfach lesbar ist.
- </para>
- <para>
- Dieser Adapter sollte nur verwendet werden wenn bereits Quelldateien dieses Formats
- existieren. Die Dateien sind menschlich lesbar und systemunabhängig.
- </para>
- </sect3>
- </sect2>
- <sect2 id="zend.translate.adapter.selfwritten">
- <title>Selbst geschriebene Adapter integrieren</title>
- <para>
- <classname>Zend_Translate</classname> erlaubt es, selbst geschriebene Adapter Klassen zu
- integrieren und zu verwenden. Diese können wie die Standard Adapter Klassen, welche
- bereits in <classname>Zend_Translate</classname> inkludiert sind, verwendet werden.
- </para>
- <para>
- Jede Adapter Klasse die mit <classname>Zend_Translate</classname> verwendet werden soll
- muß eine Subklasse von <classname>Zend_Translate_Adapter</classname> sein.
- <classname>Zend_Translate_Adapter</classname> ist eine abstrakte Klasse welche bereits
- alles definiert was für eine Übersetzung notwendig ist. Was noch getan werden muß, ist
- die Definition des Lesers für die Übersetzungsdaten.
- </para>
- <para>
- Die Verwendung des Prefixes "Zend" sollte dem Zend_Framework vorbehalten sein. Wenn
- <classname>Zend_Translate</classname> mit einem eigenen Adapter erweitert wird, sollte
- er in etwa "Firma_Translate_Adapter_MeinFormat" heißen. Der folgende Code zeigt ein
- Beispiel davon, wie eine selbst geschriebene Adapter Klasse implmentiert werden sollte:
- </para>
- <programlisting language="php"><![CDATA[
- try {
- $translate = new Zend_Translate('Firma_Translate_Adapter_MeinFormat',
- '/path/to/translate.xx',
- 'en',
- array('meineoption' => 'myvalue'));
- } catch (Exception $e) {
- // Datei nicht gefunden, keine Adapter Klasse...
- // Genereller Fehler
- }
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.translate.adapter.caching">
- <title>Alle Adapter verschnellern</title>
- <para>
- <classname>Zend_Translate</classname> erlaubt intern die Verwendung von
- <classname>Zend_Cache</classname> um das Laden von Übersetzungs Quellen zu
- verschnellern. Das kann sehr nützlich sein wenn viele Übersetzungs Quellen oder
- aufwändige Quellformate, wie XML basierte Dateien, verwendet werden.
- </para>
- <para>
- Um das Caching zu verwenden muß nur ein Cache Objekt an die
- <classname>Zend_Translate::setCache()</classname> Methode übergeben werden. Diese nimmt
- eine Instanz von <classname>Zend_Cache</classname> als einzigen Parameter. Auch wenn
- irgendein Adapter direkt verwendet wird kann die <code>setCache()</code> Methode
- verwendet werden. Der Bequemlichkeit halber gibt es die statischen Methoden
- <code>getCache()</code>, <code>hasCache()</code>, <code>clearCache()</code> und
- <code>removeCache()</code>.
- </para>
- <programlisting language="php"><![CDATA[
- $cache = Zend_Cache::factory('Core',
- 'File',
- $frontendOptions,
- $backendOptions);
- Zend_Translate::setCache($cache);
- $translate = new Zend_Translate('gettext',
- '/path/to/translate.mo',
- 'en');
- ]]></programlisting>
- <note>
- <para>
- Der Cache muß <emphasis>vor</emphasis> seiner Verwendung oder Initiierung eines
- Adapter oder einer Instanz von <classname>Zend_Translate</classname> gesetzt werden.
- Andernfalls wird die Übersetzungs Quelle nicht gecached bis eine neue Quelle mit der
- <code>addTranslation()</code> Methode hinzugefügt wird.
- </para>
- </note>
- </sect2>
- </sect1>
|