
React अंतरराष्ट्रीयकरण की संपूर्ण गाइड
शुरुआत से बहुभाषी ऐप तक: अपने React ऐप में i18n सेट अप करें और फिर AI से अनुवाद स्वचालित करें।
पैकेज इंस्टॉल करें
आपको तीन पैकेज चाहिए: react-i18next (React बाइंडिंग), i18next (मुख्य लाइब्रेरी) और स्वचालित लोकेल पहचान के लिए वैकल्पिक रूप से i18next-browser-languagedetector।
npm install react-i18next i18next i18next-browser-languagedetector i18next-http-backendi18n इंस्टेंस कॉन्फ़िगर करें
एक i18n कॉन्फ़िगरेशन फ़ाइल बनाएँ, जो आपकी डिफ़ॉल्ट भाषा, अनुवाद संसाधनों और प्लगइन शृंखला के साथ i18next को इनिशियलाइज़ करे। किसी भी कंपोनेंट के रेंडर होने से पहले इस फ़ाइल को आपके ऐप के एंट्री पॉइंट पर इंपोर्ट करना आवश्यक है।
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import Backend from 'i18next-http-backend';
i18n
.use(Backend)
.use(LanguageDetector)
.use(initReactI18next) // Must come before .init()
.init({
fallbackLng: 'en',
debug: process.env.NODE_ENV === 'development',
interpolation: {
escapeValue: false, // React already escapes
},
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json',
},
});
export default i18n;अपने ऐप को I18nextProvider में रैप करें
ऐप के रूट पर अपनी i18n कॉन्फ़िगरेशन फ़ाइल इंपोर्ट करें और अपनी कंपोनेंट ट्री को I18nextProvider में रैप करें। इसके बिना useTranslation() अनुवादित टेक्स्ट के बजाय मूल कुंजियाँ लौटाता है।
import React, { Suspense } from 'react';
import ReactDOM from 'react-dom/client';
import { I18nextProvider } from 'react-i18next';
import i18n from './i18n'; // Import your config
import App from './App';
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<Suspense fallback={<div>Loading...</div>}>
<I18nextProvider i18n={i18n}>
<App />
</I18nextProvider>
</Suspense>
</React.StrictMode>
);अनुवाद फ़ाइलें बनाएँ
प्रत्येक भाषा के लिए एक JSON फ़ाइल बनाएँ। स्ट्रिंग्स को सुविधा या पेज के अनुसार व्यवस्थित करने के लिए नेस्टेड कुंजियों का उपयोग करें। अपनी स्रोत भाषा (आमतौर पर अंग्रेज़ी) को सत्य का एकमात्र स्रोत बनाए रखें।
// public/locales/en/translation.json
{
"nav": {
"home": "Home",
"about": "About",
"settings": "Settings"
},
"greeting": "Hello, {{name}}!",
"cart": {
"itemCount_one": "{{count}} item",
"itemCount_other": "{{count}} items"
}
}
// public/locales/de/translation.json
{
"nav": {
"home": "Startseite",
"about": "Über uns",
"settings": "Einstellungen"
},
"greeting": "Hallo, {{name}}!",
"cart": {
"itemCount_one": "{{count}} Artikel",
"itemCount_other": "{{count}} Artikel"
}
}कंपोनेंट में अनुवादों का उपयोग करें
t() फ़ंक्शन पाने के लिए किसी भी कंपोनेंट में useTranslation() कॉल करें। इसका उपयोग साधारण स्ट्रिंग्स, इंटरपोलेटेड वेरिएबल और Trans कंपोनेंट के साथ JSX में एम्बेड किए गए अनुवादों के लिए करें।
import { useTranslation } from 'react-i18next';
function Greeting({ userName }: { userName: string }) {
const { t } = useTranslation();
return (
<div>
<h1>{t('greeting', { name: userName })}</h1>
<nav>
<a href="/">{t('nav.home')}</a>
<a href="/about">{t('nav.about')}</a>
</nav>
</div>
);
}import { Trans, useTranslation } from 'react-i18next';
// For JSX inside translations:
// "terms": "By signing up, you agree to our <link>Terms</link>."
function SignUp() {
const { t } = useTranslation();
return (
<Trans i18nKey="terms" components={{
link: <a href="/terms" className="underline" />
}} />
);
}बहुवचन और वेरिएबल संभालें
i18next केवल एकवचन/बहुवचन के आधार पर नहीं, बल्कि CLDR नियमों के अनुसार बहुवचन संभालता है। अरबी में 6 रूप (zero, one, two, few, many, other), जबकि जापानी में 1 (other) रूप होता है। अपनी अनुवाद फ़ाइलों में सभी आवश्यक रूप परिभाषित करें; i18next अपने-आप सही रूप चुन लेता है।
// English: 2 forms (one, other)
{
"itemCount_one": "{{count}} item",
"itemCount_other": "{{count}} items"
}
// Arabic: 6 forms (zero, one, two, few, many, other)
{
"itemCount_zero": "لا عناصر",
"itemCount_one": "عنصر واحد",
"itemCount_two": "عنصران",
"itemCount_few": "{{count}} عناصر",
"itemCount_many": "{{count}} عنصرًا",
"itemCount_other": "{{count}} عنصر"
}
// Japanese: 1 form (other)
{
"itemCount_other": "{{count}}個のアイテム"
}भाषा बदलने और पहचानने की सुविधा जोड़ें
ऐसा भाषा चयनकर्ता बनाएँ जो i18n.changeLanguage() कॉल करे। पहली बार आने पर यूज़र की पसंदीदा भाषा अपने-आप पहचानने के लिए इसे ब्राउज़र लैंग्वेज डिटेक्टर के साथ जोड़ें और फिर यूज़र की स्पष्ट पसंद को सहेजें।
import { useTranslation } from 'react-i18next';
const LANGUAGES = [
{ code: 'en', label: 'English' },
{ code: 'de', label: 'Deutsch' },
{ code: 'ja', label: '日本語' },
{ code: 'es', label: 'Español' },
];
function LanguageSwitcher() {
const { i18n } = useTranslation();
return (
<select
value={i18n.language}
onChange={(e) => i18n.changeLanguage(e.target.value)}
>
{LANGUAGES.map(({ code, label }) => (
<option key={code} value={code}>{label}</option>
))}
</select>
);
}अनुवाद स्वचालित करें
i18n सेटअप पूरा होने के बाद AI से अपनी लोकेल फ़ाइलों का अनुवाद करें। अपने IDE में AI सहायक से स्रोत फ़ाइल का अनुवाद करने के लिए कहें या अपनी CI/CD पाइपलाइन में i18n Agent CLI का उपयोग करें।
# In your IDE, ask your AI assistant:
> Translate public/locales/en/translation.json to German, Japanese, and Spanish
✓ de/translation.json created (1.2s)
✓ ja/translation.json created (1.5s)
✓ es/translation.json created (1.1s)
# Or use the CLI in CI/CD:
npx i18n-agent translate public/locales/en/translation.json --lang de,ja,esअनुवाद की गुणवत्ता स्वचालित रूप से जाँचें
आम समस्याएँ
अनुवादों में मूल कुंजियाँ दिखाई देना
फ़ॉलबैक के बिना Suspense त्रुटि
SSR हाइड्रेशन मिसमैच
अनुवाद कुंजियों के लिए ऑटोकंप्लीट उपलब्ध न होना
सुझाई गई फ़ाइल संरचना
my-react-app/
├── public/
│ └── locales/
│ ├── en/
│ │ ├── translation.json # Default namespace
│ │ ├── common.json # Shared strings
│ │ └── dashboard.json # Feature namespace
│ ├── de/
│ │ ├── translation.json
│ │ ├── common.json
│ │ └── dashboard.json
│ └── ja/
│ └── ...
├── src/
│ ├── i18n.ts # i18n configuration
│ ├── main.tsx # App entry with Provider
│ ├── App.tsx
│ └── components/
│ └── LanguageSwitcher.tsx
└── package.jsonइनका भी अनुवाद करें:
i18n Agent अभी आज़माएँ
अपनी अनुवाद फ़ाइल यहाँ छोड़ें
JSON, YAML, PO, XML, CSV, Markdown, Properties
या ब्राउज़ करने के लिए क्लिक करें
लक्षित भाषाएँ