我有一个很长的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>
...
如果不编写扩展名,这可能吗?或者正在使用扩展程序吗?
答案 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';
}
}