i18n-error-base
Базовый класс Error, переключающий сообщения об ошибках в соответствии с языковой настройкой Valibot.
Базовый класс Error, переключающий message с lang Valibot.
import { setGlobalConfig } from "valibot";
import { I18nErrorBase, setErrorMessage } from "i18n-error-base";
class NotFoundError extends I18nErrorBase<{ resource: string }> {}
setErrorMessage(NotFoundError, ({ resource }) => `リソースが見つかりません: ${resource}`, "ja");
setErrorMessage(NotFoundError, ({ resource }) => `Resource not found: ${resource}`, "en");
const error = new NotFoundError({ resource: "user" }, "fallback message");
setGlobalConfig({ lang: "ja" });
console.log(error.message); // リソースが見つかりません: user
setGlobalConfig({ lang: "en" });
console.log(error.message); // Resource not found: user
message при каждом чтении ссылается на lang. Переключайте без повторного создания экземпляров. Нерегистрированные языки используют сообщение по умолчанию из конструктора.
Особенности
- Динамически определяет
messageчерезsetGlobalConfig({ lang })Valibot - Сообщения по языкам регистрируются позже через
setErrorMessage. Допустимы и функции, принимающиеmeta - Нерегистрированные языки используют сообщение по умолчанию из конструктора
- Добавляет префикс через
static prefixна уровне класса - Хранит
metaи передаёт его в фабричные функции сообщений instanceof Error,causeиstackработают как обычно
Структура
Установка
Как добавить пакет и peer-зависимость.
Использование
От определения до переключения, префикса и запаса.
Справочник API
Спецификации I18nErrorBase и setErrorMessage.
Как это работает
message разрешается при каждом чтении в следующем порядке.
- Получает
langизgetGlobalConfig()."en", если не задан - Если есть регистрация
(класс × lang), выполняет её сmeta - Иначе возвращает сообщение по умолчанию из конструктора
- Если задан
static prefix, добавляет его в начало
Дальнейшие шаги
Начните с установки, затем смотрите процесс в «Использовании». Подробности — в справочнике API.