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');
 }
示例#2
0
 /**
  * {@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;
 }