Creation:2025-04-18Last update:2026-05-31

    Intlayer के साथ अपनी Vite और Preact वेबसाइट का अनुवाद करें | अंतर्राष्ट्रीयकरण (i18n)

    www.youtube.com

    विषय सूची

    विकल्पों पर इन्टलेयर क्यों?

    प्रीएक्ट-आई18एन या आई18नेक्स्ट जैसे मुख्य समाधानों की तुलना में, इंटलेयर एक ऐसा समाधान है जो एकीकृत अनुकूलन के साथ आता है जैसे:

    पूर्ण प्रीएक्ट कवरेज

    इंटलेयर को घटक-स्तरीय सामग्री स्कोपिंग, आलसी-लोड किए गए अनुवाद, और स्केलिंग अंतर्राष्ट्रीयकरण (i18n) के लिए आवश्यक सभी सुविधाओं की पेशकश करके प्रीएक्ट के साथ पूरी तरह से काम करने के लिए अनुकूलित किया गया है।

    बंडल का आकार

    अपने पृष्ठों में विशाल JSON फ़ाइलें लोड करने के बजाय, केवल आवश्यक सामग्री लोड करें। इंटलेयर आपके बंडल और पृष्ठ आकार को 50% तक कम करने में मदद करता है।

    रखरखाव

    आपके एप्लिकेशन की सामग्री का दायरा बड़े पैमाने के अनुप्रयोगों के लिए रखरखाव की सुविधा प्रदान करता है। आप अपने संपूर्ण सामग्री कोडबेस की समीक्षा करने के मानसिक बोझ के बिना किसी एक फीचर फ़ोल्डर की नकल कर सकते हैं या उसे हटा सकते हैं। इसके अतिरिक्त, आपकी सामग्री की सटीकता सुनिश्चित करने के लिए Intlayer पूरी तरह से टाइप किया गया है।

    एआई एजेंट

    सामग्री का सह-स्थानीकरण बड़े भाषा मॉडल (एलएलएम) द्वारा आवश्यक संदर्भ को कम करता है। इंटलेयर टूल के एक सूट के साथ भी आता है, जैसे CLI ताकि लापता अनुवादों का परीक्षण किया जा सके,LSP, MCP, और एजेंट कौशल, AI एजेंटों के लिए डेवलपर अनुभव (DX) को और भी आसान बनाने के लिए।

    स्वचालन

    अपने एआई प्रदाता की कीमत पर अपनी पसंद के एलएलएम का उपयोग करके अपने सीआई/सीडी पाइपलाइन में अनुवाद करने के लिए स्वचालन का उपयोग करें। इंटलेयर सामग्री निष्कर्षण को स्वचालित करने के लिए एक कंपाइलर के साथ-साथ पृष्ठभूमि में अनुवाद में मदद करने के लिए एक वेब प्लेटफ़ॉर्म भी प्रदान करता है।

    प्रदर्शन

    बड़े पैमाने पर JSON फ़ाइलों को घटकों से जोड़ने से प्रदर्शन और प्रतिक्रियाशीलता संबंधी समस्याएं हो सकती हैं। इंटलेयर बिल्ड समय पर आपकी सामग्री लोडिंग को अनुकूलित करता है।

    किसी भी देव के साथ स्केलिंग

    सिर्फ एक i18n समाधान से अधिक, Intlayer एक स्व-होस्टेड विज़ुअल एडिटर और एक [पूर्ण] प्रदान करता है सीएमएस](/hi/doc/concept/cms) आपकी बहुभाषी सामग्री को वास्तविक समय में प्रबंधित करने में मदद करता है, जिससे अनुवादकों, कॉपीराइटरों और टीम के अन्य सदस्यों के साथ सहयोग सहज हो जाता है। सामग्री को स्थानीय और/या दूरस्थ रूप से संग्रहीत किया जा सकता है।


    Vite और Preact एप्लिकेशन में Intlayer सेटअप करने के लिए चरण-दर-चरण मार्गदर्शिका

    GitHub पर Application Template देखें।

    1. निर्भरताएँ इंस्टॉल करें

      npm का उपयोग करके आवश्यक पैकेज इंस्टॉल करें:

      bash
      npm install intlayer preact-intlayernpm install vite-intlayer --save-devnpx intlayer init
      • intlayer

        मुख्य पैकेज जो कॉन्फ़िगरेशन प्रबंधन, अनुवाद, सामग्री घोषणा, ट्रांसपाइलेशन, और CLI कमांड्स के लिए अंतरराष्ट्रीयकरण उपकरण प्रदान करता है।

      • preact-intlayer

        वह पैकेज जो Intlayer को Preact एप्लिकेशन के साथ एकीकृत करता है। यह Preact अंतरराष्ट्रीयकरण के लिए संदर्भ प्रदाता और हुक्स प्रदान करता है।

      • vite-intlayer

        इसमें Vite प्लगइन शामिल है जो Intlayer को Vite बंडलर के साथ एकीकृत करता है, साथ ही उपयोगकर्ता की पसंदीदा लोकल का पता लगाने, कुकीज़ प्रबंधित करने, और URL पुनर्निर्देशन को संभालने के लिए मिडलवेयर भी शामिल है।

    2. अपने प्रोजेक्ट का कॉन्फ़िगरेशन

      अपने एप्लिकेशन की भाषाओं को कॉन्फ़िगर करने के लिए एक कॉन्फ़िग फाइल बनाएं:

      intlayer.config.ts
      import { Locales, type IntlayerConfig } from "intlayer";
      
      const config: IntlayerConfig = {
        internationalization: {
          locales: [
            Locales.ENGLISH,
            Locales.FRENCH,
            Locales.SPANISH,
            // आपकी अन्य भाषाएँ
          ],
          defaultLocale: Locales.ENGLISH,
        },
        routing: {
          mode: "prefix-no-default", // डिफ़ॉल्ट: डिफ़ॉल्ट लोकल को छोड़कर सभी लोकल को उपसर्ग दें
          storage: ["cookie", "header"], // डिफ़ॉल्ट: कुकी में लोकल स्टोर करें और हेडर से डिटेक्ट करें
        },
      };
      
      export default config;
      इस कॉन्फ़िगरेशन फ़ाइल के माध्यम से, आप स्थानीयकृत URL, रूटिंग मोड, स्टोरेज विकल्प, कुकी नाम, आपकी सामग्री घोषणाओं का स्थान और एक्सटेंशन सेट कर सकते हैं, कंसोल में Intlayer लॉग को अक्षम कर सकते हैं, और भी बहुत कुछ। उपलब्ध सभी पैरामीटर की पूरी सूची के लिए, कृपया कॉन्फ़िगरेशन दस्तावेज़ देखें।
    3. अपने Vite कॉन्फ़िगरेशन में Intlayer को एकीकृत करें

      अपने कॉन्फ़िगरेशन में intlayer प्लगइन जोड़ें।

      vite.config.ts
      import { defineConfig } from "vite";
      import preact from "@preact/preset-vite";
      import { intlayer } from "vite-intlayer";
      
      // https://vitejs.dev/config/
      export default defineConfig({
        plugins: [preact(), intlayer()],
      });
      intlayer() Vite प्लगइन का उपयोग Intlayer को Vite के साथ एकीकृत करने के लिए किया जाता है। यह कंटेंट घोषणा फ़ाइलों के निर्माण को सुनिश्चित करता है और विकास मोड में उन्हें मॉनिटर करता है। यह Vite एप्लिकेशन के भीतर Intlayer पर्यावरण चर को परिभाषित करता है। इसके अतिरिक्त, यह प्रदर्शन को अनुकूलित करने के लिए उपनाम प्रदान करता है।
    4. अपनी सामग्री घोषित करें

      अनुवाद संग्रहीत करने के लिए अपनी सामग्री घोषणाएँ बनाएं और प्रबंधित करें:

      src/app.content.tsx
      import { t, type Dictionary } from "intlayer";import type { ComponentChildren } from "preact";const appContent = {  key: "app",  content: {    viteLogo: t({      en: "Vite logo",      fr: "Logo Vite",      es: "Logo Vite",    }),    preactLogo: t({      en: "Preact logo",      fr: "Logo Preact",      es: "Logo Preact",    }),    title: "Vite + Preact",    count: t({      en: "count is ",      fr: "le compte est ",      es: "el recuento es ",    }),    edit: t<ComponentChildren>({      en: (        <>          Edit <code>src/app.tsx</code> and save to test HMR        </>      ),      fr: (        <>          Éditez <code>src/app.tsx</code> et enregistrez pour tester HMR        </>      ),      es: (        <>          Edita <code>src/app.tsx</code> y guarda para probar HMR        </>      ),    }),    readTheDocs: t({      en: "Click on the Vite and Preact logos to learn more",      fr: "Cliquez sur les logos Vite et Preact pour en savoir plus",      es: "Haga clic en los logotipos de Vite y Preact para obtener más información",    }),  },} satisfies Dictionary;export default appContent;
      आपकी सामग्री घोषणाएँ आपके एप्लिकेशन में कहीं भी परिभाषित की जा सकती हैं जब तक कि वे contentDir निर्देशिका (डिफ़ॉल्ट रूप से, ./src) में शामिल हों। और सामग्री घोषणा फ़ाइल एक्सटेंशन से मेल खाती हों (डिफ़ॉल्ट रूप से, .content.{json,ts,tsx,js,jsx,mjs,cjs})।
      अधिक विवरण के लिए, सामग्री घोषणा दस्तावेज़ देखें।
      यदि आपकी सामग्री फ़ाइल में TSX कोड शामिल है, तो आपको import { h } from "preact"; आयात करने की आवश्यकता हो सकती है या सुनिश्चित करें कि आपका JSX प्रैग्मा Preact के लिए सही ढंग से सेट है।
    5. अपने कोड में Intlayer का उपयोग करें

      अपने एप्लिकेशन में अपनी सामग्री शब्दकोशों तक पहुँचें:

      src/app.tsx
      import { useState } from "preact/hooks";
      import type { FunctionalComponent } from "preact";
      import preactLogo from "./assets/preact.svg"; // मान लेते हैं कि आपके पास preact.svg है
      import viteLogo from "/vite.svg";
      import "./app.css"; // मान लेते हैं कि आपकी CSS फ़ाइल का नाम app.css है
      import { IntlayerProvider, useIntlayer } from "preact-intlayer";
      
      const AppContent: FunctionalComponent = () => {
        const [count, setCount] = useState(0);
        const content = useIntlayer("app");
      
        return (
          <>
            <div>
              <a href="https://vitejs.dev" target="_blank">
                <img src={viteLogo} class="logo" alt={content.viteLogo.value} />
              </a>
              <a href="https://preactjs.com" target="_blank">
                <img
                  src={preactLogo}
                  class="logo preact"
                  alt={content.preactLogo.value}
                />
              </a>
            </div>
            <h1>{content.title}</h1>
            <div class="card">
              <button onClick={() => setCount((count) => count + 1)}>
                {content.count}
                {count}
              </button>
              <p>{content.edit}</p>
            </div>
            {/* Markdown सामग्री */}
            <div>{content.myMarkdownContent}</div>
      
            {/* HTML सामग्री */}
            <div>{content.myHtmlContent}</div>
      
            <p class="read-the-docs">{content.readTheDocs}</p>
          </>
        );
      };
      
      const App: FunctionalComponent = () => (
        <IntlayerProvider>
          <AppContent />
        </IntlayerProvider>
      );
      
      export default App;
      यदि आप अपने कंटेंट का उपयोग किसी string एट्रिब्यूट में करना चाहते हैं, जैसे कि alt, title, href, aria-label, आदि, तो आपको फ़ंक्शन के मान को कॉल करना होगा, जैसे:
      html
      <img src="{content.image.src.value}" alt="{content.image.value}" /><img src="{content.image.src.toString()}" alt="{content.image.toString()}" /><img src="{String(content.image.src)}" alt="{String(content.image)}" />
      नोट: Preact में, className आमतौर पर class के रूप में लिखा जाता है।
      useIntlayer हुक के बारे में अधिक जानने के लिए, दस्तावेज़ देखें (API preact-intlayer के लिए समान है)।
      यदि आपका ऐप पहले से मौजूद है, तो आप हजारों घटकों को एक सेकंड में बदलने के लिए Intlayer कंपाइलर को एक्सट्रैक्ट कमांड के साथ उपयोग कर सकते हैं।
    6. अपनी सामग्री की भाषा बदलें

      वैकल्पिक

      अपनी सामग्री की भाषा बदलने के लिए, आप useLocale हुक द्वारा प्रदान किया गया setLocale फ़ंक्शन उपयोग कर सकते हैं। यह फ़ंक्शन आपको एप्लिकेशन की लोकल सेट करने और सामग्री को तदनुसार अपडेट करने की अनुमति देता है।

      src/components/LocaleSwitcher.tsx
      import type { FunctionalComponent } from "preact";
      import { Locales } from "intlayer";
      import { useLocale } from "preact-intlayer";
      
      const LocaleSwitcher: FunctionalComponent = () => {
        const { setLocale } = useLocale();
      
        return (
          <button onClick={() => setLocale(Locales.ENGLISH)}>
            Change Language to English
          </button>
        );
      };
      
      export default LocaleSwitcher;
      useLocale हुक के बारे में अधिक जानने के लिए, प्रलेखन देखें (API preact-intlayer के लिए समान है)।
    7. अपने एप्लिकेशन में स्थानीयकृत रूटिंग जोड़ें

      वैकल्पिक

      इस चरण का उद्देश्य प्रत्येक भाषा के लिए अद्वितीय रूट बनाना है। यह SEO और SEO-अनुकूल URL के लिए उपयोगी है। उदाहरण:

      plaintext
      - https://example.com/about- https://example.com/es/about- https://example.com/fr/about
      डिफ़ॉल्ट रूप से, डिफ़ॉल्ट लोकल के लिए रूट्स को कोई उपसर्ग नहीं दिया जाता है। यदि आप डिफ़ॉल्ट लोकल के लिए उपसर्ग जोड़ना चाहते हैं, तो आप अपनी कॉन्फ़िगरेशन में routing.mode विकल्प को "prefix-all" पर सेट कर सकते हैं। अधिक जानकारी के लिए कॉन्फ़िगरेशन दस्तावेज़ देखें।

      अपने एप्लिकेशन में स्थानीयकृत रूटिंग जोड़ने के लिए, आप एक LocaleRouter कॉम्पोनेंट बना सकते हैं जो आपके एप्लिकेशन के रूट्स को लपेटता है और लोकल-आधारित रूटिंग को संभालता है। यहाँ preact-iso का उपयोग करते हुए एक उदाहरण दिया गया है:

      src/components/LocaleRouter.tsx
      import { localeMap } from "intlayer";
      import { IntlayerProvider } from "preact-intlayer";
      import { LocationProvider, Router, Route } from "preact-iso";
      import type { ComponentChildren, FunctionalComponent } from "preact";
      
      /**
       * एक राउटर कॉम्पोनेंट जो लोकल-विशिष्ट रूट्स सेटअप करता है।
       * यह नेविगेशन प्रबंधित करने और स्थानीयकृत कॉम्पोनेंट्स को रेंडर करने के लिए preact-iso का उपयोग करता है।
       */
      export const LocaleRouter: FunctionalComponent<{
        children: ComponentChildren;
      }> = ({ children }) => (
        <LocationProvider>
          <Router>
            {localeMap(({ locale, urlPrefix }) => ({ locale, urlPrefix }))
              .sort((a, b) => b.urlPrefix.length - a.urlPrefix.length)
              .map(({ locale, urlPrefix }) => (
                <Route
                  key={locale}
                  path={`${urlPrefix}/:rest*`}
                  component={() => (
                    <IntlayerProvider locale={locale}>{children}</IntlayerProvider>
                  )}
                />
              ))}
          </Router>
        </LocationProvider>
      );

      फिर, आप अपने एप्लिकेशन में LocaleRouter कॉम्पोनेंट का उपयोग कर सकते हैं:

      src/app.tsx
      import { LocaleRouter } from "./components/LocaleRouter";
      import type { FunctionalComponent } from "preact";
      
      // ... आपका AppContent कॉम्पोनेंट
      
      const App: FunctionalComponent = () => (
        <LocaleRouter>
          <AppContent />
        </LocaleRouter>
      );
      
      export default App;
    8. लोकल बदलने पर URL बदलें

      वैकल्पिक

      लोकल बदलने पर URL बदलने के लिए, आप useLocale हुक द्वारा प्रदान किए गए onLocaleChange प्रॉप का उपयोग कर सकते हैं। साथ ही, आप URL पथ अपडेट करने के लिए preact-iso के useLocation से route विधि का उपयोग कर सकते हैं।

      src/components/LocaleSwitcher.tsx
      import { useLocation } from "preact-iso";
      import {
        Locales,
        getHTMLTextDir,
        getLocaleName,
        getLocalizedUrl,
      } from "intlayer";
      import { useLocale } from "preact-intlayer";
      import type { FunctionalComponent } from "preact";
      
      const LocaleSwitcher: FunctionalComponent = () => {
        const { url, route } = useLocation();
        const { locale, availableLocales, setLocale } = useLocale({
          onLocaleChange: (newLocale) => {
            // अपडेटेड लोकल के साथ URL का निर्माण करें
            // उदाहरण: /es/about?foo=bar
            const pathWithLocale = getLocalizedUrl(url, newLocale);
      
            // URL पथ अपडेट करें
            route(pathWithLocale, true); // रिप्लेस के लिए true
          },
        });
      
        return (
          <div>
            <button popovertarget="localePopover">{getLocaleName(locale)}</button>
            <div id="localePopover" popover="auto">
              {availableLocales.map((localeItem) => (
                <a
                  href={getLocalizedUrl(url, localeItem)}
                  hreflang={localeItem}
                  aria-current={locale === localeItem ? "page" : undefined}
                  onClick={(e) => {
                    e.preventDefault();
                    setLocale(localeItem);
                    // लोकल सेट करने के बाद प्रोग्रामेटिक नेविगेशन onLocaleChange द्वारा संभाला जाएगा
                  }}
                  key={localeItem}
                >
                  <span>
                    {/* लोकल - उदा. FR */}
                    {localeItem}
                  </span>
                  <span>
                    {/* स्वयं के लोकल में भाषा - उदा. Français */}
                    {getLocaleName(localeItem, localeItem)}
                  </span>
                  <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
                    {/* वर्तमान लोकल में भाषा - उदा. Francés यदि वर्तमान लोकल Locales.SPANISH सेट है */}
                    {getLocaleName(localeItem, locale)}
                  </span>
                  <span dir="ltr" lang={Locales.ENGLISH}>
                    {/* अंग्रेज़ी में भाषा - उदा. French */}
                    {getLocaleName(localeItem, Locales.ENGLISH)}
                  </span>
                </a>
              ))}
            </div>
          </div>
        );
      };
      
      export default LocaleSwitcher;

      दस्तावेज़ संदर्भ:

      - useLocale हुक (API preact-intlayer के लिए समान है)> - getLocaleName हुक> - getLocalizedUrl हुक> - getHTMLTextDir हुक> - hreflang एट्रिब्यूट> - lang एट्रिब्यूट> - dir एट्रिब्यूट> - aria-current एट्रिब्यूट> - Popover API
    9. HTML भाषा और दिशा विशेषताएँ स्विच करें

      वैकल्पिक

      जब आपका एप्लिकेशन कई भाषाओं का समर्थन करता है, तो <html> टैग के lang और dir विशेषताओं को वर्तमान लोकल से मिलान करने के लिए अपडेट करना महत्वपूर्ण है। ऐसा करने से सुनिश्चित होता है:

      • सुलभता: स्क्रीन रीडर और सहायक तकनीकें सामग्री को सही ढंग से उच्चारित और व्याख्या करने के लिए सही lang विशेषता पर निर्भर करती हैं।
      • टेक्स्ट रेंडरिंग: dir (दिशा) विशेषता सुनिश्चित करती है कि टेक्स्ट सही क्रम में रेंडर हो (उदा. अंग्रेज़ी के लिए बाएं-से-दाएं, अरबी या हिब्रू के लिए दाएं-से-बाएं), जो पठनीयता के लिए आवश्यक है।
      • SEO: सर्च इंजन आपके पेज की भाषा निर्धारित करने के लिए lang विशेषता का उपयोग करते हैं, जिससे सर्च परिणामों में सही स्थानीयकृत सामग्री परोसने में मदद मिलती है।

      लोकल बदलने पर इन विशेषताओं को गतिशील रूप से अपडेट करके, आप सभी समर्थित भाषाओं में उपयोगकर्ताओं के लिए एक सुसंगत और सुलभ अनुभव की गारंटी देते हैं।

      हुक को लागू करना

      HTML विशेषताओं को प्रबंधित करने के लिए एक कस्टम हुक बनाएं। यह हुक लोकल परिवर्तनों को सुनता है और तदनुसार विशेषताओं को अपडेट करता है:

      src/hooks/useI18nHTMLAttributes.tsx
      import { useEffect } from "preact/hooks";
      import { useLocale } from "preact-intlayer";
      import { getHTMLTextDir } from "intlayer";
      
      /**
       * वर्तमान लोकल के आधार पर HTML <html> तत्व के `lang` और `dir` विशेषताओं को अपडेट करता है।
       * - `lang`: ब्राउज़र और सर्च इंजन को पेज की भाषा के बारे में सूचित करता है।
       * - `dir`: सही पढ़ने का क्रम सुनिश्चित करता है (उदा. अंग्रेज़ी के लिए 'ltr', अरबी के लिए 'rtl')।
       *
       * यह गतिशील अपडेट उचित टेक्स्ट रेंडरिंग, सुलभता और SEO के लिए आवश्यक है।
       */
      export const useI18nHTMLAttributes = () => {
        const { locale } = useLocale();
      
        useEffect(() => {
          // भाषा विशेषता को वर्तमान लोकल में अपडेट करें।
          document.documentElement.lang = locale;
      
          // वर्तमान लोकल के आधार पर टेक्स्ट की दिशा सेट करें।
          document.documentElement.dir = getHTMLTextDir(locale);
        }, [locale]);
      };

      अपने एप्लिकेशन में हुक का उपयोग करना

      हुक को अपने मुख्य कॉम्पोनेंट में एकीकृत करें ताकि जब भी लोकल बदले, HTML विशेषताएँ अपडेट हो जाएं:

      src/app.tsx
      import type { FunctionalComponent } from "preact";
      import { IntlayerProvider } from "preact-intlayer"; // useIntlayer पहले से आयातित है यदि AppContent को इसकी आवश्यकता है
      import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
      import "./app.css";
      // चरण 5 से AppContent परिभाषा
      
      const AppWithHooks: FunctionalComponent = () => {
        // लोकल के आधार पर <html> टैग के lang और dir विशेषताओं को अपडेट करने के लिए हुक लागू करें।
        useI18nHTMLAttributes();
      
        // मान लेते हैं कि AppContent चरण 5 से आपका मुख्य सामग्री प्रदर्शन कॉम्पोनेंट है
        return <AppContent />;
      };
      
      const App: FunctionalComponent = () => (
        <IntlayerProvider>
          <AppWithHooks />
        </IntlayerProvider>
      );
      
      export default App;
    10. एक स्थानीयकृत लिंक कॉम्पोनेंट बनाना

      वैकल्पिक

      यह सुनिश्चित करने के लिए कि आपके एप्लिकेशन का नेविगेशन वर्तमान लोकल का सम्मान करता है, आप एक कस्टम Link कॉम्पोनेंट बना सकते हैं। यह कॉम्पोनेंट स्वचालित रूप से आंतरिक URL को वर्तमान भाषा के साथ उपसर्ग (prefix) करता है।

      यह व्यवहार कई कारणों से उपयोगी है:

      • SEO और उपयोगकर्ता अनुभव: स्थानीयकृत URL खोज इंजन को भाषा-विशिष्ट पृष्ठों को सही ढंग से अनुक्रमित करने में मदद करते हैं और उपयोगकर्ताओं को उनकी पसंदीदा भाषा में सामग्री प्रदान करते हैं।
      • संगति: पूरे एप्लिकेशन में स्थानीयकृत लिंक का उपयोग करके, आप गारंटी देते हैं कि नेविगेशन वर्तमान लोकल के भीतर बना रहे, जिससे अप्रत्याशित भाषा परिवर्तन रुक जाते हैं।
      • रखरखाव: एक ही कॉम्पोनेंट में स्थानीयकरण तर्क को केंद्रित करने से URL का प्रबंधन सरल हो जाता है।

      Preact में एक स्थानीयकृत Link कॉम्पोनेंट का कार्यान्वयन नीचे दिया गया है:

      src/components/Link.tsx
      import { getLocalizedUrl } from "intlayer";
      import { useLocale } from "preact-intlayer";
      import { forwardRef } from "preact/compat";
      import type { JSX } from "preact";
      
      export interface LinkProps extends JSX.HTMLAttributes<HTMLAnchorElement> {
        href: string;
      }
      
      /**
       * यह जांचने के लिए उपयोगिता फ़ंक्शन कि दिया गया URL बाहरी है या नहीं।
       * यदि URL http:// या https:// से शुरू होता है, तो इसे बाहरी माना जाता है।
       */
      export const checkIsExternalLink = (href?: string): boolean =>
        /^https?:\/\//.test(href ?? "");
      
      /**
       * एक कस्टम लिंक कॉम्पोनेंट जो वर्तमान लोकल के आधार पर href विशेषता को अनुकूलित करता है।
       * आंतरिक लिंक के लिए, यह URL को लोकल (उदा. /fr/about) के साथ उपसर्ग करने के लिए `getLocalizedUrl` का उपयोग करता है।
       * यह सुनिश्चित करता है कि नेविगेशन उसी लोकल संदर्भ के भीतर बना रहे।
       */
      export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
        ({ href, children, ...props }, ref) => {
          const { locale } = useLocale();
          const isExternalLink = checkIsExternalLink(href);
      
          // यदि लिंक आंतरिक है और एक मान्य href प्रदान किया गया है, तो स्थानीयकृत URL प्राप्त करें।
          const hrefI18n =
            href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
      
          return (
            <a href={hrefI18n} ref={ref} {...props}>
              {children}
            </a>
          );
        }
      );
      
      Link.displayName = "Link";

      यह कैसे काम करता है

      • बाहरी लिंक का पता लगाना:
        सहायक फ़ंक्शन checkIsExternalLink यह निर्धारित करता है कि URL बाहरी है या नहीं। बाहरी लिंक अपरिवर्तित छोड़ दिए जाते हैं क्योंकि उन्हें स्थानीयकरण की आवश्यकता नहीं होती है।
      • वर्तमान लोकल प्राप्त करना:
        useLocale हुक वर्तमान लोकल (उदा. फ़्रेंच के लिए fr) प्रदान करता है।
      • URL को स्थानीयकृत करना:
        आंतरिक लिंक (यानी, गैर-बाहरी) के लिए, URL को वर्तमान लोकल के साथ स्वचालित रूप से उपसर्ग करने के लिए getLocalizedUrl का उपयोग किया जाता है। इसका मतलब है कि यदि आपका उपयोगकर्ता फ़्रेंच में है, तो /about को href के रूप में पास करने से यह /fr/about में बदल जाएगा।
      • लिंक लौटना:
        कॉम्पोनेंट स्थानीयकृत URL के साथ एक <a> तत्व लौटाता है, जिससे सुनिश्चित होता है कि नेविगेशन लोकल के साथ सुसंगत है।
    11. Markdown और HTML रेंडर करें

      वैकल्पिक

      Intlayer Preact में Markdown और HTML सामग्री रेंडर करने का समर्थन करता है।

      आप .use() विधि का उपयोग करके Markdown और HTML सामग्री के रेंडरिंग को कस्टमाइज़ कर सकते हैं। यह विधि आपको विशिष्ट टैग के डिफ़ॉल्ट रेंडरिंग को ओवरराइड करने की अनुमति देती है।

      tsx
      import { useIntlayer } from "preact-intlayer";const { myMarkdownContent, myHtmlContent } = useIntlayer("my-component");// ...return (  <div>    {/* बुनियादी रेंडरिंग */}    {myMarkdownContent}    {/* Markdown के लिए कस्टम रेंडरिंग */}    {myMarkdownContent.use({      h1: (props) => <h1 style={{ color: "red" }} {...props} />,    })}    {/* HTML के लिए बुनियादी रेंडरिंग */}    {myHtmlContent}    {/* HTML के लिए कस्टम रेंडरिंग */}    {myHtmlContent.use({      b: (props) => <strong style={{ color: "blue" }} {...props} />,    })}  </div>);
    12. अपने घटकों की सामग्री निकालें

      वैकल्पिक

      यदि आपके पास मौजूदा कोडबेस है, तो हजारों फ़ाइलों को बदलना समय लेने वाला हो सकता है।

      इस प्रक्रिया को आसान बनाने के लिए, Intlayer आपके घटकों को बदलने और सामग्री निकालने के लिए एक कंपाइलर / एक्सट्रैक्टर का प्रस्ताव करता है।

      इसे सेट करने के लिए, आप अपनी intlayer.config.ts फ़ाइल में एक compiler अनुभाग जोड़ सकते हैं:

      intlayer.config.ts
      import { type IntlayerConfig } from "intlayer";
      
      const config: IntlayerConfig = {
        // ... आपका शेष कॉन्फ़िगरेशन
        compiler: {
          /**
           * इंगित करता है कि क्या कंपाइलर सक्षम होना चाहिए।
           */
          enabled: true,
      
          /**
           * आउटपुट फ़ाइलों का पथ परिभाषित करता है
           */
          output: ({ fileName, extension }) => `./${fileName}${extension}`,
      
          /**
           * इंगित करता है कि क्या घटकों को बदलने के बाद सहेजा जाना चाहिए। उस तरह से, कंपाइलर को ऐप बदलने के लिए केवल एक बार चलाया जा सकता है, और फिर इसे हटाया जा सकता है।
           */
          saveComponents: false,
      
          /**
           * शब्दकोश कुंजी उपसर्ग
           */
          dictionaryKeyPrefix: "",
        },
      };
      
      export default config;

      अपने घटकों को बदलने और सामग्री निकालने के लिए एक्सट्रैक्टर चलाएँ

      bash
      npx intlayer extract

    टाइपस्क्रिप्ट कॉन्फ़िगर करें

    Intlayer टाइपस्क्रिप्ट के लाभ प्राप्त करने और आपके कोडबेस को मजबूत बनाने के लिए मॉड्यूल ऑगमेंटेशन का उपयोग करता है।

    Autocompletion

    Translation error

    सुनिश्चित करें कि आपकी टाइपस्क्रिप्ट कॉन्फ़िगरेशन में ऑटो-जेनरेटेड प्रकार शामिल हैं।

    tsconfig.json
    {  // ... आपकी मौजूदा टाइपस्क्रिप्ट कॉन्फ़िगरेशन  "compilerOptions": {    // ...    "jsx": "react-jsx",    "jsxImportSource": "preact", // Preact 10+ के लिए अनुशंसित    // ...  },  "include": [    // ... आपकी मौजूदा टाइपस्क्रिप्ट कॉन्फ़िगरेशन    ".intlayer/**/*.ts", // ऑटो-जेनरेटेड प्रकारों को शामिल करें  ],}
    सुनिश्चित करें कि आपका tsconfig.json Preact के लिए सेट है, विशेष रूप से jsx और jsxImportSource या पुराने Preact संस्करणों के लिए jsxFactory/jsxFragmentFactory यदि आप preset-vite के डिफ़ॉल्ट का उपयोग नहीं कर रहे हैं।

    Git कॉन्फ़िगरेशन

    यह अनुशंसा की जाती है कि Intlayer द्वारा उत्पन्न फ़ाइलों को अनदेखा किया जाए। यह आपको उन्हें अपने Git रिपॉजिटरी में कमिट करने से बचने की अनुमति देता है।

    ऐसा करने के लिए, आप अपनी .gitignore फ़ाइल में निम्नलिखित निर्देश जोड़ सकते हैं:

    bash
    #  Intlayer द्वारा उत्पन्न फ़ाइलों को अनदेखा करें.intlayer

    VS कोड एक्सटेंशन

    Intlayer के साथ अपने विकास अनुभव को बेहतर बनाने के लिए, आप आधिकारिक Intlayer VS कोड एक्सटेंशन इंस्टॉल कर सकते हैं।

    VS कोड मार्केटप्लेस से इंस्टॉल करें

    यह एक्सटेंशन प्रदान करता है:

    • अनुवाद कुंजियों के लिए ऑटोकंप्लीट
    • गायब अनुवादों के लिए रीयल-टाइम त्रुटि पहचान
    • अनुवादित सामग्री के इनलाइन पूर्वावलोकन
    • अनुवादों को आसानी से बनाने और अपडेट करने के लिए त्वरित क्रियाएं

    एक्सटेंशन का उपयोग करने के तरीके के बारे में अधिक जानकारी के लिए, Intlayer VS कोड एक्सटेंशन प्रलेखन देखें।


    (वैकल्पिक) साइटमैप और robots.txt (बिल्ड-टाइम जनरेशन)

    Intlayer generateSitemap और getMultilingualUrls उपलब्ध कराता है ताकि आप क्रॉलर-तैयार बहुभाषी sitemap.xml और robots.txt बनाकर public/ में स्वचालित लिख सकें। आमतौर पर Vite से पहले छोटा Node स्क्रिप्ट चलाएँ (जैसे npm predev / prebuild)।

    साइटमैप

    Intlayer का साइटमैप जनरेटर आपकी लोकेल सेटिंग का सम्मान करता है और क्रॉलर के लिए मेटाडेटा जोड़ता है।

    जनरेट साइटमैप xhtml:link (hreflang) नेमस्पेस को सपोर्ट करता है। सपाट URL सूची के बजाय Intlayer हर पृष्ठ के सभी भाषा संस्करणों को दोतरफा जोड़ता है (जैसे /about, /fr/about, या /about?lang=fr - रूटिंग मोड पर निर्भर)।

    Robots.txt

    getMultilingualUrls का उपयोग करें ताकि Disallow नियम संवेदनशील पथों के सभी बहुभाषी रूपों को कवर करें।

    1. प्रोजेक्ट रूट में generate-seo.mjs जोड़ें

    generate-seo.mjs
    import fs from "fs";import path from "path";import { fileURLToPath } from "url";import { generateSitemap, getMultilingualUrls } from "intlayer";const __dirname = path.dirname(fileURLToPath(import.meta.url));const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace(  /\/$/,  "");const pathList = [  { path: "/", changefreq: "daily", priority: 1.0 },  { path: "/about", changefreq: "monthly", priority: 0.7 },];const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);const getAllMultilingualUrls = (urls) =>  urls.flatMap((url) => Object.values(getMultilingualUrls(url)));const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);const robotsTxt = [  "User-agent: *",  "Allow: /",  ...disallowedPaths.map((path) => `Disallow: ${path}`),  "",  `Sitemap: ${SITE_URL}/sitemap.xml`,].join("\n");fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);console.log("SEO files generated successfully.");

    स्क्रिप्ट को intlayer इम्पोर्ट करने के लिए पैकेज इंस्टॉल होना चाहिए। प्रोडक्शन में SITE_URL सेट करें (जैसे CI में)।

    Node ESM के लिए generate-seo.mjs पसंद करें। generate-seo.js के लिए package.json में "type": "module" या अन्य ESM सेटअप करें।

    2. Vite से पहले स्क्रिप्ट चलाएँ

    package.json
    {  "scripts": {    "dev": "vite",    "prebuild": "node generate-seo.mjs",    "build": "vite build",    "preview": "vite preview"  }}

    pnpm या yarn हो तो कमांड अनुकूलित करें। CI से भी कॉल कर सकते हैं।

    आगे बढ़ें

    आगे बढ़ने के लिए, आप विज़ुअल एडिटर को लागू कर सकते हैं या अपनी सामग्री को CMS का उपयोग करके बाहरी रूप से व्यवस्थित कर सकते हैं।