Система сообщений об ошибках в Validator.js построена на принципе разделения логики валидации и представления результата. Каждое правило валидации возвращает код ошибки, который затем преобразуется в человекочитаемое сообщение через слой локализации.
Такой подход позволяет:
Основой языковой системы выступает словарь сообщений, где каждому правилу сопоставляется строковый шаблон.
Сообщения в Validator.js обычно представляют собой строковые шаблоны с параметрами подстановки.
Типовая структура:
{
required: "Поле обязательно для заполнения",
email: "Некорректный формат email",
min: "Значение должно быть не меньше :min",
max: "Значение должно быть не больше :max",
length: "Длина должна быть равна :length"
}
Плейсхолдеры вида :min, :max,
:length используются для динамической подстановки значений
из правил валидации.
При выполнении проверки:
validator.min(5)
сообщение преобразуется в:
"Значение должно быть не меньше 5"
Validator.js поддерживает концепцию языковых пакетов (locales), представляющих собой набор словарей.
Пример структуры локали:
const ruLocale = {
messages: {
required: "Поле обязательно",
email: "Некорректный email",
min: "Минимальное значение :min"
}
};
const enLocale = {
messages: {
required: "The field is required",
email: "Invalid email format",
min: "Minimum value is :min"
}
};
Переключение между локалями осуществляется через конфигурацию валидатора или глобальные настройки.
Глобальная локализация применяется ко всем экземплярам валидаторов в рамках приложения.
import Validator from "validatorjs";
import ruLocale from "./locales/ru";
Validator.setMessages("ru", ruLocale.messages);
Validator.useLang("ru");
После установки активного языка все ошибки начинают возвращаться в заданной локали.
Механизм глобальной локализации особенно эффективен в одностраничных приложениях, где единый язык интерфейса определён на уровне системы.
Для изолированных сценариев возможно переопределение сообщений на уровне конкретной валидации.
const data = { email: "" };
const rules = {
email: "required|email"
};
const messages = {
"required.email": "Email должен быть указан",
"email.email": "Неверный формат email"
};
const validation = new Validator(data, rules, messages);
Формат ключей:
{rule}.{field}
Такая схема позволяет детально управлять текстами ошибок для каждого поля независимо от глобальной локали.
При генерации текста ошибки соблюдается иерархия:
Если сообщение отсутствует на одном уровне, происходит переход к следующему.
Система шаблонов поддерживает подстановку параметров из правил.
Поддерживаемые типы плейсхолдеров:
:min:max:size:value:attributeПример:
{
between: "Значение должно быть между :min и :max"
}
При валидации:
validator.between(10, 20)
Результат:
"Значение должно быть между 10 и 20"
Механизм интерполяции реализуется на этапе постобработки результата валидации.
Validator.js не ограничивает количество подключаемых локалей. Каждый языковой пакет регистрируется под уникальным ключом.
Validator.setMessages("ru", ruLocale.messages);
Validator.setMessages("kz", kzLocale.messages);
Validator.setMessages("en", enLocale.messages);
Переключение осуществляется динамически:
Validator.useLang("kz");
При смене языка все последующие проверки используют обновлённый словарь сообщений без пересоздания валидаторов.
В системах с пользовательскими настройками языка возможна смена локали в рантайме.
Поведение системы при смене языка:
errorsЭто позволяет интегрировать Validator.js в интерфейсы с переключением языка без перезагрузки приложения.
Validator.js может работать совместно с внешними библиотеками
интернационализации, такими как i18next или аналогичными
системами.
Подход интеграции:
Пример:
const messages = {
required: "validation.required",
email: "validation.email"
};
Далее интерпретация происходит через i18n:
i18next.t("validation.required");
Такой подход централизует управление текстами и исключает дублирование переводов.
Для специализированных приложений возможно создание расширенных словарей.
Пример кастомной локали:
const customLocale = {
messages: {
required: "Обязательное поле не заполнено",
numeric: "Допустимы только числа",
email: "Email указан некорректно",
url: "Некорректный URL адрес"
},
attributes: {
email: "Электронная почта",
password: "Пароль"
}
};
Раздел attributes используется для подстановки читаемых
названий полей в сообщения:
"Поле Электронная почта обязательно"
Подстановка имён полей осуществляется через плейсхолдер
:attribute.
Пример:
{
required: ":attribute обязательно для заполнения"
}
Результат:
"Пароль обязательно для заполнения"
Если атрибут не задан, используется имя поля из данных модели.
Если запрашиваемая локаль отсутствует:
en)Такая стратегия предотвращает появление пустых или неинформативных сообщений в интерфейсе.
Языковая система Validator.js допускает расширение через добавление новых правил и их сообщений.
Пример нового правила:
Validator.register(
"startsWithA",
(value) => value.startsWith("A"),
"Значение должно начинаться с A"
);
Для локализации:
Validator.setMessages("ru", {
startsWithA: "Значение должно начинаться с буквы A"
});
Каждое новое правило требует явного добавления перевода в соответствующие языковые пакеты.
При использовании цепочек правил:
email|required|min:5
сообщения формируются независимо для каждого нарушенного правила, после чего агрегируются в список ошибок поля.
Структура результата:
email:
- "Поле обязательно"
- "Некорректный email"
Локализация применяется к каждому сообщению отдельно, без влияния на порядок выполнения правил.