Как перевести конкатенированную строку в шаблон твига, используя переводчик Symfony2

У меня есть yml файл перевода следующим образом:

tag:
  myfirsttag: Tag number one
  secondtag: Tag number two
  ....

и шаблон ветки, например

    <select name="tag" required="required">
        {% for tag in tag_list %}
            <option value="{{ tag }}">{{ "tag." ~ tag | trans(domain='mydomain') }}</option>
        {% endfor %}
    </select>

Итак, вот проблема. Элементы в элементе отображаются как "tag.myfirsttag", а не переведены. Если я заменил "tag." ~ tag на hardcoded string, например "tag.myfirsttag", он работает хорошо. Очевидно, что это связано с конкатенацией, но официальные документы ничего не говорят об этом.

Чтобы быть более ясным и простым

Я могу перевести

{{ "hello.world" | trans(domain='mydomain') }}

но не может перевести

{{ "hello." ~ "world" | trans(domain='mydomain') }}

Ответ 1

Решение состоит в том, чтобы поместить строку в круглые скобки, как описано здесь:

работает:

{{ 'hello.world' | trans }}

не работает:

{{ 'hello.' ~ 'world' | trans }}

работает:

{{ ('hello.' ~ 'world') | trans }}

Ответ 2

чтобы перевести контактные строки, вам нужно сделать следующее:

{{ "some string" ~ entity.type ~ "другая строка" ) | trans}}

Но попробуйте написать строку для перевода как params: например:

some.funny.string

Ответ 3

Является ли это ассоциативным массивом, правильно? Затем вы должны выполнить цикл с ключом = > пара значений

<select name="tag" required="required">
    {% for key,tag in tag_list %}
      <option value="{{ key }}">{{ tag | trans(domain='mydomain') }}</option>
    {% endfor %}
</select>

Или ваш массив глубже:

<select name="tag" required="required">
    {% for tag in tag_list %}
      {% for key,value in tag %}
        <option value="{{ key }}">{{ value | trans(domain='mydomain') }}</option>
      {% endfor %}
    {% endfor %}
</select>