可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm using a class form in Symfony2 Beta3 as follows:
namespace Partners\FrontendBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; class ConfigForm extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('no_containers', 'choice', array('choices' => array(1 => 'yes', 0 => 'no'))); ...
I want to translate the 'yes' and 'no' options, but I don't know how to use the translator here.
回答1:
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.
回答2:
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.)
回答3:
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.
回答4:
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', ] );