<commit_before><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 <NAME>）
            </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');
// this returns '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);
// could return '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);
// Could return '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);
// Could return 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55'
?>]]></programlisting><commit_msg>review and make it newer than r9615<commit_after><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 <NAME>）
            </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>
{'fraction_non_alphanumeric': 0.1679062429569529, 'fraction_numerical': 0.007662835249042145, 'mean_word_length': 2.817204301075269, 'pattern_counts': {'":': 0, '<': 265, '<?xml version=': 0, '>': 287, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4627737', 'n_tokens_mistral': 3966, 'n_tokens_neox': 3937, 'n_words': 555}