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

How to translate (and replicate) the CSRF Message in Symfony?

我的一些用户在我的网络应用程序中遇到 CSRF 错误。他们告诉我他们不知道该怎么办。

为了更好的用户体验,我想翻译一下留言。有人可以告诉我该怎么做吗?

此外,如何在我的开发环境中实际复制 CSRF 错误?

我同时使用 Symfony 2.8 和 3.0。

您可以将消息替换为翻译文件中添加的以下行

    <trans-unit id="1">
        <source>The CSRF token is invalid. Please try to resubmit the form.</source>
        <target>The CSRF token is invalid. Please try to resubmit the form.</target>
    </trans-unit>

在目标标签中,您可以更改您的自定义消息。如果对此有任何疑问,请告诉我

记得将您的翻译添加到验证器 validator.<lang>.<type> 文件中(而不是在消息中:messages),例如:

validator.en.yml

<trans-unit id="1">
    <source>The CSRF token is invalid. Please try to resubmit the form.</source>
    <target>The CSRF token is invalid. Please try to resubmit the form.</target>
</trans-unit>

编辑 - 每次更改翻译文件后刷新缓存

编辑 - test/replicate 行为:

您可以使用 firebug 之类的工具来编辑和更改 _token 表单隐藏元素并提交表单或暂时从表单中删除该字段。

希望对您有所帮助

如果要为特定表单翻译,请在表单选项数组中传递翻译后的值 - csrf_message。 (至少在 3.4 symfony 上)。就像在控制器中创建时一样

$options['csrf_message'] = 'Translated value'
$this->createForm(CheckoutType::class, $data, $options);

复制选项之一是修改在前端控制器中找到的 $_POST 数组。喜欢 app.php

$_POST['checkout']['_token'] = '1';