Source of file TranslationNodeVisitor.php
Size: 3,588 Bytes - Last Modified: 2013-07-17T08:22:21+02:00
/home/theseer/Downloads/Symfony/vendor/symfony/symfony/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | <?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\Bridge\Twig\NodeVisitor; use Symfony\Bridge\Twig\Node\TransNode; /** * TranslationNodeVisitor extracts translation messages. * * @author Fabien Potencier <fabien@symfony.com> */ class TranslationNodeVisitor implements \Twig_NodeVisitorInterface { const UNDEFINED_DOMAIN = '_undefined'; private $enabled = false; private $messages = array(); public function enable() { $this->enabled = true; $this->messages = array(); } public function disable() { $this->enabled = false; $this->messages = array(); } public function getMessages() { return $this->messages; } /** * {@inheritdoc} */ public function enterNode(\Twig_NodeInterface $node, \Twig_Environment $env) { if (!$this->enabled) { return $node; } if ( $node instanceof \Twig_Node_Expression_Filter && 'trans' === $node->getNode('filter')->getAttribute('value') && $node->getNode('node') instanceof \Twig_Node_Expression_Constant ) { // extract constant nodes with a trans filter $this->messages[] = array( $node->getNode('node')->getAttribute('value'), $this->getReadDomainFromArguments($node->getNode('arguments'), 1), ); } elseif ( $node instanceof \Twig_Node_Expression_Filter && 'transchoice' === $node->getNode('filter')->getAttribute('value') && $node->getNode('node') instanceof \Twig_Node_Expression_Constant ) { // extract constant nodes with a trans filter $this->messages[] = array( $node->getNode('node')->getAttribute('value'), $this->getReadDomainFromArguments($node->getNode('arguments'), 2), ); } elseif ($node instanceof TransNode) { // extract trans nodes $this->messages[] = array( $node->getNode('body')->getAttribute('data'), $this->getReadDomainFromNode($node->getNode('domain')), ); } return $node; } /** * {@inheritdoc} */ public function leaveNode(\Twig_NodeInterface $node, \Twig_Environment $env) { return $node; } /** * {@inheritdoc} */ public function getPriority() { return 0; } /** * @param \Twig_Node $arguments * @param int $index * * @return string|null */ private function getReadDomainFromArguments(\Twig_Node $arguments, $index) { if ($arguments->hasNode('domain')) { $argument = $arguments->getNode('domain'); } elseif ($arguments->hasNode($index)) { $argument = $arguments->getNode($index); } else { return null; } return $this->getReadDomainFromNode($argument); } /** * @param \Twig_Node $node * * @return string|null */ private function getReadDomainFromNode(\Twig_Node $node = null) { if (null === $node) { return null; } if ($node instanceof \Twig_Node_Expression_Constant) { return $node->getAttribute('value'); } return self::UNDEFINED_DOMAIN; } } |