i18n-error-base
与 Valibot 语言设置联动切换错误消息的 Error 基类。
与 Valibot 的 lang 联动切换 message 的 Error 基类。
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。无需重新创建实例即可切换。未注册的语言使用构造函数的默认消息。
特性
- 与 Valibot 的
setGlobalConfig({ lang })联动,动态解析message - 使用
setErrorMessage在之后注册各语言的消息,也可使用接收meta的函数 - 未注册的语言使用构造函数的默认消息
- 通过按类的
static prefix添加前缀 - 保留
meta并传递给消息生成函数 instanceof Error、cause、stack照常使用
结构
工作原理
message 在每次读取时按以下顺序解析。
- 从
getGlobalConfig()获取lang,未设置时为"en" - 如有(类 × lang)注册,则传入
meta并执行 - 否则返回构造函数的默认消息
- 如设置了
static prefix,则拼接到开头