schmittjoh / JMSTranslationBundle

Puts the Symfony2 Translation Component on steroids
http://jmsyst.com/bundles/JMSTranslationBundle
427 stars 291 forks source link

Nested translations are not supported using the "desc" filter #185

Open sandvige opened 10 years ago

sandvige commented 10 years ago

When that kind of code is validated with twig:lint:

{{ 'print.my.date'|trans({
    '%date%': myDate|date('date.format'|trans|desc('m/d/Y H:i'))
    })|desc('%date%')
}}

It's failing with this error:

[JMS\TranslationBundle\Exception\RuntimeException]
The "desc" filter must be applied after a "trans", or "transchoice" filter.

Exception trace:
 () at \vendor\jms\translation-bundle\JMS\TranslationBundle\Twig\DefaultApplyingNodeVisitor.php:57
 JMS\TranslationBundle\Twig\DefaultApplyingNodeVisitor->enterNode() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:76
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:79
 Twig_NodeTraverser->traverseForVisitor() at \vendor\twig\twig\lib\Twig\NodeTraverser.php:63
 Twig_NodeTraverser->traverse() at \vendor\twig\twig\lib\Twig\Parser.php:118
 Twig_Parser->parse() at \vendor\twig\twig\lib\Twig\Environment.php:515
 Twig_Environment->parse() at \vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\Command\LintCommand.php:101
 Symfony\Bundle\TwigBundle\Command\LintCommand->validateTemplate() at \vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\Command\LintCommand.php:92
 Symfony\Bundle\TwigBundle\Command\LintCommand->execute() at \vendor\symfony\symfony\src\Symfony\Component\Console\Command\Command.php:244
 Symfony\Component\Console\Command\Command->run() at \vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:904
 Symfony\Component\Console\Application->doRunCommand() at \vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:191
 Symfony\Component\Console\Application->doRun() at \vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Console\Application.php:96
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at \vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:121
 Symfony\Component\Console\Application->run() at \app\console:22

twig:lint [filename]

It's because of nested calls to |trans, here is a workaround:

{% set date = myDate|date('date.format'|trans|desc('m/d/Y H:i')) %}
{{ 'print.my.date'|trans({
    '%date%': date
    })|desc('%date%')
}}
sandvige commented 10 years ago

It appears this issue can be reproduced without nesting translations:

{{ something|default('some.id'|trans|desc('Some ID')) }}
Nyholm commented 8 years ago

I know it was a long time ago you posted this issue. Do you still experiencing this? Or is it fixed in the latest version of the bundle?