使用变量扩展Twig trans_default_domain?

时间:2015-05-19 05:56:57

标签: symfony twig

我有一个很长的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>
...

如果不编写扩展名,这可能吗?或者正在使用扩展程序吗?

2 个答案:

答案 0 :(得分:0)

你可以尝试这样的语法:

{% 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>
...

这就是我能想到做你想做的事情,你可以使用变量和&#39;〜&#39;连接字符串并使用括号对整个事物应用trans过滤器。

答案 1 :(得分:0)

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

/cellar/redis 
/etc/redis    
/var/redis

{% 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

不要忘记在YourBundle / Resources / config / services.yml中注册twig扩展名

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';
}
}