Translate select options in Symfony2 class forms

前端 未结 4 1591
孤城傲影
孤城傲影 2020-12-08 10:00

I\'m using a class form in Symfony2 Beta3 as follows:

namespace Partners\\FrontendBundle\\Form;

use Symfony\\Component\\Form\\AbstractType;
use Symfony\\Com         


        
相关标签:
4条回答
  • 2020-12-08 10:37

    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.

    0 讨论(0)
  • 2020-12-08 10:48

    CptSadface's answer was what helped me with translating my entity choices.

    $builder
        ->add(
            'authorizationRoles',
            null,
            [
                'label' => 'app.user.fields.authorization_roles',
                'multiple' => true,
                'choice_label' => 'name', // entity field storing your translation key
                'choice_translation_domain' => 'messages',
            ]
        );
    
    0 讨论(0)
  • 2020-12-08 10:52

    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.

    0 讨论(0)
  • 2020-12-08 10:58

    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.)

    0 讨论(0)
提交回复
热议问题