Χρήση
Βασικές λειτουργίες ορισμού κλάσεων σφαλμάτων, καταχώρησης μηνυμάτων, εναλλαγής γλωσσών, προθεμάτων και εναλλακτικής χρήσης.
Βασική ροή
Ορίστε την κλάση σφάλματος
Επεκτείνετε το I18nErrorBase<TMeta> και ορίστε στο TMeta τις πληροφορίες για δημιουργία μηνυμάτων.
Καταχωρίστε μηνύματα ανά γλώσσα
Καταχωρίστε το μήνυμα για κλάση και γλώσσα με το setErrorMessage.
Αλλάξτε γλώσσα και διαβάστε το message
Αλλάξτε με το setGlobalConfig({ lang }) και διαβάστε το 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
Ορισμός κλάσης σφάλματος
Το TMeta είναι βοηθητική πληροφορία για δημιουργία μηνυμάτων. Διατηρείται στο error.meta και διαβιβάζεται στις καταχωρημένες συναρτήσεις.
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" }
Το 2ο όρισμα είναι συμβολοσειρά ή συνάρτηση (meta) => string. Το 3ο είναι { cause } και άλλες επιλογές Error.
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
Αν το TMeta είναι undefined, μπορείτε να παραλείψετε το meta.
class NoMetaError extends I18nErrorBase<undefined> {}
const a = new NoMetaError("no meta");
const b = new NoMetaError(undefined, "no meta");
console.log(a.meta); // undefined
Καταχώρηση μηνυμάτων
Το setErrorMessage καταχωρεί συναρτήσεις εργοστασίου ανά κλάση και γλώσσα.
import { I18nErrorBase, setErrorMessage } from "i18n-error-base";
class TestError extends I18nErrorBase<{ code: string }> {}
setErrorMessage(TestError, ({ code }) => `エラーコード: ${code}`, "ja");
setErrorMessage(TestError, "something went wrong", "en");
Επιτρέπονται και συμβολοσειρές. Οι γλώσσες μπορούν να δοθούν ως πίνακας.
const message = ({ code }: { code: string }) => `エラーコード: ${code}`;
setErrorMessage(TestError, message, ["ja", "ko", "zh"]);
Η εκ νέου καταχώρηση για την ίδια κλάση και γλώσσα αντικαθιστά. Ισχύει μόνο όταν οι κατασκευαστές κατά την καταχώρηση και την αναζήτηση ταυτίζονται, όχι μέσω instanceof.
Εναλλαγή γλώσσας
Αλλάξτε με την καθολική ρύθμιση του Valibot. Το message αναφέρεται στην τρέχουσα lang σε κάθε ανάγνωση.
import { setGlobalConfig } from "valibot";
setGlobalConfig({ lang: "ja" });
console.log(error.message); // 日本語の登録メッセージ
setGlobalConfig({ lang: "en" });
console.log(error.message); // 英語の登録メッセージ or 既定メッセージ
Η μη ορισμένη lang είναι "en". Οι μη καταχωρημένες γλώσσες χρησιμοποιούν το προεπιλεγμένο μήνυμα του κατασκευαστή.
setErrorMessage(BusinessRuleError, () => "日本語メッセージ", "ja");
setGlobalConfig({ lang: "fr" });
console.log(error.message); // "Code: ERR, Limit: 50"(既定メッセージ)
Προσθήκη προθέματος
Το static prefix προσαρτάται στην αρχή του επιλυμένου μηνύματος. Ισχύει και για τα μεταφρασμένα και για τα προεπιλεγμένα μηνύματα.
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"
Όταν δεν έχει οριστεί, επιστρέφεται ως έχει.
Συμπεριφορά ως Error
- Τα
error instanceof Error,instanceof I18nErrorBaseκαιinstanceofσυγκεκριμένης κλάσης είναι όλαtrue - Τα
String(error)/error.toString()περιλαμβάνουν το επιλυμένο μήνυμα (π.χ."Error: ...") - Το
causeδιατηρείται μέσω{ cause }
Συνήθη μοτίβα
Καθορισμός του προεπιλεγμένου μηνύματος στον κατασκευαστή
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);
}
}
Η πλευρά κλήσης δίνει μόνο το meta, αποφεύγοντας την επανάληψη του προεπιλεγμένου κειμένου.
Ομαδική καταχώρηση πολλών γλωσσών
setErrorMessage(MyError, "エラーが発生しました", ["ja"]);
setErrorMessage(MyError, "An error occurred", ["en", "en-US"]);
Δεν γίνεται κανονικοποίηση των κωδικών γλώσσας. Τα "en" και "en-US" είναι ξεχωριστά κλειδιά, οπότε καταχωρίστε ρητά όσους χρειάζεστε.