21

我想翻译一个用 symfony 的表单生成器创建的表单。因为我不想要一个大的翻译文件,所以它被分成“域”。

现在我必须translation_domain为每个表单域指定,否则 symfony 会在错误的文件中查找。这个选项必须添加到每个字段中,我想知道是否有办法将此选项设置为整个表单?

我不满意的示例代码:

$builder->add(
    'author_name',
    'text',
    array('label' => 'Comment.author_name', 'translation_domain' => 'comment')
)->add(
    'email',
    'email',
    array('label' => 'Comment.email', 'translation_domain' => 'comment')
)->add(
    'content',
    'textarea',
    array('label' => 'Comment.content', 'translation_domain' => 'comment')
);
4

4 回答 4

56

然后,您必须将其设置为表单的默认选项,添加以下内容:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{    
    $resolver->setDefaults(array(
        'translation_domain' => 'comment'
    ));

}

以你的setDefaultOptions方式,以你的形式。

更新:它已被弃用。改用 configureOptions 方法(感谢@Sudhakar Krishnan)

于 2013-08-07T06:39:39.170 回答
26

Ahmed的答案中的方法名称现在已被弃用(自 Symfony 2.7 起),2.7+ 的方法是:

/**
 * Configures the options for this type.
 *
 * @param OptionsResolver $resolver The resolver for the options.
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefault('translation_domain', 'messages');
}

以与您设置data_class设置等相同的方式。

要仅使用表单构建器来执行此操作,表单构建器上有一个options参数。从控制器,例如:

$form = $this->createFormBuilder($entity, ['translation_domain' => 'messages'])->add(..)->getForm();

如果您正在使用该FormFactory服务,这将是

$formFactory->createBuilder('form', $entity, ['translation_domain' => 'messages']);
于 2015-06-25T06:53:51.863 回答
3

Symfony 3

/**
 * Configures the options for this type.
 *
 * @param OptionsResolver $resolver The resolver for the options.
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'translation_domain' => 'forms',
        // Add more defaults if needed
    ));
}
于 2017-11-21T03:49:58.080 回答
2

或者,如果您使用工厂的 namedBuilder ,那就是:

$formBuilder = $this->get('form.factory')->createNamedBuilder('myForm', 'form', $data, array(
    'translation_domain' => 'forms',
));
于 2015-06-26T09:43:39.690 回答