Forráskód Böngészése

[Twig] added a way to use % in a trans string (closes #981)

Fabien Potencier 14 éve
szülő
commit
dcd490e03f

+ 2 - 2
src/Symfony/Bridge/Twig/Node/TransNode.php

@@ -104,13 +104,13 @@ class TransNode extends \Twig_Node
             $current[$name] = true;
         }
 
-        preg_match_all('/\%([^\%]+)\%/', $msg, $matches);
+        preg_match_all('/(?<!%)%([^%]+)%/', $msg, $matches);
         foreach ($matches[1] as $var) {
             if (!isset($current['%'.$var.'%'])) {
                 $vars->setNode('%'.$var.'%', new \Twig_Node_Expression_Name($var, $body->getLine()));
             }
         }
 
-        return array(new \Twig_Node_Expression_Constant(trim($msg), $body->getLine()), $vars);
+        return array(new \Twig_Node_Expression_Constant(str_replace('%%', '%', trim($msg)), $body->getLine()), $vars);
     }
 }

+ 7 - 0
tests/Symfony/Tests/Bridge/Twig/Extension/TranslationExtensionTest.php

@@ -25,6 +25,13 @@ class TranslationExtensionTest extends TestCase
         }
     }
 
+    public function testEscaping()
+    {
+        $output = $this->getTemplate('{% trans %}Percent: %value%%% (%msg%){% endtrans %}')->render(array('value' => 12, 'msg' => 'approx.'));
+
+        $this->assertEquals('Percent: 12% (approx.)', $output);
+    }
+
     /**
      * @dataProvider getTransTests
      */