用变量扩展 Twig trans_default_domain?

Extending the Twig trans_default_domain with a variable?

我有一个像这样的长 Twig 文件:

...
<th>
    {{('tree.overview.panel.column.name')|trans({},'jury')}}
</th>
<th>
    {{('tree.overview.panel.column.length')|trans({},'jury')}}
</th>
...

使用 trans_default_domain() 我设法将其缩短为:

{% trans_default_domain "jury" %}
...
<th>
    {{('tree.overview.panel.column.length')|trans }}
</th>
<th>
    {{('tree.overview.panel.column.phase')|trans }}
</th>
...

但我想创建更短更易于维护的内容,如下所示:

{% trans_default_domain "jury" %}
{% trans_default_tree = 'tree.overview.panel.column.' %}
...
<th>
    {{trans_default_tree+('length')|trans}}
</th>
<th>
    {{trans_default_tree+('phase')|trans}}
</th>
...

不写扩展是否可行?或者只是使用扩展程序来做到这一点?

您可以尝试这样的简短语法:

{% trans_default_domain "jury" %}
{% set trans_default_tree = 'tree.overview.panel.column.' %}
...
<th>
    {{(trans_default_tree~'length')|trans}}
</th>
<th>
    {{(trans_default_tree~'phase')|trans}}
</th>
...

这就是我能想到的做你想做的事,你可以使用变量和'~'来连接字符串并用括号对整个事物应用反式过滤器。

如果您不想使用扩展程序,Nawfals 解决方案是完美的,但因为我正在寻找更灵活的东西,所以我创建了一个扩展程序,它工作得很好。扩展有一个 setter 和一个 getter,所以现在我可以设置我的变量 直接在扩展函数中,然后得到结果。此外,setter 适用于每个包含的页面。

{% trans_default_domain "jury" %}
{{ set_tree_base('tree.overview.panel.column.') }}
...
<th>
    {{ (get_tree('name'))|trans }} // Also works like this: get_tree('name')|trans
</th>
<th>
    {{ (get_tree('phase'))|trans }}
</th>
...

src/Your/Namespace/Twig/Extensions/TranslateExtension.php中的class:

class TranslateExtension extends \Twig_Extension{

var $tree = false;

public function getFunctions() {
    return array(
     'set_tree_base' => new \Twig_Function_Method($this, 'setTreeBase'),
     'get_tree' => new \Twig_Function_Method($this, 'getTree')
    );
}

public function getTree ($string) {
    return $this->tree . $string;
}

public function setTreeBase ($string) {
    $this->tree = $string;
}

public function getName() {
    return 'full_tree_node';
}
}

不要忘记在 YourBundle/Resources/config/services.yml

中注册 twig 扩展
your_namespace.twig.extension:
    class: Your\Namespace\Twig\Extensions\TranslateExtension
    tags:
        - { name: twig.extension }