Zend_View-Helpers-Translate.xml 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <sect3 id="zend.view.helpers.initial.translate">
  2. <title> 翻译助手 </title>
  3. <para>
  4. 通常,网站支持多种语言。使用 <link linkend="zend.translate.introduction">Zend 翻译 </link> 来翻译网站的内容并且 使用 <code> 翻译 </code> 视图助手来在视图里集成 <code>Zend 翻译 </code>。
  5. </para>
  6. <para>
  7. 在下面所有的例子里我们使用简单的数组翻译适配器(Array Translation Adapter)。当然你也可以使用任何 <code>Zend_Translate</code> 的实例和 <code>Zend_Translate_Adapter</code> 的任何子类。有若干方法来实例化<code> 翻译 </code>视图助手:
  8. </para>
  9. <itemizedlist>
  10. <listitem>
  11. <para>
  12. 已注册的,通过先前注册的实例
  13. </para>
  14. </listitem>
  15. <listitem>
  16. <para>
  17. 后来地,通过 fluent interface (流利的接口?我还没有找到合适的词汇,by Jason Qi)
  18. </para>
  19. </listitem>
  20. <listitem>
  21. <para>
  22. 直接地,通过实例化类
  23. </para>
  24. </listitem>
  25. </itemizedlist>
  26. <para>
  27. <code>Zend_Translate</code> 的已注册的实例是这个助手的首选用法。你也可以简单地在添加适配器到注册表之前选择被使用的地点(locale)
  28. </para>
  29. <note>
  30. <para>
  31. 我们用地点(locales)而不用语言是因为一种语音也可以包含一个地区。例如英语有不同的方言,有英国英语和美国英语,因此我们用“地点”而不说“语言”。
  32. </para>
  33. </note>
  34. <example id="zend.view.helpers.initial.translate.registered">
  35. <title> 已注册的实例 </title>
  36. <para>
  37. 为使用已注册的实例就是创建一个 <code>Zend_Translate</code> 或者 <code>Zend_Translate_Adapter</code> 的实例并在 <code>Zend_Registry</code> 里用 <code>Zend_Translate</code> 作为它的键。
  38. </para>
  39. <programlisting role="php"><![CDATA[<?php
  40. // 我们的例子适配器
  41. $adapter = new Zend_Translate('array', array('simple' => 'einfach'), 'de');
  42. Zend_Registry::set('Zend_Translate', $adapter);
  43. // 在视图中
  44. echo $this->translate('simple');
  45. // 返回 'einfach'
  46. ?>]]></programlisting>
  47. </example>
  48. <para>
  49. 如果你熟悉 fluent interface ,那么也可以在视图里创建一个实例然后实例化这个助手。
  50. </para>
  51. <example id="zend.view.helpers.initial.translate.afterwards">
  52. <title> 在视图里 </title>
  53. <para>
  54. 为了使用 fluent interface ,创建一个 <code>Zend_Translate</code> 或者 <code>Zend_Translate_Adapter</code> 的实例,调用不带参数的助手并调用 <code>setTranslator</code> 方法。
  55. </para>
  56. <programlisting role="php"><![CDATA[<?php
  57. // 在视图里
  58. $adapter = new Zend_Translate('array', array('simple' => 'einfach'), 'de');
  59. $this->translate()->setTranslator($adapter)->translate('simple');
  60. // 返回 'einfach'
  61. ?>]]></programlisting>
  62. </example>
  63. <para>
  64. 如果你使用没有<code>Zend_View</code>的助手,那么你也可以直接使用它。
  65. </para>
  66. <example id="zend.view.helpers.initial.translate.directly">
  67. <title> 直接用法 </title>
  68. <programlisting role="php"><![CDATA[<?php
  69. // 我们的例子适配器
  70. $adapter = new Zend_Translate('array', array('simple' => 'einfach'), 'de');
  71. // 实例化适配器
  72. $translate = new Zend_View_Helper_Translate($adapter);
  73. print $translate->translate('simple'); // this returns 'einfach'
  74. ?>]]></programlisting>
  75. <para>
  76. 如果你不用 <code>Zend_View</code> 你将需要这样做并需要创建一个已翻译的输出。
  77. </para>
  78. </example>
  79. <para>
  80. 就象已经知道,<code>translate()</code> 方法用来返回翻译。用需要的翻译适配器的信息 id 来调用它。但它也可以在翻译字符串里替换参数。因此,它有两个方法接受变量参数。或者是参数类表,或者是参数数组。如下例:
  81. </para>
  82. <example id="zend.view.helpers.initial.translate.parameter">
  83. <title> 单个参数 </title>
  84. <para>
  85. 使用单个参数就把它添加到这个方法。
  86. </para>
  87. <programlisting role="php"><![CDATA[<?php
  88. // 在视图里
  89. $date = "Monday";
  90. $this->translate("Today is %1\$s", $date);
  91. // 应当返回 'Heute ist Monday'
  92. ?>]]></programlisting>
  93. </example>
  94. <note>
  95. <para>
  96. 记住如果使用的参数也是文本,你可能也要翻译这些参数。
  97. </para>
  98. </note>
  99. <example id="zend.view.helpers.initial.translate.parameterlist">
  100. <title> 参数列表 </title>
  101. <para>
  102. 使用参数列表并添加给方法。
  103. </para>
  104. <programlisting role="php"><![CDATA[<?php
  105. // 在视图里
  106. $date = "Monday";
  107. $month = "April";
  108. $time = "11:20:55";
  109. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date, $month, $time);
  110. // 应当返回 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55'
  111. ?>]]></programlisting>
  112. </example>
  113. <example id="zend.view.helpers.initial.translate.parameterarray">
  114. <title> 参数数组 </title>
  115. <para>
  116. 使用参数数组并添加到方法。
  117. </para>
  118. <programlisting role="php"><![CDATA[<?php
  119. // 在视图里
  120. $date = array("Monday", "April", "11:20:55");
  121. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
  122. // 应当返回 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55'
  123. ?>]]></programlisting>
  124. </example>
  125. <para>
  126. 有时候必需要修改翻译的地点。可以通过动态翻译或者把所有的静态翻译来完成。并且你可以使用参数类表和参数数组。在这两种情况下,地点被当作最后一个单个参数给出。
  127. </para>
  128. <example id="zend.view.helpers.initial.translate.dynamic">
  129. <title> 动态修改地点 (locale)</title>
  130. <programlisting role="php"><![CDATA[<?php
  131. // 在视图里
  132. $date = array("Monday", "April", "11:20:55");
  133. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date, 'it');
  134. ?>]]></programlisting>
  135. </example>
  136. <para>
  137. 这个例子为 messageid 返回意大利语的翻译。但它将只能用一次。下个翻译将从适配器里设置地点。通常地在添加它到注册表之前你将在翻译适配器里设置期望的地点。但你也可以从助手里设置地点:
  138. </para>
  139. <example id="zend.view.helpers.initial.translate.static">
  140. <title> 静态修改地点 (locale)</title>
  141. <programlisting role="php"><![CDATA[<?php
  142. // 在视图里
  143. $date = array("Monday", "April", "11:20:55");
  144. $this->translate()->setLocale('it');
  145. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
  146. ?>]]></programlisting>
  147. </example>
  148. <para>
  149. 在上面的例子里设置 <code>'it'</code> 为新的缺省地点,它将被用来给所有将来的翻译。
  150. </para>
  151. <para>
  152. 当然,还有 <code>getLocale()</code> 方法来获得当前设置的地点。
  153. </para>
  154. <example id="zend.view.helpers.initial.translate.getlocale">
  155. <title> 获得当前设置的地点 </title>
  156. <programlisting role="php"><![CDATA[<?php
  157. // 在视图里
  158. $date = array("Monday", "April", "11:20:55");
  159. // 从上面的例子里返回 'de' 作为缺省地点
  160. $this->translate()->getLocale();
  161. $this->translate()->setLocale('it');
  162. $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
  163. // 返回 'it' 为新的缺省地点
  164. $this->translate()->getLocale();
  165. ?>]]></programlisting>
  166. </example>
  167. </sect3>
  168. <!--
  169. vim:se ts=4 sw=4 et:
  170. -->