How to translate labels in symfony2 forms with messages.en.yml?
Solution 1
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
Solution 2
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:)
Solution 3
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.
Related videos on Youtube
k0pernikus
I am Philipp Kretzschmar, a backend developer from Hamburg working at Demvsystem. You can find me on github. Or twitter. My main weapons of choice are: php TypeScript (I don't want to write plain JavaScript anymore) and nodejs I play around with: Java python rust I used to write some scala, but for now I don't want to go there anymore. I feel most comfortable on a unix-like system featuring a powerful bash. (This excludes MacOS.) I love to code within JetBrains's flavored IDEs, e.g. IntelliJ, PhpStorm, WebStorm and using the IdeaVim plugin and having a docker-compose stack to develop on.
Updated on January 01, 2020Comments
-
k0pernikus over 4 years
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 ofAdd a description.
The translation service and the
messages.en.yml
are loaded correctly as I can callvar_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?
-
k0pernikus over 10 yearsOK, weird. Now it just works. I don't as of yet know what changed but I will look into it. I suspect some weird cache issue that persisted even after cache:clear
-
ferdynator almost 10 yearsCurrently having the same issue. Any idea what caused it?
-
k0pernikus almost 10 years@ferdynator For me, I suspect it was a caching error. If
clear:cache
does not work, try purging the dev cache manually viarm -rf app/cache/dev/*
. Also, check if you have a typo in the yml-name. It also could be an lower-vs-uppercase issue. -
k0pernikus almost 10 years@ferdynator Was the upvote from you and did it resolve the issue you were facing? If so, I add it as an answer.
-
Dragony over 9 yearsAn easy trap to fall into is also not activating it in the config: symfony.com/doc/current/book/translation.html#configuration
-
-
RichieHH about 7 yearsYou dont show how to actually translate the form label. You show a label being used and the translation files being set but the add does not translate by default and especially not if your message codes are in special domain files.
-
Jakob Alexander Eichler over 6 yearsfor me unfortunately this approach did not work, but the translation was loaded. I checked this with the trans function of the translation helper The issue might be the way I use the form in the twig template. {{- form_label(child) -}}
-
Jakob Alexander Eichler over 6 yearsIs a specific way to print the form required to do this?