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

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个回答

59

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

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

}

将此代码添加到表单中setDefaultOptions方法中。

更新:此方法已被弃用,请改用configureOptions方法(感谢@Sudhakar Krishnan)


谢谢。完全忘记了,因为以前从未需要过它。 - Alex B.
1
没有使用类创建的表单怎么办? - drskullster
5
现在这个已经不推荐使用了,应该使用configureOptions方法代替。 - Sudhakar Krishnan

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

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
    ));
}

2

如果你使用的是工厂的namedBuilder,则会是这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接