<?xml version="1.0" encoding="UTF-8"?>
    <!-- EN-Revision: 24249 -->
    <!-- Reviewed: no -->
<sect1 id="zend.form.i18n">
    <title>Internacionalización de Zend_Form</title>

    <para>
        Cada vez más, desarrolladores necesitan adaptar su contenido para multiples idiomas y
        regiones.
        <classname>Zend_Form</classname>
        intenta hacer de ésta una tarea trivial, y provee
        funcionalidad en ambas
        <link linkend="zend.translate">Zend_Translate</link>
        y
        <link linkend="zend.validate">Zend_Validate</link>
        para realizar esa funcionalidad.
    </para>

    <para>
        Por defecto, no se realiza ninguna internacionalización (I18n). Para iniciar las
        caraterísticas de I18n en
        <classname>Zend_Form</classname>
        , se necesitará instanciar un
        objeto
        <classname>Zend_Translate</classname>
        con un adaptador apropiado, y adjuntarlo a
        <classname>Zend_Form</classname>
        y/o
        <classname>Zend_Validate</classname>
        . Ver la
        <link linkend="zend.translate">documentación Zend_Translate </link>
        para más información sobre
        crear el objeto traducción y los archivos de traducción
    </para>

    <note>
        <title>La Traducción Puede Ser Deshabilitado Por Item</title>

        <para>
            Se puede deshabilitar la traducción para cualquier formulario, elemento, grupo de
            visualización o subformulario llamando al método
            <methodname>setDisableTranslator($flag)</methodname>
            o pasando la opción
            <property>disableTranslator</property>
            al objeto. Puede ser de mucha ayuda
            cuando se quiere deshabilitar selectivamente la
            traducción para elementos individuales o
            grupo de elementos.
        </para>
    </note>

    <sect2 id="zend.form.i18n.initialization">
        <title>Inicializando I18n en formularios</title>

        <para>
            Para poder inicializar I18n en formularios, se necesitará un objeto
            <classname>Zend_Translate</classname>
            o un objeto
            <classname>Zend_Translate_Adapter</classname>
            , como se detalló en la documentación
            <classname>Zend_Translate</classname>
            . Una vez que se tenga el objeto traducción,
            existen varias opciones:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Fácil:</emphasis>
                    añadirlo al registro. Todos los componentes I18n de
                    Zend Framework descubrirán
                    automáticamente un objeto traducción que está en el
                    registro con la clave
                    'Zend_Translate' y lo usará para ejecutar la traducción
                    y/o la localización:
                </para>

                <programlisting language="php"><![CDATA[
// use la clave 'Zend_Translate'; $translate es un objeto Zend_Translate:
Zend_Registry::set('Zend_Translate', $translate);
]]></programlisting>

                <para>
                    Será recibido por
                    <classname>Zend_Form</classname>
                    ,
                    <classname>Zend_Validate</classname>
                    y
                    <classname>Zend_View_Helper_Translate</classname>
                    .
                </para>
            </listitem>

            <listitem>
                <para>
                    Si todo lo que le preocupa es traducir los mensajes de error de validación,
                    puede registrar el objeto traducción con
                    <classname>Zend_Validate_Abstract</classname>
                    :
                </para>

                <programlisting language="php"><![CDATA[
// Decir a todas las clases de validación que se use un adaptador especifico de traducción
Zend_Validate_Abstract::setDefaultTranslator($translate);
]]></programlisting>
            </listitem>

            <listitem>
                <para>
                    Alternativamente, se puede adjuntar al objeto
                    <classname>Zend_Form</classname>
                    como un traductor global. Tiene el mismo
                    efecto que traduciendo los mensajes de
                    error de validación.
                </para>

                <programlisting language="php"><![CDATA[
// Decir a todas las clases del formulario usar un adaptador especifico, así como también
// use este adaptador para traducir mensajes de error de validación
Zend_Form::setDefaultTranslator($translate);
]]></programlisting>
            </listitem>

            <listitem>
                <para>
                    Finalmente, se puede adjuntar un traductor a una instancia especifica de un
                    formulario o a elementos especificar usando sus métodos
                    <methodname>setTranslator()</methodname>
                    :
                </para>

                <programlisting language="php"><![CDATA[
// Decir a *esta* instancia del formulario que use un adaptador especifico de traducción;
// será usado para traducir mensajes de error de validación para todos los
// elementos:
$form->setTranslator($translate);

// Decir a *este* elemento usar un adaptador especifico de traducción; será
// usado para traducir los mensajes de error de validación para este
// elemento en particular:
$element->setTranslator($translate);
]]></programlisting>
            </listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.form.i18n.standard">
        <title>Objetivos estándar I18n</title>

        <para>Ahora que ya se tiene adjuntado un objeto de traducción, ¿qué se puede traducir
            exactamente por defecto?</para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>Mensajes de error de validación.</emphasis>
                    Los mensajes de error de
                    validación pueden ser traducidos. Para hacerlo, use la
                    variedad de constantes de
                    códigos de error de
                    <classname>Zend_Validate</classname>
                    las clases de
                    validación como los ID del mensaje. Para más información sobre esos
                    códigos, ver
                    la documentación
                    <link linkend="zend.validate">Zend_Validate</link>
                    .
                </para>

                <para>Alternativamente, desde la versión 1.6.0, se pueden proveer cadenas de
                    traducción usando los mensajes de error actuales como mensajes identificadores.
                    Este es el caso preferido de uso para 1.6.0 en adelante, así como también se
                    volverá obsoleta la traducción de las claves de mensajes en versiones futuras.
               </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Etiquetas.</emphasis>
                    Las etiquetas elemento serán traducidas, si una
                    traducción existe.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Leyendas de campos.</emphasis>
                    Grupos de visualización y
                    subformularios se generan por defecto en fieldsets. El
                    decorador de fieldsets
                    intenta traducir la leyenda antes de generar el fieldset.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Descripciones de formularios y elementos.</emphasis>
                    Todos los tipos
                    de formulario (elemento, formulario, visualización de grupos,
                    subformularios)
                    permiten especificar una descripción opcional. El decorador
                    Description puede
                    generarlo y por defecto tomará el valor e intentará traducirlo.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Valores multi-opción.</emphasis>
                    Para los múltiples items que heredan
                    de
                    <classname>Zend_Form_Element_Multi</classname>
                    (incluyendo el MultiCheckbox,
                    Multiselect y elementos Radio), la valores de
                    opciones (no claves) serán
                    traducidos si una traducción esta disponible; eso
                    significa que las etiquetas de
                    opciones presentadas al usuario serán traducidas.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>Submit y etiquetas Button.</emphasis>
                    Los múltiples elementos Submit y
                    Button (Button, Submit y Reset) traducirán la
                    etiqueta mostrada al usuario.
                </para>
            </listitem>
        </itemizedlist>
    </sect2>
</sect1>
