/**
  * Add translation
  *
  * @param Translation $translation Translation
  *
  * @return $this Self object
  */
 public function addTranslation(Translation $translation)
 {
     $translation->setRepository($this);
     $this->translationCollection->addTranslation($translation);
 }
 /**
  * Add translation
  *
  * @param Translation $translation Translation
  *
  * @return $this Self object
  *
  * @throws Exception Inserting a master translation is not allowed
  */
 public function addTranslation(Translation $translation)
 {
     if ($translation->getLanguage() === $this->masterLanguage) {
         throw new Exception('You cannot insert a new translation for master language');
     }
     $originalRepository = $translation->getMasterTranslation()->getRepository();
     $newRepositoryDirname = $originalRepository->getDirname();
     $newRepositoryDomain = $originalRepository->getDomain();
     $newRepositoryLanguage = $translation->getLanguage();
     /**
      * We check if this repository exists. If not, we create it.
      * Otherwise, we use existing one.
      */
     $expectedRepositories = array_filter($this->repositoryCollection->getRepositories(), function (Repository $repository) use($newRepositoryLanguage, $newRepositoryDomain, $newRepositoryDirname) {
         return $repository->getDomain() === $newRepositoryDomain && $repository->getLanguage() === $newRepositoryLanguage && $repository->getDirname() === $newRepositoryDirname;
     });
     $expectedRepository = reset($expectedRepositories);
     if (!$expectedRepository instanceof Repository) {
         $newRepositoryPath = Repository::buildRepositoryPath($newRepositoryDirname, $newRepositoryDomain, $newRepositoryLanguage);
         $expectedRepository = Repository::createEmptyByFilePath($newRepositoryPath);
         $this->repositoryCollection->addRepository($expectedRepository);
     }
     $expectedRepository->addTranslation($translation);
     return $this;
 }