在 Symfony 4 中使用参数翻译 flash 消息

Ing*_*rid 4 translation symfony flash-message symfony4

我在 Symfony 4 和翻译中遇到闪现消息问题。简单的闪存消息的翻译工作正常:

$this->addFlash('success', 'flashmessage.project_deleted');
Run Code Online (Sandbox Code Playgroud)

但现在我想在闪现消息中添加一些参数,但我不知道如何处理。我尝试了很多,但没有任何效果。我想在删除 fe 后在闪现消息中显示项目的标题。例如:

$this->addFlash('success', sprintf('flashmessage.project_deleted: %s', $project->getTitle()));
Run Code Online (Sandbox Code Playgroud)

但翻译无法识别,因为参数在翻译发生之前被替换(我认为是这样)。并且还应该可以在字符串的中间包含参数,而不仅仅是在末尾或开头,并且最好有多个参数。

我在扩展 AbstractController 的控制器中使用它。

有人有解决方案吗?

Ben*_*r77 5

从 Symfony 5.2 开始你可以使用TranslatableMessage对象来实现这一点。

https://symfony.com/doc/current/translation.html#translatable-objects

use Symfony\Component\Translation\TranslatableMessage;


$this->addFlash(
    'success', 
    new TranslatableMessage(
        'flashmessage.project_deleted',
        ['%project%' => $project->getTitle()]
    )
);
Run Code Online (Sandbox Code Playgroud)

然后在你的 Twig 模板中你只需要使用{{ flashMessage|trans }}.

这无需注入 Translator 服务或搞乱 Twig 中的任何内容即可工作。