Kdyby\Translation\CatalogueFactory::createCatalogue PHP Method

createCatalogue() public method

public createCatalogue ( Translator $translator, array &$availableCatalogues, string $locale ) : Symfony\Component\Translation\MessageCatalogueInterface
$translator Translator
$availableCatalogues array
$locale string
return Symfony\Component\Translation\MessageCatalogueInterface
    public function createCatalogue(Translator $translator, array &$availableCatalogues, $locale)
    {
        try {
            $this->doLoadCatalogue($availableCatalogues, $locale);
        } catch (NotFoundResourceException $e) {
            if (!$this->fallbackResolver->compute($translator, $locale)) {
                throw $e;
            }
        }
        $current = $availableCatalogues[$locale];
        $chain = [$locale => TRUE];
        foreach ($this->fallbackResolver->compute($translator, $locale) as $fallback) {
            if (!isset($availableCatalogues[$fallback])) {
                $this->doLoadCatalogue($availableCatalogues, $fallback);
            }
            $newFallback = $availableCatalogues[$fallback];
            if (($newFallbackFallback = $newFallback->getFallbackCatalogue()) && isset($chain[$newFallbackFallback->getLocale()])) {
                break;
            }
            $current->addFallbackCatalogue($newFallback);
            $current = $newFallback;
            $chain[$fallback] = TRUE;
        }
        return $availableCatalogues[$locale];
    }

Usage Example

 /**
  * @param Translator $translator
  * @param MessageCatalogueInterface[] $availableCatalogues
  * @param string $locale
  * @throws InvalidArgumentException
  * @return MessageCatalogueInterface|NULL
  */
 public function compile(Translator $translator, array &$availableCatalogues, $locale)
 {
     if (empty($locale)) {
         throw new InvalidArgumentException("Invalid locale.");
     }
     if (isset($availableCatalogues[$locale])) {
         return $availableCatalogues;
     }
     $cacheKey = array($locale, $translator->getFallbackLocales());
     $storage = $this->cache->getStorage();
     if (!$storage instanceof Kdyby\Translation\Caching\PhpFileStorage) {
         if (($messages = $this->cache->load($cacheKey)) !== NULL) {
             $availableCatalogues[$locale] = new MessageCatalogue($locale, $messages);
             return $availableCatalogues;
         }
         $this->catalogueFactory->createCatalogue($translator, $availableCatalogues, $locale);
         $this->cache->save($cacheKey, $availableCatalogues[$locale]->all());
         return $availableCatalogues;
     }
     $storage->hint = $locale;
     $cached = $compiled = $this->cache->load($cacheKey);
     if ($compiled === NULL) {
         $this->catalogueFactory->createCatalogue($translator, $availableCatalogues, $locale);
         $this->cache->save($cacheKey, $compiled = $this->compilePhpCache($translator, $availableCatalogues, $locale));
         $cached = $this->cache->load($cacheKey);
     }
     $availableCatalogues[$locale] = self::load($cached['file']);
     return $availableCatalogues;
 }