Hopp til innhold
i18n-error-base
Norsk
Esc
↑↓naviger↵åpne⌘Jforhåndsvis
På denne siden

Bruk

Grunnleggende operasjoner for å definere feilklasser, registrere meldinger, bytte språk, prefiks og fallback.

Grunnleggende flyt

Definer en feilklasse

Arv fra I18nErrorBase<TMeta> og definer info for meldingsgenerering i TMeta.

Registrer meldinger per språk

Registrer meldingen per klasse og språk med setErrorMessage.

Bytt språk og les message

Bytt med setGlobalConfig({ lang }) og les 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

Definer en feilklasse

TMeta er hjelpeinfo for meldingsgenerering. Den beholdes som error.meta og sendes til registrerte funksjoner.

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" }

Det andre konstruktørargumentet er en streng eller en (meta) => string-funksjon. Det tredje er { cause } og andre Error-alternativer.

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

Hvis du setter TMeta til undefined, kan du utelate meta.

class NoMetaError extends I18nErrorBase<undefined> {}

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

Registrer meldinger

setErrorMessage registrerer fabrikkfunksjoner per klasse og språk.

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

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

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

Strenger er også tillatt. Språk kan angis som matriser.

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

Å registrere samme klasse og språk på nytt overskriver. Den gjelder bare når konstruktørene ved registrering og oppslag er identiske, ikke via instanceof.

Bytt språk

Bytt med Valibots globale konfigurasjon. message refererer til gjeldende lang ved hver aksess.

import { setGlobalConfig } from "valibot";

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

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

Usatt lang er "en". Uregistrerte språk bruker konstruktørens standardmelding.

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

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

Legg til et prefiks

static prefix legges til foran den løste meldingen. Det gjelder både oversatte meldinger og standardmeldinger.

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"

Når det ikke er satt, returneres meldingen som den er.

Oppførsel som Error

  • error instanceof Error, instanceof I18nErrorBase og instanceof <konkret klasse> er alle true
  • String(error) / error.toString() inkluderer den løste meldingen (f.eks. "Error: ...")
  • cause beholdes via { cause }

Vanlige mønstre

Lås standardmeldingen i konstruktøren

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);
  }
}

Den som kaller, sender bare meta, noe som unngår duplisering av standardteksten.

Registrer flere språk samtidig

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

Språkkoder normaliseres ikke. "en" og "en-US" er separate nøkler, så registrer nødvendige koder eksplisitt.

Var denne siden nyttig?