如果在 Twig 模板中找不到翻译,有没有办法默认为空白字符串而不是翻译键?
我正在尝试在default
过滤器旁边使用 Twig 过滤器进行此类操作,trans
但这不起作用:
{{ 'crmpicco.general.course.opening_hours_weekend'|default('')|trans }}
如果在 Twig 模板中找不到翻译,有没有办法默认为空白字符串而不是翻译键?
我正在尝试在default
过滤器旁边使用 Twig 过滤器进行此类操作,trans
但这不起作用:
{{ 'crmpicco.general.course.opening_hours_weekend'|default('')|trans }}
你可以用你自己的覆盖翻译扩展,所以trans
andtranschoice
过滤器会按照你的意愿运行:
<?php
// src/AppBundle/Twig/EmptyTranslationExtension.php
namespace AppBundle\Twig;
use Symfony\Bridge\Twig\Extension\TranslationExtension;
class EmptyTranslationExtension extends TranslationExtension
{
public function trans($message, array $arguments = [], $domain = null, $locale = null)
{
$value = parent::trans($message, $arguments, $domain, $locale);
return ($message === $value) ? '' : $value;
}
public function transchoice($message, $count, array $arguments = [], $domain = null, $locale = null)
{
$value = parent::transchoice($message, $count, array_merge(['%count%' => $count], $arguments), $domain, $locale);
return ($message === $value) ? '' : $value;
}
}
并将您的扩展注册为默认扩展:
# app/config/services.yml
services:
twig.extension.trans:
class: AppBundle\Twig\EmptyTranslationExtension
public: false
arguments:
- @translator
tags:
- { name: twig.extension }
这种方式有效,但它不是最佳解决方案:
{% set trans_key = 'crmpicco.general.course.opening_hours_weekend' %}
{% set trans_value = trans_key | trans %}
{{ trans_key == trans_value ? '' : trans_value }}
这部分对我有用:
{{ crmpicco.general.course.opening_hours_weekend == '' ? '' : crmpicco.general.course.opening_hours_weekend|trans() }}
比这更容易。您可以通过与字符串连接来简单地将类型转换为字符串。
{{ null ~ ''|trans }}
但如果有选择,干净的数据会更好。或翻译扩展中的修复