翻译Symfony2类表单中的选择选项

klr1opcd  于 2023-08-06  发布在  其他
关注(0)|答案(5)|浏览(95)

我使用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')));
        ...

字符串
我想翻译“是”和“否”选项,但我不知道如何使用这里的翻译器。

wpx232ag

wpx232ag1#

您可以像往常一样使用翻译资源。这对我很有效:

$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',


如果不指定域,则不会转换选项。

rqcrx0a6

rqcrx0a62#

我搜索了一段时间来寻找答案,但最终我发现了Symfony如何翻译表单内容。在你的情况下,最简单的方法似乎是通过添加YAML或XLIFF翻译文件到你的应用程序中来添加“yes”和“no”的翻译(例如:app/Resources/translations/messages.de.yml)或您的bundle。这在这里描述: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我没有足够的声誉发布两个以上的链接。伤心。)

jv2fixgn

jv2fixgn3#

在symfony 2.7中,使用 choice_label 参数,您可以像这样指定转换域:

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

字符串
如果不指定域,则不会转换选项。

iqxoj9l9

iqxoj9l94#

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',
        ]
    );

字符串

nle07wnf

nle07wnf5#

Symfony 5.2增加了可翻译的消息,简化了这一点。

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', [
            'choices' => ['yes' => 1, 'no' => 0],
            'choice_label' => function ($choice, $key) {
                return new TranslatableMessage($key);
            },
        ]);
        ...

字符串

相关问题