diff --git a/core/lib/Drupal/Core/Template/TwigNodeTrans.php b/core/lib/Drupal/Core/Template/TwigNodeTrans.php index 98404b6..21006fd 100644 --- a/core/lib/Drupal/Core/Template/TwigNodeTrans.php +++ b/core/lib/Drupal/Core/Template/TwigNodeTrans.php @@ -169,6 +169,9 @@ protected function compileString(\Twig_Node $body) { } } } + elseif (!$body->hasAttribute('data')) { + throw new \Twig_Error_Syntax('{% trans %} tag cannot be empty'); + } else { $text = $body->getAttribute('data'); } diff --git a/core/modules/system/src/Tests/Theme/TwigTransTest.php b/core/modules/system/src/Tests/Theme/TwigTransTest.php index 65d10a5..6473d6e 100644 --- a/core/modules/system/src/Tests/Theme/TwigTransTest.php +++ b/core/modules/system/src/Tests/Theme/TwigTransTest.php @@ -92,6 +92,30 @@ public function testTwigTransTags() { } /** + * Test empty Twig "trans" tags. + */ + public function testEmptyTwigTransTags() { + $elements = [ + '#type' => 'inline_template', + '#template' => '{% trans %}{% endtrans %}', + ]; + /** @var \Drupal\Core\Render\RendererInterface $renderer */ + $renderer = \Drupal::service('renderer'); + + try { + $renderer->renderPlain($elements); + + $this->fail('{% trans %}{% endtrans %} did not throw an exception.'); + } + catch (\Twig_Error_Syntax $e) { + $this->assertTrue(strstr($e->getMessage(), '{% trans %} tag cannot be empty'), '{% trans %}{% endtrans %} threw the expected exception.'); + } + catch (\Exception $e) { + $this->fail('{% trans %}{% endtrans %} threw an unexpected exception.'); + } + } + + /** * Asserts Twig trans tags. */ protected function assertTwigTransTags() {