Zend_View-Helpers-Translate.xml 9.4 KB

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