Возможен ли перевод с использованием переменных в Symfony2 + Twig?

Первый вывод строки не переведен:

{{ chart.name~'.short'|trans({}, "charts") }}

Это работает (это тот же текст, который должен выводить chart.name~'.short'):

{{ 'charts.region.area.short'|trans({}, "charts") }}

Я что-то пропустил? Кажется, невозможно перевести динамический текст в Twig?

EDIT: рабочая установка переменной (почему?):

{% set name = chart.name ~ '.short' %}
{{ name|trans({}, "charts") }}

person gremo    schedule 11.10.2011    source источник


Ответы (2)


Symfony/Twig пытается перевести .short и объединить его с содержимым chart.name. Используйте круглые скобки, чтобы получить ожидаемый результат:

{{ (chart.name~'.short')|trans({}, "charts") }}
person Czechnology    schedule 11.10.2011
comment
Большое спасибо. Раньше я думал, что трубка была чем-то вроде трубы... - person gremo; 12.10.2011
comment
Фильтры на самом деле могут быть полезны не только для вывода. Например, такой код {% if user_input|upper == 'YES' %}...{% endif %} или {% if rows|length == 0 %}no rows{% endif %} можно использовать, чтобы избежать ненужных манипуляций с данными в контроллере. - person Czechnology; 12.10.2011
comment
Да, вполне. Даже если я начинаю Symfony2 + Twig, я пытаюсь изучить лучшие практики, как ваш пример. Я постараюсь вынести все, что связано с презентацией, в представлениях, даже не вызывать переводчика (вот почему мой вопрос) в контроллерах. На мой взгляд, переводчик должен быть удален из класса контроллера... это часть графического интерфейса! - person gremo; 12.10.2011
comment
Сохранение контроллера настолько тонким, насколько это возможно, является основной хорошей практикой в ​​​​дизайне MVC;) - person Czechnology; 12.10.2011
comment
Если вам нужно объединить наоборот, это будет выглядеть так: {{ ('contracts.states.'~object.currentState) }} Источник: blog.webdevilopers.net/ - person webDEVILopers; 24.09.2014

при использовании мультиязычности с symfony2 в twig вам необходимо:

Установите локаль запроса, это дает локаль, в которой тег tran twig будет переводить слово.

я сделал следующее:

1- Часть контроллера:

 $this->getRequest()->setLocale('es_AR');   //setting the locale to spanish in Argentina

 return $this->render('LoginLoginBundle:Default:welcome.html.twig');   //render a twig file

2- файл ветки имеет

<h2>{% trans %} hello {% endtrans %}</h2>

код с тегом ветки trans, используйте его таким образом или {{ "Text"|trans }}, потому что {% trans hello %} больше не работает

3- в файле messeges.es.yml у меня получилось

привет: Хола

This goes in order to translate the word in the

{% транс%} привет {% endtrans%}

,ore over you can change the hello word for any one you like and change it in the messeges.es.yml file, example: 1: Hola will bring Hola if the locale is set to spanish, else will bring a 1

person user2394869    schedule 17.05.2013