Php 细枝:如何连接和翻译字符串?

Php 细枝:如何连接和翻译字符串?,php,string,symfony,twig,yaml,Php,String,Symfony,Twig,Yaml,我试过了,但不起作用。这很奇怪,我无法复制这种行为: 我清除了缓存 Concat工作(它的输出是正确的字符串) 作为变量的特定字符串不可翻译 粘贴为字符串的特定字符串是可翻译的 Edit:obj2arr将对象强制转换为数组,以使其可编辑prepareForTwig正在使用trim()等-字符串输出正确 编辑2:{%set transVar=(键| prepareForTwig)%}(不带前缀)也不起作用 yml: # Resources/translations/messages.en.ym

我试过了,但不起作用。这很奇怪,我无法复制这种行为:

  • 我清除了缓存
  • Concat工作(它的输出是正确的字符串)
  • 作为变量的特定字符串不可翻译
  • 粘贴为字符串的特定字符串是可翻译的
  • Edit
    obj2arr
    将对象强制转换为数组,以使其可编辑
    prepareForTwig
    正在使用
    trim()
    等-字符串输出正确
  • 编辑2
    {%set transVar=(键| prepareForTwig)%}
    (不带前缀)也不起作用
yml:

# Resources/translations/messages.en.yml
my:
   keywords:
       keyword1: K1
       keyword2: K2
       # ...
{# 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 %}
小枝:

# Resources/translations/messages.en.yml
my:
   keywords:
       keyword1: K1
       keyword2: K2
       # ...
{# 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 %}

提前谢谢

输出浓缩翻译字符串的每个答案都是正确的,例如:

{% 'my.prefix.' ~ extendByKeyword | trans }}
问题是一个奇怪的生成空间:

  • (数组)$obj
    添加了
    *
    (星号后有两个空格)作为
    -变量的前缀
  • 我使用
    substr()
    来去掉
    *
    (星号+1空格),但没有注意到/预期到第二个空格
  • 将字符串与strlen()比较后,我找到了原因

感谢@Artamiel和@CarlosGranados的帮助

其他示例在我的案例中似乎不起作用,这就是我最终使用的:

{{ "my.prefix.#{ myVariable }.my.postfix" | trans }}

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

您是否尝试使用parentesis,如
{{(transVar)|trans}}
?请务必检查两次。我自己现在用
{('hello.world.~myVar)|trans}}
尝试了它,其中
myVar
被设置为
'message'
,并且它被正确地翻译了。问题的出现是因为您试图让细枝计算变量,然后将其用作细枝构造。这通常是不可用的,但您可以使用Twig的template_from_string函数使其工作:如果您这样尝试会发生什么情况-
{%set transVar=key | prepareForTwig%}
然后像
{my.keywords.~transVar | trans}
使用{{{include(template_from_string({{'''.~transVar~“'''''''.}}})一样输出它)请注意,开头的括号应该是
{{
而不是
{%