这是我打印侧边栏项目的宏.每个titleatttribute都是在构建中查找'tip.' ~ route项目messages.it.yml.
即使trans项不存在, Twig也总是返回传递给transfilter 的字符串.例如:
tip:
dashboard: Dashboard
Run Code Online (Sandbox Code Playgroud)
模板:
{% _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 %}
Run Code Online (Sandbox Code Playgroud)
如何在实际打印之前检查转换项是否存在?
编辑:一个残酷的解决方法可能是(代码未测试):
<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>
Run Code Online (Sandbox Code Playgroud)
小智 9
我想出的解决方案就是这个:
{% if "#{var}.something"|trans != "#{var}.something" %}
Run Code Online (Sandbox Code Playgroud)
这只是检查翻译密钥的结果是否与翻译密钥本身不同.如果某个键没有翻译,则"trans"过滤器将返回翻译键.
小智 5
您可以使用 twig 扩展名来确认翻译是否存在。
$locale = $translator->getLocale();
$catalogue = $translator->getCatalogue($locale);
$id = 'bank_transaction_history.transfer.' . $resultCode;
if ($catalogue->defines($id)) {
return $translator->trans($id);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5648 次 |
| 最近记录: |