الانتقال إلى المحتوى
i18n-error-base
العربية
Esc
↑↓تنقل↵فتح⌘Jمعاينة
في هذه الصفحة

الاستخدام

العمليات الأساسية لتعريف فئات الأخطاء وتسجيل الرسائل وتبديل اللغة والبادئة والتراجع.

التدفق الأساسي

تعريف فئة الخطأ

ورِّث 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" }

الوسيط الثاني سلسلة أو دالة (meta) => string. والثالث { 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" مفتاحان منفصلان، فسجِّل الرموز اللازمة صراحة.

هل كانت هذه الصفحة مفيدة؟