KNP翻译:翻译现有实体

时间:2019-02-21 08:28:18

标签: internationalization symfony-forms symfony-2.8

我正在使用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:当我在表中的两种语言环境中手动创建翻译时,模块会根据所选语言环境正确显示和编辑数据。

0 个答案:

没有答案