function TwigNodeTrans::compile

Same name in other branches
  1. 9 core/lib/Drupal/Core/Template/TwigNodeTrans.php \Drupal\Core\Template\TwigNodeTrans::compile()
  2. 8.9.x core/lib/Drupal/Core/Template/TwigNodeTrans.php \Drupal\Core\Template\TwigNodeTrans::compile()
  3. 11.x core/lib/Drupal/Core/Template/TwigNodeTrans.php \Drupal\Core\Template\TwigNodeTrans::compile()

File

core/lib/Drupal/Core/Template/TwigNodeTrans.php, line 52

Class

TwigNodeTrans
A class that defines the Twig 'trans' tag for Drupal.

Namespace

Drupal\Core\Template

Code

public function compile(Compiler $compiler) {
    $compiler->addDebugInfo($this);
    [
        $singular,
        $tokens,
    ] = $this->compileString($this->getNode('body'));
    $plural = NULL;
    if ($this->hasNode('plural')) {
        [
            $plural,
            $pluralTokens,
        ] = $this->compileString($this->getNode('plural'));
        $tokens = array_merge($tokens, $pluralTokens);
    }
    // Start writing with the function to be called.
    $compiler->write('yield ' . (empty($plural) ? 't' : '\\Drupal::translation()->formatPlural') . '(');
    // Move the count to the beginning of the parameters list.
    if (!empty($plural)) {
        $compiler->raw('abs(')
            ->subcompile($this->getNode('count'))
            ->raw('), ');
    }
    // Write the singular text parameter.
    $compiler->subcompile($singular);
    // Write the plural text parameter, if necessary.
    if (!empty($plural)) {
        $compiler->raw(', ')
            ->subcompile($plural);
    }
    // Write any tokens found as an associative array parameter, otherwise just
    // leave as an empty array.
    $compiler->raw(', array(');
    foreach ($tokens as $token) {
        $compiler->string($token->getAttribute('placeholder'))
            ->raw(' => ')
            ->subcompile($token)
            ->raw(', ');
    }
    $compiler->raw(')');
    // Write any options passed.
    if ($this->hasNode('options')) {
        $compiler->raw(', ')
            ->subcompile($this->getNode('options'));
    }
    // Write function closure.
    $compiler->raw(')');
    // @todo Add debug output, see https://www.drupal.org/node/2512672
    // End writing.
    $compiler->raw(";\n");
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.