Ver Fonte

removed the possibility to pass a message to the trans tag

The trans tag should only be used with static texts as automatic output escaping does not occur.
Fabien Potencier há 14 anos atrás
pai
commit
286c45733e

+ 16 - 2
UPDATE.md

@@ -6,8 +6,22 @@ one. It only discusses changes that need to be done when using the "public"
 API of the framework. If you "hack" the core, you should probably follow the
 timeline closely anyway.
 
-PR12 to PR13
-------------
+PR12 to beta1
+-------------
+
+* The `trans` tag does not accept a message as an argument anymore:
+
+    {% trans "foo" %}
+    {% trans foo %}
+
+  Use the long version the tags or the filter instead:
+
+    {% trans %}foo{% endtrans %}
+    {{ foo|trans }}
+
+  This has been done to clarify the usage of the tag and filter and also to
+  make it clearer when the automatic output escaping rules are applied (see
+  the doc for more information).
 
 * Some methods in the DependencyInjection component's ContainerBuilder and
   Definition classes have been renamed to be more specific and consistent:

+ 1 - 1
src/Symfony/Bridge/Twig/Extension/TranslationExtension.php

@@ -53,7 +53,7 @@ class TranslationExtension extends \Twig_Extension
     public function getTokenParsers()
     {
         return array(
-            // {% trans "Symfony is great!" %}
+            // {% trans %}Symfony is great!{% endtrans %}
             new TransTokenParser(),
 
             // {% transchoice count %}

+ 5 - 13
src/Symfony/Bridge/Twig/TokenParser/TransTokenParser.php

@@ -36,20 +36,14 @@ class TransTokenParser extends \Twig_TokenParser
         $vars = new \Twig_Node_Expression_Array(array(), $lineno);
         $domain = new \Twig_Node_Expression_Constant('messages', $lineno);
         if (!$stream->test(\Twig_Token::BLOCK_END_TYPE)) {
-            if (!$stream->test('from') && !$stream->test('with')) {
-                // {% trans "message" %}
-                // {% trans message %}
-                $body = $this->parser->getExpressionParser()->parseExpression();
-            }
-
             if ($stream->test('with')) {
-                // {% trans "message" with vars %}
+                // {% trans with vars %}
                 $stream->next();
                 $vars = $this->parser->getExpressionParser()->parseExpression();
             }
 
             if ($stream->test('from')) {
-                // {% trans "message" from "messages" %}
+                // {% trans from "messages" %}
                 $stream->next();
                 $domain = $this->parser->getExpressionParser()->parseExpression();
             } elseif (!$stream->test(\Twig_Token::BLOCK_END_TYPE)) {
@@ -57,11 +51,9 @@ class TransTokenParser extends \Twig_TokenParser
             }
         }
 
-        if (null === $body) {
-            // {% trans %}message{% endtrans %}
-            $stream->expect(\Twig_Token::BLOCK_END_TYPE);
-            $body = $this->parser->subparse(array($this, 'decideTransFork'), true);
-        }
+        // {% trans %}message{% endtrans %}
+        $stream->expect(\Twig_Token::BLOCK_END_TYPE);
+        $body = $this->parser->subparse(array($this, 'decideTransFork'), true);
 
         if (!$body instanceof \Twig_Node_Text && !$body instanceof \Twig_Node_Expression) {
             throw new \Twig_Error_Syntax('A message must be a simple text');

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

@@ -47,16 +47,9 @@ class TranslationExtensionTest extends TestCase
     {
         return array(
             // trans tag
-            array('{% trans "Hello" %}', 'Hello'),
-            array('{% trans "Hello %name%" %}', 'Hello Symfony2', array('name' => 'Symfony2')),
-            array('{% trans name %}', 'Symfony2', array('name' => 'Symfony2')),
-            array('{% trans hello with { \'%name%\': \'Symfony2\' } %}', 'Hello Symfony2', array('hello' => 'Hello %name%')),
-            array('{% set vars = { \'%name%\': \'Symfony2\' } %}{% trans hello with vars %}', 'Hello Symfony2', array('hello' => 'Hello %name%')),
-
             array('{% trans %}Hello{% endtrans %}', 'Hello'),
             array('{% trans %}%name%{% endtrans %}', 'Symfony2', array('name' => 'Symfony2')),
 
-            array('{% trans "Hello" from elsewhere %}', 'Hello'),
             array('{% trans from elsewhere %}Hello{% endtrans %}', 'Hello'),
 
             array('{% trans %}Hello %name%{% endtrans %}', 'Hello Symfony2', array('name' => 'Symfony2')),