Обычно вы передаете параметры для перевода, поэтому ваш фрагмент кода, вероятно, должен выглядеть как ваш первый пример, а затем в ветке вы получите что-то вроде этого:
{% for message in app.flashes('success') %}
<div class="alert alert-success">
{{ message|trans({ 'title': project.title }) }}
</div>
{% endfor %}
Тогда перевод должен содержать заменяемый параметр:
flashmessage:
project_created: 'The project "%title%" was created successfully.'
project_deleted: 'You successfully deleted the project "%title%".'
...
Очевидно, что недостатком является то, что вы должны динамически передавать переменные, что не имеет особого смысла для сообщений fla sh, поскольку не все из них потребуют эти параметры. Кроме того, как вы уже упоминали, при удалении проекта вы, вероятно, больше не будете иметь его в шаблоне.
Вместо этого я бы порекомендовал перевести сообщение перед передачей его в пакет fla sh:
$this->addFlash(
'success',
$this->translator->translate(
'flashmessage.project_deleted',
[
'title' => $project->getTitle(),
]
)
);
Для этого вам потребуется передать переводчик своему контроллеру. Для этого вы можете либо создать свой собственный базовый контроллер, подобный * AbstractController Symfony, и создать что-то вроде $this->trans()
-метода, чтобы было проще переводить вещи внутри вашего контроллера. Кроме того, вам все равно нужно будет убедиться, что $project->getTitle()
по-прежнему будет возвращать значение, так что вы, вероятно, захотите вызвать его, прежде чем фактически удалить запись или сохранить данные в памяти.
Когда вы делаете это, Кстати, тогда не стоит переводить сообщения fla sh в самом шаблоне, потому что они уже переведены. Это все равно будет работать, потому что когда Symfony попытается перевести уже переведенное сообщение, например, You successfully deleted the project "foo".
, он не найдет перевод и вместо этого просто напечатает исходный текст, но вы получите предупреждения в своих журналах об отсутствующих переводах. Решение состоит в том, чтобы удалить |trans
из вашего шаблона (см. Первый фрагмент).