@intlayer/docs 8.6.10 → 8.7.0-canary.1
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/blog/ar/i18n_using_next-i18next.md +1 -1
- package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/de/i18n_using_next-i18next.md +1 -1
- package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/en/i18n_using_next-i18next.md +1 -1
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/en-GB/i18n_using_next-i18next.md +1 -1
- package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/es/i18n_using_next-i18next.md +1 -1
- package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/fr/i18n_using_next-i18next.md +1 -1
- package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/hi/i18n_using_next-i18next.md +1 -1
- package/blog/id/i18n_using_next-i18next.md +1 -1
- package/blog/id/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/it/i18n_using_next-i18next.md +1 -1
- package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ja/i18n_using_next-i18next.md +1 -1
- package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ko/i18n_using_next-i18next.md +1 -1
- package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/pl/i18n_using_next-i18next.md +1 -1
- package/blog/pl/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/pt/i18n_using_next-i18next.md +1 -1
- package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/ru/i18n_using_next-i18next.md +1 -1
- package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/blog/tr/i18n_using_next-i18next.md +1 -1
- package/blog/uk/i18n_using_next-i18next.md +1 -1
- package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/vi/i18n_using_next-i18next.md +1 -1
- package/blog/vi/next-i18next_vs_next-intl_vs_intlayer.md +2 -2
- package/blog/zh/i18n_using_next-i18next.md +1 -1
- package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +1 -1
- package/docs/ar/bundle_optimization.md +454 -0
- package/docs/ar/intlayer_with_next-i18next.md +1 -1
- package/docs/ar/intlayer_with_next-intl.md +1 -1
- package/docs/ar/intlayer_with_tanstack+solid.md +24 -5
- package/docs/ar/intlayer_with_tanstack.md +45 -68
- package/docs/bn/bundle_optimization.md +454 -0
- package/docs/cs/bundle_optimization.md +454 -0
- package/docs/de/bundle_optimization.md +454 -0
- package/docs/de/intlayer_with_next-i18next.md +1 -1
- package/docs/de/intlayer_with_next-intl.md +1 -1
- package/docs/de/intlayer_with_tanstack+solid.md +24 -5
- package/docs/de/intlayer_with_tanstack.md +45 -68
- package/docs/en/bundle_optimization.md +36 -8
- package/docs/en/intlayer_with_next-i18next.md +1 -1
- package/docs/en/intlayer_with_next-intl.md +1 -1
- package/docs/en/intlayer_with_tanstack+solid.md +24 -5
- package/docs/en/intlayer_with_tanstack.md +45 -68
- package/docs/en-GB/bundle_optimization.md +454 -0
- package/docs/en-GB/intlayer_with_next-i18next.md +1 -1
- package/docs/en-GB/intlayer_with_next-intl.md +1 -1
- package/docs/en-GB/intlayer_with_tanstack+solid.md +24 -5
- package/docs/en-GB/intlayer_with_tanstack.md +47 -70
- package/docs/es/bundle_optimization.md +454 -0
- package/docs/es/intlayer_with_next-i18next.md +1 -1
- package/docs/es/intlayer_with_next-intl.md +1 -1
- package/docs/es/intlayer_with_tanstack+solid.md +24 -5
- package/docs/es/intlayer_with_tanstack.md +45 -68
- package/docs/fr/bundle_optimization.md +454 -0
- package/docs/fr/intlayer_with_next-i18next.md +1 -1
- package/docs/fr/intlayer_with_next-intl.md +1 -1
- package/docs/fr/intlayer_with_tanstack+solid.md +24 -5
- package/docs/fr/intlayer_with_tanstack.md +45 -68
- package/docs/hi/bundle_optimization.md +454 -0
- package/docs/hi/intlayer_with_next-i18next.md +1 -1
- package/docs/hi/intlayer_with_next-intl.md +1 -1
- package/docs/hi/intlayer_with_tanstack+solid.md +24 -5
- package/docs/hi/intlayer_with_tanstack.md +45 -68
- package/docs/id/bundle_optimization.md +454 -0
- package/docs/id/intlayer_with_next-i18next.md +1 -1
- package/docs/id/intlayer_with_next-intl.md +1 -1
- package/docs/id/intlayer_with_tanstack+solid.md +24 -5
- package/docs/id/intlayer_with_tanstack.md +45 -68
- package/docs/it/bundle_optimization.md +454 -0
- package/docs/it/intlayer_with_next-i18next.md +1 -1
- package/docs/it/intlayer_with_next-intl.md +1 -1
- package/docs/it/intlayer_with_tanstack+solid.md +24 -5
- package/docs/it/intlayer_with_tanstack.md +45 -68
- package/docs/ja/bundle_optimization.md +454 -0
- package/docs/ja/intlayer_with_next-i18next.md +1 -1
- package/docs/ja/intlayer_with_next-intl.md +1 -1
- package/docs/ja/intlayer_with_tanstack+solid.md +24 -5
- package/docs/ja/intlayer_with_tanstack.md +45 -36
- package/docs/ko/bundle_optimization.md +454 -0
- package/docs/ko/intlayer_with_next-i18next.md +1 -1
- package/docs/ko/intlayer_with_next-intl.md +1 -1
- package/docs/ko/intlayer_with_tanstack+solid.md +24 -5
- package/docs/ko/intlayer_with_tanstack.md +45 -68
- package/docs/nl/bundle_optimization.md +454 -0
- package/docs/pl/bundle_optimization.md +454 -0
- package/docs/pl/intlayer_with_next-i18next.md +1 -1
- package/docs/pl/intlayer_with_next-intl.md +1 -1
- package/docs/pl/intlayer_with_tanstack+solid.md +24 -5
- package/docs/pl/intlayer_with_tanstack.md +45 -68
- package/docs/pt/bundle_optimization.md +454 -0
- package/docs/pt/intlayer_with_next-i18next.md +1 -1
- package/docs/pt/intlayer_with_next-intl.md +1 -1
- package/docs/pt/intlayer_with_tanstack+solid.md +24 -5
- package/docs/pt/intlayer_with_tanstack.md +45 -68
- package/docs/ru/bundle_optimization.md +454 -0
- package/docs/ru/intlayer_with_next-i18next.md +1 -1
- package/docs/ru/intlayer_with_next-intl.md +1 -1
- package/docs/ru/intlayer_with_tanstack+solid.md +24 -5
- package/docs/ru/intlayer_with_tanstack.md +45 -68
- package/docs/tr/bundle_optimization.md +454 -0
- package/docs/tr/intlayer_with_next-i18next.md +1 -1
- package/docs/tr/intlayer_with_next-intl.md +1 -1
- package/docs/tr/intlayer_with_tanstack+solid.md +24 -5
- package/docs/tr/intlayer_with_tanstack.md +45 -68
- package/docs/uk/bundle_optimization.md +454 -0
- package/docs/uk/intlayer_with_next-i18next.md +1 -1
- package/docs/uk/intlayer_with_next-intl.md +1 -1
- package/docs/uk/intlayer_with_tanstack+solid.md +24 -5
- package/docs/uk/intlayer_with_tanstack.md +45 -68
- package/docs/ur/bundle_optimization.md +454 -0
- package/docs/vi/bundle_optimization.md +454 -0
- package/docs/vi/intlayer_with_next-i18next.md +1 -1
- package/docs/vi/intlayer_with_next-intl.md +1 -1
- package/docs/vi/intlayer_with_tanstack+solid.md +24 -5
- package/docs/vi/intlayer_with_tanstack.md +45 -68
- package/docs/zh/bundle_optimization.md +454 -0
- package/docs/zh/intlayer_with_next-i18next.md +1 -1
- package/docs/zh/intlayer_with_next-intl.md +1 -1
- package/docs/zh/intlayer_with_tanstack+solid.md +24 -5
- package/docs/zh/intlayer_with_tanstack.md +45 -68
- package/package.json +7 -7
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-11-25
|
|
3
|
+
updatedAt: 2026-04-08
|
|
4
|
+
title: i18n بنڈل سائز اور کارکردگی کی بہتری
|
|
5
|
+
description: انٹرنیشنلائزیشن (i18n) مواد کو بہتر بنا کر ایپلیکیشن بنڈل کے سائز کو کم کریں۔ سیکھیں کہ Intlayer کے ساتھ ڈکشنریوں کے لیے ٹری شیکنگ (tree shaking) اور لیزی لوڈنگ (lazy loading) کا فائدہ کیسے اٹھایا جائے۔
|
|
6
|
+
keywords:
|
|
7
|
+
- بنڈل کی بہتری
|
|
8
|
+
- مواد کی آٹومیشن
|
|
9
|
+
- متحرک مواد
|
|
10
|
+
- Intlayer
|
|
11
|
+
- Next.js
|
|
12
|
+
- JavaScript
|
|
13
|
+
- React
|
|
14
|
+
slugs:
|
|
15
|
+
- doc
|
|
16
|
+
- concept
|
|
17
|
+
- bundle-optimization
|
|
18
|
+
history:
|
|
19
|
+
- version: 8.7.0
|
|
20
|
+
date: 2026-04-08
|
|
21
|
+
changes: "بلڈ کنفیگریشن میں `minify` اور `purge` کے اختیارات شامل کیے گئے"
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# i18n بنڈل سائز اور کارکردگی کی بہتری
|
|
25
|
+
|
|
26
|
+
روایتی i18n حلوں کے ساتھ سب سے عام چیلنجوں میں سے ایک جو JSON فائلوں پر انحصار کرتے ہیں وہ مواد کے سائز کا انتظام کرنا ہے۔ اگر ڈویلپرز دستی طور پر مواد کو نیم اسپیسز (namespaces) میں الگ نہیں کرتے ہیں، تو صارف اکثر صرف ایک صفحہ دیکھنے کے لیے ہر صفحے اور ممکنہ طور پر ہر زبان کے ترجمے ڈاؤن لوڈ کر لیتے ہیں۔
|
|
27
|
+
|
|
28
|
+
مثال کے طور پر، 10 زبانوں میں ترجمہ شدہ 10 صفحات والی ایپلیکیشن کے نتیجے میں ایک صارف 100 صفحات کا مواد ڈاؤن لوڈ کر سکتا ہے، چاہے اسے صرف **ایک** (موجودہ زبان میں موجودہ صفحہ) کی ضرورت ہو۔ اس سے بینڈوتھ کا ضیاع ہوتا ہے اور لوڈ ہونے کا وقت سست ہو جاتا ہے۔
|
|
29
|
+
|
|
30
|
+
**Intlayer بلڈ ٹائم آپٹیمائزیشن کے ذریعے اس مسئلے کو حل کرتا ہے۔** یہ آپ کے کوڈ کا تجزیہ کرتا ہے تاکہ پتہ لگایا جا سکے کہ فی کمپوننٹ کون سی ڈکشنریاں درحقیقت استعمال ہو رہی ہیں اور صرف ضروری مواد کو آپ کے بنڈل میں دوبارہ شامل کرتا ہے۔
|
|
31
|
+
|
|
32
|
+
## فہرست مواد
|
|
33
|
+
|
|
34
|
+
<TOC />
|
|
35
|
+
|
|
36
|
+
## اپنے بنڈل کو اسکین کریں
|
|
37
|
+
|
|
38
|
+
اپنے بنڈل کا تجزیہ کرنا "بھاری" JSON فائلوں اور کوڈ اسپلٹنگ (code-splitting) کے مواقع کی نشاندہی کرنے کا پہلا قدم ہے۔ یہ ٹولز آپ کی ایپلیکیشن کے مرتب شدہ کوڈ کا ایک بصری ٹری میپ (treemap) تیار کرتے ہیں، جس سے آپ دیکھ سکتے ہیں کہ کون سی لائبریریاں سب سے زیادہ جگہ لے رہی ہیں۔
|
|
39
|
+
|
|
40
|
+
<Tabs>
|
|
41
|
+
<Tab value="vite">
|
|
42
|
+
|
|
43
|
+
### Vite / Rollup
|
|
44
|
+
|
|
45
|
+
Vite ہڈ کے نیچے Rollup کا استعمال کرتا ہے۔ `rollup-plugin-visualizer` پلگ ان ایک انٹرایکٹو HTML فائل تیار کرتا ہے جو آپ کے گراف میں ہر ماڈیول کا سائز دکھاتی ہے۔
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm install -D rollup-plugin-visualizer
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```typescript fileName="vite.config.ts"
|
|
52
|
+
import { defineConfig } from "vite";
|
|
53
|
+
import { visualizer } from "rollup-plugin-visualizer";
|
|
54
|
+
|
|
55
|
+
export default defineConfig({
|
|
56
|
+
plugins: [
|
|
57
|
+
visualizer({
|
|
58
|
+
open: true, // رپورٹ کو آپ کے براؤزر میں خود بخود کھولیں
|
|
59
|
+
filename: "stats.html",
|
|
60
|
+
gzipSize: true,
|
|
61
|
+
brotliSize: true,
|
|
62
|
+
}),
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
</Tab>
|
|
68
|
+
<Tab value="nextjs (turbopack)">
|
|
69
|
+
|
|
70
|
+
### Next.js (Turbopack)
|
|
71
|
+
|
|
72
|
+
ان پروجیکٹس کے لیے جو App Router اور Turbopack استعمال کر رہے ہیں، Next.js ایک بلٹ ان تجرباتی تجزیہ کار (experimental analyzer) فراہم کرتا ہے جس کے لیے کسی اضافی انحصار کی ضرورت نہیں ہوتی ہے۔
|
|
73
|
+
|
|
74
|
+
```bash packageManager='npm'
|
|
75
|
+
npx next experimental-analyze
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```bash packageManager='yarn'
|
|
79
|
+
yarn next experimental-analyze
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
```bash packageManager='pnpm'
|
|
83
|
+
pnpm next experimental-analyze
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```bash packageManager='bun'
|
|
87
|
+
bun next experimental-analyze
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
</Tab>
|
|
91
|
+
<Tab value="nextjs (Webpack)">
|
|
92
|
+
|
|
93
|
+
### Next.js (Webpack)
|
|
94
|
+
|
|
95
|
+
اگر آپ Next.js میں ڈیفالٹ Webpack بنڈلر استعمال کر رہے ہیں، تو آفیشل بنڈل اینالائزر استعمال کریں۔ اپنی بلڈ کے دوران ایک انوائرمنٹ ویری ایبل سیٹ کر کے اسے فعال کریں۔
|
|
96
|
+
|
|
97
|
+
```bash packageManager='npm'
|
|
98
|
+
npm install -D @next/bundle-analyzer
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
```bash packageManager='yarn'
|
|
102
|
+
yarn add -D @next/bundle-analyzer
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```bash packageManager='pnpm'
|
|
106
|
+
pnpm add -D @next/bundle-analyzer
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
```bash packageManager='bun'
|
|
110
|
+
bun add -d @next/bundle-analyzer
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
```javascript fileName="next.config.js"
|
|
114
|
+
const withBundleAnalyzer = require("@next/bundle-analyzer")({
|
|
115
|
+
enabled: process.env.ANALYZE === "true",
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
module.exports = withBundleAnalyzer({
|
|
119
|
+
// آپ کی Next.js کنفیگریشن
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**استعمال:**
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
ANALYZE=true npm run build
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
</Tab>
|
|
130
|
+
<Tab value="Webpack (CRA / Angular / etc)">
|
|
131
|
+
|
|
132
|
+
### معیاری Webpack
|
|
133
|
+
|
|
134
|
+
Create React App (ejected)، Angular، یا کسٹم Webpack سیٹ اپ کے لیے، انڈسٹری اسٹینڈرڈ `webpack-bundle-analyzer` استعمال کریں۔
|
|
135
|
+
|
|
136
|
+
```bash packageManager='npm'
|
|
137
|
+
npm install -D webpack-bundle-analyzer
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
```bash packageManager='yarn'
|
|
141
|
+
yarn add -D webpack-bundle-analyzer
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
```bash packageManager='pnpm'
|
|
145
|
+
pnpm add -D webpack-bundle-analyzer
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```bash packageManager='bun'
|
|
149
|
+
bun add -d webpack-bundle-analyzer
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
```typescript fileName="webpack.config.ts
|
|
153
|
+
import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer";
|
|
154
|
+
|
|
155
|
+
export default {
|
|
156
|
+
plugins: [
|
|
157
|
+
new BundleAnalyzerPlugin({
|
|
158
|
+
analyzerMode: "static",
|
|
159
|
+
reportFilename: "bundle-analyzer.html",
|
|
160
|
+
openAnalyzer: false,
|
|
161
|
+
}),
|
|
162
|
+
],
|
|
163
|
+
};
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
</Tab>
|
|
167
|
+
</Tabs>
|
|
168
|
+
|
|
169
|
+
## یہ کیسے کام کرتا ہے
|
|
170
|
+
|
|
171
|
+
Intlayer **فی کمپوننٹ نقطہ نظر** استعمال کرتا ہے۔ عالمی JSON فائلوں کے برعکس، آپ کا مواد آپ کے کمپوننٹس کے ساتھ یا ان کے اندر بیان کیا جاتا ہے۔ بلڈ کے عمل کے دوران، Intlayer:
|
|
172
|
+
|
|
173
|
+
1. `useIntlayer` کالز تلاش کرنے کے لیے آپ کے کوڈ کا **تجزیہ** کرتا ہے۔
|
|
174
|
+
2. متعلقہ ڈکشنری مواد **تیار** کرتا ہے۔
|
|
175
|
+
3. آپ کی کنفیگریشن کی بنیاد پر `useIntlayer` کال کو بہتر کوڈ سے **تبدیل** کرتا ہے۔
|
|
176
|
+
|
|
177
|
+
یہ یقینی بناتا ہے کہ:
|
|
178
|
+
|
|
179
|
+
- اگر کوئی کمپوننٹ امپورٹ نہیں کیا گیا ہے، تو اس کا مواد بنڈل میں شامل نہیں کیا جاتا (ڈیڈ کوڈ کا خاتمہ)۔
|
|
180
|
+
- اگر کوئی کمپوننٹ لیزی لوڈڈ ہے تو اس کا مواد بھی لیزی لوڈڈ ہوتا ہے۔
|
|
181
|
+
|
|
182
|
+
## پلیٹ فارم کے مطابق سیٹ اپ
|
|
183
|
+
|
|
184
|
+
<Tabs>
|
|
185
|
+
<Tab value="nextjs">
|
|
186
|
+
|
|
187
|
+
### Next.js
|
|
188
|
+
|
|
189
|
+
Next.js کو تبدیلی کو سنبھالنے کے لیے `@intlayer/swc` پلگ ان کی ضرورت ہوتی ہے، کیونکہ Next.js بلڈز کے لیے SWC استعمال کرتا ہے۔
|
|
190
|
+
|
|
191
|
+
> یہ پلگ ان ڈیفالٹ طور پر انسٹال نہیں ہوتا ہے کیونکہ SWC پلگ ان ابھی بھی Next.js کے لیے تجرباتی ہیں۔ یہ مستقبل میں تبدیل ہو سکتا ہے۔
|
|
192
|
+
|
|
193
|
+
```bash packageManager="npm"
|
|
194
|
+
npm install -D @intlayer/swc
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
```bash packageManager="yarn"
|
|
198
|
+
yarn add -D @intlayer/swc
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
```bash packageManager="pnpm"
|
|
202
|
+
pnpm add -D @intlayer/swc
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
```bash packageManager="bun"
|
|
206
|
+
bun add -d @intlayer/swc
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
ایک بار انسٹال ہونے کے بعد، Intlayer خود بخود پلگ ان کا پتہ لگائے گا اور اسے استعمال کرے گا۔
|
|
210
|
+
|
|
211
|
+
</Tab>
|
|
212
|
+
<Tab value="vite">
|
|
213
|
+
|
|
214
|
+
### Vite
|
|
215
|
+
|
|
216
|
+
Vite `@intlayer/babel` پلگ ان کا استعمال کرتا ہے جو `vite-intlayer` کے انحصار (dependency) کے طور پر شامل ہے۔ آپٹیمائزیشن ڈیفالٹ طور پر فعال ہے۔ مزید کچھ کرنے کی ضرورت نہیں ہے۔
|
|
217
|
+
|
|
218
|
+
</Tab>
|
|
219
|
+
<Tab value="webpack">
|
|
220
|
+
|
|
221
|
+
### Webpack
|
|
222
|
+
|
|
223
|
+
Webpack پر Intlayer کے ساتھ بنڈل آپٹیمائزیشن کو فعال کرنے کے لیے، آپ کو مناسب Babel (`@intlayer/babel`) یا SWC (`@intlayer/swc`) پلگ ان انسٹال اور کنفیگر کرنے کی ضرورت ہے۔
|
|
224
|
+
|
|
225
|
+
```bash packageManager="npm"
|
|
226
|
+
npm install -D @intlayer/babel
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
```bash packageManager="yarn"
|
|
230
|
+
yarn add -D @intlayer/babel
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
```bash packageManager="pnpm"
|
|
234
|
+
pnpm add -D @intlayer/babel
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
```bash packageManager="bun"
|
|
238
|
+
bun add -d @intlayer/babel
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
```typescript fileName="babel.config.js"
|
|
242
|
+
const {
|
|
243
|
+
getOptimizePluginOptions,
|
|
244
|
+
intlayerOptimizeBabelPlugin,
|
|
245
|
+
} = require("@intlayer/babel");
|
|
246
|
+
|
|
247
|
+
module.exports = {
|
|
248
|
+
plugins: [[intlayerOptimizeBabelPlugin, getOptimizePluginOptions()]],
|
|
249
|
+
};
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
</Tab>
|
|
253
|
+
</Tabs>
|
|
254
|
+
|
|
255
|
+
## کنفیگریشن
|
|
256
|
+
|
|
257
|
+
آپ اپنے `intlayer.config.ts` میں `build` پراپرٹی کے ذریعے کنٹرول کر سکتے ہیں کہ Intlayer آپ کے بنڈل کو کس طرح بہتر بناتا ہے۔
|
|
258
|
+
|
|
259
|
+
```typescript fileName="intlayer.config.ts"
|
|
260
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
261
|
+
|
|
262
|
+
const config: IntlayerConfig = {
|
|
263
|
+
internationalization: {
|
|
264
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
265
|
+
defaultLocale: Locales.ENGLISH,
|
|
266
|
+
},
|
|
267
|
+
dictionary: {
|
|
268
|
+
importMode: "dynamic",
|
|
269
|
+
},
|
|
270
|
+
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;
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
export default config;
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
> زیادہ تر معاملات میں `optimize` کے لیے ڈیفالٹ آپشن رکھنے کی سفارش کی جاتی ہے۔
|
|
292
|
+
|
|
293
|
+
> مزید تفصیلات کے لیے کنفیگریشن ڈاک دیکھیں: [کنفیگریشن](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/configuration.md)
|
|
294
|
+
|
|
295
|
+
### بلڈ کے اختیارات
|
|
296
|
+
|
|
297
|
+
بلڈ کنفیگریشن آبجیکٹ کے تحت درج ذیل اختیارات دستیاب ہیں:
|
|
298
|
+
|
|
299
|
+
| پراپرٹی | ٹائپ | ڈیفالٹ | تفصیل |
|
|
300
|
+
| :------------- | :-------- | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
301
|
+
| **`optimize`** | `boolean` | `undefined` | کنٹرول کرتا ہے کہ آیا بلڈ آپٹیمائزیشن فعال ہے یا نہیں۔ اگر `true` ہے، تو Intlayer ڈکشنری کالز کو بہتر انجیکشنز سے بدل دیتا ہے۔ اگر `false` ہے، تو آپٹیمائزیشن غیر فعال ہے۔ پروڈکشن میں `true` سیٹ کرنا بہتر ہے۔ |
|
|
302
|
+
| **`minify`** | `boolean` | `false` | بنڈل سائز کم کرنے کے لیے ڈکشنریوں کو منی فائی کرنا ہے یا نہیں۔ |
|
|
303
|
+
| **`purge`** | `boolean` | `false` | ڈکشنریوں میں غیر استعمال شدہ کلیدوں کو صاف کرنا ہے یا نہیں۔ |
|
|
304
|
+
|
|
305
|
+
### منی فیکیشن (Minification)
|
|
306
|
+
|
|
307
|
+
ڈکشنریوں کو منی فائی کرنے سے غیر ضروری خالی جگہ، تبصرے ختم ہو جاتے ہیں اور JSON مواد کا سائز کم ہو جاتا ہے۔ یہ خاص طور پر بڑی ڈکشنریوں کے لیے مفید ہے۔
|
|
308
|
+
|
|
309
|
+
```typescript fileName="intlayer.config.ts"
|
|
310
|
+
import type { IntlayerConfig } from "intlayer";
|
|
311
|
+
|
|
312
|
+
const config: IntlayerConfig = {
|
|
313
|
+
build: {
|
|
314
|
+
minify: true,
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
export default config;
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
> نوٹ: اگر `optimize` غیر فعال ہو یا اگر ویژول ایڈیٹر (Visual Editor) فعال ہو تو منی فیکیشن کو نظر انداز کر دیا جاتا ہے (کیونکہ ایڈیٹر کو ترمیم کی اجازت دینے کے لیے مکمل مواد کی ضرورت ہوتی ہے)۔
|
|
322
|
+
|
|
323
|
+
### پرجنگ (Purging)
|
|
324
|
+
|
|
325
|
+
پرجنگ یہ یقینی بناتی ہے کہ آپ کے کوڈ میں درحقیقت استعمال ہونے والی کلیدیں ہی فائنل ڈکشنری بنڈل میں شامل کی جائیں۔ اگر آپ کے پاس بہت سی کلیدوں والی بڑی ڈکشنریاں ہیں جو آپ کی ایپلیکیشن کے ہر حصے میں استعمال نہیں ہوتی ہیں، تو یہ آپ کے بنڈل کے سائز کو نمایاں طور بر کم کر سکتا ہے۔
|
|
326
|
+
|
|
327
|
+
```typescript fileName="intlayer.config.ts"
|
|
328
|
+
import type { IntlayerConfig } from "intlayer";
|
|
329
|
+
|
|
330
|
+
const config: IntlayerConfig = {
|
|
331
|
+
build: {
|
|
332
|
+
purge: true,
|
|
333
|
+
},
|
|
334
|
+
};
|
|
335
|
+
|
|
336
|
+
export default config;
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
> نوٹ: اگر `optimize` غیر فعال ہو تو پرجنگ کو نظر انداز کر دیا جاتا ہے۔
|
|
340
|
+
|
|
341
|
+
### امپورٹ موڈ
|
|
342
|
+
|
|
343
|
+
بڑی ایپلیکیشنز کے لیے، جن میں کئی صفحات اور زبانیں شامل ہیں، آپ کی JSON فائلیں آپ کے بنڈل سائز کا ایک اہم حصہ ہو سکتی ہیں۔ Intlayer آپ کو کنٹرول کرنے کی اجازت دیتا ہے کہ ڈکشنریاں کیسے لوڈ کی جائیں۔
|
|
344
|
+
|
|
345
|
+
امپورٹ موڈ کو آپ کی `intlayer.config.ts` فائل میں عالمی سطح پر ڈیفالٹ کے طور پر بیان کیا جا سکتا ہے۔
|
|
346
|
+
|
|
347
|
+
```typescript fileName="intlayer.config.ts"
|
|
348
|
+
import type { IntlayerConfig } from "intlayer";
|
|
349
|
+
|
|
350
|
+
const config: IntlayerConfig = {
|
|
351
|
+
build: {
|
|
352
|
+
minify: true,
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
export default config;
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
ساتھ ہی آپ کی `.content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5}}` فائلوں میں ہر ڈکشنری کے لیے بھی۔
|
|
360
|
+
|
|
361
|
+
```ts
|
|
362
|
+
import { type Dictionary, t } from "intlayer";
|
|
363
|
+
|
|
364
|
+
const appContent: Dictionary = {
|
|
365
|
+
key: "app",
|
|
366
|
+
importMode: "dynamic", // ڈیفالٹ امپورٹ موڈ کو اوور رائڈ کریں
|
|
367
|
+
content: {
|
|
368
|
+
// ...
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
export default appContent;
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
| پراپرٹی | ٹائپ | ڈیفالٹ | تفصیل |
|
|
376
|
+
| :--------------- | :--------------------------------- | :--------- | :------------------------------------------------------------------------------------------------------------ |
|
|
377
|
+
| **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **غیر مروجہ**: اس کی جگہ `dictionary.importMode` استعمال کریں۔ یہ طے کرتا ہے کہ ڈکشنریاں کس طرح لوڈ ہوتی ہیں۔ |
|
|
378
|
+
|
|
379
|
+
`importMode` ترتیب یہ بتاتی ہے کہ ڈکشنری کا مواد آپ کے کمپوننٹ میں کس طرح داخل (inject) کیا جاتا ہے۔
|
|
380
|
+
آپ اسے `intlayer.config.ts` فائل میں `dictionary` آبجیکٹ کے تحت عالمی سطح پر بیان کر سکتے ہیں، یا آپ اسے اس کی `.content.ts` فائل میں کسی خاص ڈکشنری کے لیے تبدیل کر سکتے ہیں۔
|
|
381
|
+
|
|
382
|
+
### 1. جامد موڈ (`default`)
|
|
383
|
+
|
|
384
|
+
جامد موڈ میں، Intlayer `useIntlayer` کو `useDictionary` سے بدل دیتا ہے اور ڈکشنری کو براہ راست جاوا اسکرپٹ بنڈل میں شامل کر دیتا ہے۔
|
|
385
|
+
|
|
386
|
+
- **فوائد:** فوری رینڈرنگ (سنکرونس)، ہائیڈریشن کے دوران کوئی اضافی نیٹ ورک درخواست نہیں۔
|
|
387
|
+
- **نقصانات:** بنڈل میں اس مخصوص کمپوننٹ کے لیے **تمام** دستیاب زبانوں کے ترجمے شامل ہوتے ہیں۔
|
|
388
|
+
- **ان کے لیے بہترین:** سنگل پیج ایپلیکیشنز (SPA)۔
|
|
389
|
+
|
|
390
|
+
**تبدیل شدہ کوڈ کی مثال:**
|
|
391
|
+
|
|
392
|
+
```tsx
|
|
393
|
+
// آپ کا کوڈ
|
|
394
|
+
const content = useIntlayer("my-key");
|
|
395
|
+
|
|
396
|
+
// بہتر کوڈ (جامد)
|
|
397
|
+
const content = useDictionary({
|
|
398
|
+
key: "my-key",
|
|
399
|
+
content: {
|
|
400
|
+
nodeType: "translation",
|
|
401
|
+
translation: {
|
|
402
|
+
en: "My title",
|
|
403
|
+
fr: "Mon titre",
|
|
404
|
+
},
|
|
405
|
+
},
|
|
406
|
+
});
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### 2. متحرک موڈ (Dynamic Mode)
|
|
410
|
+
|
|
411
|
+
متحرک موڈ میں، Intlayer `useIntlayer` کو `useDictionaryAsync` سے بدل دیتا ہے۔ یہ موجودہ زبان کے لیے خاص طور پر JSON کو لیزی لوڈ کرنے کے لیے `import()` کا استعمال کرتا ہے۔
|
|
412
|
+
|
|
413
|
+
- **فوائد:** **زبان کی سطح پر ٹری شیکنگ (Locale-level tree shaking)۔** انگریزی ورژن دیکھنے والا صارف _صرف_ انگریزی ڈکشنری ڈاؤن لوڈ کرے گا۔ فرانسیسی ڈکشنری کبھی لوڈ نہیں ہوگی۔
|
|
414
|
+
- **نقصانات:** ہائیڈریشن کے دوران فی کمپوننٹ ایک نیٹ ورک درخواست (ایسیٹ فیچ) شروع کرتا ہے۔
|
|
415
|
+
- **ان کے لیے بہترین:** بڑے ٹیکسٹ بلاکس، مضامین، یا بہت سی زبانوں کو سپورٹ کرنے والی ایپلیکیشنز جہاں بنڈل سائز بہت اہم ہے۔
|
|
416
|
+
|
|
417
|
+
**تبدیل شدہ کوڈ کی مثال:**
|
|
418
|
+
|
|
419
|
+
```tsx
|
|
420
|
+
// آپ کا کوڈ
|
|
421
|
+
const content = useIntlayer("my-key");
|
|
422
|
+
|
|
423
|
+
// بہتر کوڈ (متحرک)
|
|
424
|
+
const content = useDictionaryAsync({
|
|
425
|
+
en: () =>
|
|
426
|
+
import(".intlayer/dynamic_dictionary/my-key/en.json").then(
|
|
427
|
+
(mod) => mod.default
|
|
428
|
+
),
|
|
429
|
+
fr: () =>
|
|
430
|
+
import(".intlayer/dynamic_dictionary/my-key/fr.json").then(
|
|
431
|
+
(mod) => mod.default
|
|
432
|
+
),
|
|
433
|
+
});
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
> جب `importMode: 'dynamic'` استعمال کر رہے ہوں، اگر آپ کے پاس ایک ہی صفحے پر 100 کمپوننٹس `useIntlayer` استعمال کر رہے ہیں، تو براؤزر 100 الگ الگ ڈاؤن لوڈز کی کوشش کرے گا۔ درخواستوں کے اس "واٹر فال" (waterfall) سے بچنے کے لیے، مواد کو ہر چھوٹے کمپوننٹ کے بجائے کم `.content` فائلوں (مثلاً ہر صفحے کے حصے کے لیے ایک ڈکشنری) میں گروپ کریں۔
|
|
437
|
+
|
|
438
|
+
### 3. فیچ موڈ (Fetch Mode)
|
|
439
|
+
|
|
440
|
+
متحرک موڈ کی طرح برتاؤ کرتا ہے لیکن پہلے Intlayer Live Sync API سے ڈکشنریاں حاصل کرنے کی کوشش کرتا ہے۔ اگر API کال ناکام ہو جاتی ہے یا مواد لائیو اپ ڈیٹس کے لیے نشان زد نہیں ہے، تو یہ متحرک امپورٹ پر واپس آ جاتا ہے۔
|
|
441
|
+
|
|
442
|
+
> مزید تفصیلات کے لیے CMS ڈاک دیکھیں: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ur/intlayer_CMS.md)
|
|
443
|
+
|
|
444
|
+
> فیچ موڈ میں، پرجنگ اور منی فیکیشن استعمال نہیں کی جا سکتی۔
|
|
445
|
+
|
|
446
|
+
## خلاصہ: جامد بمقابلہ متحرک
|
|
447
|
+
|
|
448
|
+
| خصوصیت | جامد موڈ | متحرک موڈ |
|
|
449
|
+
| :-------------------- | :------------------------------------ | :--------------------------------------- |
|
|
450
|
+
| **JS بنڈل سائز** | بڑا (کمپوننٹ کی تمام زبانیں شامل ہیں) | سب سے چھوٹا (صرف کوڈ، کوئی مواد نہیں) |
|
|
451
|
+
| **ابتدائی لوڈ** | فوری (مواد بنڈل میں ہے) | ہلکی تاخیر (JSON حاصل کرتا ہے) |
|
|
452
|
+
| **نیٹ ورک درخواستیں** | 0 اضافی درخواستیں | فی ڈکشنری 1 درخواست |
|
|
453
|
+
| **ٹری شیکنگ** | کمپوننٹ کی سطح | کمپوننٹ کی سطح + زبان کی سطح |
|
|
454
|
+
| **بہترین استعمال** | UI کمپوننٹس، چھوٹی ایپس | بہت سارے ٹیکسٹ والے صفحات، بہت سی زبانیں |
|