Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
TwigExtractor.php
001 <?php
002
003 /*
004 * This file is part of the Symfony package.
005 *
006 * (c) Fabien Potencier <fabien@symfony.com>
007 *
008 * For the full copyright and license information, please view the LICENSE
009 * file that was distributed with this source code.
010 */
011
012 namespace Symfony\Bridge\Twig\Translation;
013
014 use Symfony\Component\Finder\Finder;
015 use Symfony\Component\Finder\SplFileInfo;
016 use Symfony\Component\Translation\Extractor\AbstractFileExtractor;
017 use Symfony\Component\Translation\Extractor\ExtractorInterface;
018 use Symfony\Component\Translation\MessageCatalogue;
019
020 /**
021 * TwigExtractor extracts translation messages from a twig template.
022 *
023 * @author Michel Salib <michelsalib@hotmail.com>
024 * @author Fabien Potencier <fabien@symfony.com>
025 */
026 class TwigExtractor extends AbstractFileExtractor implements ExtractorInterface
027 {
028 /**
029 * Default domain for found messages.
030 *
031 * @var string
032 */
033 private $defaultDomain = 'messages';
034
035 /**
036 * Prefix for found message.
037 *
038 * @var string
039 */
040 private $prefix = '';
041
042 /**
043 * The twig environment.
044 *
045 * @var \Twig_Environment
046 */
047 private $twig;
048
049 public function __construct(\Twig_Environment $twig)
050 {
051 $this->twig = $twig;
052 }
053
054 /**
055 * {@inheritdoc}
056 */
057 public function extract($resource, MessageCatalogue $catalogue)
058 {
059 $files = $this->extractFiles($resource);
060 foreach ($files as $file) {
061 try {
062 $this->extractTemplate(file_get_contents($file->getPathname()), $catalogue);
063 } catch (\Twig_Error $e) {
064 if ($file instanceof SplFileInfo) {
065 $e->setTemplateFile($file->getRelativePathname());
066 } elseif ($file instanceof \SplFileInfo) {
067 $e->setTemplateFile($file->getRealPath());
068 }
069
070 throw $e;
071 }
072 }
073 }
074
075 /**
076 * {@inheritdoc}
077 */
078 public function setPrefix($prefix)
079 {
080 $this->prefix = $prefix;
081 }
082
083 protected function extractTemplate($template, MessageCatalogue $catalogue)
084 {
085 $visitor = $this->twig->getExtension('translator')->getTranslationNodeVisitor();
086 $visitor->enable();
087
088 $this->twig->parse($this->twig->tokenize($template));
089
090 foreach ($visitor->getMessages() as $message) {
091 $catalogue->set(trim($message[0]), $this->prefix.trim($message[0]), $message[1] ?: $this->defaultDomain);
092 }
093
094 $visitor->disable();
095 }
096
097 /**
098 * @param string $file
099 *
100 * @return bool
101 */
102 protected function canBeExtracted($file)
103 {
104 return $this->isFile($file) && 'twig' === pathinfo($file, PATHINFO_EXTENSION);
105 }
106
107 /**
108 * @param string|array $directory
109 *
110 * @return array
111 */
112 protected function extractFromDirectory($directory)
113 {
114 $finder = new Finder();
115
116 return $finder->files()->name('*.twig')->in($directory);
117 }
118 }
119