diff --git a/core/lib/Drupal/Core/Template/TwigNodeTrans.php b/core/lib/Drupal/Core/Template/TwigNodeTrans.php
index 21006fd1ed..8b48cde657 100644
--- a/core/lib/Drupal/Core/Template/TwigNodeTrans.php
+++ b/core/lib/Drupal/Core/Template/TwigNodeTrans.php
@@ -62,7 +62,7 @@ public function compile(\Twig_Compiler $compiler) {
// leave as an empty array.
$compiler->raw(', array(');
foreach ($tokens as $token) {
- $compiler->string($token->getAttribute('placeholder'))->raw(' => ')->subcompile($token)->raw(', ');
+ $compiler->string($token->getAttribute('placeholder'))->raw(' => $this->env->getExtension("drupal_core")->renderVar(')->subcompile($token)->raw('), ');
}
$compiler->raw(')');
diff --git a/core/modules/system/src/Tests/Theme/TwigExtensionTest.php b/core/modules/system/src/Tests/Theme/TwigExtensionTest.php
index 4be1f736c9..4e93eb9251 100644
--- a/core/modules/system/src/Tests/Theme/TwigExtensionTest.php
+++ b/core/modules/system/src/Tests/Theme/TwigExtensionTest.php
@@ -3,6 +3,7 @@
namespace Drupal\system\Tests\Theme;
use Drupal\simpletest\WebTestBase;
+use Drupal\Component\Render\FormattableMarkup;
/**
* Tests Twig extensions.
@@ -86,4 +87,14 @@ public function testsRenderZeroValue() {
$this->assertIdentical($extension->renderVar(0.0), 0, 'TwigExtension::renderVar() renders zero correctly when provided as a double.');
}
+ /**
+ * Tests output of MarkupInterface of TwigExtension->renderVar().
+ */
+ public function testRenderMarkup() {
+ /** @var \Drupal\Core\Template\TwigExtension $extension */
+ $extension = \Drupal::service('twig.extension');
+ $markup = new FormattableMarkup('This is a @markup', ['@markup' => 'MarkupInterface']);
+ $this->assertIdentical($extension->renderVar($markup), 'This is a MarkupInterface', 'TwigExtension::renderVar() returns MarkupInterface correctly.');
+ }
+
}
diff --git a/core/modules/system/src/Tests/Theme/TwigTransTest.php b/core/modules/system/src/Tests/Theme/TwigTransTest.php
index ef6fe05074..4b3be4f84b 100644
--- a/core/modules/system/src/Tests/Theme/TwigTransTest.php
+++ b/core/modules/system/src/Tests/Theme/TwigTransTest.php
@@ -116,6 +116,14 @@ public function testEmptyTwigTransTags() {
}
/**
+ * Testing trans with render array value.
+ */
+ public function testTransRenderArray() {
+ $this->drupalGet('twig-theme-test/render-array');
+ $this->assertText('This is a trans render array', '{% trans %} with render array value is working correctly.');
+ }
+
+ /**
* Asserts Twig trans tags.
*/
protected function assertTwigTransTags() {
diff --git a/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php b/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php
index 7408ce8f47..4e5bf448c5 100644
--- a/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php
+++ b/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php
@@ -104,4 +104,13 @@ public function renderable() {
];
}
+ /**
+ * Controller for testing trans with render array value.
+ */
+ public function transRenderArray() {
+ return [
+ '#theme' => 'twig_theme_test_trans_render_array',
+ ];
+ }
+
}
diff --git a/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.trans_render_array.html.twig b/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.trans_render_array.html.twig
new file mode 100644
index 0000000000..ea04c5d477
--- /dev/null
+++ b/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.trans_render_array.html.twig
@@ -0,0 +1,3 @@
+{% trans %}
+ This is a {{ var }}.
+{% endtrans %}
diff --git a/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.module b/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.module
index b3a75e5180..169f0d4c98 100644
--- a/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.module
+++ b/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.module
@@ -24,6 +24,16 @@ function twig_theme_test_theme($existing, $type, $theme, $path) {
'variables' => array('var' => ''),
'template' => 'twig_theme_test.placeholder_outside_trans',
);
+ $items['twig_theme_test_trans_render_array'] = array(
+ 'variables' => array(
+ 'var' => array(
+ '#prefix' => '',
+ '#markup' => 'trans render array',
+ '#suffix' => '',
+ ),
+ ),
+ 'template' => 'twig_theme_test.trans_render_array',
+ );
$items['twig_namespace_test'] = array(
'variables' => array(),
'template' => 'twig_namespace_test',
diff --git a/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.routing.yml b/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.routing.yml
index df665c3464..8bc66848aa 100644
--- a/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.routing.yml
+++ b/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.routing.yml
@@ -69,3 +69,10 @@ twig_theme_test_renderable:
_controller: '\Drupal\twig_theme_test\TwigThemeTestController::renderable'
requirements:
_access: 'TRUE'
+
+twig_theme_test_render_array:
+ path: '/twig-theme-test/render-array'
+ defaults:
+ _controller: '\Drupal\twig_theme_test\TwigThemeTestController::transRenderArray'
+ requirements:
+ _access: 'TRUE'