Как перевести метки в symfony2 с помощью messages.en.yml?

Я пытаюсь получить перевод полей формы для работы. У меня есть message.en.yml в папке Ressource в Bundle.

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

Я хочу создать форму в EntityType которая соответственно преобразует метки полей формы.

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

'form.description' только буквальная строка 'form.description' , а не ожидаемый перевод « Add a description.

Служба перевода и messages.en.yml загружаются правильно, как я могу позвонить

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

в контроллере и получить переведенный результат.

Что мне не хватает, когда я хочу рассматривать строку 'form.description' как что-то, что нужно перевести?

Я полагаю, что мне нужно вызвать функцию trans на них, но как я могу сделать это за один раз автоматически?

Solutions Collecting From Web of "Как перевести метки в symfony2 с помощью messages.en.yml?"

я должен был явно установить домен перевода

например

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

в случае

 fooo.de.xlf 

В symfony 3.1 Вам не нужно передавать переводчик в конструктор типа формы. Он будет автоматически переводиться по имени поля формы следующим образом:

Действие контроллера:

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

Класс FormType:

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

И ваш файл переводов (yml):

 username: Your translation for username field 

Надеюсь, это поможет кому-то 🙂

Добавить перевод в форму для лучшей идеи – потому что найти, если в twig гораздо проще

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

также вы должны помнить о файле перевода в своем комплекте, если вы расширяете пакет из другого (например, вы расширяете FosUserBundle), вы можете взять перевод из этого пакета или использовать func trans с параметрами

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

Хорошая локализация.

Скажем, вы хотите перевести на французский язык. Затем у вас есть filename.en.xlf и filename.fr.xlf .

теперь для следующего элемента формы, который вы хотите, чтобы сделать описание переводимым.

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

поэтому в filename.en.xlf

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

и для французского, поэтому в filename.fr.xlf, как показано ниже

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

надеюсь, это поможет кому-то