diff --git a/src/Symfony/Bridge/Twig/Node/TransNode.php b/src/Symfony/Bridge/Twig/Node/TransNode.php index 3a831829ff..0d09918c5b 100644 --- a/src/Symfony/Bridge/Twig/Node/TransNode.php +++ b/src/Symfony/Bridge/Twig/Node/TransNode.php @@ -89,15 +89,24 @@ class TransNode extends \Twig_Node return array($body, $vars); } - $current = array(); - foreach ($vars as $name => $var) { - $current[$name] = true; - } - preg_match_all('/(?setNode('%'.$var.'%', new \Twig_Node_Expression_Name($var, $body->getLine())); + + if (version_compare(\Twig_Environment::VERSION, '1.5', '>=')) { + foreach ($matches[1] as $var) { + $key = new \Twig_Node_Expression_Constant('%'.$var.'%', $body->getLine()); + if (!$vars->hasElement($key)) { + $vars->addElement(new \Twig_Node_Expression_Name($var, $body->getLine()), $key); + } + } + } else { + $current = array(); + foreach ($vars as $name => $var) { + $current[$name] = true; + } + foreach ($matches[1] as $var) { + if (!isset($current['%'.$var.'%'])) { + $vars->setNode('%'.$var.'%', new \Twig_Node_Expression_Name($var, $body->getLine())); + } } }