这是我打印侧边栏项目的宏。每个title
atttribute都会在'tip.' ~ route
中构建messages.it.yml
项目。
即使 trans项目不存在 Twig也始终返回传递给trans
过滤器的字符串。例如:
tip:
dashboard: Dashboard
模板:
{% _self.sideitem('dashboard', 'home') %} // <a title="Dashboard">...
{% _self.sideitem('fail', 'home') %} // <a title="tip.fail">...
{% macro sideitem(route, icon) %}
{% set active = (route == app.request.get('_route')) %}
{% set icon = icon ? 'icon-' ~ icon ~ (active ? ' icon-white' : '') : '' %}
<li class="{{ active ? 'active' : '' }}">
<a href="{{ path(route) }}" title="{{ ('tip.' ~ route)|trans }}">
<i class="{{ icon }}"></i> {{ ('nav.' ~ route)|trans }}
</a>
</li>
{% endmacro %}
如何在实际打印之前检查转换项是否存在?
编辑:一个残酷的解决方法可能是(代码未经过测试):
<li class="{{ active ? 'active' : '' }}">
{% set look = ('tip.' ~ route) %}
{% set foreign = look|trans %}
{% set has = not(look == foreign) %}
<a href="{{ path(route) }}" {{ not has ? '' : 'title="' ~ foreign ~ '"' }} >
<i class="{{ icon }}"></i> {{ ('nav.' ~ route)|trans }}
</a>
</li>
答案 0 :(得分:9)
我想出的解决方案就是这个:
{% if "#{var}.something"|trans != "#{var}.something" %}
这只是检查翻译键的结果是否与翻译键本身不同。如果某个键没有翻译,则“trans”过滤器将返回翻译键。
答案 1 :(得分:4)
您可以使用twig扩展名来确认是否存在翻译。
$locale = $translator->getLocale();
$catalogue = $translator->getCatalogue($locale);
$id = 'bank_transaction_history.transfer.' . $resultCode;
if ($catalogue->defines($id)) {
return $translator->trans($id);
}
答案 2 :(得分:1)
我已经分析了您的问题,并查看了Symfony2中使用的默认转换程序。
对于您来说,最好的解决方法是重新定义此方法,以便在您预期时返回false。
长话短说:
编写实现TranslatorInterface并扩展的类 翻译
重新定义方法trans()
将您的班级定义为translator
服务(它将替换
与你的默认翻译)
就是这样
我希望它有所帮助;)
答案 3 :(得分:0)
尝试分配字符串'nav'。 〜路由到变量,然后转换变量。