/** * @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]; }
/** * {@inheritdoc} */ protected function computeFallbackLocales($locale) { return $this->fallbackResolver->compute($this, $locale); }