| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- <sect3 id="zend.view.helpers.initial.translate">
- <title> 翻译助手 </title>
- <para>
- 通常,网站支持多种语言。使用 <link linkend="zend.translate.introduction">Zend 翻译 </link> 来翻译网站的内容并且 使用 <code> 翻译 </code> 视图助手来在视图里集成 <code>Zend 翻译 </code>。
- </para>
- <para>
- 在下面所有的例子里我们使用简单的数组翻译适配器(Array Translation Adapter)。当然你也可以使用任何 <code>Zend_Translate</code> 的实例和 <code>Zend_Translate_Adapter</code> 的任何子类。有若干方法来实例化<code> 翻译 </code>视图助手:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- 已注册的,通过先前注册的实例
- </para>
- </listitem>
- <listitem>
- <para>
- 后来地,通过 fluent interface (流利的接口?我还没有找到合适的词汇,by Jason Qi)
- </para>
- </listitem>
- <listitem>
- <para>
- 直接地,通过实例化类
- </para>
- </listitem>
- </itemizedlist>
- <para>
- <code>Zend_Translate</code> 的已注册的实例是这个助手的首选用法。你也可以简单地在添加适配器到注册表之前选择被使用的地点(locale)
- </para>
- <note>
- <para>
- 我们用地点(locales)而不用语言是因为一种语音也可以包含一个地区。例如英语有不同的方言,有英国英语和美国英语,因此我们用“地点”而不说“语言”。
- </para>
- </note>
- <example id="zend.view.helpers.initial.translate.registered">
- <title> 已注册的实例 </title>
- <para>
- 为使用已注册的实例就是创建一个 <code>Zend_Translate</code> 或者 <code>Zend_Translate_Adapter</code> 的实例并在 <code>Zend_Registry</code> 里用 <code>Zend_Translate</code> 作为它的键。
- </para>
- <programlisting role="php"><![CDATA[<?php
- // 我们的例子适配器
- $adapter = new Zend_Translate('array', array('simple' => 'einfach'), 'de');
- Zend_Registry::set('Zend_Translate', $adapter);
- // 在视图中
- echo $this->translate('simple');
- // 返回 'einfach'
- ?>]]></programlisting>
- </example>
- <para>
- 如果你熟悉 fluent interface ,那么也可以在视图里创建一个实例然后实例化这个助手。
- </para>
- <example id="zend.view.helpers.initial.translate.afterwards">
- <title> 在视图里 </title>
- <para>
- 为了使用 fluent interface ,创建一个 <code>Zend_Translate</code> 或者 <code>Zend_Translate_Adapter</code> 的实例,调用不带参数的助手并调用 <code>setTranslator</code> 方法。
- </para>
- <programlisting role="php"><![CDATA[<?php
- // 在视图里
- $adapter = new Zend_Translate('array', array('simple' => 'einfach'), 'de');
- $this->translate()->setTranslator($adapter)->translate('simple');
- // 返回 'einfach'
- ?>]]></programlisting>
- </example>
- <para>
- 如果你使用没有<code>Zend_View</code>的助手,那么你也可以直接使用它。
- </para>
- <example id="zend.view.helpers.initial.translate.directly">
- <title> 直接用法 </title>
- <programlisting role="php"><![CDATA[<?php
- // 我们的例子适配器
- $adapter = new Zend_Translate('array', array('simple' => 'einfach'), 'de');
- // 实例化适配器
- $translate = new Zend_View_Helper_Translate($adapter);
- print $translate->translate('simple'); // this returns 'einfach'
- ?>]]></programlisting>
- <para>
- 如果你不用 <code>Zend_View</code> 你将需要这样做并需要创建一个已翻译的输出。
- </para>
- </example>
- <para>
- 就象已经知道,<code>translate()</code> 方法用来返回翻译。用需要的翻译适配器的信息 id 来调用它。但它也可以在翻译字符串里替换参数。因此,它有两个方法接受变量参数。或者是参数类表,或者是参数数组。如下例:
- </para>
- <example id="zend.view.helpers.initial.translate.parameter">
- <title> 单个参数 </title>
- <para>
- 使用单个参数就把它添加到这个方法。
- </para>
- <programlisting role="php"><![CDATA[<?php
- // 在视图里
- $date = "Monday";
- $this->translate("Today is %1\$s", $date);
- // 应当返回 'Heute ist Monday'
- ?>]]></programlisting>
- </example>
- <note>
- <para>
- 记住如果使用的参数也是文本,你可能也要翻译这些参数。
- </para>
- </note>
- <example id="zend.view.helpers.initial.translate.parameterlist">
- <title> 参数列表 </title>
- <para>
- 使用参数列表并添加给方法。
- </para>
- <programlisting role="php"><![CDATA[<?php
- // 在视图里
- $date = "Monday";
- $month = "April";
- $time = "11:20:55";
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date, $month, $time);
- // 应当返回 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55'
- ?>]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.translate.parameterarray">
- <title> 参数数组 </title>
- <para>
- 使用参数数组并添加到方法。
- </para>
- <programlisting role="php"><![CDATA[<?php
- // 在视图里
- $date = array("Monday", "April", "11:20:55");
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
- // 应当返回 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55'
- ?>]]></programlisting>
- </example>
- <para>
- 有时候必需要修改翻译的地点。可以通过动态翻译或者把所有的静态翻译来完成。并且你可以使用参数类表和参数数组。在这两种情况下,地点被当作最后一个单个参数给出。
- </para>
- <example id="zend.view.helpers.initial.translate.dynamic">
- <title> 动态修改地点 (locale)</title>
- <programlisting role="php"><![CDATA[<?php
- // 在视图里
- $date = array("Monday", "April", "11:20:55");
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date, 'it');
- ?>]]></programlisting>
- </example>
- <para>
- 这个例子为 messageid 返回意大利语的翻译。但它将只能用一次。下个翻译将从适配器里设置地点。通常地在添加它到注册表之前你将在翻译适配器里设置期望的地点。但你也可以从助手里设置地点:
- </para>
- <example id="zend.view.helpers.initial.translate.static">
- <title> 静态修改地点 (locale)</title>
- <programlisting role="php"><![CDATA[<?php
- // 在视图里
- $date = array("Monday", "April", "11:20:55");
- $this->translate()->setLocale('it');
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
- ?>]]></programlisting>
- </example>
- <para>
- 在上面的例子里设置 <code>'it'</code> 为新的缺省地点,它将被用来给所有将来的翻译。
- </para>
- <para>
- 当然,还有 <code>getLocale()</code> 方法来获得当前设置的地点。
- </para>
- <example id="zend.view.helpers.initial.translate.getlocale">
- <title> 获得当前设置的地点 </title>
- <programlisting role="php"><![CDATA[<?php
- // 在视图里
- $date = array("Monday", "April", "11:20:55");
- // 从上面的例子里返回 'de' 作为缺省地点
- $this->translate()->getLocale();
- $this->translate()->setLocale('it');
- $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
- // 返回 'it' 为新的缺省地点
- $this->translate()->getLocale();
- ?>]]></programlisting>
- </example>
- </sect3>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|