Twig:如何连接和翻译字符串?

Mr.*_* B. 0 php string yaml symfony twig

我尝试了这个问题的答案,但它不起作用。这很奇怪,我无法重现这种行为:

  • 我清除了缓存
  • Concat 有效(它输出正确的字符串)
  • 作为变量的连接字符串不可翻译
  • 作为字符串粘贴的连接字符串是可翻译的
  • 编辑obj2arr将对象转换为数组,使其可迭代。prepareForTwig只是使用trim()等 - 字符串输出正确。
  • 编辑2:({% set transVar = (key|prepareForTwig) %}没有前缀)也不起作用。

yml:

# Resources/translations/messages.en.yml
my:
   keywords:
       keyword1: K1
       keyword2: K2
       # ...
Run Code Online (Sandbox Code Playgroud)

枝条:

{# my.twig.html #}
{% for key, value in data|obj2arr %}
    {% set transVar = 'my.keywords.' ~ (key|prepareForTwig)) %}

    {{ transVar }}<br/>                    {# output, e.g.: my.keywords.keyword1 #}
    {{ transVar|trans}}<br/>               {# output, e.g.: my.keywords.keyword1 #}  
    {{ 'my.keywords.keyword1'|trans }}     {# output: K1 #}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

编辑:

自定义TwigExtension.php

class CustomTwigExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('obj2arr', array($this, 'obj2arrFilter')),
            new \Twig_SimpleFilter('prepareForTwig', array($this, 'prepareForTwigFilter')),
        );
    }

    public function obj2arrFilter($obj)
    {
        return (array)$obj;
    }

    public function prepareForTwigFilter($str) {
        $str = trim($str);
        $str = strtolower($str);
        $str = substr($str, 2, strlen($str)); // obj2arr() prefixes "*"

        return $str;
    }

    public function getName()
    {
        return 'custom_twig_extension';
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Rmy*_*my5 5

其他示例似乎不适用于我的情况,这就是我最终使用的:

{{ "my.prefix.#{ myVariable }.my.postfix" | trans }}
Run Code Online (Sandbox Code Playgroud)

翻译字符串必须位于双引号之间。