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

Ale*_* B. 21 localization symfony

我想翻译一个用symfony的formbuilder创建的表单.由于我不想要一个大的翻译文件,它被分成了 "域".

现在我必须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')
);
Run Code Online (Sandbox Code Playgroud)

Ahm*_*ani 53

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

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

}
Run Code Online (Sandbox Code Playgroud)

以您的setDefaultOptions方式,以您的形式.

  • 现在它已被弃用.请改用configureOptions方法 (4认同)

小智 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');
}
Run Code Online (Sandbox Code Playgroud)

以同样的方式设置您的data_class设置等.

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

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

如果您正在使用该FormFactory服务,那就是

$formFactory->createBuilder('form', $entity, ['translation_domain' => 'messages']);
Run Code Online (Sandbox Code Playgroud)