@intlayer/docs 8.1.6 → 8.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -9
- package/dist/cjs/generated/docs.entry.cjs +1 -1
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +1 -1
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +2 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/compiler.md +26 -0
- package/docs/ar/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/ar/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/ar/readme.md +138 -110
- package/docs/de/compiler.md +26 -0
- package/docs/de/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/de/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/de/readme.md +152 -124
- package/docs/en/compiler.md +27 -0
- package/docs/en/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/en/intlayer_with_vite+react_compiler.md +368 -0
- package/docs/en/readme.md +129 -105
- package/docs/en-GB/compiler.md +26 -0
- package/docs/en-GB/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/en-GB/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/en-GB/readme.md +134 -108
- package/docs/es/compiler.md +26 -0
- package/docs/es/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/es/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/es/readme.md +149 -121
- package/docs/fr/compiler.md +26 -0
- package/docs/fr/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/fr/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/fr/readme.md +150 -122
- package/docs/hi/compiler.md +26 -0
- package/docs/hi/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/hi/intlayer_with_vite+react_compiler.md +370 -0
- package/docs/hi/readme.md +153 -125
- package/docs/id/compiler.md +26 -0
- package/docs/id/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/id/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/id/readme.md +133 -105
- package/docs/it/compiler.md +26 -0
- package/docs/it/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/it/intlayer_with_vite+react_compiler.md +374 -0
- package/docs/it/readme.md +155 -127
- package/docs/ja/compiler.md +26 -0
- package/docs/ja/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/ja/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/ja/readme.md +152 -126
- package/docs/ko/compiler.md +26 -0
- package/docs/ko/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/ko/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/ko/readme.md +154 -126
- package/docs/pl/compiler.md +26 -0
- package/docs/pl/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/pl/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/pl/readme.md +134 -106
- package/docs/pt/compiler.md +27 -1
- package/docs/pt/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/pt/intlayer_with_vite+react_compiler.md +374 -0
- package/docs/pt/readme.md +154 -126
- package/docs/ru/compiler.md +26 -0
- package/docs/ru/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/ru/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/ru/readme.md +137 -109
- package/docs/tr/compiler.md +26 -0
- package/docs/tr/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/tr/intlayer_with_vite+react_compiler.md +375 -0
- package/docs/tr/readme.md +139 -111
- package/docs/uk/compiler.md +26 -0
- package/docs/uk/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/uk/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/uk/readme.md +133 -109
- package/docs/vi/compiler.md +27 -1
- package/docs/vi/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/vi/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/vi/readme.md +138 -110
- package/docs/zh/compiler.md +26 -0
- package/docs/zh/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/zh/intlayer_with_vite+react_compiler.md +372 -0
- package/docs/zh/readme.md +148 -120
- package/package.json +7 -8
- package/src/generated/docs.entry.ts +40 -0
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-01-10
|
|
3
|
+
updatedAt: 2026-01-10
|
|
4
|
+
title: Next.js i18n - मौजूदा Next.js ऐप को बहुभाषी ऐप में बदलें (i18n गाइड 2026)
|
|
5
|
+
description: जानें कि Intlayer Compiler का उपयोग करके अपने मौजूदा Next.js एप्लिकेशन को बहुभाषी कैसे बनाया जाए। AI का उपयोग करके अपने ऐप का अंतर्राष्ट्रीयकरण (i18n) और अनुवाद करने के लिए दस्तावेज़ का पालन करें।
|
|
6
|
+
keywords:
|
|
7
|
+
- अंतर्राष्ट्रीयकरण
|
|
8
|
+
- दस्तावेज़
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Next.js
|
|
11
|
+
- JavaScript
|
|
12
|
+
- React
|
|
13
|
+
- कंपाइलर
|
|
14
|
+
- AI
|
|
15
|
+
slugs:
|
|
16
|
+
- doc
|
|
17
|
+
- configuration
|
|
18
|
+
- nextjs
|
|
19
|
+
- compiler
|
|
20
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-next-no-lolale-path-template
|
|
21
|
+
youtubeVideo: https://www.youtube.com/watch?v=e_PPG7PTqGU
|
|
22
|
+
history:
|
|
23
|
+
- version: 8.1.6
|
|
24
|
+
date: 2026-02-23
|
|
25
|
+
changes: प्रारंभिक विमोचन
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# मौजूदा Next.js एप्लिकेशन को बहुभाषी (i18n) कैसे बनाएं (i18n गाइड 2026)
|
|
29
|
+
|
|
30
|
+
<Tabs defaultTab="video">
|
|
31
|
+
<Tab label="वीडियो" value="video">
|
|
32
|
+
|
|
33
|
+
<iframe title="Best i18n solution for Next.js? Discover Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/e_PPG7PTqGU?autoplay=0&origin=http://intlayer.org&controls=0&rel=1"/>
|
|
34
|
+
|
|
35
|
+
</Tab>
|
|
36
|
+
<Tab label="कोड" value="code">
|
|
37
|
+
|
|
38
|
+
<iframe
|
|
39
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-next-16-no-locale-path-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
40
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
41
|
+
title="CodeSandbox डेमो - Intlayer के साथ अपने ऐप को कैसे अंतर्राष्ट्रीयकृत करें"
|
|
42
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
43
|
+
loading="lazy"
|
|
44
|
+
/>
|
|
45
|
+
|
|
46
|
+
</Tab>
|
|
47
|
+
</Tabs>
|
|
48
|
+
|
|
49
|
+
GitHub पर [एप्लिकेशन टेम्पलेट](https://github.com/aymericzip/intlayer-next-no-lolale-path-template) देखें।
|
|
50
|
+
|
|
51
|
+
## विषय सूची
|
|
52
|
+
|
|
53
|
+
<TOC/>
|
|
54
|
+
|
|
55
|
+
## मौजूदा एप्लिकेशन का अंतर्राष्ट्रीयकरण (i18n) कठिन क्यों है?
|
|
56
|
+
|
|
57
|
+
यदि आपने कभी किसी ऐसे एप्लिकेशन में कई भाषाएँ जोड़ने का प्रयास किया है जो केवल एक के लिए बनाया गया था, तो आप इससे होने वाली परेशानी को जानते हैं। यह सिर्फ "कठिन" नहीं है — यह थकाऊ है। आपको हर फ़ाइल से गुजरना होगा, हर टेक्स्ट स्ट्रिंग को ढूंढना होगा, और उन्हें अलग-अलग शब्दकोश (dictionary) फ़ाइलों में ले जाना होगा।
|
|
58
|
+
|
|
59
|
+
फिर सबसे जोखिम भरा हिस्सा आता है: लेआउट या लॉजिक को तोड़े बिना उस सभी टेक्स्ट को कोड हुक (hooks) से बदलना। यह उस तरह का काम है जो हफ्तों तक नई सुविधाओं के विकास को रोक देता है और एक न खत्म होने वाले रीफैक्टोरिंग जैसा लगता है।
|
|
60
|
+
|
|
61
|
+
## Intlayer Compiler क्या है?
|
|
62
|
+
|
|
63
|
+
**Intlayer Compiler** को उस मैन्युअल काम को छोड़ने के लिए बनाया गया था। स्ट्रिंग्स को मैन्युअल रूप से निकालने के बजाय, यह कंपाइलर आपके लिए ऐसा करता है। यह आपके कोड को स्कैन करता है, टेक्स्ट ढूंढता है, और पृष्ठभूमि में शब्दकोश उत्पन्न करने के लिए AI का उपयोग करता है।
|
|
64
|
+
फिर, यह आवश्यक i18n हुक को इंजेक्ट करने के लिए बिल्ड चरण के दौरान आपके सोर्स कोड को संशोधित करता है। मूल रूप से, आप अपना ऐप लिखते रहें जैसे कि वह एक भाषा में हो, और कंपाइलर बहुभाषी रूपांतरण को मूल रूप से संभालता है।
|
|
65
|
+
|
|
66
|
+
> कंपाइलर दस्तावेज़: [https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/compiler.md](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/compiler.md)
|
|
67
|
+
|
|
68
|
+
### सीमाएं
|
|
69
|
+
|
|
70
|
+
चूंकि कंपाइलर **कंपाइल समय** पर कोड विश्लेषण और रूपांतरण (हुक इंजेक्ट करना और डिक्शनरी बनाना) करता है, इसलिए यह आपके एप्लिकेशन की **बिल्ड प्रक्रिया को धीमा** कर सकता है।
|
|
71
|
+
|
|
72
|
+
विकास के दौरान इस प्रभाव को सीमित करने के लिए, आप कंपाइलर को [`'build-only'`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md) मोड में चलाने के लिए सेट कर सकते हैं या आवश्यकता न होने पर इसे अक्षम कर सकते हैं।
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Next.js एप्लिकेशन में Intlayer सेट करने के लिए चरण-दर-चरण मार्गदर्शिका
|
|
77
|
+
|
|
78
|
+
### चरण 1: निर्भरताएं स्थापित करें
|
|
79
|
+
|
|
80
|
+
npm का उपयोग करके आवश्यक पैकेज स्थापित करें:
|
|
81
|
+
|
|
82
|
+
```bash packageManager="npm"
|
|
83
|
+
npm install intlayer next-intlayer
|
|
84
|
+
npm install @intlayer/babel --save-dev
|
|
85
|
+
npx intlayer init
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
```bash packageManager="pnpm"
|
|
89
|
+
pnpm add intlayer next-intlayer
|
|
90
|
+
pnpm add @intlayer/babel --save-dev
|
|
91
|
+
pnpm intlayer init
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
```bash packageManager="yarn"
|
|
95
|
+
yarn add intlayer next-intlayer
|
|
96
|
+
yarn add @intlayer/babel --save-dev
|
|
97
|
+
yarn intlayer init
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
```bash packageManager="bun"
|
|
101
|
+
bun add intlayer next-intlayer
|
|
102
|
+
bun add @intlayer/babel --dev
|
|
103
|
+
bunx intlayer init
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- **intlayer**
|
|
107
|
+
|
|
108
|
+
कोर पैकेज जो कॉन्फ़िगरेशन प्रबंधन, अनुवाद, [सामग्री घोषणा](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/content_file.md), ट्रांसपिलेशन, और [CLI कमांड](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/cli/index.md) के लिए अंतर्राष्ट्रीयकरण उपकरण प्रदान करता है।
|
|
109
|
+
|
|
110
|
+
- **next-intlayer**
|
|
111
|
+
|
|
112
|
+
पैकेज जो Intlayer को Next.js के साथ एकीकृत करता है। यह Next.js अंतर्राष्ट्रीयकरण के लिए कॉन्टेक्स्ट प्रोवाइडर और हुक प्रदान करता है। इसके अतिरिक्त, इसमें Intlayer को [Webpack](https://webpack.js.org/) या [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack) के साथ एकीकृत करने के लिए Next.js प्लगइन शामिल है, साथ ही उपयोगकर्ता की पसंदीदा लोकेल का पता लगाने, कुकीज़ और URL पुनर्निर्देशन को संभालने के लिए मिडिलवेयर भी शामिल है।
|
|
113
|
+
|
|
114
|
+
### चरण 2: अपना प्रोजेक्ट कॉन्फ़िगर करें
|
|
115
|
+
|
|
116
|
+
अपने एप्लिकेशन की भाषाओं को परिभाषित करने के लिए एक कॉन्फ़िगरेशन फ़ाइल बनाएं:
|
|
117
|
+
|
|
118
|
+
```typescript fileName="intlayer.config.ts"
|
|
119
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
120
|
+
|
|
121
|
+
const config: IntlayerConfig = {
|
|
122
|
+
internationalization: {
|
|
123
|
+
locales: [Locales.ENGLISH, Locales.HINDI],
|
|
124
|
+
defaultLocale: Locales.HINDI,
|
|
125
|
+
},
|
|
126
|
+
routing: {
|
|
127
|
+
mode: "search-params",
|
|
128
|
+
},
|
|
129
|
+
compiler: {
|
|
130
|
+
enabled: true, // dev मोड में प्रभाव को सीमित करने के लिए 'build-only' पर सेट किया जा सकता है
|
|
131
|
+
outputDir: "i18n",
|
|
132
|
+
dictionaryKeyPrefix: "", // कोई उपसर्ग नहीं, डिफ़ॉल्ट "comp-" है
|
|
133
|
+
},
|
|
134
|
+
ai: {
|
|
135
|
+
provider: "openai",
|
|
136
|
+
model: "gpt-5-mini",
|
|
137
|
+
apiKey: process.env.OPEN_AI_API_KEY,
|
|
138
|
+
applicationContext: "यह एप्लिकेशन एक साधारण मैप एप्लिकेशन उदाहरण है",
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
export default config;
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
> **ध्यान दें**: सुनिश्चित करें कि आपने अपने पर्यावरण चर में `OPEN_AI_API_KEY` सेट किया हुआ है।
|
|
146
|
+
|
|
147
|
+
> इस कॉन्फ़िगरेशन फ़ाइल के माध्यम से, आप स्थानीयकृत URL, प्रॉक्सी रीडायरेक्ट, कुकी मैपिंग, सामग्री घोषणाओं का स्थान और एक्सटेंशन सेट कर सकते हैं, कंसोल में Intlayer लॉग अक्षम कर सकते हैं, और बहुत कुछ कर सकते हैं। उपलब्ध मापदंडों की पूरी सूची के लिए, [कॉन्फ़िगरेशन दस्तावेज़](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md) देखें।
|
|
148
|
+
|
|
149
|
+
### चरण 3: अपने Next.js कॉन्फ़िगरेशन में Intlayer को एकीकृत करें
|
|
150
|
+
|
|
151
|
+
Intlayer का उपयोग करने के लिए अपने Next.js सेटअप को कॉन्फ़िगर करें:
|
|
152
|
+
|
|
153
|
+
```typescript fileName="next.config.ts"
|
|
154
|
+
import type { NextConfig } from "next";
|
|
155
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
156
|
+
|
|
157
|
+
const nextConfig: NextConfig = {
|
|
158
|
+
/* वैकल्पिक अतिरिक्त Next.js कॉन्फ़िगरेशन यहाँ */
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export default withIntlayer(nextConfig);
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
> `withIntlayer()` Next.js प्लगइन का उपयोग Intlayer को Next.js के साथ एकीकृत करने के लिए किया जाता है। यह शब्दकोश फ़ाइलों का निर्माण सुनिश्चित करता है और देव मोड में उन्हें वॉच करता है। यह [Webpack](https://webpack.js.org/) या [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack) वातावरण के भीतर Intlayer पर्यावरण चर परिभाषित करता है। इसके अलावा, यह प्रदर्शन को अनुकूलित करने के लिए उपनाम प्रदान करता है और सर्वर कंपोनेंट्स के साथ पूरी तरह काम करता है।
|
|
165
|
+
|
|
166
|
+
### चरण 4: Babel कॉन्फ़िगर करें
|
|
167
|
+
|
|
168
|
+
Intlayer कंपाइलर को आपकी सामग्री निकालने और अनुकूलित करने के लिए Babel की आवश्यकता होती है। Intlayer प्लगइन्स शामिल करने के लिए अपना `babel.config.js` (या `babel.config.json`) अपडेट करें:
|
|
169
|
+
|
|
170
|
+
```typescript fileName="babel.config.js"
|
|
171
|
+
const {
|
|
172
|
+
intlayerExtractBabelPlugin,
|
|
173
|
+
intlayerOptimizeBabelPlugin,
|
|
174
|
+
getExtractPluginOptions,
|
|
175
|
+
getOptimizePluginOptions,
|
|
176
|
+
} = require("@intlayer/babel");
|
|
177
|
+
|
|
178
|
+
module.exports = {
|
|
179
|
+
presets: ["next/babel"],
|
|
180
|
+
plugins: [
|
|
181
|
+
[intlayerExtractBabelPlugin, getExtractPluginOptions()],
|
|
182
|
+
[intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
|
|
183
|
+
],
|
|
184
|
+
};
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### चरण 5: अपने पेजों में लोकेल डिटेक्शन
|
|
188
|
+
|
|
189
|
+
अपने `RootLayout` की सामग्री साफ़ करें और उसे नीचे दिए गए उदाहरण से बदलें:
|
|
190
|
+
|
|
191
|
+
```tsx fileName="src/app/layout.tsx"
|
|
192
|
+
import type { Metadata } from "next";
|
|
193
|
+
import type { ReactNode } from "react";
|
|
194
|
+
import "./globals.css";
|
|
195
|
+
import { IntlayerClientProvider, LocalPromiseParams } from "next-intlayer";
|
|
196
|
+
import { getHTMLTextDir, getIntlayer } from "intlayer";
|
|
197
|
+
import { getLocale } from "next-intlayer/server";
|
|
198
|
+
export { generateStaticParams } from "next-intlayer";
|
|
199
|
+
|
|
200
|
+
export const generateMetadata = async (): Promise<Metadata> => {
|
|
201
|
+
const locale = await getLocale();
|
|
202
|
+
const { title, description, keywords } = getIntlayer("metadata", locale);
|
|
203
|
+
|
|
204
|
+
return {
|
|
205
|
+
title,
|
|
206
|
+
description,
|
|
207
|
+
keywords,
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const RootLayout = async ({
|
|
212
|
+
children,
|
|
213
|
+
}: Readonly<{
|
|
214
|
+
children: ReactNode;
|
|
215
|
+
}>) => {
|
|
216
|
+
const locale = await getLocale();
|
|
217
|
+
|
|
218
|
+
return (
|
|
219
|
+
<html lang={locale} dir={getHTMLTextDir(locale)}>
|
|
220
|
+
<IntlayerClientProvider defaultLocale={locale}>
|
|
221
|
+
<body>{children}</body>
|
|
222
|
+
</IntlayerClientProvider>
|
|
223
|
+
</html>
|
|
224
|
+
);
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
export default RootLayout;
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### चरण 6: अपने कंपोनेंट्स कंपाइल करें
|
|
231
|
+
|
|
232
|
+
कंपाइलर सक्षम होने के साथ, आपको अब सामग्री शब्दकोशों (जैसे `.content.ts` फ़ाइलें) को मैन्युअल रूप से घोषित करने की **आवश्यकता नहीं** है।
|
|
233
|
+
|
|
234
|
+
इसके बजाय, आप सीधे अपने कोड में हार्डकोडेड स्ट्रिंग्स के रूप में अपनी सामग्री लिखते हैं। Intlayer स्रोत कोड को स्कैन करेगा, कॉन्फ़िगर किए गए AI प्रदाता का उपयोग करके अनुवाद उत्पन्न करेगा, और बिल्ड कंपाइल चरण के दौरान उन स्ट्रिंग्स को स्थानीयकृत सामग्री के साथ चुपचाप बदल देगा। यह सब पूरी तरह से स्वचालित है।
|
|
235
|
+
|
|
236
|
+
बस अपने डिफ़ॉल्ट लोकेल में हार्ड-कोडेड स्ट्रिंग्स के साथ अपने घटकों का उपयोग करें और Intlayer कंपाइलर को बाकी काम करने दें।
|
|
237
|
+
|
|
238
|
+
आपका `page.tsx` कैसा दिखेगा इसका उदाहरण:
|
|
239
|
+
|
|
240
|
+
<Tabs>
|
|
241
|
+
<Tab value="Code">
|
|
242
|
+
|
|
243
|
+
```tsx fileName="src/app/page.tsx"
|
|
244
|
+
import type { FC } from "react";
|
|
245
|
+
import { IntlayerServerProvider } from "next-intlayer/server";
|
|
246
|
+
import { getLocale } from "next-intlayer/server";
|
|
247
|
+
|
|
248
|
+
const PageContent: FC = () => {
|
|
249
|
+
return (
|
|
250
|
+
<>
|
|
251
|
+
<p>संपादन करके शुरू करें!</p>
|
|
252
|
+
<code>src/app/page.tsx</code>
|
|
253
|
+
</>
|
|
254
|
+
);
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
export default async function Page() {
|
|
258
|
+
const locale = await getLocale();
|
|
259
|
+
|
|
260
|
+
return (
|
|
261
|
+
<IntlayerServerProvider locale={locale}>
|
|
262
|
+
<PageContent />
|
|
263
|
+
</IntlayerServerProvider>
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
</Tab>
|
|
269
|
+
<Tab value="Output">
|
|
270
|
+
|
|
271
|
+
```ts fileName="i18n/page-content.content.tsx"
|
|
272
|
+
{
|
|
273
|
+
key: "page-content",
|
|
274
|
+
content: {
|
|
275
|
+
nodeType: "translation",
|
|
276
|
+
translation: {
|
|
277
|
+
en: {
|
|
278
|
+
getStartedByEditingThis: "Get started by editing this!",
|
|
279
|
+
},
|
|
280
|
+
fr: {
|
|
281
|
+
getStartedByEditingThis: "Commencez par éditer ceci !",
|
|
282
|
+
},
|
|
283
|
+
hi: {
|
|
284
|
+
getStartedByEditingThis: "संपादन करके शुरू करें!",
|
|
285
|
+
},
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
```tsx fileName="src/app/page.tsx"
|
|
292
|
+
import { type FC } from "react";
|
|
293
|
+
import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
|
|
294
|
+
import { getLocale } from "next-intlayer/server";
|
|
295
|
+
|
|
296
|
+
const PageContent: FC = () => {
|
|
297
|
+
const content = useIntlayer("page-content");
|
|
298
|
+
|
|
299
|
+
return (
|
|
300
|
+
<>
|
|
301
|
+
<p>{content.getStartedByEditingThis}</p>
|
|
302
|
+
<code>src/app/page.tsx</code>
|
|
303
|
+
</>
|
|
304
|
+
);
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
export default async function Page() {
|
|
308
|
+
const locale = await getLocale();
|
|
309
|
+
|
|
310
|
+
return (
|
|
311
|
+
<IntlayerServerProvider locale={locale}>
|
|
312
|
+
<PageContent />
|
|
313
|
+
</IntlayerServerProvider>
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
</Tab>
|
|
319
|
+
</Tabs>
|
|
320
|
+
|
|
321
|
+
- **`IntlayerClientProvider`** का उपयोग क्लाइंट साइड पर बच्चों को लोकेल प्रदान करने के लिए किया जाता है।
|
|
322
|
+
- जबकि **`IntlayerServerProvider`** का उपयोग सर्वर साइड पर बच्चों को लोकेल प्रदान करने के लिए किया जाता है।
|
|
323
|
+
|
|
324
|
+
### (वैकल्पिक) चरण 7: छूटे हुए अनुवाद भरें
|
|
325
|
+
|
|
326
|
+
Intlayer छूटे हुए अनुवादों को भरने में आपकी मदद करने के लिए एक CLI टूल प्रदान करता है। आप अपने कोड से छूटे हुए अनुवादों का परीक्षण करने और उन्हें भरने के लिए `intlayer` कमांड का उपयोग कर सकते हैं।
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
npx intlayer test # परीक्षण करें कि क्या अनुवाद छूटे हुए हैं
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
npx intlayer fill # छूटे हुए अनुवाद भरें
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
> अधिक विवरण के लिए, [CLI दस्तावेज़](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/cli/ci.md) देखें।
|
|
337
|
+
|
|
338
|
+
### (वैकल्पिक) चरण 8: लोकेल रूटिंग प्रॉक्सी मिडिलवेयर
|
|
339
|
+
|
|
340
|
+
यदि आप उपयोगकर्ता को उनकी पसंदीदा लोकेल पर स्वचालित रूप से रीडायरेक्ट करना चाहते हैं, तो एक प्रॉक्सी मिडिलवेयर स्थापित करें:
|
|
341
|
+
|
|
342
|
+
```typescript fileName="src/proxy.ts"
|
|
343
|
+
export { intlayerProxy as proxy } from "next-intlayer/proxy";
|
|
344
|
+
|
|
345
|
+
export const config = {
|
|
346
|
+
matcher:
|
|
347
|
+
"/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
|
|
348
|
+
};
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
> `intlayerProxy` का उपयोग उपयोगकर्ता की पसंदीदा लोकेल का पता लगाने और उन्हें [कॉन्फ़िगरेशन फ़ाइल सेटिंग्स](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md) में निर्दिष्ट उपयुक्त URL पर रीडायरेक्ट करने के लिए किया जाता है। इसके अतिरिक्त, यह उपयोगकर्ता की पसंदीदा लोकेल को कुकी में सहेजने में सक्षम बनाता है।
|
|
352
|
+
|
|
353
|
+
### (वैकल्पिक) चरण 9: अपनी सामग्री की भाषा बदलें
|
|
354
|
+
|
|
355
|
+
Next.js के भीतर सामग्री की भाषा बदलने का सबसे अनुशंसित तरीका उपयोगकर्ता को उपयुक्त भाषा के लिए एक रूट पर निर्देशित करने के लिए `Link` घटक का उपयोग करना है। यह Next.js पूर्व-प्राप्त क्षमताओं का लाभ उठाएगा और पूर्ण पृष्ठ के पुनः लोड को रोकेगा।
|
|
356
|
+
|
|
357
|
+
```tsx fileName="src/components/localeSwitcher/LocaleSwitcher.tsx"
|
|
358
|
+
"use client";
|
|
359
|
+
|
|
360
|
+
import type { FC } from "react";
|
|
361
|
+
import { Locales, getHTMLTextDir, getLocaleName } from "intlayer";
|
|
362
|
+
import { useLocale } from "next-intlayer";
|
|
363
|
+
|
|
364
|
+
export const LocaleSwitcher: FC = () => {
|
|
365
|
+
const { locale, availableLocales, setLocale } = useLocale({
|
|
366
|
+
onChange: () => window.location.reload(),
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
return (
|
|
370
|
+
<div>
|
|
371
|
+
<button popoverTarget="localePopover">{getLocaleName(locale)}</button>
|
|
372
|
+
<div id="localePopover" popover="auto">
|
|
373
|
+
{availableLocales.map((localeItem) => (
|
|
374
|
+
<button
|
|
375
|
+
key={localeItem}
|
|
376
|
+
aria-current={locale === localeItem ? "page" : undefined}
|
|
377
|
+
onClick={() => setLocale(localeItem)}
|
|
378
|
+
>
|
|
379
|
+
<span>
|
|
380
|
+
{/* लोकेल - उदा: HI */}
|
|
381
|
+
{localeItem}
|
|
382
|
+
</span>
|
|
383
|
+
<span>
|
|
384
|
+
{/* अपनी ही भाषा में लोकेल - उदा: हिन्दी */}
|
|
385
|
+
{getLocaleName(localeItem, locale)}
|
|
386
|
+
</span>
|
|
387
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
388
|
+
{/* वर्तमान लोकेल की भाषा में - उदा: Francés यदि वर्तमान लोकेल Locales.SPANISH है */}
|
|
389
|
+
{getLocaleName(localeItem)}
|
|
390
|
+
</span>
|
|
391
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
392
|
+
{/* अंग्रेजी में लोकेल - उदा: Hindi */}
|
|
393
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
394
|
+
</span>
|
|
395
|
+
</button>
|
|
396
|
+
))}
|
|
397
|
+
</div>
|
|
398
|
+
</div>
|
|
399
|
+
);
|
|
400
|
+
};
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
> एक विकल्प `useLocale` हुक द्वारा प्रदान किए गए `setLocale` फ़ंक्शन का उपयोग करना है। यह फ़ंक्शन पेज प्रीफेचिंग की अनुमति नहीं देगा। अधिक जानकारी के लिए [`useLocale` हुक दस्तावेज़](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/packages/next-intlayer/useLocale.md) देखें।
|
|
404
|
+
|
|
405
|
+
### (वैकल्पिक) चरण 10: अपने बंडल आकार को अनुकूलित करें
|
|
406
|
+
|
|
407
|
+
`next-intlayer` का उपयोग करते समय, डिक्शनरी डिफ़ॉल्ट रूप से प्रत्येक पेज के बंडल में शामिल की जाएंगी। बंडल आकार को अनुकूलित करने के लिए, Intlayer एक वैकल्पिक SWC प्लगइन प्रदान करता है जो मैक्रो का उपयोग करके `useIntlayer` कॉल्स को बुद्धिमानी से बदल देता है। यह सुनिश्चित करता है कि डिक्शनरी केवल उन पेजों के बंडल में शामिल हैं जो वास्तव में उनका उपयोग करते हैं।
|
|
408
|
+
|
|
409
|
+
इस अनुकूलन को सक्षम करने के लिए, `@intlayer/swc` पैकेज स्थापित करें। एक बार स्थापित होने के बाद, `next-intlayer` स्वचालित रूप से प्लगइन का पता लगाएगा और उसका उपयोग करेगा:
|
|
410
|
+
|
|
411
|
+
```bash packageManager="npm"
|
|
412
|
+
npm install @intlayer/swc --save-dev
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
```bash packageManager="pnpm"
|
|
416
|
+
pnpm add @intlayer/swc --save-dev
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
```bash packageManager="yarn"
|
|
420
|
+
yarn add @intlayer/swc --save-dev
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
```bash packageManager="bun"
|
|
424
|
+
bun add @intlayer/swc --dev
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
> नोट: यह अनुकूलन केवल Next.js 13 और उसके बाद के वर्ज़न के लिए उपलब्ध है।
|
|
428
|
+
|
|
429
|
+
> नोट: यह पैकेज डिफ़ॉल्ट रूप से स्थापित नहीं है क्योंकि Next.js SWC प्लगइन्स अभी भी प्रयोगात्मक हैं। भविष्य में यह बदल सकता है।
|
|
430
|
+
|
|
431
|
+
> नोट: यदि आप `importMode: 'dynamic'` या `importMode: 'fetch'` (डिक्शनरी कॉन्फ़िगरेशन में) विकल्प सेट करते हैं, तो यह Suspense पर निर्भर करेगा, इसलिए आपको `useIntlayer` कॉल्स को `Suspense` सीमा में लपेटना होगा। इसका मतलब है कि आप अपने पेज / लेआउट घटक के शीर्ष स्तर पर सीधे `useIntlayer` का उपयोग नहीं कर पाएंगे।
|
|
432
|
+
|
|
433
|
+
### TypeScript कॉन्फ़िगरेशन
|
|
434
|
+
|
|
435
|
+
Intlayer TypeScript लाभ प्राप्त करने और आपकी कोडबेस को अधिक मजबूत बनाने के लिए मॉड्यूल ऑगमेंटेशन (module augmentation) का उपयोग करता है।
|
|
436
|
+
|
|
437
|
+

|
|
438
|
+
|
|
439
|
+

|
|
440
|
+
|
|
441
|
+
सुनिश्चित करें कि आपकी TypeScript कॉन्फ़िगरेशन में ऑटो-जेनरेटेड टाइप शामिल हैं।
|
|
442
|
+
|
|
443
|
+
```json5 fileName="tsconfig.json"
|
|
444
|
+
{
|
|
445
|
+
// ... आपके मौजूदा TypeScript कॉन्फ़िगरेशन
|
|
446
|
+
"include": [
|
|
447
|
+
// ... आपके मौजूदा TypeScript कॉन्फ़िगरेशन
|
|
448
|
+
".intlayer/**/*.ts", // ऑटो-जेनरेटेड टाइप शामिल करें
|
|
449
|
+
],
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### Git कॉन्फ़िगरेशन
|
|
454
|
+
|
|
455
|
+
Intlayer द्वारा उत्पन्न फ़ाइलों को अनदेखा करने की अनुशंसा की जाती है। यह उन्हें आपके Git रिपॉजिटरी में कमिट करने से बचने की अनुमति देता है।
|
|
456
|
+
|
|
457
|
+
ऐसा करने के लिए, आप अपनी `.gitignore` फ़ाइल में निम्न निर्देश जोड़ सकते हैं:
|
|
458
|
+
|
|
459
|
+
```plaintext fileName=".gitignore"
|
|
460
|
+
# Intlayer द्वारा उत्पन्न फ़ाइलों को अनदेखा करें
|
|
461
|
+
.intlayer
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
### VS Code एक्सटेंशन
|
|
465
|
+
|
|
466
|
+
Intlayer के साथ आपके विकास के अनुभव को बेहतर बनाने के लिए, आप **आधिकारिक Intlayer VS Code एक्सटेंशन** स्थापित कर सकते हैं।
|
|
467
|
+
|
|
468
|
+
[VS Code Marketplace से स्थापित करें](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
469
|
+
|
|
470
|
+
यह एक्सटेंशन प्रदान करता है:
|
|
471
|
+
|
|
472
|
+
- अनुवाद कुंजियों के लिए **ऑटोकम्पलीट**।
|
|
473
|
+
- छूटे हुए अनुवादों के लिए **रीयल-टाइम त्रुटि डिटेक्शन**।
|
|
474
|
+
- अनुवादित सामग्री के **इनलाइन प्रीव्यू**।
|
|
475
|
+
- अनुवादों को आसानी से बनाने और अपडेट करने के लिए **त्वरित क्रियाएं (Quick actions)**।
|
|
476
|
+
|
|
477
|
+
एक्सटेंशन का उपयोग करने के बारे में अधिक विवरण के लिए [Intlayer VS Code एक्सटेंशन दस्तावेज़](https://intlayer.org/doc/vs-code-extension) पढ़ें।
|
|
478
|
+
|
|
479
|
+
### आगे बढ़ें
|
|
480
|
+
|
|
481
|
+
आगे बढ़ने के लिए, आप [विज़ुअल एडिटर](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/intlayer_visual_editor.md) लागू कर सकते हैं या [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/intlayer_CMS.md) का उपयोग करके अपनी सामग्री को बाहरी बना सकते हैं।
|