---
title: i18n-error-base
description: 与 Valibot 语言设置联动切换错误消息的 Error 基类。
---

与 Valibot 的 `lang` 联动切换 `message` 的 `Error` 基类。

```ts
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`。无需重新创建实例即可切换。未注册的语言使用构造函数的默认消息。

## 特性 [#features]

- 与 Valibot 的 `setGlobalConfig({ lang })` 联动，动态解析 `message`
- 使用 `setErrorMessage` 在之后注册各语言的消息，也可使用接收 `meta` 的函数
- 未注册的语言使用构造函数的默认消息
- 通过按类的 `static prefix` 添加前缀
- 保留 `meta` 并传递给消息生成函数
- `instanceof Error`、`cause`、`stack` 照常使用

## 结构 [#structure]

**[安装](/i18n-error-base/zh/installation)**

添加包与对等依赖的方法。

**[使用方法](/i18n-error-base/zh/usage)**

从定义到切换、前缀、回退。

**[API 参考](/i18n-error-base/zh/api)**

`I18nErrorBase` 与 `setErrorMessage` 的规范。

## 工作原理 [#how-it-works]

`message` 在每次读取时按以下顺序解析。

1. 从 `getGlobalConfig()` 获取 `lang`，未设置时为 `"en"`
2. 如有（类 × lang）注册，则传入 `meta` 并执行
3. 否则返回构造函数的默认消息
4. 如设置了 `static prefix`，则拼接到开头

:::tip
已注册消息在每次读取时根据 `meta` 生成，因此切换会立即生效。
:::

## 下一步 [#next-steps]

从[安装](/i18n-error-base/zh/installation)开始，在[使用方法](/i18n-error-base/zh/usage)中确认流程。详情参见 [API 参考](/i18n-error-base/zh/api)。
