Symfony2:KnpDoctrineBehaviours基于当前语言环境的默认语言环境

时间:2016-06-30 13:54:24

标签: symfony

我的项目有2个语言环境(de,en)。 并非每个实体都以两种语言翻译。 因此,如果我当前的区域设置是" de"如果没有翻译成德语,则应显示这些实体的英文版本。 如果当前区域设置是" en"那么反过来。并且有些实体未翻译成英文,应显示这些实体的德文版本。

我怎么能实现这个目标?

我使用KnpDoctrineBehaviours进行翻译。 doTranslate()方法首先根据给定的语言环境查找翻译。 如果未找到翻译,则会查找具有默认语言环境的翻译。

protected function doTranslate($locale = null, $fallbackToDefault = true)
{
    if (null === $locale) {
        $locale = $this->getCurrentLocale();
    }

    $translation = $this->findTranslationByLocale($locale);
    if ($translation and !$translation->isEmpty()) {
        return $translation;
    }

    if ($fallbackToDefault && $defaultTranslation = $this->findTranslationByLocale($this->getDefaultLocale(), false)) {
        return $defaultTranslation;
    }

    $class       = self::getTranslationEntityClass();
    $translation = new $class();
    $translation->setLocale($locale);

    $this->getNewTranslations()->set((string)$translation->getLocale(), $translation);
    $translation->setTranslatable($this);

    return $translation;
}

现在我刚刚按照documentation中的描述覆盖了TranslatableTrait。

有没有比覆盖TranslatableTrait的完整doTranslate方法更好的方法?

0 个答案:

没有答案