Ответ 1
Решение состоит в том, чтобы поместить строку в круглые скобки, как описано здесь:
работает:
{{ 'hello.world' | trans }}
не работает:
{{ 'hello.' ~ 'world' | trans }}
работает:
{{ ('hello.' ~ 'world') | trans }}
У меня есть 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') }}
Решение состоит в том, чтобы поместить строку в круглые скобки, как описано здесь:
работает:
{{ 'hello.world' | trans }}
не работает:
{{ 'hello.' ~ 'world' | trans }}
работает:
{{ ('hello.' ~ 'world') | trans }}
чтобы перевести контактные строки, вам нужно сделать следующее:
{{ "some string" ~ entity.type ~ "другая строка" ) | trans}}
Но попробуйте написать строку для перевода как params: например:
some.funny.string
Является ли это ассоциативным массивом, правильно? Затем вы должны выполнить цикл с ключом = > пара значений
<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>