Symfony2 - 为整个表单设置翻译域

时间:2013-08-07 05:50:58

标签: symfony localization

我想翻译一个用symfony的formbuilder创建的表单。由于我不想要一个大的翻译文件,因此splitted up为“域名”。

现在我必须为每个表单字段指定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 个答案:

答案 0 :(得分:52)

然后,您可以将其设置为表单的默认选项,添加:

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

}

以您的setDefaultOptions方式填写表单。

答案 1 :(得分: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']);

答案 2 :(得分: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
    ));
}

答案 3 :(得分:2)

Or in case you use the Factory's namedBuilder that would be:

$formBuilder = $this->get('form.factory')->createNamedBuilder('myForm', 'form', $data, array(
    'translation_domain' => 'forms',
));