我的项目有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方法更好的方法?