使用Symfony 4中的带参数的Flash消息翻译

英格丽

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

$this->addFlash('success', 'flashmessage.project_deleted');

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

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

但是无法识别翻译,因为参数是在翻译发生之前被替换的(我认为是)。并且还应该有可能在字符串的中间而不是在结尾或开头都具有参数,理想情况下,可以有多个参数。

我在扩展AbstractController的Controller中使用它。

有人对此有解决方案吗?

德鲁曼

通常,您会将参数传递给翻译,因此您的代码段应该看起来像您的第一个示例,然后在树枝中您将得到以下内容:

{% 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%".'
     ...

显然,缺点是您必须动态传递对于Flash消息没有太大意义的变量,因为并非所有变量都需要这些参数。另外,正如您已经提到的,当您删除项目时,模板中可能再也没有该项目了。

相反,我建议在将消息传递到Flash包之前先对其进行翻译:

$this->addFlash(
    'success',
    $this->translator->translate(
        'flashmessage.project_deleted',
        [
            'title' => $project->getTitle(),
        ]
    )
);

这将要求您将翻译器传递给控制器​​。为此,您可以创建自己的类似于Symfony的AbstractController的基本控制器,并创建类似$this->trans()-method的方法,以便更轻松地在控制器内部转换内容。另外,您仍然必须确保该$project->getTitle()值仍会返回一个值,因此您可能要在实际删除条目或将数据存储在内存中之前调用它。

当您以这种方式执行此操作时,您不应在模板本身中翻译即显消息,因为它们已被翻译。这仍然可以使用,因为当Symfony尝试翻译已翻译的消息时,例如You successfully deleted the project "foo".,它将找不到翻译,而只是打印原始文本,但是您会在日志中收到有关缺少翻译的警告。解决方案是删除|trans模板中的(请参见第一个片段)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用键进行symfony翻译

来自分类Dev

Symfony翻译忽略参数中的花括号

来自分类Dev

使用 Thymeleaf 翻译参数中的翻译

来自分类Dev

如何在Symfony Flash消息中使用HTML标签

来自分类Dev

树枝中的 Symfony4 翻译

来自分类Dev

如何在Symfony中翻译(和复制)CSRF消息?

来自分类Dev

Symfony 4 翻译

来自分类Dev

Symfony错误注释中的“使用”

来自分类Dev

使用Symfony 3进行路由翻译

来自分类Dev

如何使用Symfony和Twig翻译图像

来自分类Dev

在Flash消息中添加模板symfony2

来自分类Dev

Symfony2使用NotFoundException消息

来自分类Dev

Symfony2使用NotFoundException消息

来自分类Dev

如何使用Symfony2翻译器在树枝模板中翻译连接字符串

来自分类Dev

Symfony 4 redirectToRoute 不使用 Post 方法发送参数

来自分类Dev

Symfony2在EntityRepository中使用参数

来自分类Dev

如何使用 ifisset() 与 symfony 和 post 参数

来自分类Dev

在方法参数中使用 Symfony 验证器

来自分类Dev

如何使用Symfony 4上传音乐

来自分类Dev

Symfony 4 如何使用我自己的 Bundle

来自分类Dev

Symfony 4 对实体使用全局标准

来自分类Dev

在Symfony2中使用Twig删除URL参数

来自分类Dev

使用GET参数在Symfony 5中生成URL

来自分类Dev

Symfony-Twig-使用参数更改宏中块的名称

来自分类Dev

Symfony2翻译验证消息的问题

来自分类Dev

Symfony 3 - 无法加载翻译“消息”文件

来自分类Dev

使用Monolog在symfony中写日志

来自分类Dev

在symfony 3中使用dbal灌输

来自分类Dev

在Symfony 3中使用MS SQL