@intlayer/docs 8.3.0-canary.4 → 8.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/docs/ar/compiler.md +84 -49
  2. package/docs/ar/configuration.md +80 -37
  3. package/docs/ar/intlayer_with_nextjs_16.md +174 -1
  4. package/docs/ar/intlayer_with_nextjs_compiler.md +174 -1
  5. package/docs/ar/intlayer_with_react_router_v7.md +224 -1
  6. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +225 -1
  7. package/docs/ar/intlayer_with_svelte_kit.md +175 -2
  8. package/docs/ar/intlayer_with_tanstack.md +176 -1
  9. package/docs/ar/intlayer_with_vite+preact.md +174 -1
  10. package/docs/ar/intlayer_with_vite+react.md +174 -1
  11. package/docs/ar/intlayer_with_vite+solid.md +174 -1
  12. package/docs/ar/intlayer_with_vite+svelte.md +174 -1
  13. package/docs/ar/intlayer_with_vite+vue.md +174 -1
  14. package/docs/de/compiler.md +83 -48
  15. package/docs/de/configuration.md +434 -212
  16. package/docs/de/intlayer_with_nextjs_16.md +176 -1
  17. package/docs/de/intlayer_with_nextjs_compiler.md +106 -349
  18. package/docs/de/intlayer_with_react_router_v7.md +225 -2
  19. package/docs/de/intlayer_with_react_router_v7_fs_routes.md +221 -79
  20. package/docs/de/intlayer_with_svelte_kit.md +158 -2
  21. package/docs/de/intlayer_with_tanstack.md +159 -1
  22. package/docs/de/intlayer_with_vite+preact.md +157 -1
  23. package/docs/de/intlayer_with_vite+react.md +157 -1
  24. package/docs/de/intlayer_with_vite+solid.md +159 -3
  25. package/docs/de/intlayer_with_vite+svelte.md +157 -1
  26. package/docs/de/intlayer_with_vite+vue.md +157 -1
  27. package/docs/en/compiler.md +60 -33
  28. package/docs/en/configuration.md +80 -57
  29. package/docs/en/intlayer_with_nextjs_16.md +176 -0
  30. package/docs/en/intlayer_with_nextjs_compiler.md +179 -1
  31. package/docs/en/intlayer_with_react_router_v7.md +159 -0
  32. package/docs/en/intlayer_with_react_router_v7_fs_routes.md +159 -0
  33. package/docs/en/intlayer_with_svelte_kit.md +159 -0
  34. package/docs/en/intlayer_with_tanstack.md +160 -1
  35. package/docs/en/intlayer_with_vite+preact.md +159 -0
  36. package/docs/en/intlayer_with_vite+react.md +159 -0
  37. package/docs/en/intlayer_with_vite+solid.md +148 -27
  38. package/docs/en/intlayer_with_vite+svelte.md +159 -0
  39. package/docs/en/intlayer_with_vite+vue.md +142 -41
  40. package/docs/en-GB/compiler.md +66 -34
  41. package/docs/en-GB/configuration.md +78 -36
  42. package/docs/es/compiler.md +83 -48
  43. package/docs/es/configuration.md +429 -206
  44. package/docs/es/intlayer_with_adonisjs.md +1 -1
  45. package/docs/es/intlayer_with_express.md +1 -1
  46. package/docs/es/intlayer_with_fastify.md +1 -1
  47. package/docs/es/intlayer_with_hono.md +1 -1
  48. package/docs/es/intlayer_with_nestjs.md +1 -1
  49. package/docs/es/intlayer_with_nextjs_16.md +176 -3
  50. package/docs/es/intlayer_with_nextjs_compiler.md +175 -2
  51. package/docs/es/intlayer_with_nuxt.md +1 -1
  52. package/docs/es/intlayer_with_react_router_v7.md +227 -4
  53. package/docs/es/intlayer_with_react_router_v7_fs_routes.md +162 -4
  54. package/docs/es/intlayer_with_svelte_kit.md +158 -2
  55. package/docs/es/intlayer_with_tanstack.md +160 -2
  56. package/docs/es/intlayer_with_vite+preact.md +162 -6
  57. package/docs/es/intlayer_with_vite+react.md +160 -4
  58. package/docs/es/intlayer_with_vite+solid.md +163 -7
  59. package/docs/es/intlayer_with_vite+svelte.md +157 -1
  60. package/docs/es/intlayer_with_vite+vue.md +165 -9
  61. package/docs/fr/compiler.md +81 -46
  62. package/docs/fr/configuration.md +355 -134
  63. package/docs/fr/intlayer_with_adonisjs.md +1 -1
  64. package/docs/fr/intlayer_with_express.md +1 -1
  65. package/docs/fr/intlayer_with_fastify.md +1 -1
  66. package/docs/fr/intlayer_with_hono.md +1 -1
  67. package/docs/fr/intlayer_with_nestjs.md +1 -1
  68. package/docs/fr/intlayer_with_nextjs_16.md +183 -7
  69. package/docs/fr/intlayer_with_nextjs_compiler.md +179 -3
  70. package/docs/fr/intlayer_with_react_router_v7.md +229 -3
  71. package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +237 -6
  72. package/docs/fr/intlayer_with_svelte_kit.md +158 -2
  73. package/docs/fr/intlayer_with_tanstack.md +159 -1
  74. package/docs/fr/intlayer_with_vite+preact.md +164 -8
  75. package/docs/fr/intlayer_with_vite+react.md +162 -6
  76. package/docs/fr/intlayer_with_vite+solid.md +163 -7
  77. package/docs/fr/intlayer_with_vite+svelte.md +157 -1
  78. package/docs/fr/intlayer_with_vite+vue.md +164 -8
  79. package/docs/hi/compiler.md +81 -46
  80. package/docs/hi/configuration.md +87 -44
  81. package/docs/hi/intlayer_with_nextjs_16.md +174 -1
  82. package/docs/hi/intlayer_with_nextjs_compiler.md +174 -1
  83. package/docs/hi/intlayer_with_react_router_v7.md +224 -1
  84. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +225 -1
  85. package/docs/hi/intlayer_with_svelte_kit.md +158 -2
  86. package/docs/hi/intlayer_with_tanstack.md +159 -1
  87. package/docs/hi/intlayer_with_vite+preact.md +157 -1
  88. package/docs/hi/intlayer_with_vite+react.md +157 -1
  89. package/docs/hi/intlayer_with_vite+solid.md +157 -1
  90. package/docs/hi/intlayer_with_vite+svelte.md +157 -1
  91. package/docs/hi/intlayer_with_vite+vue.md +157 -1
  92. package/docs/id/compiler.md +84 -51
  93. package/docs/id/configuration.md +83 -45
  94. package/docs/id/intlayer_with_nextjs_16.md +174 -1
  95. package/docs/id/intlayer_with_nextjs_compiler.md +174 -1
  96. package/docs/id/intlayer_with_react_router_v7.md +224 -1
  97. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +225 -1
  98. package/docs/id/intlayer_with_svelte_kit.md +158 -2
  99. package/docs/id/intlayer_with_tanstack.md +159 -1
  100. package/docs/id/intlayer_with_vite+preact.md +157 -1
  101. package/docs/id/intlayer_with_vite+react.md +157 -1
  102. package/docs/id/intlayer_with_vite+solid.md +157 -1
  103. package/docs/id/intlayer_with_vite+svelte.md +157 -1
  104. package/docs/id/intlayer_with_vite+vue.md +157 -1
  105. package/docs/it/compiler.md +81 -46
  106. package/docs/it/configuration.md +426 -204
  107. package/docs/it/intlayer_with_nextjs_16.md +174 -1
  108. package/docs/it/intlayer_with_nextjs_compiler.md +174 -1
  109. package/docs/it/intlayer_with_react_router_v7.md +225 -2
  110. package/docs/it/intlayer_with_react_router_v7_fs_routes.md +226 -2
  111. package/docs/it/intlayer_with_svelte_kit.md +158 -2
  112. package/docs/it/intlayer_with_tanstack.md +159 -1
  113. package/docs/it/intlayer_with_vite+preact.md +157 -1
  114. package/docs/it/intlayer_with_vite+react.md +157 -1
  115. package/docs/it/intlayer_with_vite+solid.md +159 -3
  116. package/docs/it/intlayer_with_vite+svelte.md +157 -1
  117. package/docs/it/intlayer_with_vite+vue.md +157 -1
  118. package/docs/ja/compiler.md +94 -58
  119. package/docs/ja/configuration.md +88 -45
  120. package/docs/ja/intlayer_with_nextjs_16.md +174 -1
  121. package/docs/ja/intlayer_with_nextjs_compiler.md +174 -1
  122. package/docs/ja/intlayer_with_react_router_v7.md +184 -394
  123. package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +226 -2
  124. package/docs/ja/intlayer_with_svelte_kit.md +119 -595
  125. package/docs/ja/intlayer_with_tanstack.md +131 -642
  126. package/docs/ja/intlayer_with_vite+preact.md +111 -1231
  127. package/docs/ja/intlayer_with_vite+react.md +129 -1304
  128. package/docs/ja/intlayer_with_vite+solid.md +159 -3
  129. package/docs/ja/intlayer_with_vite+svelte.md +157 -1
  130. package/docs/ja/intlayer_with_vite+vue.md +157 -1
  131. package/docs/ko/compiler.md +88 -52
  132. package/docs/ko/configuration.md +87 -44
  133. package/docs/ko/intlayer_with_nextjs_16.md +174 -1
  134. package/docs/ko/intlayer_with_nextjs_compiler.md +174 -1
  135. package/docs/ko/intlayer_with_react_router_v7.md +225 -2
  136. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +226 -2
  137. package/docs/ko/intlayer_with_svelte_kit.md +158 -2
  138. package/docs/ko/intlayer_with_tanstack.md +159 -1
  139. package/docs/ko/intlayer_with_vite+preact.md +157 -1
  140. package/docs/ko/intlayer_with_vite+react.md +157 -1
  141. package/docs/ko/intlayer_with_vite+solid.md +159 -3
  142. package/docs/ko/intlayer_with_vite+svelte.md +157 -1
  143. package/docs/ko/intlayer_with_vite+vue.md +157 -1
  144. package/docs/pl/compiler.md +84 -51
  145. package/docs/pl/configuration.md +83 -37
  146. package/docs/pl/intlayer_with_nextjs_16.md +174 -1
  147. package/docs/pl/intlayer_with_nextjs_compiler.md +174 -1
  148. package/docs/pl/intlayer_with_react_router_v7.md +224 -1
  149. package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +225 -1
  150. package/docs/pl/intlayer_with_svelte_kit.md +158 -2
  151. package/docs/pl/intlayer_with_tanstack.md +159 -1
  152. package/docs/pl/intlayer_with_vite+preact.md +157 -1
  153. package/docs/pl/intlayer_with_vite+react.md +157 -1
  154. package/docs/pl/intlayer_with_vite+solid.md +157 -1
  155. package/docs/pl/intlayer_with_vite+svelte.md +157 -1
  156. package/docs/pl/intlayer_with_vite+vue.md +157 -1
  157. package/docs/pt/compiler.md +81 -46
  158. package/docs/pt/configuration.md +404 -194
  159. package/docs/pt/intlayer_with_nextjs_16.md +174 -1
  160. package/docs/pt/intlayer_with_nextjs_compiler.md +174 -1
  161. package/docs/pt/intlayer_with_react_router_v7.md +224 -1
  162. package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +225 -1
  163. package/docs/pt/intlayer_with_svelte_kit.md +158 -2
  164. package/docs/pt/intlayer_with_tanstack.md +159 -1
  165. package/docs/pt/intlayer_with_vite+preact.md +157 -1
  166. package/docs/pt/intlayer_with_vite+react.md +157 -1
  167. package/docs/pt/intlayer_with_vite+solid.md +157 -1
  168. package/docs/pt/intlayer_with_vite+svelte.md +157 -1
  169. package/docs/pt/intlayer_with_vite+vue.md +157 -1
  170. package/docs/ru/compiler.md +90 -57
  171. package/docs/ru/configuration.md +76 -46
  172. package/docs/ru/intlayer_with_nextjs_16.md +174 -1
  173. package/docs/ru/intlayer_with_nextjs_compiler.md +174 -1
  174. package/docs/ru/intlayer_with_react_router_v7.md +224 -1
  175. package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +225 -1
  176. package/docs/ru/intlayer_with_svelte_kit.md +158 -2
  177. package/docs/ru/intlayer_with_tanstack.md +159 -1
  178. package/docs/ru/intlayer_with_vite+preact.md +157 -1
  179. package/docs/ru/intlayer_with_vite+react.md +157 -1
  180. package/docs/ru/intlayer_with_vite+solid.md +157 -1
  181. package/docs/ru/intlayer_with_vite+svelte.md +157 -1
  182. package/docs/ru/intlayer_with_vite+vue.md +157 -1
  183. package/docs/tr/compiler.md +85 -52
  184. package/docs/tr/configuration.md +83 -40
  185. package/docs/tr/intlayer_with_nextjs_16.md +174 -1
  186. package/docs/tr/intlayer_with_nextjs_compiler.md +174 -1
  187. package/docs/tr/intlayer_with_react_router_v7.md +224 -1
  188. package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +225 -1
  189. package/docs/tr/intlayer_with_svelte_kit.md +158 -2
  190. package/docs/tr/intlayer_with_tanstack.md +159 -1
  191. package/docs/tr/intlayer_with_vite+preact.md +157 -1
  192. package/docs/tr/intlayer_with_vite+react.md +157 -1
  193. package/docs/tr/intlayer_with_vite+solid.md +157 -1
  194. package/docs/tr/intlayer_with_vite+svelte.md +157 -1
  195. package/docs/tr/intlayer_with_vite+vue.md +157 -1
  196. package/docs/uk/compiler.md +96 -61
  197. package/docs/uk/configuration.md +83 -37
  198. package/docs/uk/intlayer_with_nextjs_16.md +174 -1
  199. package/docs/uk/intlayer_with_nextjs_compiler.md +174 -1
  200. package/docs/uk/intlayer_with_react_router_v7.md +224 -1
  201. package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +225 -1
  202. package/docs/uk/intlayer_with_svelte_kit.md +157 -1
  203. package/docs/uk/intlayer_with_tanstack.md +159 -1
  204. package/docs/uk/intlayer_with_vite+preact.md +157 -1
  205. package/docs/uk/intlayer_with_vite+react.md +157 -1
  206. package/docs/uk/intlayer_with_vite+solid.md +157 -1
  207. package/docs/uk/intlayer_with_vite+svelte.md +157 -1
  208. package/docs/uk/intlayer_with_vite+vue.md +157 -1
  209. package/docs/vi/compiler.md +85 -50
  210. package/docs/vi/configuration.md +85 -39
  211. package/docs/vi/intlayer_with_nextjs_16.md +174 -1
  212. package/docs/vi/intlayer_with_nextjs_compiler.md +174 -1
  213. package/docs/vi/intlayer_with_react_router_v7.md +224 -1
  214. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +225 -1
  215. package/docs/vi/intlayer_with_svelte_kit.md +158 -2
  216. package/docs/vi/intlayer_with_tanstack.md +159 -1
  217. package/docs/vi/intlayer_with_vite+preact.md +157 -1
  218. package/docs/vi/intlayer_with_vite+react.md +157 -1
  219. package/docs/vi/intlayer_with_vite+solid.md +157 -1
  220. package/docs/vi/intlayer_with_vite+svelte.md +157 -1
  221. package/docs/vi/intlayer_with_vite+vue.md +157 -1
  222. package/docs/zh/compiler.md +84 -49
  223. package/docs/zh/configuration.md +80 -37
  224. package/docs/zh/intlayer_with_adonisjs.md +1 -1
  225. package/docs/zh/intlayer_with_express.md +1 -1
  226. package/docs/zh/intlayer_with_fastify.md +1 -1
  227. package/docs/zh/intlayer_with_hono.md +1 -1
  228. package/docs/zh/intlayer_with_nestjs.md +1 -1
  229. package/docs/zh/intlayer_with_nextjs_16.md +174 -1
  230. package/docs/zh/intlayer_with_nextjs_compiler.md +174 -1
  231. package/docs/zh/intlayer_with_react_router_v7.md +227 -4
  232. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +228 -4
  233. package/docs/zh/intlayer_with_svelte_kit.md +158 -2
  234. package/docs/zh/intlayer_with_tanstack.md +159 -1
  235. package/docs/zh/intlayer_with_vite+preact.md +159 -3
  236. package/docs/zh/intlayer_with_vite+react.md +157 -1
  237. package/docs/zh/intlayer_with_vite+solid.md +161 -5
  238. package/docs/zh/intlayer_with_vite+svelte.md +157 -1
  239. package/docs/zh/intlayer_with_vite+vue.md +158 -2
  240. package/package.json +6 -6
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-01-10
3
- updatedAt: 2026-01-10
3
+ updatedAt: 2026-03-12
4
4
  title: Next.js i18n - تحويل تطبيق Next.js الحالي إلى تطبيق متعدد اللغات في 2026
5
5
  description: اكتشف كيف تجعل تطبيق Next.js الحالي الخاص بك متعدد اللغات باستخدام مترجم Intlayer. اتبع التوثيق لتدويل (i18n) وترجمة تطبيقك باستخدام الذكاء الاصطناعي.
6
6
  keywords:
@@ -486,6 +486,179 @@ bun add @intlayer/swc --dev
486
486
  .intlayer
487
487
  ```
488
488
 
489
+ ### (اختياري) خطوة 1 : استخراج محتوى مكوناتك
490
+
491
+ إذا كان لديك قاعدة بيانات كود موجودة، فقد يكون تحويل آلاف الملفات مستهلكًا للوقت.
492
+
493
+ لتسهيل هذه العملية، يقترح Intlayer [مترجمًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/compiler.md) / [مستخرجًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/extract.md) لتحويل مكوناتك واستخراج المحتوى.
494
+
495
+ لإعداده، يمكنك إضافة قسم `compiler` في ملف `intlayer.config.ts` الخاص بك:
496
+
497
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
498
+ import { type IntlayerConfig } from "intlayer";
499
+
500
+ const config: IntlayerConfig = {
501
+ // ... بقية التكوين الخاص بك
502
+ compiler: {
503
+ /**
504
+ * يشير إلى ما إذا كان يجب تمكين المترجم.
505
+ */
506
+ enabled: true,
507
+
508
+ /**
509
+ * يحدد مسار ملفات المخرجات
510
+ */
511
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
512
+
513
+ /**
514
+ * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
515
+ */
516
+ saveComponents: false,
517
+
518
+ /**
519
+ * بادئة مفتاح القاموس
520
+ */
521
+ dictionaryKeyPrefix: "",
522
+ },
523
+ };
524
+
525
+ export default config;
526
+ ```
527
+
528
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
529
+ /** @type {import('intlayer').IntlayerConfig} */
530
+ const config = {
531
+ // ... بقية التكوين الخاص بك
532
+ compiler: {
533
+ /**
534
+ * يشير إلى ما إذا كان يجب تمكين المترجم.
535
+ */
536
+ enabled: true,
537
+
538
+ /**
539
+ * يحدد مسار ملفات المخرجات
540
+ */
541
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
542
+
543
+ /**
544
+ * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
545
+ */
546
+ saveComponents: false,
547
+
548
+ /**
549
+ * بادئة مفتاح القاموس
550
+ */
551
+ dictionaryKeyPrefix: "",
552
+ },
553
+ };
554
+
555
+ export default config;
556
+ ```
557
+
558
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
559
+ /** @type {import('intlayer').IntlayerConfig} */
560
+ const config = {
561
+ // ... بقية التكوين الخاص بك
562
+ compiler: {
563
+ /**
564
+ * يشير إلى ما إذا كان يجب تمكين المترجم.
565
+ */
566
+ enabled: true,
567
+
568
+ /**
569
+ * يحدد مسار ملفات المخرجات
570
+ */
571
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
572
+
573
+ /**
574
+ * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
575
+ */
576
+ saveComponents: false,
577
+
578
+ /**
579
+ * بادئة مفتاح القاموس
580
+ */
581
+ dictionaryKeyPrefix: "",
582
+ },
583
+ };
584
+
585
+ module.exports = config;
586
+ ```
587
+
588
+ <Tabs>
589
+ <Tab value='أمر الاستخراج'>
590
+
591
+ قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
592
+
593
+ ```bash packageManager="npm"
594
+ npx intlayer extract
595
+ ```
596
+
597
+ ```bash packageManager="pnpm"
598
+ pnpm intlayer extract
599
+ ```
600
+
601
+ ```bash packageManager="yarn"
602
+ yarn intlayer extract
603
+ ```
604
+
605
+ ```bash packageManager="bun"
606
+ bunx intlayer extract
607
+ ```
608
+
609
+ </Tab>
610
+ <Tab value='مترجم Babel'>
611
+
612
+ ```bash packageManager="npm"
613
+ npm install @intlayer/babel --save-dev
614
+ ```
615
+
616
+ ```bash packageManager="pnpm"
617
+ pnpm add @intlayer/babel --save-dev
618
+ ```
619
+
620
+ ```bash packageManager="yarn"
621
+ yarn add @intlayer/babel --save-dev
622
+ ```
623
+
624
+ ```bash packageManager="bun"
625
+ bun add @intlayer/babel --dev
626
+ ```
627
+
628
+ ```js fileName="babel.config.js"
629
+ const {
630
+ intlayerExtractBabelPlugin,
631
+ getExtractPluginOptions,
632
+ } = require("@intlayer/babel");
633
+
634
+ module.exports = {
635
+ presets: ["next/babel"],
636
+ plugins: [
637
+ // استخراج المحتوى من المكونات إلى القواميس
638
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
639
+ ],
640
+ };
641
+ ```
642
+
643
+ ```bash packageManager="npm"
644
+ npm run build # أو npm run dev
645
+ ```
646
+
647
+ ```bash packageManager="pnpm"
648
+ pnpm run build # Or pnpm run dev
649
+ ```
650
+
651
+ ```bash packageManager="yarn"
652
+ yarn build # Or yarn dev
653
+ ```
654
+
655
+ ```bash packageManager="bun"
656
+ bun run build # Or bun run dev
657
+ ```
658
+
659
+ </Tab>
660
+ </Tabs>
661
+
489
662
  ### ملحق VS Code
490
663
 
491
664
  لتحسين تجربة التطوير الخاصة بك مع Intlayer ، يمكنك تثبيت **ملحق Intlayer الرسمي لـ VS Code**.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-09-04
3
- updatedAt: 2025-12-30
3
+ updatedAt: 2026-03-12
4
4
  title: React Router v7 i18n - كيفية ترجمة تطبيق React Router v7 في 2026
5
5
  description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق React Router v7 الخاص بك باستخدام Intlayer. اتبع هذا الدليل الشامل لجعل تطبيقك متعدد اللغات مع توجيه يدعم اللغة المحلية.
6
6
  keywords:
@@ -506,6 +506,229 @@ export default function RootLayout() {
506
506
  }
507
507
  ```
508
508
 
509
+ ### (اختياري) خطوة 1 : استخراج محتوى مكوناتك
510
+
511
+ إذا كان لديك قاعدة بيانات كود موجودة، فقد يكون تحويل آلاف الملفات مستهلكًا للوقت.
512
+
513
+ لتسهيل هذه العملية، يقترح Intlayer [مترجمًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/compiler.md) / [مستخرجًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/extract.md) لتحويل مكوناتك واستخراج المحتوى.
514
+
515
+ لإعداده، يمكنك إضافة قسم `compiler` في ملف `intlayer.config.ts` الخاص بك:
516
+
517
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
518
+ import { type IntlayerConfig } from "intlayer";
519
+
520
+ const config: IntlayerConfig = {
521
+ // ... بقية التكوين الخاص بك
522
+ compiler: {
523
+ /**
524
+ * يشير إلى ما إذا كان يجب تمكين المترجم.
525
+ */
526
+ enabled: true,
527
+
528
+ /**
529
+ * يحدد مسار ملفات المخرجات
530
+ */
531
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
532
+
533
+ /**
534
+ * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
535
+ */
536
+ saveComponents: false,
537
+
538
+ /**
539
+ * بادئة مفتاح القاموس
540
+ */
541
+ dictionaryKeyPrefix: "",
542
+ },
543
+ };
544
+
545
+ export default config;
546
+ ```
547
+
548
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
549
+ /** @type {import('intlayer').IntlayerConfig} */
550
+ const config = {
551
+ // ... بقية التكوين الخاص بك
552
+ compiler: {
553
+ /**
554
+ * يشير إلى ما إذا كان يجب تمكين المترجم.
555
+ */
556
+ enabled: true,
557
+
558
+ /**
559
+ * يحدد مسار ملفات المخرجات
560
+ */
561
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
562
+
563
+ /**
564
+ * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
565
+ */
566
+ saveComponents: false,
567
+
568
+ /**
569
+ * بادئة مفتاح القاموس
570
+ */
571
+ dictionaryKeyPrefix: "",
572
+ },
573
+ };
574
+
575
+ export default config;
576
+ ```
577
+
578
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
579
+ /** @type {import('intlayer').IntlayerConfig} */
580
+ const config = {
581
+ // ... بقية التكوين الخاص بك
582
+ compiler: {
583
+ /**
584
+ * يشير إلى ما إذا كان يجب تمكين المترجم.
585
+ */
586
+ enabled: true,
587
+
588
+ /**
589
+ * يحدد مسار ملفات المخرجات
590
+ */
591
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
592
+
593
+ /**
594
+ * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
595
+ */
596
+ saveComponents: false,
597
+
598
+ /**
599
+ * بادئة مفتاح القاموس
600
+ */
601
+ dictionaryKeyPrefix: "",
602
+ },
603
+ };
604
+
605
+ module.exports = config;
606
+ ```
607
+
608
+ <Tabs>
609
+ <Tab value='أمر الاستخراج'>
610
+
611
+ قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
612
+
613
+ ```bash packageManager="npm"
614
+ npx intlayer extract
615
+ ```
616
+
617
+ ```bash packageManager="pnpm"
618
+ pnpm intlayer extract
619
+ ```
620
+
621
+ ```bash packageManager="yarn"
622
+ yarn intlayer extract
623
+ ```
624
+
625
+ ```bash packageManager="bun"
626
+ bunx intlayer extract
627
+ ```
628
+
629
+ </Tab>
630
+ <Tab value='مترجم Babel'>
631
+
632
+ قم بتحديث `vite.config.ts` لتضمين مكون `intlayerCompiler` الإضافي:
633
+
634
+ ```ts fileName="vite.config.ts"
635
+ import { defineConfig } from "vite";
636
+ import { intlayer, intlayerCompiler } from "vite-intlayer";
637
+
638
+ export default defineConfig({
639
+ plugins: [
640
+ intlayer(),
641
+ intlayerCompiler(), // يضيف المكون الإضافي للمترجم
642
+ ],
643
+ });
644
+ ```
645
+
646
+ ```bash packageManager="npm"
647
+ npm run build # أو npm run dev
648
+ ```
649
+
650
+ ```bash packageManager="pnpm"
651
+ pnpm run build # Or pnpm run dev
652
+ ```
653
+
654
+ ```bash packageManager="yarn"
655
+ yarn build # Or yarn dev
656
+ ```
657
+
658
+ ```bash packageManager="bun"
659
+ bun run build # Or bun run dev
660
+ ```
661
+
662
+ </Tab>
663
+ </Tabs>
664
+
665
+ ---
666
+
667
+ ## Configure TypeScript
668
+
669
+ Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
670
+
671
+ Ensure your TypeScript configuration includes the autogenerated types:
672
+
673
+ ```json5 fileName="tsconfig.json"
674
+ {
675
+ // ... your existing configurations
676
+ include: [
677
+ // ... your existing includes
678
+ ".intlayer/**/*.ts", // Include the auto-generated types
679
+ ],
680
+ }
681
+ ```
682
+
683
+ ---
684
+
685
+ ## Git Configuration
686
+
687
+ It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
688
+
689
+ To do this, you can add the following instructions to your `.gitignore` file:
690
+
691
+ ```plaintext fileName=".gitignore"
692
+ # Ignore the files generated by Intlayer
693
+ .intlayer
694
+ ```
695
+
696
+ ---
697
+
698
+ ## VS Code Extension
699
+
700
+ To improve your development experience with Intlayer, you can install the official **Intlayer VS Code Extension**.
701
+
702
+ [Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
703
+
704
+ This extension provides:
705
+
706
+ - **Autocompletion** for translation keys.
707
+ - **Real-time error detection** for missing translations.
708
+ - **Inline previews** of translated content.
709
+ - **Quick actions** to easily create and update translations.
710
+
711
+ For more details on how to use the extension, refer to the [Intlayer VS Code Extension documentation](https://intlayer.org/doc/vs-code-extension).
712
+
713
+ ---
714
+
715
+ ## Go Further
716
+
717
+ To go further, you can implement the [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) or externalize your content using the [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
718
+
719
+ ---
720
+
721
+ ## Documentation References
722
+
723
+ - [Intlayer Documentation](https://intlayer.org)
724
+ - [React Router v7 Documentation](https://reactrouter.com/)
725
+ - [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md)
726
+ - [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md)
727
+ - [Content Declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md)
728
+ - [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
729
+
730
+ This comprehensive guide provides everything you need to integrate Intlayer with React Router v7 for a fully internationalized application with locale-aware routing and TypeScript support.
731
+
509
732
  ### الخطوة 11: إضافة الوسيط (اختياري)
510
733
 
511
734
  يمكنك أيضًا استخدام `intlayerProxy` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا المكون الإضافي بالكشف تلقائيًا عن اللغة الحالية بناءً على عنوان URL وتعيين ملف تعريف الارتباط المناسب للغة. إذا لم يتم تحديد لغة، فسيحدد المكون الإضافي اللغة الأنسب بناءً على تفضيلات لغة متصفح المستخدم. إذا لم يتم الكشف عن أي لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-09-04
3
- updatedAt: 2025-12-30
3
+ updatedAt: 2026-03-12
4
4
  title: React Router v7 i18n - كيفية ترجمة تطبيق React Router v7 في 2026
5
5
  description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق React Router v7 الخاص بك باستخدام Intlayer. اتبع هذا الدليل الشامل لجعل تطبيقك متعدد اللغات مع توجيه يدعم اللغة المحلية.
6
6
  keywords:
@@ -452,6 +452,230 @@ export default function RootLayout() {
452
452
  }
453
453
  ```
454
454
 
455
+ ### (اختياري) خطوة 1 : استخراج محتوى مكوناتك
456
+
457
+ إذا كان لديك قاعدة بيانات كود موجودة، فقد يكون تحويل آلاف الملفات مستهلكًا للوقت.
458
+
459
+ لتسهيل هذه العملية، يقترح Intlayer [مترجمًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/compiler.md) / [مستخرجًا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/cli/extract.md) لتحويل مكوناتك واستخراج المحتوى.
460
+
461
+ لإعداده، يمكنك إضافة قسم `compiler` في ملف `intlayer.config.ts` الخاص بك:
462
+
463
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
464
+ import { type IntlayerConfig } from "intlayer";
465
+
466
+ const config: IntlayerConfig = {
467
+ // ... بقية التكوين الخاص بك
468
+ compiler: {
469
+ /**
470
+ * يشير إلى ما إذا كان يجب تمكين المترجم.
471
+ */
472
+ enabled: true,
473
+
474
+ /**
475
+ * يحدد مسار ملفات المخرجات
476
+ */
477
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
478
+
479
+ /**
480
+ * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
481
+ */
482
+ saveComponents: false,
483
+
484
+ /**
485
+ * بادئة مفتاح القاموس
486
+ */
487
+ dictionaryKeyPrefix: "",
488
+ },
489
+ };
490
+
491
+ export default config;
492
+ ```
493
+
494
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
495
+ /** @type {import('intlayer').IntlayerConfig} */
496
+ const config = {
497
+ // ... بقية التكوين الخاص بك
498
+ compiler: {
499
+ /**
500
+ * يشير إلى ما إذا كان يجب تمكين المترجم.
501
+ */
502
+ enabled: true,
503
+
504
+ /**
505
+ * يحدد مسار ملفات المخرجات
506
+ */
507
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
508
+
509
+ /**
510
+ * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
511
+ */
512
+ saveComponents: false,
513
+
514
+ /**
515
+ * بادئة مفتاح القاموس
516
+ */
517
+ dictionaryKeyPrefix: "",
518
+ },
519
+ };
520
+
521
+ export default config;
522
+ ```
523
+
524
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
525
+ /** @type {import('intlayer').IntlayerConfig} */
526
+ const config = {
527
+ // ... بقية التكوين الخاص بك
528
+ compiler: {
529
+ /**
530
+ * يشير إلى ما إذا كان يجب تمكين المترجم.
531
+ */
532
+ enabled: true,
533
+
534
+ /**
535
+ * يحدد مسار ملفات المخرجات
536
+ */
537
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
538
+
539
+ /**
540
+ * يشير إلى ما إذا كان يجب حفظ المكونات بعد تحويلها. بهذه الطريقة، يمكن تشغيل المترجم مرة واحدة فقط لتحويل التطبيق، ثم يمكن إزالته.
541
+ */
542
+ saveComponents: false,
543
+
544
+ /**
545
+ * بادئة مفتاح القاموس
546
+ */
547
+ dictionaryKeyPrefix: "",
548
+ },
549
+ };
550
+
551
+ module.exports = config;
552
+ ```
553
+
554
+ <Tabs>
555
+ <Tab value='أمر الاستخراج'>
556
+
557
+ قم بتشغيل المستخرج لتحويل مكوناتك واستخراج المحتوى
558
+
559
+ ```bash packageManager="npm"
560
+ npx intlayer extract
561
+ ```
562
+
563
+ ```bash packageManager="pnpm"
564
+ pnpm intlayer extract
565
+ ```
566
+
567
+ ```bash packageManager="yarn"
568
+ yarn intlayer extract
569
+ ```
570
+
571
+ ```bash packageManager="bun"
572
+ bunx intlayer extract
573
+ ```
574
+
575
+ </Tab>
576
+ <Tab value='مترجم Babel'>
577
+
578
+ قم بتحديث `vite.config.ts` لتضمين مكون `intlayerCompiler` الإضافي:
579
+
580
+ ```ts fileName="vite.config.ts"
581
+ import { defineConfig } from "vite";
582
+ import { intlayer, intlayerCompiler } from "vite-intlayer";
583
+
584
+ export default defineConfig({
585
+ plugins: [
586
+ intlayer(),
587
+ intlayerCompiler(), // يضيف المكون الإضافي للمترجم
588
+ ],
589
+ });
590
+ ```
591
+
592
+ ```bash packageManager="npm"
593
+ npm run build # أو npm run dev
594
+ ```
595
+
596
+ ```bash packageManager="pnpm"
597
+ pnpm run build # Or pnpm run dev
598
+ ```
599
+
600
+ ```bash packageManager="yarn"
601
+ yarn build # Or yarn dev
602
+ ```
603
+
604
+ ```bash packageManager="bun"
605
+ bun run build # Or bun run dev
606
+ ```
607
+
608
+ </Tab>
609
+ </Tabs>
610
+
611
+ ---
612
+
613
+ ## Configure TypeScript
614
+
615
+ Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
616
+
617
+ Ensure your TypeScript configuration includes the autogenerated types:
618
+
619
+ ```json5 fileName="tsconfig.json"
620
+ {
621
+ // ... your existing configurations
622
+ include: [
623
+ // ... your existing includes
624
+ ".intlayer/**/*.ts", // Include the auto-generated types
625
+ ],
626
+ }
627
+ ```
628
+
629
+ ---
630
+
631
+ ## Git Configuration
632
+
633
+ It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
634
+
635
+ To do this, you can add the following instructions to your `.gitignore` file:
636
+
637
+ ```plaintext fileName=".gitignore"
638
+ # Ignore the files generated by Intlayer
639
+ .intlayer
640
+ ```
641
+
642
+ ---
643
+
644
+ ## VS Code Extension
645
+
646
+ To improve your development experience with Intlayer, you can install the official **Intlayer VS Code Extension**.
647
+
648
+ [Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
649
+
650
+ This extension provides:
651
+
652
+ - **Autocompletion** for translation keys.
653
+ - **Real-time error detection** for missing translations.
654
+ - **Inline previews** of translated content.
655
+ - **Quick actions** to easily create and update translations.
656
+
657
+ For more details on how to use the extension, refer to the [Intlayer VS Code Extension documentation](https://intlayer.org/doc/vs-code-extension).
658
+
659
+ ---
660
+
661
+ ## Go Further
662
+
663
+ To go further, you can implement the [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) or externalize your content using the [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
664
+
665
+ ---
666
+
667
+ ## Documentation References
668
+
669
+ - [Intlayer Documentation](https://intlayer.org)
670
+ - [React Router v7 Documentation](https://reactrouter.com/)
671
+ - [React Router fs-routes Documentation](https://reactrouter.com/how-to/file-route-conventions)
672
+ - [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md)
673
+ - [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md)
674
+ - [Content Declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md)
675
+ - [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
676
+
677
+ This comprehensive guide provides everything you need to integrate Intlayer with React Router v7 using file-system based routing for a fully internationalized application with locale-aware routing and TypeScript support.
678
+
455
679
  ### الخطوة 11: إضافة الوسيط (اختياري)
456
680
 
457
681
  يمكنك أيضًا استخدام `intlayerProxy` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا المكون الإضافي بالكشف تلقائيًا عن اللغة الحالية بناءً على عنوان URL وتعيين ملف تعريف الارتباط المناسب للغة. إذا لم يتم تحديد لغة، فسيحدد المكون الإضافي اللغة الأنسب بناءً على تفضيلات لغة متصفح المستخدم. إذا لم يتم الكشف عن أي لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.