【问题标题】:Symfony 'trans' domain inside Twig templateTwig 模板中的 Symfony 'trans' 域
【发布时间】:2011-10-07 15:46:26
【问题描述】:

我想这样做:

$this->get('translator')->trans('notice.unregistered', array(), 'index');

在 Twig 模板中,所以我不必将其作为参数传递。怎么样?

【问题讨论】:

    标签: symfony localization twig gettext


    【解决方案1】:

    您也可以使用反式过滤器:

    {{ 'translationkey'|trans({},'domain') }}
    

    【讨论】:

    • 当你使用它从变量中翻译字符串时它不起作用。
    • 你肯定做错了什么。这也适用于变量(参见:symfony.com/doc/current/book/translation.html#twig-templates 例如{{ message|trans({'%name%': 'Fabien'}, "app") }})。
    • 嗯,它的目的是使用变量,对于字符串常量{% trans %}The value{% endtrans %} 将是要走的路。
    • 对于连接表达式,您必须在 trans 修饰符之前设置它:{% set salutation = 'salutation.' ~ person.gender %} {{ salutation | trans({}, 'domain') }} 直接 {{ 'salutation.' ~ person.gender | trans({}, 'domain') }} 不起作用。
    • 这不适用于独立的 Twig -- 仅适用于 Symfony Twig。
    【解决方案2】:

    解决办法是:

    {% trans from "domain" %}text{% endtrans %}
    

    【讨论】:

    • 你将如何使用管道而不是块来使用 trans 过滤器?
    【解决方案3】:

    您可以添加自定义函数来更改模板内的域。

    添加你的功能:

    $getTextdomain = new Twig_SimpleFunction('get_textdomain', function () {
        return textdomain(NULL);
    });
    $setTextdomain = new Twig_SimpleFunction('set_textdomain', function ($domain) {
        textdomain($domain);
    });
    
    $twig->addFunction($getTextdomain);
    $twig->addFunction($setTextdomain);
    

    然后使用它:

    {% set originalDomain = get_textdomain() %}
    {{ set_textdomain('errors') }}
    {% trans "My error message" %}
    {{ set_textdomain(originalDomain) }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多