Zend_Translate-SourceCreation.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 17406 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.translate.sourcecreation">
  5. <title>Erstellen von Quelldateien</title>
  6. <para>
  7. Anbei ist eine Beschreibung der unterschiedlichen Quellformate welche mit
  8. <classname>Zend_Translate</classname> verwendet werden können.
  9. </para>
  10. <note>
  11. <para>
  12. Es ist zu beachten das die meisten der beschriebenen Formate durch Verwendung eines
  13. Tools oder eines Erstellungs Prozesses erstellt werden sollten. Diese Tools und
  14. Prozesse sind nicht Teil vom Zend Framework und für die meisten der beschriebenen
  15. Formate gibt es kostenlose Tools.
  16. </para>
  17. </note>
  18. <sect2 id="zend.translate.sourcecreation.array">
  19. <title>Erstellung von Array Quelldateien</title>
  20. <para>
  21. Array Quelldateien sind reine Arrays. Sie müssen aber manuell definiert werden, da
  22. es hierfür keine Tools gibt die helfen könnten. Weil Sie so einfach zu handhaben sind,
  23. ist Ihre Verwendung auch der schnellste Weg um zu testen ob Nachrichten innerhalb des
  24. Codes wie erwartet arbeiten. Er ist generell der beste Adapter um mit Mehrsprachigkeit
  25. zu beginnen wenn man keine diesbezüglichen Kenntnisse hat.
  26. </para>
  27. <programlisting language="php"><![CDATA[
  28. $english = array(
  29. 'message1' => 'message1',
  30. 'message2' => 'message2',
  31. 'message3' => 'message3');
  32. $german = array(
  33. 'message1' => 'Nachricht1',
  34. 'message2' => 'Nachricht2',
  35. 'message3' => 'Nachricht3');
  36. $translate = new Zend_Translate('array', $english, 'en');
  37. $translate->addTranslation($deutsch, 'de');
  38. ]]></programlisting>
  39. <para>
  40. Seit Release 1.5 wird es auch unterstützt, Arrays die in externen Dateien vorhanden
  41. sind einzubauen. Es ist der Dateiname anzugeben und
  42. <classname>Zend_Translate</classname> wird diesen automatisch inkludieren und nach dem
  43. Array schauen. Siehe das folgende Beispiel für Details:
  44. </para>
  45. <programlisting language="php"><![CDATA[
  46. // myarray.php
  47. return array(
  48. 'message1' => 'Nachricht1',
  49. 'message2' => 'Nachricht2',
  50. 'message3' => 'Nachricht3');
  51. // controller
  52. $translate = new Zend_Translate('array', '/path/to/myarray.php', 'de');
  53. ]]></programlisting>
  54. <note>
  55. <para>
  56. Bei Dateien die kein Array zurückgeben wird das inkludieren fehlschlagen. Auch
  57. jegliche Ausgabe innerhalb dieser Dateien wird ignoriert und unterdrückt.
  58. </para>
  59. </note>
  60. </sect2>
  61. <sect2 id="zend.translate.sourcecreation.gettext">
  62. <title>Erstellung von Gettext Quellen</title>
  63. <para>
  64. Gettext Quellen werden durch GNU's Gettext Bibliothek erstellt. Es gibt einige
  65. kostenlose Tools welche den Code parsen können und hierbei die gewünschten Gettext
  66. Quellen erstellen. Diese haben die Endung <emphasis>*.mo</emphasis> und
  67. sind binäre Dateien. Ein Open Source Tool für die Erstellung der Quellen ist
  68. <ulink url="http://sourceforge.net/projects/poedit/">poEdit</ulink>. Dieses Tool
  69. unterstützt auch beim Übersetzungs-Prozesses selbst.
  70. </para>
  71. <programlisting language="php"><![CDATA[
  72. // Wir nehmen an das die mo Datien erstellt und übersetzt wurden
  73. $translate = new Zend_Translate('gettext', '/path/to/english.mo', 'en');
  74. $translate->addTranslation('/path/to/german.mo', 'de');
  75. ]]></programlisting>
  76. <para>
  77. Wie man sieht wird dieser Adapter auf exakt die gleiche Art und Weise verwendet mit
  78. einer kleinen Änderung: dem Wechsel von <emphasis>array</emphasis> zu
  79. <emphasis>gettext</emphasis>. Alle anderen Punkte werden in jedem anderen
  80. Adapter auf exakt die gleiche Weise verwendet. Mit diesem Gettext Adapter muß nicht
  81. mehr auf die geforderte Standard Verzeichnis Struktur von Gettext geachtet werden. Auch
  82. nicht auf bindtextdomain und textdomain. Nur der Pfad und der Dateiname muß dem Adapter
  83. übergeben werden.
  84. </para>
  85. <note>
  86. <para>
  87. Man sollte immer UTF-8 als Quell Encoding verwenden. Man könnte sonst Probleme
  88. bekommen wenn man zwei verschiedene Encodings verwendet. Wenn z.B. eine Quelldatei
  89. mit ISO-8815-11 und eine andere mit CP815 encoded ist. Man kann
  90. immer nur ein Encoding für alle Quell Dateien verwenden, und hierbei würde eine der
  91. gewünschten Sprachen nicht korrekt angezeigt werden.
  92. </para>
  93. <para>
  94. UTF-8 ist ein portables Format welches alle Sprachen unterstützt. Wenn UTF-8 für
  95. alle Sprachen verwendet wird, eliminiert man die Probleme mit inkompatiblen
  96. Encodings.
  97. </para>
  98. </note>
  99. <para>
  100. Viele Gettext Editoren fügen Informationen über den Adapter als Übersetzung eines
  101. leeren Strings hinzu. Das ist der Grund warum leere Strings nicht übersetzt werden wenn
  102. der Gettext Adapter verwendet wird. Stattdessen wird er von der Übersetzungstabelle
  103. gelöscht und von der <methodname>getAdapterInfo()</methodname> Methode angeboten. Sie
  104. gibt die Adapterinformationen für alle hinzugefügten Gettextdateien als Array zurück
  105. wobei der Dateiname als Schlüssel verwendet wird.
  106. </para>
  107. <programlisting language="php"><![CDATA[
  108. // Informationen des Adapters bekommen
  109. $translate = new Zend_Translate('gettext', '/path/to/english.mo', 'en');
  110. print_r($translate->getAdapterInfo());
  111. ]]></programlisting>
  112. </sect2>
  113. <sect2 id="zend.translate.sourcecreation.tmx">
  114. <title>Erstellung von TMX Quellen</title>
  115. <para>
  116. TMX Quellen sind der neue Industrie Standard. Sie haben den Vorteil das sie
  117. <acronym>XML</acronym> Dateien sind und deswegen mit jedem Texteditor lesbar und
  118. natürlich auch von Menschen. Man kann TMX Dateien entweder per Hand erstellen oder man
  119. verwendet spezielle Tools dafür. Allerdings sind die meisten erhältlichen Tools die
  120. Erstellung von TMX Quellen nicht frei erhältlich.
  121. </para>
  122. <example id="zend.translate.sourcecreation.tmx.example">
  123. <title>Beispiel einer TMX Datei</title>
  124. <programlisting language="xml"><![CDATA[
  125. <?xml version="1.0" ?>
  126. <!DOCTYPE tmx SYSTEM "tmx14.dtd">
  127. <tmx version="1.4">
  128. <header creationtoolversion="1.0.0" datatype="winres" segtype="sentence"
  129. adminlang="en-us" srclang="de-at" o-tmf="abc"
  130. creationtool="XYZTool" >
  131. </header>
  132. <body>
  133. <tu tuid='message1'>
  134. <tuv xml:lang="de"><seg>Nachricht1</seg></tuv>
  135. <tuv xml:lang="en"><seg>message1</seg></tuv>
  136. </tu>
  137. <tu tuid='message2'>
  138. <tuv xml:lang="en"><seg>message2</seg></tuv>
  139. <tuv xml:lang="de"><seg>Nachricht2</seg></tuv>
  140. </tu>
  141. ]]></programlisting>
  142. <programlisting language="php"><![CDATA[
  143. $translate = new Zend_Translate('tmx', 'path/to/mytranslation.tmx', 'en');
  144. ]]></programlisting>
  145. </example>
  146. <para>
  147. TMX Dateien können mehrere Sprachen in der selben Datei enthalten. Alle anderen in der
  148. Quelle enthaltenen Sprachen werden automatisch hinzugefügt und müssen nicht durch einen
  149. extra Aufruf von <methodname>addLanguage()</methodname> ergänzt werden.
  150. </para>
  151. <para>
  152. Wenn man nur spezielle Sprache aus der Quelle übersetzen will, kann die Option
  153. '<code>defined_language</code>' auf <constant>TRUE</constant> gesetzt werden. Mit dieser
  154. Option können gewünschte Sprachen explizit mit <methodname>addLanguage()</methodname>
  155. hinzugefügt werden. Der Standardwert für diese Option fügt alle Sprachen hinzu.
  156. </para>
  157. </sect2>
  158. <sect2 id="zend.translate.sourcecreation.csv">
  159. <title>Erstellung von CSV Quellen</title>
  160. <para>
  161. CSV Quellen sind sehr klein und von Menschen lesbar. Wenn ein Kunde selbst übersetzen
  162. will, ist die Verwendung des CSV Adapters warscheinlich die beste Wahl.
  163. </para>
  164. <example id="zend.translate.sourcecreation.csv.example">
  165. <title>Beispiel CSV Datei</title>
  166. <programlisting language="txt"><![CDATA[
  167. #Example csv file
  168. message1;Nachricht1
  169. message2;Nachricht2
  170. ]]></programlisting>
  171. <programlisting language="php"><![CDATA[
  172. $translate = new Zend_Translate('csv', '/path/to/mytranslation.csv', 'de');
  173. $translate->addTranslation('path/to/other.csv', 'fr');
  174. ]]></programlisting>
  175. </example>
  176. <para>
  177. Es gibt drei verschiedene Optionen für den CSV Adapter. Es können
  178. '<code>delimiter</code>', '<code>limit</code>' und '<code>enclosure</code>' gesetzt
  179. werden.
  180. </para>
  181. <para>
  182. Das Standard Trennzeichen für CSV Strings ist '<code>;</code>, aber es muß nicht dieses
  183. Zeichen sein. Mit der Option '<code>delimiter</code>' kann ein anderes verwendet
  184. werden.
  185. </para>
  186. <para>
  187. Das Standardlimit für eine Zeile in einer CSV Datei ist '<code>0</code>'. Das bedeutet
  188. dass das Ende der CSV Zeile automatisch gesucht wird. Wenn '<code>limit</code>' auf
  189. irgendeinen Wert gesetzt wird, dann wird die CSV Datei schneller gelesen, aber jede
  190. Zeile die dieses Limit überschreitet wird abgeschnitten.
  191. </para>
  192. <para>
  193. Das standardmäßige Anführungszeichen für die Verwendung mit CSV Dateien ist
  194. '<code>"</code>'. Man kann ein anderes Setzen indem die Option '<code>enclosure</code>'
  195. verwendet wird.
  196. </para>
  197. <example id="zend.translate.sourcecreation.csv.example2">
  198. <title>Zweites Beispiel für CSV Dateien</title>
  199. <programlisting language="txt"><![CDATA[
  200. # Example CSV file
  201. "message,1",Nachricht1
  202. message2,"Nachricht,2"
  203. "message3,",Nachricht3
  204. ]]></programlisting>
  205. <programlisting language="php"><![CDATA[
  206. $translate = new Zend_Translate(
  207. 'csv',
  208. '/path/to/mytranslation.csv',
  209. 'de',
  210. array('delimiter' => ','));
  211. $translate->addTranslation('/path/to/other.csv', 'fr');
  212. ]]></programlisting>
  213. </example>
  214. <note>
  215. <para>
  216. Wenn nicht-ASCII Zeichen in der CSV Datei verwendet werden, wie z.B. Umlaute oder
  217. UTF-8 Zeichen, dann sollte man immer Hochkommas verwenden. Das Weglassen der
  218. Hochkommas kann zu fehlenden Zeichen in der Übersetzung führen.
  219. </para>
  220. </note>
  221. </sect2>
  222. <sect2 id="zend.translate.sourcecreation.ini">
  223. <title>Erstellung von INI Quelldateien</title>
  224. <para>
  225. <acronym>INI</acronym> Quelldateien sind menschlich lesbar aber normalerweise nicht sehr
  226. klein da Sie neben der Übersetzung auch andere Daten enthalten. Wenn Sie Daten haben die
  227. von Ihrem Kunden zu bearbeitet sind, verwenden Sie den <acronym>INI</acronym> Adapter.
  228. </para>
  229. <example id="zend.translate.sourcecreation.ini.example">
  230. <title>Beispiel einer INI Datei</title>
  231. <programlisting language="txt"><![CDATA[
  232. [Test]
  233. ;TestPage Comment
  234. Message_1="Nachricht 1 (de)"
  235. Message_2="Nachricht 2 (de)"
  236. Message_3="Nachricht :3 (de)"
  237. ]]></programlisting>
  238. <programlisting language="php"><![CDATA[
  239. $translate = new Zend_Translate('ini', '/path/to/mytranslation.ini', 'de');
  240. $translate->addTranslation('/path/to/other.ini', 'it');
  241. ]]></programlisting>
  242. </example>
  243. <para>
  244. <acronym>INI</acronym> Dateien haben diverse Einschränkungen. Wenn ein Wert in einer INI
  245. Datei irgendein nicht alphanummerisches Zeichen enthält, muß er in doppelte
  246. Anführungszeichen (<code>"</code>) eingeklammert werden. Es gibt auch reservierte Wörter
  247. welche nicht als Schlüssel für <acronym>INI</acronym> Dateien verwendet werden dürfen.
  248. Diese enthalten: <constant>NULL</constant>, <code>yes</code>, <code>no</code>,
  249. <constant>TRUE</constant> und <constant>FALSE</constant>. Die Werte
  250. <constant>NULL</constant>, <code>no</code> und <constant>FALSE</constant> führen zu
  251. <code>""</code>, <code>yes</code> und <constant>TRUE</constant> resultieren in
  252. <code>1</code>. Die Zeichen <code>{}|&amp;~![()"</code> dürfen nirgendwo im Schlüssel
  253. verwendet werden und haben im Wert eine spezielle Bedeutung. Diese sollten nicht
  254. verwendet werden da Sie zu unerwartetem Verhalten führen.
  255. </para>
  256. </sect2>
  257. </sect1>
  258. <!--
  259. vim:se ts=4 sw=4 et:
  260. -->