---
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-tw/installation)**

新增套件與對等依賴的方法。

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

從定義到切換、前綴、退回。

**[API 參考](/i18n-error-base/zh-tw/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-tw/installation)開始，在[使用方式](/i18n-error-base/zh-tw/usage)中確認流程。詳情參見 [API 參考](/i18n-error-base/zh-tw/api)。
