translations language component change symfony localization

language - translation symfony 4



Symfony2-Establecer el dominio de traducción para un formulario completo (4)

Quiero traducir un formulario creado con el formbuilder de Symfony. Como no quiero un archivo de traducción grande, se divide en "dominios".

Ahora tengo que especificar el dominio de translation_domain para cada campo de formulario, de lo contrario, Symfony se verá en el archivo incorrecto. Esta opción debe agregarse a cada campo y me pregunto si hay una manera de configurar esta opción en un formulario completo.

Código de ejemplo no estoy contento con:

$builder->add( ''author_name'', ''text'', array(''label'' => ''Comment.author_name'', ''translation_domain'' => ''comment'') )->add( ''email'', ''email'', array(''label'' => ''Comment.email'', ''translation_domain'' => ''comment'') )->add( ''content'', ''textarea'', array(''label'' => ''Comment.content'', ''translation_domain'' => ''comment'') );


Symfony 3

/** * Configures the options for this type. * * @param OptionsResolver $resolver The resolver for the options. */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( ''translation_domain'' => ''forms'', // Add more defaults if needed )); }


El nombre del método en la respuesta de ahora está en desuso (desde Symfony 2.7), la forma 2.7+ de hacerlo es:

/** * Configures the options for this type. * * @param OptionsResolver $resolver The resolver for the options. */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefault(''translation_domain'', ''messages''); }

de la misma manera que configura la configuración de su data_class , etc.

Para hacer esto usando solo el generador de formularios, hay un argumento de options en el generador de formularios. Desde el controlador, por ejemplo:

$form = $this->createFormBuilder($entity, [''translation_domain'' => ''messages''])->add(..)->getForm();

Si está utilizando el servicio FormFactory , esto sería

$formFactory->createBuilder(''form'', $entity, [''translation_domain'' => ''messages'']);


Luego, debe configurarlo como una opción predeterminada de su formulario, agregue esto:

public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( ''translation_domain'' => ''comment'' )); }

a su método setDefaultOptions , en su formulario.


O en caso de que utilices el FactoryBuilder nombrado de la Fábrica que sería:

$formBuilder = $this->get(''form.factory'')->createNamedBuilder(''myForm'', ''form'', $data, array( ''translation_domain'' => ''forms'', ));