@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,12 +1,12 @@
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
- - بنڈل کی بہتری
8
- - مواد کی آٹومیشن
9
- - متحرک مواد
7
+ - Bundle Optimisation
8
+ - Content Automation
9
+ - Dynamic Content
10
10
  - Intlayer
11
11
  - Next.js
12
12
  - JavaScript
@@ -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
- روایتی i18n حلوں کے ساتھ سب سے عام چیلنجوں میں سے ایک جو JSON فائلوں پر انحصار کرتے ہیں وہ مواد کے سائز کا انتظام کرنا ہے۔ اگر ڈویلپرز دستی طور پر مواد کو نیم اسپیسز (namespaces) میں الگ نہیں کرتے ہیں، تو صارف اکثر صرف ایک صفحہ دیکھنے کے لیے ہر صفحے اور ممکنہ طور پر ہر زبان کے ترجمے ڈاؤن لوڈ کر لیتے ہیں۔
29
+ روایتی i18n سلوشنز جو JSON فائلوں پر انحصار کرتے ہیں، ان کے ساتھ ایک سب سے عام چیلنج مواد کے سائز کا انتظام (management) کرنا ہے۔ اگر ڈیویلپرز دستی (manually) طور پر مواد کو نیم اسپیسز (namespaces) میں الگ نہیں کرتے ہیں، تو صارفین اکثر ہر صفحے اور ممکنہ طور پر ہر زبان کے ترجمے ڈاؤن لوڈ کر لیتے ہیں، صرف ایک صفحہ دیکھنے کے لیے۔
27
30
 
28
- مثال کے طور پر، 10 زبانوں میں ترجمہ شدہ 10 صفحات والی ایپلیکیشن کے نتیجے میں ایک صارف 100 صفحات کا مواد ڈاؤن لوڈ کر سکتا ہے، چاہے اسے صرف **ایک** (موجودہ زبان میں موجودہ صفحہ) کی ضرورت ہو۔ اس سے بینڈوتھ کا ضیاع ہوتا ہے اور لوڈ ہونے کا وقت سست ہو جاتا ہے۔
31
+ مثال کے طور پر، 10 زبانوں میں ترجمہ شدہ 10 صفحات والی ایپلیکیشن کے نتیجے میں صارف 100 صفحات کے مواد کو ڈاؤن لوڈ کر سکتا ہے، حالانکہ اسے صرف **ایک** کی ضرورت ہوتی ہے (موجودہ زبان میں موجودہ صفحہ)۔ اس سے بینڈوڈتھ (bandwidth) ضائع ہوتی ہے اور لوڈ ہونے میں زیادہ وقت لگتا ہے۔
29
32
 
30
- **Intlayer بلڈ ٹائم آپٹیمائزیشن کے ذریعے اس مسئلے کو حل کرتا ہے۔** یہ آپ کے کوڈ کا تجزیہ کرتا ہے تاکہ پتہ لگایا جا سکے کہ فی کمپوننٹ کون سی ڈکشنریاں درحقیقت استعمال ہو رہی ہیں اور صرف ضروری مواد کو آپ کے بنڈل میں دوبارہ شامل کرتا ہے۔
33
+ **Intlayer اس مسئلے کو بلڈ ٹائم آپٹیمائزیشن کے ذریعے حل کرتا ہے۔** یہ آپ کے کوڈ کا تجزیہ (analyze) کرتا ہے تاکہ معلوم کیا جا سکے کہ ہر جزو (component) کے لیے بالکل کون سی ڈکشنریاں استعمال ہو رہی ہیں، اور آپ کے بنڈل میں صرف ضروری مواد کو دوبارہ انجیکٹ (re-inject) کرتا ہے۔
31
34
 
32
- ## فہرست مواد
35
+ ## فہرستِ مضامین
33
36
 
34
37
  <TOC />
35
38
 
36
- ## اپنے بنڈل کو اسکین کریں
39
+ ## اپنے بنڈل کا تجزیہ کریں
37
40
 
38
- اپنے بنڈل کا تجزیہ کرنا "بھاری" JSON فائلوں اور کوڈ اسپلٹنگ (code-splitting) کے مواقع کی نشاندہی کرنے کا پہلا قدم ہے۔ یہ ٹولز آپ کی ایپلیکیشن کے مرتب شدہ کوڈ کا ایک بصری ٹری میپ (treemap) تیار کرتے ہیں، جس سے آپ دیکھ سکتے ہیں کہ کون سی لائبریریاں سب سے زیادہ جگہ لے رہی ہیں۔
41
+ "بھاری" JSON فائلوں اور کوڈ-اسپلٹنگ کے مواقع کی نشاندہی کرنے کا پہلا قدم آپ کے بنڈل کا تجزیہ کرنا ہے۔ یہ ٹولز آپ کی ایپلیکیشن کے مرتب شدہ (compiled) کوڈ کا ایک بصری ٹری میپ (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 اندرونِ خانہ 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 ایک بلٹ ان (built-in)، تجرباتی اینالائزر فراہم کرتا ہے جسے کسی اضافی ڈیپینڈنسی (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 بنڈلر استعمال کر رہے ہیں تو آفیشل بنڈل اینالائزر استعمال کریں۔ اپنی بلڈ کے دوران ایک انوائرنمنٹ ویری ایبل (environment variable) سیٹ کر کے اسے ٹرگر کریں۔
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 سیٹ اپ کے لیے، انڈسٹری اسٹینڈرڈ `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 **فی کمپوننٹ نقطہ نظر** استعمال کرتا ہے۔ عالمی JSON فائلوں کے برعکس، آپ کا مواد آپ کے کمپوننٹس کے ساتھ یا ان کے اندر بیان کیا جاتا ہے۔ بلڈ کے عمل کے دوران، Intlayer:
174
+ Intlayer ایک **فی جزو (per-component)** طریقہ کار استعمال کرتا ہے۔ عالمی (global) JSON فائلوں کے برعکس، آپ کا مواد آپ کے اجزاء (components) کے ساتھ یا ان کے اندر وضع (define) کیا جاتا ہے۔ بلڈ کے عمل کے دوران، Intlayer مندرجہ ذیل کام کرے گا:
172
175
 
173
- 1. `useIntlayer` کالز تلاش کرنے کے لیے آپ کے کوڈ کا **تجزیہ** کرتا ہے۔
174
- 2. متعلقہ ڈکشنری مواد **تیار** کرتا ہے۔
175
- 3. آپ کی کنفیگریشن کی بنیاد پر `useIntlayer` کال کو بہتر کوڈ سے **تبدیل** کرتا ہے۔
176
+ 1. `useIntlayer` کی کالز کو تلاش کرنے کے لیے آپ کے کوڈ کا **تجزیہ (Analyze)** کرے گا۔
177
+ 2. متعلقہ ڈکشنری کا مواد **تیار (Build)** کرے گا۔
178
+ 3. آپ کی کنفیگریشن کے مطابق آپٹیمائز شدہ کوڈ کے ساتھ `useIntlayer` کی کال کو **تبدیل (Replace)** کر دے گا۔
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.config.js` میں استعمال ہوتے ہیں (جیسے Babel کے ساتھ Next.js، CRA، کسٹم Webpack وغیرہ)۔
192
+
193
+ | پلگ ان | یہ کیا کرتا ہے |
194
+ | :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
195
+ | `intlayerExtractBabelPlugin` | `.content.ts` فائلوں کو اسکین کرتا ہے اور مرتب کی گئی (compiled) ڈکشنریوں کو `.intlayer/` میں لکھتا ہے |
196
+ | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` کو `useDictionary(hash)` میں بدل دیتا ہے اور متعلقہ ڈکشنری کا `import` شامل (inject) کرتا ہے |
197
+ | `intlayerPurgeBabelPlugin` | تمام سورس (source) فائلوں کو اسکین کرتا ہے، مرتب شدہ `.intlayer/**/*.json` ڈکشنری فائلوں سے **غیر استعمال شدہ مواد (unused content fields)** کو ہٹا دیتا ہے |
198
+ | `intlayerMinifyBabelPlugin` | JSON فائلوں اور سورس کوڈ دونوں میں **مواد کی فیلڈ کیز (keys) کا نام بدل کر** چھوٹے حروف تہجی (alias) رکھ دیتا ہے (جیسے `title` → `a`) |
199
+
200
+ > **پلگ ان کی ترتیب اہم ہے۔** آپ کے `babel.config.js` میں purge اور minify کے پلگ انز کا optimize پلگ ان سے **پہلے** ہونا لازمی ہے۔ optimize مرحلہ (pass) `useIntlayer('key')` کو ایک مبہم `useDictionary(hash)` کال سے بدل دیتا ہے، جس سے ڈکشنری کی (key) کی وہ معلومات مٹ جاتی ہے جس کی purge اور minify مراحل کو ضرورت ہوتی ہے تاکہ وہ جان سکیں کہ کون سی فیلڈز استعمال ہو رہی ہیں۔
201
+
202
+ ہر Babel پلگ ان کے ساتھ ایک آپشنز ہیلپر (options helper) منسلک ہوتا ہے جو کنفیگ لوڈ ہونے کے وقت ایک بار آپ کے `intlayer.config.ts` کو پڑھتا ہے اور پہلے سے حل شدہ (pre-resolved) ویلیوز (values) واپس کرتا ہے:
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` فلیگز بغیر کسی اضافی پلگ ان رجسٹریشن کے اس رویے (behaviour) کو ٹوگل (toggle) کرتے ہیں۔
214
+
215
+ | اندرونی Vite پلگ ان | مساوی رویہ (Equivalent behaviour) |
216
+ | :------------------ | :---------------------------------------------------------------------------------------------- |
217
+ | Usage analyzer | بالکل `intlayerPurgeBabelPlugin` کے تجزیاتی (analyse) مرحلے کی طرح |
218
+ | Dictionary prune | بالکل `intlayerPurgeBabelPlugin` کے JSON رائٹ (write) مرحلے کی طرح |
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 کے لیے اب بھی تجرباتی مراحل میں ہیں۔ یہ مستقبل میں بدل سکتا ہے۔
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` کو ایویلیوایٹ (evaluate) کرتا ہے، اس لیے Babel پلگ انز SWC سے پہلے ایک پری-پاس (pre-pass) کے طور پر چلتے ہیں۔
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 اور سورس کوڈ میں مواد کی فیلڈ کیز کا نام بدلیں
271
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
272
+ // نوٹ: intlayerOptimizeBabelPlugin کی یہاں ضرورت نہیں ہے کیونکہ
273
+ // @intlayer/swc اسے useIntlayer → useDictionary ری رائٹ کو سنبھالتا ہے۔
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` کے انحصار (dependency) کے طور پر شامل ہے۔ آپٹیمائزیشن ڈیفالٹ طور پر فعال ہے۔ مزید کچھ کرنے کی ضرورت نہیں ہے۔
283
+ Vite `@intlayer/babel` کا پلگ ان استعمال کرتا ہے، جسے `vite-intlayer` کی ڈیپینڈنسی کے طور پر شامل کیا گیا ہے۔ پوری آپٹیمائزیشن پائپ لائن امپورٹ ری رائٹ (import rewrite)، پرج (purge)، اور منی فائی (minify) — بائی ڈیفالٹ فعال ہے اور اس کے لیے کسی اضافی پلگ ان رجسٹریشن کی ضرورت نہیں ہے۔
284
+
285
+ اپنے `intlayer.config.ts` میں متعلقہ فلیگز (flags) سیٹ کر کے پرج اور منی فائی کو فعال کریں:
286
+
287
+ ```typescript fileName="intlayer.config.ts"
288
+ import type { IntlayerConfig } from "intlayer";
289
+
290
+ const config: IntlayerConfig = {
291
+ build: {
292
+ purge: true, // بنڈل کیے گئے JSON سے غیر استعمال شدہ مواد کو ہٹا دیں
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 (اور Next.js بیبل (Babel) کے ساتھ)
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: compile .content.ts files → .intlayer/**/*.json
340
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
341
+
342
+ // Purge: remove unused fields from .intlayer/**/*.json
343
+ // (intlayer.config.ts میں موجود build.purge فلیگ کو پڑھتا ہے)
344
+ [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
345
+
346
+ // Minify: rename field keys in JSON + source code
347
+ // (intlayer.config.ts میں موجود build.minify فلیگ کو پڑھتا ہے)
348
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
349
+
350
+ // Optimize: rewrite 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 آپ کے بنڈل کو کس طرح آپٹیمائز کرتا ہے، یہ آپ کی `intlayer.config.ts` کی فلیگ `build` کی پراپرٹی کا استعمال کر کے کیا جا سکتا ہے۔
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.URDU],
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
- * ڈکشنریوں میں غیر استعمال شدہ کلیدوں (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
+ // عرفی ناموں (مثلاً 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
- > مزید تفصیلات کے لیے کنفیگریشن ڈاک دیکھیں: [کنفیگریشن](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/configuration.md)
395
+ > تمام آپشنز کے لیے کنفیگریشن کا حوالہ دیکھیں: [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/configuration.md)
294
396
 
295
- ### بلڈ کے اختیارات
397
+ ### بلڈ کے آپشنز (Build Options)
296
398
 
297
- بلڈ کنفیگریشن آبجیکٹ کے تحت درج ذیل اختیارات دستیاب ہیں:
399
+ | پراپرٹی | قسم (Type) | ڈیفالٹ | تفصیل (Description) |
400
+ | :------------- | :--------------------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
401
+ | **`optimize`** | `boolean \| undefined` | `undefined` | امپورٹ ری رائٹ (import rewrite) پاس کو فعال بناتا ہے۔ `undefined` = صرف پروڈکشن بلڈز میں فعال ہوتا ہے۔ `false` کرنے پر پرج (purge) اور منی فائی (minify) بھی غیر فعال ہو جاتے ہیں۔ |
402
+ | **`minify`** | `boolean` | `false` | مرتب شدہ JSON فائلوں میں مواد کی فیلڈ کیز (keys) کو چھوٹے حروف تہجی والے عرفی ناموں (aliases) میں بدل دیتا ہے۔ سورس کوڈ میں بھی ملنے والی پراپرٹی ایکسیسز کو تبدیل کرتا ہے۔ اگر `optimize` کی ویلیو `false` ہو تو اس کا کوئی اثر نہیں ہوتا۔ |
403
+ | **`purge`** | `boolean` | `false` | مرتب شدہ JSON فائلوں سے ان مواد کی فیلڈز کو ہٹا دیتا ہے جن تک سورس کوڈ میں کبھی بھی رسائی نہیں کی گئی۔ اگر `optimize` کی ویلیو `false` ہو تو اس کا کوئی اثر نہیں ہوتا۔ |
298
404
 
299
- | پراپرٹی | ٹائپ | ڈیفالٹ | تفصیل |
300
- | :------------- | :-------- | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
301
- | **`optimize`** | `boolean` | `undefined` | کنٹرول کرتا ہے کہ آیا بلڈ آپٹیمائزیشن فعال ہے یا نہیں۔ اگر `true` ہے، تو Intlayer ڈکشنری کالز کو بہتر انجیکشنز سے بدل دیتا ہے۔ اگر `false` ہے، تو آپٹیمائزیشن غیر فعال ہے۔ پروڈکشن میں `true` سیٹ کرنا بہتر ہے۔ |
302
- | **`minify`** | `boolean` | `false` | بنڈل سائز کم کرنے کے لیے ڈکشنریوں کو منی فائی کرنا ہے یا نہیں۔ |
303
- | **`purge`** | `boolean` | `false` | ڈکشنریوں میں غیر استعمال شدہ کلیدوں کو صاف کرنا ہے یا نہیں۔ |
405
+ ### منی فیکیشن (فیلڈ کی کا نام بدلنا)
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
+ > منی فیکیشن کو چھوڑ (skipped) دیا جاتا ہے جب `optimize` کی ویلیو `false` ہو، یا جب `editor.enabled` کی ویلیو `true` ہو (ویژول ایڈیٹر کو ایڈیٹنگ کی اجازت دینے کے لیے اصل فیلڈ کے ناموں کی ضرورت ہوتی ہے)۔
432
+
433
+ > منی فیکیشن ان ڈکشنریوں کے لیے بھی نظرانداز کی جاتی ہے جنہیں `importMode: 'fetch'` کے ذریعے لوڈ کیا گیا ہو کیونکہ ان کا JSON ریموٹ API سے اصل فیلڈ ناموں کے ساتھ پیش کیا جاتا ہے — کلائنٹ سائیڈ کیز کا نام بدلنے سے سرور/کلائنٹ کا کنٹریکٹ (contract) ٹوٹ جائے گا۔
322
434
 
323
- ### پرجنگ (Purging)
435
+ ### پرجنگ (غیر استعمال شدہ فیلڈز کو ہٹانا)
324
436
 
325
- پرجنگ یہ یقینی بناتی ہے کہ آپ کے کوڈ میں درحقیقت استعمال ہونے والی کلیدیں ہی فائنل ڈکشنری بنڈل میں شامل کی جائیں۔ اگر آپ کے پاس بہت سی کلیدوں والی بڑی ڈکشنریاں ہیں جو آپ کی ایپلیکیشن کے ہر حصے میں استعمال نہیں ہوتی ہیں، تو یہ آپ کے بنڈل کے سائز کو نمایاں طور بر کم کر سکتا ہے۔
437
+ `build.purge` تجزیہ کرتا ہے کہ سورس کوڈ میں دراصل کن مواد کی فیلڈز تک رسائی حاصل کی گئی ہے اور باقی تمام فیلڈز کو مرتب شدہ JSON فائلوں سے ہٹا دیتا ہے۔
326
438
 
327
439
  ```typescript fileName="intlayer.config.ts"
328
440
  import type { IntlayerConfig } from "intlayer";
@@ -336,27 +448,43 @@ const config: IntlayerConfig = {
336
448
  export default config;
337
449
  ```
338
450
 
339
- > نوٹ: اگر `optimize` غیر فعال ہو تو پرجنگ کو نظر انداز کر دیا جاتا ہے۔
451
+ **مثال:** پانچ فیلڈز پر مشتمل ایک ڈکشنری جس میں سے صرف دو استعمال ہوئی ہوں:
452
+
453
+ ```
454
+ // پرج کرنے سے پہلے
455
+ { "title": "…", "subtitle": "…", "cta": "…", "footer": "…", "badge": "…" }
456
+
457
+ // پرج کرنے کے بعد (سورس کوڈ میں صرف title + subtitle ایکسیس ہوئے)
458
+ { "title": "…", "subtitle": "…" }
459
+ ```
460
+
461
+ > جب `optimize` کی ویلیو `false` ہو یا جب `editor.enabled` کی ویلیو `true` ہو تو پرجنگ (Purging) چھوڑ (skipped) دی جاتی ہے۔
462
+
463
+ > پرجنگ کو حفاظتی تدابیر (conservatively) کے طور پر ان حالات میں بھی چھوڑ دیا جاتا ہے جب کوئی سورس فائل پارس (parse) نہیں ہو پاتی، یا جب `useIntlayer` کا نتیجہ کسی ویری ایبل کو تفویض (assign) کر دیا جائے اور پھر ان طریقوں سے آگے بڑھایا جائے جن کا اسٹیٹک اینالائزر کھوج نہیں لگا سکتا (جیسے اسپریڈ کو کسی آبجیکٹ میں ڈالنا، ڈسٹرکچر کیے بغیر پروپ کے طور پر بھیجنا)۔ ان صورتوں میں، مکمل ڈکشنری محفوظ رکھی جاتی ہے۔
464
+
465
+ ### امپورٹ موڈ (Import Mode)
340
466
 
341
- ### امپورٹ موڈ
467
+ بڑی ایپلیکیشنز، جن میں متعدد صفحات اور مقامات (locales) شامل ہوں، ان کا JSON بنڈل کے سائز کا ایک اہم حصہ ہو سکتا ہے۔ Intlayer آپ کو یہ اختیار دیتا ہے کہ آپ `importMode` کا استعمال کرتے ہوئے ڈکشنری کے لوڈ ہونے کے طریقہ کار کو کنٹرول کریں۔
342
468
 
343
- بڑی ایپلیکیشنز کے لیے، جن میں کئی صفحات اور زبانیں شامل ہیں، آپ کی JSON فائلیں آپ کے بنڈل سائز کا ایک اہم حصہ ہو سکتی ہیں۔ Intlayer آپ کو کنٹرول کرنے کی اجازت دیتا ہے کہ ڈکشنریاں کیسے لوڈ کی جائیں۔
469
+ ### عالمی (Global) تعریف
344
470
 
345
- امپورٹ موڈ کو آپ کی `intlayer.config.ts` فائل میں عالمی سطح پر ڈیفالٹ کے طور پر بیان کیا جا سکتا ہے۔
471
+ امپورٹ موڈ کو آپ کی `intlayer.config.ts` فائل میں عالمی سطح پر ڈیفائن کیا جا سکتا ہے۔
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}}` فائل کے ذریعے امپورٹ موڈ کو اوور رائڈ (override) کر سکتے ہیں۔
360
488
 
361
489
  ```ts
362
490
  import { type Dictionary, t } from "intlayer";
@@ -372,83 +500,103 @@ const appContent: Dictionary = {
372
500
  export default appContent;
373
501
  ```
374
502
 
375
- | پراپرٹی | ٹائپ | ڈیفالٹ | تفصیل |
376
- | :--------------- | :--------------------------------- | :--------- | :------------------------------------------------------------------------------------------------------------ |
377
- | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **غیر مروجہ**: اس کی جگہ `dictionary.importMode` استعمال کریں۔ یہ طے کرتا ہے کہ ڈکشنریاں کس طرح لوڈ ہوتی ہیں۔ |
503
+ | پراپرٹی | قسم (Type) | ڈیفالٹ | تفصیل (Description) |
504
+ | :--------------- | :--------------------------------- | :--------- | :--------------------------------------------------------------------------------------------------------------------------------------------- |
505
+ | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **منسوخ (Deprecated)**: اس کی جگہ `dictionary.importMode` استعمال کریں۔ اس بات کا تعین کرتا ہے کہ ڈکشنریاں کیسے لوڈ ہوں گی (نیچے ملاحظہ کریں)۔ |
378
506
 
379
- `importMode` ترتیب یہ بتاتی ہے کہ ڈکشنری کا مواد آپ کے کمپوننٹ میں کس طرح داخل (inject) کیا جاتا ہے۔
380
- آپ اسے `intlayer.config.ts` فائل میں `dictionary` آبجیکٹ کے تحت عالمی سطح پر بیان کر سکتے ہیں، یا آپ اسے اس کی `.content.ts` فائل میں کسی خاص ڈکشنری کے لیے تبدیل کر سکتے ہیں۔
507
+ `importMode` کی سیٹنگ یہ طے کرتی ہے کہ ڈکشنری کا مواد آپ کے جزو (component) میں کیسے شامل ہوگا۔ آپ اسے عالمی سطح پر `intlayer.config.ts` میں `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) کے دوران کسی اضافی نیٹ ورک ریکویسٹ (network request) کی ضرورت نہیں پڑتی۔
514
+ - **نقصانات:** اس بنڈل میں متعلقہ جزو کے لیے دستیاب **تمام** زبانوں کا ترجمہ شامل ہوتا ہے۔
515
+ - **بہترین استعمال:** سنگل پیج ایپلیکیشنز (SPA) کے لیے۔
389
516
 
390
- **تبدیل شدہ کوڈ کی مثال:**
517
+ **ٹرانسفارم ہونے کے بعد کوڈ کی مثال:**
391
518
 
392
519
  ```tsx
393
520
  // آپ کا کوڈ
394
521
  const content = useIntlayer("my-key");
395
522
 
396
- // بہتر کوڈ (جامد)
523
+ // ٹرانسفارم ہونے کے بعد آپٹیمائز شدہ کوڈ کی مثال (اسٹیٹک)
524
+ // یہ صرف وضاحت کے لیے ہے، اصل کوڈ آپٹیمائزیشن کے مقاصد کی وجہ سے مختلف ہو سکتا ہے
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
+ ur: "میرا عنوان",
404
532
  },
405
533
  },
406
534
  });
407
535
  ```
408
536
 
409
- ### 2. متحرک موڈ (Dynamic Mode)
537
+ ### 2. ڈائنامک موڈ (Dynamic Mode)
410
538
 
411
- متحرک موڈ میں، Intlayer `useIntlayer` کو `useDictionaryAsync` سے بدل دیتا ہے۔ یہ موجودہ زبان کے لیے خاص طور پر JSON کو لیزی لوڈ کرنے کے لیے `import()` کا استعمال کرتا ہے۔
539
+ ڈائنامک موڈ میں، Intlayer `useIntlayer` کی جگہ پر `useDictionaryAsync` رکھ دیتا ہے۔ یہ خصوصاً متعلقہ زبان (locale) کے JSON کو لیزی-لوڈ کرنے کے لیے `import()` (جو سسپنس جیسی تکنیک ہے) کا استعمال کرتا ہے۔
412
540
 
413
- - **فوائد:** **زبان کی سطح پر ٹری شیکنگ (Locale-level tree shaking)۔** انگریزی ورژن دیکھنے والا صارف _صرف_ انگریزی ڈکشنری ڈاؤن لوڈ کرے گا۔ فرانسیسی ڈکشنری کبھی لوڈ نہیں ہوگی۔
414
- - **نقصانات:** ہائیڈریشن کے دوران فی کمپوننٹ ایک نیٹ ورک درخواست (ایسیٹ فیچ) شروع کرتا ہے۔
415
- - **ان کے لیے بہترین:** بڑے ٹیکسٹ بلاکس، مضامین، یا بہت سی زبانوں کو سپورٹ کرنے والی ایپلیکیشنز جہاں بنڈل سائز بہت اہم ہے۔
541
+ - **فوائد:** **لوکیل-لیول ٹری شیکنگ (Locale-level tree shaking)۔** جو صارف انگریزی ورژن دیکھ رہا ہے، وہ _صرف_ انگریزی ڈکشنری ہی ڈاؤن لوڈ کرے گا۔ اردو ڈکشنری لوڈ نہیں کی جائے گی۔
542
+ - **نقصانات:** ہائیڈریشن کے دوران ہر جزو (component) کے لیے ایک نیٹ ورک ریکویسٹ (نیٹ ورک فیچ) بھیجی جاتی ہے۔
543
+ - **بہترین استعمال:** متن سے بھرپور حصوں، مضامین، یا ایسی بڑی ایپلیکیشنز کے لیے جہاں زبانوں کی تعداد بہت زیادہ ہو اور بنڈل کا سائز بہت اہمیت رکھتا ہو۔
416
544
 
417
- **تبدیل شدہ کوڈ کی مثال:**
545
+ **ٹرانسفارم ہونے کے بعد کوڈ کی مثال:**
418
546
 
419
547
  ```tsx
420
548
  // آپ کا کوڈ
421
549
  const content = useIntlayer("my-key");
422
550
 
423
- // بہتر کوڈ (متحرک)
551
+ // ٹرانسفارم ہونے کے بعد آپٹیمائز شدہ کوڈ کی مثال (ڈائنامک)
552
+ // یہ صرف وضاحت کے لیے ہے، اصل کوڈ آپٹیمائزیشن کے مقاصد کی وجہ سے مختلف ہو سکتا ہے
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
+ ur: () =>
559
+ import(".intlayer/dynamic_dictionary/my-key/ur.json").then(
431
560
  (mod) => mod.default
432
561
  ),
433
562
  });
434
563
  ```
435
564
 
436
- > جب `importMode: 'dynamic'` استعمال کر رہے ہوں، اگر آپ کے پاس ایک ہی صفحے پر 100 کمپوننٹس `useIntlayer` استعمال کر رہے ہیں، تو براؤزر 100 الگ الگ ڈاؤن لوڈز کی کوشش کرے گا۔ درخواستوں کے اس "واٹر فال" (waterfall) سے بچنے کے لیے، مواد کو ہر چھوٹے کمپوننٹ کے بجائے کم `.content` فائلوں (مثلاً ہر صفحے کے حصے کے لیے ایک ڈکشنری) میں گروپ کریں۔
565
+ > `importMode: 'dynamic'` کے استعمال کے دوران، اگر ایک صفحے پر آپ کے پاس 100 ایسے اجزاء ہیں جو `useIntlayer` کو کال کر رہے ہیں، تو براؤزر 100 الگ الگ ریکویسٹ بھیجنے کی کوشش کرے گا۔ اس ریکویسٹ کی "آبشار (waterfall)" سے بچنے کے لیے، بہتر ہے کہ مواد کو چھوٹے چھوٹے ایٹم اجزاء کی بجائے چند بڑے حصوں (جیسے کہ ایک سیکشن کے لیے ایک ڈکشنری) میں وضع کریں۔ آپ مختلف `.content` فائلوں کے لیے ایک جیسی کی (key) بھی استعمال کر سکتے ہیں۔ Intlayer انہیں ایک واحد ڈکشنری میں ضم کر دے گا۔
437
566
 
438
567
  ### 3. فیچ موڈ (Fetch Mode)
439
568
 
440
- متحرک موڈ کی طرح برتاؤ کرتا ہے لیکن پہلے Intlayer Live Sync API سے ڈکشنریاں حاصل کرنے کی کوشش کرتا ہے۔ اگر API کال ناکام ہو جاتی ہے یا مواد لائیو اپ ڈیٹس کے لیے نشان زد نہیں ہے، تو یہ متحرک امپورٹ پر واپس آ جاتا ہے۔
569
+ یہ موڈ بالکل ڈائنامک موڈ کی طرح برتاؤ کرتا ہے لیکن پہلے Intlayer Live Sync API سے ڈکشنری کو لانے (fetch کرنے) کی کوشش کرتا ہے۔ اگر API کال ناکام ہو جائے یا مواد لائیو اپڈیٹ کے لیے نشان زد (marked) نہ ہو، تو یہ واپس ڈائنامک امپورٹ کی طرف چلا جاتا ہے (fallback)۔
570
+
571
+ **ٹرانسفارم ہونے کے بعد کوڈ کی مثال:**
572
+
573
+ ```tsx
574
+ // آپ کا کوڈ
575
+ const content = useIntlayer("my-key");
576
+
577
+ // آپٹیمائز شدہ کوڈ کی مثال (فیچ)
578
+ const content = useDictionaryAsync({
579
+ en: () =>
580
+ fetch("https://intlayer.my-domain.com/dictionary/my-key/en").then((res) =>
581
+ res.json()
582
+ ),
583
+ ur: () =>
584
+ fetch("https://intlayer.my-domain.com/dictionary/my-key/ur").then((res) =>
585
+ res.json()
586
+ ),
587
+ });
588
+ ```
441
589
 
442
- > مزید تفصیلات کے لیے CMS ڈاک دیکھیں: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/intlayer_CMS.md)
590
+ > مزید تفصیلات کے لیے CMS کی دستاویزات دیکھیں: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/intlayer_CMS.md)
443
591
 
444
- > فیچ موڈ میں، پرجنگ اور منی فیکیشن استعمال نہیں کی جا سکتی۔
592
+ > فیچ موڈ میں، پرج (purge) اور منی فائی (minify) کو استعمال نہیں کیا جا سکتا کیونکہ JSON کو ریموٹ API کی مدد سے اصل ناموں (original field names) کے ذریعے پیش کیا جاتا ہے۔
445
593
 
446
- ## خلاصہ: جامد بمقابلہ متحرک
594
+ ## خلاصہ: اسٹیٹک بمقابلہ ڈائنامک
447
595
 
448
- | خصوصیت | جامد موڈ | متحرک موڈ |
449
- | :-------------------- | :------------------------------------ | :--------------------------------------- |
450
- | **JS بنڈل سائز** | بڑا (کمپوننٹ کی تمام زبانیں شامل ہیں) | سب سے چھوٹا (صرف کوڈ، کوئی مواد نہیں) |
451
- | **ابتدائی لوڈ** | فوری (مواد بنڈل میں ہے) | ہلکی تاخیر (JSON حاصل کرتا ہے) |
452
- | **نیٹ ورک درخواستیں** | 0 اضافی درخواستیں | فی ڈکشنری 1 درخواست |
453
- | **ٹری شیکنگ** | کمپوننٹ کی سطح | کمپوننٹ کی سطح + زبان کی سطح |
454
- | **بہترین استعمال** | UI کمپوننٹس، چھوٹی ایپس | بہت سارے ٹیکسٹ والے صفحات، بہت سی زبانیں |
596
+ | خصوصیت | اسٹیٹک موڈ (Static Mode) | ڈائنامک موڈ (Dynamic Mode) |
597
+ | :-------------------------- | :------------------------------------------ | :--------------------------------------- |
598
+ | **JS بنڈل کا سائز** | زیادہ بڑا (تمام زبانوں کے مواد پر مشتمل) | سب سے چھوٹا (صرف کوڈ، کوئی مواد نہیں) |
599
+ | **شروعاتی لوڈنگ** | فوری (مواد پہلے سے ہی بنڈل کے اندر ہوتا ہے) | تھوڑی تاخیر (JSON کو فیچ کیا جاتا ہے) |
600
+ | **نیٹ ورک ریکویسٹس** | 0 اضافی ریکویسٹ | 1 ریکویسٹ فی ڈکشنری کی (key) |
601
+ | **ٹری شیکنگ** | صرف کمپوننٹ کی حد تک | کمپوننٹ اور لوکیل دونوں کے لیے |
602
+ | **بہترین استعمال کا میدان** | UI کمپوننٹس، اور چھوٹی ایپس | ٹیکسٹ سے بھرپور صفحات، کثیر اللسانی ایپس |