Los formularios de Symfony incluyen el soporte de los objetos Propel internacionalizados. Para mostrar su funcionamiento se utiliza el siguiente modelo de datos de ejemplo con soporte de internacionalización:
propel:
articulo:
id:
autor: varchar(255)
created_at:
articulo_i18n:
titulo: varchar(255)
contenido: longvarcharUtilizando los siguientes comandos se pueden generar las clases Propel y las clases del formulario:
$ php symfony build:model $ php symfony build:forms
Los comandos anteriores generan varios archivos en el proyecto de Symfony:
lib/
form/
ArticuloForm.class.php
ArticuloI18nForm.class.php
BaseFormPropel.class.php
model/
Articulo.php
ArticuloPeer.php
ArticuloI18n.php
ArticuloI18nPeer.php
El listado 8-8 muestra cómo configurar el formulario ArticuloForm para poder editar en un mismo formulario las versiones en inglés y francés de un artículo.
Listado 8-8 - Formularios I18n de un objeto Propel internacionalizado
class ArticuloForm extends BaseArticuloForm { public function configure() { $this->embedI18n(array('en', 'fr')); } }
También es posible personalizar el nombre de los idiomas del formulario añadiendo en el método configure() el código mostrado en el listado 8-9.
Listado 8-9 - Personalizando el nombre de los idiomas
$this->widgetSchema->setLabel('en', 'Inglés'); $this->widgetSchema->setLabel('fr', 'Francés');
Figura 8-1 - Formulario Propel internacionalizado
Figura 8.1. Formulario Propel internacionalizado
Y eso es todo. Cuando se ejecuta el método save() del objeto del formulario, se guardan de forma automática el objeto Propel asociado y todos los objetos de tipo i18n.
Capítulo original en inglés Chapter 8 - Internationalization and Localization Traducido por Javier Eguíluz