/** * 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; }