Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to translate labels in symfony2 forms with messages.en.yml?

I am trying to get translation of form fields to work. I have messages.en.yml in my Bundle's Ressource folder.

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

I want to build a form in an EntityType which translates the labels of the form fields accordingly.

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

Yet only the literal string 'form.description' gets shown, not the expected translation of Add a description.

The translation service and the messages.en.yml are loaded correctly as I can call

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

in a controller and get the translated result.

What am I missing when I want to treat the string 'form.description' as something that should be translated?

I suppose I have to call the trans function on them anyhow, yet how can I make it in one go automatically?

like image 662
k0pernikus Avatar asked Jan 20 '14 14:01

k0pernikus


2 Answers

i had to explicitly set the translation domain

e.g

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

in case of

fooo.de.xlf 
like image 88
john Smith Avatar answered Sep 20 '22 21:09

john Smith


In symfony 3.1 You don't need to pass translator to form type constructor. It will be translated automatically by form field name like this:

Controller action:

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

FormType class:

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

And your translations file (yml):

username: Your translation for username field 

Hope it will help someone:)

like image 43
Michał Zwierzyński Avatar answered Sep 20 '22 21:09

Michał Zwierzyński