Gebruik
Basisbewerkingen voor het definiëren van foutklassen, het registreren van berichten, het wisselen van taal, prefix en fallback.
Basisflow
Een foutklasse definiëren
Erf over van I18nErrorBase<TMeta> en definieer info voor het genereren van berichten in TMeta.
Berichten per taal registreren
Registreer met setErrorMessage het bericht per klasse en taal.
Van taal wisselen en message lezen
Wissel met setGlobalConfig({ lang }) en lees 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
Een foutklasse definiëren
TMeta is aanvullende info voor het genereren van berichten. Het wordt bewaard als error.meta en doorgegeven aan geregistreerde functies.
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" }
Het tweede constructorargument is een tekenreeks of een (meta) => string-functie. Het derde is { cause } en andere Error-opties.
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
Als je TMeta op undefined instelt, kun je meta weglaten.
class NoMetaError extends I18nErrorBase<undefined> {}
const a = new NoMetaError("no meta");
const b = new NoMetaError(undefined, "no meta");
console.log(a.meta); // undefined
Berichten registreren
setErrorMessage registreert fabrieksfuncties per klasse en taal.
import { I18nErrorBase, setErrorMessage } from "i18n-error-base";
class TestError extends I18nErrorBase<{ code: string }> {}
setErrorMessage(TestError, ({ code }) => `エラーコード: ${code}`, "ja");
setErrorMessage(TestError, "something went wrong", "en");
Tekenreeksen zijn ook toegestaan. Talen kunnen als arrays worden opgegeven.
const message = ({ code }: { code: string }) => `エラーコード: ${code}`;
setErrorMessage(TestError, message, ["ja", "ko", "zh"]);
Opnieuw registreren voor dezelfde klasse en taal overschrijft. Het geldt alleen wanneer de constructors bij registratie en opzoeken overeenkomen, niet via instanceof.
Van taal wisselen
Wissel via de globale instelling van Valibot. message verwijst bij elke toegang naar de actuele lang.
import { setGlobalConfig } from "valibot";
setGlobalConfig({ lang: "ja" });
console.log(error.message); // 日本語の登録メッセージ
setGlobalConfig({ lang: "en" });
console.log(error.message); // 英語の登録メッセージ or 既定メッセージ
Niet-ingestelde lang is "en". Niet-geregistreerde talen gebruiken het standaardbericht uit de constructor.
setErrorMessage(BusinessRuleError, () => "日本語メッセージ", "ja");
setGlobalConfig({ lang: "fr" });
console.log(error.message); // "Code: ERR, Limit: 50"(既定メッセージ)
Een voorvoegsel toevoegen
static prefix wordt vooraan het opgeloste bericht geplaatst. Dit geldt voor zowel vertaalde als standaardberichten.
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"
Wanneer niet ingesteld, wordt het bericht zoals het is teruggegeven.
Gedrag als Error
error instanceof Error,instanceof I18nErrorBaseeninstanceof <concrete klasse>zijn alletrueString(error)/error.toString()bevat het opgeloste bericht (bijv."Error: ...")causewordt bewaard via{ cause }
Veelvoorkomende patronen
Het standaardbericht vastzetten in de 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);
}
}
Aanroepers hoeven alleen meta door te geven en voorkomen zo duplicatie van de standaardtekst.
Meerdere talen tegelijk registreren
setErrorMessage(MyError, "エラーが発生しました", ["ja"]);
setErrorMessage(MyError, "An error occurred", ["en", "en-US"]);
Taalcodes worden niet genormaliseerd. "en" en "en-US" zijn afzonderlijke sleutels, dus registreer benodigde codes expliciet.