Creation:2025-02-07Last update:2026-05-19

    Markdown / रिच टेक्स्ट सामग्री

    Intlayer Markdown सिंटैक्स का उपयोग करके परिभाषित रिच टेक्स्ट सामग्री का समर्थन करता है। यह आपको ब्लॉग, लेख आदि जैसी समृद्ध-स्वरूपित सामग्री को आसानी से लिखने और बनाए रखने की अनुमति देता है।

    Markdown सामग्री घोषित करना

    आप md फ़ंक्शन का उपयोग करके या केवल एक स्ट्रिंग के रूप में (यदि इसमें Markdown सिंटैक्स है) Markdown सामग्री घोषित कर सकते हैं।

    संस्करण 8.10.0 से, आप सीधे .content.md फ़ाइलों में Markdown सामग्री घोषित कर सकते हैं। Intlayer स्वचालित रूप से Markdown सामग्री का पता लगाएगा और उसे पार्स करेगा।

    markdown-file.en.content.md
    ---key: my-markdown-contentdescription: मेरी सामग्रीlocale: en---# मेरी सामग्रीयहाँ एक मार्कडाउन सामग्री उदाहरण है

    locale फ्रंट-मैटर फ़ील्ड वह फ़ील्ड है जो सामग्री स्थानीय (locale) को परिभाषित करता है। यह वैकल्पिक है। यदि प्रदान नहीं किया जाता है, तो Intlayer डिफ़ॉल्ट स्थानीय का उपयोग करेगा, जिसे विशिष्ट स्थानीय के लिए कोई अनुवाद उपलब्ध नहीं होने पर फ़ॉलबैक स्थानीय के रूप में भी उपयोग किया जाता है।

    फ़ाइल संरचना उदाहरण:

    text
    content├── markdown-file.en.content.md├── markdown-file.fr.content.md└── markdown-file.es.content.md

    आप फ्रंट-मैटर में डिक्शनरी परिभाषा में परिभाषित कोई भी गुण जोड़ सकते हैं

    Markdown रेंडरिंग

    Intlayer Markdown रेंडर करने के दो स्वतंत्र तरीके प्रदान करता है:

    1. useIntlayer के माध्यम से — Intlayer स्वचालित रूप से md नोड को फ्रेमवर्क के मूल आउटपुट (JSX, VNode, HTML स्ट्रिंग) में बदल देता है।

      • फ्रंटमैटर को पार्स किया जाता है और .metadata के रूप में उजागर किया जाता है। आप रेंडरिंग को दो स्तरों पर ओवरराइड कर सकते हैं — विश्व स्तर पर MarkdownProvider (या फ्रेमवर्क समतुल्य) के साथ और स्थानीय स्तर पर प्रति नोड .use() के साथ। दोनों को जोड़ा जा सकता है; .use(), MarkdownProvider पर पूर्वता लेता है, जो डिफ़ॉल्ट पर पूर्वता लेता है।
    2. हेल्पर यूटिलिटीज<MarkdownRenderer />, useMarkdownRenderer(), और renderMarkdown() स्टैंडअलोन टूल हैं जो केवल कच्चे Markdown स्ट्रिंग्स को स्वीकार करते हैं। वे useIntlayer से स्वतंत्र हैं और इसके द्वारा लौटाए गए सजाए गए नोड्स के साथ काम नहीं करते हैं।

    Markdown रेंडरिंग MDX का समर्थन करता है — अपने Markdown के अंदर सीधे नाम से किसी भी JSX/फ्रेमवर्क घटक का उपयोग करें।

    1. स्वचालित रेंडरिंग (useIntlayer के माध्यम से)

    Markdown नोड्स को सीधे JSX के रूप में रेंडर किया जा सकता है।

    App.tsx
    import { useIntlayer } from "react-intlayer";import { MarkdownProvider } from "react-intlayer/markdown";const AppContent = () => {  const { myMarkdownContent } = useIntlayer("app");  return <div>{myMarkdownContent}</div>;};const App = () => (  <MarkdownProvider    components={{      h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,      MyButton: (props) => <button {...props} />, // MDX घटक    }}  >    <AppContent />  </MarkdownProvider>);
    यदि MarkdownProvider मौजूद नहीं है, तो Intlayer डिफ़ॉल्ट Markdown से JSX पार्सर का उपयोग करके मार्कडाउन को रेंडर करेगा।

    आप .use() विधि का उपयोग करके विशिष्ट नोड्स के लिए स्थानीय ओवरराइड भी प्रदान कर सकते हैं:

    tsx
    {myMarkdownContent.use({  h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,})}

    आप Markdown को एक स्ट्रिंग के रूप में प्राप्त कर सकते हैं:

    tsx
    {myMarkdownContent.value}{String(myMarkdownContent)}{myMarkdownContent.toString()}

    और आप अपने मार्कडाउन मेटाडेटा तक इस प्रकार पहुँच सकते हैं:

    tsx
    {myMarkdownContent.metadata}{myMarkdownContent.metadata.title}

    2. हेल्पर यूटिलिटीज (केवल Markdown स्ट्रिंग्स)

    ये यूटिलिटीज केवल कच्चे Markdown स्ट्रिंग्स को रेंडर करती हैं और useIntlayer से स्वतंत्र हैं। जब आपको अपने डिक्शनरी के अलावा अन्य स्रोतों से Markdown रेंडर करने की आवश्यकता हो, तो इनका उपयोग करें।

    <MarkdownRenderer /> घटक

    विशिष्ट विकल्पों के साथ एक Markdown स्ट्रिंग रेंडर करता है।

    tsx
    import { MarkdownRenderer } from "react-intlayer/markdown";<MarkdownRenderer forceBlock={true} tagfilter={true}>  {"# मेरा शीर्षक"}</MarkdownRenderer>

    useMarkdownRenderer() हुक

    पूर्व-कॉन्फ़िगर रेंडरर फ़ंक्शन प्राप्त करें।

    tsx
    import { useMarkdownRenderer } from "react-intlayer/markdown";const renderMarkdown = useMarkdownRenderer({  forceBlock: true,  components: { h1: (props) => <h1 {...props} className="custom" /> }});return renderMarkdown("# मेरा शीर्षक");

    renderMarkdown() उपयोगिता

    घटकों के बाहर रेंडरिंग के लिए स्टैंडअलोन उपयोगिता।

    tsx
    import { renderMarkdown } from "react-intlayer/markdown";const jsx = renderMarkdown("# मेरा शीर्षक", { forceBlock: true });

    MarkdownProvider के साथ ग्लोबल कॉन्फ़िगरेशन

    MarkdownProvider (या इसके फ्रेमवर्क समतुल्य) आपके संपूर्ण एप्लिकेशन के लिए Markdown रेंडरिंग पाइपलाइन को कॉन्फ़िगर करता है। यह स्वचालित useIntlayer रेंडरिंग और हेल्पर यूटिलिटीज दोनों पर लागू होता है। यहाँ सेट किए गए विकल्प डिफ़ॉल्ट हैं — .use() उन्हें नोड स्तर पर ओवरराइड करता है।

    AppProvider.tsx
    import { MarkdownProvider } from "react-intlayer/markdown";export const AppProvider = ({ children }) => (  <MarkdownProvider    components={{      h1: (props) => <h1 style={{color: 'green'}} {...props} />,      a: ({ href, ...props }) => <a style={{color: 'red'}} {...props} />,      MyCustomJSXComponent: (props) => <span style={{color: 'red'}} {...props} />,    }}  >    {children}  </MarkdownProvider>);
    MDX समर्थित है — आपके Markdown के अंदर उपयोग किए गए किसी भी घटक नाम (उदा. <MyCustomJSXComponent />) को components मानचित्र के विरुद्ध हल किया जाता है।

    आप अपने स्वयं के मार्कडाउन रेंडरर का भी उपयोग कर सकते हैं:

    AppProvider.tsx
    import { MarkdownProvider } from "react-intlayer/markdown";export const AppProvider = ({ children }) => (  <MarkdownProvider    renderMarkdown={async (md) => {      // Use dynamic import to reduce the bundle size of your application      const { renderMarkdown } = await import('react-intlayer/markdown');      return renderMarkdown(md);    }}  >    {children}  </MarkdownProvider>);
    अपने Markdown रेंडरर को गतिशील रूप से आयात करना आपके एप्लिकेशन के बंडल आकार को कम करने का एक शानदार तरीका है।

    सस्पेंस (Suspense)

    Intlayer Markdown रेंडरर गतिशील रूप से लोड किया गया है। अनुकूलित होने के बावजूद, अंतर्निहित पार्सर चंक लगभग 55kb है। इसे सिंक्रोनस रूप से लोड करने से प्रारंभिक पृष्ठ रेंडरिंग में देरी होती है और First Contentful Paint (FCP) कम हो जाता है।

    UI को ब्लॉक होने से रोकने के लिए, Intlayer React के Suspense API के साथ एकीकृत होता है। यह पार्सर को पृष्ठभूमि में लाता है और डाउनलोड के दौरान एक Promise थ्रो करता है।

    Intlayer Markdown रेंडर करने वाले किसी भी घटक को <Suspense> बाउंड्री में लपेटें। यह चंक डाउनलोड होने के दौरान एक स्थानीयकृत फ़ॉलबैक स्थिति प्रदर्शित करता है, जिससे आपके शेष DOM को तुरंत रेंडर करने की अनुमति मिलती है।

    चेतावनी: यदि आप <Suspense> बाउंड्री प्रदान नहीं करते हैं, तो 55kb चंक पूरी तरह से लोड होने तक React रूट स्तर पर निलंबित हो जाएगा या पूरे घटक ट्री को रेंडर होने से रोक देगा।

    Next.js ऐप राउटर में, आप क्लाइंट घटकों के लिए React Suspense या सर्वर घटकों के लिए loading.tsx फ़ाइल का उपयोग कर सकते हैं।

    क्लाइंट घटक:

    components/MyComponent.tsx
    "use client";import { useIntlayer } from "next-intlayer";import { Suspense } from "react";const MyComponent = () => {const markdownContent = useIntlayer("my-markdown");return (  <Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>);};

    loading.tsx के साथ सर्वर घटक:

    app/loading.tsx
    export default function Loading() {return <div>Loading...</div>;}
    app/page.tsx
    import { useIntlayer } from "next-intlayer/server";const MyPage = () => {const markdownContent = useIntlayer("my-markdown");return <div>{markdownContent}</div>;};export default MyPage;

    सर्वर-साइड रेंडरिंग (SSR) और हाइड्रेशन

    अन्य मार्कडाउन पार्सर जैसे remark / rehype की तुलना में, Intlayer Markdown पूरी तरह से निर्भरता-मुक्त है और क्लाइंट तथा सर्वर दोनों साइड पर चलता है।

    लेकिन Intlayer ने सर्वर-साइड रेंडरिंग (SSR) फ्रेमवर्क (जैसे Next.js App Router, React Router, Nuxt, SvelteKit, आदि) के लिए पार्सिंग को अनुकूलित किया है।

    क्लाइंट को रॉ मार्कडाउन स्ट्रिंग्स भेजने और ब्राउज़र पर उन्हें पार्स करने के बजाय (जिससे प्रदर्शन प्रभावित होता है), Intlayer आपको सर्वर पर ही मार्कडाउन को एब्सट्रैक्ट सिंटैक्स ट्री (AST) में प्री-पार्स करने की अनुमति देता है।

    आप सर्वर साइड पर अपने फ्रेमवर्क के Intlayer पैकेज से parseMarkdown फ़ंक्शन का उपयोग करके एक सीरियलाइज़ेबल AST (ParsedMarkdown ऑब्जेक्ट) बना सकते हैं, और इसे सीधे फ़्रंटएंड पर पास कर सकते हैं। सभी Intlayer रेंडरिंग उपयोगिताएँ (जैसे <MarkdownRenderer>, useMarkdownRenderer, आदि) स्वचालित रूप से इस AST ऑब्जेक्ट को स्वीकार करती हैं और इसे बिना किसी बाधा के रेंडर करती हैं।

    सर्वर/क्लाइंट आर्किटेक्चर में उदाहरण

    server.ts
    import { parseMarkdown } from "react-intlayer/markdown";// 1. सर्वर पर: मार्कडाउन को एक सीरियलाइज़ेबल AST में पार्स करेंexport const loader = async () => {  const markdownString = "## My title \n\nLorem Ipsum";  const ast = parseMarkdown(markdownString);  // AST को JSON के रूप में क्लाइंट को वापस करें  return Response.json({ content: ast });};
    client.tsx
    import { useLoaderData } from "react-router";import { MarkdownRenderer } from "react-intlayer/markdown";// 2. क्लाइंट पर: बिना री-पार्स किए सीधे AST रेंडर करेंexport default function Page() {  const { content } = useLoaderData();  // रेंडरर रॉ स्ट्रिंग या पार्स किए गए AST दोनों को स्वीकार करता है  return <MarkdownRenderer content={content} />;}

    यह पैटर्न यह सुनिश्चित करता है कि मार्कडाउन पार्सिंग लॉजिक पूरी तरह से सर्वर पर निष्पादित हो, जिससे क्लाइंट-साइड निष्पादन समय काफी कम हो जाता है और प्रारंभिक हाइड्रेशन गति में सुधार होता है।

    विकल्प संदर्भ

    इन विकल्पों को MarkdownProvider, MarkdownRenderer, useMarkdownRenderer और renderMarkdown में पास किया जा सकता है।

    Option Type Default विवरण
    forceBlock boolean false आउटपुट को ब्लॉक-स्तरीय तत्व (उदा., <div>) में लपेटने के लिए बाध्य करता है।
    forceInline boolean false आउटपुट को इनलाइन तत्व (उदा., <span>) में लपेटने के लिए बाध्य करता है।
    tagfilter boolean true खतरनाक HTML टैग को हटाकर सुरक्षा में सुधार के लिए GitHub टैग फ़िल्टर को सक्षम करता है।
    preserveFrontmatter boolean false यदि true है, तो Markdown स्ट्रिंग के प्रारंभ में फ्रंटमैटर को नहीं हटाया जाएगा।
    components Overrides {} कस्टम घटकों के लिए HTML टैग का मानचित्र (उदा., { h1: MyHeading })।
    wrapper Component null रेंडर किए गए Markdown को लपेटने के लिए एक कस्टम घटक।
    renderMarkdown Function null डिफ़ॉल्ट Markdown कंपाइलर को पूरी तरह से बदलने के लिए एक कस्टम रेंडरिंग फ़ंक्शन।