अपने प्रश्न को पूछें और दस्तावेज़ का सारांश प्राप्त करें, इस पृष्ठ और आपके चुने हुए AI प्रदाता का उपयोग करके
संस्करण इतिहास
- "`purge` और `minify` अब `@intlayer/swc` के माध्यम से Next.js पर काम करते हैं — `babel.config.js` की आवश्यकता नहीं"v9.2.19/8/2026
- "संदर्भ तालिकाओं में Babel प्लगइन्स को आवश्यक पाइपलाइन क्रम में सूचीबद्ध करें (extract → purge → minify → optimize)"v8.12.024/6/2026
- "Babel/Webpack के लिए `intlayerPurgeBabelPlugin` और `intlayerMinifyBabelPlugin` जोड़ा गया; प्लगइन पाइपलाइन को स्पष्ट किया गया"v8.12.07/6/2026
- "बिल्ड कॉन्फ़िगरेशन में `minify` और `purge` विकल्प जोड़े गए"v8.7.08/4/2026
इस पृष्ठ की सामग्री एक AI द्वारा अनुवादित की गई है।
अंग्रेजी में मूल सामग्री के अंतिम संस्करण देखेंअगर आपके पास इस दस्तावेज़ को सुधारने के लिए कोई विचार है, तो कृपया GitHub पर एक पुल अनुरोध सबमिट करके योगदान देने में संकोच न करें।
दस्तावेज़ के लिए GitHub लिंकदस्तावेज़ का Markdown को क्लिपबोर्ड पर कॉपी करें
i18n बंडल साइज़ और परफॉरमेंस ऑप्टिमाइज़ेशन
JSON फ़ाइलों पर निर्भर पारंपरिक i18n सॉल्यूशन्स के साथ सबसे आम चुनौतियों में से एक कंटेंट के साइज़ को मैनेज करना है। यदि डेवलपर्स मैन्युअल रूप से कंटेंट को अलग-अलग नेमस्पेस में नहीं बांटते हैं, तो उपयोगकर्ता अक्सर केवल एक पेज देखने के लिए हर पेज के और संभावित रूप से हर भाषा के अनुवाद डाउनलोड कर लेते हैं।
उदाहरण के लिए, 10 भाषाओं में अनुवादित 10 पेजों वाले एप्लिकेशन के परिणामस्वरूप उपयोगकर्ता 100 पेजों का कंटेंट डाउनलोड कर सकता है, भले ही उसे केवल एक पेज (वर्तमान भाषा में वर्तमान पेज) की आवश्यकता हो। इससे बैंडविड्थ बर्बाद होती है और लोड होने में अधिक समय लगता है।
Intlayer इस समस्या को बिल्ड-टाइम ऑप्टिमाइज़ेशन के माध्यम से हल करता है। यह आपके कोड का विश्लेषण करता है ताकि यह पता लगाया जा सके कि प्रति कंपोनेंट कौन सी डिक्शनरी वास्तव में उपयोग की जा रही हैं और केवल आवश्यक कंटेंट को ही आपके बंडल में फिर से शामिल (re-inject) करता है।
विषय सूची
अपने बंडल का विश्लेषण करें
अपने बंडल का विश्लेषण करना "भारी" JSON फ़ाइलों और कोड-स्प्लिटिंग के अवसरों की पहचान करने का पहला कदम है। ये टूल आपके एप्लिकेशन के कंपाइल किए गए कोड का एक विज़ुअल ट्री-मैप (treemap) जनरेट करते हैं, जिससे आप ठीक-ठीक देख सकते हैं कि कौन सी लाइब्रेरी सबसे ज़्यादा जगह ले रही हैं।
Vite / Rollup
Vite हुड के नीचे (under the hood) Rollup का उपयोग करता है। rollup-plugin-visualizer एक इंटरैक्टिव HTML फ़ाइल जनरेट करता है जो आपके ग्राफ़ में प्रत्येक मॉड्यूल का आकार दिखाती है।
कोड को क्लिपबोर्ड पर कॉपी करें
कोड को क्लिपबोर्ड पर कॉपी करें
Next.js (Turbopack)
App Router और Turbopack का उपयोग करने वाले प्रोजेक्ट्स के लिए, Next.js एक अंतर्निहित, प्रायोगिक एनालाइज़र प्रदान करता है जिसके लिए किसी अतिरिक्त डिपेंडेंसी (dependency) की आवश्यकता नहीं होती।
कोड को क्लिपबोर्ड पर कॉपी करें
Next.js (Webpack)
यदि आप Next.js में डिफ़ॉल्ट Webpack बंडलर का उपयोग कर रहे हैं, तो आधिकारिक बंडल एनालाइज़र का उपयोग करें। अपने बिल्ड के दौरान एक एनवायरनमेंट वेरिएबल सेट करके इसे ट्रिगर करें।
कोड को क्लिपबोर्ड पर कॉपी करें
कोड को क्लिपबोर्ड पर कॉपी करें
उपयोग:
कोड को क्लिपबोर्ड पर कॉपी करें
Standard Webpack
Create React App (ejected), Angular, या कस्टम Webpack सेटअप के लिए, उद्योग मानक (industry standard) webpack-bundle-analyzer का उपयोग करें।
कोड को क्लिपबोर्ड पर कॉपी करें
कोड को क्लिपबोर्ड पर कॉपी करें
यह कैसे काम करता है
Intlayer एक प्रति-कंपोनेंट (per-component) दृष्टिकोण का उपयोग करता है। वैश्विक (global) JSON फ़ाइलों के विपरीत, आपका कंटेंट आपके कंपोनेंट के साथ या उसके भीतर परिभाषित किया जाता है। बिल्ड प्रक्रिया के दौरान, Intlayer यह करेगा:
useIntlayerकॉल खोजने के लिए आपके कोड का विश्लेषण करेगा।- संबंधित डिक्शनरी कंटेंट बनाएगा (Build)।
- आपके कॉन्फ़िगरेशन के आधार पर ऑप्टिमाइज़ किए गए कोड के साथ
useIntlayerकॉल को बदलेगा।
यह सुनिश्चित करता है कि:
- यदि कोई कंपोनेंट आयात (import) नहीं किया गया है, तो उसका कंटेंट बंडल में शामिल नहीं होता है (Dead Code Elimination)।
- यदि कोई कंपोनेंट लेज़ी-लोडेड (lazy-loaded) है, तो उसका कंटेंट भी लेज़ी-लोडेड हो जाता है।
प्लगइन संदर्भ (Plugin Reference)
Intlayer का बिल्ड ऑप्टिमाइज़ेशन कई अलग-अलग प्लगइन्स में विभाजित है, जिनमें से प्रत्येक की एक ही ज़िम्मेदारी है। यह समझने से कि प्रत्येक प्लगइन क्या करता है, उन्हें कॉन्फ़िगर करते समय भ्रम से बचा जा सकता है।
Babel प्लगइन्स (@intlayer/babel)
इनका उपयोग सीधे तौर पर Webpack-आधारित सेटअप (Babel के साथ Next.js, CRA, कस्टम Webpack, आदि) के लिए babel.config.js में किया जाता है।
नीचे दी गई तालिका उन्हें आवश्यक पाइपलाइन क्रम में सूचीबद्ध करती है (वही क्रम जिसमें उन्हें babel.config.js में आना चाहिए):
सभी डेटा सामग्री को स्पष्ट रूप से देखने के लिए तालिका को मोडल में खोलें
| प्लगइन | यह क्या करता है |
|---|---|
intlayerExtractBabelPlugin | .content.ts फ़ाइलों को स्कैन करता है और कंपाइल की गई डिक्शनरी को .intlayer/ में लिखता है |
intlayerPurgeBabelPlugin | सभी स्रोत (source) फ़ाइलों को स्कैन करता है, संकलित (compiled) .intlayer/**/*.json डिक्शनरी फ़ाइलों से अप्रयुक्त कंटेंट फ़ील्ड को हटा देता है |
intlayerMinifyBabelPlugin | JSON फ़ाइलों और स्रोत कोड दोनों में कंटेंट फ़ील्ड कीज़ (keys) का नाम बदलकर छोटे अल्फाबेटिकल उपनाम (alias) कर देता है (जैसे title → a) |
intlayerOptimizeBabelPlugin | useIntlayer('key') को useDictionary(hash) में फिर से लिखता है (rewrite) और मिलान वाली डिक्शनरी का import इंजेक्ट करता है |
प्लगइन का क्रम महत्वपूर्ण है। आपकेbabel.config.jsमें purge और minify प्लगइन ऑप्टिमाइज़ (optimize) प्लगइन से पहले आने चाहिए। ऑप्टिमाइज़ पासuseIntlayer('key')को एक अपारदर्शी (opaque)useDictionary(hash)कॉल से बदल देता है, जिससे डिक्शनरी की-की (key) जानकारी मिट जाती है, जिसकी आवश्यकता purge और minify पास को यह पहचानने के लिए होती है कि किन फ़ील्ड्स का उपयोग किया जा रहा है।
प्रत्येक Babel प्लगइन में एक संगत (corresponding) विकल्प सहायक (options helper) होता है जो कॉन्फ़िग लोड के समय एक बार आपके intlayer.config.ts को पढ़ता है और पहले से हल (pre-resolved) किए गए मान लौटाता है:
सभी डेटा सामग्री को स्पष्ट रूप से देखने के लिए तालिका को मोडल में खोलें
| Options helper | किसके साथ उपयोग किया जाता है |
|---|---|
getExtractPluginOptions() | intlayerExtractBabelPlugin |
getPurgePluginOptions() | intlayerPurgeBabelPlugin |
getMinifyPluginOptions() | intlayerMinifyBabelPlugin |
getOptimizePluginOptions() | intlayerOptimizeBabelPlugin |
Vite प्लगइन्स (vite-intlayer)
Vite उपयोगकर्ता इन्हें कभी भी सीधे कॉन्फ़िगर नहीं करते हैं। जब आप vite.config.ts में withIntlayer() कॉल करते हैं तो वे स्वचालित रूप से जुड़ जाते हैं। intlayer.config.ts में build.purge और build.minify फ़्लैग किसी अतिरिक्त प्लगइन पंजीकरण (registration) के बिना संगत (corresponding) व्यवहार को टॉगल करते हैं।
सभी डेटा सामग्री को स्पष्ट रूप से देखने के लिए तालिका को मोडल में खोलें
| इंटरनल Vite प्लगइन | समकक्ष व्यवहार (Equivalent behaviour) |
|---|---|
| Usage analyzer | intlayerPurgeBabelPlugin के एनालाइज़ (analyse) पास के समान |
| Dictionary prune | intlayerPurgeBabelPlugin के JSON राइट पास के समान |
| Dictionary minify | intlayerMinifyBabelPlugin के JSON राइट पास के समान |
| Babel transform | intlayerMinifyBabelPlugin के स्रोत कोड का नाम बदलने और intlayerOptimizeBabelPlugin के समान |
SWC प्लगइन (@intlayer/swc)
Next.js उपयोगकर्ता भी इन्हें कभी सीधे कॉन्फ़िगर नहीं करते। v9.2.1 से, next.config.ts में withIntlayer() केवल build.purge और build.minify फ़्लैग्स के आधार पर पूरी पाइपलाइन चलाता है — purge, minify और import पुनर्लेखन।
काम दो हिस्सों में बँटा है, क्योंकि एक SWC Wasm प्लगइन एक बार में एक ही फ़ाइल रूपांतरित करता है और उसके पास फ़ाइल सिस्टम तक पहुँच नहीं होती:
सभी डेटा सामग्री को स्पष्ट रूप से देखने के लिए तालिका को मोडल में खोलें
| चरण | कहाँ चलता है | क्या करता है |
|---|---|---|
| उपयोग विश्लेषण + JSON purge/minify | Node, withIntlayer() के भीतर | हर कंपोनेंट स्रोत फ़ाइल पढ़ता है, .intlayer/**/*.json को पुनः लिखता है, और पुनर्नामकरण तालिकाएँ बनाता है |
स्रोत पुनर्लेखन (content.title → .a) | @intlayer/swc (Wasm) | पुनर्नामकरण तालिकाओं को आपके कोड में संबंधित प्रॉपर्टी एक्सेस पर लागू करता है |
Import पुनर्लेखन (useIntlayer → dict) | @intlayer/swc (Wasm) | intlayerOptimizeBabelPlugin के समान |
यह तय करना कि कौन-से फ़ील्ड अप्रयुक्त हैं और प्रत्येक को कौन-सा उपनाम मिलेगा, इसके लिए फ़ाइलों के बीच स्थिति और फ़ाइल I/O चाहिए; इसलिए वह आधा हिस्सा Node में चलता है और SWC प्लगइन को केवल परिणामी तालिकाएँ मिलती हैं।
प्लेटफ़ॉर्म के अनुसार सेटअप
Next.js
Next.js को @intlayer/swc प्लगइन चाहिए, क्योंकि Next.js बिल्ड के लिए SWC का उपयोग करता है। v9.2.1 से यह अकेला पैकेज पूरी पाइपलाइन को कवर करता है — ऑप्टिमाइज़ (import पुनर्लेखन), purge और minify।
यह प्लगइन डिफ़ॉल्ट रूप से इंस्टॉल नहीं होता है क्योंकि SWC प्लगइन्स अभी भी Next.js के लिए प्रायोगिक (experimental) हैं। भविष्य में यह बदल सकता है।
Next.js 16.1.0 न्यूनतम संस्करण है। यह SWC के फ़ॉरवर्ड-संगत Wasm प्लगइन ABI पर बना पहला रिलीज़ है; इससे पुराने रिलीज़ प्लगइन को अस्वीकार कर देते हैं। withIntlayer आपके प्रोजेक्ट का Next.js संस्करण पढ़ता है और 16.1.0 से नीचे प्लगइन को पंजीकृत ही नहीं करता — वे बिल्ड फिर भी सफल होते हैं, बस बंडल ऑप्टिमाइज़ेशन के बिना चलते हैं।
कोड को क्लिपबोर्ड पर कॉपी करें
कोड को क्लिपबोर्ड पर कॉपी करें
एक बार इंस्टॉल हो जाने पर, Intlayer स्वचालित रूप से प्लगइन का पता लगाएगा और उसका उपयोग करेगा।
Purge और minify चरणों (फ़ील्ड हटाना और फ़ील्ड का नाम बदलना) के लिए किसी अतिरिक्त पैकेज या babel.config.js की आवश्यकता नहीं है। अपने कॉन्फ़िग को withIntlayer से लपेटें और intlayer.config.ts में फ़्लैग्स चालू करें:
कोड को क्लिपबोर्ड पर कॉपी करें
कोड को क्लिपबोर्ड पर कॉपी करें
next build के दौरान, withIntlayer आपके स्रोतों का विश्लेषण करता है, संकलित शब्दकोशों को पुनः लिखता है, और परिणामी फ़ील्ड-पुनर्नामकरण तालिकाएँ @intlayer/swc को भेजता है, जो आपके कोड में संबंधित प्रॉपर्टी एक्सेस को अपडेट करता है।
withIntlayerSyncनहीं, बल्कि एसिंक्रोनसwithIntlayerका उपयोग करें। सिंक्रोनस संस्करण विश्लेषण पाइपलाइन नहीं चलाता, इसलिए उसके साथ purge और minify का कोई प्रभाव नहीं होता।
Purge और minify केवलnext buildपर चलते हैं — ऑप्टिमाइज़ पाइपलाइनnext devके दौरान बंद रहती है।
जब कम्पैट-अडैप्टर कॉलर्स कॉन्फ़िगर किए जाते हैं तब भी ये अक्षम हो जाते हैं (swcExtraCallers, जिन्हें@intlayer/next-intlया@intlayer/react-i18nextजैसे कम्पैट पैकेज सेट करते हैं): वे कॉल साइट्स उपयोग विश्लेषक को दिखाई नहीं देतीं, इसलिए purge उन फ़ील्ड्स को हटा देगा जिन्हें कोड अब भी पढ़ता है। Import पुनर्लेखन सक्रिय रहता है।
पुराने संस्करणों (9.2.1 से पहले) में @intlayer/babel और एक babel.config.js की आवश्यकता होती थी जो intlayerPurgeBabelPlugin और intlayerMinifyBabelPlugin घोषित करे। अब उस फ़ाइल की आवश्यकता नहीं है और उसे हटाया जा सकता है।
Vite
Vite @intlayer/babel प्लगइन का उपयोग करता है, जिसे vite-intlayer की डिपेंडेंसी के रूप में शामिल किया गया है। पूर्ण ऑप्टिमाइज़ेशन पाइपलाइन — इम्पोर्ट रीराइट, पर्ज और मिनिफ़ाई — डिफ़ॉल्ट रूप से सक्षम है और इसके लिए किसी अतिरिक्त प्लगइन पंजीकरण (registration) की आवश्यकता नहीं है।
intlayer.config.ts में संगत फ़्लैग सेट करके purge और minify को सक्षम करें:
कोड को क्लिपबोर्ड पर कॉपी करें
Webpack (और Babel के साथ Next.js)
@intlayer/babel इंस्टॉल करें:
कोड को क्लिपबोर्ड पर कॉपी करें
सभी चार प्लगइन्स को सही क्रम में babel.config.js में जोड़ें:
कोड को क्लिपबोर्ड पर कॉपी करें
कॉन्फ़िगरेशन
आप अपने intlayer.config.ts में build प्रॉपर्टी के ज़रिए यह नियंत्रित कर सकते हैं कि Intlayer आपके बंडल को कैसे ऑप्टिमाइज़ करे।
कोड को क्लिपबोर्ड पर कॉपी करें
ज़्यादातर मामलों मेंoptimizeके लिए डिफ़ॉल्ट मान (undefined) रखने की अनुशंसा की जाती है।
सभी विकल्पों के लिए कॉन्फ़िगरेशन संदर्भ देखें: Configuration
बिल्ड विकल्प
सभी डेटा सामग्री को स्पष्ट रूप से देखने के लिए तालिका को मोडल में खोलें
| प्रॉपर्टी | प्रकार | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
optimize | boolean / undefined | undefined | इम्पोर्ट रीराइट (import rewrite) पास को सक्षम करता है। undefined = केवल प्रोडक्शन बिल्ड में सक्रिय। false पर्ज (purge) और मिनिफ़ाई (minify) को भी अक्षम कर देता है। |
minify | boolean | false | संकलित JSON फ़ाइलों में कंटेंट फ़ील्ड कीज़ का नाम छोटे अल्फाबेटिकल उपनामों (aliases) में बदल देता है। स्रोत कोड में मेल खाने वाले प्रॉपर्टी एक्सेस को भी फिर से लिखता है। जब optimize false हो तो इसका कोई प्रभाव नहीं होता है। |
purge | boolean | false | संकलित JSON फ़ाइलों से उन कंटेंट फ़ील्ड्स को हटा देता है जिन्हें स्रोत कोड में कभी भी स्थिर (statically) रूप से एक्सेस नहीं किया जाता है। जब optimize false हो तो इसका कोई प्रभाव नहीं होता है। |
Minification (फ़ील्ड की का नाम बदलना)
build.minify आपके JavaScript बंडल को मिनिफ़ाई नहीं करता है — आपका बंडलर वह काम संभालता है। इसके बजाय, यह उपयोगकर्ता द्वारा परिभाषित प्रत्येक कंटेंट फ़ील्ड की (key) को एक छोटे अल्फाबेटिकल उपनाम (alias) से बदलकर संकलित डिक्शनरी JSON फ़ाइलों को सिकोड़ता है:
कोड को क्लिपबोर्ड पर कॉपी करें
यही नाम बदलना आपके स्रोत कोड में सभी प्रॉपर्टी एक्सेस पर लागू होता है, इसलिए संकलित आउटपुट में content.title, content.a बन जाता है। रनटाइम व्यवहार पूरी तरह समान रहता है।
कोड को क्लिपबोर्ड पर कॉपी करें
जबoptimizefalseहोता है तो मिनिफिकेशन छोड़ दिया जाता है (skipped)। जबeditor.enabledtrueहोता है तो यह फिर भी चलता है, लेकिन फ़ील्ड का नाम बदलने वाला चरण छोड़ दिया जाता है — विज़ुअल एडिटर संपादनों कोkeyPathके माध्यम से हल करता है, इसलिए मूल फ़ील्ड नामों का बने रहना ज़रूरी है।
Next.js पर, minification तब भी छोड़ दिया जाता है जब @intlayer/swc इंस्टॉल न हो या लोड न हो सके (16.1.0 से नीचे का Next.js)। स्रोत एक्सेस को पुनः लिखने वाला आधा हिस्सा यही प्लगइन है, इसलिए इसके बिना शब्दकोशों का नाम बदलने पर आपका कोड ऐसे फ़ील्ड नाम पढ़ता रह जाएगा जो अब मौजूद नहीं हैं।
importMode: 'fetch' के माध्यम से लोड की गई डिक्शनरी के लिए भी मिनिफिकेशन छोड़ दिया जाता है क्योंकि उनका JSON मूल फ़ील्ड नामों का उपयोग करके रिमोट API से परोसा (served) जाता है — क्लाइंट-साइड कीज़ का नाम बदलने से सर्वर/क्लाइंट अनुबंध (contract) टूट जाएगा।
Purging (अप्रयुक्त फ़ील्ड हटाना)
build.purge विश्लेषण करता है कि आपके स्रोत कोड में वास्तव में किन कंटेंट फ़ील्ड्स को एक्सेस किया गया है और संकलित JSON फ़ाइलों से अन्य सभी को हटा देता है।
कोड को क्लिपबोर्ड पर कॉपी करें
उदाहरण: पाँच फ़ील्ड वाली डिक्शनरी जहाँ केवल दो का उपयोग किया जाता है:
कोड को क्लिपबोर्ड पर कॉपी करें
जबoptimizefalseहोता है तो पर्ज (Purge) छोड़ दिया जाता है (skipped)। जबeditor.enabledtrueहोता है तब भी यह सक्रिय रहता है — क्योंकि हटाए गए फ़ील्ड को कोई भी कंपोनेंट नहीं पढ़ता, इसलिए एडिटर उसे कभी रेंडर नहीं करता। Next.js पर यह तब भी छोड़ दिया जाता है जब@intlayer/swcउपलब्ध न हो, और जब कम्पैट-अडैप्टर कॉलर्स कॉन्फ़िगर किए गए हों।
पर्ज (Purge) को उस समय भी सुरक्षित (conservatively) रूप से छोड़ दिया जाता है जब किसी स्रोत फ़ाइल को पार्स (parse) नहीं किया जा सकता है, या जब useIntlayer के परिणाम को किसी वेरिएबल को सौंपा (assigned) जाता है और उन तरीकों से पास किया जाता है जिन्हें स्टेटिक एनालाइज़र ट्रैक नहीं कर सकता है (जैसे किसी ऑब्जेक्ट में स्प्रेड (spread) करना, डिस्ट्रक्चरिंग के बिना प्रोप (prop) के रूप में पास करना)। उन मामलों में, पूरी डिक्शनरी सुरक्षित (preserved) रखी जाती है।
इम्पोर्ट मोड (Import Mode)
कई पेजों और लोकेल्स वाले बड़े एप्लिकेशन्स के लिए, आपका JSON आपके बंडल साइज़ का एक महत्वपूर्ण हिस्सा हो सकता है। Intlayer आपको importMode विकल्प का उपयोग करके डिक्शनरी को लोड करने के तरीके को नियंत्रित करने की अनुमति देता है।
ग्लोबल परिभाषा (Global definition)
इम्पोर्ट मोड को आपके intlayer.config.ts फ़ाइल में विश्व स्तर पर (globally) परिभाषित किया जा सकता है।
कोड को क्लिपबोर्ड पर कॉपी करें
प्रति-डिक्शनरी (Per-dictionary) परिभाषा
आप अलग-अलग डिक्शनरी के लिए उनके .content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5|md|mdx|yaml|yml}} फ़ाइलों में इम्पोर्ट मोड को ओवरराइड कर सकते हैं।
कोड को क्लिपबोर्ड पर कॉपी करें
सभी डेटा सामग्री को स्पष्ट रूप से देखने के लिए तालिका को मोडल में खोलें
| प्रॉपर्टी | प्रकार | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
importMode | 'static', 'dynamic', 'fetch' | 'static' | नापसंद (Deprecated): इसके बजाय dictionary.importMode का उपयोग करें। यह निर्धारित करता है कि डिक्शनरी कैसे लोड की जाती हैं (नीचे देखें)। |
importMode सेटिंग यह निर्धारित करती है कि डिक्शनरी का कंटेंट आपके कंपोनेंट में कैसे इंजेक्ट किया जाता है। आप इसे intlayer.config.ts में dictionary ऑब्जेक्ट के अंतर्गत विश्व स्तर पर परिभाषित कर सकते हैं, या इसे प्रति-डिक्शनरी (per-dictionary) आधार पर इसकी .content.ts फ़ाइल में ओवरराइड कर सकते हैं।
1. स्टेटिक मोड (Static Mode - default)
स्टेटिक मोड में, Intlayer useIntlayer को useDictionary से बदल देता है और डिक्शनरी को सीधे JavaScript बंडल में इंजेक्ट कर देता है।
- फ़ायदे: तुरंत प्रतिपादन (synchronous), हाइड्रेशन (hydration) के दौरान कोई अतिरिक्त नेटवर्क अनुरोध (requests) नहीं।
- नुकसान: बंडल में उस विशिष्ट कंपोनेंट के लिए उपलब्ध सभी भाषाओं के अनुवाद शामिल होते हैं।
- इसके लिए सर्वोत्तम: सिंगल पेज एप्लिकेशन (SPA)।
रूपांतरित कोड उदाहरण (Transformed code example):
कोड को क्लिपबोर्ड पर कॉपी करें
2. डायनामिक मोड (Dynamic Mode)
डायनामिक मोड में, Intlayer useIntlayer को useDictionaryAsync से बदल देता है। यह विशेष रूप से वर्तमान लोकेल (locale) के लिए JSON को लेज़ी-लोड करने के लिए import() (एक सस्पेंस (Suspense)-जैसा तंत्र) का उपयोग करता है।
- फ़ायदे: लोकेल-स्तर ट्री शेकिंग (Locale-level tree shaking)। अंग्रेजी संस्करण देखने वाला उपयोगकर्ता केवल अंग्रेजी डिक्शनरी डाउनलोड करेगा। हिंदी डिक्शनरी कभी लोड नहीं होती है।
- नुकसान: हाइड्रेशन के दौरान प्रति कंपोनेंट एक नेटवर्क अनुरोध (asset fetch) ट्रिगर करता है।
- इसके लिए सर्वोत्तम: बड़े टेक्स्ट ब्लॉक, लेख, या एप्लिकेशन जो कई भाषाओं का समर्थन करते हैं जहां बंडल का आकार महत्वपूर्ण होता है।
रूपांतरित कोड उदाहरण (Transformed code example):
कोड को क्लिपबोर्ड पर कॉपी करें
जबimportMode: 'dynamic'का उपयोग किया जाता है, यदि आपके पास एक ही पेज परuseIntlayerका उपयोग करने वाले 100 कंपोनेंट हैं, तो ब्राउज़र 100 अलग-अलग फ़ेच (fetches) का प्रयास करेगा। अनुरोधों के इस "वाटरफ़ॉल (waterfall)" से बचने के लिए, सामग्री को प्रति एटम कंपोनेंट एक के बजाय कम.contentफ़ाइलों (जैसे पेज अनुभाग (section) प्रति एक डिक्शनरी) में समूहित करें। आप कई.contentफ़ाइलों का भी उपयोग कर सकते हैं जो समान की (key) का उपयोग करती हैं। Intlayer उन्हें एकल डिक्शनरी में मिला (merge) देगा।
3. फ़ेच मोड (Fetch Mode)
यह डायनामिक मोड के समान व्यवहार करता है लेकिन पहले Intlayer Live Sync API से डिक्शनरी लाने (fetch) का प्रयास करता है। यदि API कॉल विफल हो जाता है या सामग्री को लाइव अपडेट के लिए चिह्नित नहीं किया गया है, तो यह डायनामिक इम्पोर्ट पर वापस आ जाता है (falls back)।
रूपांतरित कोड उदाहरण (Transformed code example):
कोड को क्लिपबोर्ड पर कॉपी करें
अधिक विवरण के लिए CMS दस्तावेज़ देखें: CMS
फ़ेच मोड में, पर्ज (purge) और मिनिफिकेशन (minification) लागू नहीं होते हैं क्योंकि JSON मूल फ़ील्ड नामों का उपयोग करके रिमोट API से परोसा (served) जाता है।
सारांश: स्टेटिक बनाम डायनामिक (Static vs Dynamic)
सभी डेटा सामग्री को स्पष्ट रूप से देखने के लिए तालिका को मोडल में खोलें
| फ़ीचर | स्टेटिक मोड | डायनामिक मोड |
|---|---|---|
| JS बंडल साइज़ | बड़ा (कंपोनेंट के लिए सभी भाषाएँ शामिल हैं) | सबसे छोटा (केवल कोड, कोई सामग्री नहीं) |
| प्रारंभिक लोड | त्वरित (सामग्री बंडल में है) | मामूली देरी (JSON फ़ेच करता है) |
| नेटवर्क अनुरोध | 0 अतिरिक्त अनुरोध | 1 अनुरोध प्रति डिक्शनरी की (key) |
| ट्री शेकिंग | कंपोनेंट-स्तर | कंपोनेंट-स्तर + लोकेल-स्तर |
| सर्वोत्तम उपयोग मामला | UI कंपोनेंट, छोटे ऐप्स | भारी पाठ वाले पृष्ठ, अनेक भाषाएँ |
