Я использую symfony 3.4.19 и имею переводы на 2 языка: английский и голландский.Я использую это руководство по symfony для перевода проверочных сообщений
Вот часть моего UserDTO с утверждениями и переводами сообщений:
class UserDTO
{
/**
* @var string
*
* @Assert\NotNull(message="security.registration.firstname.required", groups={"createUser", "updateUser"})
* @Assert\NotBlank(message="security.registration.firstname.required", groups={"createUser", "updateUser"})
*/
private $firstname;
/**
* @var string
*
* @Assert\NotNull(message="security.registration.lastname.required", groups={"createUser", "updateUser"})
* @Assert\NotBlank(message="security.registration.lastname.required", groups={"createUser", "updateUser"})
*/
private $lastname;
/**
* @var string
*
* @Assert\NotNull(message="security.registration.email.required", groups={"createUser", "updateUser"})
* @Assert\NotBlank(message="security.registration.email.required", groups={"createUser", "updateUser"})
* @Assert\Email(message="security.registration.email.format", groups={"createUser", "updateUser"})
*/
private $email;
/**
* @var string
*
* @Assert\NotNull(message="security.registration.password.required", groups={"createUser", "updateUser"})
* @Assert\NotBlank(message="security.registration.password.required", groups={"createUser", "updateUser"})
*/
private $plainPassword;
}
Итак, у меня 2 переводафайлы: security.en.yml
"Username could not be found.": "Wrong email or password!"
"Invalid credentials.": "Wrong email or password!"
security:
login:
email: 'Email'
password: 'Password'
registration:
firstname:
title: 'Firstname'
required: 'A firstname is required'
lastname:
title: 'Lastname'
required: 'A lastname is required'
email:
title: 'Email'
required: 'An email is required'
format: 'Wrong email format'
password:
title: 'Password'
required: 'A password is required'
и security.nl.yml:
"Username could not be found.": "Verkeerd email of wachtwoord!"
"Invalid credentials.": "Verkeerd email of wachtwoord!"
security:
login:
email: 'Email'
password: 'Wachtwoord'
registration:
firstname:
title: 'Voornaam'
required: 'Voornaam is verplicht'
lastname:
title: 'Achternaam'
required: 'Achternaam is verplicht'
email:
title: 'Email'
required: 'Email is verplicht'
format: 'Verkeerd email formaat'
password:
title: 'Wachtwoord'
required: 'Wachtwoord is verplicht'
Также я не использую конструктор форм Symfony, поэтому просто отправляю форму, которую создаювнутри шаблона ветки:
{% trans_default_domain 'security' %}
{% extends 'base.html.twig' %}
{% block stylesheets %}
{{ parent() }}
<link href="{{ asset('css/project/registration.css') }}" rel="stylesheet"/>
{% endblock %}
{% block javascripts %}
{{ parent() }}
{% endblock %}
{% block body %}
{{ include('component/main-navbar.html.twig') }}
<div>
<h2>Create new account</h2>
{% if errors is defined %}
<div class="alert alert-danger">
<ul>
{% for error in errors %}
<li>{{ error|trans }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form action="/register" method="post">
<input type="text" name="firstname" placeholder="{{ 'security.registration.firstname.title'|trans }}">
<input type="text" name="lastname" placeholder="{{ 'security.registration.lastname.title'|trans }}">
<input type="text" name="email" placeholder="{{ 'security.registration.email.title'|trans }}">
<input type="text" name="plainPassword" placeholder="{{ 'security.registration.password.title'|trans }}">
<button type="submit" class="btn btn-success btn-sm float-right">Login <span class="fa fa-lock"></span>
</button>
</form>
</div>
{{ include('component/footer.html.twig') }}
{% endblock %}
Как вы можете видеть в верхней части шаблона, я явно установил область перевода, т.е.'security'.
В контроллере есть 2 метода.Первый - просто для представления представления, а второй - для отправки формы.
public function registrationPageAction(Request $request)
{
return new Response(
$this->twigService->render(
'security/register.html.twig',
[
'error' => []
]
),
200
);
}
Отправка формы:
public function registrationSubmitAction(Request $request)
{
$submittedFormData = $request->request->all();
$userDTO = new UserDTO();
$userDTO->setFirstname($submittedFormData['firstname'])
->setLastname($submittedFormData['lastname'])
->setEmail($submittedFormData['email'])
->setPlainPassword($submittedFormData['plainPassword']);
$fieldErrors = $this->validator->validate($userDTO, null, ['createUser']);
$errors = [];
if (count($fieldErrors) > 0)
{
foreach ($fieldErrors as $error)
{
$errors[] = $error->getMessage();
}
return new Response(
$this->twigService->render(
'security/register.html.twig',
[
'errors' => $errors
]
),
200
);
}
}
В настоящее время я нигде не храню отправленные данныеЯ просто хочу быть уверен, что переводы работают нормально.
Поэтому, когда я захожу / регистрируюсь, я вижу форму с полями ПЕРЕВОДОВ, как и ожидалось.А в панели отладки нет уведомлений о пропущенных переводах:
После отправки формы я получил также форму с переведенными полями, но на этот раз в панели отладкиУ меня также есть уведомление об отсутствующих переводах:
Обратите внимание, что все переводы (поля и сообщения) работают нормально.В config.yml у меня есть резервный языковой стандарт 'en', а текущий языковой стандарт - 'nl'.
Пропущенные переводы:
Я действительно не понимаю, почему я продолжаю видеть эти уведомления.Есть идеи?
ОБНОВЛЕНИЕ:
Теперь я избавился от security.en.yml и security.nl.yml и создал для тестирования только приложение /Ресурсы / переводы / validators.en.yml с этим содержимым:
firstname: 'Firstname is needed'
lastname: 'Lastname is needed'
email: 'Email is needed'
emailformat: 'Wrong email format'
password: 'Password is needed'
Далее я изменил сообщения проверки в классе UserDTO:
class UserDTO
{
/**
* @var string
*
* @Assert\NotNull(message="firstname", groups={"createUser", "updateUser"})
* @Assert\NotBlank(message="firstname", groups={"createUser", "updateUser"})
*/
private $firstname;
/**
* @var string
*
* @Assert\NotNull(message="lastname", groups={"createUser", "updateUser"})
* @Assert\NotBlank(message="lastname", groups={"createUser", "updateUser"})
*/
private $lastname;
/**
* @var string
*
* @Assert\NotNull(message="email", groups={"createUser", "updateUser"})
* @Assert\NotBlank(message="email", groups={"createUser", "updateUser"})
* @Assert\Email(message="emailformat", groups={"createUser", "updateUser"})
*/
private $email;
/**
* @var string
*
* @Assert\NotNull(message="password", groups={"createUser", "updateUser"})
* @Assert\NotBlank(message="password", groups={"createUser", "updateUser"})
*/
private $plainPassword;
}
В register.html.twig IЯ удалил {% trans_default_domain 'security'%} и создал форму без перевода полей:
<form action="/register" method="post">
<input type="text" name="firstname" placeholder="Firstname">
<input type="text" name="lastname" placeholder="Lastname">
<input type="text" name="email" placeholder="Email">
<input type="text" name="plainPassword" placeholder="Password">
<button type="submit" class="btn btn-success btn-sm float-right">Login <span class="fa fa-lock"></span>
</button>
</form>
И снова после отправки формы я получаю эти раздражающие уведомления:
Что я делаю не так?Я просто следую пошаговому руководству Symfony: (