annotate vendor/symfony/translation/DataCollectorTranslator.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
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@0 14 use Symfony\Component\Translation\Exception\InvalidArgumentException;
Chris@0 15
Chris@0 16 /**
Chris@0 17 * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
Chris@0 18 */
Chris@0 19 class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInterface
Chris@0 20 {
Chris@0 21 const MESSAGE_DEFINED = 0;
Chris@0 22 const MESSAGE_MISSING = 1;
Chris@0 23 const MESSAGE_EQUALS_FALLBACK = 2;
Chris@0 24
Chris@0 25 /**
Chris@0 26 * @var TranslatorInterface|TranslatorBagInterface
Chris@0 27 */
Chris@0 28 private $translator;
Chris@0 29
Chris@0 30 private $messages = array();
Chris@0 31
Chris@0 32 /**
Chris@0 33 * @param TranslatorInterface $translator The translator must implement TranslatorBagInterface
Chris@0 34 */
Chris@0 35 public function __construct(TranslatorInterface $translator)
Chris@0 36 {
Chris@0 37 if (!$translator instanceof TranslatorBagInterface) {
Chris@0 38 throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface and TranslatorBagInterface.', get_class($translator)));
Chris@0 39 }
Chris@0 40
Chris@0 41 $this->translator = $translator;
Chris@0 42 }
Chris@0 43
Chris@0 44 /**
Chris@0 45 * {@inheritdoc}
Chris@0 46 */
Chris@0 47 public function trans($id, array $parameters = array(), $domain = null, $locale = null)
Chris@0 48 {
Chris@0 49 $trans = $this->translator->trans($id, $parameters, $domain, $locale);
Chris@0 50 $this->collectMessage($locale, $domain, $id, $trans, $parameters);
Chris@0 51
Chris@0 52 return $trans;
Chris@0 53 }
Chris@0 54
Chris@0 55 /**
Chris@0 56 * {@inheritdoc}
Chris@0 57 */
Chris@0 58 public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
Chris@0 59 {
Chris@0 60 $trans = $this->translator->transChoice($id, $number, $parameters, $domain, $locale);
Chris@0 61 $this->collectMessage($locale, $domain, $id, $trans, $parameters, $number);
Chris@0 62
Chris@0 63 return $trans;
Chris@0 64 }
Chris@0 65
Chris@0 66 /**
Chris@0 67 * {@inheritdoc}
Chris@0 68 */
Chris@0 69 public function setLocale($locale)
Chris@0 70 {
Chris@0 71 $this->translator->setLocale($locale);
Chris@0 72 }
Chris@0 73
Chris@0 74 /**
Chris@0 75 * {@inheritdoc}
Chris@0 76 */
Chris@0 77 public function getLocale()
Chris@0 78 {
Chris@0 79 return $this->translator->getLocale();
Chris@0 80 }
Chris@0 81
Chris@0 82 /**
Chris@0 83 * {@inheritdoc}
Chris@0 84 */
Chris@0 85 public function getCatalogue($locale = null)
Chris@0 86 {
Chris@0 87 return $this->translator->getCatalogue($locale);
Chris@0 88 }
Chris@0 89
Chris@0 90 /**
Chris@0 91 * Gets the fallback locales.
Chris@0 92 *
Chris@0 93 * @return array $locales The fallback locales
Chris@0 94 */
Chris@0 95 public function getFallbackLocales()
Chris@0 96 {
Chris@0 97 if ($this->translator instanceof Translator || method_exists($this->translator, 'getFallbackLocales')) {
Chris@0 98 return $this->translator->getFallbackLocales();
Chris@0 99 }
Chris@0 100
Chris@0 101 return array();
Chris@0 102 }
Chris@0 103
Chris@0 104 /**
Chris@0 105 * Passes through all unknown calls onto the translator object.
Chris@0 106 */
Chris@0 107 public function __call($method, $args)
Chris@0 108 {
Chris@0 109 return call_user_func_array(array($this->translator, $method), $args);
Chris@0 110 }
Chris@0 111
Chris@0 112 /**
Chris@0 113 * @return array
Chris@0 114 */
Chris@0 115 public function getCollectedMessages()
Chris@0 116 {
Chris@0 117 return $this->messages;
Chris@0 118 }
Chris@0 119
Chris@0 120 /**
Chris@0 121 * @param string|null $locale
Chris@0 122 * @param string|null $domain
Chris@0 123 * @param string $id
Chris@0 124 * @param string $translation
Chris@0 125 * @param array|null $parameters
Chris@0 126 * @param int|null $number
Chris@0 127 */
Chris@0 128 private function collectMessage($locale, $domain, $id, $translation, $parameters = array(), $number = null)
Chris@0 129 {
Chris@0 130 if (null === $domain) {
Chris@0 131 $domain = 'messages';
Chris@0 132 }
Chris@0 133
Chris@0 134 $id = (string) $id;
Chris@0 135 $catalogue = $this->translator->getCatalogue($locale);
Chris@0 136 $locale = $catalogue->getLocale();
Chris@0 137 if ($catalogue->defines($id, $domain)) {
Chris@0 138 $state = self::MESSAGE_DEFINED;
Chris@0 139 } elseif ($catalogue->has($id, $domain)) {
Chris@0 140 $state = self::MESSAGE_EQUALS_FALLBACK;
Chris@0 141
Chris@0 142 $fallbackCatalogue = $catalogue->getFallbackCatalogue();
Chris@0 143 while ($fallbackCatalogue) {
Chris@0 144 if ($fallbackCatalogue->defines($id, $domain)) {
Chris@0 145 $locale = $fallbackCatalogue->getLocale();
Chris@0 146 break;
Chris@0 147 }
Chris@0 148
Chris@0 149 $fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue();
Chris@0 150 }
Chris@0 151 } else {
Chris@0 152 $state = self::MESSAGE_MISSING;
Chris@0 153 }
Chris@0 154
Chris@0 155 $this->messages[] = array(
Chris@0 156 'locale' => $locale,
Chris@0 157 'domain' => $domain,
Chris@0 158 'id' => $id,
Chris@0 159 'translation' => $translation,
Chris@0 160 'parameters' => $parameters,
Chris@0 161 'transChoiceNumber' => $number,
Chris@0 162 'state' => $state,
Chris@0 163 );
Chris@0 164 }
Chris@0 165 }