From d14795dbb12a3506f93b72e3ce32c6c439e6a0aa Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Tue, 2 Jan 2024 16:53:57 +0100 Subject: [PATCH] [Translation] Fix `TranslationNodeVisitor` with constant domain --- .../Twig/NodeVisitor/TranslationNodeVisitor.php | 16 ++++++++++++++++ .../Twig/Tests/Translation/TwigExtractorTest.php | 7 +++++++ 2 files changed, 23 insertions(+) diff --git a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php index d42245e2b89a4..ac0ccd21cdd37 100644 --- a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php +++ b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php @@ -158,6 +158,22 @@ private function getReadDomainFromNode(Node $node): ?string return $node->getAttribute('value'); } + if ( + $node instanceof FunctionExpression + && 'constant' === $node->getAttribute('name') + ) { + $nodeArguments = $node->getNode('arguments'); + if ($nodeArguments->getIterator()->current() instanceof ConstantExpression) { + $constantName = $nodeArguments->getIterator()->current()->getAttribute('value'); + if (\defined($constantName)) { + $value = \constant($constantName); + if (\is_string($value)) { + return $value; + } + } + } + } + return self::UNDEFINED_DOMAIN; } diff --git a/src/Symfony/Bridge/Twig/Tests/Translation/TwigExtractorTest.php b/src/Symfony/Bridge/Twig/Tests/Translation/TwigExtractorTest.php index 060a0578f2044..4e7b501da0050 100644 --- a/src/Symfony/Bridge/Twig/Tests/Translation/TwigExtractorTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Translation/TwigExtractorTest.php @@ -22,6 +22,8 @@ class TwigExtractorTest extends TestCase { + public const CUSTOM_DOMAIN = 'domain'; + /** * @dataProvider getExtractData */ @@ -77,6 +79,11 @@ public static function getExtractData() // make sure this works with twig's named arguments ['{{ "new key" | trans(domain="domain") }}', ['new key' => 'domain']], + // make sure this works with const domain + ['{{ "new key" | trans({}, constant(\'Symfony\\\\Bridge\\\\Twig\\\\Tests\\\\Translation\\\\TwigExtractorTest::CUSTOM_DOMAIN\')) }}', ['new key' => self::CUSTOM_DOMAIN]], + ['{% trans from constant(\'Symfony\\\\Bridge\\\\Twig\\\\Tests\\\\Translation\\\\TwigExtractorTest::CUSTOM_DOMAIN\') %}new key{% endtrans %}', ['new key' => self::CUSTOM_DOMAIN]], + ['{{ t("new key", {}, constant(\'Symfony\\\\Bridge\\\\Twig\\\\Tests\\\\Translation\\\\TwigExtractorTest::CUSTOM_DOMAIN\')) | trans() }}', ['new key' => self::CUSTOM_DOMAIN]], + // concat translations ['{{ ("new" ~ " key") | trans() }}', ['new key' => 'messages']], ['{{ ("another " ~ "new " ~ "key") | trans() }}', ['another new key' => 'messages']],