annotate vendor/symfony/translation/DataCollectorTranslator.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\Translation;
Chris@0 13
Chris@18 14 use Symfony\Component\HttpKernel\CacheWarmer\WarmableInterface;
Chris@0 15 use Symfony\Component\Translation\Exception\InvalidArgumentException;
Chris@0 16
Chris@0 17 /**
Chris@0 18 * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
Chris@0 19 */
Chris@18 20 class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInterface, WarmableInterface
Chris@0 21 {
Chris@0 22 const MESSAGE_DEFINED = 0;
Chris@0 23 const MESSAGE_MISSING = 1;
Chris@0 24 const MESSAGE_EQUALS_FALLBACK = 2;
Chris@0 25
Chris@0 26 /**
Chris@0 27 * @var TranslatorInterface|TranslatorBagInterface
Chris@0 28 */
Chris@0 29 private $translator;
Chris@0 30
Chris@17 31 private $messages = [];
Chris@0 32
Chris@0 33 /**
Chris@0 34 * @param TranslatorInterface $translator The translator must implement TranslatorBagInterface
Chris@0 35 */
Chris@0 36 public function __construct(TranslatorInterface $translator)
Chris@0 37 {
Chris@0 38 if (!$translator instanceof TranslatorBagInterface) {
Chris@17 39 throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface and TranslatorBagInterface.', \get_class($translator)));
Chris@0 40 }
Chris@0 41
Chris@0 42 $this->translator = $translator;
Chris@0 43 }
Chris@0 44
Chris@0 45 /**
Chris@0 46 * {@inheritdoc}
Chris@0 47 */
Chris@17 48 public function trans($id, array $parameters = [], $domain = null, $locale = null)
Chris@0 49 {
Chris@0 50 $trans = $this->translator->trans($id, $parameters, $domain, $locale);
Chris@0 51 $this->collectMessage($locale, $domain, $id, $trans, $parameters);
Chris@0 52
Chris@0 53 return $trans;
Chris@0 54 }
Chris@0 55
Chris@0 56 /**
Chris@0 57 * {@inheritdoc}
Chris@0 58 */
Chris@17 59 public function transChoice($id, $number, array $parameters = [], $domain = null, $locale = null)
Chris@0 60 {
Chris@0 61 $trans = $this->translator->transChoice($id, $number, $parameters, $domain, $locale);
Chris@0 62 $this->collectMessage($locale, $domain, $id, $trans, $parameters, $number);
Chris@0 63
Chris@0 64 return $trans;
Chris@0 65 }
Chris@0 66
Chris@0 67 /**
Chris@0 68 * {@inheritdoc}
Chris@0 69 */
Chris@0 70 public function setLocale($locale)
Chris@0 71 {
Chris@0 72 $this->translator->setLocale($locale);
Chris@0 73 }
Chris@0 74
Chris@0 75 /**
Chris@0 76 * {@inheritdoc}
Chris@0 77 */
Chris@0 78 public function getLocale()
Chris@0 79 {
Chris@0 80 return $this->translator->getLocale();
Chris@0 81 }
Chris@0 82
Chris@0 83 /**
Chris@0 84 * {@inheritdoc}
Chris@0 85 */
Chris@0 86 public function getCatalogue($locale = null)
Chris@0 87 {
Chris@0 88 return $this->translator->getCatalogue($locale);
Chris@0 89 }
Chris@0 90
Chris@0 91 /**
Chris@18 92 * {@inheritdoc}
Chris@18 93 */
Chris@18 94 public function warmUp($cacheDir)
Chris@18 95 {
Chris@18 96 if ($this->translator instanceof WarmableInterface) {
Chris@18 97 $this->translator->warmUp($cacheDir);
Chris@18 98 }
Chris@18 99 }
Chris@18 100
Chris@18 101 /**
Chris@0 102 * Gets the fallback locales.
Chris@0 103 *
Chris@17 104 * @return array The fallback locales
Chris@0 105 */
Chris@0 106 public function getFallbackLocales()
Chris@0 107 {
Chris@12 108 if ($this->translator instanceof Translator || method_exists($this->translator, 'getFallbackLocales')) {
Chris@0 109 return $this->translator->getFallbackLocales();
Chris@0 110 }
Chris@0 111
Chris@17 112 return [];
Chris@0 113 }
Chris@0 114
Chris@0 115 /**
Chris@0 116 * Passes through all unknown calls onto the translator object.
Chris@0 117 */
Chris@0 118 public function __call($method, $args)
Chris@0 119 {
Chris@17 120 return \call_user_func_array([$this->translator, $method], $args);
Chris@0 121 }
Chris@0 122
Chris@0 123 /**
Chris@0 124 * @return array
Chris@0 125 */
Chris@0 126 public function getCollectedMessages()
Chris@0 127 {
Chris@0 128 return $this->messages;
Chris@0 129 }
Chris@0 130
Chris@0 131 /**
Chris@0 132 * @param string|null $locale
Chris@0 133 * @param string|null $domain
Chris@0 134 * @param string $id
Chris@0 135 * @param string $translation
Chris@0 136 * @param array|null $parameters
Chris@0 137 * @param int|null $number
Chris@0 138 */
Chris@17 139 private function collectMessage($locale, $domain, $id, $translation, $parameters = [], $number = null)
Chris@0 140 {
Chris@0 141 if (null === $domain) {
Chris@0 142 $domain = 'messages';
Chris@0 143 }
Chris@0 144
Chris@0 145 $id = (string) $id;
Chris@0 146 $catalogue = $this->translator->getCatalogue($locale);
Chris@0 147 $locale = $catalogue->getLocale();
Chris@0 148 if ($catalogue->defines($id, $domain)) {
Chris@0 149 $state = self::MESSAGE_DEFINED;
Chris@0 150 } elseif ($catalogue->has($id, $domain)) {
Chris@0 151 $state = self::MESSAGE_EQUALS_FALLBACK;
Chris@0 152
Chris@0 153 $fallbackCatalogue = $catalogue->getFallbackCatalogue();
Chris@0 154 while ($fallbackCatalogue) {
Chris@0 155 if ($fallbackCatalogue->defines($id, $domain)) {
Chris@0 156 $locale = $fallbackCatalogue->getLocale();
Chris@0 157 break;
Chris@0 158 }
Chris@0 159
Chris@0 160 $fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue();
Chris@0 161 }
Chris@0 162 } else {
Chris@0 163 $state = self::MESSAGE_MISSING;
Chris@0 164 }
Chris@0 165
Chris@17 166 $this->messages[] = [
Chris@0 167 'locale' => $locale,
Chris@0 168 'domain' => $domain,
Chris@0 169 'id' => $id,
Chris@0 170 'translation' => $translation,
Chris@0 171 'parameters' => $parameters,
Chris@0 172 'transChoiceNumber' => $number,
Chris@0 173 'state' => $state,
Chris@17 174 ];
Chris@0 175 }
Chris@0 176 }