Spring til indhold
i18n-error-base
Dansk
Esc
↑↓navigér↵åbn⌘Jforhåndsvis
På denne side

Brug

Grundlæggende arbejdsgang for at definere fejlklasser, registrere meddelelser, skifte sprog, præfiks og fallback.

Grundforløb

Definér en fejlklasse

Nedarv I18nErrorBase<TMeta>, og definér info til meddelelsesgenerering i TMeta.

Registrer sprogspecifikke meddelelser

Registrer meddelelsen for hver klasse og hvert sprog med setErrorMessage.

Skift sprog og læs message

Skift med setGlobalConfig({ lang }), og læs 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

Definér en fejlklasse

TMeta er hjælpeinfo til meddelelsesgenerering. Den beholdes som error.meta og sendes til registrerede funktioner.

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

Konstruktørens andet argument er en streng eller en (meta) => string-funktion. Det tredje er { cause } og andre Error-indstillinger.

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 sætter TMeta til undefined, kan du udelade 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 meddelelser

setErrorMessage registrerer fabriksfunktioner pr. klasse og sprog.

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

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

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

Strenge er også tilladt. Sprog kan angives som arrays.

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

Genregistrering af samme klasse og sprog overskriver. Den gælder kun, når konstruktørerne ved registrering og opslag er ens, ikke via instanceof.

Skift sprog

Skift med Valibots globale indstilling. message slår den aktuelle lang op ved hver adgang.

import { setGlobalConfig } from "valibot";

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

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

Uden angivet lang er den "en". Uregistrerede sprog bruger konstruktørens standardmeddelelse.

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

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

Tilføj et præfiks

static prefix sættes foran den løste meddelelse. Det gælder både oversatte meddelelser og standardmeddelelser.

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 angivet, returneres meddelelsen som den er.

Opførsel som Error

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

Almindelige mønstre

Fastlås standardmeddelelsen 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);
  }
}

Kalderen skal kun sende meta, så dublering af standardteksten undgås.

Registrer flere sprog på én gang

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

Sprogkoder normaliseres ikke. "en" og "en-US" er separate nøgler, så registrer de nødvendige koder eksplicit.

Var denne side nyttig?