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

41,688

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.

Share:
41,688

Related videos on Youtube

k0pernikus
Author by

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, 2020

Comments

  • k0pernikus
    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 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?

    • k0pernikus
      k0pernikus over 10 years
      OK, 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
      ferdynator almost 10 years
      Currently having the same issue. Any idea what caused it?
    • k0pernikus
      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 via rm -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
      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
      Dragony over 9 years
      An easy trap to fall into is also not activating it in the config: symfony.com/doc/current/book/translation.html#configuration
  • RichieHH
    RichieHH about 7 years
    You 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
    Jakob Alexander Eichler over 6 years
    for 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
    Jakob Alexander Eichler over 6 years
    Is a specific way to print the form required to do this?