用变量扩展 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 }
我有一个像这样的长 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 }