form component php forms symfony translation formbuilder

php - component - ¿Cómo traducir etiquetas en formularios symfony2 con messages.en.yml?



symfony using form (4)

Agregar la traducción en el formulario es la mejor idea, porque se encuentra en una rama mucho más fácil

{% trans_default_domain ''YourNameBundle'' %} {{''shot.tag.for.transle''|trans }}

también debe recordar acerca del archivo de traducción en su paquete, si amplía el paquete desde otro (ejemplo: amplía FosUserBundle) puede tomar la traducción de este paquete o usar func trans con params

{{''shot.tag.for.transle''|trans({}, ''TranslationNameBundle'') }}

Ten una buena localización

Estoy tratando de hacer que la traducción de los campos del formulario funcione. Tengo messages.en.yml en mi carpeta Bundle''s Ressource.

test: it works form: description: Add a description.

Quiero crear un formulario en EntityType que traduzca las etiquetas de los campos del formulario en consecuencia.

$builder->add( ''description'', null, array(''label'' => ''form.description'', ''required'' => false) );

Sin embargo, solo se muestra la cadena literal ''form.description'' , no la traducción esperada de Add a description.

El servicio de traducción y el messages.en.yml se cargan correctamente, ya que puedo llamar

var_dump($this->get(''translator'')->trans(''test''));

en un controlador y obtener el resultado traducido.

¿Qué me estoy perdiendo cuando quiero tratar la cadena ''form.description'' como algo que debería traducirse?

Supongo que tengo que llamar a la función trans sobre ellos de todos modos, pero ¿cómo puedo hacerlo de una vez automáticamente?


Digamos que quieres traducir al francés. Luego tiene filename.en.xlf y filename.fr.xlf .

ahora, para el siguiente elemento de formulario, desea que la descripción se pueda traducir.

$builder->add( ''description'', null, array(''label'' => ''form.description'', ''required'' => false) );

entonces en el nombre de archivo.en.xlf

<trans-unit id="17"> <source>description</source> <target>description</target> </trans-unit>

y para el francés, por lo que en el nombre de archivo.fr.xlf como a continuación

<trans-unit id="17"> <source>description</source> <target>fr descrip</target> </trans-unit>

Espero que esto ayude a alguien


En Symfony 3.1 No necesita pasar el traductor para formar el constructor de tipo. Se traducirá automáticamente por nombre de campo de formulario de esta manera:

Acción del controlador:

$form = $this->createForm(LoginType::class);

Clase FormType:

public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add(''username'', TextType::class, [''label_format'' => ''%name%'',] ); }

Y su archivo de traducciones (yml):

username: Your translation for username field

Espero que ayude a alguien :)


tuve que establecer explícitamente el dominio de traducción

p.ej

->add(''description'',''hidden'', array( "label"=>"form.description", "required"=>true, ''translation_domain'' => ''fooo'' ) );

en caso de

fooo.de.xlf