Просмотр исходного кода

[MANUAL] Brazilian Portuguese: sync to r20799

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21077 44c647ce-9c0f-0410-b52a-842ac1e357ba
mauriciofauth 16 лет назад
Родитель
Сommit
200fe74a96

+ 2 - 2
documentation/manual/pt-br/module_specs/Zend_View-Controllers.xml

@@ -97,7 +97,7 @@ echo $view->render('someView.php');
 
 
         <para>
         <para>
             Por padrão, <classname>Zend_View</classname> espera encontrar os scripts de visualização
             Por padrão, <classname>Zend_View</classname> espera encontrar os scripts de visualização
-            localizados no mesmo diretório onde reside o script controlador.  Por exemplo, se o seu
+            localizados no mesmo diretório onde reside o script controlador. Por exemplo, se o seu
             script controlador estiver em "/path/to/app/controllers" e chamar
             script controlador estiver em "/path/to/app/controllers" e chamar
             $view->render('someView.php'), <classname>Zend_View</classname> irá procurar por ele em
             $view->render('someView.php'), <classname>Zend_View</classname> irá procurar por ele em
             "/path/to/app/controllers/someView.php".
             "/path/to/app/controllers/someView.php".
@@ -122,7 +122,7 @@ $view->setScriptPath('/path/to/app/views');
         <para>
         <para>
             De fato, você pode "empilhar" caminhos usando o método addScriptPath(). A medida que
             De fato, você pode "empilhar" caminhos usando o método addScriptPath(). A medida que
             você acrescenta caminhos à pilha, <classname>Zend_View</classname> irá procurar pela
             você acrescenta caminhos à pilha, <classname>Zend_View</classname> irá procurar pela
-            visão no caminho mais recentemente adicionado à pilha.  Isto permite sobrepor visões
+            visão no caminho mais recentemente adicionado à pilha. Isto permite sobrepor visões
             padronizadas por visões customizadas, permitindo a criação de "temas" e "peles" para
             padronizadas por visões customizadas, permitindo a criação de "temas" e "peles" para
             algumas visões, deixando outras intocadas.
             algumas visões, deixando outras intocadas.
         </para>
         </para>

+ 528 - 111
documentation/manual/pt-br/module_specs/Zend_View-Helpers.xml

@@ -1,98 +1,375 @@
-<sect1 id="zend.view.helpers">
-
-    <title>Assistentes de Visualização (Modificadores)</title>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20799 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.view.helpers" xmlns:xi="http://www.w3.org/2001/XInclude">
+    <title>Assistentes de Visualização</title>
 
 
     <para>
     <para>
-        Em seus scripts de visualização, frequentemente é necessário a execução de certas tarefas complexas repetidas vezes; exemplo: formatar uma data, gerar um elemento de formulário, ou exibir links de acionamento.  Você pode empregar classes assistentes para executar estas tarefas para você.
+        Em seus scripts de visualização, frequentemente é necessário a execução de certas tarefas
+        complexas repetidas vezes: p. ex.: formatar uma data, gerar um elemento de formulário, ou
+        exibir links de acionamento. Você pode empregar classes assistentes para executar estas
+        tarefas para você.
     </para>
     </para>
 
 
     <para>
     <para>
-        Para usar um assistente em seu script de visualização, chame-o usando $this->helperName(). Em segundo plano, Zend_View irá carregar a classe Zend_View_Helper_HelperName, instanciá-la e chamar seu método helperName().  O objeto criado é persistente dentro do escopo da instância Zend_View e será reutilizado por todas as chamadas futuras a $this->helperName().
+        A helper is simply a class. Let's say we want a helper named 'fooBar'.
+        By default, the class is prefixed with 'Zend_View_Helper_'
+        (you can specify a custom prefix when setting a helper path), and the
+        last segment of the class name is the helper name; this segment should
+        be TitleCapped; the full class name is then:
+        <classname>Zend_View_Helper_FooBar</classname>. This class should contain at the
+        minimum a single method, named after the helper, and camelCased:
+        <methodname>fooBar()</methodname>.
     </para>
     </para>
 
 
-    <sect2 id="zend.view.helpers.initial">
-
-        <title>Assistentes Padrão</title>
+    <note>
+        <title>Watch the Case</title>
 
 
         <para>
         <para>
-            Zend_View vem com um conjunto padrão de assistentes, todos dedicados à geração de elementos de formulários. Cada um deles automaticamente escapa a saída apropriada. São eles:
+            Helper names are always camelCased, i.e., they never begin with an
+            uppercase character. The class name itself is MixedCased, but the
+            method that is actually executed is camelCased.
         </para>
         </para>
+    </note>
 
 
-        <itemizedlist>
-
-            <listitem><para>
-                formButton($name, $value, $attribs): Cria um elemento &lt;input type="button" /&gt;.
-            </para></listitem>
-
-            <listitem><para>
-                formCheckbox($name, $value, $attribs, $options): Cria um elemento &lt;input type="checkbox" /&gt;.  O parâmetro $options é um array cujo primeiro valor é o valor "checked" e o segundo é o valor "unchecked" (os valores padrão são '1' e '0').  O controle sera preselecionado de acordo com o conteúdo de $value.
-            </para></listitem>
-
-            <listitem><para>
-                formFile($name, $value, $attribs): Cria um elemento &lt;input type="file" /&gt;.
-                </para></listitem>
+    <note>
+        <title>Default Helper Path</title>
 
 
-            <listitem><para>
-                formHidden($name, $value, $attribs): Cria um elemento &lt;input type="hidden" /&gt;.
-            </para></listitem>
-
-            <listitem><para>
-                formPassword($name, $value, $attribs): Cria um elemento &lt;input type="password" /&gt;.
-            </para></listitem>
-
-            <listitem><para>
-                formRadio($name, $value, $attribs, $options): Cria uma série de elementos &lt;input type="radio" /&gt;, um para cada elemento em $options.  No array $options, a chave e seu valor estão associados ao valor do controle e seu rótulo, respecitvamente. O conteúdo de $value será preselecionado.
-            </para></listitem>
-
-            <listitem><para>
-                formReset($name, $value, $attribs): Cria um elemento &lt;input type="reset" /&gt;.
-            </para></listitem>
-
-            <listitem><para>
-                formSelect($name, $value, $attribs, $options): Cria um bloco &lt;select&gt;...&lt;/select&gt;, com um &lt;option&gt;para elemento em $options.  No array $options, a chave e seu valor estão associados ao valor do controle e seu rótulo.  O conteúdo de $value será preselecionado.
-            </para></listitem>
+        <para>
+            The default helper path always points to the Zend Framework view
+            helpers, i.e., 'Zend/View/Helper/'. Even if you call
+            <methodname>setHelperPath()</methodname> to overwrite the existing paths, this
+            path will be set to ensure the default helpers work.
+        </para>
+    </note>
 
 
-            <listitem><para>
-                formSubmit($name, $value, $attribs): Cria um elemento &lt;input type="submit" /&gt;.
-            </para></listitem>
+    <para>
+        Para usar um assistente em seu script de visualização, chame-o usando
+        <command>$this->helperName()</command>. Em segundo plano, <classname>Zend_View</classname>
+        irá carregar a classe <classname>Zend_View_Helper_HelperName</classname>, instanciá-la e
+        chamar seu método <methodname>helperName()</methodname>. O objeto criado é persistente
+        dentro do escopo da instância <classname>Zend_View</classname>, e será reutilizado por todas
+        as chamadas futuras a <command>$this->helperName()</command>.
+    </para>
 
 
-            <listitem><para>
-                formText($name, $value, $attribs): Cria um elemento &lt;input type="text" /&gt;.
-            </para></listitem>
+    <sect2 id="zend.view.helpers.initial">
+        <title>Assistentes Padrão</title>
 
 
-            <listitem><para>
-                formTextarea($name, $value, $attribs): Cria um bloco &lt;textarea&gt;...&lt;/textarea&gt;.
-            </para></listitem>
+        <para>
+            <classname>Zend_View</classname> vem com um conjunto padrão de assistentes, a maioria
+            deles dedicados à geração de elementos de formulários e automaticamente escapar a saída
+            apropriada. Além disso, existem assistentes para criar <acronym>URL</acronym>s baseadas
+            em rotas e listas de HTML, bem como declarar variáveis. Os assistentes atualmente
+            embarcados incluem:
+        </para>
 
 
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <methodname>declareVars()</methodname>: Primarily for use when using
+                    <methodname>strictVars()</methodname>, this helper can be used to declare
+                    template variables that may or may not already be set in the
+                    view object, as well as to set default values. Arrays passed as
+                    arguments to the method will be used to set default values;
+                    otherwise, if the variable does not exist, it is set to an empty string.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>fieldset($name, $content, $attribs)</methodname>: Creates an
+                    <acronym>XHTML</acronym> fieldset. If <varname>$attribs</varname> contains a
+                    'legend' key, that value will be used for the fieldset legend. The
+                    fieldset will surround the <varname>$content</varname> as provided to
+                    the helper.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>form($name, $attribs, $content)</methodname>: Generates an
+                    <acronym>XHTML</acronym> form. All <varname>$attribs</varname> are escaped and
+                    rendered as <acronym>XHTML</acronym> attributes of the form tag. If
+                    <varname>$content</varname> is present and not a boolean
+                    <constant>FALSE</constant>, then that content is rendered within the start and
+                    close form tags; if <varname>$content</varname> is a boolean
+                    <constant>FALSE</constant> (the default), only the opening form tag is
+                    generated.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formButton($name, $value, $attribs)</methodname>: Cria um elemento
+                    &lt;button /&gt;.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formCheckbox($name, $value, $attribs, $options)</methodname>:
+                    Cria um elemento &lt;input type="checkbox" /&gt;.
+                </para>
+
+                <para>
+                    By default, when no $value is provided and no $options are
+                    present, '0' is assumed to be the unchecked value, and '1'
+                    the checked value. If a $value is passed, but no $options
+                    are present, the checked value is assumed to be the value
+                    passed.
+                </para>
+
+                <para>
+                    $options should be an array. If the array is indexed, the
+                    first value is the checked value, and the second the
+                    unchecked value; all other values are ignored. You may also
+                    pass an associative array with the keys 'checked' and
+                    'unChecked'.
+                </para>
+
+                <para>
+                    If $options has been passed, if $value matches the checked
+                    value, then the element will be marked as checked. You may
+                    also mark the element as checked or unchecked by passing a
+                    boolean value for the attribute 'checked'.
+                </para>
+
+                <para>
+                    The above is probably best summed up with some examples:
+                </para>
+
+                <programlisting language="php"><![CDATA[
+// '1' and '0' as checked/unchecked options; not checked
+echo $this->formCheckbox('foo');
+
+// '1' and '0' as checked/unchecked options; checked
+echo $this->formCheckbox('foo', null, array('checked' => true));
+
+// 'bar' and '0' as checked/unchecked options; not checked
+echo $this->formCheckbox('foo', 'bar');
+
+// 'bar' and '0' as checked/unchecked options; checked
+echo $this->formCheckbox('foo', 'bar', array('checked' => true));
+
+// 'bar' and 'baz' as checked/unchecked options; unchecked
+echo $this->formCheckbox('foo', null, null, array('bar', 'baz'));
+
+// 'bar' and 'baz' as checked/unchecked options; unchecked
+echo $this->formCheckbox('foo', null, null, array(
+    'checked' => 'bar',
+    'unChecked' => 'baz'
+));
+
+// 'bar' and 'baz' as checked/unchecked options; checked
+echo $this->formCheckbox('foo', 'bar', null, array('bar', 'baz'));
+echo $this->formCheckbox('foo',
+                         null,
+                         array('checked' => true),
+                         array('bar', 'baz'));
+
+// 'bar' and 'baz' as checked/unchecked options; unchecked
+echo $this->formCheckbox('foo', 'baz', null, array('bar', 'baz'));
+echo $this->formCheckbox('foo',
+                         null,
+                         array('checked' => false),
+                         array('bar', 'baz'));
+]]></programlisting>
+
+                <para>
+                    In all cases, the markup prepends a hidden element with the
+                    unchecked value; this way, if the value is unchecked, you
+                    will still get a valid value returned to your form.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formErrors($errors, $options)</methodname>: Generates an
+                    <acronym>XHTML</acronym> unordered list to show errors.
+                    <varname>$errors</varname> should be a string or an array of strings;
+                    <varname>$options</varname> should be any attributes you want
+                    placed in the opening list tag.
+                </para>
+
+                <para>
+                    You can specify alternate opening, closing, and separator
+                    content when rendering the errors by calling several methods
+                    on the helper:
+                </para>
+
+                <itemizedlist>
+                    <listitem>
+                        <para>
+                            <methodname>setElementStart($string)</methodname>; default is
+                            '&lt;ul class="errors"%s"&gt;&lt;li&gt;', where %s
+                            is replaced with the attributes as specified in
+                            <varname>$options</varname>.
+                        </para>
+                    </listitem>
+
+                    <listitem>
+                        <para>
+                            <methodname>setElementSeparator($string)</methodname>; default
+                            is '&lt;/li&gt;&lt;li&gt;'.
+                        </para>
+                    </listitem>
+
+                    <listitem>
+                        <para>
+                            <methodname>setElementEnd($string)</methodname>; default is
+                            '&lt;/li&gt;&lt;/ul&gt;'.
+                        </para>
+                    </listitem>
+                </itemizedlist>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formFile($name, $attribs)</methodname>: Cria um elemento
+                    &lt;input type="file" /&gt;.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formHidden($name, $value, $attribs)</methodname>: Cria um elemento
+                    &lt;input type="hidden" /&gt;.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formLabel($name, $value, $attribs)</methodname>: Creates a
+                    &lt;label&gt; element, setting the <property>for</property> attribute to
+                    <varname>$name</varname>, and the actual label text to
+                    <varname>$value</varname>. If <emphasis>disable</emphasis> is passed in
+                    <property>attribs</property>, nothing will be returned.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formMultiCheckbox($name, $value, $attribs, $options,
+                        $listsep)</methodname>: Creates a list of checkboxes.
+                    <varname>$options</varname> should be an associative array, and may be
+                    arbitrarily deep. <varname>$value</varname> may be a single value or
+                    an array of selected values that match the keys in the
+                    <varname>$options</varname> array. <varname>$listsep</varname> is an HTML
+                    break ("&lt;br /&gt;") by default. By default, this element is
+                    treated as an array; all checkboxes share the same name, and are
+                    submitted as an array.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formPassword($name, $value, $attribs)</methodname>: Cria um elemento
+                    &lt;input type="password" /&gt;.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formRadio($name, $value, $attribs, $options)</methodname>: Cria uma
+                    série de elementos &lt;input type="radio" /&gt;, um para cada elemento em
+                    $options. Na matriz $options, a chave e seu valor estão associados ao valor do
+                    controle e seu rótulo, respectivamente. O conteúdo de $value será
+                    pré-selecionado.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formReset($name, $value, $attribs)</methodname>: Cria um elemento
+                    &lt;input type="reset" /&gt;.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formSelect($name, $value, $attribs, $options)</methodname>: Cria um
+                    bloco &lt;select&gt;...&lt;/select&gt;, com um &lt;option&gt; para cada elemento
+                    em $options. Na matriz $options, a chave e seu valor estão associados ao valor
+                    do controle e seu rótulo. O conteúdo de $value será pré-selecionado.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formSubmit($name, $value, $attribs)</methodname>: Cria um elemento
+                    &lt;input type="submit" /&gt;.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formText($name, $value, $attribs)</methodname>: Cria um elemento
+                    &lt;input type="text" /&gt;.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>formTextarea($name, $value, $attribs)</methodname>: Cria um bloco
+                    &lt;textarea&gt;...&lt;/textarea&gt;.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>url($urlOptions, $name, $reset)</methodname>: Creates a
+                    <acronym>URL</acronym> string based on a named route.
+                    <varname>$urlOptions</varname> should be an associative array of key/value pairs
+                    used by the particular route.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>htmlList($items, $ordered, $attribs, $escape)</methodname>:
+                    generates unordered and ordered lists based on the <varname>$items</varname>
+                    passed to it. If <varname>$items</varname> is a multidimensional
+                    array, a nested list will be built. If the <varname>$escape</varname>
+                    flag is <constant>TRUE</constant> (default), individual items will be escaped
+                    using the view objects registered escaping mechanisms; pass a
+                    <constant>FALSE</constant> value if you want to allow markup in your lists.
+                </para>
+            </listitem>
         </itemizedlist>
         </itemizedlist>
 
 
         <para>
         <para>
-            Utilizar estes assistentees em seus scripts de visualização é muito fácil, aqui está um exemplo. Note que tudo que você necessita fazer é chamá-los; eles carregam e instanciam a sí próprios a medida que tornam-se necessários.
+            Utilizar estes assistentes em seus scripts de visualização é muito fácil, aqui está um
+            exemplo. Note que tudo que você necessita fazer é chamá-los; eles carregam e instanciam
+            a sí próprios a medida que tornam-se necessários.
         </para>
         </para>
 
 
-        <programlisting role="php"><![CDATA[<?php
-// dentro do seu script de visualização, $this aponta para a instância de Zend_View.
-// digamos que você já atribuiu uma serie de valores ao array
-// $countries = array('us' => 'United States', 'il' =>'Israel', 'de' => 'Germany').
+        <programlisting language="php"><![CDATA[
+// dentro do seu script de visualização,
+// $this aponta para a instância de Zend_View.
+// 
+// digamos que você já atribuiu uma série de valores a matriz
+// $countries = array('us' => 'United States', 'il' =>
+// 'Israel', 'de' => 'Germany').
 ?>
 ?>
 <form action="action.php" method="post">
 <form action="action.php" method="post">
     <p><label>Your Email:
     <p><label>Your Email:
-        <?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
+<?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
     </label></p>
     </label></p>
     <p><label>Your Country:
     <p><label>Your Country:
-        <?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
+<?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
     </label></p>
     </label></p>
     <p><label>Would you like to opt in?
     <p><label>Would you like to opt in?
-        <?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no') ?>
+<?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no')) ?>
     </label></p>
     </label></p>
-</form>]]>
-        </programlisting>
+</form>
+]]></programlisting>
 
 
         <para>
         <para>
             A saída resultante do script de visualização deverá se parecer com isto:
             A saída resultante do script de visualização deverá se parecer com isto:
         </para>
         </para>
 
 
-        <programlisting role="php"><![CDATA[<form action="action.php" method="post">
+        <programlisting language="php"><![CDATA[
+<form action="action.php" method="post">
     <p><label>Your Email:
     <p><label>Your Email:
         <input type="text" name="email" value="you@example.com" size="32" />
         <input type="text" name="email" value="you@example.com" size="32" />
     </label></p>
     </label></p>
@@ -107,45 +384,76 @@
         <input type="hidden" name="opt_in" value="no" />
         <input type="hidden" name="opt_in" value="no" />
         <input type="checkbox" name="opt_in" value="yes" checked="checked" />
         <input type="checkbox" name="opt_in" value="yes" checked="checked" />
     </label></p>
     </label></p>
-</form>]]>
-        </programlisting>
-
+</form>
+]]></programlisting>
+
+        <xi:include href="Zend_View-Helpers-Action.xml" />
+        <xi:include href="Zend_View-Helpers-BaseUrl.xml" />
+        <xi:include href="Zend_View-Helpers-Currency.xml" />
+        <xi:include href="Zend_View-Helpers-Cycle.xml" />
+        <xi:include href="Zend_View-Helpers-Partial.xml" />
+        <xi:include href="Zend_View-Helpers-Placeholder.xml" />
+        <xi:include href="Zend_View-Helpers-Doctype.xml" />
+        <xi:include href="Zend_View-Helpers-HeadLink.xml" />
+        <xi:include href="Zend_View-Helpers-HeadMeta.xml" />
+        <xi:include href="Zend_View-Helpers-HeadScript.xml" />
+        <xi:include href="Zend_View-Helpers-HeadStyle.xml" />
+        <xi:include href="Zend_View-Helpers-HeadTitle.xml" />
+        <xi:include href="Zend_View-Helpers-HtmlObject.xml" />
+        <xi:include href="Zend_View-Helpers-InlineScript.xml" />
+        <xi:include href="Zend_View-Helpers-Json.xml" />
+        <xi:include href="Zend_View-Helpers-Navigation.xml" />
+        <xi:include href="Zend_View-Helpers-Translate.xml" />
     </sect2>
     </sect2>
 
 
     <sect2 id="zend.view.helpers.paths">
     <sect2 id="zend.view.helpers.paths">
-
         <title>Localizando os Assistentes</title>
         <title>Localizando os Assistentes</title>
 
 
         <para>
         <para>
-            Assim como os scripts de visualização, seu controlador pode especificar uma lista de caminhos onde o Zend_View deve procurar pelas classes assistentes. Por padrão, Zend_View procura pelas classes assistentes em  "Zend/View/Helper/*". Você pode instruir o Zend_View a procurar em outros locais usando os métodos setHelperPath() e addHelperPath().
+            Assim como os scripts de visualização, seu controlador pode especificar uma lista de
+            caminhos onde o <classname>Zend_View</classname> deve procurar pelas classes
+            assistentes. Por padrão, <classname>Zend_View</classname> procura pelas classes
+            assistentes em "Zend/View/Helper/*". Você pode instruir o
+            <classname>Zend_View</classname> a procurar em outros locais usando os métodos
+            <methodname>setHelperPath()</methodname> e <methodname>addHelperPath()</methodname>.
+            Além disso, você pode indicar um prefixo da classe a ser usado para os assistentes no
+            caminho fornecido, permitindo o uso de namespaces em suas classes assistentes. Por
+            padrão, se nenhum prefixo da classe for fornecido, 'Zend_View_Helper_' é assumido.
         </para>
         </para>
 
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting language="php"><![CDATA[
 $view = new Zend_View();
 $view = new Zend_View();
-$view->setHelperPath('/path/to/more/helpers');
-?>]]>
-        </programlisting>
+
+// Set path to /path/to/more/helpers, with prefix 'My_View_Helper'
+$view->setHelperPath('/path/to/more/helpers', 'My_View_Helper');
+]]></programlisting>
 
 
         <para>
         <para>
-            De fato, você pode "empilhar" caminhos usando o método addHelperPath(). A medida que você adiciona caminhos à pilha,  Zend_View procurará no caminho mais recentemente adicionado.  Isto permite a você incrementar o conjunto original de assistentes (ou susbstituir) com os seus próprios personalizados.
+            De fato, você pode "empilhar" caminhos usando o método
+            <methodname>addHelperPath()</methodname>. A medida que você adiciona caminhos à pilha,
+            <classname>Zend_View</classname> procurará no caminho mais recentemente adicionado.
+            Isto permite a você incrementar o conjunto original de assistentes (ou susbstituir) com
+            os seus próprios personalizados.
         </para>
         </para>
 
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting language="php"><![CDATA[
 $view = new Zend_View();
 $view = new Zend_View();
-$view->addHelperPath('/path/to/some/helpers');
-$view->addHelperPath('/other/path/to/helpers');
+// Add /path/to/some/helpers with class prefix 'My_View_Helper'
+$view->addHelperPath('/path/to/some/helpers', 'My_View_Helper');
+// Add /other/path/to/helpers with class prefix 'Your_View_Helper'
+$view->addHelperPath('/other/path/to/helpers', 'Your_View_Helper');
 
 
 // now when you call $this->helperName(), Zend_View will look first for
 // now when you call $this->helperName(), Zend_View will look first for
-// "/other/path/to/helpers/HelperName.php", then for
-// "/path/to/some/helpers/HelperName", and finally for
-// "Zend/View/Helpers/HelperName.php".
-?>]]>
-        </programlisting>
-
+// "/path/to/some/helpers/HelperName" using class name
+// "Your_View_Helper_HelperName", then for
+// "/other/path/to/helpers/HelperName.php" using class name
+// "My_View_Helper_HelperName", and finally for
+// "Zend/View/Helper/HelperName.php" using class name
+// "Zend_View_Helper_HelperName".
+]]></programlisting>
     </sect2>
     </sect2>
 
 
     <sect2 id="zend.view.helpers.custom">
     <sect2 id="zend.view.helpers.custom">
-
         <title>Escrevendo Assistentes Personalizados</title>
         <title>Escrevendo Assistentes Personalizados</title>
 
 
         <para>
         <para>
@@ -153,34 +461,71 @@ $view->addHelperPath('/other/path/to/helpers');
         </para>
         </para>
 
 
         <itemizedlist>
         <itemizedlist>
-
-            <listitem><para>
-                O nome da classe deve ser no formato Zend_View_Helper_*, onde * é o nome do assistente a ser criado.  Ex:, se você criar um assistente chamado "specialPurpose", o nome da classe deverá ser "Zend_View_Helper_SpecialPurpose" (Observe a capitalização).
-            </para></listitem>
-
-            <listitem><para>
-                A classe deve ter um método público que coincida com o nome do assistente; este é o método que será chamado quando o seu template chamar "$this->specialPurpose()".  Em nosso exemplo "specialPurpose", o método requerido deverá ser declarado como "public function specialPurpose()".
-            </para></listitem>
-
-            <listitem><para>
-                Em geral, a classe não deve ecoar ou imprimir a saída gerada.  Em lugar disso, ela deve retornar os valores a serem impressos. Os valores retornados deverão estar devidamente escapados.
-            </para></listitem>
-
-            <listitem><para>
-                A classe deve estar no arquivo chamado após o método assistente. Voltando ao exemplo "specialPurpose", o arquivo rebeu o nome "SpecialPurpose.php".
-            </para></listitem>
+            <listitem>
+                <para>
+                    While not strictly necessary, we recommend either implementing
+                    <classname>Zend_View_Helper_Interface</classname> or extending
+                    <classname>Zend_View_Helper_Abstract</classname> when creating your
+                    helpers. Introduced in 1.6.0, these simply define a
+                    <methodname>setView()</methodname> method; however, in upcoming releases, we
+                    plan to implement a strategy pattern that will simplify much of
+                    the naming schema detailed below. Building off these now will
+                    help you future-proof your code.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    The class name must, at the very minimum, end with the helper
+                    name itself, using MixedCaps. E.g., if you were writing a
+                    helper called "specialPurpose", the class name would minimally
+                    need to be "SpecialPurpose". You may, and should, give the class
+                    name a prefix, and it is recommended that you use 'View_Helper'
+                    as part of that prefix: "My_View_Helper_SpecialPurpose". (You
+                    will need to pass in the prefix, with or without the trailing
+                    underscore, to <methodname>addHelperPath()</methodname> or
+                    <methodname>setHelperPath()</methodname>).
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    A classe deve ter um método público que coincida com o nome do assistente; este
+                    é o método que será chamado quando o seu template chamar
+                    "$this->specialPurpose()". Em nosso exemplo "specialPurpose", o método requerido
+                    deverá ser declarado como "public function specialPurpose()".
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Em geral, a classe não deve ecoar ou imprimir a saída gerada. Em lugar disso,
+                    ela deve retornar os valores a serem impressos. Os valores retornados deverão
+                    estar devidamente escapados.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    A classe deve estar em um arquivo chamado após a classe assistente. Voltando ao
+                    exemplo "specialPurpose", o arquivo recebeu o nome "SpecialPurpose.php".
+                </para>
+            </listitem>
         </itemizedlist>
         </itemizedlist>
 
 
         <para>
         <para>
-            Localize o arquivo com a classe assistente em algum dos caminhos armazenados na pilha, e o Zend_View automaticamente irá carregar, instanciar, persistir, e executar o código para você.
+            Localize o arquivo com a classe assistente em algum dos caminhos armazenados na pilha,
+            e o <classname>Zend_View</classname> automaticamente irá carregar, instanciar,
+            persistir, e executar o código para você.
         </para>
         </para>
 
 
         <para>
         <para>
-            Aqui está um exemplo do assistente SpecialPurpose:
+            Aqui está um exemplo do assistente <classname>SpecialPurpose</classname>:
         </para>
         </para>
 
 
-        <programlisting role="php"><![CDATA[<?php
-class Zend_View_Helper_SpecialPurpose {
+        <programlisting language="php"><![CDATA[
+class My_View_Helper_SpecialPurpose extends Zend_View_Helper_Abstract
+{
     protected $_count = 0;
     protected $_count = 0;
     public function specialPurpose()
     public function specialPurpose()
     {
     {
@@ -189,32 +534,104 @@ class Zend_View_Helper_SpecialPurpose {
         return htmlspecialchars($output);
         return htmlspecialchars($output);
     }
     }
 }
 }
-?>]]>
-        </programlisting>
+]]></programlisting>
 
 
         <para>
         <para>
-            Em um script de visualização, você pode chamar o assistente SpecialPurpose helper quantas vezes desejar; ele será instanciado apenas uma vez; e persistirá durante todo o tempo de vida da instãncia de Zend_View.
+            Em um script de visualização, você pode chamar o assistente
+            <classname>SpecialPurpose</classname> quantas vezes desejar; ele será instanciado apenas
+            uma vez; e persistirá durante todo o tempo de vida da instância de
+            <classname>Zend_View</classname>.
         </para>
         </para>
 
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting language="php"><![CDATA[
 // remember, in a view script, $this refers to the Zend_View instance.
 // remember, in a view script, $this refers to the Zend_View instance.
 echo $this->specialPurpose();
 echo $this->specialPurpose();
 echo $this->specialPurpose();
 echo $this->specialPurpose();
 echo $this->specialPurpose();
 echo $this->specialPurpose();
-?>]]>
-        </programlisting>
+]]></programlisting>
 
 
         <para>
         <para>
             A saída deverá se parecer com isto:
             A saída deverá se parecer com isto:
         </para>
         </para>
-        <programlisting role="php"><![CDATA[I have seen 'The Jerk' 1 time(s).
+
+        <programlisting language="php"><![CDATA[
+I have seen 'The Jerk' 1 time(s).
 I have seen 'The Jerk' 2 time(s).
 I have seen 'The Jerk' 2 time(s).
-I have seen 'The Jerk' 3 time(s).]]>
-        </programlisting>
+I have seen 'The Jerk' 3 time(s).
+]]></programlisting>
+
+        <para>
+            Sometimes you will need access to the calling <classname>Zend_View</classname>
+            object -- for instance, if you need to use the registered encoding,
+            or want to render another view script as part of your helper. To get
+            access to the view object, your helper class should have a
+            <methodname>setView($view)</methodname> method, like the following:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+class My_View_Helper_ScriptPath
+{
+    public $view;
 
 
+    public function setView(Zend_View_Interface $view)
+    {
+        $this->view = $view;
+    }
+
+    public function scriptPath($script)
+    {
+        return $this->view->getScriptPath($script);
+    }
+}
+]]></programlisting>
+
+        <para>
+            If your helper class has a <methodname>setView()</methodname> method, it will be
+            called when the helper class is first instantiated, and passed the
+            current view object. It is up to you to persist the object in your
+            class, as well as determine how it should be accessed.
+        </para>
+
+        <para>
+            If you are extending <classname>Zend_View_Helper_Abstract</classname>, you do
+            not need to define this method, as it is defined for you.
+        </para>
     </sect2>
     </sect2>
 
 
+    <sect2 id="zend.view.helpers.registering-concrete">
+        <title>Registering Concrete Helpers</title>
+
+        <para>
+            Sometimes it is convenient to instantiate a view helper, and then register it with the
+            view. As of version 1.10.0, this is now possible using the
+            <methodname>registerHelper()</methodname> method, which expects two arguments: the
+            helper object, and the name by which it will be registered.
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$helper = new My_Helper_Foo();
+// ...do some configuration or dependency injection...
+
+$view->registerHelper($helper, 'foo');
+]]></programlisting>
+
+        <para>
+            If the helper has a <methodname>setView()</methodname> method, the view object will call
+            this and inject itself into the helper on registration.
+        </para>
+
+        <note>
+            <title>Helper name should match a method</title>
+
+            <para>
+                The second argument to <methodname>registerHelper()</methodname> is the name of the
+                helper. A corresponding method name should exist in the helper; otherwise,
+                <classname>Zend_View</classname> will call a non-existent method when invoking the
+                helper, raising a fatal PHP error.
+            </para>
+        </note>
+    </sect2>
 </sect1>
 </sect1>
 <!--
 <!--
 vim:se ts=4 sw=4 et:
 vim:se ts=4 sw=4 et:
--->
+-->

+ 332 - 100
documentation/manual/pt-br/module_specs/Zend_View-Introduction.xml

@@ -1,100 +1,332 @@
-<sect1 id="zend.view.introduction">
-
-    <title>Introdução</title>
-
-    <para>
-        Zend_View é uma classe para trabalhar com a parte de visualização do padrão de projeto MVC.  Basicamente ela existe para  separar o script de visualização dos controladores e modelos.  Ela fornece um sistema de assistentes, filtros de saída e escape de variáveis.
-    </para>
-
-    <para>
-        Zend_View é um sistema de template agnóstico; você pode usar o PHP como sua linguagem de template, ou criar instâncias de outros sistemas de template e manipulá-las dentro do seu script de visualização.
-    </para>
-
-    <para>
-        Essencialmente, o funcionamento do Zend_View acontece em duas etapas principais:
-
-        1.  Seu script controlador cria uma instância de Zend_View, atribuindo-lhe variáveis.
-
-        2. O controlador instrui o Zend_View a rederizar uma determinada visualização , passando o controle ao script de visualização, responsável pela geração da saída a ser visualizada.
-    </para>
-
-    <sect2 id="zend.view.introduction.controller">
-
-        <title>Script Controlador</title>
-
-        <para>
-            Neste exemplo simples, suponhamos que seu controlador tenha uma listagem contendo dados sobre livros, que queremos renderizar para uma visualização. O controlador poderia ser algo como isto:
-        </para>
-
-        <programlisting role="php"><![CDATA[<?php
-// use um modelo para obter dados sobre autores e títulos dos livros.
-$data = array(
-    array(
-        'author' => 'Hernando de Soto',
-        'title' => 'The Mystery of Capitalism'
-    ),
-    array(
-        'author' => 'Henry Hazlitt',
-        'title' => 'Economics in One Lesson'
-    ),
-    array(
-        'author' => 'Milton Friedman',
-        'title' => 'Free to Choose'
-    )
-);
-
-// atribua os dados à instância de Zend_View
-Zend_Loader::loadClass('Zend_View');
-$view = new Zend_View();
-$view->books = $data;
-
-// renderize uma visualização chamada "booklist.php"
-echo $view->render('booklist.php');
-?>]]>
-        </programlisting>
-
-    </sect2>
-
-    <sect2 id="zend.view.introduction.view">
-
-        <title>Script Visualizador</title>
-
-        <para>
-            Agora necessitaremos do script de visualização associado, "booklist.php". Trata-se de um script PHP como qualquer outro, com uma exceção:  ele executa dentro do escopo da instância de Zend_View instance, o que implica que as referências a $this apontam para as propriedades e métodos da instância Zend_View.  (Variáveis atribuídas à instância pelo controlador são propriedades públicas da instância de Zend_View.)  Deste modo, um script de visualição muito básico poderia se parecer com isto:
-        </para>
-
-        <programlisting role="php"><![CDATA[<?php if ($this->books): ?>
-
-    <!-- Uma tabela contendo alguns livros. -->
-    <table>
-        <tr>
-            <th>Autor</th>
-            <th>Título</th>
-        </tr>
-
-        <?php foreach ($this->books as $key => $val): ?>
-        <tr>
-            <td><?php echo $this->escape($val['author']) ?></td>
-            <td><?php echo $this->escape($val['title']) ?></td>
-        </tr>
-        <?php endforeach; ?>
-
-    </table>
-
-<?php else: ?>
-
-    <p>Não existem livros a serem exibidos.</p>
-
-<?php endif; ?>]]>
-        </programlisting>
-
-        <para>
-            Observe a forma como empregamos o método "escape()" para escapar o conteúdo das variáveis para a saída.
-        </para>
-
-    </sect2>
-
-</sect1>
-<!--
-vim:se ts=4 sw=4 et:
--->
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20799 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.view.introduction">
+    <title>Introdução</title>
+
+    <para>
+        <classname>Zend_View</classname> é uma classe para trabalhar com a parte de visualização do
+        padrão de projeto MVC. Basicamente ela existe para separar o script de visualização dos
+        controladores e modelos. Ela fornece um sistema de assistentes, filtros de saída e escape
+        de variáveis.
+    </para>
+
+    <para>
+        <classname>Zend_View</classname> é um sistema de template agnóstico; você pode usar o
+        <acronym>PHP</acronym> como sua linguagem de template, ou criar instâncias de outros
+        sistemas de template e manipulá-las dentro do seu script de visualização.
+    </para>
+
+    <para>
+        Essencialmente, o funcionamento do <classname>Zend_View</classname> acontece em duas etapas
+        principais:
+        1. Seu script controlador cria uma instância de <classname>Zend_View</classname>,
+        atribuindo-lhe variáveis.
+        2. O controlador instrui o <classname>Zend_View</classname> a renderizar uma determinada
+        visualização, passando o controle ao script de visualização, responsável pela geração da
+        saída a ser visualizada.
+    </para>
+
+    <sect2 id="zend.view.introduction.controller">
+        <title>Script Controlador</title>
+
+        <para>
+            Neste exemplo simples, suponhamos que seu controlador tenha uma listagem contendo dados
+            sobre livros, que queremos renderizar para uma visualização. O controlador poderia ser
+            algo como isto:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// use a model to get the data for book authors and titles.
+$data = array(
+    array(
+        'author' => 'Hernando de Soto',
+        'title' => 'The Mystery of Capitalism'
+    ),
+    array(
+        'author' => 'Henry Hazlitt',
+        'title' => 'Economics in One Lesson'
+    ),
+    array(
+        'author' => 'Milton Friedman',
+        'title' => 'Free to Choose'
+    )
+);
+
+// now assign the book data to a Zend_View instance
+Zend_Loader::loadClass('Zend_View');
+$view = new Zend_View();
+$view->books = $data;
+
+// and render a view script called "booklist.php"
+echo $view->render('booklist.php');
+]]></programlisting>
+    </sect2>
+
+    <sect2 id="zend.view.introduction.view">
+        <title>Script Visualizador</title>
+
+        <para>
+            Agora necessitaremos do script de visualização associado, "booklist.php". Trata-se de um
+            script <acronym>PHP</acronym> como qualquer outro, com uma exceção: ele executa dentro
+            do escopo da instância de <classname>Zend_View</classname>, o que implica que as
+            referências a $this apontam para as propriedades e métodos da instância
+            <classname>Zend_View</classname>. (Variáveis atribuídas à instância pelo controlador são
+            propriedades públicas da instância de <classname>Zend_View</classname>). Deste modo, um
+            script de visualização muito básico poderia se parecer com isto:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+ if ($this->books): ?>
+
+    <!-- Uma tabela contendo alguns livros. -->
+    <table>
+        <tr>
+            <th>Autor</th>
+            <th>Título</th>
+        </tr>
+
+        <?php foreach ($this->books as $key => $val): ?>
+        <tr>
+            <td><?php echo $this->escape($val['author']) ?></td>
+            <td><?php echo $this->escape($val['title']) ?></td>
+        </tr>
+        <?php endforeach; ?>
+
+    </table>
+
+<?php else: ?>
+
+    <p>Não existem livros a serem exibidos.</p>
+
+<?php endif;?>
+]]></programlisting>
+
+        <para>
+            Observe a forma como empregamos o método "escape()" para escapar o conteúdo das
+            variáveis para a saída.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.view.introduction.options">
+        <title>Options</title>
+
+        <para>
+            <classname>Zend_View</classname> has several options that may be set to
+            configure the behaviour of your view scripts.
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <property>basePath</property>: indicate a base path from which to set
+                    the script, helper, and filter path. It assumes a directory
+                    structure of:
+                </para>
+
+                <programlisting language="php"><![CDATA[
+base/path/
+    helpers/
+    filters/
+    scripts/
+]]></programlisting>
+
+                <para>
+                    This may be set via <methodname>setBasePath()</methodname>,
+                    <methodname>addBasePath()</methodname>, or the <property>basePath</property>
+                    option to the constructor.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <property>encoding</property>: indicate the character encoding to use
+                    with <methodname>htmlentities()</methodname>,
+                    <methodname>htmlspecialchars()</methodname>, and other operations. Defaults
+                    to ISO-8859-1 (latin1). May be set via
+                    <methodname>setEncoding()</methodname> or the <property>encoding</property>
+                    option to the constructor.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <property>escape</property>: indicate a callback to be used by
+                    <methodname>escape()</methodname>. May be set via
+                    <methodname>setEscape()</methodname> or the <property>escape</property> option
+                    to the constructor.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <property>filter</property>: indicate a filter to use after rendering
+                    a view script. May be set via <methodname>setFilter()</methodname>,
+                    <methodname>addFilter()</methodname>, or the <property>filter</property> option
+                    to the constructor.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <property>strictVars</property>: force <classname>Zend_View</classname> to emit
+                    notices and warnings when uninitialized view variables are
+                    accessed. This may be set by calling
+                    <methodname>strictVars(true)</methodname> or passing the
+                    <property>strictVars</property> option to the constructor.
+                </para>
+            </listitem>
+        </itemizedlist>
+    </sect2>
+
+    <sect2 id="zend.view.introduction.shortTags">
+        <title>Short Tags with View Scripts</title>
+
+        <para>
+            In our examples, we make use of <acronym>PHP</acronym> long tags:
+            <emphasis>&lt;?php</emphasis>. We also favor the use of <ulink
+                url="http://us.php.net/manual/en/control-structures.alternative-syntax.php">alternate
+                syntax for control structures</ulink>. These are convenient shorthands to use when
+            writing view scripts, as they make the constructs more terse, keep statements on single
+            lines, and eliminate the need to hunt for brackets within HTML.
+        </para>
+
+        <para>
+            In previous versions, we often recommended using short tags (<emphasis>&lt;?</emphasis>
+            and <emphasis>&lt;?=</emphasis>), as they make the view scripts slightly less verbose.
+            However, the default for the <filename>php.ini</filename>
+            <constant>short_open_tag</constant> setting is typically off in production or on shared
+            hosts -- making their use not terribly portable. If you use template
+            <acronym>XML</acronym> in view scripts, short open tags will cause the templates to fail
+            validation. Finally, if you use short tags when <constant>short_open_tag</constant> is
+            off, the view scripts will either cause errors or simply echo PHP code back to the
+            viewer.
+        </para>
+
+        <para>
+            If, despite these warnings, you wish to use short tags but they are disabled, you have
+            two options:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    Turn on short tags in your <filename>.htaccess</filename> file:
+                </para>
+
+                <programlisting language="apache"><![CDATA[
+php_value "short_open_tag" "on"
+]]></programlisting>
+
+                <para>
+                    This will only be possible if you are allowed to create and
+                    utilize <filename>.htaccess</filename> files. This directive can
+                    also be added to your <filename>httpd.conf</filename> file.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Enable an optional stream wrapper to convert short tags to
+                    long tags on the fly:
+                </para>
+
+        <programlisting language="php"><![CDATA[
+$view->setUseStreamWrapper(true);
+]]></programlisting>
+
+                <para>
+                    This registers <classname>Zend_View_Stream</classname> as a stream
+                    wrapper for view scripts, and will ensure that your code
+                    continues to work as if short tags were enabled.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <warning>
+            <title>View Stream Wrapper Degrades Performance</title>
+
+            <para>
+                Usage of the stream wrapper <emphasis>will</emphasis> degrade
+                performance of your application, though actual benchmarks are
+                unavailable to quantify the amount of degradation. We recommend
+                that you either enable short tags, convert your scripts to use
+                full tags, or have a good partial and/or full page content
+                caching strategy in place.
+            </para>
+        </warning>
+    </sect2>
+
+    <sect2 id="zend.view.introduction.accessors">
+        <title>Utility Accessors</title>
+
+        <para>
+            Typically, you'll only ever need to call on <methodname>assign()</methodname>,
+            <methodname>render()</methodname>, or one of the methods for setting/adding
+            filter, helper, and script paths. However, if you wish to extend
+            <classname>Zend_View</classname> yourself, or need access to some of its
+            internals, a number of accessors exist:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <methodname>getVars()</methodname> will return all assigned variables.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>clearVars()</methodname> will clear all assigned variables;
+                    useful when you wish to re-use a view object, but want to
+                    control what variables are available.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getScriptPath($script)</methodname> will retrieve the
+                    resolved path to a given view script.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getScriptPaths()</methodname> will retrieve all registered
+                    script paths.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getHelperPath($helper)</methodname> will retrieve the
+                    resolved path to the named helper class.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getHelperPaths()</methodname> will retrieve all registered
+                    helper paths.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getFilterPath($filter)</methodname> will retrieve the
+                    resolved path to the named filter class.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <methodname>getFilterPaths()</methodname> will retrieve all registered
+                    filter paths.
+                </para>
+            </listitem>
+        </itemizedlist>
+    </sect2>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->