सामग्री पर जाएँ
i18n-error-base
हिन्दी
Esc
↑↓नेविगेट↵खोलें⌘Jप्रीव्यू
इस पेज पर

उपयोग

त्रुटि वर्ग की परिभाषा, संदेश पंजीकरण, भाषा परिवर्तन, prefix, फ़ॉलबैक की बुनियादी प्रक्रियाएँ।

बुनियादी प्रक्रिया

त्रुटि वर्ग परिभाषित करें

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" अलग कुंजी हैं, इसलिए आवश्यक कोड स्पष्ट रूप से पंजीकृत करें।

क्या यह पेज सहायक था?