我在Symfony2 Beta3中使用类表格如下:
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')));
...
我想翻译“是”和“否”选项,但我不知道如何在这里使用翻译器。
答案 0 :(得分:86)
您可以照常使用翻译资源。这对我有用:
$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'
));
然后将您的翻译添加到Bundle的Resources-> translations目录。
从@CptSadface更新:
在 symfony 2.7 中,使用choice_label参数,您可以像这样指定翻译域:
'choice_label' => 'typeName',
'choice_translation_domain' => 'messages',
如果不指定域,则不会翻译选项。
答案 1 :(得分:4)
我搜索了一会儿找到答案,但最后我发现了Symfony如何翻译表单内容。在您的情况下最简单的方法似乎是通过向您的应用程序添加YAML或XLIFF翻译文件(例如app / Resources / translations / messages.de.yml)或您的包来添加“是”和“否”的翻译。这在这里描述: http://symfony.com/doc/current/book/translation.html
问题 - 在我看来 - 是你似乎无法使用自定义翻译键。来自FOSUserBundle的人用“表格主题”(http://symfony.com/doc/2.0/cookbook/form/form_customization.html)解决了这个(或类似的)问题。以下是两个重要的代码行,用于实现表单元素id作为翻译键的使用:
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
通过添加表单主题,您几乎可以修改模板中表单的所有内容 - 这似乎是正确的方法。
(对不起,我不得不分开两个链接b / c我没有足够的声誉来发布两个以上的链接。很遗憾。)
答案 2 :(得分:3)
在symfony 2.7中,使用 choice_label 参数,您可以像这样指定翻译域:
'choice_label' => 'typeName',
'choice_translation_domain' => 'messages',
如果不指定域,则不会翻译选项。
答案 3 :(得分:0)
CptSadface的回答是帮助我翻译实体选择的原因。
$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',
]
);