Blame view

public/vendor/symfony/translation/Command/TranslationTrait.php 2.33 KB
86143e36f   Андрей Ларионов   Коммит вторник
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  <?php
  
  /*
   * This file is part of the Symfony package.
   *
   * (c) Fabien Potencier <fabien@symfony.com>
   *
   * For the full copyright and license information, please view the LICENSE
   * file that was distributed with this source code.
   */
  
  namespace Symfony\Component\Translation\Command;
  
  use Symfony\Component\Translation\MessageCatalogue;
  use Symfony\Component\Translation\MessageCatalogueInterface;
  use Symfony\Component\Translation\TranslatorBag;
  
  /**
   * @internal
   */
  trait TranslationTrait
  {
      private function readLocalTranslations(array $locales, array $domains, array $transPaths): TranslatorBag
      {
          $bag = new TranslatorBag();
  
          foreach ($locales as $locale) {
              $catalogue = new MessageCatalogue($locale);
              foreach ($transPaths as $path) {
                  $this->reader->read($path, $catalogue);
              }
  
              if ($domains) {
                  foreach ($domains as $domain) {
                      $bag->addCatalogue($this->filterCatalogue($catalogue, $domain));
                  }
              } else {
                  $bag->addCatalogue($catalogue);
              }
          }
  
          return $bag;
      }
  
      private function filterCatalogue(MessageCatalogue $catalogue, string $domain): MessageCatalogue
      {
          $filteredCatalogue = new MessageCatalogue($catalogue->getLocale());
  
          // extract intl-icu messages only
          $intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX;
          if ($intlMessages = $catalogue->all($intlDomain)) {
              $filteredCatalogue->add($intlMessages, $intlDomain);
          }
  
          // extract all messages and subtract intl-icu messages
          if ($messages = array_diff($catalogue->all($domain), $intlMessages)) {
              $filteredCatalogue->add($messages, $domain);
          }
          foreach ($catalogue->getResources() as $resource) {
              $filteredCatalogue->addResource($resource);
          }
  
          if ($metadata = $catalogue->getMetadata('', $intlDomain)) {
              foreach ($metadata as $k => $v) {
                  $filteredCatalogue->setMetadata($k, $v, $intlDomain);
              }
          }
  
          if ($metadata = $catalogue->getMetadata('', $domain)) {
              foreach ($metadata as $k => $v) {
                  $filteredCatalogue->setMetadata($k, $v, $domain);
              }
          }
  
          return $filteredCatalogue;
      }
  }