@intlayer/docs 8.12.2 → 8.12.4-canary.0

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.
Files changed (73) hide show
  1. package/dist/cjs/blog.cjs.map +1 -1
  2. package/dist/cjs/common.cjs.map +1 -1
  3. package/dist/cjs/doc.cjs.map +1 -1
  4. package/dist/cjs/frequentQuestions.cjs.map +1 -1
  5. package/dist/cjs/generated/blog.entry.cjs +1 -0
  6. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  7. package/dist/cjs/generated/docs.entry.cjs +1 -0
  8. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  9. package/dist/cjs/generated/frequentQuestions.entry.cjs +1 -0
  10. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  11. package/dist/cjs/generated/legal.entry.cjs +1 -0
  12. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  13. package/dist/cjs/legal.cjs.map +1 -1
  14. package/dist/esm/blog.mjs.map +1 -1
  15. package/dist/esm/common.mjs.map +1 -1
  16. package/dist/esm/doc.mjs.map +1 -1
  17. package/dist/esm/frequentQuestions.mjs.map +1 -1
  18. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  19. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  20. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  21. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  22. package/dist/esm/legal.mjs.map +1 -1
  23. package/dist/types/blog.d.ts.map +1 -1
  24. package/dist/types/common.d.ts.map +1 -1
  25. package/dist/types/doc.d.ts.map +1 -1
  26. package/dist/types/frequentQuestions.d.ts.map +1 -1
  27. package/dist/types/legal.d.ts.map +1 -1
  28. package/docs/ar/bundle_optimization.md +250 -102
  29. package/docs/ar/configuration.md +10 -10
  30. package/docs/bn/bundle_optimization.md +252 -104
  31. package/docs/bn/configuration.md +10 -10
  32. package/docs/cs/bundle_optimization.md +253 -105
  33. package/docs/cs/configuration.md +10 -10
  34. package/docs/de/bundle_optimization.md +245 -97
  35. package/docs/de/configuration.md +10 -10
  36. package/docs/en/bundle_optimization.md +172 -49
  37. package/docs/en/configuration.md +10 -10
  38. package/docs/en-GB/bundle_optimization.md +230 -82
  39. package/docs/en-GB/configuration.md +10 -10
  40. package/docs/es/bundle_optimization.md +250 -102
  41. package/docs/es/configuration.md +10 -10
  42. package/docs/fr/bundle_optimization.md +223 -75
  43. package/docs/fr/configuration.md +10 -10
  44. package/docs/hi/bundle_optimization.md +253 -105
  45. package/docs/hi/configuration.md +10 -10
  46. package/docs/id/bundle_optimization.md +258 -110
  47. package/docs/id/configuration.md +10 -10
  48. package/docs/it/bundle_optimization.md +249 -103
  49. package/docs/it/configuration.md +10 -10
  50. package/docs/ja/bundle_optimization.md +245 -97
  51. package/docs/ja/configuration.md +10 -10
  52. package/docs/ko/bundle_optimization.md +253 -105
  53. package/docs/ko/configuration.md +10 -10
  54. package/docs/nl/bundle_optimization.md +249 -101
  55. package/docs/nl/configuration.md +10 -10
  56. package/docs/pl/bundle_optimization.md +258 -111
  57. package/docs/pl/configuration.md +10 -10
  58. package/docs/pt/bundle_optimization.md +256 -115
  59. package/docs/pt/configuration.md +10 -10
  60. package/docs/ru/bundle_optimization.md +253 -105
  61. package/docs/ru/configuration.md +10 -10
  62. package/docs/tr/bundle_optimization.md +255 -107
  63. package/docs/tr/configuration.md +10 -10
  64. package/docs/uk/bundle_optimization.md +250 -102
  65. package/docs/uk/configuration.md +10 -10
  66. package/docs/ur/bundle_optimization.md +257 -109
  67. package/docs/ur/configuration.md +10 -10
  68. package/docs/vi/bundle_optimization.md +259 -111
  69. package/docs/vi/configuration.md +10 -10
  70. package/docs/zh/bundle_optimization.md +260 -112
  71. package/docs/zh/configuration.md +10 -10
  72. package/docs/zh-TW/bundle_optimization.md +602 -0
  73. package/package.json +8 -8
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-04-08
4
- title: i18n बंडल साइज और परफॉरमेंस को ऑप्टिमाइज़ करना
5
- description: अंतर्राष्ट्रीयकरण (i18n) कंटेंट को ऑप्टिमाइज़ करके एप्लिकेशन बंडल साइज कम करें। जानें कि Intlayer के साथ डिक्शनरी के लिए tree shaking और lazy loading का लाभ कैसे उठाया जाए।
3
+ updatedAt: 2026-06-07
4
+ title: i18n बंडल साइज़ और परफॉरमेंस ऑप्टिमाइज़ेशन
5
+ description: अंतर्राष्ट्रीयकरण (i18n) कंटेंट को ऑप्टिमाइज़ करके अपने एप्लिकेशन के बंडल साइज़ को कम करें। जानें कि Intlayer के साथ डिक्शनरी के लिए ट्री शेकिंग (tree shaking) और लेज़ी लोडिंग (lazy loading) का उपयोग कैसे करें।
6
6
  keywords:
7
- - Bundle Optimization
7
+ - Bundle Optimisation
8
8
  - Content Automation
9
9
  - Dynamic Content
10
10
  - Intlayer
@@ -16,33 +16,36 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 8.12.0
20
+ date: 2026-06-07
21
+ changes: "Babel/Webpack के लिए `intlayerPurgeBabelPlugin` और `intlayerMinifyBabelPlugin` जोड़ा गया; प्लगइन पाइपलाइन को स्पष्ट किया गया"
19
22
  - version: 8.7.0
20
23
  date: 2026-04-08
21
- changes: "बिल्ड कॉन्फ़िगरेशन में `minify` और `purge` विकल्प जोड़ें"
24
+ changes: "बिल्ड कॉन्फ़िगरेशन में `minify` और `purge` विकल्प जोड़े गए"
22
25
  ---
23
26
 
24
- # i18n बंडल साइज और परफॉरमेंस को ऑप्टिमाइज़ करना
27
+ # i18n बंडल साइज़ और परफॉरमेंस ऑप्टिमाइज़ेशन
25
28
 
26
- JSON फाइलों पर निर्भर पारंपरिक i18n समाधानों के साथ सबसे आम चुनौतियों में से एक कंटेंट साइज को मैनेज करना है। यदि डेवलपर्स मैन्युअल रूप से कंटेंट को नेमस्पेस में अलग नहीं करते हैं, तो उपयोगकर्ता अक्सर एक ही पेज देखने के लिए हर पेज और संभावित रूप से हर भाषा के अनुवाद डाउनलोड कर लेते हैं।
29
+ JSON फ़ाइलों पर निर्भर पारंपरिक i18n सॉल्यूशन्स के साथ सबसे आम चुनौतियों में से एक कंटेंट के साइज़ को मैनेज करना है। यदि डेवलपर्स मैन्युअल रूप से कंटेंट को अलग-अलग नेमस्पेस में नहीं बांटते हैं, तो उपयोगकर्ता अक्सर केवल एक पेज देखने के लिए हर पेज के और संभावित रूप से हर भाषा के अनुवाद डाउनलोड कर लेते हैं।
27
30
 
28
- उदाहरण के लिए, 10 भाषाओं में अनुवादित 10 पेजों वाले एप्लिकेशन के परिणामस्वरूप उपयोगकर्ता 100 पेजों का कंटेंट डाउनलोड कर सकता है, भले ही उन्हें केवल **एक** (वर्तमान भाषा में वर्तमान पेज) की आवश्यकता हो। इससे बैंडविड्थ की बर्बादी होती है और लोड होने का समय धीमा हो जाता है।
31
+ उदाहरण के लिए, 10 भाषाओं में अनुवादित 10 पेजों वाले एप्लिकेशन के परिणामस्वरूप उपयोगकर्ता 100 पेजों का कंटेंट डाउनलोड कर सकता है, भले ही उसे केवल **एक** पेज (वर्तमान भाषा में वर्तमान पेज) की आवश्यकता हो। इससे बैंडविड्थ बर्बाद होती है और लोड होने में अधिक समय लगता है।
29
32
 
30
- **Intlayer बिल्ड-टाइम ऑप्टिमाइज़ेशन के माध्यम से इस समस्या को हल करता है।** यह आपके कोड को यह पता लगाने के लिए विश्लेषण करता है कि प्रति कंपोनेंट कौन सी डिक्शनरी वास्तव में उपयोग की जाती हैं और केवल आवश्यक कंटेंट को आपके बंडल में फिर से इंजेक्ट करता है।
33
+ **Intlayer इस समस्या को बिल्ड-टाइम ऑप्टिमाइज़ेशन के माध्यम से हल करता है।** यह आपके कोड का विश्लेषण करता है ताकि यह पता लगाया जा सके कि प्रति कंपोनेंट कौन सी डिक्शनरी वास्तव में उपयोग की जा रही हैं और केवल आवश्यक कंटेंट को ही आपके बंडल में फिर से शामिल (re-inject) करता है।
31
34
 
32
35
  ## विषय सूची
33
36
 
34
37
  <TOC />
35
38
 
36
- ## अपने बंडल को स्कैन करें
39
+ ## अपने बंडल का विश्लेषण करें
37
40
 
38
- अपने बंडल का विश्लेषण करना "भारी" JSON फाइलों और कोड-स्प्लिटिंग के अवसरों की पहचान करने का पहला कदम है। ये टूल आपके एप्लिकेशन के संकलित कोड का एक विज़ुअल ट्रीमैप (treemap) तैयार करते हैं, जिससे आप देख सकते हैं कि कौन सी लाइब्रेरी सबसे अधिक जगह घेर रही हैं।
41
+ अपने बंडल का विश्लेषण करना "भारी" JSON फ़ाइलों और कोड-स्प्लिटिंग के अवसरों की पहचान करने का पहला कदम है। ये टूल आपके एप्लिकेशन के कंपाइल किए गए कोड का एक विज़ुअल ट्री-मैप (treemap) जनरेट करते हैं, जिससे आप ठीक-ठीक देख सकते हैं कि कौन सी लाइब्रेरी सबसे ज़्यादा जगह ले रही हैं।
39
42
 
40
43
  <Tabs>
41
44
  <Tab value="vite">
42
45
 
43
46
  ### Vite / Rollup
44
47
 
45
- Vite हुड के नीचे Rollup का उपयोग करता है। `rollup-plugin-visualizer` प्लगइन एक इंटरैक्टिव HTML फ़ाइल जनरेट करता है जो आपके ग्राफ़ में हर मॉड्यूल का आकार दिखाता है।
48
+ Vite हुड के नीचे (under the hood) Rollup का उपयोग करता है। `rollup-plugin-visualizer` एक इंटरैक्टिव HTML फ़ाइल जनरेट करता है जो आपके ग्राफ़ में प्रत्येक मॉड्यूल का आकार दिखाती है।
46
49
 
47
50
  ```bash
48
51
  npm install -D rollup-plugin-visualizer
@@ -55,7 +58,7 @@ import { visualizer } from "rollup-plugin-visualizer";
55
58
  export default defineConfig({
56
59
  plugins: [
57
60
  visualizer({
58
- open: true, // रिपोर्ट को अपने ब्राउज़र में स्वचालित रूप से खोलें
61
+ open: true, // अपने ब्राउज़र में रिपोर्ट अपने आप खोलें
59
62
  filename: "stats.html",
60
63
  gzipSize: true,
61
64
  brotliSize: true,
@@ -69,7 +72,7 @@ export default defineConfig({
69
72
 
70
73
  ### Next.js (Turbopack)
71
74
 
72
- App Router और Turbopack का उपयोग करने वाले प्रोजेक्ट्स के लिए, Next.js एक अंतर्निहित प्रयोगात्मक विश्लेषक (experimental analyzer) प्रदान करता है जिसके लिए किसी अतिरिक्त डिपेंडेंसी की आवश्यकता नहीं होती है।
75
+ App Router और Turbopack का उपयोग करने वाले प्रोजेक्ट्स के लिए, Next.js एक अंतर्निहित, प्रायोगिक एनालाइज़र प्रदान करता है जिसके लिए किसी अतिरिक्त डिपेंडेंसी (dependency) की आवश्यकता नहीं होती।
73
76
 
74
77
  ```bash packageManager='npm'
75
78
  npx next experimental-analyze
@@ -92,7 +95,7 @@ bun next experimental-analyze
92
95
 
93
96
  ### Next.js (Webpack)
94
97
 
95
- यदि आप Next.js में डिफॉल्ट Webpack बंडलर का उपयोग कर रहे हैं, तो आधिकारिक बंडल विश्लेषक का उपयोग करें। अपने बिल्ड के दौरान एक एनवायरनमेंट वेरिएबल सेट करके इसे ट्रिगर करें।
98
+ यदि आप Next.js में डिफ़ॉल्ट Webpack बंडलर का उपयोग कर रहे हैं, तो आधिकारिक बंडल एनालाइज़र का उपयोग करें। अपने बिल्ड के दौरान एक एनवायरनमेंट वेरिएबल सेट करके इसे ट्रिगर करें।
96
99
 
97
100
  ```bash packageManager='npm'
98
101
  npm install -D @next/bundle-analyzer
@@ -116,7 +119,7 @@ const withBundleAnalyzer = require("@next/bundle-analyzer")({
116
119
  });
117
120
 
118
121
  module.exports = withBundleAnalyzer({
119
- // आपका Next.js कॉन्फ़िगरेशन
122
+ // आपका Next.js कॉन्फिग
120
123
  });
121
124
  ```
122
125
 
@@ -129,9 +132,9 @@ ANALYZE=true npm run build
129
132
  </Tab>
130
133
  <Tab value="Webpack (CRA / Angular / etc)">
131
134
 
132
- ### स्टैंडर्ड Webpack
135
+ ### Standard Webpack
133
136
 
134
- Create React App (ejected), Angular, या कस्टम Webpack सेटअप के लिए, इंडस्ट्री-स्टैंडर्ड `webpack-bundle-analyzer` का उपयोग करें।
137
+ Create React App (ejected), Angular, या कस्टम Webpack सेटअप के लिए, उद्योग मानक (industry standard) `webpack-bundle-analyzer` का उपयोग करें।
135
138
 
136
139
  ```bash packageManager='npm'
137
140
  npm install -D webpack-bundle-analyzer
@@ -149,7 +152,7 @@ pnpm add -D webpack-bundle-analyzer
149
152
  bun add -d webpack-bundle-analyzer
150
153
  ```
151
154
 
152
- ```typescript fileName="webpack.config.ts
155
+ ```typescript fileName="webpack.config.ts"
153
156
  import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer";
154
157
 
155
158
  export default {
@@ -168,27 +171,64 @@ export default {
168
171
 
169
172
  ## यह कैसे काम करता है
170
173
 
171
- Intlayer **प्रति-कंपोनेंट दृष्टिकोण (per-component approach)** का उपयोग करता है। ग्लोबल JSON फाइलों के विपरीत, आपका कंटेंट आपके कंपोनेंट्स के साथ या उनके भीतर परिभाषित किया जाता है। बिल्ड प्रक्रिया के दौरान, Intlayer:
174
+ Intlayer एक **प्रति-कंपोनेंट (per-component) दृष्टिकोण** का उपयोग करता है। वैश्विक (global) JSON फ़ाइलों के विपरीत, आपका कंटेंट आपके कंपोनेंट के साथ या उसके भीतर परिभाषित किया जाता है। बिल्ड प्रक्रिया के दौरान, Intlayer यह करेगा:
172
175
 
173
- 1. `useIntlayer` कॉल को खोजने के लिए आपके कोड का **विश्लेषण** करता है।
174
- 2. संबंधित डिक्शनरी कंटेंट को **बिल्ड** करता है।
175
- 3. आपके कॉन्फ़िगरेशन के आधार पर `useIntlayer` कॉल को ऑप्टिमाइज़्ड कोड से **बदलता** है।
176
+ 1. `useIntlayer` कॉल खोजने के लिए आपके कोड का **विश्लेषण** करेगा।
177
+ 2. संबंधित डिक्शनरी कंटेंट **बनाएगा** (Build)।
178
+ 3. आपके कॉन्फ़िगरेशन के आधार पर ऑप्टिमाइज़ किए गए कोड के साथ `useIntlayer` कॉल को **बदलेगा**।
176
179
 
177
180
  यह सुनिश्चित करता है कि:
178
181
 
179
- - यदि कोई कंपोनेंट इम्पोर्ट नहीं किया गया है, तो उसका कंटेंट बंडल में शामिल नहीं किया जाता है (Dead Code Elimination)।
180
- - यदि कोई कंपोनेंट लेजी-लोडेड (lazy-loaded) है, तो उसका कंटेंट भी लेजी-लोडेड होता है।
182
+ - यदि कोई कंपोनेंट आयात (import) नहीं किया गया है, तो उसका कंटेंट बंडल में शामिल नहीं होता है (Dead Code Elimination)।
183
+ - यदि कोई कंपोनेंट लेज़ी-लोडेड (lazy-loaded) है, तो उसका कंटेंट भी लेज़ी-लोडेड हो जाता है।
181
184
 
182
- ## प्लेटफॉर्म द्वारा सेटअप
185
+ ## प्लगइन संदर्भ (Plugin Reference)
186
+
187
+ Intlayer का बिल्ड ऑप्टिमाइज़ेशन कई अलग-अलग प्लगइन्स में विभाजित है, जिनमें से प्रत्येक की एक ही ज़िम्मेदारी है। यह समझने से कि प्रत्येक प्लगइन क्या करता है, उन्हें कॉन्फ़िगर करते समय भ्रम से बचा जा सकता है।
188
+
189
+ ### Babel प्लगइन्स (`@intlayer/babel`)
190
+
191
+ इनका उपयोग सीधे तौर पर Webpack-आधारित सेटअप (Babel के साथ Next.js, CRA, कस्टम Webpack, आदि) के लिए `babel.config.js` में किया जाता है।
192
+
193
+ | प्लगइन | यह क्या करता है |
194
+ | :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- |
195
+ | `intlayerExtractBabelPlugin` | `.content.ts` फ़ाइलों को स्कैन करता है और कंपाइल की गई डिक्शनरी को `.intlayer/` में लिखता है |
196
+ | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` को `useDictionary(hash)` में फिर से लिखता है (rewrite) और मिलान वाली डिक्शनरी का `import` इंजेक्ट करता है |
197
+ | `intlayerPurgeBabelPlugin` | सभी स्रोत (source) फ़ाइलों को स्कैन करता है, संकलित (compiled) `.intlayer/**/*.json` डिक्शनरी फ़ाइलों से **अप्रयुक्त कंटेंट फ़ील्ड** को हटा देता है |
198
+ | `intlayerMinifyBabelPlugin` | JSON फ़ाइलों और स्रोत कोड दोनों में **कंटेंट फ़ील्ड कीज़ (keys) का नाम बदलकर** छोटे अल्फाबेटिकल उपनाम (alias) कर देता है (जैसे `title` → `a`) |
199
+
200
+ > **प्लगइन का क्रम महत्वपूर्ण है।** आपके `babel.config.js` में purge और minify प्लगइन ऑप्टिमाइज़ (optimize) प्लगइन से **पहले** आने चाहिए। ऑप्टिमाइज़ पास `useIntlayer('key')` को एक अपारदर्शी (opaque) `useDictionary(hash)` कॉल से बदल देता है, जिससे डिक्शनरी की-की (key) जानकारी मिट जाती है, जिसकी आवश्यकता purge और minify पास को यह पहचानने के लिए होती है कि किन फ़ील्ड्स का उपयोग किया जा रहा है।
201
+
202
+ प्रत्येक Babel प्लगइन में एक संगत (corresponding) विकल्प सहायक (options helper) होता है जो कॉन्फ़िग लोड के समय एक बार आपके `intlayer.config.ts` को पढ़ता है और पहले से हल (pre-resolved) किए गए मान लौटाता है:
203
+
204
+ | Options helper | किसके साथ उपयोग किया जाता है |
205
+ | :--------------------------- | :---------------------------- |
206
+ | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
207
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
208
+ | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
209
+ | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
210
+
211
+ ### Vite प्लगइन्स (`vite-intlayer`)
212
+
213
+ Vite उपयोगकर्ता **इन्हें कभी भी सीधे कॉन्फ़िगर नहीं करते हैं**। जब आप `vite.config.ts` में `withIntlayer()` कॉल करते हैं तो वे स्वचालित रूप से जुड़ जाते हैं। `intlayer.config.ts` में `build.purge` और `build.minify` फ़्लैग किसी अतिरिक्त प्लगइन पंजीकरण (registration) के बिना संगत (corresponding) व्यवहार को टॉगल करते हैं।
214
+
215
+ | इंटरनल Vite प्लगइन | समकक्ष व्यवहार (Equivalent behaviour) |
216
+ | :----------------- | :--------------------------------------------------------------------------------------------- |
217
+ | Usage analyzer | `intlayerPurgeBabelPlugin` के एनालाइज़ (analyse) पास के समान |
218
+ | Dictionary prune | `intlayerPurgeBabelPlugin` के JSON राइट पास के समान |
219
+ | Dictionary minify | `intlayerMinifyBabelPlugin` के JSON राइट पास के समान |
220
+ | Babel transform | `intlayerMinifyBabelPlugin` के स्रोत कोड का नाम बदलने और `intlayerOptimizeBabelPlugin` के समान |
221
+
222
+ ## प्लेटफ़ॉर्म के अनुसार सेटअप
183
223
 
184
224
  <Tabs>
185
225
  <Tab value="nextjs">
186
226
 
187
227
  ### Next.js
188
228
 
189
- Next.js को ट्रांसफॉर्मेशन को संभालने के लिए `@intlayer/swc` प्लगइन की आवश्यकता होती है, क्योंकि Next.js बिल्ड के लिए SWC का उपयोग करता है।
229
+ Next.js को ऑप्टिमाइज़ (import rewrite) पास के लिए `@intlayer/swc` प्लगइन की आवश्यकता होती है, क्योंकि Next.js बिल्ड के लिए SWC का उपयोग करता है।
190
230
 
191
- > यह प्लगइन डिफॉल्ट रूप से इंस्टॉल नहीं किया जाता है क्योंकि SWC प्लगइन अभी भी Next.js के लिए प्रयोगात्मक हैं। यह भविष्य में बदल सकता है।
231
+ > यह प्लगइन डिफ़ॉल्ट रूप से इंस्टॉल नहीं होता है क्योंकि SWC प्लगइन्स अभी भी Next.js के लिए प्रायोगिक (experimental) हैं। भविष्य में यह बदल सकता है।
192
232
 
193
233
  ```bash packageManager="npm"
194
234
  npm install -D @intlayer/swc
@@ -206,21 +246,63 @@ pnpm add -D @intlayer/swc
206
246
  bun add -d @intlayer/swc
207
247
  ```
208
248
 
209
- एक बार इंस्टॉल होने के बाद, Intlayer स्वचालित रूप से प्लगइन का पता लगाएगा और उसका उपयोग करेगा।
249
+ एक बार इंस्टॉल हो जाने पर, Intlayer स्वचालित रूप से प्लगइन का पता लगाएगा और उसका उपयोग करेगा।
250
+
251
+ **purge और minify** पास (फ़ील्ड हटाना और फ़ील्ड का नाम बदलना) के लिए, इसके साथ `@intlayer/babel` इंस्टॉल करें और Babel प्लगइन्स जोड़ें। क्योंकि Next.js ट्रांसफ़ॉर्मेशन के लिए SWC का उपयोग करता है लेकिन फिर भी प्लगइन कॉन्फ़िगरेशन के लिए `babel.config.js` का मूल्यांकन (evaluates) करता है, Babel प्लगइन्स SWC से पहले एक प्री-पास के रूप में चलते हैं।
252
+
253
+ ```bash packageManager="npm"
254
+ npm install -D @intlayer/babel
255
+ ```
256
+
257
+ ```javascript fileName="babel.config.js"
258
+ const {
259
+ intlayerPurgeBabelPlugin,
260
+ intlayerMinifyBabelPlugin,
261
+ getPurgePluginOptions,
262
+ getMinifyPluginOptions,
263
+ } = require("@intlayer/babel");
264
+
265
+ module.exports = {
266
+ presets: ["next/babel"],
267
+ plugins: [
268
+ // Purge: .intlayer/**/*.json से अप्रयुक्त कंटेंट फ़ील्ड हटाएँ
269
+ [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
270
+ // Minify: JSON + स्रोत कोड में कंटेंट फ़ील्ड कीज़ (keys) का नाम बदलें
271
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
272
+ // नोट: यहाँ intlayerOptimizeBabelPlugin की आवश्यकता नहीं है क्योंकि
273
+ // @intlayer/swc ही useIntlayer → useDictionary रीराइट (rewrite) को संभालता है।
274
+ ],
275
+ };
276
+ ```
210
277
 
211
278
  </Tab>
212
279
  <Tab value="vite">
213
280
 
214
281
  ### Vite
215
282
 
216
- Vite `@intlayer/babel` प्लगइन का उपयोग करता है जिसे `vite-intlayer` की डिपेंडेंसी के रूप में शामिल किया गया है। ऑप्टिमाइज़ेशन डिफॉल्ट रूप से सक्षम है। और कुछ करने की आवश्यकता नहीं है।
283
+ Vite `@intlayer/babel` प्लगइन का उपयोग करता है, जिसे `vite-intlayer` की डिपेंडेंसी के रूप में शामिल किया गया है। पूर्ण ऑप्टिमाइज़ेशन पाइपलाइन — इम्पोर्ट रीराइट, पर्ज और मिनिफ़ाई — डिफ़ॉल्ट रूप से सक्षम है और इसके लिए किसी अतिरिक्त प्लगइन पंजीकरण (registration) की आवश्यकता नहीं है।
284
+
285
+ `intlayer.config.ts` में संगत फ़्लैग सेट करके purge और minify को सक्षम करें:
286
+
287
+ ```typescript fileName="intlayer.config.ts"
288
+ import type { IntlayerConfig } from "intlayer";
289
+
290
+ const config: IntlayerConfig = {
291
+ build: {
292
+ purge: true, // बंडल किए गए JSON से अप्रयुक्त (unused) कंटेंट फ़ील्ड हटाएँ
293
+ minify: true, // कंटेंट फ़ील्ड कीज़ का नाम बदलकर छोटे उपनाम (aliases) करें
294
+ },
295
+ };
296
+
297
+ export default config;
298
+ ```
217
299
 
218
300
  </Tab>
219
301
  <Tab value="webpack">
220
302
 
221
- ### Webpack
303
+ ### Webpack (और Babel के साथ Next.js)
222
304
 
223
- Webpack पर Intlayer के साथ बंडल ऑप्टिमाइज़ेशन सक्षम करने के लिए, आपको उपयुक्त Babel (`@intlayer/babel`) या SWC (`@intlayer/swc`) प्लगइन इंस्टॉल और कॉन्फ़िगर करना होगा।
305
+ `@intlayer/babel` इंस्टॉल करें:
224
306
 
225
307
  ```bash packageManager="npm"
226
308
  npm install -D @intlayer/babel
@@ -238,14 +320,37 @@ pnpm add -D @intlayer/babel
238
320
  bun add -d @intlayer/babel
239
321
  ```
240
322
 
241
- ```typescript fileName="babel.config.js"
323
+ सभी चार प्लगइन्स को सही क्रम में `babel.config.js` में जोड़ें:
324
+
325
+ ```javascript fileName="babel.config.js"
242
326
  const {
243
- getOptimizePluginOptions,
327
+ intlayerExtractBabelPlugin,
328
+ intlayerPurgeBabelPlugin,
329
+ intlayerMinifyBabelPlugin,
244
330
  intlayerOptimizeBabelPlugin,
331
+ getExtractPluginOptions,
332
+ getPurgePluginOptions,
333
+ getMinifyPluginOptions,
334
+ getOptimizePluginOptions,
245
335
  } = require("@intlayer/babel");
246
336
 
247
337
  module.exports = {
248
- plugins: [[intlayerOptimizeBabelPlugin, getOptimizePluginOptions()]],
338
+ plugins: [
339
+ // Extract: .content.ts फ़ाइलों को संकलित (compile) करें → .intlayer/**/*.json
340
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
341
+
342
+ // Purge: .intlayer/**/*.json से अप्रयुक्त (unused) फ़ील्ड हटाएँ
343
+ // (intlayer.config.ts में मौजूद build.purge फ़्लैग को पढ़ता है)
344
+ [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
345
+
346
+ // Minify: JSON + स्रोत कोड में फ़ील्ड कीज़ का नाम बदलें
347
+ // (intlayer.config.ts में मौजूद build.minify फ़्लैग को पढ़ता है)
348
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
349
+
350
+ // Optimize: useIntlayer('key') → useDictionary(hash) को फिर से लिखें
351
+ // इसे अंत में आना चाहिए क्योंकि यह डिक्शनरी की (key) को मिटा देता है।
352
+ [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
353
+ ],
249
354
  };
250
355
  ```
251
356
 
@@ -254,57 +359,62 @@ module.exports = {
254
359
 
255
360
  ## कॉन्फ़िगरेशन
256
361
 
257
- आप अपने `intlayer.config.ts` में `build` प्रॉपर्टी के माध्यम से कंट्रोल कर सकते हैं कि Intlayer आपके बंडल को कैसे ऑप्टिमाइज़ करता है।
362
+ आप अपने `intlayer.config.ts` में `build` प्रॉपर्टी के ज़रिए यह नियंत्रित कर सकते हैं कि Intlayer आपके बंडल को कैसे ऑप्टिमाइज़ करे।
258
363
 
259
364
  ```typescript fileName="intlayer.config.ts"
260
365
  import { Locales, type IntlayerConfig } from "intlayer";
261
366
 
262
367
  const config: IntlayerConfig = {
263
368
  internationalization: {
264
- locales: [Locales.ENGLISH, Locales.FRENCH],
369
+ locales: [Locales.ENGLISH, Locales.HINDI],
265
370
  defaultLocale: Locales.ENGLISH,
266
371
  },
267
372
  dictionary: {
268
373
  importMode: "dynamic",
269
374
  },
270
375
  build: {
271
- /**
272
- * बंडल साइज कम करने के लिए डिक्शनरी को मिनिफ़ाई करें।
273
- */
274
- minify: true;
275
-
276
- /**
277
- * डिक्शनरी में अप्रयुक्त कुंजियों (unused keys) को हटा दें (purge)
278
- */
279
- purge: true;
280
-
281
- /**
282
- * इंगित करता है कि क्या बिल्ड को टाइपस्क्रिप्ट प्रकारों (TypeScript types) की जांच करनी चाहिए
283
- */
284
- checkTypes: false;
376
+ // बिल्ड-टाइम पर useIntlayer() कॉल को सीधे डिक्शनरी आयात (imports) से बदलें।
377
+ // undefined = ऑटो (प्रोडक्शन में सक्षम), true = हमेशा, false = कभी नहीं।
378
+ optimize: undefined,
379
+
380
+ // संकलित डिक्शनरी में कंटेंट फ़ील्ड कीज़ का नाम छोटे अल्फाबेटिकल
381
+ // उपनामों (aliases) (जैसे title → a) में बदलें। JSON साइज़ कम करता है; optimize की आवश्यकता है।
382
+ minify: true,
383
+
384
+ // ऐसे कंटेंट फ़ील्ड हटाएँ जिन्हें स्रोत कोड में कभी एक्सेस नहीं किया जाता है।
385
+ // optimize की आवश्यकता है।
386
+ purge: true,
285
387
  },
286
388
  };
287
389
 
288
390
  export default config;
289
391
  ```
290
392
 
291
- > अधिकांश मामलों में `optimize` के लिए डिफॉल्ट विकल्प रखना ही बेहतर होता है।
393
+ > ज़्यादातर मामलों में `optimize` के लिए डिफ़ॉल्ट मान (`undefined`) रखने की अनुशंसा की जाती है।
292
394
 
293
- > अधिक जानकारी के लिए कॉन्फ़िगरेशन डॉक्स देखें: [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md)
395
+ > सभी विकल्पों के लिए कॉन्फ़िगरेशन संदर्भ देखें: [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md)
294
396
 
295
397
  ### बिल्ड विकल्प
296
398
 
297
- `build` कॉन्फ़िगरेशन ऑब्जेक्ट के अंतर्गत निम्नलिखित विकल्प उपलब्ध हैं:
399
+ | प्रॉपर्टी | प्रकार | डिफ़ॉल्ट | विवरण |
400
+ | :------------- | :--------------------- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
401
+ | **`optimize`** | `boolean \| undefined` | `undefined` | इम्पोर्ट रीराइट (import rewrite) पास को सक्षम करता है। `undefined` = केवल प्रोडक्शन बिल्ड में सक्रिय। `false` पर्ज (purge) और मिनिफ़ाई (minify) को भी अक्षम कर देता है। |
402
+ | **`minify`** | `boolean` | `false` | संकलित JSON फ़ाइलों में कंटेंट फ़ील्ड कीज़ का नाम छोटे अल्फाबेटिकल उपनामों (aliases) में बदल देता है। स्रोत कोड में मेल खाने वाले प्रॉपर्टी एक्सेस को भी फिर से लिखता है। जब `optimize` `false` हो तो इसका कोई प्रभाव नहीं होता है। |
403
+ | **`purge`** | `boolean` | `false` | संकलित JSON फ़ाइलों से उन कंटेंट फ़ील्ड्स को हटा देता है जिन्हें स्रोत कोड में कभी भी स्थिर (statically) रूप से एक्सेस नहीं किया जाता है। जब `optimize` `false` हो तो इसका कोई प्रभाव नहीं होता है। |
298
404
 
299
- | प्रॉपर्टी | प्रकार | डिफॉल्ट | विवरण |
300
- | :------------- | :-------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
301
- | **`optimize`** | `boolean` | `undefined` | कंट्रोल करता है कि बिल्ड ऑप्टिमाइज़ेशन सक्षम है या नहीं। यदि `true` है, तो Intlayer डिक्शनरी कॉल को ऑप्टिमाइज़्ड इंजेक्शन से बदल देता है। यदि `false` है, तो ऑप्टिमाइज़ेशन अक्षम है। प्रोडक्शन में `true` रखें। |
302
- | **`minify`** | `boolean` | `false` | बंडल साइज कम करने के लिए डिक्शनरी को मिनिफ़ाई करना है या नहीं। |
303
- | **`purge`** | `boolean` | `false` | डिक्शनरी में अप्रयुक्त कुंजियों को हटाना है या नहीं। |
405
+ ### Minification (फ़ील्ड की का नाम बदलना)
304
406
 
305
- ### मिनिफ़िकेशन (Minification)
407
+ `build.minify` आपके JavaScript बंडल को **मिनिफ़ाई नहीं करता है** — आपका बंडलर वह काम संभालता है। इसके बजाय, यह उपयोगकर्ता द्वारा परिभाषित प्रत्येक कंटेंट फ़ील्ड की (key) को एक छोटे अल्फाबेटिकल उपनाम (alias) से बदलकर संकलित डिक्शनरी JSON फ़ाइलों को सिकोड़ता है:
306
408
 
307
- डिक्शनरी को मिनिफ़ाई करने से अनावश्यक व्हाइटस्पेस, कमेंट हट जाते हैं और JSON कंटेंट का आकार कम हो जाता है। यह विशेष रूप से बड़ी डिक्शनरी के लिए उपयोगी है।
409
+ ```
410
+ // मिनिफिकेशन से पहले
411
+ { "title": "हैलो", "subtitle": "दुनिया" }
412
+
413
+ // मिनिफिकेशन के बाद
414
+ { "a": "हैलो", "b": "दुनिया" }
415
+ ```
416
+
417
+ यही नाम बदलना आपके स्रोत कोड में सभी प्रॉपर्टी एक्सेस पर लागू होता है, इसलिए संकलित आउटपुट में `content.title`, `content.a` बन जाता है। रनटाइम व्यवहार पूरी तरह समान रहता है।
308
418
 
309
419
  ```typescript fileName="intlayer.config.ts"
310
420
  import type { IntlayerConfig } from "intlayer";
@@ -318,11 +428,13 @@ const config: IntlayerConfig = {
318
428
  export default config;
319
429
  ```
320
430
 
321
- > नोट: यदि `optimize` अक्षम है या यदि विजुअल एडिटर (Visual Editor) सक्षम है, तो मिनिफ़िकेशन को इग्नोर कर दिया जाता है (क्योंकि एडिटर को एडिटिंग की अनुमति देने के लिए पूर्ण कंटेंट की आवश्यकता होती है)।
431
+ > जब `optimize` `false` होता है या जब `editor.enabled` `true` होता है (विज़ुअल एडिटर को संपादन (editing) की अनुमति देने के लिए मूल फ़ील्ड नामों की आवश्यकता होती है) तो मिनिफिकेशन छोड़ दिया जाता है (skipped)
432
+
433
+ > `importMode: 'fetch'` के माध्यम से लोड की गई डिक्शनरी के लिए भी मिनिफिकेशन छोड़ दिया जाता है क्योंकि उनका JSON मूल फ़ील्ड नामों का उपयोग करके रिमोट API से परोसा (served) जाता है — क्लाइंट-साइड कीज़ का नाम बदलने से सर्वर/क्लाइंट अनुबंध (contract) टूट जाएगा।
322
434
 
323
- ### पर्जिंग (Purging)
435
+ ### Purging (अप्रयुक्त फ़ील्ड हटाना)
324
436
 
325
- पर्जिंग यह सुनिश्चित करता है कि केवल आपके कोड में वास्तव में उपयोग की जाने वाली कुंजियाँ ही अंतिम डिक्शनरी बंडल में शामिल की जाएं। यदि आपके पास कई कुंजियों वाली बड़ी डिक्शनरी हैं जो आपके एप्लिकेशन के हर हिस्से में उपयोग नहीं की जाती हैं, तो यह आपके बंडल के आकार को काफी कम कर सकता है।
437
+ `build.purge` विश्लेषण करता है कि आपके स्रोत कोड में वास्तव में किन कंटेंट फ़ील्ड्स को एक्सेस किया गया है और संकलित JSON फ़ाइलों से अन्य सभी को हटा देता है।
326
438
 
327
439
  ```typescript fileName="intlayer.config.ts"
328
440
  import type { IntlayerConfig } from "intlayer";
@@ -336,34 +448,50 @@ const config: IntlayerConfig = {
336
448
  export default config;
337
449
  ```
338
450
 
339
- > नोट: यदि `optimize` अक्षम है तो पर्जिंग को इग्नोर कर दिया जाता है।
451
+ **उदाहरण:** पाँच फ़ील्ड वाली डिक्शनरी जहाँ केवल दो का उपयोग किया जाता है:
452
+
453
+ ```
454
+ // पर्ज (purge) से पहले
455
+ { "title": "…", "subtitle": "…", "cta": "…", "footer": "…", "badge": "…" }
456
+
457
+ // पर्ज (purge) के बाद (स्रोत में केवल title + subtitle एक्सेस किए गए)
458
+ { "title": "…", "subtitle": "…" }
459
+ ```
460
+
461
+ > जब `optimize` `false` होता है या जब `editor.enabled` `true` होता है तो पर्ज (Purge) छोड़ दिया जाता है (skipped)।
462
+
463
+ > पर्ज (Purge) को उस समय भी सुरक्षित (conservatively) रूप से छोड़ दिया जाता है जब किसी स्रोत फ़ाइल को पार्स (parse) नहीं किया जा सकता है, या जब `useIntlayer` के परिणाम को किसी वेरिएबल को सौंपा (assigned) जाता है और उन तरीकों से पास किया जाता है जिन्हें स्टेटिक एनालाइज़र ट्रैक नहीं कर सकता है (जैसे किसी ऑब्जेक्ट में स्प्रेड (spread) करना, डिस्ट्रक्चरिंग के बिना प्रोप (prop) के रूप में पास करना)। उन मामलों में, पूरी डिक्शनरी सुरक्षित (preserved) रखी जाती है।
340
464
 
341
465
  ### इम्पोर्ट मोड (Import Mode)
342
466
 
343
- बड़े एप्लिकेशन के लिए, जिसमें कई पेज और भाषाएँ शामिल हैं, आपकी JSON फाइलें आपके बंडल साइज का एक महत्वपूर्ण हिस्सा हो सकती हैं। Intlayer आपको यह कंट्रोल करने की अनुमति देता है कि डिक्शनरी कैसे लोड की जाती हैं।
467
+ कई पेजों और लोकेल्स वाले बड़े एप्लिकेशन्स के लिए, आपका JSON आपके बंडल साइज़ का एक महत्वपूर्ण हिस्सा हो सकता है। Intlayer आपको `importMode` विकल्प का उपयोग करके डिक्शनरी को लोड करने के तरीके को नियंत्रित करने की अनुमति देता है।
468
+
469
+ ### ग्लोबल परिभाषा (Global definition)
344
470
 
345
- इम्पोर्ट मोड को आपकी `intlayer.config.ts` फ़ाइल में विश्व स्तर (globally) पर डिफॉल्ट रूप से परिभाषित किया जा सकता है।
471
+ इम्पोर्ट मोड को आपके `intlayer.config.ts` फ़ाइल में विश्व स्तर पर (globally) परिभाषित किया जा सकता है।
346
472
 
347
473
  ```typescript fileName="intlayer.config.ts"
348
474
  import type { IntlayerConfig } from "intlayer";
349
475
 
350
476
  const config: IntlayerConfig = {
351
- build: {
352
- minify: true,
477
+ dictionary: {
478
+ importMode: "dynamic", // डिफ़ॉल्ट 'static' है
353
479
  },
354
480
  };
355
481
 
356
482
  export default config;
357
483
  ```
358
484
 
359
- साथ ही आपकी `.content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5}}` फ़ाइलों में प्रत्येक डिक्शनरी के लिए भी।
485
+ ### प्रति-डिक्शनरी (Per-dictionary) परिभाषा
486
+
487
+ आप अलग-अलग डिक्शनरी के लिए उनके `.content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5|md|mdx|yaml|yml}}` फ़ाइलों में इम्पोर्ट मोड को ओवरराइड कर सकते हैं।
360
488
 
361
489
  ```ts
362
490
  import { type Dictionary, t } from "intlayer";
363
491
 
364
492
  const appContent: Dictionary = {
365
493
  key: "app",
366
- importMode: "dynamic", // डिफॉल्ट इम्पोर्ट मोड को ओवरराइड करें
494
+ importMode: "dynamic", // डिफ़ॉल्ट इम्पोर्ट मोड को ओवरराइड करें
367
495
  content: {
368
496
  // ...
369
497
  },
@@ -372,35 +500,35 @@ const appContent: Dictionary = {
372
500
  export default appContent;
373
501
  ```
374
502
 
375
- | प्रॉपर्टी | प्रकार | डिफॉल्ट | विवरण |
376
- | :--------------- | :--------------------------------- | :--------- | :----------------------------------------------------------------------------------------------------------------------- |
377
- | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **Deprecated**: इसके स्थान पर `dictionary.importMode` का उपयोग करें। यह निर्धारित करता है कि डिक्शनरी कैसे लोड होती हैं। |
503
+ | प्रॉपर्टी | प्रकार | डिफ़ॉल्ट | विवरण |
504
+ | :--------------- | :--------------------------------- | :--------- | :-------------------------------------------------------------------------------------------------------------------------------------------- |
505
+ | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **नापसंद (Deprecated)**: इसके बजाय `dictionary.importMode` का उपयोग करें। यह निर्धारित करता है कि डिक्शनरी कैसे लोड की जाती हैं (नीचे देखें)। |
378
506
 
379
- `importMode` सेटिंग यह तय करती है कि डिक्शनरी कंटेंट आपके कंपोनेंट में कैसे इंजेक्ट किया जाता है।
380
- आप इसे `intlayer.config.ts` फ़ाइल में `dictionary` ऑब्जेक्ट के तहत विश्व स्तर पर परिभाषित कर सकते हैं, या आप इसे इसकी `.content.ts` फ़ाइल में एक विशिष्ट डिक्शनरी के लिए ओवरराइट कर सकते हैं।
507
+ `importMode` सेटिंग यह निर्धारित करती है कि डिक्शनरी का कंटेंट आपके कंपोनेंट में कैसे इंजेक्ट किया जाता है। आप इसे `intlayer.config.ts` में `dictionary` ऑब्जेक्ट के अंतर्गत विश्व स्तर पर परिभाषित कर सकते हैं, या इसे प्रति-डिक्शनरी (per-dictionary) आधार पर इसकी `.content.ts` फ़ाइल में ओवरराइड कर सकते हैं।
381
508
 
382
- ### 1. स्टैटिक मोड (`default`)
509
+ ### 1. स्टेटिक मोड (Static Mode - `default`)
383
510
 
384
- स्टैटिक मोड में, Intlayer `useIntlayer` को `useDictionary` से बदल देता है और डिक्शनरी को सीधे जावास्क्रिप्ट बंडल में इंजेक्ट करता है।
511
+ स्टेटिक मोड में, Intlayer `useIntlayer` को `useDictionary` से बदल देता है और डिक्शनरी को सीधे JavaScript बंडल में इंजेक्ट कर देता है।
385
512
 
386
- - **लाभ:** तत्काल रेंडरिंग (सिक्रोनस), हाइड्रेशन के दौरान कोई अतिरिक्त नेटवर्क रिक्वेस्ट नहीं।
387
- - **नुकसान:** बंडल में उस विशिष्ट कंपोनेंट के लिए **सभी** उपलब्ध भाषाओं के अनुवाद शामिल होते हैं।
388
- - **इनके लिए सर्वश्रेष्ठ:** सिंगल पेज एप्लिकेशन (SPA)।
513
+ - **फ़ायदे:** तुरंत प्रतिपादन (synchronous), हाइड्रेशन (hydration) के दौरान कोई अतिरिक्त नेटवर्क अनुरोध (requests) नहीं।
514
+ - **नुकसान:** बंडल में उस विशिष्ट कंपोनेंट के लिए उपलब्ध **सभी** भाषाओं के अनुवाद शामिल होते हैं।
515
+ - **इसके लिए सर्वोत्तम:** सिंगल पेज एप्लिकेशन (SPA)।
389
516
 
390
- **रूपांतरित कोड उदाहरण (Transformed Code Example):**
517
+ **रूपांतरित कोड उदाहरण (Transformed code example):**
391
518
 
392
519
  ```tsx
393
520
  // आपका कोड
394
521
  const content = useIntlayer("my-key");
395
522
 
396
- // ऑप्टिमाइज़्ड कोड (Static)
523
+ // रूपांतरण के बाद अनुकूलित (Optimised) कोड चित्रण (स्टेटिक)
524
+ // यह केवल चित्रण के लिए है, वास्तविक कोड अनुकूलन (optimisation) कारणों से अलग होगा
397
525
  const content = useDictionary({
398
526
  key: "my-key",
399
527
  content: {
400
528
  nodeType: "translation",
401
529
  translation: {
402
530
  en: "My title",
403
- fr: "Mon titre",
531
+ hi: "मेरा शीर्षक",
404
532
  },
405
533
  },
406
534
  });
@@ -408,47 +536,67 @@ const content = useDictionary({
408
536
 
409
537
  ### 2. डायनामिक मोड (Dynamic Mode)
410
538
 
411
- डायनामिक मोड में, Intlayer `useIntlayer` को `useDictionaryAsync` से बदल देता है। यह वर्तमान भाषा के लिए विशेष रूप से JSON को लेजी-लोड (lazy-load) करने के लिए `import()` (Suspense-like mechanism) का उपयोग करता है।
539
+ डायनामिक मोड में, Intlayer `useIntlayer` को `useDictionaryAsync` से बदल देता है। यह विशेष रूप से वर्तमान लोकेल (locale) के लिए JSON को लेज़ी-लोड करने के लिए `import()` (एक सस्पेंस (Suspense)-जैसा तंत्र) का उपयोग करता है।
412
540
 
413
- - **लाभ:** **भाषा-स्तर पर ट्री शेकिंग (Locale-level tree shaking)।** अंग्रेजी वर्जन देखने वाला उपयोगकर्ता _केवल_ अंग्रेजी डिक्शनरी डाउनलोड करेगा। फ्रेंच डिक्शनरी कभी लोड नहीं होगी।
414
- - **नुकसान:** हाइड्रेशन के दौरान प्रति कंपोनेंट एक नेटवर्क रिक्वेस्ट (एसेट फेच) ट्रिगर करता है।
415
- - **इनके लिए सर्वश्रेष्ठ:** बड़े टेक्स्ट ब्लॉक, लेख, या कई भाषाओं को सपोर्ट करने वाले एप्लिकेशन जहां बंडल साइज बहुत महत्वपूर्ण है।
541
+ - **फ़ायदे:** **लोकेल-स्तर ट्री शेकिंग (Locale-level tree shaking)।** अंग्रेजी संस्करण देखने वाला उपयोगकर्ता _केवल_ अंग्रेजी डिक्शनरी डाउनलोड करेगा। हिंदी डिक्शनरी कभी लोड नहीं होती है।
542
+ - **नुकसान:** हाइड्रेशन के दौरान प्रति कंपोनेंट एक नेटवर्क अनुरोध (asset fetch) ट्रिगर करता है।
543
+ - **इसके लिए सर्वोत्तम:** बड़े टेक्स्ट ब्लॉक, लेख, या एप्लिकेशन जो कई भाषाओं का समर्थन करते हैं जहां बंडल का आकार महत्वपूर्ण होता है।
416
544
 
417
- **रूपांतरित कोड उदाहरण:**
545
+ **रूपांतरित कोड उदाहरण (Transformed code example):**
418
546
 
419
547
  ```tsx
420
548
  // आपका कोड
421
549
  const content = useIntlayer("my-key");
422
550
 
423
- // ऑप्टिमाइज़्ड कोड (Dynamic)
551
+ // रूपांतरण के बाद अनुकूलित (Optimised) कोड चित्रण (डायनामिक)
552
+ // यह केवल चित्रण के लिए है, वास्तविक कोड अनुकूलन (optimisation) कारणों से अलग होगा
424
553
  const content = useDictionaryAsync({
425
554
  en: () =>
426
555
  import(".intlayer/dynamic_dictionary/my-key/en.json").then(
427
556
  (mod) => mod.default
428
557
  ),
429
- fr: () =>
430
- import(".intlayer/dynamic_dictionary/my-key/fr.json").then(
558
+ hi: () =>
559
+ import(".intlayer/dynamic_dictionary/my-key/hi.json").then(
431
560
  (mod) => mod.default
432
561
  ),
433
562
  });
434
563
  ```
435
564
 
436
- > `importMode: 'dynamic'` का उपयोग करते समय, यदि आपके पास एक ही पेज पर `useIntlayer` का उपयोग करने वाले 100 कंपोनेंट हैं, तो ब्राउज़र 100 अलग-अलग फेच का प्रयास करेगा। अनुरोधों के इस "वाटरफॉल" से बचने के लिए, कंटेंट को प्रत्येक छोटे कंपोनेंट के बजाय कम `.content` फ़ाइलों (जैसे, प्रत्येक पेज सेक्शन के लिए एक डिक्शनरी) में समूहित करें।
565
+ > जब `importMode: 'dynamic'` का उपयोग किया जाता है, यदि आपके पास एक ही पेज पर `useIntlayer` का उपयोग करने वाले 100 कंपोनेंट हैं, तो ब्राउज़र 100 अलग-अलग फ़ेच (fetches) का प्रयास करेगा। अनुरोधों के इस "वाटरफ़ॉल (waterfall)" से बचने के लिए, सामग्री को प्रति एटम कंपोनेंट एक के बजाय कम `.content` फ़ाइलों (जैसे पेज अनुभाग (section) प्रति एक डिक्शनरी) में समूहित करें। आप कई `.content` फ़ाइलों का भी उपयोग कर सकते हैं जो समान की (key) का उपयोग करती हैं। Intlayer उन्हें एकल डिक्शनरी में मिला (merge) देगा।
566
+
567
+ ### 3. फ़ेच मोड (Fetch Mode)
437
568
 
438
- ### 3. फेच मोड (Fetch Mode)
569
+ यह डायनामिक मोड के समान व्यवहार करता है लेकिन पहले Intlayer Live Sync API से डिक्शनरी लाने (fetch) का प्रयास करता है। यदि API कॉल विफल हो जाता है या सामग्री को लाइव अपडेट के लिए चिह्नित नहीं किया गया है, तो यह डायनामिक इम्पोर्ट पर वापस आ जाता है (falls back)
439
570
 
440
- डायनामिक मोड के समान व्यवहार करता है लेकिन पहले Intlayer Live Sync API से डिक्शनरी लाने का प्रयास करता है। यदि API कॉल विफल हो जाती है या कंटेंट लाइव अपडेट के लिए मार्क नहीं किया गया है, तो यह डायनामिक इम्पोर्ट पर वापस आ जाता है।
571
+ **रूपांतरित कोड उदाहरण (Transformed code example):**
572
+
573
+ ```tsx
574
+ // आपका कोड
575
+ const content = useIntlayer("my-key");
576
+
577
+ // अनुकूलित (Optimised) कोड चित्रण (फ़ेच)
578
+ const content = useDictionaryAsync({
579
+ en: () =>
580
+ fetch("https://intlayer.my-domain.com/dictionary/my-key/en").then((res) =>
581
+ res.json()
582
+ ),
583
+ hi: () =>
584
+ fetch("https://intlayer.my-domain.com/dictionary/my-key/hi").then((res) =>
585
+ res.json()
586
+ ),
587
+ });
588
+ ```
441
589
 
442
- > अधिक विवरण के लिए CMS डॉक्स देखें: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/intlayer_CMS.md)
590
+ > अधिक विवरण के लिए CMS दस्तावेज़ देखें: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/intlayer_CMS.md)
443
591
 
444
- > फेच मोड में, पर्ज और मिनिफ़िकेशन का उपयोग नहीं किया जा सकता है।
592
+ > फ़ेच मोड में, पर्ज (purge) और मिनिफिकेशन (minification) लागू नहीं होते हैं क्योंकि JSON मूल फ़ील्ड नामों का उपयोग करके रिमोट API से परोसा (served) जाता है।
445
593
 
446
- ## सारांश: स्टैटिक बनाम डायनामिक
594
+ ## सारांश: स्टेटिक बनाम डायनामिक (Static vs Dynamic)
447
595
 
448
- | फीचर | स्टैटिक मोड | डायनामिक मोड |
449
- | :-------------------- | :-------------------------------------------- | :------------------------------------ |
450
- | **JS बंडल साइज** | बड़ा (इसमें कंपोनेंट की सभी भाषाएँ शामिल हैं) | सबसे छोटा (केवल कोड, कोई कंटेंट नहीं) |
451
- | **प्रारंभिक लोड** | तत्काल (कंटेंट बंडल में है) | हल्का विलंब (JSON फेच करता है) |
452
- | **नेटवर्क रिक्वेस्ट** | 0 अतिरिक्त रिक्वेस्ट | प्रति डिक्शनरी 1 रिक्वेस्ट |
453
- | **ट्री शेकिंग** | कंपोनेंट-स्तर | कंपोनेंट-स्तर + भाषा-स्तर |
454
- | **सर्वश्रेष्ठ उपयोग** | UI कंपोनेंट्स, छोटे ऐप्स | बहुत सारे टेक्स्ट वाले पेज, कई भाषाएं |
596
+ | फ़ीचर | स्टेटिक मोड | डायनामिक मोड |
597
+ | :------------------------ | :------------------------------------------ | :------------------------------------- |
598
+ | **JS बंडल साइज़** | बड़ा (कंपोनेंट के लिए सभी भाषाएँ शामिल हैं) | सबसे छोटा (केवल कोड, कोई सामग्री नहीं) |
599
+ | **प्रारंभिक लोड** | त्वरित (सामग्री बंडल में है) | मामूली देरी (JSON फ़ेच करता है) |
600
+ | **नेटवर्क अनुरोध** | 0 अतिरिक्त अनुरोध | 1 अनुरोध प्रति डिक्शनरी की (key) |
601
+ | **ट्री शेकिंग** | कंपोनेंट-स्तर | कंपोनेंट-स्तर + लोकेल-स्तर |
602
+ | **सर्वोत्तम उपयोग मामला** | UI कंपोनेंट, छोटे ऐप्स | भारी पाठ वाले पृष्ठ, अनेक भाषाएँ |