Author: Filip Procházka (filip@prochazka.su)
Inheritance: extends Nette\Object
 /**
  * @param Translator $translator
  * @param MessageCatalogueInterface[] $availableCatalogues
  * @param string $locale
  * @throws NotFoundResourceException
  * @return 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 = array($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];
 }
    /**
     * @param Translator $translator
     * @param MessageCatalogueInterface[] $availableCatalogues
     * @param string $locale
     * @return string
     */
    protected function compilePhpCache(Translator $translator, array &$availableCatalogues, $locale)
    {
        $fallbackContent = '';
        $current = new Code\PhpLiteral('');
        foreach ($this->fallbackResolver->compute($translator, $locale) as $fallback) {
            $fallbackSuffix = new Code\PhpLiteral(ucfirst(preg_replace('~[^a-z0-9_]~i', '_', $fallback)));
            $fallbackContent .= Code\Helpers::format(<<<EOF
\$catalogue? = new MessageCatalogue(?, ?);
\$catalogue?->addFallbackCatalogue(\$catalogue?);

EOF
, $fallbackSuffix, $fallback, $availableCatalogues[$fallback]->all(), $current, $fallbackSuffix);
            $current = $fallbackSuffix;
        }
        $content = Code\Helpers::format(<<<EOF
use Kdyby\\Translation\\MessageCatalogue;

\$catalogue = new MessageCatalogue(?, ?);

?
return \$catalogue;

EOF
, $locale, $availableCatalogues[$locale]->all(), new Code\PhpLiteral($fallbackContent));
        return '<?php' . "\n\n" . $content;
    }
 /**
  * @param Translator $translator
  * @param MessageCatalogueInterface[] $availableCatalogues
  * @param string $locale
  * @throws NotFoundResourceException
  * @return 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];
     foreach ($this->fallbackResolver->compute($translator, $locale) as $fallback) {
         if (!isset($availableCatalogues[$fallback])) {
             $this->doLoadCatalogue($availableCatalogues, $fallback);
         }
         $current->addFallbackCatalogue($availableCatalogues[$fallback]);
         $current = $availableCatalogues[$fallback];
     }
     return $availableCatalogues[$locale];
 }
Exemple #4
0
 /**
  * {@inheritdoc}
  */
 protected function computeFallbackLocales($locale)
 {
     return $this->fallbackResolver->compute($this, $locale);
 }