घरसैंडबॉक्सशोकेसएप्पडॉकब्लॉग
    • Englishअंग्रेज़ी
      EN
    • русскийरूसी
      RU
    • 日本語जापानी
      JA
    • françaisफ़्रेंच
      FR
    • 한국어कोरियाई
      KO
    • 中文चीनी
      ZH
    • españolस्पेनिश
      ES
    • Deutschजर्मन
      DE
    • العربيةअरबी
      AR
    • italianoइतालवी
      IT
    • British Englishब्रिटिश अंग्रेज़ी
      EN-GB
    • portuguêsपुर्तगाली
      PT
    • हिन्दीहिन्दी
      HI
    • Türkçeतुर्की
      TR
    • polskiपोलिश
      PL
    • Indonesiaइंडोनेशियाई
      ID
    • Tiếng Việtवियतनामी
      VI
    • українськаयूक्रेनियाई
      UK
    /
    फ्रेमवर्क द्वारा डॉक्स फ़िल्टर करें
    Alt+←
    Intlayer का क्यों लाभ
    शुरू करें
    अवधारणा
    • Intlayer कैसे काम करता है
    • कॉन्फ़िगरेशन
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • विज़ुअल एडिटर
    • CMS
    • CI/CD एकीकरण
    • अनुवादबहुवचनगणनाशर्तलिंगसम्मिलनफ़ाइलनेस्टिंगMarkdownHTMLफ़ंक्शन फेचिंग
    • प्रति लोकेल फ़ाइल
    • कंपाइलर
    • स्वतः भरण
    • परीक्षण
    • बंडल ऑप्टिमाइज़ेशन
    पर्यावरण
    • Next.js 14 और ऐप राउटर
      Next.js 15
      Next.js बिना लोकेल URL
      Next.js और पेज राउटर
      कंपाइलर
    • Tanstack Start Solid
    • Astro और React
      Astro और Svelte
      Astro और Vue
      Astro और Solid
      Astro और Preact
      Astro और Lit
      Astro और Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt और Vue
    • Vite और Solid
    • SvelteKit
    • Vite और Preact
    • Vite और Vanilla JS
    • Vite और Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native और Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx और React
    Plugins
    • JSON
    • gettext (.po)
    VS Code एक्सटेंशन
    एजेंट
    • इंटलेयर MCP सर्वर
    • एजेंट कौशल
    रिलीज
    • v8
    • v7
    • v6
    बेंचमार्क
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    ब्लॉग
    प्रश्न करें
    1. Documentation
    2. पर्यावरण
    3. Vite और React
    Creation:2024-03-07Last update:2026-05-06
    GitHub पर एप्लिकेशन टेम्पलेट देखें

    इस पृष्ठ के लिए एक एप्लिकेशन टेम्पलेट उपलब्ध है।

    शोकेस एप्लिकेशन देखें

    यह पृष्ठ टेम्पलेट का लाइव डेमो लिंक करता है।

    वीडियो ट्यूटोरियल देखें

    इस पृष्ठ के लिए एक वीडियो ट्यूटोरियल उपलब्ध है।

    इस दस्तावेज़ को अपने पसंदीदा AI एसिस्टेंट के साथ संदर्भित करें
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    अपने प्रश्न को पूछें और दस्तावेज़ का सारांश प्राप्त करें, इस पृष्ठ और आपके चुने हुए AI प्रदाता का उपयोग करके

    संस्करण इतिहास

    1. "सॉलिड useIntlayer API उपयोग को सीधे प्रॉपर्टी एक्सेस में अपडेट करें"
      v8.9.04/5/2026
    2. "init कमांड जोड़ें"
      v7.5.930/12/2025
    3. "प्रारंभिक इतिहास"
      v5.5.1029/6/2025

    इस पृष्ठ की सामग्री एक AI द्वारा अनुवादित की गई है।

    अंग्रेजी में मूल सामग्री के अंतिम संस्करण देखें
    इस दस्तावेज़ को संपादित करें

    अगर आपके पास इस दस्तावेज़ को सुधारने के लिए कोई विचार है, तो कृपया GitHub पर एक पुल अनुरोध सबमिट करके योगदान देने में संकोच न करें।

    दस्तावेज़ के लिए GitHub लिंक
    Copy

    दस्तावेज़ का Markdown को क्लिपबोर्ड पर कॉपी करें

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

    विषय-सूची

    Intlayer क्या है?

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

    Intlayer के साथ, आप कर सकते हैं:

    • घोषणात्मक शब्दकोशों का उपयोग करके कंपोनेंट स्तर पर अनुवादों का आसानी से प्रबंधन करें।
    • मेटाडेटा, रूट्स, और सामग्री को गतिशील रूप से स्थानीयकृत करें।
    • स्वचालित रूप से उत्पन्न प्रकारों के साथ TypeScript समर्थन सुनिश्चित करें, जिससे ऑटोकम्प्लीशन और त्रुटि पहचान में सुधार होता है।
    • उन्नत सुविधाओं का लाभ उठाएं, जैसे गतिशील लोकल डिटेक्शन और स्विचिंग।

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

    www.youtube.com
    ide.intlayer.org
    intlayer-vite-react-template.vercel.app

    GitHub पर एप्लिकेशन टेम्पलेट देखें।

    चरण 1: निर्भरताएँ स्थापित करें

    npm का उपयोग करके आवश्यक पैकेज स्थापित करें:

    bash
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    npm install intlayer react-intlayernpm install vite-intlayer --save-devnpx intlayer init
    • intlayer यह मुख्य पैकेज है जो कॉन्फ़िगरेशन प्रबंधन, अनुवाद, सामग्री घोषणा, ट्रांसपाइलेशन, और CLI कमांड्स के लिए अंतरराष्ट्रीयकरण उपकरण प्रदान करता है।

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

    • 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,
      },
    };
    
    export default config;
    इस कॉन्फ़िगरेशन फ़ाइल के माध्यम से, आप स्थानीयकृत URL, मिडलवेयर रीडायरेक्शन, कुकी नाम, आपकी सामग्री घोषणाओं का स्थान और एक्सटेंशन सेट कर सकते हैं, कंसोल में Intlayer लॉग को अक्षम कर सकते हैं, और भी बहुत कुछ। उपलब्ध सभी पैरामीटर की पूरी सूची के लिए, कॉन्फ़िगरेशन दस्तावेज़ देखें।

    चरण 3: अपने Vite कॉन्फ़िगरेशन में Intlayer को एकीकृत करें

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

    vite.config.ts
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { defineConfig } from "vite";
    import react from "@vitejs/plugin-react-swc";
    import { intlayer } from "vite-intlayer";
    
    // https://vitejs.dev/config/
    export default defineConfig({
      plugins: [react(), intlayer()],
    });

    intlayer() Vite प्लगइन का उपयोग Intlayer को Vite के साथ एकीकृत करने के लिए किया जाता है। यह कंटेंट घोषणा फ़ाइलों के निर्माण को सुनिश्चित करता है और विकास मोड में उनकी निगरानी करता है। यह Vite एप्लिकेशन के भीतर Intlayer पर्यावरण चर को परिभाषित करता है। इसके अतिरिक्त, यह प्रदर्शन को अनुकूलित करने के लिए उपनाम प्रदान करता है।

    चरण 4: अपनी सामग्री घोषित करें

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

    src/app.content.tsx
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { t, type Dictionary } from "intlayer";
    import type { ReactNode } from "react";
    
    const appContent = {
      key: "app",
      content: {
        viteLogo: t({
          en: "Vite logo",
          fr: "Logo Vite",
          es: "Logo Vite",
          hi: "Vite लोगो",
        }),
        reactLogo: t({
          en: "React logo",
          fr: "Logo React",
          es: "Logo React",
          hi: "React लोगो",
        }),
    
        title: "Vite + React",
    
        count: t({
          en: "count is ",
          fr: "le compte est ",
          es: "el recuento es ",
          hi: "गिनती है ",
        }),
    
        edit: t<ReactNode>({
          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
            </>
          ),
          hi: (
            <>
              <code>src/App.tsx</code> को संपादित करें और HMR का परीक्षण करने के लिए
              सहेजें
            </>
          ),
        }),
    
        readTheDocs: t({
          en: "Click on the Vite and React logos to learn more",
          fr: "Cliquez sur les logos Vite et React pour en savoir plus",
          es: "Haga clic en los logotipos de Vite y React para obtener más información",
          hi: "अधिक जानने के लिए Vite और React लोगो पर क्लिक करें",
        }),
      },
    } satisfies Dictionary;
    
    export default appContent;
    आपकी सामग्री घोषणाएँ आपके एप्लिकेशन में कहीं भी परिभाषित की जा सकती हैं जब वे contentDir निर्देशिका (डिफ़ॉल्ट रूप से, ./src) में शामिल हो जाती हैं और सामग्री घोषणा फ़ाइल एक्सटेंशन से मेल खाती हैं (डिफ़ॉल्ट रूप से, .content.{json,ts,tsx,js,jsx,mjs,cjs})।
    अधिक विवरण के लिए, सामग्री घोषणा प्रलेखन देखें।

    यदि आपकी सामग्री फ़ाइल में TSX कोड शामिल है, तो आपको अपनी सामग्री फ़ाइल में import React from "react"; आयात करने पर विचार करना चाहिए।

    चरण 5: अपने कोड में Intlayer का उपयोग करें

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

    src/App.tsx
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { useState, type FC } from "react";
    import reactLogo from "./assets/react.svg";
    import viteLogo from "/vite.svg";
    import "./App.css";
    import { IntlayerProvider, useIntlayer } from "react-intlayer";
    
    const AppContent: FC = () => {
      const [count, setCount] = useState(0);
      const content = useIntlayer("app");
    
      return (
        <>
          <div>
            <a href="https://vitejs.dev" target="_blank">
              <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
            </a>
            <a href="https://react.dev" target="_blank">
              <img
                src={reactLogo}
                className="logo react"
                alt={content.reactLogo.value}
              />
            </a>
          </div>
          <h1>{content.title}</h1>
          <div className="card">
            <button onClick={() => setCount((count) => count + 1)}>
              {content.count}
              {count}
            </button>
            <p>{content.edit}</p>
          </div>
          <p className="read-the-docs">{content.readTheDocs}</p>
        </>
      );
    };
    
    const App: FC = () => (
      <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)}" />
    useIntlayer हुक के बारे में अधिक जानने के लिए, डॉक्यूमेंटेशन देखें।
    यदि आपका ऐप पहले से मौजूद है, तो आप हजारों घटकों को एक सेकंड में बदलने के लिए Intlayer कंपाइलर को एक्सट्रैक्ट कमांड के साथ उपयोग कर सकते हैं।

    (वैकल्पिक) चरण 6: अपनी सामग्री की भाषा बदलें

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

    src/components/LocaleSwitcher.tsx
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import type { FC } from "react";
    import { Locales } from "intlayer";
    import { useLocale } from "react-intlayer";
    
    const LocaleSwitcher: FC = () => {
      const { setLocale } = useLocale();
    
      return (
        <button onClick={() => setLocale(Locales.English)}>
          अंग्रेज़ी में भाषा बदलें
        </button>
      );
    };
    useLocale हुक के बारे में अधिक जानने के लिए, दस्तावेज़ देखें।

    (वैकल्पिक) चरण 7: अपने एप्लिकेशन में स्थानीयकृत रूटिंग जोड़ें

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

    plaintext
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    - https://example.com/about- https://example.com/es/about- https://example.com/fr/about

    डिफ़ॉल्ट रूप से, डिफ़ॉल्ट लोकल के लिए रूट्स को कोई प्रीफ़िक्स नहीं दिया जाता है। यदि आप डिफ़ॉल्ट लोकल के लिए प्रीफ़िक्स जोड़ना चाहते हैं, तो आप अपनी कॉन्फ़िगरेशन में middleware.prefixDefault विकल्प को true पर सेट कर सकते हैं। अधिक जानकारी के लिए कॉन्फ़िगरेशन दस्तावेज़ देखें।

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

    src/components/LocaleRouter.tsx
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { localeMap } from "intlayer"; // 'intlayer' से उपयोगिता फ़ंक्शन और प्रकार
    import type { FC, PropsWithChildren } from "react"; // कार्यात्मक घटकों और प्रॉप्स के लिए React प्रकार
    import { IntlayerProvider } from "react-intlayer"; // अंतरराष्ट्रीयकरण संदर्भ के लिए प्रदाता
    import { BrowserRouter, Route, Routes } from "react-router-dom"; // नेविगेशन प्रबंधन के लिए राउटर घटक
    
    /**
     * एक राउटर घटक जो स्थानीय-विशिष्ट मार्ग सेट करता है।
     * यह React Router का उपयोग नेविगेशन प्रबंधित करने और स्थानीयकृत घटकों को रेंडर करने के लिए करता है।
     */
    export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
      <BrowserRouter>
        <Routes>
          {localeMap(({ locale, urlPrefix }) => (
            <Route
              // लोकल को पकड़ने के लिए रूट पैटर्न (उदाहरण: /en/, /fr/) और सभी बाद के पथों से मेल खाना
              path={`${urlPrefix}/*`}
              key={locale}
              element={
                <IntlayerProvider locale={locale}>{children}</IntlayerProvider>
              } // लोकल प्रबंधन के साथ बच्चों को लपेटें
            />
          ))}
        </Routes>
      </BrowserRouter>
    );
    नोट: यदि आप routing.mode: 'no-prefix' | 'search-params' का उपयोग करते हैं, तो आपको शायद localeMap फ़ंक्शन का उपयोग करने की आवश्यकता नहीं है।

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

    src/App.tsx
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { LocaleRouter } from "./components/LocaleRouter";
    import type { FC } from "react";
    
    // ... आपका AppContent घटक
    
    const App: FC = () => (
      <LocaleRouter>
        <AppContent />
      </LocaleRouter>
    );

    साथ ही, आप अपने एप्लिकेशन में सर्वर-साइड रूटिंग जोड़ने के लिए intlayerProxy का भी उपयोग कर सकते हैं। यह प्लगइन URL के आधार पर वर्तमान लोकल का स्वचालित रूप से पता लगाएगा और उपयुक्त लोकल कुकी सेट करेगा। यदि कोई लोकल निर्दिष्ट नहीं है, तो प्लगइन उपयोगकर्ता के ब्राउज़र भाषा प्राथमिकताओं के आधार पर सबसे उपयुक्त लोकल निर्धारित करेगा। यदि कोई लोकल पता नहीं चलता है, तो यह डिफ़ॉल्ट लोकल पर पुनर्निर्देशित करेगा।

    ध्यान दें कि production में intlayerProxy का उपयोग करने के लिए, आपको vite-intlayer पैकेज को devDependencies से dependencies में स्विच करना होगा।
    vite.config.ts
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { defineConfig } from "vite";
    import react from "@vitejs/plugin-react-swc";
    import { intlayer, intlayerProxy } from "vite-intlayer";
    
    // https://vitejs.dev/config/
    export default defineConfig({
      plugins: [
        intlayerProxy(), // should be placed first
        react(),
        intlayer(),
      ],
    });

    (वैकल्पिक) चरण 8: जब लोकल बदलता है तो URL बदलें

    जब लोकल बदलता है तो URL बदलने के लिए, आप useLocale हुक द्वारा प्रदान किया गया onLocaleChange प्रॉप का उपयोग कर सकते हैं। साथ ही, आप URL पथ को अपडेट करने के लिए react-router-dom से useLocation और useNavigate हुक का उपयोग कर सकते हैं।

    src/components/LocaleSwitcher.tsx
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { useLocation, useNavigate } from "react-router-dom";
    import {
      Locales,
      getHTMLTextDir,
      getLocaleName,
      getLocalizedUrl,
    } from "intlayer";
    import { useLocale } from "react-intlayer";
    import { type FC } from "react";
    
    const LocaleSwitcher: FC = () => {
      const { pathname, search } = useLocation(); // वर्तमान URL पथ प्राप्त करें। उदाहरण: /fr/about?foo=bar
      const navigate = useNavigate();
    
      const { locale, availableLocales, setLocale } = useLocale({
        onLocaleChange: (locale) => {
          // अपडेट किए गए लोकल के साथ URL बनाएं
          // उदाहरण: /es/about?foo=bar
          const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
    
          // URL पथ अपडेट करें
          navigate(pathWithLocale);
        },
      });
    
      return (
        <div>
          <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
          <div id="localePopover" popover="auto">
            {availableLocales.map((localeItem) => (
              <a
                href={getLocalizedUrl(location.pathname, localeItem)}
                hrefLang={localeItem}
                aria-current={locale === localeItem ? "page" : undefined}
                onClick={(e) => {
                  e.preventDefault();
                  setLocale(localeItem);
                }}
                key={localeItem}
              >
                <span>
                  {/* लोकल - उदाहरण के लिए FR */}
                  {localeItem}
                </span>
                <span>
                  {/* अपनी लोकल में भाषा - उदाहरण के लिए Français */}
                  {getLocaleName(localeItem, locale)}
                </span>
                <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
                  {/* वर्तमान लोकल में भाषा - उदाहरण के लिए Francés जब वर्तमान लोकल Locales.SPANISH सेट हो */}
                  {getLocaleName(localeItem)}
                </span>
                <span dir="ltr" lang={Locales.ENGLISH}>
                  {/* अंग्रेज़ी में भाषा - उदाहरण के लिए French */}
                  {getLocaleName(localeItem, Locales.ENGLISH)}
                </span>
              </a>
            ))}
          </div>
        </div>
      );
    };

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

    • useLocale हुक
    • getLocaleName हुक
    • getLocalizedUrl हुक
    • getHTMLTextDir हुक
    • hrefLang एट्रिब्यूट
    • lang एट्रिब्यूट
    • dir एट्रिब्यूट
    • aria-current एट्रिब्यूट

    नीचे अपडेट किया गया चरण 9 है जिसमें अतिरिक्त व्याख्याएँ और परिष्कृत कोड उदाहरण शामिल हैं:


    (वैकल्पिक) चरण 9: HTML भाषा और दिशा एट्रिब्यूट्स को स्विच करें

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

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

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

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

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

    src/hooks/useI18nHTMLAttributes.tsx
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { useEffect } from "react";
    import { useLocale } from "react-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 { FC } from "react";
    import { IntlayerProvider, useIntlayer } from "react-intlayer";
    import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
    import "./App.css";
    
    const AppContent: FC = () => {
      // लोकल के आधार पर <html> टैग के lang और dir एट्रिब्यूट्स को अपडेट करने के लिए हुक लागू करें।
      useI18nHTMLAttributes();
    
      // ... आपके कॉम्पोनेंट का बाकी हिस्सा
    };
    
    const App: FC = () => (
      <IntlayerProvider>
        <AppContent />
      </IntlayerProvider>
    );
    
    export default App;

    इन परिवर्तनों को लागू करने से, आपका एप्लिकेशन:

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

    (वैकल्पिक) चरण 10: एक स्थानीयकृत लिंक कंपोनेंट बनाना

    यह सुनिश्चित करने के लिए कि आपके एप्लिकेशन की नेविगेशन वर्तमान लोकल का सम्मान करती है, आप एक कस्टम Link कंपोनेंट बना सकते हैं। यह कंपोनेंट स्वचालित रूप से आंतरिक URL को वर्तमान भाषा के साथ प्रीफिक्स करता है, ताकि उदाहरण के लिए, जब एक फ्रेंच-भाषी उपयोगकर्ता "About" पेज के लिंक पर क्लिक करता है, तो उसे /fr/about पर पुनः निर्देशित किया जाता है, न कि /about पर।

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

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

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

    src/components/Link.tsx
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { getLocalizedUrl } from "intlayer";
    import {
      forwardRef,
      type DetailedHTMLProps,
      type AnchorHTMLAttributes,
    } from "react";
    import { useLocale } from "react-intlayer";
    
    export interface LinkProps extends DetailedHTMLProps<
      AnchorHTMLAttributes<HTMLAnchorElement>,
      HTMLAnchorElement
    > {}
    
    /**
     * यह उपयोगिता फ़ंक्शन जांचता है कि दिया गया URL बाहरी है या नहीं।
     * यदि URL http:// या https:// से शुरू होता है, तो इसे बाहरी माना जाता है।
     */
    export const checkIsExternalLink = (href?: string): boolean =>
      /^https?:\/\//.test(href ?? "");
    
    /**
     * एक कस्टम Link कंपोनेंट जो वर्तमान लोकल के आधार पर href एट्रिब्यूट को अनुकूलित करता है।
     * आंतरिक लिंक के लिए, यह `getLocalizedUrl` का उपयोग करता है ताकि URL के साथ लोकल (जैसे, /fr/about) जोड़ा जा सके।
     * यह सुनिश्चित करता है कि नेविगेशन उसी लोकल संदर्भ के भीतर रहता है।
     */
    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 का स्थानीयकरण:
      आंतरिक लिंक (अर्थात् गैर-बाहरी) के लिए, getLocalizedUrl का उपयोग वर्तमान लोकल के साथ URL को स्वचालित रूप से उपसर्गित करने के लिए किया जाता है। इसका मतलब है कि यदि आपका उपयोगकर्ता फ्रेंच में है, तो /about को href के रूप में पास करने पर यह /fr/about में परिवर्तित हो जाएगा।

    • लिंक लौटाना:
      कंपोनेंट एक <a> एलिमेंट लौटाता है जिसमें स्थानीयकृत URL होता है, यह सुनिश्चित करता है कि नेविगेशन स्थानीय भाषा के अनुरूप हो।

    अपने एप्लिकेशन में इस Link कंपोनेंट को एकीकृत करके, आप एक सुसंगत और भाषा-सचेत उपयोगकर्ता अनुभव बनाए रखते हैं, साथ ही बेहतर SEO और उपयोगिता का लाभ भी प्राप्त करते हैं।

    TypeScript कॉन्फ़िगर करें

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

    Autocompletion

    Translation error

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

    tsconfig.json
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    {  // ... आपकी मौजूदा TypeScript कॉन्फ़िगरेशन  "include": [    // ... आपके मौजूदा TypeScript कॉन्फ़िगरेशन    ".intlayer/**/*.ts", // स्वचालित रूप से जनरेट किए गए प्रकारों को शामिल करें  ],}

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

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

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

    .gitignore
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

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

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

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

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

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

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

    विस्तृत जानकारी के लिए, एक्सटेंशन का उपयोग कैसे करें, देखें Intlayer VS Code एक्सटेंशन दस्तावेज़।


    (वैकल्पिक) कदम 1 : अपने घटकों की सामग्री निकालें

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

    इस प्रक्रिया को आसान बनाने के लिए, 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

    intlayerCompiler प्लगइन शामिल करने के लिए अपनी vite.config.ts अपडेट करें:

    vite.config.ts
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    import { defineConfig } from "vite";import { intlayer, intlayerCompiler } from "vite-intlayer";export default defineConfig({ plugins: [   intlayer(),   intlayerCompiler(), // कंपाइलर प्लगइन जोड़ता है ],});
    bash
    कोड कॉपी करें

    कोड को क्लिपबोर्ड पर कॉपी करें

    npm run build # या npm run dev

    (वैकल्पिक) साइटमैप और 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 का उपयोग करके बाहरी रूप से प्रबंधित कर सकते हैं।

    Astro और Vanilla JS
    React Router v7
    Alt+→

    इस पृष्ठ में

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

      npm install intlayer react-intlayernpm install vite-intlayer --save-devnpx intlayer init
      <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)}" />
      - https://example.com/about- https://example.com/es/about- https://example.com/fr/about
      {  // ... आपकी मौजूदा TypeScript कॉन्फ़िगरेशन  "include": [    // ... आपके मौजूदा TypeScript कॉन्फ़िगरेशन    ".intlayer/**/*.ts", // स्वचालित रूप से जनरेट किए गए प्रकारों को शामिल करें  ],}
      # Intlayer द्वारा उत्पन्न फ़ाइलों को अनदेखा करें.intlayer
      npx intlayer extract
      import { defineConfig } from "vite";import { intlayer, intlayerCompiler } from "vite-intlayer";export default defineConfig({ plugins: [   intlayer(),   intlayerCompiler(), // कंपाइलर प्लगइन जोड़ता है ],});
      npm run build # या npm run dev
      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.");
      {  "scripts": {    "dev": "vite",    "prebuild": "node generate-seo.mjs",    "build": "vite build",    "preview": "vite preview"  }}