Sari la conținut
i18n-error-base
Română
Esc
↑↓navighează↵deschide⌘Jprevizualizează
Pe această pagină

Utilizare

Operații de bază pentru definirea claselor de eroare, înregistrarea mesajelor, comutarea limbilor, prefix și fallback.

Fluxul de bază

Definiți o clasă de eroare

Extindeți I18nErrorBase<TMeta> și definiți în TMeta datele pentru generarea mesajului.

Înregistrați mesajele pe limbi

Înregistrați mesajul clasei și limbii cu setErrorMessage.

Comutați limba și citiți message

Comutați cu setGlobalConfig({ lang }) și citiți error.message.

import { setGlobalConfig } from "valibot";
import { I18nErrorBase, setErrorMessage } from "i18n-error-base";

class BusinessRuleError extends I18nErrorBase<{ code: string; limit: number }> {
  public constructor(meta: { code: string; limit: number }) {
    super(meta, ({ code, limit }) => `Code: ${code}, Limit: ${limit}`);
  }
}

setErrorMessage(
  BusinessRuleError,
  ({ code, limit }) => `コード: ${code}、制限: ${limit}`,
  "ja",
);

const error = new BusinessRuleError({ code: "ERR", limit: 50 });

setGlobalConfig({ lang: "ja" });
console.log(error.message); // コード: ERR、制限: 50

setGlobalConfig({ lang: "en" });
console.log(error.message); // Code: ERR, Limit: 50

Definirea unei clase de eroare

TMeta sunt datele auxiliare pentru generarea mesajului. Sunt păstrate în error.meta și transmise funcțiilor înregistrate.

import { I18nErrorBase } from "i18n-error-base";

class NotFoundError extends I18nErrorBase<{ resource: string }> {}

const error = new NotFoundError({ resource: "user" }, "fallback message");
console.log(error.meta); // { resource: "user" }

Al doilea argument este un șir sau o funcție (meta) => string. Al treilea sunt opțiunile Error, cum ar fi { cause }.

class TestError extends I18nErrorBase<{ code: string }> {}

const cause = new Error("original");
const error = new TestError({ code: "ERR" }, "something went wrong", { cause });
console.log(error.cause === cause); // true

Setarea TMeta la undefined vă permite să omiteți meta.

class NoMetaError extends I18nErrorBase<undefined> {}

const a = new NoMetaError("no meta");
const b = new NoMetaError(undefined, "no meta");
console.log(a.meta); // undefined

Înregistrarea mesajelor

setErrorMessage înregistrează funcții de creare a mesajelor pentru clasă și limbă.

import { I18nErrorBase, setErrorMessage } from "i18n-error-base";

class TestError extends I18nErrorBase<{ code: string }> {}

setErrorMessage(TestError, ({ code }) => `エラーコード: ${code}`, "ja");
setErrorMessage(TestError, "something went wrong", "en");

Șirurile sunt permise. Limbile pot fi date ca tablou.

const message = ({ code }: { code: string }) => `エラーコード: ${code}`;
setErrorMessage(TestError, message, ["ja", "ko", "zh"]);

Reînregistrarea aceleiași clase și limbi suprascrie intrarea. Se aplică doar constructorilor identici la înregistrare și consultare, nu prin instanceof.

Comutarea limbilor

Comutați în configurația globală Valibot. message consultă lang curent la fiecare citire.

import { setGlobalConfig } from "valibot";

setGlobalConfig({ lang: "ja" });
console.log(error.message); // 日本語の登録メッセージ

setGlobalConfig({ lang: "en" });
console.log(error.message); // 英語の登録メッセージ or 既定メッセージ

lang nesetat este "en". Limbile neînregistrate folosesc mesajul implicit din constructor.

setErrorMessage(BusinessRuleError, () => "日本語メッセージ", "ja");

setGlobalConfig({ lang: "fr" });
console.log(error.message); // "Code: ERR, Limit: 50"(既定メッセージ)

Adăugarea unui prefix

static prefix este adăugat la începutul mesajului rezolvat. Se aplică mesajelor traduse și celor implicite.

class PrefixedError extends I18nErrorBase<{ code: string }> {
  static {
    this.prefix = "[ERROR] ";
  }
}

setErrorMessage(PrefixedError, ({ code }) => `code is ${code}`, "ja");
const error = new PrefixedError({ code: "ERR" }, "fallback");

setGlobalConfig({ lang: "ja" });
console.log(error.message); // "[ERROR] code is ERR"

setGlobalConfig({ lang: "en" });
console.log(error.message); // "[ERROR] fallback"

Când nu este setat, este returnat ca atare.

Comportamentul ca Error

  • error instanceof Error, instanceof I18nErrorBase și instanceof <clasa concretă> sunt toate true
  • String(error) / error.toString() includ mesajul rezolvat (de ex. "Error: ...")
  • cause este păstrat prin { cause }

Modele comune

Fixarea mesajului implicit în constructor

class BusinessRuleError extends I18nErrorBase<{ code: string; limit: number }> {
  public constructor(meta: { code: string; limit: number }, options?: ErrorOptions) {
    super(meta, ({ code, limit }) => `Code: ${code}, Limit: ${limit}`, options);
  }
}

Apelanții transmit doar meta, ceea ce evită duplicarea textului implicit.

Înregistrarea mai multor limbi deodată

setErrorMessage(MyError, "エラーが発生しました", ["ja"]);
setErrorMessage(MyError, "An error occurred", ["en", "en-US"]);

Codurile de limbă nu sunt normalizate. "en" și "en-US" sunt chei separate, deci înregistrați explicit codurile necesare.

Ți-a fost utilă această pagină?