Zend_View-Helpers-Translate.xml 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  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. <classname>Zend_Translate</classname> in der eigenen View zu integrieren sollte der
  11. <emphasis>Translate</emphasis> 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 <emphasis>Translate</emphasis> 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(
  61. array(
  62. 'adapter' => 'array',
  63. 'content' => array('simple' => 'einfach'),
  64. 'locale' => 'de'
  65. )
  66. );
  67. Zend_Registry::set('Zend_Translate', $adapter);
  68. // In der View
  69. echo $this->translate('simple');
  70. // gibt 'einfach' zurück
  71. ]]></programlisting>
  72. </example>
  73. <para>
  74. Wenn man mit dem Fluent Interface besser zurecht kommt, kann eine Instanz auch in der View
  75. erstellt werden und der Helfer im Nachhinein initiiert werden.
  76. </para>
  77. <example id="zend.view.helpers.initial.translate.afterwards">
  78. <title>In der View</title>
  79. <para>
  80. Um das Fluid Interface zu verwenden muß eine Instanz von
  81. <classname>Zend_Translate</classname> oder <classname>Zend_Translate_Adapter</classname>
  82. erstellt werden, der Helfer ohne Parameter und anschließend die
  83. <methodname>setTranslator()</methodname> Methode aufgerufen werden.
  84. </para>
  85. <programlisting language="php"><![CDATA[
  86. // in der View
  87. $adapter = new Zend_Translate(
  88. array(
  89. 'adapter' => 'array',
  90. 'content' => array('simple' => 'einfach'),
  91. 'locale' => 'de'
  92. )
  93. );
  94. $this->translate()->setTranslator($adapter)->translate('simple');
  95. // das gibt 'einfach' zurück
  96. ]]></programlisting>
  97. </example>
  98. <para>
  99. Wenn der Helfer ohne <classname>Zend_View</classname> verwendet werden soll kann er auch
  100. direkt angesprochen werden.
  101. </para>
  102. <example id="zend.view.helpers.initial.translate.directly">
  103. <title>Direkte Verwendung</title>
  104. <programlisting language="php"><![CDATA[
  105. // unser Beispieladapter
  106. $adapter = new Zend_Translate(
  107. array(
  108. 'adapter' => 'array',
  109. 'content' => array('simple' => 'einfach'),
  110. 'locale' => 'de'
  111. )
  112. );
  113. // den Helfer initiieren
  114. $translate = new Zend_View_Helper_Translate($adapter);
  115. print $translate->translate('simple'); // das gibt 'einfach' zurück
  116. ]]></programlisting>
  117. <para>
  118. Dieser Weg kann verwendet werden wenn man nicht mit <classname>Zend_View</classname>
  119. arbeitet und übersetzte Ausgaben erzeugen muß.
  120. </para>
  121. </example>
  122. <para>
  123. Wie man bereits sehen konnte, wird die <methodname>translate()</methodname> Methode
  124. verwendet um die Übersetzung zurückzugeben. Sie muss nur mit der benötigten messageid des
  125. Übersetzungsadapters aufgerufen werden. Aber sie kann auch Parameter im Übersetzungsstring
  126. ersetzen. Deswegen akzeptiert Sie variable Parameter in zwei Wegen: entweder als Liste von
  127. Parametern, oder als Array von Parametern. Als Beispiel:
  128. </para>
  129. <example id="zend.view.helpers.initial.translate.parameter">
  130. <title>Einzelne Parameter</title>
  131. <para>
  132. Um einen einzelnen Parameter zu verwenden muss dieser einfach der Methode angefügt
  133. werden.
  134. </para>
  135. <programlisting language="php"><![CDATA[
  136. // innerhalb der View
  137. $date = "Montag";
  138. $this->translate("Today is %1\$s", $date);
  139. // könnte 'Heute ist Montag' zurückgeben
  140. ]]></programlisting>
  141. </example>
  142. <note>
  143. <para>
  144. Wenn man Parameter verwendet die auch Text sind ist zu beachten das es auch nötig sein
  145. kann diese Parameter zu übersetzen.
  146. </para>
  147. </note>
  148. <example id="zend.view.helpers.initial.translate.parameterlist">
  149. <title>Liste von Parametern</title>
  150. <para>
  151. Oder eine Liste von Parametern verwenden und diese der Methode hinzufügen.
  152. </para>
  153. <programlisting language="php"><![CDATA[
  154. // innerhalb der View
  155. $date = "Monday";
  156. $month = "April";
  157. $time = "11:20:55";
  158. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s",
  159. $date,
  160. $month,
  161. $time);
  162. // könnte 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55' zurückgeben
  163. ]]></programlisting>
  164. </example>
  165. <example id="zend.view.helpers.initial.translate.parameterarray">
  166. <title>Array von Parametern</title>
  167. <para>
  168. Oder ein Array von Parametern verwenden und dieses der Methode hinzufügen.
  169. </para>
  170. <programlisting language="php"><![CDATA[
  171. // innerhalb der View
  172. $date = array("Monday", "April", "11:20:55");
  173. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
  174. // könnte 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55' zurückgeben
  175. ]]></programlisting>
  176. </example>
  177. <para>
  178. Manchmal ist es notwendig das Gebietsschema der Übersetzung zu Ändern. Das kann entweder
  179. dynamisch pro Übersetzung oder statisch für alle folgenden Übersetzungen durchgeführt
  180. werden. Dies kann mit beidem, einer Liste von Paramtern oder einem Array von Parametern,
  181. verwendet werden. In beiden Fällen muss das als letzter einzelner Parameter angegeben
  182. werden.
  183. </para>
  184. <example id="zend.view.helpers.initial.translate.dynamic">
  185. <title>Das Gebietsschema dynamisch wechseln</title>
  186. <programlisting language="php"><![CDATA[
  187. // innerhalb der View
  188. $date = array("Monday", "April", "11:20:55");
  189. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date, 'it');
  190. ]]></programlisting>
  191. </example>
  192. <para>
  193. Dieses Beispiel gibt die italienische Übersetzung für die messageid zurück. Aber Sie wird
  194. nur einmal verwendet. Die nächste Übersetzung verwendet wieder das Gebietsschema des
  195. Adapters. Normalerweise wird das gewünschte Gebietsschema im Übersetzungsadapter gesetzt
  196. bevor dieser der Registry hinzugefügt wird. Das Gebietsschema kann aber auch im Helfer
  197. gesetzt werden:
  198. </para>
  199. <example id="zend.view.helpers.initial.translate.static">
  200. <title>Das Gebietsschema statisch wechseln</title>
  201. <programlisting language="php"><![CDATA[
  202. // innerhalb der View
  203. $date = array("Monday", "April", "11:20:55");
  204. $this->translate()->setLocale('it');
  205. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
  206. ]]></programlisting>
  207. </example>
  208. <para>
  209. Das obige Beispiel setzt <emphasis>'it'</emphasis> als neues standardmäßiges Gebietsschema
  210. welches für alle weiteren Übersetzungen verwendet wird.
  211. </para>
  212. <para>
  213. Natürlich gibt es auch eine <methodname>getLocale()</methodname> Methode um das aktuell
  214. gesetzte Gebietsschema zu erhalten.
  215. </para>
  216. <example id="zend.view.helpers.initial.translate.getlocale">
  217. <title>Das aktuell gesetzte Gebietsschema erhalten</title>
  218. <programlisting language="php"><![CDATA[
  219. // innerhalb der View
  220. $date = array("Monday", "April", "11:20:55");
  221. // gibt 'de' als standardmäßig gesetztes Gebietsschema
  222. // vom obigen Beispiel zurück
  223. $this->translate()->getLocale();
  224. $this->translate()->setLocale('it');
  225. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
  226. // gibt 'it' als neues standardmäßig gesetztes Gebietsschema zurück
  227. $this->translate()->getLocale();
  228. ]]></programlisting>
  229. </example>
  230. </sect3>
  231. <!--
  232. vim:se ts=4 sw=4 et:
  233. -->