function it_clones_new_translation_properly(TranslationInterface $translation) { $translation->getLocale()->willReturn('en'); $translation->setTranslatable($this)->shouldBeCalled(); $translation->acmeProperty = 'acmeProp'; $this->addTranslation($translation); $this->setCurrentLocale('en'); $translation = $this->translate(); $translation->shouldImplement('Sylius\\Component\\Translation\\Model\\TranslationInterface'); $translation->acmeProperty->shouldBe('acmeProp'); }
/** * {@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(); $translation = new $className(); $translation->setLocale($locale); $this->addTranslation($translation); } else { $translation = clone $fallbackTranslation; } } $this->currentTranslation = $translation; return $translation; }