/ / Generación de entrada dinámica con Zend_Form - php, zend-framework, doctrine2, zend-form

Generación de entrada dinámica con Zend_Form - php, zend-framework, doctrine2, zend-form

Buenos días,

Tengo una aplicación back-end multilingüe que tiene que soportar n idiomas. Los idiomas se almacenan en una base de datos y se pueden agregar en cualquier momento. Ahora, para mi funcionalidad back-end, necesito generar dinámicamente <input> campos basados ​​en los idiomas almacenados en mi db, por ejemplo:

  1. Alemán: <input type="text" id="title_de">
  2. Inglés <input type="text" id="title_en">
  3. italiano <input type="text" id="title_it">
  4. ...

Actualmente los agrego así usando Zend_Form:

  foreach($languages as $language){
$title = new Zend_Form_Element_Text("title_" . $language->getPrefix());
$title->setLabel("Title " . $language->getPrefix())
->setRequired(true)
$this->addElements(array($title));
}

Y así es como guardo los campos en mi base de datos usando Doctrine:

//get language-dependent title and write to DB
foreach($languages as $language){
$title->setLanguage($language);
$title->setContent($form->getValue("title_" . $language->getPrefix()));
$touristArea->addTitle($title);

//persist and flush
$em->persist($touristArea);
$em->flush();
}

De todos modos, como tengo muchos campos dependientes del idioma(Títulos, Subtítulos, etc.), el código para procesar el formulario puede ser bastante desagradable y siempre tengo que consultar la tabla de idiomas en mi DB para saber qué entradas se han generado. ¿Hay una mejor manera de hacer esto? Al igual que con una serie de entradas o algo así? Gracias por cualquier entrada :)

Respuestas

0 para la respuesta № 1

Te sugiero que uses Zend_Translate componente Antes que nada crea un archivo fuente con traducciones -> Crear archivos fuente de Array

Los archivos fuente de matriz son matrices simples. Pero debe definirlos manualmente ya que no hay ninguna herramienta que lo ayude. Pero debido a que son tan simples, es la manera más rápida de buscar mensajes si el código funciona como se espera. Generalmente es el mejor adaptador para comenzar con el negocio de la traducción.

$english = array(
"message1" => "message1",
"message2" => "message2",
"message3" => "message3");

$german = array(
"message1" => "Nachricht1",
"message2" => "Nachricht2",
"message3" => "Nachricht3");

$translate = new Zend_Translate(
array(
"adapter" => "array",
"content" => $english,
"locale"  => "en"
)
);

$translate->addTranslation(array("content" => $german, "locale" => "de"));

Desde la versión 1.5 también es compatible con tener matrices incluidas dentro de un archivo externo. Solo debe proporcionar el nombre del archivo y Zend_Translate lo incluirá automáticamente y buscará la matriz. Ver lo siguiente página para obtener más información sobre los archivos fuente

Luego echa un vistazo Internacionalización de Zend_Form

Para inicializar I18n en formularios, lonecesita un objeto Zend_Translate o un objeto Zend_Translate_Adapter, como se detalla en la documentación de Zend_Translate. Una vez que tiene un objeto de traducción, puede adjuntar un traductor a una instancia de formulario específica oa elementos específicos utilizando 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);

La guía detallada es aquí