@intlayer/docs 8.1.5 → 8.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +18 -9
  2. package/dist/cjs/generated/docs.entry.cjs +1 -1
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +1 -1
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +2 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/compiler.md +26 -0
  9. package/docs/ar/intlayer_with_nextjs_compiler.md +481 -0
  10. package/docs/ar/intlayer_with_vite+react_compiler.md +369 -0
  11. package/docs/ar/readme.md +138 -110
  12. package/docs/de/compiler.md +26 -0
  13. package/docs/de/intlayer_with_nextjs_compiler.md +481 -0
  14. package/docs/de/intlayer_with_vite+react_compiler.md +369 -0
  15. package/docs/de/readme.md +152 -124
  16. package/docs/en/compiler.md +27 -0
  17. package/docs/en/intlayer_with_nextjs_compiler.md +481 -0
  18. package/docs/en/intlayer_with_vite+react_compiler.md +368 -0
  19. package/docs/en/readme.md +129 -105
  20. package/docs/en-GB/compiler.md +26 -0
  21. package/docs/en-GB/intlayer_with_nextjs_compiler.md +481 -0
  22. package/docs/en-GB/intlayer_with_vite+react_compiler.md +369 -0
  23. package/docs/en-GB/readme.md +134 -108
  24. package/docs/es/compiler.md +26 -0
  25. package/docs/es/intlayer_with_nextjs_compiler.md +481 -0
  26. package/docs/es/intlayer_with_vite+react_compiler.md +369 -0
  27. package/docs/es/readme.md +149 -121
  28. package/docs/fr/compiler.md +26 -0
  29. package/docs/fr/intlayer_with_nextjs_compiler.md +481 -0
  30. package/docs/fr/intlayer_with_vite+react_compiler.md +369 -0
  31. package/docs/fr/readme.md +150 -122
  32. package/docs/hi/compiler.md +26 -0
  33. package/docs/hi/intlayer_with_nextjs_compiler.md +481 -0
  34. package/docs/hi/intlayer_with_vite+react_compiler.md +370 -0
  35. package/docs/hi/readme.md +153 -125
  36. package/docs/id/compiler.md +26 -0
  37. package/docs/id/intlayer_with_nextjs_compiler.md +481 -0
  38. package/docs/id/intlayer_with_vite+react_compiler.md +369 -0
  39. package/docs/id/readme.md +133 -105
  40. package/docs/it/compiler.md +26 -0
  41. package/docs/it/intlayer_with_nextjs_compiler.md +481 -0
  42. package/docs/it/intlayer_with_vite+react_compiler.md +374 -0
  43. package/docs/it/readme.md +155 -127
  44. package/docs/ja/compiler.md +26 -0
  45. package/docs/ja/intlayer_with_nextjs_compiler.md +481 -0
  46. package/docs/ja/intlayer_with_vite+react_compiler.md +369 -0
  47. package/docs/ja/readme.md +152 -126
  48. package/docs/ko/compiler.md +26 -0
  49. package/docs/ko/intlayer_with_nextjs_compiler.md +481 -0
  50. package/docs/ko/intlayer_with_vite+react_compiler.md +369 -0
  51. package/docs/ko/readme.md +154 -126
  52. package/docs/pl/compiler.md +26 -0
  53. package/docs/pl/intlayer_with_nextjs_compiler.md +481 -0
  54. package/docs/pl/intlayer_with_vite+react_compiler.md +369 -0
  55. package/docs/pl/readme.md +134 -106
  56. package/docs/pt/compiler.md +27 -1
  57. package/docs/pt/intlayer_with_nextjs_compiler.md +481 -0
  58. package/docs/pt/intlayer_with_vite+react_compiler.md +374 -0
  59. package/docs/pt/readme.md +154 -126
  60. package/docs/ru/compiler.md +26 -0
  61. package/docs/ru/intlayer_with_nextjs_compiler.md +481 -0
  62. package/docs/ru/intlayer_with_vite+react_compiler.md +369 -0
  63. package/docs/ru/readme.md +137 -109
  64. package/docs/tr/compiler.md +26 -0
  65. package/docs/tr/intlayer_with_nextjs_compiler.md +481 -0
  66. package/docs/tr/intlayer_with_vite+react_compiler.md +375 -0
  67. package/docs/tr/readme.md +139 -111
  68. package/docs/uk/compiler.md +26 -0
  69. package/docs/uk/intlayer_with_nextjs_compiler.md +481 -0
  70. package/docs/uk/intlayer_with_vite+react_compiler.md +369 -0
  71. package/docs/uk/readme.md +133 -109
  72. package/docs/vi/compiler.md +27 -1
  73. package/docs/vi/intlayer_with_nextjs_compiler.md +481 -0
  74. package/docs/vi/intlayer_with_vite+react_compiler.md +369 -0
  75. package/docs/vi/readme.md +138 -110
  76. package/docs/zh/compiler.md +26 -0
  77. package/docs/zh/intlayer_with_nextjs_compiler.md +481 -0
  78. package/docs/zh/intlayer_with_vite+react_compiler.md +372 -0
  79. package/docs/zh/readme.md +148 -120
  80. package/package.json +7 -8
  81. package/src/generated/docs.entry.ts +40 -0
@@ -0,0 +1,369 @@
1
+ ---
2
+ createdAt: 2024-03-07
3
+ updatedAt: 2025-12-30
4
+ title: Vite و React i18n - تحويل تطبيق موجود إلى تطبيق متعدد اللغات (دليل i18n لعام 2026)
5
+ description: اكتشف كيفية جعل تطبيق Vite و React الحالي متعدد اللغات باستخدام مترجم Intlayer. اتبع الوثائق لتدويل (i18n) وترجمته باستخدام الذكاء الاصطناعي.
6
+ keywords:
7
+ - التدويل
8
+ - الوثائق
9
+ - Intlayer
10
+ - Vite
11
+ - React
12
+ - مترجم
13
+ - الذكاء الاصطناعي
14
+ slugs:
15
+ - doc
16
+ - environment
17
+ - vite-and-react
18
+ - compiler
19
+ - AI
20
+ applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
21
+ youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
22
+ history:
23
+ - version: 8.1.6
24
+ date: 2026-02-23
25
+ changes: الإصدار الأولي
26
+ ---
27
+
28
+ # كيفية جعل تطبيق Vite و React الحالي متعدد اللغات (i18n) لاحقًا (دليل i18n لعام 2026)
29
+
30
+ <Tabs defaultTab="video">
31
+ <Tab label="فيديو" value="video">
32
+
33
+ <iframe title="أفضل حل i18n لـ Vite و React؟ اكتشف Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
34
+
35
+ </Tab>
36
+ <Tab label="كود" value="code">
37
+
38
+ <iframe
39
+ src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-template?embed=1&ctl=1&file=intlayer.config.ts"
40
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
41
+ title="تجربة CodeSandbox - كيفية تدويل تطبيقك باستخدام Intlayer"
42
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
43
+ loading="lazy"
44
+ />
45
+
46
+ </Tab>
47
+ </Tabs>
48
+
49
+ شاهد [قالب التطبيق](https://github.com/aymericzip/intlayer-vite-react-template) على GitHub.
50
+
51
+ ## جدول المحتويات
52
+
53
+ <TOC/>
54
+
55
+ ## لماذا يصعب تدويل تطبيق موجود؟
56
+
57
+ إذا كنت قد حاولت يومًا إضافة لغات متعددة إلى تطبيق تم بناؤه للغة واحدة فقط، فأنت تعرف المعاناة. الأمر ليس مجرد "صعب" - إنه ممل. عليك فحص كل ملف على حدة، ومطاردة كل سلسلة نصية، ونقلها إلى ملفات قاموس منفصلة.
58
+
59
+ ثم يأتي الجزء الخطير: استبدال كل هذا النص بخطافات الكود (code hooks) دون كسر التخطيط أو المنطق. إنه نوع العمل الذي يوقف تطوير الميزات الجديدة لأسابيع ويشعرك بإعادة هيكلة (refactoring) لا تنتهي.
60
+
61
+ ## ما هو مترجم Intlayer؟
62
+
63
+ تم بناء **مترجم Intlayer** لتجاوز هذا العمل اليدوي الشاق. بدلاً من استخراج السلاسل يدويًا، يقوم المترجم بذلك نيابة عنك. يقوم بمسح الكود الخاص بك، والعثور على النص، واستخدام الذكاء الاصطناعي لإنشاء القواميس خلف الكواليس.
64
+ بعد ذلك، يقوم بتعديل الكود الخاص بك أثناء عملية البناء لحقن خطافات i18n اللازمة. بشكل أساسي، تواصل كتابة تطبيقك كما لو كان بلغة واحدة، ويتولى المترجم التحويل متعدد اللغات تلقائيًا.
65
+
66
+ > وثائق المترجم: [https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/compiler.md](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/compiler.md)
67
+
68
+ ### القيود
69
+
70
+ نظرًا لأن المترجم يقوم بتحليل الكود وتحويله (إدخال الخطافات وإنشاء القواميس) في **وقت الترجمة (compile time)**، فقد يؤدي ذلك إلى **إبطاء عملية بناء** تطبيقك.
71
+
72
+ للتخفيف من هذا التأثير أثناء التطوير، يمكنك تكوين المترجم ليعمل في وضع [`'build-only'`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md) أو تعطيله عندما لا تكون هناك حاجة إليه.
73
+
74
+ ---
75
+
76
+ ## دليل خطوة بخطوة لإعداد Intlayer في تطبيق Vite و React
77
+
78
+ ### الخطوة 1: تثبيت التبعيات
79
+
80
+ ثبّت الحزم اللازمة باستخدام npm:
81
+
82
+ ```bash packageManager="npm"
83
+ npm install intlayer react-intlayer
84
+ npm install vite-intlayer --save-dev
85
+ npx intlayer init
86
+ ```
87
+
88
+ ```bash packageManager="pnpm"
89
+ pnpm add intlayer react-intlayer
90
+ pnpm add vite-intlayer --save-dev
91
+ pnpm intlayer init
92
+ ```
93
+
94
+ ```bash packageManager="yarn"
95
+ yarn add intlayer react-intlayer
96
+ yarn add vite-intlayer --save-dev
97
+ yarn intlayer init
98
+ ```
99
+
100
+ ```bash packageManager="bun"
101
+ bun add intlayer react-intlayer
102
+ bun add vite-intlayer --dev
103
+ bunx intlayer init
104
+ ```
105
+
106
+ - **intlayer**
107
+ الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، والترجمة، و[إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md)، والتحويل البرمجي، و[أوامر CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/index.md).
108
+
109
+ - **react-intlayer**
110
+ الحزمة التي تدمج Intlayer مع تطبيق React. توفر مزودي السياق (context providers) والخطافات لتدويل React.
111
+
112
+ - **vite-intlayer**
113
+ تتضمن مكون Vite الإضافي لدمج Intlayer مع [حزمة Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط (middleware) لاكتشاف اللغة المفضلة للمستخدم، وإدارة ملفات تعريف الارتباط، ومعالجة إعادة توجيه URL.
114
+
115
+ ### الخطوة 2: تكوين مشروعك
116
+
117
+ أنشئ ملف تكوين لتحديد لغات تطبيقك:
118
+
119
+ ```typescript fileName="intlayer.config.ts"
120
+ import { Locales, type IntlayerConfig } from "intlayer";
121
+
122
+ const config: IntlayerConfig = {
123
+ internationalization: {
124
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.ARABIC],
125
+ defaultLocale: Locales.ENGLISH,
126
+ },
127
+ compiler: {
128
+ enabled: true, // يمكن ضبطه على 'build-only' للحد من التأثير على وضع التطوير
129
+ outputDir: "i18n",
130
+ dictionaryKeyPrefix: "", // لا توجد بادئة comp-
131
+ },
132
+ ai: {
133
+ provider: "openai",
134
+ model: "gpt-5-mini",
135
+ apiKey: process.env.OPEN_AI_API_KEY,
136
+ applicationContext: "هذا التطبيق هو تطبيق خرائط", // ملاحظة: يمكنك تخصيص وصف التطبيق هذا
137
+ },
138
+ };
139
+
140
+ export default config;
141
+ ```
142
+
143
+ > **ملاحظة**: تأكد من ضبط `OPEN_AI_API_KEY` في متغيرات البيئة الخاصة بك.
144
+
145
+ > من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL المترجمة، وإعادة توجيه الوسيط، وأسماء ملفات تعريف الارتباط، وموقع وامتداد إعلانات المحتوى الخاصة بك، وتعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، ارجع إلى [وثائق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md).
146
+
147
+ ### الخطوة 3: دمج Intlayer في تكوين Vite الخاص بك
148
+
149
+ أضف مكون intlayer الإضافي إلى التكوين الخاص بك.
150
+
151
+ ```typescript fileName="vite.config.ts"
152
+ import { defineConfig } from "vite";
153
+ import react from "@vitejs/plugin-react-swc";
154
+ import { intlayer, intlayerCompiler } from "vite-intlayer";
155
+
156
+ // https://vitejs.dev/config/
157
+ export default defineConfig({
158
+ plugins: [react(), intlayer(), intlayerCompiler()],
159
+ });
160
+ ```
161
+
162
+ > يُستخدم مكون `intlayer()` الإضافي لـ Vite لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ومراقبتها في وضع التطوير. يحدد متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، يوفر أسماء مستعارة (aliases) لتحسين الأداء.
163
+
164
+ > يُستخدم مكون `intlayerCompiler()` الإضافي لـ Vite لاستخراج المحتوى من المكون وكتابة ملفات `.content`.
165
+
166
+ ### الخطوة 4: ترجمة الكود الخاص بك
167
+
168
+ فقط اكتب مكوناتك بسلاسل نصية ثابتة بلغتك الافتراضية. يتولى المترجم الباقي.
169
+
170
+ مثال على كيف قد تبدو صفحتك:
171
+
172
+ <Tabs>
173
+ <Tab value="كود">
174
+
175
+ ```tsx fileName="src/App.tsx"
176
+ import { useState, type FC } from "react";
177
+ import reactLogo from "./assets/react.svg";
178
+ import viteLogo from "/vite.svg";
179
+ import "./App.css";
180
+ import { IntlayerProvider } from "react-intlayer";
181
+
182
+ const AppContent: FC = () => {
183
+ const [count, setCount] = useState(0);
184
+
185
+ return (
186
+ <>
187
+ <div>
188
+ <a href="https://vitejs.dev" target="_blank">
189
+ <img src={viteLogo} className="logo" alt="Vite logo" />
190
+ </a>
191
+ <a href="https://react.dev" target="_blank">
192
+ <img src={reactLogo} className="logo react" alt="React logo" />
193
+ </a>
194
+ </div>
195
+ <h1>Vite + React</h1>
196
+ <div className="card">
197
+ <button onClick={() => setCount((count) => count + 1)}>
198
+ count is {count}
199
+ </button>
200
+ <p>
201
+ Edit <code>src/App.tsx</code> and save to test HMR
202
+ </p>
203
+ </div>
204
+ <p className="read-the-docs">
205
+ Click on the Vite and React logos to learn more
206
+ </p>
207
+ </>
208
+ );
209
+ };
210
+
211
+ const App: FC = () => (
212
+ <IntlayerProvider>
213
+ <AppContent />
214
+ </IntlayerProvider>
215
+ );
216
+
217
+ export default App;
218
+ ```
219
+
220
+ </Tab>
221
+ <Tab value="المخرجات">
222
+
223
+ ```ts fileName="i18n/app-content.content.json"
224
+ {
225
+ key: "app-content",
226
+ content: {
227
+ nodeType: "translation",
228
+ translation: {
229
+ en: {
230
+ viteLogo: "Vite logo",
231
+ reactLogo: "React logo",
232
+ title: "Vite + React",
233
+ countButton: "count is",
234
+ editMessage: "Edit",
235
+ hmrMessage: "and save to test HMR",
236
+ readTheDocs: "Click on the Vite and React logos to learn more",
237
+ },
238
+ ar: {
239
+ viteLogo: "شعار Vite",
240
+ reactLogo: "شعار React",
241
+ title: "Vite + React",
242
+ countButton: "العدد هو",
243
+ editMessage: "عدّل",
244
+ hmrMessage: "واحفظ لاختبار HMR",
245
+ readTheDocs: "انقر على شعارات Vite و React لمعرفة المزيد",
246
+ },
247
+ }
248
+ }
249
+ }
250
+ ```
251
+
252
+ ```tsx fileName="src/App.tsx"
253
+ import { useState, type FC } from "react";
254
+ import reactLogo from "./assets/react.svg";
255
+ import viteLogo from "/vite.svg";
256
+ import "./App.css";
257
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
258
+
259
+ const AppContent: FC = () => {
260
+ const [count, setCount] = useState(0);
261
+ const content = useIntlayer("app-content");
262
+
263
+ return (
264
+ <>
265
+ <div>
266
+ <a href="https://vitejs.dev" target="_blank">
267
+ <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
268
+ </a>
269
+ <a href="https://react.dev" target="_blank">
270
+ <img
271
+ src={reactLogo}
272
+ className="logo react"
273
+ alt={content.reactLogo.value}
274
+ />
275
+ </a>
276
+ </div>
277
+ <h1>{content.title}</h1>
278
+ <div className="card">
279
+ <button onClick={() => setCount((count) => count + 1)}>
280
+ {content.countButton} {count}
281
+ </button>
282
+ <p>
283
+ {content.editMessage} <code>src/App.tsx</code> {content.hmrMessage}
284
+ </p>
285
+ </div>
286
+ <p className="read-the-docs">{content.readTheDocs}</p>
287
+ </>
288
+ );
289
+ };
290
+
291
+ const App: FC = () => (
292
+ <IntlayerProvider>
293
+ <AppContent />
294
+ </IntlayerProvider>
295
+ );
296
+
297
+ export default App;
298
+ ```
299
+
300
+ </Tab>
301
+ </Tabs>
302
+
303
+ - يُستخدم **`IntlayerProvider`** لتوفير اللغة للمكونات المتداخلة.
304
+
305
+ ### (اختياري) الخطوة 6: تغيير لغة المحتوى الخاص بك
306
+
307
+ لتغيير لغة المحتوى الخاص بك، يمكنك استخدام وظيفة `setLocale` التي يوفرها خطاف `useLocale`. تسمح لك هذه الوظيفة بضبط لغة التطبيق وتحديث المحتوى وفقًا لذلك.
308
+
309
+ ```tsx fileName="src/components/LocaleSwitcher.tsx"
310
+ import type { FC } from "react";
311
+ import { Locales } from "intlayer";
312
+ import { useLocale } from "react-intlayer";
313
+
314
+ const LocaleSwitcher: FC = () => {
315
+ const { setLocale } = useLocale();
316
+
317
+ return (
318
+ <button onClick={() => setLocale(Locales.ARABIC)}>
319
+ تغيير اللغة إلى العربية
320
+ </button>
321
+ );
322
+ };
323
+ ```
324
+
325
+ > لمعرفة المزيد حول خطاف `useLocale` ، راجع [الوثائق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useLocale.md).
326
+
327
+ ### (اختياري) المرحلة 7: ملء الترجمات المفقودة
328
+
329
+ يوفر Intlayer أداة CLI لمساعدتك في ملء الترجمات المفقودة. يمكنك استخدام الأمر `intlayer` لاختبار وملء الترجمات المفقودة من التعليمات البرمجية الخاصة بك.
330
+
331
+ ```bash
332
+ npx intlayer test # اختبار ما إذا كانت هناك ترجمات مفقودة
333
+ ```
334
+
335
+ ```bash
336
+ npx intlayer fill # ملء الترجمات المفقودة
337
+ ```
338
+
339
+ > لمزيد من التفاصيل، راجع [وثائق CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/ci.md)
340
+
341
+ ### تكوين Git
342
+
343
+ يوصى بتجاهل الملفات التي تم إنشاؤها بواسطة Intlayer. يتيح لك ذلك تجنب إضافتها إلى مستودع Git الخاص بك.
344
+
345
+ للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف `.gitignore` الخاص بك:
346
+
347
+ ```plaintext fileName=".gitignore"
348
+ # تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer
349
+ .intlayer
350
+ ```
351
+
352
+ ### إضافة VS Code
353
+
354
+ لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت إضافة **Intlayer VS Code Extension** الرسمية.
355
+
356
+ [التثبيت من VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
357
+
358
+ توفر هذه الإضافة:
359
+
360
+ - **الإكمال التلقائي** لمفاتيح الترجمة.
361
+ - **اكتشاف الأخطاء في الوقت الفعلي** للترجمات المفقودة.
362
+ - **معاينات مضمنة** للمحتوى المترجم.
363
+ - **إجراءات سريعة** لإنشاء وتحديث الترجمات بسهولة.
364
+
365
+ لمزيد من التفاصيل حول كيفية استخدام الإضافة، راجع [وثائق إضافة Intlayer لـ VS Code](https://intlayer.org/doc/vs-code-extension).
366
+
367
+ ### اذهب أبعد من ذلك
368
+
369
+ للمضي قدمًا، يمكنك تنفيذ [المحرر المرئي](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_visual_editor.md) أو جعل محتواك خارجيًا باستخدام [نظام إدارة المحتوى (CMS)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_CMS.md).