我已使用此article
设置了个人翻译表我有一张桌子' AttrSchool'其中有一列名为' description'被翻译成三种语言en,ja,th。
和翻译文本存储在AttrSchoolTranslation
中现在我制作了表格来编辑和更新“AttrSchool”#39;数据
public function editAttrSchoolAction(Request $request,$schoolId){
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository('UserBundle:AttrSchool');
$attrSchool = $repository->findOneBy(array('id' => $schoolId));
foreach ($attrSchool->getTranslations() as $trans){
if($trans->getLocale() == 'ja'){
$desc_ja = $trans->getContent();
}
if($trans->getLocale() == 'th'){
$desc_th = $trans->getContent();
}
}
$form = $this->createFormBuilder($attrSchool)
->add('description','textarea',array('required'=> false,'attr' => array('rows' => '8','cols' => '60')))
->add('description_th','textarea',array('required'=> false,'data'=> $desc_th,'mapped' => false,'attr' => array('rows' => '8','cols' => '60')))
->add('description_ja','textarea',array('required'=> false,'data'=> $desc_ja,'mapped' => false,'attr' => array('rows' => '8','cols' => '60')))
$form->handleRequest($request);
if ($form->isValid()) {
$attrSchool->setDescription($form->get('description_en')->getData());
$attrSchool->addTranslation(new \Acme\UserBundle\Entity\AttrSchoolTranslation('ja','description',$form->get('description_ja')->getData()));
$attrSchool->addTranslation(new \Acme\UserBundle\Entity\AttrSchoolTranslation('th','description',$form->get('description_th')->getData()));
然而它看起来很笨拙。 它会插入新的AttrSchoolTranslation列,而不是更新。 (那当然是因为我打过电话 new \ Acme \ UserBundle \ Entity \ AttrSchoolTranslation .....)
但我不知道如何更新转换表中的数据。
有人知道提示吗?
答案 0 :(得分:0)
坚持多种翻译
通常,更加方便的是坚持更多翻译 创建或更新记录。可翻译允许通过 翻译库。将跟踪所有其他翻译 监听器,当执行刷新时,它将更新或 坚持所有其他翻译。
注意:这些翻译不会作为普通字段处理 你的对象,如果你翻译一个slug额外的翻译 不会知道如何生成slug,所以将值作为附加值 创建时应处理翻译。
多种翻译的示例:
<?php
// persisting multiple translations, assume default locale is EN
$repository = $em->getRepository('Gedmo\\Translatable\\Entity\\Translation');
// it works for ODM also
$article = new Article;
$article->setTitle('My article en');
$article->setContent('content en');
$repository->translate($article, 'title', 'de', 'my article de')
->translate($article, 'content', 'de', 'content de')
->translate($article, 'title', 'ru', 'my article ru')
->translate($article, 'content', 'ru', 'content ru')
;
$em->persist($article);
$em->flush();
// updating same article also having one new translation
$repo
->translate($article, 'title', 'lt', 'title lt')
->translate($article, 'content', 'lt', 'content lt')
->translate($article, 'title', 'ru', 'title ru change')
->translate($article, 'content', 'ru', 'content ru change')
->translate($article, 'title', 'en', 'title en (default locale) update')
->translate($article, 'content', 'en', 'content en (default locale) update')
;
$em->flush();
您是否曾尝试调用此translate
的{{1}}方法?
$repository