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?
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
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:)
Add translation in form for is best idea - because found if in twig much more easy
{% trans_default_domain 'YourNameBundle' %}
{{'shot.tag.for.transle'|trans }}
also you must remember about translation file in your bundle, if you extend bundle from another (example - you extends FosUserBundle) you can take translate from this bundle or use func trans with params
{{'shot.tag.for.transle'|trans({}, 'TranslationNameBundle') }}
Have a nice localisation.
Let say you want to translate into French. Then you have filename.en.xlf and filename.fr.xlf.
now for the following form element you want to make description translatable.
$builder->add(
'description',
null,
array('label' => 'form.description', 'required' => false)
);
so in the filename.en.xlf
<trans-unit id="17">
<source>description</source>
<target>description</target>
</trans-unit>
and for French, so in the filename.fr.xlf as below
<trans-unit id="17">
<source>description</source>
<target>fr descrip</target>
</trans-unit>
hope this will help for someone
来源:https://stackoverflow.com/questions/21236605/how-to-translate-labels-in-symfony2-forms-with-messages-en-yml