Erstellen von Quelldateien
Anbei ist eine Beschreibung der unterschiedlichen Quellformate welche mit
Zend_Translate verwendet werden können.
Es ist zu beachten das die meisten der beschriebenen Formate durch Verwendung eines
Tools oder eines Erstellungs Prozesses erstellt werden sollten. Diese Tools und
Prozesse sind nicht Teil vom Zend Framework und für die meisten der beschriebenen
Formate gibt es kostenlose Tools.
Erstellung von Array Quelldateien
Array Quelldateien sind reine Arrays. Sie müssen aber manuell definiert werden, da
es hierfür keine Tools gibt die helfen könnten. Weil Sie so einfach zu handhaben sind,
ist Ihre Verwendung auch der schnellste Weg um zu testen ob Nachrichten innerhalb des
Codes wie erwartet arbeiten. Er ist generell der beste Adapter um mit Mehrsprachigkeit
zu beginnen wenn man keine diesbezüglichen Kenntnisse hat.
'message1',
'message2' => 'message2',
'message3' => 'message3');
$german = array(
'message1' => 'Nachricht1',
'message2' => 'Nachricht2',
'message3' => 'Nachricht3');
$translate = new Zend_Translate('array', $english, 'en');
$translate->addTranslation($deutsch, 'de');
]]>
Seit Release 1.5 wird es auch unterstützt, Arrays die in externen Dateien vorhanden
sind einzubauen. Es ist der Dateiname anzugeben und
Zend_Translate wird diesen automatisch inkludieren und nach dem
Array schauen. Siehe das folgende Beispiel für Details:
'Nachricht1',
'message2' => 'Nachricht2',
'message3' => 'Nachricht3');
// controller
$translate = new Zend_Translate('array', '/path/to/myarray.php', 'de');
]]>
Bei Dateien die kein Array zurückgeben wird das inkludieren fehlschlagen. Auch
jegliche Ausgabe innerhalb dieser Dateien wird ignoriert und unterdrückt.
Erstellung von Gettext Quellen
Gettext Quellen werden durch GNU's Gettext Bibliothek erstellt. Es gibt einige
kostenlose Tools welche den Code parsen können und hierbei die gewünschten Gettext
Quellen erstellen. Diese haben die Endung *.mo und
sind binäre Dateien. Ein Open Source Tool für die Erstellung der Quellen ist
poEdit. Dieses Tool
unterstützt auch beim Übersetzungs-Prozesses selbst.
addTranslation('/path/to/german.mo', 'de');
]]>
Wie man sieht wird dieser Adapter auf exakt die gleiche Art und Weise verwendet mit
einer kleinen Änderung: dem Wechsel von array zu
gettext. Alle anderen Punkte werden in jedem anderen
Adapter auf exakt die gleiche Weise verwendet. Mit diesem Gettext Adapter muß nicht
mehr auf die geforderte Standard Verzeichnis Struktur von Gettext geachtet werden. Auch
nicht auf bindtextdomain und textdomain. Nur der Pfad und der Dateiname muß dem Adapter
übergeben werden.
Man sollte immer UTF-8 als Quell Encoding verwenden. Man könnte sonst Probleme
bekommen wenn man zwei verschiedene Encodings verwendet. Wenn z.B. eine Quelldatei
mit ISO-8815-11 und eine andere mit CP815 encoded ist. Man kann
immer nur ein Encoding für alle Quell Dateien verwenden, und hierbei würde eine der
gewünschten Sprachen nicht korrekt angezeigt werden.
UTF-8 ist ein portables Format welches alle Sprachen unterstützt. Wenn UTF-8 für
alle Sprachen verwendet wird, eliminiert man die Probleme mit inkompatiblen
Encodings.
Viele Gettext Editoren fügen Informationen über den Adapter als Übersetzung eines
leeren Strings hinzu. Das ist der Grund warum leere Strings nicht übersetzt werden wenn
der Gettext Adapter verwendet wird. Stattdessen wird er von der Übersetzungstabelle
gelöscht und von der getAdapterInfo() Methode angeboten. Sie
gibt die Adapterinformationen für alle hinzugefügten Gettextdateien als Array zurück
wobei der Dateiname als Schlüssel verwendet wird.
getAdapterInfo());
]]>
Erstellung von TMX Quellen
TMX Quellen sind der neue Industrie Standard. Sie haben den Vorteil das sie
XML Dateien sind und deswegen mit jedem Texteditor lesbar und
natürlich auch von Menschen. Man kann TMX Dateien entweder per Hand erstellen oder man
verwendet spezielle Tools dafür. Allerdings sind die meisten erhältlichen Tools die
Erstellung von TMX Quellen nicht frei erhältlich.
Beispiel einer TMX Datei
Nachricht1
message1
message2
Nachricht2
]]>
TMX Dateien können mehrere Sprachen in der selben Datei enthalten. Alle anderen in der
Quelle enthaltenen Sprachen werden automatisch hinzugefügt und müssen nicht durch einen
extra Aufruf von addLanguage() ergänzt werden.
Wenn man nur spezielle Sprache aus der Quelle übersetzen will, kann die Option
'defined_language' auf TRUE gesetzt werden. Mit dieser
Option können gewünschte Sprachen explizit mit addLanguage()
hinzugefügt werden. Der Standardwert für diese Option fügt alle Sprachen hinzu.
Erstellung von CSV Quellen
CSV Quellen sind sehr klein und von Menschen lesbar. Wenn ein Kunde selbst übersetzen
will, ist die Verwendung des CSV Adapters warscheinlich die beste Wahl.
Beispiel CSV Datei
addTranslation('path/to/other.csv', 'fr');
]]>
Es gibt drei verschiedene Optionen für den CSV Adapter. Es können
'delimiter', 'limit' und 'enclosure' gesetzt
werden.
Das Standard Trennzeichen für CSV Strings ist ';, aber es muß nicht dieses
Zeichen sein. Mit der Option 'delimiter' kann ein anderes verwendet
werden.
Das Standardlimit für eine Zeile in einer CSV Datei ist '0'. Das bedeutet
dass das Ende der CSV Zeile automatisch gesucht wird. Wenn 'limit' auf
irgendeinen Wert gesetzt wird, dann wird die CSV Datei schneller gelesen, aber jede
Zeile die dieses Limit überschreitet wird abgeschnitten.
Das standardmäßige Anführungszeichen für die Verwendung mit CSV Dateien ist
'"'. Man kann ein anderes Setzen indem die Option 'enclosure'
verwendet wird.
Zweites Beispiel für CSV Dateien
','));
$translate->addTranslation('/path/to/other.csv', 'fr');
]]>
Wenn nicht-ASCII Zeichen in der CSV Datei verwendet werden, wie z.B. Umlaute oder
UTF-8 Zeichen, dann sollte man immer Hochkommas verwenden. Das Weglassen der
Hochkommas kann zu fehlenden Zeichen in der Übersetzung führen.
Erstellung von INI Quelldateien
INI Quelldateien sind menschlich lesbar aber normalerweise nicht sehr
klein da Sie neben der Übersetzung auch andere Daten enthalten. Wenn Sie Daten haben die
von Ihrem Kunden zu bearbeitet sind, verwenden Sie den INI Adapter.
Beispiel einer INI Datei
addTranslation('/path/to/other.ini', 'it');
]]>
INI Dateien haben diverse Einschränkungen. Wenn ein Wert in einer INI
Datei irgendein nicht alphanummerisches Zeichen enthält, muß er in doppelte
Anführungszeichen (") eingeklammert werden. Es gibt auch reservierte Wörter
welche nicht als Schlüssel für INI Dateien verwendet werden dürfen.
Diese enthalten: NULL, yes, no,
TRUE und FALSE. Die Werte
NULL, no und FALSE führen zu
"", yes und TRUE resultieren in
1. Die Zeichen {}|&~![()" dürfen nirgendwo im Schlüssel
verwendet werden und haben im Wert eine spezielle Bedeutung. Diese sollten nicht
verwendet werden da Sie zu unerwartetem Verhalten führen.