Skip to content

[Symfony] Configurar correctamente las etiquetas para campos en formularos embedI18n

Si has le铆do informaci贸n en internet o has seguido el tutorial de Jobeet, se puede uno dar cuenta de que en el cap铆tulo 19 se habla de la internacionalizaci贸n, y del uso de los formularios embedI18n, una vez que tienes tu archivo schema.yml configurado correctamente para que symfony cree y administre correctamente los campos en mas de un idioma, es realmente sencillo agregar los campos necesarios a un formulario para que se manejen dichos idiomas.

Tomemos por ejemplo que necesitamos crear una tabla que contendr谩 nombres de ingredientes en ingles y en espa帽ol, en nuestro archivo de configuraci贸n del formulario (IngredienteForm.class.php) solo deber铆amos agregar algo como esto:

$this->embedI18n(array('en', 'es'));

$this->widgetSchema->setLabel('en', 'English');
$this->widgetSchema->setLabel('es', 'Espa帽ol');

Y si nuestra configuracion es correcta, symfony agregara automaticamente 2 campos automaticamente y ademas como etiqueta pondra el nombre del respectivo lenguaje.

Suponiendo que nuestro campo para guardar el nombre del ingrediente se llama name , aparecera nuestro problema, el nombre de la etiqueta en ambos idiomas aparecera como name y lo correcto podria ser algo como: Name y Nombre, respectivamente o incluso se podria querer que dijera Ingredient e Ingrediente y es ahi donde jobeet nos deja y no da mas informacion, tampoco es tan sencillo encontrarla en internet, o es que no supe buscar pero en su momento no encontre una solucion pero si varias personas preguntando.

La solucion viene de usar la logica de nombres de Symfony y con un poco de acierto y error lo tenemos.

La primera cosa que deberia venir a la mente es usar la barra de depuracion para ver el nombre del campo del formulario, si hacemos esto se podra notar que el nombre que aparece es:


$form['en']['name'] (sfWidgetFormInputText)

$form['es']['name'] (sfWidgetFormInputText)

En un primer intento podriamos querer colocar el setlabel de la siguiente manera:


$this->widgetSchema->setLabel('[en][name]', 'Ingredient');

O alguna combinacion parecida, pero symfony no encontrara el campo, de nuevo las multiples opciones de symfony nos permite abordar el problema de mas de una forma, el codigo correcto es el siguiente:


$this->widgetSchema['en']['name']->setLabel('Name of Ingredient');
$this->widgetSchema['es']['name']->setLabel('Nombre del Ingrediente');

Es decir debemos indicarle a symfony el campo en forma de arreglo [] para que pueda encontrarlo correctamente.

Acerca del Autor

Ingeniero en Sistemas Computacionales, con especialidad en Ingenier铆a de Software.
Egresado del Instituto Tecnol贸gico de Orizaba.

Desde que tuve mi primer contacto con una computadora lo que m谩s me intereso era saber c贸mo hacer un programa, a mi no me mataba saber c贸mo armarla, que piezas usaba o como usarla, si no como lograba una persona hacer que en la pantalla aparecieran letras, colores, como podian crear un procesador de texto, un paint.

Con conocimiento en C, Java, JSP, C#, a fuerza de necesidad tambi茅n en PHP y en el manejo del Framework Symfony, Doctrine y Jquery.

Me gustan los juegos de video, pero no soy un gamer fan谩tico, los libros de novela hist贸rica, sobre todo los basados en M茅xico.

Felizmente casado y orgullosamente Mexicano, con el firme prop贸sito de hacer que el mundo conozca mi pa铆s por todas aquellas cosas que se est谩n desarrollando y no solo por la imagen err贸nea y anacr贸nica que se tiene del mismo.

Pasa la Voz, Comparte Nuestro Articulo

Post Relacionados

Comentarios

Hay un comentario para este post.

  1. Ivani agosto 31, 2012

    Hi all.I’m just moving from my own self-rolled MVC Framework to Symfony, and find it hard to bveliee that this bug has still not been fixed (v1.4.9).It makes no sense to me to have a checkbox which only appears unchecked’ when the underlying data is null or boolean false’. Under MySQL, the value of zero (0) is often used to represent false’ in a TINYINT(1) field.Changing symfony/lib/widget/sfWidgetFormInputCheckbox.class.php from:if (null !== $value && $value !== false)to if (null !== $value && $value !== false && $value !== 0)seems to fix this problem in an uncontroversial way so I wonder why this hasn’t been adopted as a fix ?Thanks for the page was useful for me.Dave Small

Trackbacks

No hay trackbacks para esta publicacion.

Agregar un comentario

Obligatorio

Obligatorio

Opcional

*