Translate select options in Symfony2 class forms Translate select options in Symfony2 class forms symfony symfony

Translate select options in Symfony2 class forms


You can use the translation resources as usual. This worked for me:

    $builder->add('sex', 'choice', array(         'choices'   => array(            1 => 'profile.show.sex.male',             2 => 'profile.show.sex.female',        ),        'required' => false,        'label'     => 'profile.show.sex.label',        'translation_domain' => 'AcmeUserBundle'    ));

And then add your translations to the Resources->translations directory of your Bundle.

Update from @CptSadface:

In symfony 2.7, using the choice_label argument, you can specify the translation domain like this:

'choice_label' => 'typeName','choice_translation_domain' => 'messages',

Without specifying the domain, options are not translated.


I searched a while to find an answer, but finally I found out how Symfony translates form content. The easiest way in your case seems to be to just add a translation for "yes" and "no" by adding a YAML or XLIFF translation file to your application (e.g. app/Resources/translations/messages.de.yml) or your bundle. This is described here: http://symfony.com/doc/current/book/translation.html

The problem - in my opinion - is that you don't seem to be able to use custom translation keys. The guys from FOSUserBundle solve this (or a similar) problem with "Form Themes" (http://symfony.com/doc/2.0/cookbook/form/form_customization.html). Here are two significant lines of code to achieve the usage of the form element id as translation key:

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/views/Registration/register_content.html.twig#L1 / https://github.com/FriendsOfSymfony/FOSUserBundle/blob/50ab4d8fdfd324c1e722cb982e685abdc111be0b/Resources/views/form.html.twig#L4

By adding a Form Theme you're able to modify pretty much everything of the forms in the templates - this seems to be the right way of doing this.

(Sorry, I had to split two of the links b/c I don't have enough reputation to post more than two links. Sad.)


In symfony 2.7, using the choice_label argument, you can specify the translation domain like this:

'choice_label' => 'typeName','choice_translation_domain' => 'messages',

Without specifying the domain, options are not translated.