所以我正在使用symfony 2.8创建一个多语言网站,但我在翻译表单时遇到了这个问题,我设法使用translation_domain选项更改标签,如下例所示:
->add('save','submit',
array('label'=>'btn.send',
'translation_domain' => 'FrontBundle',
'attr'=>array(
'class'=>'btn btn-blue',
)))
但我在翻译实体类型时遇到问题导致名称来自数据库,因此我添加了其他语言的字段 像这样:
name_fr,name_en,name_es,...
问题是如何在表格中使用它们,经过几小时的谷歌搜索我发现这个解决方案即使我不喜欢它。
使用documentation我将_local从请求传递给我的表单,如下所示:
的ContactController:
public function contactAction(Request $request)
{
$contact = new contact();
$contact->setSendTime(new \DateTime('now'));
$form = $this->createForm(new contactType(), $contact,array('lang'=>$request->getLocale()));
//...
}
contactType:
class TaskType extends AbstractType
{
// ...
public function configureOptions(OptionsResolver $resolver)
{
// ...
$resolver->setRequired('lang');
}
//...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$local = $options['lang'];
// ...
$builder
->add('civility', 'entity', array(
'class'=>'BackBundle\Entity\civility',
//use this
'property' => $local == 'fr'?'name_fr':'name_en',
//or this or dont use them both
//'choice_label' => 'name',
'label'=>'Civilité:',
'expanded'=>true,
))
/...
;
}
}
我想知道是否有更简洁,更好的解决方案来翻译表格中的实体
答案 0 :(得分:0)
您可以使用Symfony表单事件动态管理表单数据。看一下这个 https://symfony.com/doc/2.8/form/dynamic_form_modification.html
它似乎正是您所需要的。您可以将语言环境从Controller传递到表单(作为选项),并在Form类中添加一个事件监听器来监听事件(选择一个最适合您需求的事件),我最好的猜测是您需要PRE_SET_DATA事件 - 一个操纵数据库中的数据的人,根据传递的语言环境选项,你可以修改你需要的表单字段。
答案 1 :(得分:0)
所以我读了Translatable from the DoctrineExtensions,@ dbrumann给了我,并且我在管理方面与Sonata Translation Bundle并排使用,它运行得很好。 如果任何人有任何关于配置的问题发表评论