在Twig模板中的Symfony'trans'域

Mis*_*iur 28 localization gettext symfony twig

我想这样做:

$this->get('translator')->trans('notice.unregistered', array(), 'index');
Run Code Online (Sandbox Code Playgroud)

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

kri*_*hna 63

你也可以使用trans过滤器:

{{ 'translationkey'|trans({},'domain') }}
Run Code Online (Sandbox Code Playgroud)

  • 你必须做错事.这也适用于变量(参见:http://symfony.com/doc/current/book/translation.html#twig-templates例如`{{message | trans({'%name%':'Fabien'}," app")}}`). (2认同)

Mis*_*iur 27

解决方案是:

{% trans from "domain" %}text{% endtrans %}
Run Code Online (Sandbox Code Playgroud)

  • 如何使用管道而不是块来使用trans过滤器? (3认同)

kbt*_*tzr 5

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

添加你的功能:

$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);
Run Code Online (Sandbox Code Playgroud)

然后使用它:

{% set originalDomain = get_textdomain() %}
{{ set_textdomain('errors') }}
{% trans "My error message" %}
{{ set_textdomain(originalDomain) }}
Run Code Online (Sandbox Code Playgroud)