Zend_View-Helpers-Translate.xml 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 14978 -->
  3. <!-- Reviewed: no -->
  4. <sect3 id="zend.view.helpers.initial.translate">
  5. <title>Übersetzungs Helfer</title>
  6. <para>
  7. Oft sind Webseiten in verschiedenen Sprachen vorhanden. Um den Inhalt einer Site zu übersetzen sollte
  8. ganz einfach <link linkend="zend.translate.introduction">Zend Translate</link> verwendet werden, und
  9. um <code>Zend Translate</code> in der eigenen View zu integrieren sollte der
  10. <code>Translate</code> View Helfer verwendet werden.
  11. </para>
  12. <para>
  13. In allen folgenden Beispielen verwenden wir den einfachen Array Übersetzungs Adapter. Natürlich kann
  14. jede Instanz von <classname>Zend_Translate</classname> und genauso jede Subklasse von
  15. <classname>Zend_Translate_Adapter</classname> verwendet werden. Es gibt verschiedene Wege den <code>Translate</code>
  16. View Helfer zu initiieren:
  17. </para>
  18. <itemizedlist>
  19. <listitem>
  20. <para>
  21. Registriert, durch eine vorher in <classname>Zend_Registry</classname> registrierte Instanz
  22. </para>
  23. </listitem>
  24. <listitem>
  25. <para>
  26. Danach, durch das Fluent Interface
  27. </para>
  28. </listitem>
  29. <listitem>
  30. <para>
  31. Direkt, durch Instanzierung der Klasse
  32. </para>
  33. </listitem>
  34. </itemizedlist>
  35. <para>
  36. Eine registrierte Instanz von <classname>Zend_Translate</classname> ist die bevorzugte Verwendung für diesen
  37. Helfer. Bevor der Adapter der Registry hinzugefügt wird, kann das zu verwendende Gebietsschema
  38. einfach ausgewählt werden.
  39. </para>
  40. <note>
  41. <para>
  42. Wir sprechen hier von Gebietsschemata (Locale) statt von Sprachen weil eine Sprache auch in
  43. verschiedenen Regionen vorhanden sein kann. Zum Beispiel wird Englisch in verschiedenen Dialekten
  44. gesprochen. Es könnte eine Übersetzung für Britisch und eine für Amerikanisches Englisch geben.
  45. Deswegen sagen wir Gebietsschema "locale" statt Sprache.
  46. </para>
  47. </note>
  48. <example id="zend.view.helpers.initial.translate.registered">
  49. <title>Registrierte Instanz</title>
  50. <para>
  51. Um eine registrierte Instanz zu verwenden muß einfach eine Instanz von <classname>Zend_Translate</classname>
  52. oder <classname>Zend_Translate_Adapter</classname> erstellt werden und in <classname>Zend_Registry</classname> durch
  53. Verwendung des Schlüssels <classname>Zend_Translate</classname> registriert werden.
  54. </para>
  55. <programlisting role="php"><![CDATA[
  56. // unser Beispieladapter
  57. $adapter = new Zend_Translate('array', array('simple' => 'einfach'), 'de');
  58. Zend_Registry::set('Zend_Translate', $adapter);
  59. // In der View
  60. echo $this->translate('simple');
  61. // gibt 'einfach' zurück
  62. ]]>
  63. </programlisting>
  64. </example>
  65. <para>
  66. Wenn man mit dem Fluent Interface besser zurecht kommt, kann eine Instanz auch in der View erstellt
  67. werden und der Helfer im Nachhinein initiiert werden.
  68. </para>
  69. <example id="zend.view.helpers.initial.translate.afterwards">
  70. <title>In der View</title>
  71. <para>
  72. Um das Fluid Interface zu verwenden muß eine Instanz von <classname>Zend_Translate</classname> oder
  73. <classname>Zend_Translate_Adapter</classname> erstellt werden, der Helfer ohne Parameter und anschließend
  74. die <code>setTranslator()</code> Methode aufgerufen werden.
  75. </para>
  76. <programlisting role="php"><![CDATA[
  77. // in der View
  78. $adapter = new Zend_Translate('array', array('simple' => 'einfach'), 'de');
  79. $this->translate()->setTranslator($adapter)->translate('simple');
  80. // das gibt 'einfach' zurück
  81. ]]>
  82. </programlisting>
  83. </example>
  84. <para>
  85. Wenn der Helfer ohne <classname>Zend_View</classname> verwendet werden soll kann er auch direkt angesprochen werden.
  86. </para>
  87. <example id="zend.view.helpers.initial.translate.directly">
  88. <title>Direkte Verwendung</title>
  89. <programlisting role="php"><![CDATA[
  90. // unser Beispieladapter
  91. $adapter = new Zend_Translate('array', array('simple' => 'einfach'), 'de');
  92. // den Helfer initiieren
  93. $translate = new Zend_View_Helper_Translate($adapter);
  94. print $translate->translate('simple'); // das gibt 'einfach' zurück
  95. ]]>
  96. </programlisting>
  97. <para>
  98. Dieser Weg kann verwendet werden wenn man nicht mit <classname>Zend_View</classname> arbeitet und
  99. übersetzte Ausgaben erzeugen muß.
  100. </para>
  101. </example>
  102. <para>
  103. Wie man bereits sehen konnte, wird die <code>translate()</code> Methode verwendet um die Übersetzung
  104. zurückzugeben. Sie muss nur mit der benötigten messageid des Übersetzungsadapters aufgerufen werden.
  105. Aber sie kann auch Parameter im Übersetzungsstring ersetzen. Deswegen akzeptiert Sie variable
  106. Parameter in zwei Wegen: entweder als Liste von Parametern, oder als Array von Parametern. Als
  107. Beispiel:
  108. </para>
  109. <example id="zend.view.helpers.initial.translate.parameter">
  110. <title>Einzelne Parameter</title>
  111. <para>
  112. Um einen einzelnen Parameter zu verwenden muss dieser einfach der Methode angefügt werden.
  113. </para>
  114. <programlisting role="php"><![CDATA[
  115. // innerhalb der View
  116. $date = "Montag";
  117. $this->translate("Today is %1\$s", $date);
  118. // könnte 'Heute ist Montag' zurückgeben
  119. ]]>
  120. </programlisting>
  121. </example>
  122. <note>
  123. <para>
  124. Wenn man Parameter verwendet die auch Text sind ist zu beachten das es auch nötig sein kann diese
  125. Parameter zu übersetzen.
  126. </para>
  127. </note>
  128. <example id="zend.view.helpers.initial.translate.parameterlist">
  129. <title>Liste von Parametern</title>
  130. <para>
  131. Oder eine Liste von Parametern verwenden und diese der Methode hinzufügen.
  132. </para>
  133. <programlisting role="php"><![CDATA[
  134. // innerhalb der View
  135. $date = "Monday";
  136. $month = "April";
  137. $time = "11:20:55";
  138. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s",
  139. $date,
  140. $month,
  141. $time);
  142. // könnte 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55' zurückgeben
  143. ]]>
  144. </programlisting>
  145. </example>
  146. <example id="zend.view.helpers.initial.translate.parameterarray">
  147. <title>Array von Parametern</title>
  148. <para>
  149. Oder ein Array von Parametern verwenden und dieses der Methode hinzufügen.
  150. </para>
  151. <programlisting role="php"><![CDATA[
  152. // innerhalb der View
  153. $date = array("Monday", "April", "11:20:55");
  154. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
  155. // könnte 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55' zurückgeben
  156. ]]>
  157. </programlisting>
  158. </example>
  159. <para>
  160. Manchmal ist es notwendig das Gebietsschema der Übersetzung zu Ändern. Das kann entweder dynamisch pro
  161. Übersetzung oder statisch für alle folgenden Übersetzungen durchgeführt werden. Dies kann mit beidem,
  162. einer Liste von Paramtern oder einem Array von Parametern, verwendet werden. In beiden Fällen muss das
  163. als letzter einzelner Parameter angegeben werden.
  164. </para>
  165. <example id="zend.view.helpers.initial.translate.dynamic">
  166. <title>Das Gebietsschema dynamisch wechseln</title>
  167. <programlisting role="php"><![CDATA[
  168. // innerhalb der View
  169. $date = array("Monday", "April", "11:20:55");
  170. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date, 'it');
  171. ]]>
  172. </programlisting>
  173. </example>
  174. <para>
  175. Dieses Beispiel gibt die italienische Übersetzung für die messageid zurück. Aber Sie wird nur einmal
  176. verwendet. Die nächste Übersetzung verwendet wieder das Gebietsschema des Adapters. Normalerweise wird
  177. das gewünschte Gebietsschema im Übersetzungsadapter gesetzt bevor dieser der Registry hinzugefügt wird.
  178. Das Gebietsschema kann aber auch im Helfer gesetzt werden:
  179. </para>
  180. <example id="zend.view.helpers.initial.translate.static">
  181. <title>Das Gebietsschema statisch wechseln</title>
  182. <programlisting role="php"><![CDATA[
  183. // innerhalb der View
  184. $date = array("Monday", "April", "11:20:55");
  185. $this->translate()->setLocale('it');
  186. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
  187. ]]>
  188. </programlisting>
  189. </example>
  190. <para>
  191. Das obige Beispiel setzt <code>'it'</code> als neues standardmäßiges Gebietsschema welches für alle
  192. weiteren Übersetzungen verwendet wird.
  193. </para>
  194. <para>
  195. Natürlich gibt es auch eine <code>getLocale()</code> Methode um das aktuell gesetzte Gebietsschema
  196. zu erhalten.
  197. </para>
  198. <example id="zend.view.helpers.initial.translate.getlocale">
  199. <title>Das aktuell gesetzte Gebietsschema erhalten</title>
  200. <programlisting role="php"><![CDATA[
  201. // innerhalb der View
  202. $date = array("Monday", "April", "11:20:55");
  203. // gibt 'de' als standardmäßig gesetztes Gebietsschema
  204. // vom obigen Beispiel zurück
  205. $this->translate()->getLocale();
  206. $this->translate()->setLocale('it');
  207. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
  208. // gibt 'it' als neues standardmäßig gesetztes Gebietsschema zurück
  209. $this->translate()->getLocale();
  210. ]]>
  211. </programlisting>
  212. </example>
  213. </sect3>
  214. <!--
  215. vim:se ts=4 sw=4 et:
  216. -->