Skip to content

Commit

Permalink
Fix bug with fallback locales
Browse files Browse the repository at this point in the history
  • Loading branch information
Bozhidar Hristov committed Dec 23, 2016
1 parent b8886a8 commit 775e6d6
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 11 deletions.
9 changes: 9 additions & 0 deletions src/Repository/Translation.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,13 @@ public function getTranslations(LanguageEntity $language, $catalogue = "messages
$r = $query->getResult();
return $r;
}

public function getTranslationsByLocale($locale, $catalogue = "messages")
{
$query = $this->getEntityManager()->createQuery("SELECT t,token,language FROM ObjectBGTranslationBundle:Translation t JOIN t.translationToken token JOIN t.language language WHERE language.locale = :locale AND t.catalogue = :catalogue");
$query->setParameter("locale", $locale);
$query->setParameter("catalogue", $catalogue);
$r = $query->getResult();
return $r;
}
}
35 changes: 24 additions & 11 deletions src/Translator.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,35 @@ protected function loadCatalogue($locale)
$em = $this->container->get('doctrine.orm.entity_manager');
/* @var $translationRepository \ObjectBG\TranslationBundle\Repository\Translation */
$translationRepository = $em->getRepository("ObjectBGTranslationBundle:Translation");
/* @var $languageRepository \ObjectBG\TranslationBundle\Repository\Language */
$languageRepository = $em->getRepository("ObjectBGTranslationBundle:Language");

$language = $languageRepository->findOneByLocale($locale);


$domain = 'messages';

$catalogue = new MessageCatalogue($locale);
if ($language) {
$translations = $translationRepository->getTranslations($language, $domain);
foreach ($translations as $translation) {
$catalogue->set($translation->getTranslationToken()->getToken(), $translation->getTranslation(), $domain);
}

$translations = $translationRepository->getTranslationsByLocale($locale, $domain);
foreach ($translations as $translation) {
$catalogue->set($translation->getTranslationToken()->getToken(), $translation->getTranslation(), $domain);
}

$this->catalogues[$locale]->addCatalogue($catalogue);

$this->loadFallbackCatalogues($locale);
}

private function loadFallbackCatalogues($locale)
{
$current = $this->catalogues[$locale];

foreach ($this->computeFallbackLocales($locale) as $fallback) {
if (!isset($this->catalogues[$fallback])) {
$this->loadCatalogue($fallback);
}

$fallbackCatalogue = new MessageCatalogue($fallback, $this->catalogues[$fallback]->all());
foreach ($this->catalogues[$fallback]->getResources() as $resource) {
$fallbackCatalogue->addResource($resource);
}
$current->addFallbackCatalogue($fallbackCatalogue);
$current = $fallbackCatalogue;
}
}
}

0 comments on commit 775e6d6

Please sign in to comment.