1. Documentation
    2. पर्यावरण
    3. Intlayer के साथ Vite और React

    Getting Started Internationalizing (i18n) with Intlayer and Vite and React

    What is Intlayer?

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

    Intlayer के साथ, आप:

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

    Step-by-Step Guide to Set Up Intlayer in a Vite and React Application

    Step 1: Install Dependencies

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

    bash
    1npm install intlayer react-intlayer
    bash
    1yarn add intlayer react-intlayer
    bash
    1pnpm add intlayer react-intlayer

    Step 2: Configuration of your project

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

    typescript
    1// intlayer.config.ts 2 3import { Locales, type IntlayerConfig } from "intlayer"; 4 5const config: IntlayerConfig = { 6 internationalization: { 7 locales: [ 8 Locales.ENGLISH, 9 Locales.FRENCH, 10 Locales.SPANISH, 11 // आपके अन्य स्थानीयकरण 12 ], 13 defaultLocale: Locales.ENGLISH, 14 }, 15}; 16 17export default config;

    सभी उपलब्ध पैरामीटर देखने के लिए, configuration documentation here पर जाएं।

    Step 3: Integrate Intlayer in Your Vite Configuration

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

    typescript
    1import { defineConfig } from "vite"; 2import react from "@vitejs/plugin-react-swc"; 3import { intLayerPlugin } from "react-intlayer/vite"; 4 5// https://vitejs.dev/config/ 6export default defineConfig({ 7 plugins: [react(), intLayerPlugin()], 8});

    Step 4: Declare Your Content

    अपने सामग्री डिक्शनरीज़ को बनाएँ और प्रबंधित करें:

    tsx
    1// src/app.content.tsx 2import { t, type DeclarationContent } from "intlayer"; 3import { type ReactNode } from "react"; 4 5const appContent = { 6 key: "app", 7 content: { 8 viteLogo: t({ 9 en: "Vite logo", 10 fr: "Logo Vite", 11 es: "Logo Vite", 12 }), 13 reactLogo: t({ 14 en: "React logo", 15 fr: "Logo React", 16 es: "Logo React", 17 }), 18 19 title: "Vite + React", 20 21 count: t({ 22 en: "count is ", 23 fr: "le compte est ", 24 es: "el recuento es ", 25 }), 26 27 edit: t<ReactNode>({ 28 // यदि आप अपने सामग्री में एक React नोड उपयोग कर रहे हैं तो React को आयात करना न भूलें 29 en: ( 30 <> 31 Edit <code>src/App.tsx</code> and save to test HMR 32 </> 33 ), 34 fr: ( 35 <> 36 Éditez <code>src/App.tsx</code> et enregistrez pour tester HMR 37 </> 38 ), 39 es: ( 40 <> 41 Edita <code>src/App.tsx</code> y guarda para probar HMR 42 </> 43 ), 44 }), 45 46 readTheDocs: t({ 47 en: "Click on the Vite and React logos to learn more", 48 fr: "Cliquez sur les logos Vite et React pour en savoir plus", 49 es: "Haga clic en los logotipos de Vite y React para obtener más información", 50 }), 51 }, 52} satisfies DeclarationContent; 53 54export default appContent;

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

    See how to declare your Intlayer declaration files पर जाएँ।

    Step 5: Utilize Intlayer in Your Code

    अपने अनुप्रयोग में अपने सामग्री डिक्शनरीज़ का उपयोग करें:

    tsx
    1import { useState } from "react"; 2import reactLogo from "./assets/react.svg"; 3import viteLogo from "/vite.svg"; 4import "./App.css"; 5import { LocaleSwitcher } from "./components/LangSwitcherDropDown"; 6import { IntlayerProvider, useIntlayer } from "react-intlayer"; 7 8function AppContent() { 9 const [count, setCount] = useState(0); 10 const content = useIntlayer("app"); 11 12 return ( 13 <> 14 <div> 15 <a href="https://vitejs.dev" target="_blank"> 16 <img src={viteLogo} className="logo" alt={content.viteLogo.value} /> 17 </a> 18 <a href="https://react.dev" target="_blank"> 19 <img 20 src={reactLogo} 21 className="logo react" 22 alt={content.reactLogo.value} 23 /> 24 </a> 25 </div> 26 <h1>{content.title}</h1> 27 <div className="card"> 28 <button onClick={() => setCount((count) => count + 1)}> 29 {content.count} 30 {count} 31 </button> 32 <p>{content.edit}</p> 33 </div> 34 <p className="read-the-docs">{content.readTheDocs}</p> 35 <div className="absolute bottom-5 right-5 z-50"> 36 <LocaleSwitcher /> 37 </div> 38 </> 39 ); 40} 41 42function App() { 43 return ( 44 <IntlayerProvider> 45 <AppContent /> 46 </IntlayerProvider> 47 ); 48} 49 50export default App;

    नोट: यदि आप अपने सामग्री का उपयोग किसी string विशेषता जैसे alt, title, href, aria-label, आदि में करना चाहते हैं, तो आपको फ़ंक्शन के मान को कॉल करना होगा, जैसे:

    tsx
    1<img src={content.image.src.value} alt={content.image.value} />

    (Optional) Step 6: Change the language of your content

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

    tsx
    1import { Locales } from "intlayer"; 2import { useLocale } from "react-intlayer"; 3 4const LocaleSwitcher = () => { 5 const { setLocale } = useLocale(); 6 7 return ( 8 <button onClick={() => setLocale(Locales.English)}> 9 Change Language to English 10 </button> 11 ); 12};

    (Optional) Step 7: Add localized Routing to your application

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

    tsx
    1// /dashboard 2// /es/dashboard 3// /fr/dashboard

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

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

    tsx
    1// आवश्यक निर्भरताओं और कार्यों को आयात करना 2import { Locales, getConfiguration, getPathWithoutLocale } from "intlayer"; // 'intlayer' से उपयोगिता कार्य और प्रकार 3import { FC, PropsWithChildren } from "react"; // कार्यात्मक घटकों और संपत्तियों के लिए React प्रकार 4import { IntlayerProvider } from "react-intlayer"; // अंतर्राष्ट्रीयकरण संदर्भ के लिए प्रदाता 5import { 6 BrowserRouter, 7 Routes, 8 Route, 9 useParams, 10 Navigate, 11 useLocation, 12} from "react-router-dom"; // नेविगेशन प्रबंधन के लिए राउटर घटक 13 14// Intlayer से कॉन्फ़िगरेशन को निकालना 15const { internationalization, middleware } = getConfiguration(); 16const { locales, defaultLocale } = internationalization; 17 18/** 19 * एक घटक जो स्थानीयकरण को संभालता है और बच्चों को उपयुक्त स्थानीय संदर्भ के साथ लपेटता है। 20 * यह URL-आधारित स्थानीय पहचान और मान्यता का प्रबंधन करता है। 21 */ 22const AppLocalized: FC<PropsWithChildren> = ({ children }) => { 23 const path = useLocation().pathname; // वर्तमान URL पथ प्राप्त करना 24 const { locale } = useParams<{ locale: Locales }>(); // URL से स्थानीय भाषा पैरामीटर निकालना 25 26 // वर्तमान स्थानीय भाषा निर्धारित करना, यदि उपलब्ध नहीं है तो डिफ़ॉल्ट पर वापस लौटें 27 const currentLocale = locale ?? defaultLocale; 28 29 // एक आधार पथ बनाने के लिए पथ से स्थानीय भाषा प्रीफ़िक्स को हटाना 30 const pathWithoutLocale = getPathWithoutLocale( 31 path // वर्तमान URL पथ 32 ); 33 34 /** 35 * यदि middleware.prefixDefault सत्य है, तो डिफ़ॉल्ट स्थानीय भाषा हमेशा पूर्वसर्गित होनी चाहिए। 36 */ 37 if (middleware.prefixDefault) { 38 // स्थानीय भाषा की मान्यता करना 39 if (!locale || !locales.includes(locale)) { 40 // अपडेटेड पाथ के साथ डिफ़ॉल्ट स्थानीय भाषा पर रीडायरेक्ट करना 41 return ( 42 <Navigate 43 to={`/${defaultLocale}/${pathWithoutLocale}`} 44 replace // नए के साथ वर्तमान इतिहास प्रविष्टि को बदलें 45 /> 46 ); 47 } 48 49 // बच्चों को IntlayerProvider के साथ लपेटना और वर्तमान स्थानीय भाषा सेट करना 50 return ( 51 <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider> 52 ); 53 } else { 54 /** 55 * जब middleware.prefixDefault मिथ्या हो, तो डिफ़ॉल्ट स्थानीय भाषा को पूर्वसर्गित नहीं किया जाता है। 56 * सुनिश्चित करना कि वर्तमान स्थानीय भाषा मान्य है और डिफ़ॉल्ट स्थानीय भाषा नहीं है। 57 */ 58 if ( 59 currentLocale.toString() !== defaultLocale.toString() && 60 !locales 61 .filter( 62 (locale) => locale.toString() !== defaultLocale.toString() // डिफ़ॉल्ट स्थानीय भाषा को छोड़ें 63 ) 64 .includes(currentLocale) // जांचें कि वर्तमान स्थानीय भाषा मान्य स्थानीय भाषाओं की सूची में है 65 ) { 66 // बिना स्थानीय प्रीफ़िक्स के पथ पर रीडायरेक्ट करें 67 return <Navigate to={pathWithoutLocale} replace />; 68 } 69 70 // बच्चों को IntlayerProvider के साथ लपेटना और वर्तमान स्थानीय भाषा सेट करना 71 return ( 72 <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider> 73 ); 74 } 75}; 76 77/** 78 * एक राउटर घटक जो स्थानीय विशिष्ट रूट सेट करता है। 79 * यह नेविगेशन प्रबंधन और स्थानीयकृत घटकों को रेंडर करने के लिए React Router का उपयोग करता है। 80 */ 81export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => ( 82 <BrowserRouter> 83 <Routes> 84 <Route 85 // रूट पैटर्न जो स्थानीय भाषा को कैप्चर करता है (जैसे, /en/, /fr/) और सभी बाद के पथों से मेल खाता है 86 path="/:locale/*" 87 element={<AppLocalized>{children}</AppLocalized>} // स्थानीय प्रबंधन के साथ बच्चों को लपेटता है 88 /> 89 90 { 91 // यदि डिफ़ॉल्ट स्थानीय भाषा को पूर्वसर्गित करना निष्क्रिय है, तो रूट पथ पर बच्चों को सीधे रेंडर करें 92 !middleware.prefixDefault && ( 93 <Route 94 path="*" 95 element={<AppLocalized>{children}</AppLocalized>} // स्थानीय प्रबंधन के साथ बच्चों को लपेटता है 96 /> 97 ) 98 } 99 </Routes> 100 </BrowserRouter> 101);

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

    ts
    1import { defineConfig } from "vite"; 2import react from "@vitejs/plugin-react-swc"; 3import { intLayerPlugin, intLayerMiddlewarePlugin } from "react-intlayer/vite"; 4 5// https://vitejs.dev/config/ 6export default defineConfig({ 7 plugins: [react(), intLayerPlugin(), intLayerMiddlewarePlugin()], 8});

    (Optional) Step 8: Change the URL when the locale changes

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

    tsx
    1import { Locales, getLocalizedUrl } from "intlayer"; 2import { useLocale } from "react-intlayer"; 3import { useLocation, useNavigate } from "react-router-dom"; 4 5const LocaleSwitcher = () => { 6 const location = useLocation(); // वर्तमान URL पथ प्राप्त करें। उदाहरण: /fr/about 7 const navigate = useNavigate(); 8 9 const changeUrl = (locale: Locales) => { 10 // अपडेटेड स्थानीय भाषा के साथ URL बनाना 11 // उदाहरण: /es/about जब स्थानीय भाषा स्पेनिश पर सेट हो 12 const pathWithLocale = getLocalizedUrl(location.pathname, locale); 13 14 // URL पथ अपडेट करें 15 navigate(pathWithLocale); 16 }; 17 18 const { setLocale } = useLocale({ 19 onLocaleChange: changeUrl, 20 }); 21 22 return ( 23 <button onClick={() => setLocale(Locales.English)}> 24 Change Language to English 25 </button> 26 ); 27};

    Configure TypeScript

    Intlayer टाइपस्क्रिप्ट के फायदों को प्राप्त करने के लिए मॉड्यूल वृद्धि का उपयोग करता है और आपके कोडबेस को मजबूत बनाता है।

    alt text

    alt text

    सुनिश्चित करें कि आपकी TypeScript कॉन्फ़िगरेशन में स्वचालित रूप से उत्पन्न प्रकार शामिल हैं।

    json5
    1// tsconfig.json 2 3{ 4 // आपकी कस्टम कॉन्फ़िग 5 include: [ 6 "src", 7 "types", // <- ऑटो जनरेटेड प्रकार शामिल करें 8 ], 9}

    Git Configuration

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

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

    gitignore
    1# Ignore the files generated by Intlayer 2.intlayer

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

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

    इस पृष्ठ में