
Next.js अंतरराष्ट्रीयकरण की संपूर्ण गाइड
App Router के साथ next-intl सेट अप करें, लोकेल रूटिंग कॉन्फ़िगर करें और AI से अनुवाद ऑटोमेट करें।
next-intl इंस्टॉल करें
next-intl एक ही पैकेज में Next.js App Router के लिए लोकेल रूटिंग, मैसेज लोडिंग और ट्रांसलेशन हुक संभालता है।
npm install next-intli18n रिक्वेस्ट कॉन्फ़िग बनाएँ
दो फ़ाइलें बनाएँ: मैसेज लोड करने के लिए src/i18n/request.ts और लोकेल परिभाषाओं के लिए src/i18n/routing.ts। ये कॉन्फ़िगर करती हैं कि next-intl मैसेज और रूट कैसे रिज़ॉल्व करता है।
// src/i18n/routing.ts
import { defineRouting } from 'next-intl/routing';
import { createNavigation } from 'next-intl/navigation';
export const routing = defineRouting({
locales: ['en', 'de', 'ja', 'es'],
defaultLocale: 'en',
localePrefix: 'as-needed', // /about for en, /de/about for de
});
export const { Link, redirect, usePathname, useRouter } =
createNavigation(routing);Middleware कॉन्फ़िगर करें
लोकेल पहचान, URL रीराइट और रीडायरेक्ट संभालने के लिए middleware.ts जोड़ें। Middleware हर रिक्वेस्ट को इंटरसेप्ट करके सुनिश्चित करता है कि सही लोकेल लागू हो।
// middleware.ts <- Must be in project ROOT, not src/
import createMiddleware from 'next-intl/middleware';
import { routing } from './src/i18n/routing';
export default createMiddleware(routing);
export const config = {
matcher: ['/((?!api|_next|.*\\..*).*)'],
};[locale] फ़ोल्डर संरचना सेट अप करें
अपने ऐप रूट को app/[locale]/ के भीतर ले जाएँ। बिल्ड के समय हर लोकेल के लिए पेज जनरेट करने हेतु generateStaticParams जोड़ें। इससे /en/about, /de/about आदि वाली URL संरचना बनती है।
// app/[locale]/layout.tsx
import { routing } from '@/i18n/routing';
export function generateStaticParams() {
return routing.locales.map((locale) => ({ locale }));
}अपना रूट लेआउट अपडेट करें
getMessages() से मैसेज लोड करें और उन्हें अपने रूट लोकेल लेआउट में NextIntlClientProvider को पास करें। html का lang एट्रिब्यूट locale पैरामीटर से सेट करें।
// app/[locale]/layout.tsx
import { NextIntlClientProvider } from 'next-intl';
import { getMessages, setRequestLocale } from 'next-intl/server';
import { routing } from '@/i18n/routing';
import { notFound } from 'next/navigation';
export function generateStaticParams() {
return routing.locales.map((locale) => ({ locale }));
}
export default async function LocaleLayout({
children,
params,
}: {
children: React.ReactNode;
params: { locale: string };
}) {
const { locale } = await params;
if (!routing.locales.includes(locale as any)) notFound();
setRequestLocale(locale);
const messages = await getMessages();
return (
<html lang={locale}>
<body>
<NextIntlClientProvider locale={locale} messages={messages}>
{children}
</NextIntlClientProvider>
</body>
</html>
);
}कंपोनेंट में अनुवाद उपयोग करें
Server components getTranslations (async, await) उपयोग करते हैं। Client components useTranslations (hook) उपयोग करते हैं। आपका कंपोनेंट जहाँ रेंडर होता है, उसके आधार पर चुनें—server components अनुवादों को पूरी तरह JavaScript बंडल से बाहर रखते हैं।
// Server Component (default)
import { getTranslations, setRequestLocale } from 'next-intl/server';
export default async function AboutPage({
params,
}: { params: { locale: string } }) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations('AboutPage');
return <h1>{t('title')}</h1>;
}
// Client Component ('use client')
'use client';
import { useTranslations } from 'next-intl';
export default function SearchBar() {
const t = useTranslations('SearchBar');
return <input placeholder={t('placeholder')} />;
}SEO जोड़ें: मेटाडेटा और Hreflang
लोकेल-विशिष्ट पेज शीर्षक और विवरण बनाने के लिए generateMetadata उपयोग करें। hreflang टैग के लिए alternates.languages जोड़ें, ताकि सर्च इंजन हर पेज के सभी भाषा संस्करण खोज सकें।
// app/[locale]/layout.tsx or any page.tsx
import { getTranslations } from 'next-intl/server';
import { routing } from '@/i18n/routing';
export async function generateMetadata({
params,
}: { params: { locale: string } }) {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: 'Metadata' });
return {
title: t('title'),
description: t('description'),
alternates: {
languages: Object.fromEntries(
routing.locales.map((l) => [l, `/${l}`])
),
},
};
}त्रुटि और Not-Found पेज संभालें
error.tsx और not-found.tsx को विशेष रूप से संभालना पड़ता है, क्योंकि वे सामान्य लोकेल लेआउट के बाहर रेंडर हो सकते हैं। लोकलाइज़्ड त्रुटि संदेश दिखाने के लिए रूट not-found.tsx को अपना अलग i18n provider सेटअप चाहिए।
// app/[locale]/error.tsx
'use client';
import { useTranslations } from 'next-intl';
export default function Error() {
const t = useTranslations('Error');
return (
<div>
<h1>{t('title')}</h1>
<p>{t('description')}</p>
</div>
);
}
// app/not-found.tsx (root level -- needs own provider)
import { routing } from '@/i18n/routing';
export default async function GlobalNotFound() {
return (
<html lang={routing.defaultLocale}>
<body>
<h1>404 - Page Not Found</h1>
</body>
</html>
);
}अनुवाद ऑटोमेट करें
आपका i18n सेटअप पूरा हो जाने पर अपने IDE से सीधे AI का उपयोग करके अपनी मैसेज फ़ाइलों का अनुवाद करें या हर डिप्लॉय पर ऑटोमेटेड अनुवाद के लिए अपनी CI/CD pipeline में i18n Agent CLI उपयोग करें।
# In your IDE, ask your AI assistant:
> Translate messages/en.json to German, Japanese, and Spanish
✓ messages/de.json created (1.1s)
✓ messages/ja.json created (1.4s)
✓ messages/es.json created (1.0s)अनुवाद की गुणवत्ता जाँचने की प्रक्रिया ऑटोमेट करें
Next.js i18n के लिए ओपन-सोर्स टूल
ये ओपन-सोर्स पैकेज Next.js अंतरराष्ट्रीयकरण कार्य-प्रवाह की आम समस्याएँ हल करते हैं।
next-intl-localechain
कोई अनुवाद न मिलने पर सामान्य next-intl सीधे आपके डिफ़ॉल्ट लोकेल पर फ़ॉलबैक करता है। ब्राज़ीलियाई पुर्तगाली यूज़र को पूरी तरह उपयोगी pt-PT अनुवाद के बजाय अंग्रेज़ी दिखाई देती है। next-intl-localechain स्मार्ट फ़ॉलबैक चेन जोड़ता है—यह संबंधित लोकेल के अनुवादों को डीप-मर्ज करता है, ताकि क्षेत्रीय यूज़र को हमेशा उपलब्ध सबसे करीबी अनुवाद दिखाई दे।
import { getRequestConfig } from 'next-intl/server';
import { withLocaleChain } from 'next-intl-localechain';
export default getRequestConfig(withLocaleChain({
loadMessages: (locale) =>
import(`../../messages/${locale}.json`).then(m => m.default),
defaultLocale: 'en'
}));@i18n-agent/cli
टर्मिनल छोड़े बिना आपकी Next.js मैसेज फ़ाइलों का अनुवाद करने वाला कमांड-लाइन टूल। फ़ाइलों का सीधे अनुवाद करें, जॉब की स्थिति जाँचें और परिणाम डाउनलोड करें। पूरी तरह ऑटोमेटेड लोकलाइज़ेशन कार्य-प्रवाह के लिए यह API key authentication वाली CI/CD pipelines में काम करता है।
# Install the CLI
npm install -g @i18n-agent/cli
# Authenticate
i18nagent login
# Translate your message files
i18nagent translate ./messages/en.json --lang de,ja,es
# Or use in CI/CD with an API key
export I18N_AGENT_API_KEY=your-key-here
i18nagent translate ./messages/en.json --lang de,ja,esआम समस्याएँ
"Unable to find next-intl locale"
Middleware रिक्वेस्ट से मेल नहीं खाया। जाँचें: क्या middleware.ts प्रोजेक्ट रूट में है? क्या matcher पैटर्न स्टैटिक फ़ाइलों को सही ढंग से बाहर रखता है? क्या लोकेल आपके routing config में शामिल है?
अनपेक्षित डायनेमिक रेंडरिंग
किसी page या layout में setRequestLocale(locale) मौजूद नहीं है। इसके बिना next-intl लोकेल पहचानने के लिए headers/cookies उपयोग करता है, जिससे डायनेमिक रेंडरिंग अनिवार्य हो जाती है और स्टैटिक जनरेशन रुक जाता है।
i18n के साथ Parallel Routes का काम न करना
Parallel routes (@modal) और intercepting routes ((.)photo) की [locale] डायनेमिक सेगमेंट के साथ ज्ञात असंगतियाँ हैं। इन उन्नत routing patterns के लिए समाधान के रूप में middleware-आधारित routing उपयोग करें।
भाषा बदलने पर मौजूदा रूट का खो जाना
लोकेल बदलते समय usePathname() से मौजूदा pathname सुरक्षित रखें और केवल locale segment बदलें। डायनेमिक रूट पैरामीटर के साथ सावधानी रखें—उन्हें नए लोकेल के लिए फिर से रिज़ॉल्व करना होगा।
सुझाई गई फ़ाइल संरचना
my-nextjs-app/
├── middleware.ts # Locale routing (project root!)
├── next.config.mjs
├── messages/
│ ├── en.json # Source messages
│ ├── de.json
│ └── ja.json
├── src/
│ ├── i18n/
│ │ ├── request.ts # Message loading config
│ │ └── routing.ts # Locale definitions
│ └── app/
│ └── [locale]/
│ ├── layout.tsx # Root locale layout
│ ├── page.tsx # Home page
│ ├── error.tsx # Localized error page
│ ├── not-found.tsx # Localized 404
│ └── about/
│ └── page.tsx
└── package.jsonइनका भी अनुवाद करें:
i18n Agent अभी आज़माएँ
अपनी अनुवाद फ़ाइल यहाँ छोड़ें
JSON, YAML, PO, XML, CSV, Markdown, Properties
या ब्राउज़ करने के लिए क्लिक करें
लक्षित भाषाएँ
next-intl-localechain के साथ लोकेल फ़ॉलबैक
जब pt-BR जैसे क्षेत्रीय लोकेल में कोई अनुवाद कुंजी नहीं होती, तो next-intl पहले पैरेंट लोकेल pt की जाँच करने के बजाय सीधे डिफ़ॉल्ट लोकेल पर चला जाता है।
npm install next-intl-localechainimport { withLocaleChain } from 'next-intl-localechain';
export default withLocaleChain({
fallbacks: {
'pt-BR': ['pt', 'en'],
'zh-Hant-HK': ['zh-Hant', 'zh', 'en'],
},
defaultLocale: 'en',
loadMessages: (locale) => import(`./messages/${locale}.json`),
});समर्थित फ़्रेमवर्क की पूरी सूची और पहले से उपलब्ध 75 चेन के लिए हमारी लोकेल फ़ॉलबैक गाइड देखें। Learn more →