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

追加方法と peer 依存を説明します。

**[使い方](/i18n-error-base/ja/usage)**

定義から切り替え、prefix、フォールバックまで扱います。

**[API リファレンス](/i18n-error-base/ja/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/ja/installation)から始め、[使い方](/i18n-error-base/ja/usage)で流れを確認してください。詳細は [API リファレンス](/i18n-error-base/ja/api) にまとめています。
