在 doctrine 配置中配置 symfony 表单标签

Configure symfony form label in doctrine config

我目前在一个项目中,我有很多实体和很多领域(有地址、电话、年龄、公司号码的客户......),我正在为一个法国客户做这件事。所以我用英文编码:

class Client
{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $firstName;
}

我有这样的配置:

AppBundle\Entity\Client:
type: entity
table: null
id:
    id:
        type: integer
        id: true
        generator:
            strategy: AUTO
fields:
    firstName:
        type: string
        length: 255
        options:
            label: Prénom

所以 options.label 似乎不起作用,我想知道在哪里可以进行这些翻译,因为它会涉及很多领域,而且因为我使用的是 Sonata admin,所以我不想必须将它们放在 ClientAdmin class:

/**
 * @param FormMapper $formMapper
 */
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('firstName')
        ->add('lastName')
        ->add('birthDate', 'birthday')
    ;
}

/**
 * @param ShowMapper $showMapper
 */
protected function configureShowFields(ShowMapper $showMapper)
{
    $showMapper
        ->add('id')
        ->add('firstName')
        ->add('lastName')
        ->add('birthDate')
    ;
}

因为我必须至少翻译两次(表单、显示...)所以我希望它能在所有应用程序中处理一次翻译。

有什么想法吗?我查看了 Gedmo 可翻译扩展,但它不符合我正在寻找的内容:我只是想翻译表格的标签,整个应用程序将使用一种独特的语言:法语。

Symfony 2.6 学说 2.2 到 2.5

你应该看看这个。它将帮助您自动化翻译过程。 http://jmsyst.com/bundles/JMSTranslationBundle 你只需要使用键而不是真正的标签(尽管在你的情况下它是可选的),就像这样:

$formMapper
        ->add('firstName',null, array('label'=>'sonata.user.firstName')

然后你只需 运行 一个命令,它会在一个漂亮的网络 GUI 中提取所有密钥,你可以从那里将它们翻译成你想要的任何语言。

试试这个:

 /**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Client',
        'label' => 'Prénom'
    ));
}

不知道的人,原来自动标签已经是翻译键了,你只需要在你的表单中指定translation_domain,所以我现在有一个messages.fr.yml :

First Name: Prénom

这就够了!无需生成/指定翻译标签。此外,它可以在具有相似字段的表单之间重复使用!这在我们奏鸣曲管理员的关注范围内有效。