Используя 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. Все еще не повезло.




Иногда ответ удивительно прост: ключом перевода является строка «Неверный токен CSRF». (см. Переводы компонентов безопасности), в Symfony 7 это эта строка и в «домене безопасности». В других версиях Symfony это может быть где-то еще.
Как правило, рекомендуется просто искать строку в базе кода, и, если она вообще переведена, перевод должен находиться в некоторых файлах перевода.
Затем, чтобы перевести его, следуйте инструкциям. По сути, это просто должен быть действительный yaml, если вы используете yaml. Насколько я могу судить, это должно быть (YAML):
"Invalid CSRF token.": "Whatever the translation is."
Некоторые цитаты можно опустить, но я не хочу вдаваться в подробности.
Чтобы проверить, что ваш перевод в целом работает, откройте шаблон и добавьте {{ 'Invalid CSRF token.'|trans({}, 'security') (строка и домен могут отличаться!)
Я добавил это в свой ответ. Когда ключ содержит точку, вы можете иметь такую же структуру, как и раньше с csrf_token.invalid (это был неправильный ключ), но здесь ключ представляет собой правильное предложение (ладно, глагол отсутствует, но вы знаете, что Я имею в виду), поэтому попытка разрыва строки после . было бы глупо.
Спасибо за обновление. Не повезло. Я добавил обновление к своему исходному сообщению с новыми вещами, которые я пробовал.
Хорошо, я попробовал это локально с помощью Symfony 6. В Symfony 6 строка: «Токен CSRF недействителен. Попробуйте повторно отправить форму». и находится в валидаторах, поэтому, если я помещу перевод строки в Translations/validators.en.yaml, мой перевод будет применен. Поэтому я хочу еще раз предложить вам поискать в вашей кодовой базе (точнее, в вендоре/symfony/...) строку, которую вы видите и хотите изменить.
также, если ваш проект активен, переводы могут кэшироваться.
Проблема была двоякая. 1) На самом деле я не имел в виду перевод. Я предполагал, что сервис переведет автоматически, как только я получу файл на место. 2) У меня неправильно назван файл/я не указал домен. Изменение имени файла на messages.en.yaml и использование службы перевода дали мне то, что мне было нужно. Спасибо за вашу помощь и терпение.
Я подозревал, типа того. ;о) Ваше вступительное сообщение, казалось, подразумевало, что вы в целом успешно переводите, но у меня были сомнения. Всегда полезно проверить свои предположения ;о) Рад, что теперь это работает для вас!
Спасибо за ответ. Однако я не использую файлы .xlf — я использую .yaml. Я ищу способ указать ключ в моем файле .yaml. Возможно ли это, или мне просто нужно придерживаться .xlf?