@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.
- package/dist/cjs/blog.cjs.map +1 -1
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/doc.cjs.map +1 -1
- package/dist/cjs/frequentQuestions.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +1 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +1 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +1 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +1 -0
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/cjs/legal.cjs.map +1 -1
- package/dist/esm/blog.mjs.map +1 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/doc.mjs.map +1 -1
- package/dist/esm/frequentQuestions.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/esm/legal.mjs.map +1 -1
- package/dist/types/blog.d.ts.map +1 -1
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/doc.d.ts.map +1 -1
- package/dist/types/frequentQuestions.d.ts.map +1 -1
- package/dist/types/legal.d.ts.map +1 -1
- package/docs/ar/bundle_optimization.md +250 -102
- package/docs/ar/configuration.md +10 -10
- package/docs/bn/bundle_optimization.md +252 -104
- package/docs/bn/configuration.md +10 -10
- package/docs/cs/bundle_optimization.md +253 -105
- package/docs/cs/configuration.md +10 -10
- package/docs/de/bundle_optimization.md +245 -97
- package/docs/de/configuration.md +10 -10
- package/docs/en/bundle_optimization.md +172 -49
- package/docs/en/configuration.md +10 -10
- package/docs/en-GB/bundle_optimization.md +230 -82
- package/docs/en-GB/configuration.md +10 -10
- package/docs/es/bundle_optimization.md +250 -102
- package/docs/es/configuration.md +10 -10
- package/docs/fr/bundle_optimization.md +223 -75
- package/docs/fr/configuration.md +10 -10
- package/docs/hi/bundle_optimization.md +253 -105
- package/docs/hi/configuration.md +10 -10
- package/docs/id/bundle_optimization.md +258 -110
- package/docs/id/configuration.md +10 -10
- package/docs/it/bundle_optimization.md +249 -103
- package/docs/it/configuration.md +10 -10
- package/docs/ja/bundle_optimization.md +245 -97
- package/docs/ja/configuration.md +10 -10
- package/docs/ko/bundle_optimization.md +253 -105
- package/docs/ko/configuration.md +10 -10
- package/docs/nl/bundle_optimization.md +249 -101
- package/docs/nl/configuration.md +10 -10
- package/docs/pl/bundle_optimization.md +258 -111
- package/docs/pl/configuration.md +10 -10
- package/docs/pt/bundle_optimization.md +256 -115
- package/docs/pt/configuration.md +10 -10
- package/docs/ru/bundle_optimization.md +253 -105
- package/docs/ru/configuration.md +10 -10
- package/docs/tr/bundle_optimization.md +255 -107
- package/docs/tr/configuration.md +10 -10
- package/docs/uk/bundle_optimization.md +250 -102
- package/docs/uk/configuration.md +10 -10
- package/docs/ur/bundle_optimization.md +257 -109
- package/docs/ur/configuration.md +10 -10
- package/docs/vi/bundle_optimization.md +259 -111
- package/docs/vi/configuration.md +10 -10
- package/docs/zh/bundle_optimization.md +260 -112
- package/docs/zh/configuration.md +10 -10
- package/docs/zh-TW/bundle_optimization.md +602 -0
- package/package.json +8 -8
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-11-25
|
|
3
|
-
updatedAt: 2026-
|
|
4
|
-
title: i18n बंडल
|
|
5
|
-
description: अंतर्राष्ट्रीयकरण (i18n) कंटेंट को
|
|
3
|
+
updatedAt: 2026-06-07
|
|
4
|
+
title: i18n बंडल साइज़ और परफॉरमेंस ऑप्टिमाइज़ेशन
|
|
5
|
+
description: अंतर्राष्ट्रीयकरण (i18n) कंटेंट को ऑप्टिमाइज़ करके अपने एप्लिकेशन के बंडल साइज़ को कम करें। जानें कि Intlayer के साथ डिक्शनरी के लिए ट्री शेकिंग (tree shaking) और लेज़ी लोडिंग (lazy loading) का उपयोग कैसे करें।
|
|
6
6
|
keywords:
|
|
7
|
-
- Bundle
|
|
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
|
|
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
|
|
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`
|
|
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 एक
|
|
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 में
|
|
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
|
-
###
|
|
135
|
+
### Standard Webpack
|
|
133
136
|
|
|
134
|
-
Create React App (ejected), Angular, या कस्टम Webpack सेटअप के लिए,
|
|
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 **प्रति-कंपोनेंट
|
|
174
|
+
Intlayer एक **प्रति-कंपोनेंट (per-component) दृष्टिकोण** का उपयोग करता है। वैश्विक (global) JSON फ़ाइलों के विपरीत, आपका कंटेंट आपके कंपोनेंट के साथ या उसके भीतर परिभाषित किया जाता है। बिल्ड प्रक्रिया के दौरान, Intlayer यह करेगा:
|
|
172
175
|
|
|
173
|
-
1.
|
|
174
|
-
2.
|
|
175
|
-
3.
|
|
176
|
+
1. `useIntlayer` कॉल खोजने के लिए आपके कोड का **विश्लेषण** करेगा।
|
|
177
|
+
2. संबंधित डिक्शनरी कंटेंट **बनाएगा** (Build)।
|
|
178
|
+
3. आपके कॉन्फ़िगरेशन के आधार पर ऑप्टिमाइज़ किए गए कोड के साथ `useIntlayer` कॉल को **बदलेगा**।
|
|
176
179
|
|
|
177
180
|
यह सुनिश्चित करता है कि:
|
|
178
181
|
|
|
179
|
-
- यदि कोई कंपोनेंट
|
|
180
|
-
- यदि कोई कंपोनेंट
|
|
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 को
|
|
229
|
+
Next.js को ऑप्टिमाइज़ (import rewrite) पास के लिए `@intlayer/swc` प्लगइन की आवश्यकता होती है, क्योंकि Next.js बिल्ड के लिए SWC का उपयोग करता है।
|
|
190
230
|
|
|
191
|
-
> यह प्लगइन
|
|
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
|
-
एक बार इंस्टॉल
|
|
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` प्लगइन का उपयोग करता
|
|
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
|
-
|
|
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
|
-
|
|
323
|
+
सभी चार प्लगइन्स को सही क्रम में `babel.config.js` में जोड़ें:
|
|
324
|
+
|
|
325
|
+
```javascript fileName="babel.config.js"
|
|
242
326
|
const {
|
|
243
|
-
|
|
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: [
|
|
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` प्रॉपर्टी के
|
|
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.
|
|
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
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
-
>
|
|
393
|
+
> ज़्यादातर मामलों में `optimize` के लिए डिफ़ॉल्ट मान (`undefined`) रखने की अनुशंसा की जाती है।
|
|
292
394
|
|
|
293
|
-
>
|
|
395
|
+
> सभी विकल्पों के लिए कॉन्फ़िगरेशन संदर्भ देखें: [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md)
|
|
294
396
|
|
|
295
397
|
### बिल्ड विकल्प
|
|
296
398
|
|
|
297
|
-
|
|
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
|
-
|
|
407
|
+
`build.minify` आपके JavaScript बंडल को **मिनिफ़ाई नहीं करता है** — आपका बंडलर वह काम संभालता है। इसके बजाय, यह उपयोगकर्ता द्वारा परिभाषित प्रत्येक कंटेंट फ़ील्ड की (key) को एक छोटे अल्फाबेटिकल उपनाम (alias) से बदलकर संकलित डिक्शनरी JSON फ़ाइलों को सिकोड़ता है:
|
|
306
408
|
|
|
307
|
-
|
|
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
|
-
>
|
|
431
|
+
> जब `optimize` `false` होता है या जब `editor.enabled` `true` होता है (विज़ुअल एडिटर को संपादन (editing) की अनुमति देने के लिए मूल फ़ील्ड नामों की आवश्यकता होती है) तो मिनिफिकेशन छोड़ दिया जाता है (skipped)।
|
|
432
|
+
|
|
433
|
+
> `importMode: 'fetch'` के माध्यम से लोड की गई डिक्शनरी के लिए भी मिनिफिकेशन छोड़ दिया जाता है क्योंकि उनका JSON मूल फ़ील्ड नामों का उपयोग करके रिमोट API से परोसा (served) जाता है — क्लाइंट-साइड कीज़ का नाम बदलने से सर्वर/क्लाइंट अनुबंध (contract) टूट जाएगा।
|
|
322
434
|
|
|
323
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
467
|
+
कई पेजों और लोकेल्स वाले बड़े एप्लिकेशन्स के लिए, आपका JSON आपके बंडल साइज़ का एक महत्वपूर्ण हिस्सा हो सकता है। Intlayer आपको `importMode` विकल्प का उपयोग करके डिक्शनरी को लोड करने के तरीके को नियंत्रित करने की अनुमति देता है।
|
|
468
|
+
|
|
469
|
+
### ग्लोबल परिभाषा (Global definition)
|
|
344
470
|
|
|
345
|
-
इम्पोर्ट मोड को
|
|
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
|
-
|
|
352
|
-
|
|
477
|
+
dictionary: {
|
|
478
|
+
importMode: "dynamic", // डिफ़ॉल्ट 'static' है
|
|
353
479
|
},
|
|
354
480
|
};
|
|
355
481
|
|
|
356
482
|
export default config;
|
|
357
483
|
```
|
|
358
484
|
|
|
359
|
-
|
|
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'` |
|
|
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.
|
|
509
|
+
### 1. स्टेटिक मोड (Static Mode - `default`)
|
|
383
510
|
|
|
384
|
-
|
|
511
|
+
स्टेटिक मोड में, Intlayer `useIntlayer` को `useDictionary` से बदल देता है और डिक्शनरी को सीधे JavaScript बंडल में इंजेक्ट कर देता है।
|
|
385
512
|
|
|
386
|
-
-
|
|
387
|
-
- **नुकसान:** बंडल में उस विशिष्ट कंपोनेंट के लिए **सभी**
|
|
388
|
-
-
|
|
513
|
+
- **फ़ायदे:** तुरंत प्रतिपादन (synchronous), हाइड्रेशन (hydration) के दौरान कोई अतिरिक्त नेटवर्क अनुरोध (requests) नहीं।
|
|
514
|
+
- **नुकसान:** बंडल में उस विशिष्ट कंपोनेंट के लिए उपलब्ध **सभी** भाषाओं के अनुवाद शामिल होते हैं।
|
|
515
|
+
- **इसके लिए सर्वोत्तम:** सिंगल पेज एप्लिकेशन (SPA)।
|
|
389
516
|
|
|
390
|
-
**रूपांतरित कोड उदाहरण (Transformed
|
|
517
|
+
**रूपांतरित कोड उदाहरण (Transformed code example):**
|
|
391
518
|
|
|
392
519
|
```tsx
|
|
393
520
|
// आपका कोड
|
|
394
521
|
const content = useIntlayer("my-key");
|
|
395
522
|
|
|
396
|
-
//
|
|
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
|
-
|
|
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` से बदल देता है। यह वर्तमान
|
|
539
|
+
डायनामिक मोड में, Intlayer `useIntlayer` को `useDictionaryAsync` से बदल देता है। यह विशेष रूप से वर्तमान लोकेल (locale) के लिए JSON को लेज़ी-लोड करने के लिए `import()` (एक सस्पेंस (Suspense)-जैसा तंत्र) का उपयोग करता है।
|
|
412
540
|
|
|
413
|
-
-
|
|
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
|
-
//
|
|
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
|
-
|
|
430
|
-
import(".intlayer/dynamic_dictionary/my-key/
|
|
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'` का उपयोग
|
|
565
|
+
> जब `importMode: 'dynamic'` का उपयोग किया जाता है, यदि आपके पास एक ही पेज पर `useIntlayer` का उपयोग करने वाले 100 कंपोनेंट हैं, तो ब्राउज़र 100 अलग-अलग फ़ेच (fetches) का प्रयास करेगा। अनुरोधों के इस "वाटरफ़ॉल (waterfall)" से बचने के लिए, सामग्री को प्रति एटम कंपोनेंट एक के बजाय कम `.content` फ़ाइलों (जैसे पेज अनुभाग (section) प्रति एक डिक्शनरी) में समूहित करें। आप कई `.content` फ़ाइलों का भी उपयोग कर सकते हैं जो समान की (key) का उपयोग करती हैं। Intlayer उन्हें एकल डिक्शनरी में मिला (merge) देगा।
|
|
566
|
+
|
|
567
|
+
### 3. फ़ेच मोड (Fetch Mode)
|
|
437
568
|
|
|
438
|
-
|
|
569
|
+
यह डायनामिक मोड के समान व्यवहार करता है लेकिन पहले Intlayer Live Sync API से डिक्शनरी लाने (fetch) का प्रयास करता है। यदि API कॉल विफल हो जाता है या सामग्री को लाइव अपडेट के लिए चिह्नित नहीं किया गया है, तो यह डायनामिक इम्पोर्ट पर वापस आ जाता है (falls back)।
|
|
439
570
|
|
|
440
|
-
|
|
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
|
|
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
|
-
| **प्रारंभिक लोड**
|
|
452
|
-
| **नेटवर्क
|
|
453
|
-
| **ट्री शेकिंग**
|
|
454
|
-
|
|
|
596
|
+
| फ़ीचर | स्टेटिक मोड | डायनामिक मोड |
|
|
597
|
+
| :------------------------ | :------------------------------------------ | :------------------------------------- |
|
|
598
|
+
| **JS बंडल साइज़** | बड़ा (कंपोनेंट के लिए सभी भाषाएँ शामिल हैं) | सबसे छोटा (केवल कोड, कोई सामग्री नहीं) |
|
|
599
|
+
| **प्रारंभिक लोड** | त्वरित (सामग्री बंडल में है) | मामूली देरी (JSON फ़ेच करता है) |
|
|
600
|
+
| **नेटवर्क अनुरोध** | 0 अतिरिक्त अनुरोध | 1 अनुरोध प्रति डिक्शनरी की (key) |
|
|
601
|
+
| **ट्री शेकिंग** | कंपोनेंट-स्तर | कंपोनेंट-स्तर + लोकेल-स्तर |
|
|
602
|
+
| **सर्वोत्तम उपयोग मामला** | UI कंपोनेंट, छोटे ऐप्स | भारी पाठ वाले पृष्ठ, अनेक भाषाएँ |
|