我正在使用KnpLabs / Doctrine2Behaviors Translatable模块来管理Symfony2项目中的国际化。
我还使用jms / i18n-routing-bundle通过URL前缀('/ fr','/ en')设置当前语言环境。
我有Post实体:
<?php
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as ORMBehaviors;
/**
* @ORM\Entity
*/
class Post
{
use ORMBehaviors\Translatable\Translatable;
/**
* @ORM\Column(type="string", length=255)
*/
protected $someFieldIDoNotNeedToTranslate;
...
public function getName()
{
return $this->proxyCurrentLocaleTranslation('getName', array());
}
public function setName($name)
{
return $this->proxyCurrentLocaleTranslation('setName', array($name));
}
...
}
还有PostTranslation实体:
<?php
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as ORMBehaviors;
/**
* @ORM\Entity
*/
class PostTranslation
{
use ORMBehaviors\Translatable\Translation;
/**
* @ORM\Column(type="string", length=255)
*/
protected $name;
/**
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @param string
* @return null
*/
public function setName($name)
{
$this->name = $name;
}
}
现在我想要以下操作模式:
在默认语言环境中创建的效果很好。在将其提供给表单之前,我在新实体上使用了setCurrentLocale函数。
但是,当我在另一个语言环境中编辑实体时,尽管在将实体提供给版本表单之前在实体上使用了setCurrentLocale函数,但它会替换默认语言环境的数据而不是为此语言环境创建新的转换。 / p>
我还尝试以预设形式的事件为我的实体创建新的翻译,但没有成功。
如果所选语言环境中不存在实体,我如何告诉Knp可翻译模块创建一个新的实体翻译?
PS:当我在表中的两种语言环境中手动创建翻译时,模块会根据所选语言环境正确显示和编辑数据。