@intlayer/docs 9.3.2 → 9.3.3
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/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/de/nextjs-multilingual-seo-comparison.md +9 -9
- package/blog/en/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/en-GB/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/es/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/fr/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/hi/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/id/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/it/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/ja/nextjs-multilingual-seo-comparison.md +9 -9
- package/blog/ko/nextjs-multilingual-seo-comparison.md +9 -9
- package/blog/pl/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/pt/nextjs-multilingual-seo-comparison.md +9 -9
- package/blog/ru/nextjs-multilingual-seo-comparison.md +9 -9
- package/blog/tr/nextjs-multilingual-seo-comparison.md +9 -9
- package/blog/uk/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/vi/nextjs-multilingual-seo-comparison.md +10 -10
- package/blog/zh/nextjs-multilingual-seo-comparison.md +10 -10
- package/docs/ar/bundle_optimization.md +1 -1
- package/docs/ar/configuration.md +32 -9
- package/docs/ar/dictionary/content_file.md +0 -22
- package/docs/ar/dictionary/function_fetching.md +23 -0
- package/docs/ar/eslint.md +9 -9
- package/docs/bn/configuration.md +34 -9
- package/docs/bn/eslint.md +9 -9
- package/docs/cs/bundle_optimization.md +1 -1
- package/docs/cs/configuration.md +33 -9
- package/docs/cs/eslint.md +9 -9
- package/docs/de/bundle_optimization.md +1 -1
- package/docs/de/configuration.md +34 -9
- package/docs/de/dictionary/content_file.md +0 -22
- package/docs/de/dictionary/function_fetching.md +23 -0
- package/docs/de/eslint.md +9 -9
- package/docs/en/bundle_optimization.md +1 -1
- package/docs/en/configuration.md +34 -9
- package/docs/en/dictionary/content_file.md +0 -22
- package/docs/en/dictionary/function_fetching.md +23 -0
- package/docs/en/eslint.md +9 -9
- package/docs/en/packages/intlayer/getLocalizedPath.md +70 -19
- package/docs/en-GB/configuration.md +33 -9
- package/docs/en-GB/dictionary/content_file.md +0 -22
- package/docs/en-GB/dictionary/function_fetching.md +23 -0
- package/docs/en-GB/eslint.md +9 -9
- package/docs/es/bundle_optimization.md +1 -1
- package/docs/es/configuration.md +35 -9
- package/docs/es/dictionary/content_file.md +0 -22
- package/docs/es/dictionary/function_fetching.md +23 -0
- package/docs/es/eslint.md +9 -9
- package/docs/fr/bundle_optimization.md +1 -1
- package/docs/fr/configuration.md +35 -9
- package/docs/fr/dictionary/content_file.md +0 -22
- package/docs/fr/dictionary/function_fetching.md +23 -0
- package/docs/fr/eslint.md +9 -9
- package/docs/hi/configuration.md +35 -9
- package/docs/hi/dictionary/content_file.md +0 -22
- package/docs/hi/dictionary/function_fetching.md +23 -0
- package/docs/hi/eslint.md +9 -9
- package/docs/id/configuration.md +35 -9
- package/docs/id/dictionary/content_file.md +0 -22
- package/docs/id/dictionary/function_fetching.md +23 -0
- package/docs/id/eslint.md +9 -9
- package/docs/it/bundle_optimization.md +1 -1
- package/docs/it/configuration.md +35 -9
- package/docs/it/dictionary/content_file.md +0 -22
- package/docs/it/dictionary/function_fetching.md +23 -0
- package/docs/it/eslint.md +9 -9
- package/docs/ja/configuration.md +30 -9
- package/docs/ja/dictionary/content_file.md +0 -22
- package/docs/ja/dictionary/function_fetching.md +23 -0
- package/docs/ja/eslint.md +9 -9
- package/docs/ko/configuration.md +31 -9
- package/docs/ko/dictionary/content_file.md +0 -22
- package/docs/ko/dictionary/function_fetching.md +23 -0
- package/docs/ko/eslint.md +9 -9
- package/docs/nl/configuration.md +33 -9
- package/docs/nl/eslint.md +9 -9
- package/docs/pl/bundle_optimization.md +1 -1
- package/docs/pl/configuration.md +34 -9
- package/docs/pl/dictionary/content_file.md +0 -22
- package/docs/pl/dictionary/function_fetching.md +23 -0
- package/docs/pl/eslint.md +9 -9
- package/docs/pt/bundle_optimization.md +1 -1
- package/docs/pt/configuration.md +34 -9
- package/docs/pt/dictionary/content_file.md +0 -22
- package/docs/pt/dictionary/function_fetching.md +23 -0
- package/docs/pt/eslint.md +9 -9
- package/docs/ru/bundle_optimization.md +1 -1
- package/docs/ru/configuration.md +34 -9
- package/docs/ru/dictionary/content_file.md +0 -22
- package/docs/ru/dictionary/function_fetching.md +23 -0
- package/docs/ru/eslint.md +9 -9
- package/docs/tr/bundle_optimization.md +1 -1
- package/docs/tr/configuration.md +33 -9
- package/docs/tr/dictionary/content_file.md +0 -22
- package/docs/tr/dictionary/function_fetching.md +23 -0
- package/docs/tr/eslint.md +9 -9
- package/docs/uk/configuration.md +35 -9
- package/docs/uk/dictionary/content_file.md +0 -22
- package/docs/uk/dictionary/function_fetching.md +23 -0
- package/docs/uk/eslint.md +9 -9
- package/docs/ur/configuration.md +35 -9
- package/docs/ur/eslint.md +9 -9
- package/docs/vi/bundle_optimization.md +1 -1
- package/docs/vi/configuration.md +33 -9
- package/docs/vi/dictionary/content_file.md +0 -22
- package/docs/vi/dictionary/function_fetching.md +23 -0
- package/docs/vi/eslint.md +9 -9
- package/docs/zh/bundle_optimization.md +1 -1
- package/docs/zh/configuration.md +29 -9
- package/docs/zh/dictionary/content_file.md +0 -22
- package/docs/zh/dictionary/function_fetching.md +23 -0
- package/docs/zh/eslint.md +9 -9
- package/docs/zh-TW/bundle_optimization.md +1 -1
- package/docs/zh-TW/eslint.md +9 -9
- package/package.json +5 -5
|
@@ -63,12 +63,12 @@ author: aymericzip
|
|
|
63
63
|
|
|
64
64
|
Розробники часто забувають правильно посилатися на свої сторінки для різних локалей, тож давайте подивимось, як це працює на практиці з різними бібліотеками.
|
|
65
65
|
|
|
66
|
-
### **next-intl**
|
|
67
|
-
|
|
68
66
|
<Tabs>
|
|
69
|
-
<Tab label="next-intl">
|
|
67
|
+
<Tab label="next-intl" value="next-intl">
|
|
68
|
+
|
|
69
|
+
### **next-intl**
|
|
70
70
|
|
|
71
|
-
```tsx fileName="src/app/[locale]/about/layout.tsx
|
|
71
|
+
```tsx fileName="src/app/[locale]/about/layout.tsx"
|
|
72
72
|
import type { Metadata } from "next";
|
|
73
73
|
import { locales, defaultLocale } from "@/i18n";
|
|
74
74
|
import { getTranslations, unstable_setRequestLocale } from "next-intl/server";
|
|
@@ -153,10 +153,10 @@ export default function robots(): MetadataRoute.Robots {
|
|
|
153
153
|
}
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
-
### **next-i18next**
|
|
157
|
-
|
|
158
156
|
</Tab>
|
|
159
|
-
<Tab label="next-i18next">
|
|
157
|
+
<Tab label="next-i18next" value="next-i18next">
|
|
158
|
+
|
|
159
|
+
### **next-i18next**
|
|
160
160
|
|
|
161
161
|
```ts fileName="i18n.config.ts"
|
|
162
162
|
export const locales = ["en", "fr"] as const;
|
|
@@ -256,10 +256,10 @@ export default function robots(): MetadataRoute.Robots {
|
|
|
256
256
|
}
|
|
257
257
|
```
|
|
258
258
|
|
|
259
|
-
### **Intlayer**
|
|
260
|
-
|
|
261
259
|
</Tab>
|
|
262
|
-
<Tab label="intlayer">
|
|
260
|
+
<Tab label="intlayer" value="intlayer">
|
|
261
|
+
|
|
262
|
+
### **Intlayer**
|
|
263
263
|
|
|
264
264
|
````typescript fileName="src/app/[locale]/about/layout.tsx"
|
|
265
265
|
import { getIntlayer, getMultilingualUrls } from "intlayer";
|
|
@@ -63,12 +63,12 @@ Dưới đây là danh sách kiểm tra mà mọi ứng dụng đa ngôn ngữ n
|
|
|
63
63
|
|
|
64
64
|
Các nhà phát triển thường quên tham chiếu đúng các trang của họ qua các ngôn ngữ, vì vậy hãy cùng xem cách điều này hoạt động trong thực tế với các thư viện khác nhau.
|
|
65
65
|
|
|
66
|
-
### **next-intl**
|
|
67
|
-
|
|
68
66
|
<Tabs>
|
|
69
|
-
<Tab label="next-intl">
|
|
67
|
+
<Tab label="next-intl" value="next-intl">
|
|
68
|
+
|
|
69
|
+
### **next-intl**
|
|
70
70
|
|
|
71
|
-
```tsx fileName="src/app/[locale]/about/layout.tsx
|
|
71
|
+
```tsx fileName="src/app/[locale]/about/layout.tsx"
|
|
72
72
|
import type { Metadata } from "next";
|
|
73
73
|
import { locales, defaultLocale } from "@/i18n";
|
|
74
74
|
import { getTranslations, unstable_setRequestLocale } from "next-intl/server";
|
|
@@ -154,10 +154,10 @@ export default function robots(): MetadataRoute.Robots {
|
|
|
154
154
|
}
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
-
### **next-i18next**
|
|
158
|
-
|
|
159
157
|
</Tab>
|
|
160
|
-
<Tab label="next-i18next">
|
|
158
|
+
<Tab label="next-i18next" value="next-i18next">
|
|
159
|
+
|
|
160
|
+
### **next-i18next**
|
|
161
161
|
|
|
162
162
|
```ts fileName="i18n.config.ts"
|
|
163
163
|
export const locales = ["en", "fr"] as const;
|
|
@@ -258,10 +258,10 @@ export default function robots(): MetadataRoute.Robots {
|
|
|
258
258
|
}
|
|
259
259
|
```
|
|
260
260
|
|
|
261
|
-
### **Intlayer**
|
|
262
|
-
|
|
263
261
|
</Tab>
|
|
264
|
-
<Tab label="intlayer">
|
|
262
|
+
<Tab label="intlayer" value="intlayer">
|
|
263
|
+
|
|
264
|
+
### **Intlayer**
|
|
265
265
|
|
|
266
266
|
````typescript fileName="src/app/[locale]/about/layout.tsx"
|
|
267
267
|
import { getIntlayer, getMultilingualUrls } from "intlayer";
|
|
@@ -63,12 +63,12 @@ author: aymericzip
|
|
|
63
63
|
|
|
64
64
|
开发者经常忘记在不同语言环境中正确引用他们的页面,因此让我们看看使用不同库时这是如何实际操作的。
|
|
65
65
|
|
|
66
|
-
### **next-intl**
|
|
67
|
-
|
|
68
66
|
<Tabs>
|
|
69
|
-
<Tab label="next-intl">
|
|
67
|
+
<Tab label="next-intl" value="next-intl">
|
|
68
|
+
|
|
69
|
+
### **next-intl**
|
|
70
70
|
|
|
71
|
-
```tsx fileName="src/app/[locale]/about/layout.tsx
|
|
71
|
+
```tsx fileName="src/app/[locale]/about/layout.tsx"
|
|
72
72
|
import type { Metadata } from "next";
|
|
73
73
|
import { locales, defaultLocale } from "@/i18n";
|
|
74
74
|
import { getTranslations, unstable_setRequestLocale } from "next-intl/server";
|
|
@@ -155,10 +155,10 @@ export default function robots(): MetadataRoute.Robots {
|
|
|
155
155
|
}
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
### **next-i18next**
|
|
159
|
-
|
|
160
158
|
</Tab>
|
|
161
|
-
<Tab label="next-i18next">
|
|
159
|
+
<Tab label="next-i18next" value="next-i18next">
|
|
160
|
+
|
|
161
|
+
### **next-i18next**
|
|
162
162
|
|
|
163
163
|
```ts fileName="i18n.config.ts"
|
|
164
164
|
export const locales = ["en", "fr"] as const;
|
|
@@ -258,10 +258,10 @@ export default function robots(): MetadataRoute.Robots {
|
|
|
258
258
|
}
|
|
259
259
|
```
|
|
260
260
|
|
|
261
|
-
### **Intlayer**
|
|
262
|
-
|
|
263
261
|
</Tab>
|
|
264
|
-
<Tab label="intlayer">
|
|
262
|
+
<Tab label="intlayer" value="intlayer">
|
|
263
|
+
|
|
264
|
+
### **Intlayer**
|
|
265
265
|
|
|
266
266
|
````typescript fileName="src/app/[locale]/about/layout.tsx"
|
|
267
267
|
import { getIntlayer, getMultilingualUrls } from "intlayer";
|
|
@@ -159,7 +159,7 @@ pnpm add -D webpack-bundle-analyzer
|
|
|
159
159
|
bun add -d webpack-bundle-analyzer
|
|
160
160
|
```
|
|
161
161
|
|
|
162
|
-
```typescript fileName="webpack.config.ts
|
|
162
|
+
```typescript fileName="webpack.config.ts"
|
|
163
163
|
import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer";
|
|
164
164
|
|
|
165
165
|
export default {
|
package/docs/ar/configuration.md
CHANGED
|
@@ -471,6 +471,27 @@ const config: IntlayerConfig = {
|
|
|
471
471
|
*/
|
|
472
472
|
prune: true,
|
|
473
473
|
|
|
474
|
+
/**
|
|
475
|
+
* تجميع أجزاء القاموس لكل لغة حسب حدود تقسيم الشيفرة التي تستخدمها، بحيث تجلب
|
|
476
|
+
* الصفحة المحمّلة بتكاسل محتواها في طلب واحد.
|
|
477
|
+
* الافتراضي: true
|
|
478
|
+
*
|
|
479
|
+
* ملاحظة:
|
|
480
|
+
* - ينطبق فقط على القواميس التي تستخدم `importMode: 'dynamic'`.
|
|
481
|
+
*/
|
|
482
|
+
chunkGrouping: true,
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* تحميل القاموس مع الجزء الذي يستخدمه، بدلاً من جلبه بعد عرض ذلك الجزء. تُعرض
|
|
486
|
+
* القراءات بشكل متزامن بدلاً من التعليق، لذا لم تعد حالة التحميل تومض أثناء
|
|
487
|
+
* التنقل.
|
|
488
|
+
* الافتراضي: true
|
|
489
|
+
*
|
|
490
|
+
* ملاحظة:
|
|
491
|
+
* - يتم انتظار اللغة المحددة فقط، لذا تنزّل الصفحة اللغة التي تعرضها فحسب.
|
|
492
|
+
*/
|
|
493
|
+
dictionariesPreload: true,
|
|
494
|
+
|
|
474
495
|
/**
|
|
475
496
|
* صيغة الإخراج لملفات القاموس المولدة.
|
|
476
497
|
* الافتراضي: ['cjs', 'esm']
|
|
@@ -1047,15 +1068,17 @@ dictionary: {
|
|
|
1047
1068
|
|
|
1048
1069
|
> أثناء التحسين، سيقوم Intlayer باستبدال استدعاءات القواميس لتحسين تقسيم الكود (chunking) بحيث تستورد الحزمة الناتجة القواميس المستخدمة فعلياً فقط.
|
|
1049
1070
|
|
|
1050
|
-
| الحقل
|
|
1051
|
-
|
|
|
1052
|
-
| `mode`
|
|
1053
|
-
| `optimize`
|
|
1054
|
-
| `minify`
|
|
1055
|
-
| `prune`
|
|
1056
|
-
| `checkTypes`
|
|
1057
|
-
| `
|
|
1058
|
-
| `
|
|
1071
|
+
| الحقل | الوصف | النوع | الافتراضي | مثال | ملاحظة |
|
|
1072
|
+
| --------------------- | ----------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1073
|
+
| `mode` | يتحكم في وضع البناء. | `'auto'` | <br/> `'manual'` | `'auto'` | `'manual'` | • `'auto'`: يتم تشغيل البناء تلقائياً أثناء بناء التطبيق. <br/> • `'manual'`: يتم تنفيذه فقط عند استدعاء أمر بناء صريح. <br/> • يمكن استخدامه لإيقاف بناء القواميس (مثلاً لتجنب الجري في بيئات Node.js). |
|
|
1074
|
+
| `optimize` | يتحكم في ما إذا كان ينبغي إجراء تحسينات البناء. | `boolean` | `undefined` | `process.env.NODE_ENV === 'production'` | • إذا لم يتم تعريفه، فسيتم تشغيل التحسين عند بناء إطار العمل (Vite/Next.js). <br/> • `true` يفرض التحسين حتى في وضع التطوير. <br/> • `false` يعطله. <br/> • عند تشغيله، يستبدل استدعاءات القواميس لتحسين الـ chunking. <br/> • يتطلب إضافات `@intlayer/babel` و `@intlayer/swc`. |
|
|
1075
|
+
| `minify` | يحدد ما إذا كان ينبغي ضغط القواميس لتقليل حجم الحزمة. | `boolean` | `false` | | • يحدد ما إذا كانت الحزمة يجب أن تكون مضغوطة.<br/>• الافتراضي: `true` في الإنتاج.<br/>• سيتم تجاهل هذا الخيار إذا تم تعطيل `optimize`.<br/>• سيتم تجاهل هذا الخيار إذا كان `editor.enabled` صحيحاً. |
|
|
1076
|
+
| `prune` | يحدد ما إذا كان ينبغي حذف المفاتيح غير المستخدمة في القواميس. | `boolean` | `true` | | • يحدد ما إذا كانت الحزمة يجب أن يتم تنظيفها.<br/>• الافتراضي: `true` في الإنتاج.<br/>• سيتم تجاهل هذا الخيار إذا تم تعطيل `optimize`. |
|
|
1077
|
+
| `checkTypes` | يشير إلى ما إذا كان ينبغي للبناء التحقق من أنواع TypeScript وتسجيل الأخطاء. | `boolean` | `false` | | قد يبطئ عملية البناء. |
|
|
1078
|
+
| `chunkGrouping` | يحدد ما إذا كان يجب تجميع أجزاء القاموس لكل لغة حسب حدود تقسيم الشيفرة التي تستخدمها. | `boolean` | `true` | | • بدون التجميع، ترسل الصفحة المكوّنة من مكوّنات عديدة طلباً لكل قاموس.<br/>• القواميس التي يُوصل إليها من عدة حدود تنتقل إلى جزء مشترك، لذا لا تحمل أي صفحة محتوى صفحة أخرى.<br/>• ينطبق فقط على القواميس التي تستخدم `importMode: 'dynamic'`.<br/>• ينطبق فقط على بناء العميل، وفقط عند التحزيم (ليس في وضع التطوير). |
|
|
1079
|
+
| `dictionariesPreload` | يحدد ما إذا كان يجب تحميل القاموس مع الجزء الذي يستخدمه، بدلاً من جلبه بعد عرض ذلك الجزء. | `boolean` | `true` | | • تنتظر نقطة الدخول المولَّدة لغة التصفح في المستوى الأعلى، لذا لا يُعتبر المسار المحمّل بتكاسل محمّلاً حتى يتوفر محتواه.<br/>• تُعرض القراءات بشكل متزامن بدلاً من التعليق، لذا لم تعد حالة التحميل تومض أثناء التنقل.<br/>• يتم انتظار اللغة المحددة فقط، لذا تنزّل الصفحة اللغة التي تعرضها فحسب.<br/>• ينطبق فقط على القواميس التي تستخدم `importMode: 'dynamic'` في بناء العميل.<br/>• يتطلب أداة تحزيم تدعم top-level await (Vite، esbuild). |
|
|
1080
|
+
| `outputFormat` | يتحكم في صيغة إخراج القواميس. | `('esm' | 'cjs')[]` | `['esm', 'cjs']` | `['cjs']` | |
|
|
1081
|
+
| `traversePattern` | الأنماط التي تحدد الملفات التي يتم فحصها أثناء التحسين. | `string[]` | `['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']` | `['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']` | • قيد التحسين على الملفات ذات الصلة لزيادة أداء البناء. <br/> • سيتم تجاهله إذا توقف `optimize`. <br/> • يستخدم أنماط glob. |
|
|
1059
1082
|
|
|
1060
1083
|
---
|
|
1061
1084
|
|
|
@@ -536,28 +536,6 @@ export default aboutPageMetaContent;
|
|
|
536
536
|
|
|
537
537
|
> انظر [المتغيرات](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dynamic_dictionaries/variants.md) لمزيد من المعلومات.
|
|
538
538
|
|
|
539
|
-
#### `meta` (`Record<string, string | number | boolean>`)
|
|
540
|
-
|
|
541
|
-
يُستخدم بالاقتران مع السجلات الديناميكية (Dynamic Records)، ويسمح هذا الحقل بالإعلان عن السجلات التي يديرها نظام إدارة المحتوى (CMS) أو البيانات التعسفية التي يتم جلبها في وقت التشغيل بواسطة معرف غير شفاف. يتم تحديد هوية القاموس من خلال مجموعة عشوائية من أزواج المفتاح والقيمة المعلنة في حقل `meta` هذا.
|
|
542
|
-
|
|
543
|
-
**مثال:**
|
|
544
|
-
|
|
545
|
-
```typescript
|
|
546
|
-
{
|
|
547
|
-
key: "product-copy",
|
|
548
|
-
meta: {
|
|
549
|
-
id: "prod_abc",
|
|
550
|
-
userId: "user_123"
|
|
551
|
-
},
|
|
552
|
-
content: {
|
|
553
|
-
name: "Widget Pro",
|
|
554
|
-
description: "The best widget."
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
```
|
|
558
|
-
|
|
559
|
-
> انظر [السجلات الديناميكية](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dynamic_dictionaries/dynamic_content.md) لمزيد من المعلومات.
|
|
560
|
-
|
|
561
539
|
### خصائص نظام إدارة المحتوى
|
|
562
540
|
|
|
563
541
|
##### `version` (سلسلة نصية)
|
|
@@ -89,6 +89,29 @@ export default asyncFunctionContent;
|
|
|
89
89
|
|
|
90
90
|
في هذه الحالة، تقوم دالة `fakeFetch` بمحاكاة تأخير لتقليد وقت استجابة الخادم. يقوم Intlayer بتنفيذ الدالة غير المتزامنة ويستخدم النتيجة كمحتوى للمفتاح `text`.
|
|
91
91
|
|
|
92
|
+
## جلب المحتوى عن بُعد
|
|
93
|
+
|
|
94
|
+
يمكنك أيضًا إسناد وعد (Promise) مباشرةً إلى حقل محتوى. ينتظر Intlayer نتيجته أثناء بناء القواميس ويُدرج القيمة الناتجة:
|
|
95
|
+
|
|
96
|
+
```typescript fileName="**/*.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
|
|
97
|
+
import type { Dictionary } from "intlayer";
|
|
98
|
+
|
|
99
|
+
const remoteContent = {
|
|
100
|
+
key: "remote_content",
|
|
101
|
+
content: {
|
|
102
|
+
externalContent: fetch("https://example.com").then((res) => res.json()),
|
|
103
|
+
},
|
|
104
|
+
} satisfies Dictionary;
|
|
105
|
+
|
|
106
|
+
export default remoteContent;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
```plaintext fileName="**/*.content.json" contentDeclarationFormat="json"
|
|
110
|
+
لا توجد طريقة لجلب المحتوى من ملف JSON، استخدم ملف .ts أو .js بدلاً من ذلك
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
> يتم تنفيذ الطلب في وقت البناء، لذا فإن البيانات المجلوبة هي لقطة مضمّنة في القاموس. أعد بناء القواميس لتحديثها.
|
|
114
|
+
|
|
92
115
|
## استخدام المحتوى المعتمد على الدوال في مكونات React
|
|
93
116
|
|
|
94
117
|
لاستخدام المحتوى المعتمد على الدوال في مكون React، تحتاج إلى استيراد `useIntlayer` من `react-intlayer` واستدعاؤه مع معرف المحتوى لاسترجاع المحتوى. إليك مثالاً:
|
package/docs/ar/eslint.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-08-12
|
|
3
|
-
updatedAt: 2026-08-
|
|
3
|
+
updatedAt: 2026-08-13
|
|
4
4
|
title: إضافة ESLint | قواعد الفحص (Lint) لـ Intlayer
|
|
5
5
|
description: اكتشف النصوص المكتوبة يدويًا (hardcoded)، والاستدعاءات الديناميكية التي لا يمكن لمترجم Intlayer تحسينها، ومحتوى القواميس غير المستخدم، باستخدام eslint-plugin-intlayer. متوافقة مع ESLint و oxlint عبر React و Vue و Svelte و Angular و Astro.
|
|
6
6
|
keywords:
|
|
@@ -52,7 +52,7 @@ pnpm add --save-dev eslint-plugin-intlayer
|
|
|
52
52
|
yarn add --dev eslint-plugin-intlayer
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
تتطلب الإصدار 9 من ESLint أو أحدث (flat config).
|
|
55
|
+
تتطلب الإصدار 9 من ESLint أو أحدث (flat config). ESLint 10 مدعوم.
|
|
56
56
|
|
|
57
57
|
## الاستخدام
|
|
58
58
|
|
|
@@ -61,20 +61,20 @@ yarn add --dev eslint-plugin-intlayer
|
|
|
61
61
|
<Tabs defaultTab="eslint">
|
|
62
62
|
<Tab label="ESLint" value="eslint">
|
|
63
63
|
|
|
64
|
-
```javascript fileName="eslint.config.mjs"
|
|
64
|
+
```javascript fileName="eslint.config.mjs"
|
|
65
65
|
import intlayer from "eslint-plugin-intlayer";
|
|
66
66
|
|
|
67
67
|
export default [...intlayer.configs.recommended];
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
أو
|
|
70
|
+
أو انشر أحد الإعدادات وحدّد مستويات الخطورة بنفسك:
|
|
71
71
|
|
|
72
|
-
```javascript fileName="eslint.config.mjs"
|
|
72
|
+
```javascript fileName="eslint.config.mjs"
|
|
73
73
|
import intlayer from "eslint-plugin-intlayer";
|
|
74
74
|
|
|
75
75
|
export default [
|
|
76
|
+
...intlayer.configs.recommended,
|
|
76
77
|
{
|
|
77
|
-
plugins: { intlayer },
|
|
78
78
|
rules: {
|
|
79
79
|
"intlayer/no-raw-text": "warn",
|
|
80
80
|
"intlayer/static-dictionary-key": "error",
|
|
@@ -144,7 +144,7 @@ const { title } = useIntlayer("home");
|
|
|
144
144
|
|
|
145
145
|
**الخيارات**
|
|
146
146
|
|
|
147
|
-
```javascript fileName="eslint.config.mjs"
|
|
147
|
+
```javascript fileName="eslint.config.mjs"
|
|
148
148
|
{
|
|
149
149
|
"intlayer/no-raw-text": [
|
|
150
150
|
"warn",
|
|
@@ -247,7 +247,7 @@ export default {
|
|
|
247
247
|
|
|
248
248
|
**الخيارات**
|
|
249
249
|
|
|
250
|
-
```javascript fileName="eslint.config.mjs"
|
|
250
|
+
```javascript fileName="eslint.config.mjs"
|
|
251
251
|
{
|
|
252
252
|
"intlayer/no-unused-content": [
|
|
253
253
|
"warn",
|
|
@@ -296,7 +296,7 @@ export default {
|
|
|
296
296
|
| قوالب Angular | `.component.html` | `@angular-eslint/template-parser` |
|
|
297
297
|
| Astro | `.astro` | `astro-eslint-parser` |
|
|
298
298
|
|
|
299
|
-
```javascript fileName="eslint.config.mjs"
|
|
299
|
+
```javascript fileName="eslint.config.mjs"
|
|
300
300
|
import intlayer from "eslint-plugin-intlayer";
|
|
301
301
|
import tseslint from "typescript-eslint";
|
|
302
302
|
import vueParser from "vue-eslint-parser";
|
package/docs/bn/configuration.md
CHANGED
|
@@ -471,6 +471,29 @@ const config: IntlayerConfig = {
|
|
|
471
471
|
*/
|
|
472
472
|
prune: true,
|
|
473
473
|
|
|
474
|
+
/**
|
|
475
|
+
* প্রতি-লোকেল অভিধান চাঙ্কগুলিকে সেই কোড-স্প্লিট সীমানা অনুসারে গোষ্ঠীভুক্ত
|
|
476
|
+
* করুন যা সেগুলি ব্যবহার করে, যাতে ধীরে লোড হওয়া পৃষ্ঠা একটি অনুরোধেই তার
|
|
477
|
+
* বিষয়বস্তু পায়।
|
|
478
|
+
* ডিফল্ট: true
|
|
479
|
+
*
|
|
480
|
+
* দ্রষ্টব্য:
|
|
481
|
+
* - শুধুমাত্র `importMode: 'dynamic'` ব্যবহারকারী অভিধানের ক্ষেত্রে প্রযোজ্য।
|
|
482
|
+
*/
|
|
483
|
+
chunkGrouping: true,
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* চাঙ্ক রেন্ডার হওয়ার পরে আনার পরিবর্তে, যে চাঙ্ক অভিধানটি ব্যবহার করে তার
|
|
487
|
+
* সাথেই সেটি লোড করুন। পঠন সাসপেন্ড না হয়ে সিঙ্ক্রোনাসভাবে রেন্ডার হয়, তাই
|
|
488
|
+
* নেভিগেশনে আর লোডিং অবস্থা ঝলকায় না।
|
|
489
|
+
* ডিফল্ট: true
|
|
490
|
+
*
|
|
491
|
+
* দ্রষ্টব্য:
|
|
492
|
+
* - শুধুমাত্র নির্ধারিত লোকেলের জন্য অপেক্ষা করা হয়, তাই পৃষ্ঠাটি কেবল যে
|
|
493
|
+
* ভাষা দেখায় সেটিই ডাউনলোড করে।
|
|
494
|
+
*/
|
|
495
|
+
dictionariesPreload: true,
|
|
496
|
+
|
|
474
497
|
/**
|
|
475
498
|
* জেনারেট করা ডিকশনারি ফাইলের আউটপুট ফরম্যাট।
|
|
476
499
|
* ডিফল্ট: ['cjs', 'esm']
|
|
@@ -1032,15 +1055,17 @@ Intlayer কীভাবে আপনার অ্যাপ্লিকেশন
|
|
|
1032
1055
|
|
|
1033
1056
|
> অপ্টিমাইজেশন চলাকালীন, Intlayer কোড স্প্লিটিং (chunking) অপ্টিমাইজ করার জন্য ডিকশনারি কলগুলো প্রতিস্থাপন করবে যাতে ফলাফল বান্ডেলটি কেবল সেই ডিকশনারিগুলোই ইম্পোর্ট করে যা বাস্তবে ব্যবহৃত হয়।
|
|
1034
1057
|
|
|
1035
|
-
| ফিল্ড
|
|
1036
|
-
|
|
|
1037
|
-
| `mode`
|
|
1038
|
-
| `optimize`
|
|
1039
|
-
| `minify`
|
|
1040
|
-
| `prune`
|
|
1041
|
-
| `checkTypes`
|
|
1042
|
-
| `
|
|
1043
|
-
| `
|
|
1058
|
+
| ফিল্ড | বর্ণনা | টাইপ | ডিফল্ট | উদাহরণ | মন্তব্য |
|
|
1059
|
+
| --------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1060
|
+
| `mode` | বিল্ড মোড নিয়ন্ত্রণ করে। | `'auto'` | <br/> `'manual'` | `'auto'` | `'manual'` | • `'auto'`: অ্যাপ্লিকেশন বিল্ডের সময় বিল্ড স্বয়ংক্রিয়ভাবে শুরু হয়।<br/>• `'manual'`: কেবল একটি স্পষ্ট বিল্ড কমান্ডের মাধ্যমে কার্যকর হয়।<br/>• ডিকশনারি বিল্ড বন্ধ করার জন্য ব্যবহার করা যেতে পারে (যেমন Node.js এনভায়রনমেন্টে চলা এড়াতে)। |
|
|
1061
|
+
| `optimize` | বিল্ড অপ্টিমাইজেশন করা হবে কি না তা নিয়ন্ত্রণ করে। | `boolean` | `undefined` | `process.env.NODE_ENV === 'production'` | • সংজ্ঞায়িত না থাকলে, ফ্রেমওয়ার্ক বিল্ড (Vite/Next.js) এর সময় অপ্টিমাইজেশন শুরু হয়।<br/>• `true` দেব মোডেও অপ্টিমাইজেশন বাধ্য করে।<br/>• `false` এটি বন্ধ করে দেয়।<br/>• চালু থাকলে, চাকিং অপ্টিমাইজেশনের জন্য ডিকশনারি কল প্রতিস্থাপন করে।<br/>• `@intlayer/babel` এবং `@intlayer/swc` প্লাগইন প্রয়োজন। |
|
|
1062
|
+
| `minify` | বান্ডেলের আকার কমাতে ডিকশনারিগুলো মিনিফাই করা উচিত কি না তা নির্দিষ্ট করে। | `boolean` | `false` | | • বান্ডেল সংকুচিত করা উচিত কি না তা নির্দিষ্ট করে।<br/>• ডিফল্ট: প্রোডাকশনে `true`।<br/>• `optimize` নিষ্ক্রিয় থাকলে এই বিকল্পটি উপেক্ষা করা হবে।<br/>• `editor.enabled` সত্য হলে এই বিকল্পটি উপেক্ষা করা হবে। |
|
|
1063
|
+
| `prune` | ডিকশনারিতে অব্যবহৃত কীগুলো মুছে ফেলা উচিত কি না তা নির্দিষ্ট করে। | `boolean` | `true` | | • বান্ডেলটি পরিষ্কার করা উচিত কি না তা নির্দিষ্ট করে।<br/>• ডিফল্ট: প্রোডাকশনে `true`।<br/>• `optimize` নিষ্ক্রিয় থাকলে এই বিকল্পটি উপেক্ষা করা হবে। |
|
|
1064
|
+
| `checkTypes` | বিল্ডের সময় TypeScript টাইপ চেক করে ত্রুটি লগ করবে কি না তা নির্দেশ করে। | `boolean` | `false` | | বিল্ড প্রক্রিয়া ধীর করে দিতে পারে। |
|
|
1065
|
+
| `chunkGrouping` | প্রতি-লোকেল অভিধান চাঙ্কগুলিকে সেই কোড-স্প্লিট সীমানা অনুসারে গোষ্ঠীভুক্ত করা হবে কিনা যা সেগুলি ব্যবহার করে। | `boolean` | `true` | | • গোষ্ঠীভুক্ত না করলে, বহু কম্পোনেন্ট দিয়ে গঠিত একটি পৃষ্ঠা প্রতিটি অভিধানের জন্য একটি করে অনুরোধ পাঠায়।<br/>• একাধিক সীমানা থেকে পৌঁছানো অভিধানগুলি একটি ভাগ করা চাঙ্কে চলে যায়, তাই কোনো পৃষ্ঠা অন্য পৃষ্ঠার বিষয়বস্তু বহন করে না।<br/>• শুধুমাত্র `importMode: 'dynamic'` ব্যবহারকারী অভিধানের ক্ষেত্রে প্রযোজ্য।<br/>• শুধুমাত্র ক্লায়েন্ট বিল্ডে এবং কেবল বান্ডলিংয়ের সময় প্রযোজ্য (dev-এ নয়)। |
|
|
1066
|
+
| `dictionariesPreload` | অভিধানটি সেই চাঙ্কের সাথে লোড হবে কিনা যা এটি ব্যবহার করে, নাকি সেই চাঙ্ক রেন্ডার হওয়ার পরে আনা হবে। | `boolean` | `true` | | • উৎপন্ন এন্ট্রি পয়েন্ট শীর্ষ স্তরে ব্রাউজিং লোকেলের জন্য অপেক্ষা করে, তাই ধীরে লোড হওয়া রুট তার বিষয়বস্তু না আসা পর্যন্ত লোড হয়েছে বলে ধরা হয় না।<br/>• পঠন সাসপেন্ড না হয়ে সিঙ্ক্রোনাসভাবে রেন্ডার হয়, তাই নেভিগেশনে আর লোডিং অবস্থা ঝলকায় না।<br/>• শুধুমাত্র নির্ধারিত লোকেলের জন্য অপেক্ষা করা হয়, তাই পৃষ্ঠাটি কেবল যে ভাষা দেখায় সেটিই ডাউনলোড করে।<br/>• শুধুমাত্র ক্লায়েন্ট বিল্ডে `importMode: 'dynamic'` ব্যবহারকারী অভিধানের ক্ষেত্রে প্রযোজ্য।<br/>• টপ-লেভেল await সমর্থনকারী বান্ডলার প্রয়োজন (Vite, esbuild)। |
|
|
1067
|
+
| `outputFormat` | ডিকশনারির আউটপুট ফরম্যাট নিয়ন্ত্রণ করে। | `('esm' | 'cjs')[]` | `['esm', 'cjs']` | `['cjs']` | |
|
|
1068
|
+
| `traversePattern` | অপ্টিমাইজেশন চলাকালীন স্ক্যান করার ফাইলগুলো নির্ধারণ করে এমন প্যাটার্ন। | `string[]` | `['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']` | `['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']` | • বিল্ড পারফরম্যান্স বাড়াতে রিলেভেন্ট ফাইলে অপ্টিমাইজেশন সীমাবদ্ধ করুন।<br/>• `optimize` বন্ধ থাকলে উপেক্ষা করা হয়।<br/>• গ্লোব প্যাটার্ন ব্যবহার করে। |
|
|
1044
1069
|
|
|
1045
1070
|
---
|
|
1046
1071
|
|
package/docs/bn/eslint.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-08-12
|
|
3
|
-
updatedAt: 2026-08-
|
|
3
|
+
updatedAt: 2026-08-13
|
|
4
4
|
title: ESLint প্লাগইন | Intlayer এর জন্য লিন্ট নিয়ম
|
|
5
5
|
description: eslint-plugin-intlayer ব্যবহার করে হার্ডকোডেড স্ট্রিং, ডাইনামিক কল যা Intlayer কম্পাইলার অপ্টিমাইজ করতে পারে না এবং অব্যবহৃত ডিকশনারি সামগ্রী শনাক্ত করুন। React, Vue, Svelte, Angular এবং Astro জুড়ে ESLint এবং oxlint এর সাথে কাজ করে।
|
|
6
6
|
keywords:
|
|
@@ -52,7 +52,7 @@ pnpm add --save-dev eslint-plugin-intlayer
|
|
|
52
52
|
yarn add --dev eslint-plugin-intlayer
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
ESLint 9 বা পরবর্তী সংস্করণ (flat config) প্রয়োজন।
|
|
55
|
+
ESLint 9 বা পরবর্তী সংস্করণ (flat config) প্রয়োজন। ESLint 10 সমর্থিত।
|
|
56
56
|
|
|
57
57
|
## ব্যবহার
|
|
58
58
|
|
|
@@ -61,20 +61,20 @@ ESLint 9 বা পরবর্তী সংস্করণ (flat config) প্
|
|
|
61
61
|
<Tabs defaultTab="eslint">
|
|
62
62
|
<Tab label="ESLint" value="eslint">
|
|
63
63
|
|
|
64
|
-
```javascript fileName="eslint.config.mjs"
|
|
64
|
+
```javascript fileName="eslint.config.mjs"
|
|
65
65
|
import intlayer from "eslint-plugin-intlayer";
|
|
66
66
|
|
|
67
67
|
export default [...intlayer.configs.recommended];
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
অথবা
|
|
70
|
+
অথবা একটি কনফিগ ছড়িয়ে দিন এবং তীব্রতা নিজে নির্ধারণ করুন:
|
|
71
71
|
|
|
72
|
-
```javascript fileName="eslint.config.mjs"
|
|
72
|
+
```javascript fileName="eslint.config.mjs"
|
|
73
73
|
import intlayer from "eslint-plugin-intlayer";
|
|
74
74
|
|
|
75
75
|
export default [
|
|
76
|
+
...intlayer.configs.recommended,
|
|
76
77
|
{
|
|
77
|
-
plugins: { intlayer },
|
|
78
78
|
rules: {
|
|
79
79
|
"intlayer/no-raw-text": "warn",
|
|
80
80
|
"intlayer/static-dictionary-key": "error",
|
|
@@ -144,7 +144,7 @@ const { title } = useIntlayer("home");
|
|
|
144
144
|
|
|
145
145
|
**বিকল্পসমূহ**
|
|
146
146
|
|
|
147
|
-
```javascript fileName="eslint.config.mjs"
|
|
147
|
+
```javascript fileName="eslint.config.mjs"
|
|
148
148
|
{
|
|
149
149
|
"intlayer/no-raw-text": [
|
|
150
150
|
"warn",
|
|
@@ -247,7 +247,7 @@ export default {
|
|
|
247
247
|
|
|
248
248
|
**বিকল্পসমূহ**
|
|
249
249
|
|
|
250
|
-
```javascript fileName="eslint.config.mjs"
|
|
250
|
+
```javascript fileName="eslint.config.mjs"
|
|
251
251
|
{
|
|
252
252
|
"intlayer/no-unused-content": [
|
|
253
253
|
"warn",
|
|
@@ -296,7 +296,7 @@ export default {
|
|
|
296
296
|
| Angular টেমপ্লেট | `.component.html` | `@angular-eslint/template-parser` |
|
|
297
297
|
| Astro | `.astro` | `astro-eslint-parser` |
|
|
298
298
|
|
|
299
|
-
```javascript fileName="eslint.config.mjs"
|
|
299
|
+
```javascript fileName="eslint.config.mjs"
|
|
300
300
|
import intlayer from "eslint-plugin-intlayer";
|
|
301
301
|
import tseslint from "typescript-eslint";
|
|
302
302
|
import vueParser from "vue-eslint-parser";
|
|
@@ -159,7 +159,7 @@ pnpm add -D webpack-bundle-analyzer
|
|
|
159
159
|
bun add -d webpack-bundle-analyzer
|
|
160
160
|
```
|
|
161
161
|
|
|
162
|
-
```typescript fileName="webpack.config.ts
|
|
162
|
+
```typescript fileName="webpack.config.ts"
|
|
163
163
|
import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer";
|
|
164
164
|
|
|
165
165
|
export default {
|