Zend_Translate-Adapters.xml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15234 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.translate.adapter">
  5. <title>Adapter für Zend_Translate</title>
  6. <para>
  7. <classname>Zend_Translate</classname> kann unterschiedliche Adapter für die Übersetzung verwenden.
  8. Jeder Adapter hat seine eigenen Vor- und Nachteile. Hier ist eine kurze
  9. Liste aller unterstützten Adapter für Übersetzungs Quell Dateien.
  10. </para>
  11. <table id="zend.translate.adapter.table">
  12. <title>Adapter für Zend_Translate</title>
  13. <tgroup cols="3">
  14. <thead>
  15. <row>
  16. <entry>Adapter</entry>
  17. <entry>Beschreibung</entry>
  18. <entry>Benutzung</entry>
  19. </row>
  20. </thead>
  21. <tbody>
  22. <row>
  23. <entry>Array</entry>
  24. <entry>Für PHP Arrays</entry>
  25. <entry>Kleine Seiten; Einfachste Handhabung; nur für Programmierer</entry>
  26. </row>
  27. <row>
  28. <entry>Csv</entry>
  29. <entry>Für kommagetrennte (*.csv/*.txt) Dateien</entry>
  30. <entry>Einfaches Textdatei Format; schnell; mögliche Probleme bei der Verwendung von Unicode Zeichen</entry>
  31. </row>
  32. <row>
  33. <entry>Gettext</entry>
  34. <entry>Für binäre Gettext (*.mo) Dateien</entry>
  35. <entry>GNU Standard für Linux; Threadsicher; benötigt Tools für die Übersetzung</entry>
  36. </row>
  37. <row>
  38. <entry>Ini</entry>
  39. <entry>Für einfache ini (*.ini) Dateien</entry>
  40. <entry>Einfaches Testdatei Format; schnell; mögliche Probleme mit Unicode Zeichen</entry>
  41. </row>
  42. <row>
  43. <entry>Tbx</entry>
  44. <entry>Für termbase exchange (*.tbx/*.xml) Dateien</entry>
  45. <entry>Industrie Standard für Applikations übergreifende terminologie Strings; XML Format</entry>
  46. </row>
  47. <row>
  48. <entry>Tmx</entry>
  49. <entry>Für TMX (*.tmx/*.xml) Dateien</entry>
  50. <entry>Industrie Standard für Applikations übergreifende Übersetzungen; XML Format, menschlich lesbar</entry>
  51. </row>
  52. <row>
  53. <entry>Qt</entry>
  54. <entry>Für qt Linguist (*.ts) Dateien</entry>
  55. <entry>Plattform übergreifender Anwendungs Framework; XML Format, menschlich lesbar</entry>
  56. </row>
  57. <row>
  58. <entry>Xliff</entry>
  59. <entry>Für XLIFF (*.xliff/*.xml) Dateien</entry>
  60. <entry>Ein einfacheres Format als TMX aber vergleichbar; XML Format; menschlich lesbar</entry>
  61. </row>
  62. <row>
  63. <entry>XmlTm</entry>
  64. <entry>Für xmltm (*.xml) Dateien</entry>
  65. <entry>Industrie Standard für XML basierende Übersetzungsspeicher; XML Format; menschlich lesbar</entry>
  66. </row>
  67. <row>
  68. <entry>Andere</entry>
  69. <entry>*.sql</entry>
  70. <entry>Verschiedene andere Adapter werden in Zukunft noch implementiert</entry>
  71. </row>
  72. </tbody>
  73. </tgroup>
  74. </table>
  75. <sect2 id="zend.translate.adapter.decision">
  76. <title>Wie man entscheidet welchen Adapter man benutzen soll</title>
  77. <para>
  78. Zuerst muss man die Entscheidung treffen welchen der Adapter man für
  79. <classname>Zend_Translate</classname> benutzen soll. Oft sind externe Kriterien wie die Vorgaben
  80. durch ein Projekt oder durch eien Kunden dafür ausschlaggebend. Aber
  81. wenn die Entscheidungsgewalt in den eigenen Händen liegt, werden die folgenden
  82. Hinweise die Entscheidung vereinfachen.
  83. </para>
  84. <note>
  85. <para>
  86. Wenn man den Adapter auswählt sollte man auch auf das Verwendete Encoding achten.
  87. Selbst wenn Zend Framework UTF-8 als Standard Encoding definiert besteht manchmal die
  88. Notwendigkeit andere Encodings zu verwenden. <classname>Zend_Translate</classname> ändert kein
  89. Encoding welches in Quelldateien definiert ist was bedeutet das, wenn eine Gettext Quelle
  90. auf ISO-8859-1 aufgebaut ist, die Strings auch in diesem Encoding zurückgegeben werden
  91. ohne das diese Konvertiert werden. Es gibt nur eine Einschränkung:
  92. </para>
  93. <para>
  94. Wenn XML basierende Quellformate wie TMX oder XLIFF verwendet werden muß das Encoding in
  95. den XML Dateiheadern definiert werden weil XML Dateien ohne definiertes Encoding durch jeden
  96. Parser standardmäßig als UTF-8 angesehen werden. Man sollte auch darauf achten das aktuell
  97. das Encoding von XML Dateien auf die Encodings limitiert ist welche durch PHP unterstützt
  98. werden. Das sind aktuell UTF-8, ISO-8859-1 und US-ASCII.
  99. </para>
  100. </note>
  101. <sect3 id="zend.translate.adapter.array">
  102. <title>Zend_Translate_Adapter_Array</title>
  103. <para>
  104. Der Array Adapter ist der Adapter welcher am einfachsten für Programmierer
  105. zu verwenden ist.
  106. Aber wenn viele Strings oder viele Sprachen zu übersetzen sind sollte über
  107. einen anderen Adapter nachgedachte werden. Wenn z.B. über 5000 Strings zu
  108. übersetzen sind wird der Array Adapter nicht die beste Wahl sein.
  109. </para>
  110. <para>
  111. Dieser Adapter sollte nur für kleine Seiten mit einer Handvoll Sprachen
  112. verwendet werden. Und wenn man selbst oder das eigene Team die Übersetzungen
  113. erstellen kann.
  114. </para>
  115. </sect3>
  116. <sect3 id="zend.translate.adapter.csv">
  117. <title>Zend_Translate_Adapter_Csv</title>
  118. <para>
  119. Der CSV Adapter ist der Adapter der am einfachsten für Kunden zu benutzen ist.
  120. CSV Dateien sind mit Standard Texteditoren lesbar, aber diese Editoren
  121. unterstützen oft nicht UTF8 Zeichen.
  122. </para>
  123. <para>
  124. Man sollte diesen Adapter nur benutzen wenn der Kunde die Übersetzungen
  125. selbst durchführen will.
  126. </para>
  127. <note>
  128. <para>
  129. Es ist zu beachten das der Csv Adapter Probleme hat wenn die Csv Dateien anders
  130. kodiert sind als die Gebietsschema-Einstellung der Umgebung. Die Ursache ist ein
  131. Bug von PHP selbst der nicht vor PHP 6.0 behoben sein wird
  132. (http://bugs.php.net/bug.php?id=38471). Deshalb sollte man achtgeben das der Csv
  133. Adapter wegen Einschränkungen durch PHP nicht unabhängig vom Gebietsschema ist.
  134. </para>
  135. </note>
  136. </sect3>
  137. <sect3 id="zend.translate.adapter.gettext">
  138. <title>Zend_Translate_Adapter_Gettext</title>
  139. <para>
  140. Der Gettext Adapter ist der Adapter der am meisten verwendet wird.
  141. Gettext ist ein Übersetzungsformat welches durch GNU eingeführt wurde
  142. und jetzt weltweit Verwendung findet.
  143. Es ist nicht menschlich lesbar, allerdings existieren einige kostenlose
  144. Freeware Tools (zum Beispiel, <ulink url="http://sourceforge.net/projects/poedit/">POEdit</ulink>),
  145. welche sehr nützlich sind. Der <classname>Zend_Translate</classname> Gettext Adapter ist nicht
  146. mit Hilfe von PHP's Gettext Erweiterung realisiert worden.
  147. Der Gettext Adapter kann also verwendet werden selbst wenn PHP's Gettext
  148. Erweiterung nicht verfügbar ist.
  149. Ausserdem ist der Adapter im Gegensatz zu PHP's Gettext Erweiterung Threadsicher.
  150. </para>
  151. <para>
  152. Die meisten werden diesen Adapter benutzen.
  153. Mit den vorhandenen Tools ist eine Professionelle Übersetzung sehr einfach.
  154. Aber Gettext Dateien werden in einem machinen-lesbaren Format gespeichert
  155. und sind nicht ohne Tools lesbar.
  156. </para>
  157. </sect3>
  158. <sect3 id="zend.translate.adapter.ini">
  159. <title>Zend_Translate_Adapter_Ini</title>
  160. <para>
  161. Der INI Adapter ist ein sehr einfacher Adapter welcher sogar direkt von Kunden verwendet
  162. werden kann. INI Dateien sind von standardmäßigen Texteditoren lesbar, aber Texteditoren
  163. unterstützen oftmals keine UTF8 Zeichensets.
  164. </para>
  165. <para>
  166. Dieser Adapter sollte nur dann verwendet werden wenn ein Kunde Übersetzungen selbst machen
  167. will. Verwenden Sie diesen Adapter nicht als generelle Übersetzungsquelle.
  168. </para>
  169. </sect3>
  170. <sect3 id="zend.translate.adapter.tbx">
  171. <title>Zend_Translate_Adapter_Tbx</title>
  172. <para>
  173. Der TBX Adapter ist ein Adapter der von Kunden benutzt wird, die bereits das TBX Format
  174. für Ihre internen Übersetzungssysteme verwenden. TBX ist kein standardmäßiges
  175. Übersetzungsformat sondern eher eine Sammlung von bereits übersetzten und vor-übersetzten
  176. Quellstrings. Wenn dieser Adapter verwendet wird, muß sichergestellt werden das alle
  177. benötigten Quell Strings übersetzt sind. TBX ist ein dateibasiertes und komplett neues
  178. Format. XML Dateien sind menschlich lesbar, aber das Lesen der Dateien ist nicht so schnell
  179. wie mit Gettext Dateien.
  180. </para>
  181. <para>
  182. Dieser Adapter ist perfekt für Firmen die bereits vor-übersetzte Quell Dateien verwenden.
  183. Die Dateien sind menschlich lesbar und Betriebsystem unabhängig.
  184. </para>
  185. </sect3>
  186. <sect3 id="zend.translate.adapter.tmx">
  187. <title>Zend_Translate_Adapter_Tmx</title>
  188. <para>
  189. Der TMX Adapter ist der Adapter welcher am meisten benutzt wird wenn
  190. Kunden mehrere Systeme haben welche alle auf die gleichen Übersetzungen
  191. zugreifen, oder wenn die Übersetzungen Systemunabhängig sein muß.
  192. TMX ist ein XML Datei Format, welches als der kommende Industriestandard
  193. gehandelt wird. XML Dateien sind menschlich lesbar, aber das Lesen der
  194. Dateien ist nicht so schnell wie mit Gettext Dateien.
  195. </para>
  196. <para>
  197. Die meisten Mittel- und Großfirmen werden diesen Adapter benutzen.
  198. Die Dateien sind menschlich lesbar und systemunabhängig.
  199. </para>
  200. </sect3>
  201. <sect3 id="zend.translate.adapter.qt">
  202. <title>Zend_Translate_Adapter_Qt</title>
  203. <para>
  204. Der Qt Adapter ist der Adapter ist für alle Kunden welche TS Dateien
  205. als Übersetzungs-Quelle haben, die von QtLinguist erstellt wurden.
  206. QT ist ein XML basiertes Format.
  207. XML Dateien sind menschlich lesbar, aber das Lesen der Dateien ist nicht
  208. so schnell wie mit Gettext Dateien.
  209. </para>
  210. <para>
  211. Einige "Big Player" haben Ihre Software auf dem QT Framework ausgebaut.
  212. Die Dateien sind menschlich lesbar und Betriebsystem unabhängig.
  213. </para>
  214. </sect3>
  215. <sect3 id="zend.translate.adapter.xliff">
  216. <title>Zend_Translate_Adapter_Xliff</title>
  217. <para>
  218. Der XLIFF Adapter ist der Adapter der von den meisten Kunden benutzt
  219. wird die zwar XML Dateien haben wollen, aber keine Tools für TMX
  220. zur Verfügung haben.
  221. XLIFF ist ein XML Dateiformat, welches ähnlich zu TMX ist aber etwas
  222. einfacher im Aufbau. Es unterstützt aber nicht alle Möglichkeiten von
  223. TMX. XML Dateien sind menschlich lesbar, aber das Lesen der
  224. Dateien ist nicht so schnell wie mit Gettext Dateien.
  225. </para>
  226. <para>
  227. Die meisten Mittelständigen Unternehmen werden diesen Adapter benutzen.
  228. Die Dateien sind menschlich lesbar und systemunabhängig.
  229. </para>
  230. </sect3>
  231. <sect3 id="zend.translate.adapter.xmltm">
  232. <title>Zend_Translate_Adapter_XmlTm</title>
  233. <para>
  234. Der XmlTm Adapter ist ein Adapter der von Kunden verwendet wird, die das Layout selbst
  235. ändern wollen. XmlTm ist ein Format das es erlaubt den kompletten HTML Code in die
  236. Übersetzungsquelle zu inkludieren, sodas die Übersetzung mit dem Layout verknüpft ist.
  237. XmlTm ist ein XML Dateibasiertes Format, welches ähnlich wie XLIFF, aber nicht so
  238. einfach lesbar ist.
  239. </para>
  240. <para>
  241. Dieser Adapter sollte nur verwendet werden wenn bereits Quelldateien dieses Formats existieren.
  242. Die Dateien sind menschlich lesbar und systemunabhängig.
  243. </para>
  244. </sect3>
  245. </sect2>
  246. <sect2 id="zend.translate.adapter.selfwritten">
  247. <title>Selbst geschriebene Adapter integrieren</title>
  248. <para>
  249. <classname>Zend_Translate</classname> erlaubt es, selbst geschriebene Adapter Klassen zu integrieren und zu verwenden. Diese
  250. können wie die Standard Adapter Klassen, welche bereits in <classname>Zend_Translate</classname> inkludiert sind, verwendet
  251. werden.
  252. </para>
  253. <para>
  254. Jede Adapter Klasse die mit <classname>Zend_Translate</classname> verwendet werden soll muß eine Subklasse von
  255. <classname>Zend_Translate_Adapter</classname> sein. <classname>Zend_Translate_Adapter</classname> ist eine abstrakte Klasse welche bereits alles
  256. definiert was für eine Übersetzung notwendig ist. Was noch getan werden muß, ist die Definition des
  257. Lesers für die Übersetzungsdaten.
  258. </para>
  259. <para>
  260. Die Verwendung des Prefixes "Zend" sollte dem Zend_Framework vorbehalten sein. Wenn <classname>Zend_Translate</classname>
  261. mit einem eigenen Adapter erweitert wird, sollte er in etwa "Firma_Translate_Adapter_MeinFormat"
  262. heißen. Der folgende Code zeigt ein Beispiel davon, wie eine selbst geschriebene Adapter Klasse
  263. implmentiert werden sollte:
  264. </para>
  265. <programlisting role="php"><![CDATA[
  266. try {
  267. $translate = new Zend_Translate('Firma_Translate_Adapter_MeinFormat',
  268. '/path/to/translate.xx',
  269. 'en',
  270. array('meineoption' => 'myvalue'));
  271. } catch (Exception $e) {
  272. // Datei nicht gefunden, keine Adapter Klasse...
  273. // Genereller Fehler
  274. }
  275. ]]></programlisting>
  276. </sect2>
  277. <sect2 id="zend.translate.adapter.caching">
  278. <title>Alle Adapter verschnellern</title>
  279. <para>
  280. <classname>Zend_Translate</classname> erlaubt intern die Verwendung von <classname>Zend_Cache</classname> um das
  281. Laden von Übersetzungs Quellen zu verschnellern. Das kann sehr nützlich sein wenn viele
  282. Übersetzungs Quellen oder aufwändige Quellformate, wie XML basierte Dateien, verwendet werden.
  283. </para>
  284. <para>
  285. Um das Caching zu verwenden muß nur ein Cache Objekt an die <classname>Zend_Translate::setCache()</classname>
  286. Methode übergeben werden. Diese nimmt eine Instanz von <classname>Zend_Cache</classname> als einzigen
  287. Parameter. Auch wenn irgendein Adapter direkt verwendet wird kann die <code>setCache()</code>
  288. Methode verwendet werden. Der Bequemlichkeit halber gibt es die statischen Methoden
  289. <code>getCache()</code>, <code>hasCache()</code>, <code>clearCache()</code> und
  290. <code>removeCache()</code>.
  291. </para>
  292. <programlisting role="php"><![CDATA[
  293. $cache = Zend_Cache::factory('Core',
  294. 'File',
  295. $frontendOptions,
  296. $backendOptions);
  297. Zend_Translate::setCache($cache);
  298. $translate = new Zend_Translate('gettext',
  299. '/path/to/translate.mo',
  300. 'en');
  301. ]]></programlisting>
  302. <note>
  303. <para>
  304. Der Cache muß <emphasis role="strong">vor</emphasis> seiner Verwendung oder Initiierung eines
  305. Adapter oder einer Instanz von <classname>Zend_Translate</classname> gesetzt werden. Andernfalls wird
  306. die Übersetzungs Quelle nicht gecached bis eine neue Quelle mit der
  307. <code>addTranslation()</code> Methode hinzugefügt wird.
  308. </para>
  309. </note>
  310. </sect2>
  311. </sect1>