@intlayer/docs 8.4.4 → 8.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/cjs/blog.cjs +21 -1
- package/dist/cjs/blog.cjs.map +1 -1
- package/dist/cjs/common.cjs +81 -1
- package/dist/cjs/common.cjs.map +1 -0
- package/dist/cjs/doc.cjs +21 -1
- package/dist/cjs/doc.cjs.map +1 -1
- package/dist/cjs/frequentQuestions.cjs +21 -1
- package/dist/cjs/frequentQuestions.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +572 -1
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +3032 -1
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +352 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +72 -1
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/cjs/index.cjs +34 -1
- package/dist/cjs/legal.cjs +21 -1
- package/dist/cjs/legal.cjs.map +1 -1
- package/dist/esm/blog.mjs +14 -1
- package/dist/esm/blog.mjs.map +1 -1
- package/dist/esm/common.mjs +67 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/doc.mjs +14 -1
- package/dist/esm/doc.mjs.map +1 -1
- package/dist/esm/frequentQuestions.mjs +14 -1
- package/dist/esm/frequentQuestions.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +570 -1
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +3030 -1
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +350 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +70 -1
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/esm/index.mjs +6 -1
- package/dist/esm/legal.mjs +14 -1
- package/dist/esm/legal.mjs.map +1 -1
- package/dist/types/blog.d.ts +2 -2
- package/dist/types/common.d.ts +37 -2
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/doc.d.ts +2 -2
- package/dist/types/frequentQuestions.d.ts +2 -2
- package/dist/types/generated/blog.entry.d.ts +35 -2
- package/dist/types/generated/blog.entry.d.ts.map +1 -0
- package/dist/types/generated/docs.entry.d.ts +158 -2
- package/dist/types/generated/docs.entry.d.ts.map +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts +24 -2
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -0
- package/dist/types/generated/legal.entry.d.ts +10 -2
- package/dist/types/generated/legal.entry.d.ts.map +1 -0
- package/dist/types/legal.d.ts +2 -2
- package/docs/ar/configuration.md +520 -722
- package/docs/ar/intlayer_with_storybook.md +521 -0
- package/docs/bn/configuration.md +922 -0
- package/docs/bn/intlayer_with_hono.md +428 -0
- package/docs/de/configuration.md +369 -743
- package/docs/de/intlayer_with_storybook.md +521 -0
- package/docs/en/configuration.md +181 -507
- package/docs/en/intlayer_with_storybook.md +521 -0
- package/docs/en-GB/configuration.md +456 -657
- package/docs/en-GB/intlayer_with_storybook.md +521 -0
- package/docs/es/configuration.md +379 -754
- package/docs/es/intlayer_with_storybook.md +521 -0
- package/docs/fr/configuration.md +376 -757
- package/docs/fr/intlayer_with_storybook.md +521 -0
- package/docs/hi/configuration.md +532 -728
- package/docs/hi/intlayer_with_storybook.md +521 -0
- package/docs/id/configuration.md +371 -684
- package/docs/id/intlayer_with_storybook.md +521 -0
- package/docs/it/configuration.md +397 -775
- package/docs/it/intlayer_with_storybook.md +521 -0
- package/docs/ja/configuration.md +525 -724
- package/docs/ja/intlayer_with_storybook.md +521 -0
- package/docs/ko/configuration.md +525 -724
- package/docs/ko/intlayer_with_storybook.md +521 -0
- package/docs/pl/configuration.md +430 -734
- package/docs/pl/intlayer_with_storybook.md +521 -0
- package/docs/pt/configuration.md +375 -746
- package/docs/pt/intlayer_with_storybook.md +521 -0
- package/docs/ru/configuration.md +532 -701
- package/docs/ru/intlayer_with_storybook.md +521 -0
- package/docs/tr/configuration.md +527 -719
- package/docs/tr/intlayer_with_storybook.md +521 -0
- package/docs/uk/configuration.md +425 -744
- package/docs/uk/intlayer_with_storybook.md +521 -0
- package/docs/ur/configuration.md +922 -0
- package/docs/ur/intlayer_with_hono.md +428 -0
- package/docs/vi/configuration.md +412 -753
- package/docs/vi/intlayer_with_storybook.md +521 -0
- package/docs/zh/configuration.md +521 -714
- package/docs/zh/intlayer_with_storybook.md +521 -0
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +20 -0
- package/dist/cjs/common-a-l0ULP6.cjs +0 -2
- package/dist/cjs/common-a-l0ULP6.cjs.map +0 -1
- package/dist/types/blog.entry-D5IgxPXY.d.ts +0 -35
- package/dist/types/blog.entry-D5IgxPXY.d.ts.map +0 -1
- package/dist/types/common-B45TZvLQ.d.ts +0 -37
- package/dist/types/common-B45TZvLQ.d.ts.map +0 -1
- package/dist/types/docs.entry-CergjAYt.d.ts +0 -157
- package/dist/types/docs.entry-CergjAYt.d.ts.map +0 -1
- package/dist/types/frequentQuestions.entry-BHglVS-U.d.ts +0 -24
- package/dist/types/frequentQuestions.entry-BHglVS-U.d.ts.map +0 -1
- package/dist/types/legal.entry-B5Lg5eeH.d.ts +0 -10
- package/dist/types/legal.entry-B5Lg5eeH.d.ts.map +0 -1
package/docs/ar/configuration.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-03-
|
|
4
|
-
title:
|
|
5
|
-
description:
|
|
3
|
+
updatedAt: 2026-03-20
|
|
4
|
+
title: التكوين (Configuration)
|
|
5
|
+
description: تعرف على كيفية تكوين Intlayer لتطبيقك. افهم الإعدادات والخيارات المتنوعة المتاحة لتخصيص Intlayer وفقًا لاحتياجاتك.
|
|
6
6
|
keywords:
|
|
7
|
-
-
|
|
7
|
+
- التكوين
|
|
8
8
|
- الإعدادات
|
|
9
9
|
- التخصيص
|
|
10
10
|
- Intlayer
|
|
@@ -14,27 +14,39 @@ slugs:
|
|
|
14
14
|
- concept
|
|
15
15
|
- configuration
|
|
16
16
|
history:
|
|
17
|
+
- version: 8.4.0
|
|
18
|
+
date: 2026-03-20
|
|
19
|
+
changes: تمت إضافة تدوين الكائن لكل لغة لـ 'compiler.output' و 'dictionary.fill'
|
|
17
20
|
- version: 8.3.0
|
|
18
21
|
date: 2026-03-11
|
|
19
22
|
changes: نقل 'baseDir' من تكوين 'content' إلى تكوين 'system'
|
|
20
23
|
- version: 8.2.0
|
|
21
24
|
date: 2026-03-09
|
|
22
|
-
changes: تحديث خيارات
|
|
25
|
+
changes: تحديث خيارات المترجم (compiler)، وإضافة دعم لـ 'output' و 'noMetadata'
|
|
23
26
|
- version: 8.1.7
|
|
24
27
|
date: 2026-02-25
|
|
25
28
|
changes: تحديث خيارات المترجم
|
|
29
|
+
- version: 8.1.5
|
|
30
|
+
date: 2026-02-23
|
|
31
|
+
changes: إضافة خيار المترجم 'build-only' وبادئة القاموس
|
|
26
32
|
- version: 8.0.6
|
|
27
33
|
date: 2026-02-12
|
|
28
|
-
changes: إضافة دعم
|
|
34
|
+
changes: إضافة دعم لمزودي Open Router و Alibaba و Amazon و Google Vertex Bedrock و Fireworks و Groq و Hugging Face و Together.ai
|
|
29
35
|
- version: 8.0.5
|
|
30
36
|
date: 2026-02-06
|
|
31
37
|
changes: إضافة `dataSerialization` إلى تكوين الذكاء الاصطناعي
|
|
38
|
+
- version: 8.0.0
|
|
39
|
+
date: 2026-01-24
|
|
40
|
+
changes: إعادة تسمية وضع الاستيراد `live` إلى `fetch` لوصف الآلية الأساسية بشكل أفضل.
|
|
41
|
+
- version: 8.0.0
|
|
42
|
+
date: 2026-01-22
|
|
43
|
+
changes: نقل تكوين البناء `importMode` إلى تكوين القاموس `dictionary`.
|
|
32
44
|
- version: 8.0.0
|
|
33
45
|
date: 2026-01-22
|
|
34
|
-
changes:
|
|
46
|
+
changes: إضافة خيار `rewrite` لتكوين التوجيه
|
|
35
47
|
- version: 8.0.0
|
|
36
48
|
date: 2026-01-18
|
|
37
|
-
changes: فصل تكوين النظام عن تكوين المحتوى. نقل المسارات الداخلية إلى خاصية `system`. إضافة `codeDir` لفصل ملفات المحتوى
|
|
49
|
+
changes: فصل تكوين النظام عن تكوين المحتوى. نقل المسارات الداخلية إلى خاصية `system`. إضافة `codeDir` لفصل ملفات المحتوى وتحويل الكود.
|
|
38
50
|
- version: 8.0.0
|
|
39
51
|
date: 2026-01-18
|
|
40
52
|
changes: إضافة خيارات القاموس `location` و `schema`
|
|
@@ -44,6 +56,24 @@ history:
|
|
|
44
56
|
- version: 7.5.0
|
|
45
57
|
date: 2025-12-17
|
|
46
58
|
changes: إضافة خيار `buildMode`
|
|
59
|
+
- version: 7.0.0
|
|
60
|
+
date: 2025-10-25
|
|
61
|
+
changes: إضافة تكوين `dictionary`
|
|
62
|
+
- version: 7.0.0
|
|
63
|
+
date: 2025-10-21
|
|
64
|
+
changes: استبدال `middleware` بتكوين التوجيه `routing`
|
|
65
|
+
- version: 7.0.0
|
|
66
|
+
date: 2025-10-12
|
|
67
|
+
changes: إضافة خيار `formatCommand`
|
|
68
|
+
- version: 6.2.0
|
|
69
|
+
date: 2025-10-12
|
|
70
|
+
changes: تحديث خيار `excludedPath`
|
|
71
|
+
- version: 6.0.2
|
|
72
|
+
date: 2025-09-23
|
|
73
|
+
changes: إضافة خيار `outputFormat`
|
|
74
|
+
- version: 6.0.0
|
|
75
|
+
date: 2025-09-21
|
|
76
|
+
changes: إزالة حقل `dictionaryOutput` وحقل `i18nextResourcesDir`
|
|
47
77
|
- version: 6.0.0
|
|
48
78
|
date: 2025-09-16
|
|
49
79
|
changes: إضافة وضع الاستيراد `live`
|
|
@@ -55,17 +85,17 @@ history:
|
|
|
55
85
|
changes: استبدال `activateDynamicImport` بخيار `importMode`
|
|
56
86
|
- version: 5.6.0
|
|
57
87
|
date: 2025-07-13
|
|
58
|
-
changes: تغيير
|
|
88
|
+
changes: تغيير `contentDir` الافتراضي من `['src']` إلى `['.']`
|
|
59
89
|
- version: 5.5.11
|
|
60
90
|
date: 2025-06-29
|
|
61
91
|
changes: إضافة أوامر `docs`
|
|
62
92
|
---
|
|
63
93
|
|
|
64
|
-
#
|
|
94
|
+
# توثيق تكوين Intlayer
|
|
65
95
|
|
|
66
96
|
## نظرة عامة
|
|
67
97
|
|
|
68
|
-
|
|
98
|
+
تسمح لك ملفات تكوين Intlayer بتخصيص جوانب مختلفة من البرنامج المساعد، مثل التدويل (internationalization)، والبرامج الوسيطة (middleware)، ومعالجة المحتوى. يوفر هذا التوثيق وصفًا تفصيليًا لكل خاصية في التكوين.
|
|
69
99
|
|
|
70
100
|
---
|
|
71
101
|
|
|
@@ -75,9 +105,9 @@ history:
|
|
|
75
105
|
|
|
76
106
|
---
|
|
77
107
|
|
|
78
|
-
##
|
|
108
|
+
## تنسيقات ملفات التكوين المدعومة
|
|
79
109
|
|
|
80
|
-
|
|
110
|
+
يقبل Intlayer تنسيقات ملفات التكوين JSON و JS و MJS و TS:
|
|
81
111
|
|
|
82
112
|
- `intlayer.config.ts`
|
|
83
113
|
- `intlayer.config.js`
|
|
@@ -90,7 +120,7 @@ history:
|
|
|
90
120
|
|
|
91
121
|
---
|
|
92
122
|
|
|
93
|
-
## مثال على ملف
|
|
123
|
+
## مثال على ملف التكوين
|
|
94
124
|
|
|
95
125
|
````typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
96
126
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -98,108 +128,108 @@ import { nextjsRewrite } from "intlayer/routing";
|
|
|
98
128
|
import { z } from "zod";
|
|
99
129
|
|
|
100
130
|
/**
|
|
101
|
-
*
|
|
131
|
+
* مثال على ملف تكوين Intlayer يعرض جميع الخيارات المتاحة.
|
|
102
132
|
*/
|
|
103
133
|
const config: IntlayerConfig = {
|
|
104
134
|
/**
|
|
105
|
-
*
|
|
135
|
+
* تكوين إعدادات التدويل.
|
|
106
136
|
*/
|
|
107
137
|
internationalization: {
|
|
108
138
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
139
|
+
* قائمة اللغات (locales) المدعومة في التطبيق.
|
|
140
|
+
* الافتراضي: [Locales.ENGLISH]
|
|
111
141
|
*/
|
|
112
142
|
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
113
143
|
|
|
114
144
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
145
|
+
* قائمة اللغات الإلزامية التي يجب تعريفها في كل قاموس.
|
|
146
|
+
* إذا كانت فارغة، فستكون جميع اللغات إلزامية في وضع `strict`.
|
|
147
|
+
* الافتراضي: []
|
|
118
148
|
*/
|
|
119
149
|
requiredLocales: [Locales.ENGLISH],
|
|
120
150
|
|
|
121
151
|
/**
|
|
122
|
-
*
|
|
123
|
-
* - "strict":
|
|
124
|
-
* - "inclusive":
|
|
125
|
-
* - "loose":
|
|
126
|
-
*
|
|
152
|
+
* مستوى الصرامة للمحتوى المدوّل.
|
|
153
|
+
* - "strict": خطأ إذا كانت أي لغة معلنة مفقودة أو غير معلنة.
|
|
154
|
+
* - "inclusive": تحذير إذا كانت اللغة المعلنة مفقودة.
|
|
155
|
+
* - "loose": قبول أي لغة موجودة.
|
|
156
|
+
* الافتراضي: "inclusive"
|
|
127
157
|
*/
|
|
128
158
|
strictMode: "inclusive",
|
|
129
159
|
|
|
130
160
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
161
|
+
* اللغة الافتراضية المستخدمة كبديل في حالة عدم العثور على اللغة المطلوبة.
|
|
162
|
+
* الافتراضي: Locales.ENGLISH
|
|
133
163
|
*/
|
|
134
164
|
defaultLocale: Locales.ENGLISH,
|
|
135
165
|
},
|
|
136
166
|
|
|
137
167
|
/**
|
|
138
|
-
*
|
|
168
|
+
* الإعدادات التي تتحكم في عمليات القاموس وسلوك البدائل.
|
|
139
169
|
*/
|
|
140
170
|
dictionary: {
|
|
141
171
|
/**
|
|
142
|
-
*
|
|
143
|
-
* - "static":
|
|
144
|
-
* - "dynamic":
|
|
145
|
-
* - "fetch":
|
|
146
|
-
*
|
|
172
|
+
* يتحكم في كيفية استيراد القواميس.
|
|
173
|
+
* - "static": يتم استيراده بشكل ثابت في وقت البناء.
|
|
174
|
+
* - "dynamic": يتم استيراده بشكل ديناميكي باستخدام Suspense.
|
|
175
|
+
* - "fetch": يتم جلبه ديناميكيًا عبر واجهة برمجة تطبيقات Live Sync.
|
|
176
|
+
* الافتراضي: "static"
|
|
147
177
|
*/
|
|
148
178
|
importMode: "static",
|
|
149
179
|
|
|
150
180
|
/**
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
181
|
+
* استراتيجية ملء الترجمات المفقودة تلقائيًا باستخدام الذكاء الاصطناعي.
|
|
182
|
+
* يمكن أن تكون قيمة منطقية أو نمط مسار لحفظ المحتوى المملوء.
|
|
183
|
+
* الافتراضي: true
|
|
154
184
|
*/
|
|
155
185
|
fill: true,
|
|
156
186
|
|
|
157
187
|
/**
|
|
158
|
-
*
|
|
159
|
-
* - "local":
|
|
160
|
-
* - "remote":
|
|
161
|
-
* - "hybrid":
|
|
162
|
-
* - "plugin" (
|
|
163
|
-
*
|
|
188
|
+
* الموقع الفعلي لملفات القاموس.
|
|
189
|
+
* - "local": مخزن في نظام الملفات المحلي.
|
|
190
|
+
* - "remote": مخزن في Intlayer CMS.
|
|
191
|
+
* - "hybrid": مخزن محليًا وفي Intlayer CMS.
|
|
192
|
+
* - "plugin" (أو أي سلسلة مخصصة): يتم توفيره بواسطة مكون إضافي أو مصدر مخصص.
|
|
193
|
+
* الافتراضي: "local"
|
|
164
194
|
*/
|
|
165
195
|
location: "local",
|
|
166
196
|
|
|
167
197
|
/**
|
|
168
|
-
*
|
|
169
|
-
*
|
|
198
|
+
* ما إذا كان يجب تحويل المحتوى تلقائيًا (مثل Markdown إلى HTML).
|
|
199
|
+
* الافتراضي: false
|
|
170
200
|
*/
|
|
171
201
|
contentAutoTransformation: false,
|
|
172
202
|
},
|
|
173
203
|
|
|
174
204
|
/**
|
|
175
|
-
*
|
|
205
|
+
* تكوين التوجيه والبرامج الوسيطة.
|
|
176
206
|
*/
|
|
177
207
|
routing: {
|
|
178
208
|
/**
|
|
179
|
-
*
|
|
180
|
-
* - "prefix-no-default":
|
|
181
|
-
* - "prefix-all":
|
|
182
|
-
* - "no-prefix":
|
|
183
|
-
* - "search-params":
|
|
184
|
-
*
|
|
209
|
+
* استراتيجية توجيه اللغات.
|
|
210
|
+
* - "prefix-no-default": يضيف بادئة للجميع باستثناء اللغة الافتراضية (مثل /dashboard، /fr/dashboard).
|
|
211
|
+
* - "prefix-all": يضيف بادئة لجميع اللغات (مثل /en/dashboard، /fr/dashboard).
|
|
212
|
+
* - "no-prefix": لا توجد لغة في عنوان URL.
|
|
213
|
+
* - "search-params": يستخدم ?locale=...
|
|
214
|
+
* الافتراضي: "prefix-no-default"
|
|
185
215
|
*/
|
|
186
216
|
mode: "prefix-no-default",
|
|
187
217
|
|
|
188
218
|
/**
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
219
|
+
* مكان تخزين اللغة المختارة من قبل المستخدم.
|
|
220
|
+
* الخيارات: 'cookie' أو 'localStorage' أو 'sessionStorage' أو 'header' أو مصفوفة منها.
|
|
221
|
+
* الافتراضي: ['cookie', 'header']
|
|
192
222
|
*/
|
|
193
223
|
storage: ["cookie", "header"],
|
|
194
224
|
|
|
195
225
|
/**
|
|
196
|
-
*
|
|
197
|
-
*
|
|
226
|
+
* المسار الأساسي لعناوين URL للتطبيق.
|
|
227
|
+
* الافتراضي: ""
|
|
198
228
|
*/
|
|
199
229
|
basePath: "",
|
|
200
230
|
|
|
201
231
|
/**
|
|
202
|
-
*
|
|
232
|
+
* قواعد إعادة كتابة URL مخصصة لمسارات محددة لكل لغة.
|
|
203
233
|
*/
|
|
204
234
|
rewrite: nextjsRewrite({
|
|
205
235
|
"/[locale]/about": {
|
|
@@ -210,130 +240,130 @@ const config: IntlayerConfig = {
|
|
|
210
240
|
},
|
|
211
241
|
|
|
212
242
|
/**
|
|
213
|
-
*
|
|
243
|
+
* الإعدادات المتعلقة بالبحث عن ملفات المحتوى ومعالجتها.
|
|
214
244
|
*/
|
|
215
245
|
content: {
|
|
216
246
|
/**
|
|
217
|
-
*
|
|
218
|
-
*
|
|
247
|
+
* امتدادات الملفات لمسح القواميس.
|
|
248
|
+
* الافتراضي: ['.content.ts', '.content.js', '.content.json' وغيرها]
|
|
219
249
|
*/
|
|
220
250
|
fileExtensions: [".content.ts", ".content.js", ".content.json"],
|
|
221
251
|
|
|
222
252
|
/**
|
|
223
|
-
*
|
|
224
|
-
*
|
|
253
|
+
* المجلدات التي توجد بها ملفات .content.
|
|
254
|
+
* الافتراضي: ["."]
|
|
225
255
|
*/
|
|
226
256
|
contentDir: ["src"],
|
|
227
257
|
|
|
228
258
|
/**
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
259
|
+
* مكان وجود الكود المصدري.
|
|
260
|
+
* يستخدم لتحسين البناء وتحويل الكود.
|
|
261
|
+
* الافتراضي: ["."]
|
|
232
262
|
*/
|
|
233
263
|
codeDir: ["src"],
|
|
234
264
|
|
|
235
265
|
/**
|
|
236
|
-
*
|
|
237
|
-
*
|
|
266
|
+
* الأنماط المستبعدة من المسح.
|
|
267
|
+
* الافتراضي: ['node_modules', '.intlayer' وغيرها]
|
|
238
268
|
*/
|
|
239
269
|
excludedPath: ["node_modules"],
|
|
240
270
|
|
|
241
271
|
/**
|
|
242
|
-
*
|
|
243
|
-
*
|
|
272
|
+
* ما إذا كان يجب مراقبة التغييرات وإعادة بناء القواميس أثناء التطوير.
|
|
273
|
+
* الافتراضي: true في وضع التطوير
|
|
244
274
|
*/
|
|
245
275
|
watch: true,
|
|
246
276
|
|
|
247
277
|
/**
|
|
248
|
-
*
|
|
278
|
+
* الأمر المستخدم لتنسيق ملفات .content المنشأة حديثًا / المحدثة.
|
|
249
279
|
*/
|
|
250
280
|
formatCommand: 'npx prettier --write "{{file}}"',
|
|
251
281
|
},
|
|
252
282
|
|
|
253
283
|
/**
|
|
254
|
-
* Visual Editor
|
|
284
|
+
* تكوين المحرر المرئي (Visual Editor).
|
|
255
285
|
*/
|
|
256
286
|
editor: {
|
|
257
287
|
/**
|
|
258
|
-
*
|
|
259
|
-
*
|
|
288
|
+
* ما إذا كان المحرر المرئي ممكناً.
|
|
289
|
+
* الافتراضي: false
|
|
260
290
|
*/
|
|
261
291
|
enabled: true,
|
|
262
292
|
|
|
263
293
|
/**
|
|
264
|
-
* URL
|
|
265
|
-
*
|
|
294
|
+
* عنوان URL لتطبيقك للتحقق من المصدر (origin validation).
|
|
295
|
+
* الافتراضي: ""
|
|
266
296
|
*/
|
|
267
297
|
applicationURL: "http://localhost:3000",
|
|
268
298
|
|
|
269
299
|
/**
|
|
270
|
-
*
|
|
271
|
-
*
|
|
300
|
+
* منفذ خادم المحرر المحلي.
|
|
301
|
+
* الافتراضي: 8000
|
|
272
302
|
*/
|
|
273
303
|
port: 8000,
|
|
274
304
|
|
|
275
305
|
/**
|
|
276
|
-
*
|
|
277
|
-
*
|
|
306
|
+
* عنوان URL العام للمحرر.
|
|
307
|
+
* الافتراضي: "http://localhost:8000"
|
|
278
308
|
*/
|
|
279
309
|
editorURL: "http://localhost:8000",
|
|
280
310
|
|
|
281
311
|
/**
|
|
282
|
-
* Intlayer CMS
|
|
283
|
-
*
|
|
312
|
+
* عنوان URL لـ Intlayer CMS.
|
|
313
|
+
* الافتراضي: "https://app.intlayer.org"
|
|
284
314
|
*/
|
|
285
315
|
cmsURL: "https://app.intlayer.org",
|
|
286
316
|
|
|
287
317
|
/**
|
|
288
|
-
* Backend API
|
|
289
|
-
*
|
|
318
|
+
* عنوان URL لواجهة برمجة تطبيقات الخلفية (Backend API).
|
|
319
|
+
* الافتراضي: "https://back.intlayer.org"
|
|
290
320
|
*/
|
|
291
321
|
backendURL: "https://back.intlayer.org",
|
|
292
322
|
|
|
293
323
|
/**
|
|
294
|
-
*
|
|
295
|
-
*
|
|
324
|
+
* ما إذا كان يجب تمكين مزامنة المحتوى في الوقت الفعلي.
|
|
325
|
+
* الافتراضي: false
|
|
296
326
|
*/
|
|
297
327
|
liveSync: true,
|
|
298
328
|
},
|
|
299
329
|
|
|
300
330
|
/**
|
|
301
|
-
*
|
|
331
|
+
* إعدادات الترجمة والبناء القائم على الذكاء الاصطناعي.
|
|
302
332
|
*/
|
|
303
333
|
ai: {
|
|
304
334
|
/**
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
335
|
+
* مزود الذكاء الاصطناعي المراد استخدامه.
|
|
336
|
+
* الخيارات: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
|
|
337
|
+
* الافتراضي: 'openai'
|
|
308
338
|
*/
|
|
309
339
|
provider: "openai",
|
|
310
340
|
|
|
311
341
|
/**
|
|
312
|
-
*
|
|
342
|
+
* نموذج المزود المختار المراد استخدامه.
|
|
313
343
|
*/
|
|
314
344
|
model: "gpt-4o",
|
|
315
345
|
|
|
316
346
|
/**
|
|
317
|
-
*
|
|
347
|
+
* مفتاح واجهة برمجة تطبيقات المزود.
|
|
318
348
|
*/
|
|
319
349
|
apiKey: process.env.OPENAI_API_KEY,
|
|
320
350
|
|
|
321
351
|
/**
|
|
322
|
-
*
|
|
352
|
+
* سياق عالمي لتوجيه الذكاء الاصطناعي عند بناء الترجمات.
|
|
323
353
|
*/
|
|
324
|
-
applicationContext: "
|
|
354
|
+
applicationContext: "هذا تطبيق لحجز الرحلات.",
|
|
325
355
|
|
|
326
356
|
/**
|
|
327
|
-
*
|
|
357
|
+
* عنوان URL للمسار الأساسي لواجهة برمجة تطبيقات الذكاء الاصطناعي.
|
|
328
358
|
*/
|
|
329
359
|
baseURL: "http://localhost:3000",
|
|
330
360
|
|
|
331
361
|
/**
|
|
332
|
-
* تسلسل البيانات
|
|
362
|
+
* تسلسل البيانات (Data Serialization)
|
|
333
363
|
*
|
|
334
364
|
* الخيارات:
|
|
335
|
-
* - "json":
|
|
336
|
-
* - "toon":
|
|
365
|
+
* - "json": افتراضي، قوي؛ يستهلك المزيد من التوكنات.
|
|
366
|
+
* - "toon": يستهلك توكنات أقل، قد لا يكون متسقًا مثل JSON.
|
|
337
367
|
*
|
|
338
368
|
* الافتراضي: "json"
|
|
339
369
|
*/
|
|
@@ -341,126 +371,126 @@ const config: IntlayerConfig = {
|
|
|
341
371
|
},
|
|
342
372
|
|
|
343
373
|
/**
|
|
344
|
-
*
|
|
374
|
+
* إعدادات البناء والتحسين.
|
|
345
375
|
*/
|
|
346
376
|
build: {
|
|
347
377
|
/**
|
|
348
|
-
*
|
|
349
|
-
* - "auto":
|
|
350
|
-
* - "manual":
|
|
351
|
-
*
|
|
378
|
+
* وضع تنفيذ البناء.
|
|
379
|
+
* - "auto": يتم البناء تلقائيًا أثناء بناء التطبيق.
|
|
380
|
+
* - "manual": يتطلب أمر بناء صريح.
|
|
381
|
+
* الافتراضي: "auto"
|
|
352
382
|
*/
|
|
353
383
|
mode: "auto",
|
|
354
384
|
|
|
355
385
|
/**
|
|
356
|
-
*
|
|
357
|
-
*
|
|
386
|
+
* ما إذا كان يجب تحسين الحزمة النهائية عن طريق إزالة القواميس غير المستخدمة.
|
|
387
|
+
* الافتراضي: true في الإنتاج
|
|
358
388
|
*/
|
|
359
389
|
optimize: true,
|
|
360
390
|
|
|
361
391
|
/**
|
|
362
|
-
*
|
|
363
|
-
*
|
|
392
|
+
* تنسيق الإخراج لملفات القاموس المنشأة.
|
|
393
|
+
* الافتراضي: ['cjs', 'esm']
|
|
364
394
|
*/
|
|
365
|
-
outputFormat: ["esm"],
|
|
395
|
+
outputFormat: ["cjs", "esm"],
|
|
366
396
|
|
|
367
397
|
/**
|
|
368
|
-
*
|
|
369
|
-
*
|
|
398
|
+
* يحدد ما إذا كان ينبغي للبناء التحقق من أنواع TypeScript.
|
|
399
|
+
* الافتراضي: false
|
|
370
400
|
*/
|
|
371
401
|
checkTypes: false,
|
|
372
402
|
},
|
|
373
403
|
|
|
374
404
|
/**
|
|
375
|
-
* Logger
|
|
405
|
+
* تكوين المسجل (Logger).
|
|
376
406
|
*/
|
|
377
407
|
log: {
|
|
378
408
|
/**
|
|
379
|
-
*
|
|
380
|
-
* - "default":
|
|
381
|
-
* - "verbose":
|
|
382
|
-
* - "disabled":
|
|
383
|
-
*
|
|
409
|
+
* مستوى تسجيل البيانات.
|
|
410
|
+
* - "default": تسجيل البيانات القياسي.
|
|
411
|
+
* - "verbose": تسجيل بيانات تصحيح الأخطاء بعمق.
|
|
412
|
+
* - "disabled": تعطيل تسجيل البيانات.
|
|
413
|
+
* الافتراضي: "default"
|
|
384
414
|
*/
|
|
385
415
|
mode: "default",
|
|
386
416
|
|
|
387
417
|
/**
|
|
388
|
-
*
|
|
389
|
-
*
|
|
418
|
+
* البادئة لجميع رسائل السجل.
|
|
419
|
+
* الافتراضي: "[intlayer]"
|
|
390
420
|
*/
|
|
391
421
|
prefix: "[intlayer]",
|
|
392
422
|
},
|
|
393
423
|
|
|
394
424
|
/**
|
|
395
|
-
*
|
|
425
|
+
* تكوين النظام (للاستخدام المتقدم)
|
|
396
426
|
*/
|
|
397
427
|
system: {
|
|
398
428
|
/**
|
|
399
|
-
*
|
|
429
|
+
* المجلد لتخزين القواميس المترجمة.
|
|
400
430
|
*/
|
|
401
431
|
dictionariesDir: ".intlayer/dictionary",
|
|
402
432
|
|
|
403
433
|
/**
|
|
404
|
-
*
|
|
434
|
+
* المجلد لزيادة وحدات TypeScript (module augmentation).
|
|
405
435
|
*/
|
|
406
436
|
moduleAugmentationDir: ".intlayer/types",
|
|
407
437
|
|
|
408
438
|
/**
|
|
409
|
-
*
|
|
439
|
+
* المجلد لتخزين القواميس غير المدمجة (unmerged).
|
|
410
440
|
*/
|
|
411
441
|
unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
|
|
412
442
|
|
|
413
443
|
/**
|
|
414
|
-
*
|
|
444
|
+
* المجلد لتخزين أنواع القواميس.
|
|
415
445
|
*/
|
|
416
446
|
typesDir: ".intlayer/types",
|
|
417
447
|
|
|
418
448
|
/**
|
|
419
|
-
*
|
|
449
|
+
* المجلد الذي يتم فيه تخزين ملفات التطبيق الرئيسية.
|
|
420
450
|
*/
|
|
421
451
|
mainDir: ".intlayer/main",
|
|
422
452
|
|
|
423
453
|
/**
|
|
424
|
-
*
|
|
454
|
+
* المجلد الذي يتم فيه تخزين ملفات التكوين.
|
|
425
455
|
*/
|
|
426
456
|
configDir: ".intlayer/config",
|
|
427
457
|
|
|
428
458
|
/**
|
|
429
|
-
*
|
|
459
|
+
* المجلد الذي يتم فيه تخزين ملفات التخزين المؤقت.
|
|
430
460
|
*/
|
|
431
461
|
cacheDir: ".intlayer/cache",
|
|
432
462
|
},
|
|
433
463
|
|
|
434
464
|
/**
|
|
435
|
-
*
|
|
465
|
+
* تكوين المترجم (للاستخدام المتقدم)
|
|
436
466
|
*/
|
|
437
467
|
compiler: {
|
|
438
468
|
/**
|
|
439
|
-
*
|
|
469
|
+
* يحدد ما إذا كان ينبغي تمكين المترجم.
|
|
440
470
|
*
|
|
441
|
-
* - false
|
|
442
|
-
* - true
|
|
443
|
-
* - "build-only"
|
|
471
|
+
* - false: تعطيل المترجم.
|
|
472
|
+
* - true: تمكين المترجم.
|
|
473
|
+
* - "build-only": يتخطى المترجم أثناء التطوير ويسرع وقت البدء.
|
|
444
474
|
*
|
|
445
|
-
*
|
|
475
|
+
* الافتراضي: false
|
|
446
476
|
*/
|
|
447
477
|
enabled: true,
|
|
448
478
|
|
|
449
479
|
/**
|
|
450
|
-
* يحدد
|
|
480
|
+
* يحدد المسار لملفات الإخراج. يستبدل `outputDir`.
|
|
451
481
|
*
|
|
452
|
-
* - المسارات التي تبدأ بـ `./`
|
|
453
|
-
* - المسارات التي تبدأ بـ `/`
|
|
482
|
+
* - يتم حل المسارات التي تبدأ بـ `./` بالنسبة لمجلد المكون.
|
|
483
|
+
* - يتم حل المسارات التي تبدأ بـ `/` بالنسبة لجذر المشروع (`baseDir`).
|
|
454
484
|
*
|
|
455
|
-
* - تضمين متغير `{{locale}}` في المسار
|
|
485
|
+
* - سيؤدي تضمين متغير `{{locale}}` في المسار إلى إنشاء قواميس منفصلة لكل لغة.
|
|
456
486
|
*
|
|
457
|
-
*
|
|
487
|
+
* مثال:
|
|
458
488
|
* ```ts
|
|
459
489
|
* {
|
|
460
|
-
* // إنشاء
|
|
490
|
+
* // إنشاء ملفات .content.ts متعددة اللغات بجوار المكون
|
|
461
491
|
* output: ({ fileName, extension }) => `./${fileName}${extension}`,
|
|
462
492
|
*
|
|
463
|
-
* // output: './{{fileName}}{{extension}}', //
|
|
493
|
+
* // output: './{{fileName}}{{extension}}', // مكافئ باستخدام سلسلة قالب
|
|
464
494
|
* }
|
|
465
495
|
* ```
|
|
466
496
|
*
|
|
@@ -469,7 +499,7 @@ const config: IntlayerConfig = {
|
|
|
469
499
|
* // إنشاء ملفات JSON مركزية لكل لغة في جذر المشروع
|
|
470
500
|
* output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
|
|
471
501
|
*
|
|
472
|
-
* // output: '/locales/{{locale}}/{{key}}.content.json', //
|
|
502
|
+
* // output: '/locales/{{locale}}/{{key}}.content.json', // مكافئ باستخدام سلسلة قالب
|
|
473
503
|
* }
|
|
474
504
|
* ```
|
|
475
505
|
*
|
|
@@ -482,29 +512,29 @@ const config: IntlayerConfig = {
|
|
|
482
512
|
* - `componentExtension`: امتداد ملف المكون.
|
|
483
513
|
* - `format`: تنسيق القاموس.
|
|
484
514
|
* - `componentFormat`: تنسيق قاموس المكون.
|
|
485
|
-
* - `componentDirPath`: مسار
|
|
515
|
+
* - `componentDirPath`: مسار مجلد المكون.
|
|
486
516
|
*/
|
|
487
517
|
output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
|
|
488
518
|
|
|
489
519
|
/**
|
|
490
|
-
*
|
|
491
|
-
* بهذه الطريقة، يمكن تشغيل
|
|
520
|
+
* يحدد ما إذا كانت المكونات يجب أن تحفظ بعد تحويلها.
|
|
521
|
+
* بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق ثم حذفه.
|
|
492
522
|
*/
|
|
493
523
|
saveComponents: false,
|
|
494
524
|
|
|
495
525
|
/**
|
|
496
|
-
*
|
|
526
|
+
* إدراج المحتوى فقط في الملف المنشأ. مفيد لإخراج JSON لكل لغة لـ i18next أو ICU MessageFormat.
|
|
497
527
|
*/
|
|
498
528
|
noMetadata: false,
|
|
499
529
|
|
|
500
530
|
/**
|
|
501
531
|
* بادئة مفتاح القاموس
|
|
502
532
|
*/
|
|
503
|
-
dictionaryKeyPrefix: "", //
|
|
533
|
+
dictionaryKeyPrefix: "", // أضف بادئة اختيارية لمفاتيح القواميس المستخرجة
|
|
504
534
|
},
|
|
505
535
|
|
|
506
536
|
/**
|
|
507
|
-
*
|
|
537
|
+
* مخططات مخصصة (Schemas) للتحقق من صحة محتوى القاموس.
|
|
508
538
|
*/
|
|
509
539
|
schemas: {
|
|
510
540
|
"my-schema": z.object({
|
|
@@ -513,7 +543,7 @@ const config: IntlayerConfig = {
|
|
|
513
543
|
},
|
|
514
544
|
|
|
515
545
|
/**
|
|
516
|
-
* Plugins
|
|
546
|
+
* تكوين المكونات الإضافية (Plugins).
|
|
517
547
|
*/
|
|
518
548
|
plugins: [],
|
|
519
549
|
};
|
|
@@ -521,604 +551,372 @@ const config: IntlayerConfig = {
|
|
|
521
551
|
export default config;
|
|
522
552
|
````
|
|
523
553
|
|
|
524
|
-
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## مرجع التكوين (Configuration Reference)
|
|
525
557
|
|
|
526
|
-
تصف الأقسام التالية
|
|
558
|
+
تصف الأقسام التالية خيارات التكوين المختلفة المتاحة في Intlayer.
|
|
527
559
|
|
|
528
560
|
---
|
|
529
561
|
|
|
530
|
-
###
|
|
531
|
-
|
|
532
|
-
تعريف الإعدادات المتعلقة بالتدويل، بما في ذلك اللغات المتاحة واللغة الافتراضية للتطبيق.
|
|
533
|
-
|
|
534
|
-
#### الخصائص
|
|
535
|
-
|
|
536
|
-
- **locales**:
|
|
537
|
-
- _النوع_: `string[]`
|
|
538
|
-
- _الافتراضي_: `['en']`
|
|
539
|
-
- _الوصف_: قائمة اللغات المدعومة في التطبيق.
|
|
540
|
-
- _مثال_: `['en', 'fr', 'es']`
|
|
541
|
-
|
|
542
|
-
- **requiredLocales**:
|
|
543
|
-
- _النوع_: `string[]`
|
|
544
|
-
- _الافتراضي_: `[]`
|
|
545
|
-
- _الوصف_: قائمة اللغات المطلوبة في التطبيق.
|
|
546
|
-
- _مثال_: `[]`
|
|
547
|
-
- _ملاحظة_: إذا كانت فارغة، فكل اللغات مطلوبة في وضع `strict`.
|
|
548
|
-
- _ملاحظة_: تأكد من أن اللغات المطلوبة معرفة أيضًا في حقل `locales`.
|
|
549
|
-
- **strictMode**:
|
|
550
|
-
- _النوع_: `string`
|
|
551
|
-
- _الافتراضي_: `inclusive`
|
|
552
|
-
- _الوصف_: ضمان تنفيذ قوي للمحتوى الدولي باستخدام typescript.
|
|
553
|
-
- _ملاحظة_: إذا تم تعيينها إلى "strict"، فإن دالة الترجمة `t` ستتطلب تعريف كل اللغات المعلنة. إذا كانت لغة مفقودة، أو إذا لم يتم إعلان لغة في التهيئة الخاصة بك، فسيتم رمي خطأ.
|
|
554
|
-
- _ملاحظة_: إذا تم تعيينها إلى "inclusive"، فإن دالة الترجمة `t` ستتطلب تعريف كل اللغات المعلنة. إذا كانت لغة مفقودة، فستصدر تحذيرًا. لكنها ستقبل إذا كانت اللغة غير معلنة في التهيئة الخاصة بك، لكنها موجودة.
|
|
555
|
-
- _ملاحظة_: إذا تم تعيينها إلى "loose"، فإن دالة الترجمة `t` ستقبل أي لغة موجودة.
|
|
556
|
-
|
|
557
|
-
- **defaultLocale**:
|
|
558
|
-
- _النوع_: `string`
|
|
559
|
-
- _الافتراضي_: `'en'`
|
|
560
|
-
- _الوصف_: اللغة الافتراضية المستخدمة كخيار احتياطي إذا لم يتم العثور على اللغة المطلوبة.
|
|
561
|
-
- _مثال_: `'en'`
|
|
562
|
-
- _ملاحظة_: يُستخدم هذا لتحديد اللغة عندما لا يتم تحديد أي لغة في عنوان URL أو ملف تعريف الارتباط أو الرأس.
|
|
562
|
+
### تكوين التدويل (Internationalization Configuration)
|
|
563
563
|
|
|
564
|
-
|
|
564
|
+
يعرف الإعدادات المتعلقة بالتدويل، بما في ذلك اللغات المتاحة واللغة الافتراضية للتطبيق.
|
|
565
565
|
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
- **applicationURL**:
|
|
573
|
-
- _النوع_: `string`
|
|
574
|
-
- _الافتراضي_: `http://localhost:3000`
|
|
575
|
-
- _الوصف_: عنوان URL الخاص بالتطبيق. يُستخدم لتقييد أصل المحرر لأسباب أمنية.
|
|
576
|
-
- _مثال_:
|
|
577
|
-
- `'http://localhost:3000'`
|
|
578
|
-
- `'https://example.com'`
|
|
579
|
-
- `process.env.INTLAYER_EDITOR_URL`
|
|
580
|
-
- _ملاحظة_: عنوان URL الخاص بالتطبيق. يُستخدم لتقييد أصل المحرر لأسباب أمنية. إذا تم تعيينه إلى `'*'`، يكون المحرر متاحًا من أي أصل.
|
|
581
|
-
|
|
582
|
-
- **port**:
|
|
583
|
-
- _النوع_: `number`
|
|
584
|
-
- _الافتراضي_: `8000`
|
|
585
|
-
- _الوصف_: المنفذ المستخدم من قبل خادم المحرر المرئي.
|
|
586
|
-
|
|
587
|
-
- **editorURL**:
|
|
588
|
-
- _النوع_: `string`
|
|
589
|
-
- _الافتراضي_: `'http://localhost:8000'`
|
|
590
|
-
- _الوصف_: عنوان URL الخاص بخادم المحرر. يُستخدم لتقييد أصل المحرر لأسباب أمنية.
|
|
591
|
-
- `'http://localhost:3000'`
|
|
592
|
-
- `'https://example.com'`
|
|
593
|
-
- `process.env.INTLAYER_EDITOR_URL`
|
|
594
|
-
- _ملاحظة_: عنوان URL الخاص بخادم المحرر الذي يتم الوصول إليه من التطبيق. يُستخدم لتقييد الأصول التي يمكنها التفاعل مع التطبيق لأسباب أمنية. إذا تم تعيينه إلى `'*'`، يكون المحرر متاحًا من أي أصل. يجب تعيينه إذا تم تغيير المنفذ، أو إذا كان المحرر مستضافًا على نطاق مختلف.
|
|
595
|
-
|
|
596
|
-
- **cmsURL**:
|
|
597
|
-
- _النوع_: `string`
|
|
598
|
-
- _الافتراضي_: `'https://intlayer.org'`
|
|
599
|
-
- _الوصف_: عنوان URL الخاص بنظام إدارة المحتوى Intlayer.
|
|
600
|
-
- _مثال_: `'https://intlayer.org'`
|
|
601
|
-
- _ملاحظة_: عنوان URL الخاص بنظام إدارة المحتوى Intlayer.
|
|
602
|
-
|
|
603
|
-
- **backendURL**:
|
|
604
|
-
- _النوع_: `string`
|
|
605
|
-
- _الافتراضي_: `https://back.intlayer.org`
|
|
606
|
-
- _الوصف_: عنوان URL الخاص بخادم الواجهة الخلفية.
|
|
607
|
-
- _مثال_: `http://localhost:4000`
|
|
608
|
-
|
|
609
|
-
- **enabled**:
|
|
610
|
-
- _النوع_: `boolean`
|
|
611
|
-
- _الافتراضي_: `true`
|
|
612
|
-
- _الوصف_: يشير إلى ما إذا كان التطبيق يتفاعل مع المحرر المرئي.
|
|
613
|
-
- _مثال_: `process.env.NODE_ENV !== 'production'`
|
|
614
|
-
- _ملاحظة_: إذا كانت القيمة صحيحة، سيتمكن المحرر من التفاعل مع التطبيق. إذا كانت خاطئة، فلن يتمكن المحرر من التفاعل مع التطبيق. في جميع الأحوال، يمكن تمكين المحرر فقط من خلال المحرر المرئي. تعطيل المحرر لبيئات محددة هو وسيلة لتعزيز الأمان.
|
|
615
|
-
|
|
616
|
-
- **clientId**:
|
|
617
|
-
- _النوع_: `string` | `undefined`
|
|
618
|
-
- _الافتراضي_: `undefined`
|
|
619
|
-
- _الوصف_: يسمح كل من clientId و clientSecret لحزم intlayer بالمصادقة مع الخادم الخلفي باستخدام مصادقة oAuth2. يتم استخدام رمز وصول للمصادقة على المستخدم المرتبط بالمشروع. للحصول على رمز وصول، انتقل إلى https://app.intlayer.org/project وأنشئ حسابًا.
|
|
620
|
-
- _مثال_: `true`
|
|
621
|
-
- _ملاحظة_: مهم: يجب الحفاظ على سرية clientId و clientSecret وعدم مشاركتهما علنًا. يرجى التأكد من الاحتفاظ بهما في مكان آمن، مثل متغيرات البيئة.
|
|
622
|
-
|
|
623
|
-
- **clientSecret**:
|
|
624
|
-
- _النوع_: `string` | `undefined`
|
|
625
|
-
- _الافتراضي_: `undefined`
|
|
626
|
-
- _الوصف_: يسمح كل من clientId و clientSecret لحزم intlayer بالمصادقة مع الخادم الخلفي باستخدام مصادقة oAuth2. يتم استخدام رمز وصول للمصادقة على المستخدم المرتبط بالمشروع. للحصول على رمز وصول، انتقل إلى https://app.intlayer.org/project وأنشئ حسابًا.
|
|
627
|
-
- _مثال_: `true`
|
|
628
|
-
- _ملاحظة_: مهم: يجب الحفاظ على سرية clientId و clientSecret وعدم مشاركتهما علنًا. يرجى التأكد من الاحتفاظ بهما في مكان آمن، مثل متغيرات البيئة.
|
|
629
|
-
|
|
630
|
-
- **dictionaryPriorityStrategy**:
|
|
631
|
-
- _النوع_: `string`
|
|
632
|
-
- _الافتراضي_: `'local_first'`
|
|
633
|
-
- _الوصف_: الاستراتيجية لتحديد أولوية القواميس في حالة وجود كل من القواميس المحلية والقواميس البعيدة. إذا تم تعيينها إلى `'distant_first'`، ستعطي التطبيق أولوية للقواميس البعيدة على القواميس المحلية. إذا تم تعيينها إلى `'local_first'`، ستعطي التطبيق أولوية للقواميس المحلية على القواميس البعيدة.
|
|
634
|
-
- _مثال_: `'distant_first'`
|
|
635
|
-
|
|
636
|
-
- **liveSync**:
|
|
637
|
-
- _النوع_: `boolean`
|
|
638
|
-
- _الافتراضي_: `false`
|
|
639
|
-
- _الوصف_: يشير إلى ما إذا كان يجب على خادم التطبيق إعادة تحميل محتوى التطبيق تلقائيًا عند اكتشاف تغيير في نظام إدارة المحتوى / المحرر المرئي / الخلفية.
|
|
640
|
-
- _مثال_: `true`
|
|
641
|
-
- _ملاحظة_: على سبيل المثال، عندما يتم إضافة قاموس جديد أو تحديثه، سيقوم التطبيق بتحديث المحتوى ليتم عرضه في الصفحة.
|
|
642
|
-
- _ملاحظة_: تحتاج المزامنة الحية إلى تعريض محتوى التطبيق على خادم آخر. هذا يعني أنه قد يؤثر قليلاً على أداء التطبيق. للحد من ذلك، نوصي باستضافة التطبيق وخادم المزامنة الحية على نفس الجهاز. أيضًا، يمكن أن يؤدي الجمع بين المزامنة الحية و`optimize` إلى تطبيق عدد كبير من الطلبات على خادم المزامنة الحية. اعتمادًا على البنية التحتية الخاصة بك، نوصي باختبار كلا الخيارين وتركيبتهما.
|
|
643
|
-
|
|
644
|
-
- **liveSyncPort**:
|
|
645
|
-
- _النوع_: `number`
|
|
646
|
-
- _الافتراضي_: `4000`
|
|
647
|
-
- _الوصف_: منفذ خادم المزامنة الحية.
|
|
648
|
-
- _مثال_: `4000`
|
|
649
|
-
- _ملاحظة_: منفذ خادم المزامنة الحية.
|
|
650
|
-
|
|
651
|
-
- **liveSyncURL**:
|
|
652
|
-
- _النوع_: `string`
|
|
653
|
-
- _الافتراضي_: `'http://localhost:{liveSyncPort}'`
|
|
654
|
-
- _الوصف_: عنوان URL الخاص بخادم المزامنة الحية.
|
|
655
|
-
- _مثال_: `'https://example.com'`
|
|
656
|
-
- _ملاحظة_: يشير إلى localhost بشكل افتراضي ولكن يمكن تغييره إلى أي عنوان URL في حالة وجود خادم مزامنة حية عن بُعد.
|
|
657
|
-
|
|
658
|
-
### تكوين الوسيط
|
|
659
|
-
|
|
660
|
-
الإعدادات التي تتحكم في سلوك الوسيط، بما في ذلك كيفية تعامل التطبيق مع ملفات تعريف الارتباط، والرؤوس، والبادئات في عناوين URL لإدارة اللغة.
|
|
661
|
-
|
|
662
|
-
#### الخصائص
|
|
663
|
-
|
|
664
|
-
- **headerName**:
|
|
665
|
-
- _النوع_: `string`
|
|
666
|
-
- _الافتراضي_: `'x-intlayer-locale'`
|
|
667
|
-
- _الوصف_: اسم رأس HTTP المستخدم لتحديد اللغة.
|
|
668
|
-
- _مثال_: `'x-custom-locale'`
|
|
669
|
-
- _ملاحظة_: هذا مفيد لتحديد اللغة بناءً على واجهة برمجة التطبيقات (API).
|
|
670
|
-
|
|
671
|
-
- **cookieName**:
|
|
672
|
-
- _النوع_: `string`
|
|
673
|
-
- _الافتراضي_: `'intlayer-locale'`
|
|
674
|
-
- _الوصف_: اسم ملف تعريف الارتباط المستخدم لتخزين اللغة.
|
|
675
|
-
- _مثال_: `'custom-locale'`
|
|
676
|
-
- _ملاحظة_: يُستخدم للحفاظ على اللغة عبر الجلسات.
|
|
677
|
-
|
|
678
|
-
- **prefixDefault**:
|
|
679
|
-
- _النوع_: `boolean`
|
|
680
|
-
- _الافتراضي_: `false`
|
|
681
|
-
- _الوصف_: ما إذا كان يجب تضمين اللغة الافتراضية في عنوان URL.
|
|
682
|
-
- _مثال_: `true`
|
|
683
|
-
- _ملاحظة_:
|
|
684
|
-
- إذا كانت القيمة `true` و `defaultLocale = 'en'`: المسار = `/en/dashboard` أو `/fr/dashboard`
|
|
685
|
-
- إذا كانت القيمة `false` و `defaultLocale = 'en'`: المسار = `/dashboard` أو `/fr/dashboard`
|
|
686
|
-
|
|
687
|
-
- **basePath**:
|
|
688
|
-
- _النوع_: `string`
|
|
689
|
-
- _الافتراضي_: `''`
|
|
690
|
-
- _الوصف_: المسار الأساسي لعناوين URL الخاصة بالتطبيق.
|
|
691
|
-
- _مثال_: `'/my-app'`
|
|
692
|
-
- _ملاحظة_:
|
|
693
|
-
- إذا كان التطبيق مستضافًا على `https://example.com/my-app`
|
|
694
|
-
- يكون المسار الأساسي هو `'/my-app'`
|
|
695
|
-
- سيكون عنوان URL هو `https://example.com/my-app/en`
|
|
696
|
-
- إذا لم يتم تعيين المسار الأساسي، سيكون عنوان URL هو `https://example.com/en`
|
|
697
|
-
|
|
698
|
-
- **rewrite**:
|
|
699
|
-
- _النوع_: `Record<string, StrictModeLocaleMap<string>>`
|
|
700
|
-
- _الافتراضي_: `undefined`
|
|
701
|
-
- _الوصف_: قواعد إعادة كتابة URL المخصصة التي تتجاوز وضع التوجيه الافتراضي لمسارات محددة. يسمح بتعريف مسارات محددة حسب اللغة تختلف عن سلوك التوجيه القياسي. يدعم معاملات المسار الديناميكية باستخدام بناء الجملة `[param]`.
|
|
702
|
-
- _مثال_:
|
|
703
|
-
```typescript
|
|
704
|
-
routing: {
|
|
705
|
-
mode: "prefix-no-default", // استراتيجية احتياطية
|
|
706
|
-
rewrite: nextjsRewrite({
|
|
707
|
-
"/[locale]/about": {
|
|
708
|
-
en: "/[locale]/about",
|
|
709
|
-
fr: "/[locale]/a-propos",
|
|
710
|
-
},
|
|
711
|
-
"/[locale]/product/[slug]": {
|
|
712
|
-
en: "/[locale]/product/[slug]",
|
|
713
|
-
fr: "/[locale]/produit/[slug]",
|
|
714
|
-
},
|
|
715
|
-
"/[locale]/blog/[category]/[id]": {
|
|
716
|
-
en: "/[locale]/blog/[category]/[id]",
|
|
717
|
-
fr: "/[locale]/journal/[category]/[id]",
|
|
718
|
-
},
|
|
719
|
-
}),
|
|
720
|
-
}
|
|
721
|
-
```
|
|
722
|
-
- _ملاحظة_: قواعد إعادة الكتابة لها الأولوية على سلوك `mode` الافتراضي. إذا تطابق مسار مع قاعدة إعادة كتابة، سيتم استخدام المسار المترجم من تكوين إعادة الكتابة بدلاً من بادئة اللغة القياسية.
|
|
723
|
-
- _ملاحظة_: معاملات المسار الديناميكية مدعومة باستخدام ترميز الأقواس (على سبيل المثال، `[slug]`، `[id]`). يتم استخراج قيم المعاملات تلقائيًا من URL وإدراجها في المسار المعاد كتابته.
|
|
724
|
-
- _ملاحظة_: يعمل مع تطبيقات Next.js و Vite. ستعيد البرمجية الوسيطة/الوكيل كتابة الطلبات الواردة تلقائيًا لتطابق بنية المسار الداخلية.
|
|
725
|
-
- _ملاحظة_: عند إنشاء عناوين URL باستخدام `getLocalizedUrl()`، يتم تطبيق قواعد إعادة الكتابة تلقائيًا إذا تطابقت مع المسار المقدم.
|
|
726
|
-
- _Reference_ : لمزيد من المعلومات، راجع [إعادة كتابة عناوين URL المخصصة](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/custom_url_rewrites.md).
|
|
727
|
-
|
|
728
|
-
- **serverSetCookie**:
|
|
729
|
-
- _النوع_: `string`
|
|
730
|
-
- _الافتراضي_: `'always'`
|
|
731
|
-
- _الوصف_: قاعدة تعيين ملف تعريف الارتباط للغة على الخادم.
|
|
732
|
-
- _الخيارات_: `'always'`، `'never'`
|
|
733
|
-
- _مثال_: `'never'`
|
|
734
|
-
- _ملاحظة_: تتحكم فيما إذا كان يتم تعيين ملف تعريف الارتباط للغة عند كل طلب أو لا يتم تعيينه أبدًا.
|
|
735
|
-
|
|
736
|
-
- **noPrefix**:
|
|
737
|
-
- _النوع_: `boolean`
|
|
738
|
-
- _الافتراضي_: `false`
|
|
739
|
-
- _الوصف_: ما إذا كان يجب حذف بادئة اللغة من عناوين URL.
|
|
740
|
-
- _مثال_: `true`
|
|
741
|
-
- _ملاحظة_:
|
|
742
|
-
- إذا كانت القيمة `true`: لا توجد بادئة في عنوان URL
|
|
743
|
-
- إذا كانت القيمة `false`: توجد بادئة في عنوان URL
|
|
744
|
-
- مثال مع `basePath = '/my-app'`:
|
|
745
|
-
- إذا كانت `noPrefix = false`: سيكون عنوان URL هو `https://example.com/my-app/en`
|
|
746
|
-
- إذا كانت `noPrefix = true`: سيكون عنوان URL هو `https://example.com`
|
|
566
|
+
| الحقل | النوع | الوصف | مثال | ملاحظة |
|
|
567
|
+
| ----------------- | ---------- | --------------------------------------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
568
|
+
| `locales` | `string[]` | قائمة اللغات المدعومة في التطبيق. الافتراضي: `[Locales.ENGLISH]` | `['en', 'fr', 'es']` | |
|
|
569
|
+
| `requiredLocales` | `string[]` | قائمة اللغات الإلزامية في التطبيق. الافتراضي: `[]` | `[]` | إذا كانت فارغة، فستكون جميع اللغات إلزامية في وضع `strict`. تأكد من تعريف اللغات الإلزامية أيضًا في حقل `locales`. |
|
|
570
|
+
| `strictMode` | `string` | يضمن تنفيذًا قويًا للمحتوى المدوّل باستخدام TypeScript. الافتراضي: `inclusive` | | إذا كان `"strict"`: تتطلب وظيفة `t` تعريف كل لغة معلنة - يطرح خطأ إذا كانت أي منها مفقودة أو غير معلنة. إذا كان `"inclusive"`: يحذر من اللغات المفقودة ولكنه يقبل اللغات غير المعلنة الموجودة. إذا كان `"loose"`: يقبل أي لغة موجودة. |
|
|
571
|
+
| `defaultLocale` | `string` | اللغة الافتراضية المستخدمة كبديل إذا لم يتم العثور على اللغة المطلوبة. الافتراضي: `Locales.ENGLISH` | `'en'` | يستخدم لتحديد اللغة عندما لا يتم تحديد أي لغة في عنوان URL أو ملف تعريف الارتباط أو الرأس. |
|
|
747
572
|
|
|
748
573
|
---
|
|
749
574
|
|
|
750
|
-
### تكوين
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
575
|
+
### تكوين المحرر (Editor Configuration)
|
|
576
|
+
|
|
577
|
+
يعرف الإعدادات المتعلقة بالمحرر المدمج، بما في ذلك منفذ الخادم وحالة النشاط.
|
|
578
|
+
|
|
579
|
+
| الحقل | النوع | الوصف | مثال | ملاحظة |
|
|
580
|
+
| ---------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
581
|
+
| `applicationURL` | `string` | عنوان URL لتطبيقك. الافتراضي: `''` | `'http://localhost:3000'`، `'https://example.com'`، `process.env.INTLAYER_EDITOR_URL` | يستخدم لتقييد مصادر (origin) المحرر لأسباب أمنية. إذا تم تعيينه على `'*'`، يمكن الوصول إلى المحرر من أي مصدر. |
|
|
582
|
+
| `port` | `number` | المنفذ المستخدم من قبل خادم المحرر المرئي. الافتراضي: `8000` | | |
|
|
583
|
+
| `editorURL` | `string` | عنوان URL لخادم المحرر. الافتراضي: `'http://localhost:8000'` | `'http://localhost:3000'`، `'https://example.com'`، `process.env.INTLAYER_EDITOR_URL` | يستخدم لتقييد المصادر التي يمكنها التفاعل مع التطبيق. إذا تم تعيينه على `'*'`، يمكن الوصول إليه من أي مصدر. يجب تعيينه عند تغيير المنفذ أو إذا تم استضافة المحرر في مجال مختلف. |
|
|
584
|
+
| `cmsURL` | `string` | عنوان URL لـ Intlayer CMS. الافتراضي: `'https://intlayer.org'` | `'https://intlayer.org'` | |
|
|
585
|
+
| `backendURL` | `string` | عنوان URL لخادم الخلفية. الافتراضي: `https://back.intlayer.org` | `http://localhost:4000` | |
|
|
586
|
+
| `enabled` | `boolean` | يحدد ما إذا كان التطبيق سيتفاعل مع المحرر المرئي. الافتراضي: `true` | `process.env.NODE_ENV !== 'production'` | إذا كان `false`، لا يمكن للمحرر التفاعل مع التطبيق. يؤدي تعطيله لبيئات معينة إلى تعزيز الأمان. |
|
|
587
|
+
| `clientId` | `string | undefined` | يسمح لحزم intlayer بالمصادقة مع الخلفية باستخدام oAuth2. للحصول على توكن وصول، انتقل إلى [intlayer.org/project](https://app.intlayer.org/project). الافتراضي: `undefined` | | ابقِهِ سريًا؛ قم بتخزينه في متغيرات البيئة. |
|
|
588
|
+
| `clientSecret` | `string | undefined` | يسمح لحزم intlayer بالمصادقة مع الخلفية باستخدام oAuth2. للحصول على توكن وصول، انتقل إلى [intlayer.org/project](https://app.intlayer.org/project). الافتراضي: `undefined` | | ابقِهِ سريًا؛ قم بتخزينه في متغيرات البيئة. |
|
|
589
|
+
| `dictionaryPriorityStrategy` | `string` | استراتيجية تحديد أولويات القواميس عند وجود قواميس محلية وعن بُعد. الافتراضي: `'local_first'` | `'distant_first'` | `'distant_first'`: يعطي الأولوية للبعيد على المحلي. `'local_first'`: يعطي الأولوية للمحلي على البعيد. |
|
|
590
|
+
| `liveSync` | `boolean` | يحدد ما إذا كان يجب على خادم التطبيق إعادة تحميل المحتوى حرارياً عند اكتشاف تغيير في CMS / المحرر المرئي / الخلفية. الافتراضي: `true` | `true` | عند إضافة/تحديث قاموس، يقوم التطبيق بتحديث محتوى الصفحة. يقوم المزامنة الحية (Live sync) بالاستعانة بمصادر خارجية للمحتوى لخادم آخر، مما قد يؤثر قليلاً على الأداء. يوصى باستضافة كليهما على نفس الجهاز. |
|
|
591
|
+
| `liveSyncPort` | `number` | منفذ خادم المزامنة الحية. الافتراضي: `4000` | `4000` | |
|
|
592
|
+
| `liveSyncURL` | `string` | عنوان URL لخادم المزامنة الحية. الافتراضي: `'http://localhost:{liveSyncPort}'` | `'https://example.com'` | يشير إلى localhost بشكل افتراضي؛ يمكن تغييره إلى خادم مزامنة حية بعيد. |
|
|
593
|
+
|
|
594
|
+
### تكوين التوجيه (Routing Configuration)
|
|
595
|
+
|
|
596
|
+
الإعدادات التي تتحكم في سلوك التوجيه، بما في ذلك بنية URL، وتخزين اللغات، ومعالجة البرامج الوسيطة.
|
|
597
|
+
|
|
598
|
+
| الحقل | النوع | الوصف | مثال | ملاحظة |
|
|
599
|
+
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
600
|
+
| `mode` | `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'` | وضع توجيه URL لمعالجة اللغات. الافتراضي: `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) أو `/fr/dashboard` (fr). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: تتم معالجة اللغة بوسائل أخرى. `'search-params'`: يستخدم `/dashboard?locale=fr` | لا يؤثر على إدارة ملفات تعريف الارتباط أو تخزين اللغات. |
|
|
601
|
+
| `storage` | `false | 'cookie' | 'localStorage' | 'sessionStorage' | 'header' | CookiesAttributes | StorageAttributes | Array` | تكوين لتخزين اللغة على العميل. الافتراضي: `['cookie', 'header']` | `'localStorage'`, `[{ type: 'cookie', name: 'custom-locale', secure: true }]` | راجع جدول خيارات التخزين أدناه. |
|
|
602
|
+
| `basePath` | `string` | المسار الأساسي لعناوين URL للتطبيق. الافتراضي: `''` | `'/my-app'` | إذا كان التطبيق على `https://example.com/my-app` ، فإن basePath هو `'/my-app'` وتصبح عناوين URL مثل `https://example.com/my-app/en`. |
|
|
603
|
+
| `rewrite` | `Record<string, StrictModeLocaleMap<string>>` | قواعد إعادة كتابة URL مخصصة تتجاوز وضع التوجيه الافتراضي لمسارات محددة. يدعم المعلمات الديناميكية `[param]`. الافتراضي: `undefined` | انظر المثال أدناه | قواعد إعادة الكتابة لها الأولوية على `mode`. تعمل مع Next.js و Vite. تقوم `getLocalizedUrl()` بتطبيق القواعد المطابقة تلقائيًا. انظر [عمليات إعادة كتابة URL المخصصة](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/custom_url_rewrites.md). |
|
|
604
|
+
|
|
605
|
+
**مثال على `rewrite`**:
|
|
606
|
+
|
|
607
|
+
```typescript
|
|
608
|
+
routing: {
|
|
609
|
+
mode: "prefix-no-default", // استراتيجية التراجع
|
|
610
|
+
rewrite: nextjsRewrite({
|
|
611
|
+
"/about": {
|
|
612
|
+
en: "/about",
|
|
613
|
+
fr: "/a-propos",
|
|
614
|
+
},
|
|
615
|
+
"/product/[slug]": {
|
|
616
|
+
en: "/product/[slug]",
|
|
617
|
+
fr: "/produit/[slug]",
|
|
618
|
+
},
|
|
619
|
+
"/blog/[category]/[id]": {
|
|
620
|
+
en: "/blog/[category]/[id]",
|
|
621
|
+
fr: "/journal/[category]/[id]",
|
|
622
|
+
},
|
|
623
|
+
}),
|
|
624
|
+
}
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
#### خيارات التخزين (Storage Options)
|
|
628
|
+
|
|
629
|
+
| القيمة | الوصف | ملاحظة |
|
|
630
|
+
| ------------------ | ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
631
|
+
| `'cookie'` | يخزن اللغة في ملفات تعريف الارتباط - يمكن الوصول إليها من جانبي العميل والخادم. | للامتثال للقانون العام لحماية البيانات (GDPR) ، تأكد من الحصول على موافقة المستخدم المناسبة. قابلة للتخصيص عبر `CookiesAttributes` (`{ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }`). |
|
|
632
|
+
| `'localStorage'` | يخزن اللغة في المتصفح بدون تاريخ انتهاء - جانب العميل فقط. | لا تنتهي صلاحيتها إلا إذا تم مسحها صراحة. لا يمكن لبروكسي Intlayer الوصول إليها. قابلة للتخصيص عبر `StorageAttributes` (`{ type: 'localStorage', name: 'custom-locale' }`). |
|
|
633
|
+
| `'sessionStorage'` | يخزن اللغة طوال مدة جلسة الصفحة - جانب العميل فقط. | يتم مسحها عند إغلاق علامة التبويب/النافذة. لا يمكن لبروكسي Intlayer الوصول إليها. قابلة للتخصيص عبر `StorageAttributes` (`{ type: 'sessionStorage', name: 'custom-locale' }`). |
|
|
634
|
+
| `'header'` | يخزن أو ينقل اللغة عبر رؤوس HTTP - جانب الخادم فقط. | مفيد لمكالمات واجهة برمجة التطبيقات. لا يمكن لجانب العميل الوصول إليه. قابلة للتخصيص عبر `StorageAttributes` (`{ type: 'header', name: 'custom-locale' }`). |
|
|
635
|
+
|
|
636
|
+
#### سمات ملف تعريف الارتباط (Cookie Attributes)
|
|
637
|
+
|
|
638
|
+
عند استخدام التخزين عبر ملفات تعريف الارتباط ، يمكنك تكوين سمات إضافية:
|
|
639
|
+
|
|
640
|
+
| الحقل | النوع | الوصف |
|
|
641
|
+
| ---------- | ------------------------------------- | ----------------------------------------------------------- |
|
|
642
|
+
| `name` | `string` | اسم ملف تعريف الارتباط. الافتراضي: `'INTLAYER_LOCALE'` |
|
|
643
|
+
| `domain` | `string` | مجال ملف تعريف الارتباط. الافتراضي: `undefined` |
|
|
644
|
+
| `path` | `string` | مسار ملف تعريف الارتباط. الافتراضي: `undefined` |
|
|
645
|
+
| `secure` | `boolean` | يتطلب HTTPS. الافتراضي: `undefined` |
|
|
646
|
+
| `httpOnly` | `boolean` | علم HTTP-only. الافتراضي: `undefined` |
|
|
647
|
+
| `sameSite` | `'strict' | 'lax' | 'none'` | سياسة SameSite. |
|
|
648
|
+
| `expires` | `Date | number` | تاريخ انتهاء الصلاحية أو عدد الأيام. الافتراضي: `undefined` |
|
|
649
|
+
|
|
650
|
+
#### سمات تخزين اللغة (Locale Storage Attributes)
|
|
651
|
+
|
|
652
|
+
عند استخدام localStorage أو sessionStorage:
|
|
653
|
+
|
|
654
|
+
| الحقل | النوع | الوصف |
|
|
655
|
+
| ------ | ---------------------------------------- | ------------------------------------------------- |
|
|
656
|
+
| `type` | `'localStorage' | 'sessionStorage'` | نوع التخزين. |
|
|
657
|
+
| `name` | `string` | اسم مفتاح التخزين. الافتراضي: `'INTLAYER_LOCALE'` |
|
|
658
|
+
|
|
659
|
+
#### أمثلة التكوين
|
|
660
|
+
|
|
661
|
+
إليك بعض أمثلة التكوين الشائعة لبنية التوجيه الجديدة v7:
|
|
662
|
+
|
|
663
|
+
**التكوين الأساسي (افتراضي)**:
|
|
664
|
+
|
|
665
|
+
```typescript
|
|
666
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
667
|
+
// intlayer.config.ts
|
|
668
|
+
const config: IntlayerConfig = {
|
|
669
|
+
internationalization: {
|
|
670
|
+
locales: ["en", "fr", "es"],
|
|
671
|
+
defaultLocale: "en",
|
|
672
|
+
},
|
|
673
|
+
routing: {
|
|
674
|
+
mode: "prefix-no-default",
|
|
675
|
+
storage: "localStorage",
|
|
676
|
+
basePath: "",
|
|
677
|
+
},
|
|
678
|
+
};
|
|
679
|
+
|
|
680
|
+
export default config;
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
**تكوين متوافق مع GDPR**:
|
|
684
|
+
|
|
685
|
+
```typescript
|
|
686
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
687
|
+
// intlayer.config.ts
|
|
688
|
+
const config: IntlayerConfig = {
|
|
689
|
+
internationalization: {
|
|
690
|
+
locales: ["en", "fr", "es"],
|
|
691
|
+
defaultLocale: "en",
|
|
692
|
+
},
|
|
693
|
+
routing: {
|
|
694
|
+
mode: "prefix-no-default",
|
|
695
|
+
storage: [
|
|
696
|
+
{
|
|
697
|
+
type: "localStorage",
|
|
698
|
+
name: "user-locale",
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
type: "cookie",
|
|
702
|
+
name: "user-locale",
|
|
703
|
+
secure: true,
|
|
704
|
+
sameSite: "strict",
|
|
705
|
+
httpOnly: false,
|
|
706
|
+
},
|
|
707
|
+
],
|
|
708
|
+
basePath: "",
|
|
709
|
+
},
|
|
710
|
+
};
|
|
711
|
+
|
|
712
|
+
export default config;
|
|
713
|
+
```
|
|
714
|
+
|
|
715
|
+
**وضع معلمات البحث (Search Parameters Mode)**:
|
|
716
|
+
|
|
717
|
+
```typescript
|
|
718
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
719
|
+
// intlayer.config.ts
|
|
720
|
+
const config: IntlayerConfig = {
|
|
721
|
+
internationalization: {
|
|
722
|
+
locales: ["en", "fr", "es"],
|
|
723
|
+
defaultLocale: "en",
|
|
724
|
+
},
|
|
725
|
+
routing: {
|
|
726
|
+
mode: "search-params",
|
|
727
|
+
storage: "localStorage",
|
|
728
|
+
basePath: "",
|
|
729
|
+
},
|
|
730
|
+
};
|
|
731
|
+
|
|
732
|
+
export default config;
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
**وضع بدون بادئة (No Prefix Mode) مع تخزين مخصص**:
|
|
736
|
+
|
|
737
|
+
```typescript
|
|
738
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
739
|
+
// intlayer.config.ts
|
|
740
|
+
const config: IntlayerConfig = {
|
|
741
|
+
internationalization: {
|
|
742
|
+
locales: ["en", "fr", "es"],
|
|
743
|
+
defaultLocale: "en",
|
|
744
|
+
},
|
|
745
|
+
routing: {
|
|
746
|
+
mode: "no-prefix",
|
|
747
|
+
storage: {
|
|
748
|
+
type: "sessionStorage",
|
|
749
|
+
name: "app-locale",
|
|
750
|
+
},
|
|
751
|
+
basePath: "/my-app",
|
|
752
|
+
},
|
|
753
|
+
};
|
|
754
|
+
|
|
755
|
+
export default config;
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
**إعادة كتابة URL مخصص مع مسارات ديناميكية**:
|
|
759
|
+
|
|
760
|
+
```typescript
|
|
761
|
+
// intlayer.config.ts
|
|
762
|
+
import { nextjsRewrite } from "intlayer/routing";
|
|
763
|
+
|
|
764
|
+
const config: IntlayerConfig = {
|
|
765
|
+
internationalization: {
|
|
766
|
+
locales: ["en", "fr"],
|
|
767
|
+
defaultLocale: "en",
|
|
768
|
+
},
|
|
769
|
+
routing: {
|
|
770
|
+
mode: "prefix-no-default", // استراتيجية التراجع للمسارات غير المعاد كتابتها
|
|
771
|
+
storage: "cookie",
|
|
772
|
+
rewrite: nextjsRewrite({
|
|
773
|
+
"/about": {
|
|
774
|
+
en: "/about",
|
|
775
|
+
fr: "/a-propos",
|
|
776
|
+
},
|
|
777
|
+
"/product/[slug]": {
|
|
778
|
+
en: "/product/[slug]",
|
|
779
|
+
fr: "/produit/[slug]",
|
|
780
|
+
},
|
|
781
|
+
"/blog/[category]/[id]": {
|
|
782
|
+
en: "/blog/[category]/[id]",
|
|
783
|
+
fr: "/journal/[category]/[id]",
|
|
784
|
+
},
|
|
785
|
+
}),
|
|
786
|
+
},
|
|
787
|
+
};
|
|
788
|
+
|
|
789
|
+
export default config;
|
|
790
|
+
```
|
|
847
791
|
|
|
848
792
|
---
|
|
849
793
|
|
|
850
|
-
### تكوين
|
|
794
|
+
### تكوين المحتوى (Content Configuration)
|
|
851
795
|
|
|
852
|
-
الإعدادات المتعلقة
|
|
796
|
+
الإعدادات المتعلقة بمعالجة المحتوى داخل التطبيق (أسماء المجلدات ، امتدادات الملفات ، والتكوينات المشتقة).
|
|
853
797
|
|
|
854
|
-
|
|
798
|
+
| الحقل | النوع | الوصف | مثال | ملاحظة |
|
|
799
|
+
| ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
800
|
+
| `watch` | `boolean` | يحدد ما إذا كان يجب على Intlayer مراقبة التغييرات في ملفات إعلان المحتوى لإعادة بناء القواميس. الافتراضي: `process.env.NODE_ENV === 'development'` | | |
|
|
801
|
+
| `fileExtensions` | `string[]` | امتدادات الملفات المستخدمة لمسح ملفات إعلان المحتوى. الافتراضي: `['.content.ts', '.content.js', '.content.mjs', '.content.cjs', '.content.json', '.content.json5', '.content.jsonc']` | `['.content.ts', '.content.js']` | |
|
|
802
|
+
| `contentDir` | `string[]` | مسارات المجلدات التي توجد بها ملفات إعلان المحتوى. الافتراضي: `['.']` | `['src/content']` | |
|
|
803
|
+
| `codeDir` | `string[]` | مسارات المجلدات التي توجد بها ملفات الكود المصدري لتطبيقك. الافتراضي: `['.']` | `['src']` | يستخدم لتحسين البناء وضمان تطبيق تحويل الكود وإعادة التحميل الحراري فقط على الملفات الضرورية. |
|
|
804
|
+
| `excludedPath` | `string[]` | المسارات المستبعدة من مسح المحتوى. الافتراضي: `['node_modules', '.intlayer', '.next', 'dist', 'build']` | `['src/styles']` | |
|
|
805
|
+
| `formatCommand` | `string` | الأمر الذي سيتم تشغيله لتنسيق ملفات المحتوى المنشأة حديثًا أو المحدثة. الافتراضي: `undefined` | `'npx prettier --write "{{file}}"'` | يستخدم أثناء استخراج المحتوى أو عبر المحرر المرئي. |
|
|
855
806
|
|
|
856
|
-
|
|
857
|
-
- _النوع_: `string`
|
|
858
|
-
- _الافتراضي_: `process.cwd()`
|
|
859
|
-
- _الوصف_: الدليل الأساسي للمشروع.
|
|
860
|
-
- _مثال_: `'/path/to/project'`
|
|
861
|
-
- _ملاحظة_: يُستخدم هذا لحل جميع الدلائل المتعلقة بـ Intlayer.
|
|
807
|
+
---
|
|
862
808
|
|
|
863
|
-
### تكوين القاموس
|
|
809
|
+
### تكوين القاموس (Dictionary Configuration)
|
|
864
810
|
|
|
865
|
-
الإعدادات التي تتحكم في عمليات
|
|
811
|
+
الإعدادات التي تتحكم في عمليات القواميس، بما في ذلك سلوك الملء التلقائي وإنشاء المحتوى.
|
|
866
812
|
|
|
867
813
|
يخدم تكوين القاموس هذا غرضين رئيسيين:
|
|
868
814
|
|
|
869
|
-
1. **القيم الافتراضية**: تحديد القيم الافتراضية عند إنشاء ملفات إعلان
|
|
870
|
-
2. **سلوك
|
|
871
|
-
|
|
872
|
-
لمزيد من المعلومات حول ملفات إعلان المحتوى وكيفية تطبيق قيم التكوين، راجع [
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
815
|
+
1. **القيم الافتراضية**: تحديد القيم الافتراضية عند إنشاء ملفات إعلان المحتوى.
|
|
816
|
+
2. **سلوك البدائل (Fallback)**: توفير قيم بديلة عندما لا يتم تعريف حقول محددة، مما يسمح لك بتعريف سلوك عمليات القاموس بشكل عالمي.
|
|
817
|
+
|
|
818
|
+
لمزيد من المعلومات حول ملفات إعلان المحتوى وكيفية تطبيق قيم التكوين، راجع [توثيق ملفات المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md).
|
|
819
|
+
|
|
820
|
+
| الحقل | النوع | الوصف | مثال | ملاحظة |
|
|
821
|
+
| --------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
822
|
+
| `fill` | `boolean | FilePathPattern | Partial<Record<Locale, boolean | FilePathPattern>>` | يتحكم في كيفية إنشاء ملفات إخراج الملء التلقائي (الترجمة بالذكاء الاصطناعي). الافتراضي: `true` | انظر المثال أدناه | `true`: المسار الافتراضي (نفس ملف المصدر). `false`: معطل. تنشئ قوالب السلسلة/الوظيفة ملفات لكل لغة. كائن لكل لغة: يتم تعيين كل لغة لنمطها الخاص؛ يؤدي `false` لتخطي تلك اللغة. يؤدي تضمين `{{locale}}` إلى بدء الإنشاء لكل لغة. الـ `fill` على مستوى القاموس له الأولوية دائماً على هذا التكوين العالمي. |
|
|
823
|
+
| `importMode` | `'static' | 'dynamic' | 'fetch'` | يتحكم في كيفية استيراد القواميس. الافتراضي: `'static'` | `'dynamic'` | `'static'`: يتم استيراده بشكل ثابت. `'dynamic'`: يتم استيراده بشكل ديناميكي عبر Suspense. `'fetch'`: يتم جلبه ديناميكيًا عبر واجهة برمجة تطبيقات Live Sync. لا يؤثر على `getIntlayer` أو `getDictionary` أو `useDictionary` وما إلى ذلك. |
|
|
824
|
+
| `location` | `'local' | 'remote' | 'hybrid' | string` | مكان تخزين القواميس. الافتراضي: `'local'` | `'remote'` | `'local'`: نظام الملفات. `'remote'`: Intlayer CMS. `'hybrid'`: كلاهما. |
|
|
825
|
+
| `contentAutoTransformation` | `boolean` | يحدد ما إذا كان يجب تحويل ملفات المحتوى تلقائيًا (مثل من Markdown إلى HTML). الافتراضي: `false` | `true` | مفيد لمعالجة حقول Markdown عبر @intlayer/markdown. |
|
|
826
|
+
|
|
827
|
+
**مثال على `fill`**:
|
|
828
|
+
|
|
829
|
+
```ts
|
|
830
|
+
dictionary: {
|
|
831
|
+
fill: {
|
|
832
|
+
en: '/locales/en/{{key}}.content.json',
|
|
833
|
+
fr: ({ key }) => `/locales/fr/${key}.content.json`,
|
|
834
|
+
es: false,
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
---
|
|
840
|
+
|
|
841
|
+
### تكوين الذكاء الاصطناعي (AI Configuration)
|
|
842
|
+
|
|
843
|
+
يعرف الإعدادات لميزات Intlayer التي تعمل بالذكاء الاصطناعي ، مثل بناء الترجمة.
|
|
844
|
+
|
|
845
|
+
| الحقل | النوع | الوصف | مثال | ملاحظة |
|
|
846
|
+
| -------------------- | ---------------------- | ------------------------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------------------------------- |
|
|
847
|
+
| `provider` | `string` | مزود الذكاء الاصطناعي المراد استخدامه. | `'openai'`، `'anthropic'`، `'googlevertex'` | |
|
|
848
|
+
| `model` | `string` | نموذج الذكاء الاصطناعي المراد استخدامه. | `'gpt-4o'`، `'claude-3-5-sonnet-20240620'` | |
|
|
849
|
+
| `apiKey` | `string` | مفتاح واجهة برمجة التطبيقات للمزود المختار. | `process.env.OPENAI_API_KEY` | |
|
|
850
|
+
| `applicationContext` | `string` | سياق إضافي حول تطبيقك لتحسين دقة ترجمة الذكاء الاصطناعي. | `'منصة تعليمية للأطفال.'` | |
|
|
851
|
+
| `baseURL` | `string` | عنوان URL اختياري للمسار الأساسي لمكالمات واجهة برمجة التطبيقات. | | مفيد إذا كنت تستخدم بروكسي أو نشر ذكاء اصطناعي محلي. |
|
|
852
|
+
| `dataSerialization` | `'json' | 'toon'` | يحدد كيفية إرسال البيانات إلى الذكاء الاصطناعي. الافتراضي: `'json'` | `'json'` | `'json'`: أكثر قوة ودقة. `'toon'`: يستهلك توكنات أقل ولكنه قد يكون أقل استقرارًا. |
|
|
853
|
+
|
|
854
|
+
---
|
|
855
|
+
|
|
856
|
+
### تكوين البناء (Build Configuration)
|
|
857
|
+
|
|
858
|
+
إعدادات عملية بناء وتحسين Intlayer.
|
|
859
|
+
|
|
860
|
+
| الحقل | النوع | الوصف | مثال | ملاحظة |
|
|
861
|
+
| -------------- | ------------------------ | ------------------------------------------------------------------------------------------------ | ---- | ------ |
|
|
862
|
+
| `mode` | `'auto' | 'manual'` | يحدد ما إذا كان يجب تشغيل Intlayer تلقائيًا أثناء خطوات ما قبل بناء التطبيق. الافتراضي: `'auto'` | | |
|
|
863
|
+
| `optimize` | `boolean` | يحدد ما إذا كان يجب تحسين القواميس المجمعة لوقت التشغيل. الافتراضي: `true` في الإنتاج | | |
|
|
864
|
+
| `outputFormat` | `('cjs' | 'esm')[]` | تنسيق الإخراج لملفات القاموس المنشأة. الافتراضي: `['cjs', 'esm']` | | |
|
|
865
|
+
| `checkTypes` | `boolean` | يحدد ما إذا كان يجب على Intlayer التحقق من الأنواع في الملفات المنشأة. الافتراضي: `false` | | |
|
|
866
|
+
|
|
867
|
+
---
|
|
868
|
+
|
|
869
|
+
### تكوين النظام (System Configuration)
|
|
870
|
+
|
|
871
|
+
هذه الإعدادات مخصصة لحالات الاستخدام المتقدمة والتكوين الداخلي لـ Intlayer.
|
|
872
|
+
|
|
873
|
+
| الحقل | النوع | الوصف | الافتراضي |
|
|
874
|
+
| ------------------------- | -------- | ---------------------------- | --------------------------------- |
|
|
875
|
+
| `dictionariesDir` | `string` | مجلد القواميس المجمعة. | `'.intlayer/dictionary'` |
|
|
876
|
+
| `moduleAugmentationDir` | `string` | مجلد زيادة وحدات TypeScript. | `'.intlayer/types'` |
|
|
877
|
+
| `unmergedDictionariesDir` | `string` | مجلد القواميس غير المدمجة. | `'.intlayer/unmerged_dictionary'` |
|
|
878
|
+
| `typesDir` | `string` | مجلد الأنواع المنشأة. | `'.intlayer/types'` |
|
|
879
|
+
| `mainDir` | `string` | مجلد ملف Intlayer الرئيسي. | `'.intlayer/main'` |
|
|
880
|
+
| `configDir` | `string` | مجلد ملفات التكوين المجمعة. | `'.intlayer/config'` |
|
|
881
|
+
| `cacheDir` | `string` | مجلد ملفات التخزين المؤقت. | `'.intlayer/cache'` |
|
|
892
882
|
|
|
893
883
|
---
|
|
894
884
|
|
|
895
|
-
###
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
- _مثال_: `default`
|
|
907
|
-
- _ملاحظة_: وضع المسجل. الوضع المفصل (verbose) يسجل معلومات أكثر، ويمكن استخدامه لأغراض التصحيح. الوضع المعطل (disabled) يعطل المسجل.
|
|
908
|
-
|
|
909
|
-
- **prefix**:
|
|
910
|
-
- _النوع_: `string`
|
|
911
|
-
- _الافتراضي_: `'[intlayer] '`
|
|
912
|
-
- _الوصف_: بادئة المسجل.
|
|
913
|
-
- _مثال_: `'[my custom prefix] '`
|
|
914
|
-
- _ملاحظة_: بادئة المسجل.
|
|
915
|
-
|
|
916
|
-
### تكوين الذكاء الاصطناعي
|
|
917
|
-
|
|
918
|
-
الإعدادات التي تتحكم في ميزات الذكاء الاصطناعي في Intlayer، بما في ذلك المزود، النموذج، ومفتاح API.
|
|
919
|
-
|
|
920
|
-
هذا التكوين اختياري إذا كنت مسجلاً في [لوحة تحكم Intlayer](https://app.intlayer.org/project) باستخدام مفتاح وصول. ستدير Intlayer تلقائيًا الحل الأكثر كفاءة وفعالية من حيث التكلفة لاحتياجاتك في الذكاء الاصطناعي. يضمن استخدام الخيارات الافتراضية صيانة أفضل على المدى الطويل حيث تقوم Intlayer بالتحديث المستمر لاستخدام النماذج الأكثر ملاءمة.
|
|
921
|
-
|
|
922
|
-
إذا كنت تفضل استخدام مفتاح API الخاص بك أو نموذج معين، يمكنك تعريف تكوين الذكاء الاصطناعي المخصص الخاص بك.
|
|
923
|
-
سيتم استخدام تكوين الذكاء الاصطناعي هذا على مستوى بيئة Intlayer الخاصة بك بشكل عام. ستستخدم أوامر CLI هذه الإعدادات كقيم افتراضية للأوامر (مثل `fill`)، وكذلك SDK، والمحرر المرئي، ونظام إدارة المحتوى (CMS). يمكنك تجاوز هذه القيم الافتراضية لحالات استخدام محددة باستخدام معلمات الأوامر.
|
|
924
|
-
|
|
925
|
-
يدعم Intlayer عدة مزودي ذكاء اصطناعي لزيادة المرونة والاختيار. المزودون المدعومون حاليًا هم:
|
|
926
|
-
|
|
927
|
-
- **OpenAI** (الافتراضي)
|
|
928
|
-
- **Anthropic Claude**
|
|
929
|
-
- **Mistral AI**
|
|
930
|
-
- **DeepSeek**
|
|
931
|
-
- **Google Gemini**
|
|
932
|
-
- **Meta Llama**
|
|
933
|
-
- **Ollama**
|
|
934
|
-
- **OpenRouter**
|
|
935
|
-
- **Alibaba Cloud**
|
|
936
|
-
- **Fireworks**
|
|
937
|
-
- **Hugging Face**
|
|
938
|
-
- **Groq**
|
|
939
|
-
- **Amazon Bedrock**
|
|
940
|
-
- **Google AI Studio**
|
|
941
|
-
- **Google Vertex**
|
|
942
|
-
- **Together.ai**
|
|
943
|
-
- **ollama**
|
|
944
|
-
|
|
945
|
-
#### الخصائص
|
|
946
|
-
|
|
947
|
-
- **provider**:
|
|
948
|
-
- _النوع_: `string`
|
|
949
|
-
- _الافتراضي_: `'openai'`
|
|
950
|
-
- _الوصف_: المزود المستخدم لميزات الذكاء الاصطناعي في Intlayer.
|
|
951
|
-
- _الخيارات_:`'openai'`, `'anthropic'`, `'mistral'`, `'deepseek'`, `'gemini'`, `'ollama'`, `'openrouter'`, `'alibaba'`, `'fireworks'`, `'groq'`, `'huggingface'`, `'bedrock'`, `'googleaistudio'`, `'googlevertex'`, `'togetherai'`
|
|
952
|
-
- _مثال_: `'anthropic'`
|
|
953
|
-
- _ملاحظة_: قد تتطلب مزودات مختلفة مفاتيح API مختلفة ولها نماذج تسعير مختلفة.
|
|
954
|
-
|
|
955
|
-
- **model**:
|
|
956
|
-
- _النوع_: `string`
|
|
957
|
-
- _الافتراضي_: لا شيء
|
|
958
|
-
- _الوصف_: النموذج المستخدم لميزات الذكاء الاصطناعي في Intlayer.
|
|
959
|
-
- _مثال_: `'gpt-4o-2024-11-20'`
|
|
960
|
-
- _ملاحظة_: يختلف النموذج المحدد المستخدم حسب المزود.
|
|
961
|
-
|
|
962
|
-
- **temperature**:
|
|
963
|
-
- _النوع_: `number`
|
|
964
|
-
- _الافتراضي_: لا شيء
|
|
965
|
-
- _الوصف_: تتحكم درجة الحرارة في عشوائية استجابات الذكاء الاصطناعي.
|
|
966
|
-
- _مثال_: `0.1`
|
|
967
|
-
- _ملاحظة_: درجة حرارة أعلى تجعل الذكاء الاصطناعي أكثر إبداعًا وأقل قابلية للتنبؤ.
|
|
968
|
-
|
|
969
|
-
- **apiKey**:
|
|
970
|
-
- _النوع_: `string`
|
|
971
|
-
- _الافتراضي_: لا شيء
|
|
972
|
-
- _الوصف_: مفتاح API الخاص بك للمزود المحدد.
|
|
973
|
-
- _مثال_: `process.env.OPENAI_API_KEY`
|
|
974
|
-
- _ملاحظة_: مهم: يجب الحفاظ على سرية مفاتيح API وعدم مشاركتها علنًا. يرجى التأكد من الاحتفاظ بها في مكان آمن، مثل متغيرات البيئة.
|
|
975
|
-
|
|
976
|
-
- **applicationContext**:
|
|
977
|
-
- _النوع_: `string`
|
|
978
|
-
- _الافتراضي_: لا شيء
|
|
979
|
-
- _الوصف_: يوفر سياقًا إضافيًا حول تطبيقك لنموذج الذكاء الاصطناعي، مما يساعده على توليد ترجمات أكثر دقة وملاءمة للسياق. يمكن أن يشمل ذلك معلومات حول مجال تطبيقك، الجمهور المستهدف، النغمة، أو المصطلحات الخاصة.
|
|
980
|
-
|
|
981
|
-
- **baseURL**:
|
|
982
|
-
- _النوع_: `string`
|
|
983
|
-
- _الافتراضي_: لا شيء
|
|
984
|
-
- _الوصف_: عنوان URL الأساسي لواجهة برمجة تطبيقات الذكاء الاصطناعي.
|
|
985
|
-
- _مثال_: `'https://api.openai.com/v1'`
|
|
986
|
-
- _ملاحظة_: يمكن استخدامه للإشارة إلى نقطة نهاية واجهة برمجة تطبيقات الذكاء الاصطناعي المحلية أو المخصصة.
|
|
987
|
-
|
|
988
|
-
- **dataSerialization**:
|
|
989
|
-
- _النوع_: `'json' | 'toon'`
|
|
990
|
-
- _الافتراضي_: `'json'`
|
|
991
|
-
- _الوصف_: تنسيق تسلسل البيانات لاستخدامه في ميزات الذكاء الاصطناعي لـ Intlayer.
|
|
992
|
-
- _مثال_: `'toon'`
|
|
993
|
-
- _ملاحظة_: `json`: قياسي وموثوق؛ يستهلك رموزًا أكثر. `toon`: رموز أقل، ولكنه أقل اتساقًا من JSON.
|
|
994
|
-
|
|
995
|
-
### إعدادات البناء
|
|
996
|
-
|
|
997
|
-
الإعدادات التي تتحكم في كيفية تحسين Intlayer وبناء التدويل في تطبيقك.
|
|
998
|
-
|
|
999
|
-
تنطبق خيارات البناء على الإضافات `@intlayer/babel` و `@intlayer/swc`.
|
|
1000
|
-
|
|
1001
|
-
> في وضع التطوير، يستخدم Intlayer الاستيراد الثابت للقواميس لتبسيط تجربة التطوير.
|
|
1002
|
-
|
|
1003
|
-
> عند التهيئة للتحسين، سيقوم Intlayer باستبدال استدعاءات القواميس لتحسين تقسيم الحزم، بحيث يقوم الحزمة النهائية باستيراد القواميس التي يتم استخدامها فقط.
|
|
1004
|
-
|
|
1005
|
-
#### الخصائص
|
|
1006
|
-
|
|
1007
|
-
- **mode**:
|
|
1008
|
-
- _النوع_: `'auto' | 'manual'`
|
|
1009
|
-
- _الافتراضي_: `'auto'`
|
|
1010
|
-
- _الوصف_: يتحكم في وضع البناء.
|
|
1011
|
-
- _المثال_: `'manual'`
|
|
1012
|
-
- _ملاحظة_: إذا كان 'auto'، سيتم تفعيل البناء تلقائيًا عند بناء التطبيق.
|
|
1013
|
-
- _ملاحظة_: إذا كان 'manual'، سيتم تعيين البناء فقط عند تنفيذ أمر البناء.
|
|
1014
|
-
- _ملاحظة_: يمكن استخدامه لتعطيل بناء القواميس، على سبيل المثال عندما يجب تجنب التنفيذ في بيئة Node.js.
|
|
1015
|
-
|
|
1016
|
-
- **checkTypes**:
|
|
1017
|
-
- _النوع_: `boolean`
|
|
1018
|
-
- _الافتراضي_: `false`
|
|
1019
|
-
- _الوصف_: يشير إلى ما إذا كان البناء يجب أن يتحقق من أنواع TypeScript ويسجل الأخطاء.
|
|
1020
|
-
- _ملاحظة_: هذا يمكن أن يبطئ عملية البناء.
|
|
1021
|
-
|
|
1022
|
-
- **optimize**:
|
|
1023
|
-
- _النوع_: `boolean`
|
|
1024
|
-
- _الافتراضي_: `process.env.NODE_ENV === 'production'`
|
|
1025
|
-
- _الوصف_: يتحكم فيما إذا كان يجب تحسين عملية البناء.
|
|
1026
|
-
- _المثال_: `true`
|
|
1027
|
-
- _ملاحظة_: عند التفعيل، سيقوم Intlayer باستبدال جميع استدعاءات القواميس لتحسين تقسيم الحزم. بهذه الطريقة، ستقوم الحزمة النهائية باستيراد القواميس المستخدمة فقط. ستبقى جميع الاستيرادات استيرادًا ثابتًا لتجنب المعالجة غير المتزامنة عند تحميل القواميس.
|
|
1028
|
-
- _ملاحظة_: سيقوم Intlayer باستبدال جميع استدعاءات `useIntlayer` بالنمط المحدد بواسطة خيار `importMode` و`getIntlayer` بـ `getDictionary`.
|
|
1029
|
-
- _ملاحظة_: يعتمد هذا الخيار على الإضافات `@intlayer/babel` و `@intlayer/swc`.
|
|
1030
|
-
- _ملاحظة_: تأكد من إعلان جميع المفاتيح بشكل ثابت في استدعاءات `useIntlayer`، على سبيل المثال `useIntlayer('navbar')`.
|
|
1031
|
-
|
|
1032
|
-
- **outputFormat**:
|
|
1033
|
-
- _النوع_: `'esm' | 'cjs'`
|
|
1034
|
-
- _الافتراضي_: `'esm'`
|
|
1035
|
-
- _الوصف_: يتحكم في تنسيق إخراج القواميس.
|
|
1036
|
-
- _المثال_: `'cjs'`
|
|
1037
|
-
- _ملاحظة_: تنسيق إخراج القواميس.
|
|
1038
|
-
|
|
1039
|
-
- **traversePattern**:
|
|
1040
|
-
- _النوع_: `string[]`
|
|
1041
|
-
- _الافتراضي_: `['**\/*.{js,ts,mjs,cjs,jsx,tsx}', '!**\/node_modules/**']`
|
|
1042
|
-
- _الوصف_: أنماط تحدد الملفات التي يجب استعراضها أثناء التحسين.
|
|
1043
|
-
- _مثال_: `['src/**\/*.{ts,tsx}', '../ui-library/**\/*.{ts,tsx}', '!**/node_modules/**']`
|
|
1044
|
-
- _ملاحظة_: استخدم هذا لتحديد التحسين لملفات الكود ذات الصلة وتحسين أداء البناء.
|
|
1045
|
-
- _ملاحظة_: سيتم تجاهل هذا الخيار إذا تم تعطيل `optimize`.
|
|
1046
|
-
- _ملاحظة_: استخدم نمط glob.
|
|
885
|
+
### تكوين المترجم (Compiler Configuration)
|
|
886
|
+
|
|
887
|
+
إعدادات مترجم Intlayer (`intlayer compiler`).
|
|
888
|
+
|
|
889
|
+
| الحقل | النوع | الوصف | الافتراضي |
|
|
890
|
+
| --------------------- | ------------------------ | -------------------------------------------------------------------- | --------- |
|
|
891
|
+
| `enabled` | `boolean` | يحدد ما إذا كان المترجم نشطًا. | `false` |
|
|
892
|
+
| `output` | `string | Function` | مسار الإخراج للقواميس المستخرجة. | |
|
|
893
|
+
| `saveComponents` | `boolean` | يحدد ما إذا كان يجب استبدال ملفات المصدر الأصلية بالإصدارات المحولة. | `false` |
|
|
894
|
+
| `noMetadata` | `boolean` | إذا كان `true` ، فلن يدرج المترجم بيانات وصفية في الملفات المنشأة. | `false` |
|
|
895
|
+
| `dictionaryKeyPrefix` | `string` | بادئة مفتاح قاموس اختيارية. | `''` |
|
|
1047
896
|
|
|
1048
897
|
---
|
|
1049
898
|
|
|
1050
|
-
### تكوين
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
- _ملاحظة_: إذا كان صحيحًا، سيقوم المترجم باستبدال الملفات الأصلية بالملفات المحولة. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
|
|
1075
|
-
|
|
1076
|
-
- **transformPattern**:
|
|
1077
|
-
- _النوع_: `string | string[]`
|
|
1078
|
-
- _الافتراضي_: `['**/*.{ts,tsx,jsx,js,cjs,mjs,svelte,vue}', '!**/node_modules/**']`
|
|
1079
|
-
- _الوصف_: الأنماط التي تحدد الملفات التي يجب استعراضها أثناء التحسين.
|
|
1080
|
-
- _المثال_: `['src/**/*.{ts,tsx}', '!**/node_modules/**']`
|
|
1081
|
-
- _ملاحظة_: استخدم هذا لتحديد التحسين لملفات الكود ذات الصلة وتحسين أداء البناء.
|
|
1082
|
-
|
|
1083
|
-
- **excludePattern**:
|
|
1084
|
-
- _النوع_: `string | string[]`
|
|
1085
|
-
- _الافتراضي_: `['**/node_modules/**']`
|
|
1086
|
-
- _الوصف_: الأنماط التي تحدد الملفات التي يجب استبعادها أثناء التحسين.
|
|
1087
|
-
- _المثال_: `['**/node_modules/**', '!**/node_modules/react/**']`
|
|
1088
|
-
|
|
1089
|
-
- **output**:
|
|
1090
|
-
- _النوع_: `FilePathPattern`
|
|
1091
|
-
- _الافتراضي_: `undefined`
|
|
1092
|
-
- _الوصف_: يحدد مسار ملفات الإخراج. يستبدل `outputDir`. يدعم المتغيرات الديناميكية عبر قالب سلسلة أو دالة. المتغيرات المدعومة: `{{fileName}}`, `{{key}}`, `{{locale}}`, `{{extension}}`, `{{componentFileName}}`, `{{componentExtension}}`, `{{format}}`, `{{componentFormat}}`, `{{componentDirPath}}`.
|
|
1093
|
-
- _ملاحظة_: يتم حل المسارات التي تبدأ بـ `./` بالنسبة لدليل المكون. يتم حل المسارات التي تبدأ بـ `/` بالنسبة لجذر المشروع (`baseDir`).
|
|
1094
|
-
- _ملاحظة_: تضمين المتغير `{{locale}}` في المسار سيمكن من توليد قواميس منفصلة حسب اللغة.
|
|
1095
|
-
- _مثال_:
|
|
1096
|
-
- **إنشاء ملفات متعددة اللغات بجانب المكون**:
|
|
1097
|
-
- سلسلة: `'./{{fileName}}{{extension}}'`
|
|
1098
|
-
- دالة: `({ fileName, extension }) => \`./${fileName}${extension}\``
|
|
1099
|
-
|
|
1100
|
-
- **إخراج ملفات JSON مركزية حسب اللغة**:
|
|
1101
|
-
- سلسلة: `'/locales/{{locale}}/{{key}}.content.json'`
|
|
1102
|
-
- دالة: `({ key, locale }) => \`/locales/${locale}/${key}.content.json\``
|
|
1103
|
-
|
|
1104
|
-
- **noMetadata**:
|
|
1105
|
-
- _النوع_: `boolean`
|
|
1106
|
-
- _الافتراضي_: `false`
|
|
1107
|
-
- _الوصف_: يشير إلى ما إذا كان سيتم حفظ البيانات الوصفية في الملف. إذا كان صحيحا، فلن يحفظ المجمّع البيانات الوصفية للقواميس (المفتاح، غلاف المحتوى). مفيد لمخرجات JSON i18next أو ICU MessageFormat لكل لغة.
|
|
1108
|
-
- _ملاحظة_: مفيد إذا تم استخدامه مع إضافة `loadJSON`.
|
|
1109
|
-
- _مثال_:
|
|
1110
|
-
إذا كان `true`:
|
|
1111
|
-
```json
|
|
1112
|
-
{
|
|
1113
|
-
"key": "value"
|
|
1114
|
-
}
|
|
1115
|
-
```
|
|
1116
|
-
إذا كان `false`:
|
|
1117
|
-
```json
|
|
1118
|
-
{
|
|
1119
|
-
"key": "value",
|
|
1120
|
-
"content": {
|
|
1121
|
-
"key": "value"
|
|
1122
|
-
}
|
|
1123
|
-
}
|
|
1124
|
-
```
|
|
899
|
+
### تكوين المسجل (Logger Configuration)
|
|
900
|
+
|
|
901
|
+
إعدادات لتخصيص إخراج سجل Intlayer.
|
|
902
|
+
|
|
903
|
+
| الحقل | النوع | الوصف | الافتراضي |
|
|
904
|
+
| -------- | ---------------------------------------------- | --------------------- | -------------- |
|
|
905
|
+
| `mode` | `'default' | 'verbose' | 'disabled'` | وضع تسجيل البيانات. | `'default'` |
|
|
906
|
+
| `prefix` | `string` | البادئة لرسائل السجل. | `'[intlayer]'` |
|
|
907
|
+
|
|
908
|
+
---
|
|
909
|
+
|
|
910
|
+
### المخططات المخصصة (Custom Schemas)
|
|
911
|
+
|
|
912
|
+
| الحقل | النوع | الوصف |
|
|
913
|
+
| --------- | --------------------------- | ------------------------------------------------- |
|
|
914
|
+
| `schemas` | `Record<string, ZodSchema>` | يسمح لك بتعريف مخططات Zod للتحقق من بنية قواميسك. |
|
|
915
|
+
|
|
916
|
+
---
|
|
917
|
+
|
|
918
|
+
### المكونات الإضافية (Plugins)
|
|
919
|
+
|
|
920
|
+
| الحقل | النوع | الوصف |
|
|
921
|
+
| --------- | ------------------ | ---------------------------------------------- |
|
|
922
|
+
| `plugins` | `IntlayerPlugin[]` | قائمة مكونات Intlayer الإضافية المراد تفعيلها. |
|