/** * {@inheritdoc} */ public function translate($locale = null) { $locale = $locale ?: $this->currentLocale; if (null === $locale) { throw new \RuntimeException('No locale has been set and current locale is undefined.'); } if ($this->currentTranslation && $locale === $this->currentTranslation->getLocale()) { return $this->currentTranslation; } if (!($translation = $this->translations->get($locale))) { if (null === $this->fallbackLocale) { throw new \RuntimeException('No fallback locale has been set.'); } if (!($fallbackTranslation = $this->translations->get($this->getFallbackLocale()))) { $className = $this->getTranslationClass(); /** @var TranslationInterface $translation */ $translation = new $className(); $translation->setLocale($locale); $this->addTranslation($translation); } else { $translation = clone $fallbackTranslation; } } $this->currentTranslation = $translation; return $translation; }
/** * @param TranslationInterface $translation */ public function addTranslation(TranslationInterface $translation) { if (!$this->translations->containsKey($translation->getLocale())) { $this->translations->set($translation->getLocale(), $translation); $translation->setTranslatable($this); } }