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