繁体   English   中英

如果未找到翻译,则默认为 Twig 模板中的空白字符串

[英]Default to blank string in Twig template if translation is not found

如果在 Twig 模板中找不到翻译,有没有办法默认为空白字符串而不是翻译键?

我正在尝试使用default Twig 过滤器和trans过滤器一起做这种事情,但这不起作用:

{{ 'crmpicco.general.course.opening_hours_weekend'|default('')|trans }}

您可以使用自己的翻译扩展名覆盖翻译扩展,这样transtranschoice过滤器就会按照您的意愿运行:

<?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 }}

但如果有选择,干净的数据会更好。 或翻译扩展中的修复

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM