TigerZF
🌐Español

36.8. Internacionalización de Zend_Form

Cada vez más, los desarrolladores necesitan adaptar su contenido para múltiples idiomas y regiones. Zend_Form tiene como objetivo hacer que dicha tarea sea trivial, y aprovecha la funcionalidad tanto de Zend_Translate como de Zend_Validate para hacerlo.

Por defecto, no se realiza ninguna internacionalización (I18n). Para activar las funciones de I18n en Zend_Form, necesitará instanciar un objeto Zend_Translate con un adaptador apropiado, y adjuntarlo a Zend_Form y/o Zend_Validate. Consulte la documentación de Zend_Translate para más información sobre la creación del objeto de traducción y los archivos de traducción

[Note] La traducción se puede desactivar por elemento

Puede deshabilitar la traducción para cualquier formulario, elemento, grupo de visualización o subformulario llamando a su método setDisableTranslator($flag) o pasando una opción disableTranslator al objeto. Esto puede ser útil cuando desea deshabilitar selectivamente la traducción para elementos individuales o conjuntos de elementos.

36.8.1. Inicializando I18n en formularios

Para inicializar I18n en los formularios, necesitará ya sea un objeto Zend_Translate o un objeto Zend_Translate_Adapter, como se detalla en la documentación de Zend_Translate. Una vez que tenga un objeto de traducción, tiene varias opciones:

  • Más fácil: agréguelo al registro. Todos los componentes de Zend Framework compatibles con I18n descubrirán automáticamente un objeto de traducción que esté en el registro bajo la clave 'Zend_Translate' y lo usarán para realizar la traducción y/o localización:

    // use the 'Zend_Translate' key; $translate is a Zend_Translate object:
    Zend_Registry::set('Zend_Translate', $translate);
    

    Esto será detectado por Zend_Form, Zend_Validate, y Zend_View_Helper_Translate.

  • Si lo único que le preocupa es traducir los mensajes de error de validación, puede registrar el objeto de traducción con Zend_Validate_Abstract:

    // Tell all validation classes to use a specific translate adapter:
    Zend_Validate_Abstract::setDefaultTranslator($translate);
    
  • Alternativamente, puede adjuntarlo al objeto Zend_Form como un traductor global. Esto tiene el efecto secundario de traducir también los mensajes de error de validación:

    // Tell all form classes to use a specific translate adapter, as well
    // as use this adapter to translate validation error messages:
    Zend_Form::setDefaultTranslator($translate);
    
  • Finalmente, puede adjuntar un traductor a una instancia de formulario específica o a elementos específicos usando sus métodos setTranslator():

    // Tell *this* form instance to use a specific translate adapter; it
    // will also be used to translate validation error messages for all
    // elements:
    $form->setTranslator($translate);
    
    // Tell *this* element to use a specific translate adapter; it will
    // also be used to translate validation error messages for this
    // particular element:
    $element->setTranslator($translate);
    

36.8.2. Objetivos estándar de I18n

Ahora que ha adjuntado un objeto de traducción, ¿qué es exactamente lo que puede traducir por defecto?

  • Mensajes de error de validación. Los mensajes de error de validación se pueden traducir. Para ello, use las diversas constantes de código de error de las clases de validación de Zend_Validate como los ID de mensaje. Para más información sobre estos códigos, consulte la documentación de Zend_Validate.

    Alternativamente, a partir de la versión 1.6.0, puede proporcionar cadenas de traducción usando los mensajes de error reales como identificadores de mensaje. Este es el caso de uso preferido para la versión 1.6.0 y posteriores, ya que se está deprecando la traducción de claves de mensaje en futuras versiones.

  • Etiquetas. Las etiquetas de los elementos serán traducidas, si existe una traducción.

  • Leyendas de Fieldset. Los grupos de visualización y subformularios se renderizan en fieldsets por defecto. El decorador Fieldset intenta traducir la leyenda antes de renderizar el fieldset.

  • Descripciones de formularios y elementos. Todos los tipos de formulario (elemento, formulario, grupo de visualización, subformulario) permiten especificar una descripción de elemento opcional. El decorador Description puede usarse para renderizarla, y por defecto tomará el valor e intentará traducirlo.

  • Valores de opciones múltiples. para los diversos elementos que heredan de Zend_Form_Element_Multi (incluyendo los elementos MultiCheckbox, Multiselect y Radio), los valores de las opciones (no las claves) se traducirán si hay una traducción disponible; esto significa que las etiquetas de opción presentadas al usuario serán traducidas.

  • Etiquetas de Submit y Button. Los diversos elementos Submit y Button (Button, Submit y Reset) traducirán la etiqueta mostrada al usuario.