Как обновить сообщение о недействительном токене CSRF в Symfony 7

Используя Symfony 7 с установленным symfony/translation, я пытаюсь обновить сообщение, которое отображается, когда токен CSRF моей формы входа недействителен. В настоящее время там написано «Неверный токен CSRF». о чем мои пользователи не будут иметь ни малейшего понятия.

У меня есть файл /config/packages/translation.yaml, настроенный следующим образом:

framework:
    default_locale: en
    translator:
        default_path: '%kernel.project_dir%/translations'
        fallbacks:
            - en
        providers:

Затем в /translations/validators.en.yaml у меня есть:

csrf_token:
  invalid: "Wakka wakka"

Мне не удалось найти никакой документации о том, какими именно должны быть ключи в файле .yaml — у меня есть только предложение

Я очистил кеш, но нужного сообщения не вижу. Что я неправильно настроил?

Обновление
Как предложил @Jakumi, я обновил свой файл yaml до

"Invalid CSRF token." : "wakka wakka"

безуспешно.

Я также попробовал добавить в этот каталог файл security.en.xlf с моим переводом, а также переименовать свой файл yaml в security.en.yaml. Все еще не повезло.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Иногда ответ удивительно прост: ключом перевода является строка «Неверный токен CSRF». (см. Переводы компонентов безопасности), в Symfony 7 это эта строка и в «домене безопасности». В других версиях Symfony это может быть где-то еще.

Как правило, рекомендуется просто искать строку в базе кода, и, если она вообще переведена, перевод должен находиться в некоторых файлах перевода.

Затем, чтобы перевести его, следуйте инструкциям. По сути, это просто должен быть действительный yaml, если вы используете yaml. Насколько я могу судить, это должно быть (YAML):

"Invalid CSRF token.": "Whatever the translation is."

Некоторые цитаты можно опустить, но я не хочу вдаваться в подробности.

Чтобы проверить, что ваш перевод в целом работает, откройте шаблон и добавьте {{ 'Invalid CSRF token.'|trans({}, 'security') (строка и домен могут отличаться!)

Спасибо за ответ. Однако я не использую файлы .xlf — я использую .yaml. Я ищу способ указать ключ в моем файле .yaml. Возможно ли это, или мне просто нужно придерживаться .xlf?

Quasipickle 10.03.2024 21:31

Я добавил это в свой ответ. Когда ключ содержит точку, вы можете иметь такую ​​же структуру, как и раньше с csrf_token.invalid (это был неправильный ключ), но здесь ключ представляет собой правильное предложение (ладно, глагол отсутствует, но вы знаете, что Я имею в виду), поэтому попытка разрыва строки после . было бы глупо.

Jakumi 11.03.2024 10:02

Спасибо за обновление. Не повезло. Я добавил обновление к своему исходному сообщению с новыми вещами, которые я пробовал.

Quasipickle 12.03.2024 00:43

Хорошо, я попробовал это локально с помощью Symfony 6. В Symfony 6 строка: «Токен CSRF недействителен. Попробуйте повторно отправить форму». и находится в валидаторах, поэтому, если я помещу перевод строки в Translations/validators.en.yaml, мой перевод будет применен. Поэтому я хочу еще раз предложить вам поискать в вашей кодовой базе (точнее, в вендоре/symfony/...) строку, которую вы видите и хотите изменить.

Jakumi 12.03.2024 09:30

также, если ваш проект активен, переводы могут кэшироваться.

Jakumi 12.03.2024 09:44

Проблема была двоякая. 1) На самом деле я не имел в виду перевод. Я предполагал, что сервис переведет автоматически, как только я получу файл на место. 2) У меня неправильно назван файл/я не указал домен. Изменение имени файла на messages.en.yaml и использование службы перевода дали мне то, что мне было нужно. Спасибо за вашу помощь и терпение.

Quasipickle 13.03.2024 02:40

Я подозревал, типа того. ;о) Ваше вступительное сообщение, казалось, подразумевало, что вы в целом успешно переводите, но у меня были сомнения. Всегда полезно проверить свои предположения ;о) Рад, что теперь это работает для вас!

Jakumi 13.03.2024 07:47

Другие вопросы по теме