@intlayer/docs 6.1.6-canary.0 → 6.1.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.
Files changed (242) hide show
  1. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +71 -80
  2. package/dist/cjs/generated/docs.entry.cjs +16 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +16 -0
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +1 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/intlayer_with_angular.md +2 -2
  9. package/docs/ar/intlayer_with_astro.md +246 -0
  10. package/docs/ar/intlayer_with_create_react_app.md +3 -2
  11. package/docs/ar/intlayer_with_express.md +2 -2
  12. package/docs/ar/intlayer_with_nestjs.md +2 -2
  13. package/docs/ar/intlayer_with_nextjs_14.md +2 -2
  14. package/docs/ar/intlayer_with_nextjs_15.md +2 -2
  15. package/docs/ar/intlayer_with_nextjs_page_router.md +2 -2
  16. package/docs/ar/intlayer_with_nuxt.md +2 -2
  17. package/docs/ar/intlayer_with_react_native+expo.md +11 -20
  18. package/docs/ar/intlayer_with_react_router_v7.md +195 -241
  19. package/docs/ar/intlayer_with_tanstack.md +198 -272
  20. package/docs/ar/intlayer_with_vite+preact.md +9 -9
  21. package/docs/ar/intlayer_with_vite+react.md +7 -7
  22. package/docs/ar/intlayer_with_vite+vue.md +9 -9
  23. package/docs/de/intlayer_with_angular.md +2 -2
  24. package/docs/de/intlayer_with_astro.md +246 -0
  25. package/docs/de/intlayer_with_create_react_app.md +2 -2
  26. package/docs/de/intlayer_with_express.md +2 -2
  27. package/docs/de/intlayer_with_nestjs.md +2 -2
  28. package/docs/de/intlayer_with_nextjs_14.md +2 -2
  29. package/docs/de/intlayer_with_nextjs_15.md +2 -2
  30. package/docs/de/intlayer_with_nextjs_page_router.md +2 -2
  31. package/docs/de/intlayer_with_nuxt.md +2 -2
  32. package/docs/de/intlayer_with_react_native+expo.md +11 -20
  33. package/docs/de/intlayer_with_react_router_v7.md +193 -242
  34. package/docs/de/intlayer_with_tanstack.md +194 -266
  35. package/docs/de/intlayer_with_vite+preact.md +9 -9
  36. package/docs/de/intlayer_with_vite+react.md +9 -9
  37. package/docs/de/intlayer_with_vite+vue.md +11 -11
  38. package/docs/de/packages/vite-intlayer/index.md +3 -3
  39. package/docs/en/how_works_intlayer.md +1 -1
  40. package/docs/en/index.md +1 -1
  41. package/docs/en/intlayer_cli.md +1 -1
  42. package/docs/en/intlayer_with_angular.md +4 -4
  43. package/docs/en/intlayer_with_astro.md +246 -0
  44. package/docs/en/intlayer_with_create_react_app.md +4 -4
  45. package/docs/en/intlayer_with_express.md +3 -3
  46. package/docs/en/intlayer_with_lynx+react.md +1 -1
  47. package/docs/en/intlayer_with_nestjs.md +2 -2
  48. package/docs/en/intlayer_with_nextjs_14.md +13 -4
  49. package/docs/en/intlayer_with_nextjs_15.md +13 -4
  50. package/docs/en/intlayer_with_nextjs_page_router.md +5 -5
  51. package/docs/en/intlayer_with_nuxt.md +4 -4
  52. package/docs/en/intlayer_with_react_native+expo.md +46 -24
  53. package/docs/en/intlayer_with_react_router_v7.md +164 -211
  54. package/docs/en/intlayer_with_tanstack.md +166 -241
  55. package/docs/en/intlayer_with_vite+preact.md +12 -12
  56. package/docs/en/intlayer_with_vite+react.md +12 -12
  57. package/docs/en/intlayer_with_vite+solid.md +2 -2
  58. package/docs/en/intlayer_with_vite+svelte.md +2 -2
  59. package/docs/en/intlayer_with_vite+vue.md +12 -12
  60. package/docs/en/introduction.md +1 -1
  61. package/docs/en/packages/next-intlayer/useDictionary.md +1 -1
  62. package/docs/en/packages/next-intlayer/useIntlayer.md +1 -1
  63. package/docs/en/packages/react-intlayer/useDictionary.md +1 -1
  64. package/docs/en/packages/react-intlayer/useI18n.md +1 -1
  65. package/docs/en/packages/react-intlayer/useIntlayer.md +1 -1
  66. package/docs/en/releases/v6.md +1 -0
  67. package/docs/en/roadmap.md +1 -1
  68. package/docs/en-GB/intlayer_with_angular.md +3 -3
  69. package/docs/en-GB/intlayer_with_astro.md +246 -0
  70. package/docs/en-GB/intlayer_with_create_react_app.md +5 -4
  71. package/docs/en-GB/intlayer_with_express.md +2 -2
  72. package/docs/en-GB/intlayer_with_nestjs.md +2 -2
  73. package/docs/en-GB/intlayer_with_nextjs_14.md +4 -4
  74. package/docs/en-GB/intlayer_with_nextjs_15.md +2 -2
  75. package/docs/en-GB/intlayer_with_nextjs_page_router.md +2 -2
  76. package/docs/en-GB/intlayer_with_nuxt.md +2 -2
  77. package/docs/en-GB/intlayer_with_react_native+expo.md +11 -20
  78. package/docs/en-GB/intlayer_with_react_router_v7.md +171 -220
  79. package/docs/en-GB/intlayer_with_tanstack.md +174 -248
  80. package/docs/en-GB/intlayer_with_vite+preact.md +9 -9
  81. package/docs/en-GB/intlayer_with_vite+react.md +9 -9
  82. package/docs/en-GB/intlayer_with_vite+vue.md +11 -11
  83. package/docs/en-GB/packages/next-intlayer/useIntlayer.md +1 -1
  84. package/docs/en-GB/packages/react-intlayer/useIntlayer.md +1 -1
  85. package/docs/es/intlayer_with_angular.md +2 -2
  86. package/docs/es/intlayer_with_astro.md +246 -0
  87. package/docs/es/intlayer_with_create_react_app.md +3 -2
  88. package/docs/es/intlayer_with_express.md +2 -2
  89. package/docs/es/intlayer_with_nextjs_14.md +2 -2
  90. package/docs/es/intlayer_with_nextjs_15.md +2 -2
  91. package/docs/es/intlayer_with_react_native+expo.md +11 -20
  92. package/docs/es/intlayer_with_react_router_v7.md +188 -232
  93. package/docs/es/intlayer_with_tanstack.md +203 -273
  94. package/docs/es/intlayer_with_vite+preact.md +7 -7
  95. package/docs/es/intlayer_with_vite+react.md +7 -7
  96. package/docs/es/intlayer_with_vite+vue.md +9 -9
  97. package/docs/fr/intlayer_with_angular.md +2 -2
  98. package/docs/fr/intlayer_with_astro.md +246 -0
  99. package/docs/fr/intlayer_with_create_react_app.md +3 -2
  100. package/docs/fr/intlayer_with_express.md +2 -2
  101. package/docs/fr/intlayer_with_nestjs.md +2 -2
  102. package/docs/fr/intlayer_with_nextjs_14.md +2 -2
  103. package/docs/fr/intlayer_with_react_native+expo.md +11 -20
  104. package/docs/fr/intlayer_with_react_router_v7.md +188 -248
  105. package/docs/fr/intlayer_with_tanstack.md +192 -265
  106. package/docs/fr/intlayer_with_vite+preact.md +7 -7
  107. package/docs/fr/intlayer_with_vite+react.md +7 -7
  108. package/docs/fr/intlayer_with_vite+vue.md +9 -9
  109. package/docs/hi/intlayer_cli.md +1 -4
  110. package/docs/hi/intlayer_with_angular.md +2 -2
  111. package/docs/hi/intlayer_with_astro.md +246 -0
  112. package/docs/hi/intlayer_with_create_react_app.md +2 -2
  113. package/docs/hi/intlayer_with_express.md +2 -2
  114. package/docs/hi/intlayer_with_nestjs.md +2 -2
  115. package/docs/hi/intlayer_with_nextjs_14.md +2 -2
  116. package/docs/hi/intlayer_with_nextjs_15.md +2 -2
  117. package/docs/hi/intlayer_with_nextjs_page_router.md +2 -2
  118. package/docs/hi/intlayer_with_nuxt.md +2 -2
  119. package/docs/hi/intlayer_with_react_native+expo.md +11 -20
  120. package/docs/hi/intlayer_with_react_router_v7.md +199 -243
  121. package/docs/hi/intlayer_with_tanstack.md +210 -285
  122. package/docs/hi/intlayer_with_vite+preact.md +9 -9
  123. package/docs/hi/intlayer_with_vite+react.md +9 -9
  124. package/docs/hi/intlayer_with_vite+solid.md +1 -1
  125. package/docs/hi/intlayer_with_vite+vue.md +11 -11
  126. package/docs/it/intlayer_with_angular.md +2 -2
  127. package/docs/it/intlayer_with_astro.md +246 -0
  128. package/docs/it/intlayer_with_create_react_app.md +3 -2
  129. package/docs/it/intlayer_with_express.md +2 -2
  130. package/docs/it/intlayer_with_nestjs.md +2 -2
  131. package/docs/it/intlayer_with_nextjs_14.md +2 -2
  132. package/docs/it/intlayer_with_nextjs_15.md +2 -2
  133. package/docs/it/intlayer_with_nextjs_page_router.md +2 -2
  134. package/docs/it/intlayer_with_nuxt.md +2 -2
  135. package/docs/it/intlayer_with_react_native+expo.md +11 -21
  136. package/docs/it/intlayer_with_react_router_v7.md +195 -242
  137. package/docs/it/intlayer_with_tanstack.md +203 -267
  138. package/docs/it/intlayer_with_vite+preact.md +9 -9
  139. package/docs/it/intlayer_with_vite+react.md +13 -11
  140. package/docs/it/intlayer_with_vite+vue.md +11 -11
  141. package/docs/ja/intlayer_with_angular.md +2 -2
  142. package/docs/ja/intlayer_with_astro.md +246 -0
  143. package/docs/ja/intlayer_with_create_react_app.md +3 -2
  144. package/docs/ja/intlayer_with_express.md +2 -2
  145. package/docs/ja/intlayer_with_nestjs.md +2 -2
  146. package/docs/ja/intlayer_with_nextjs_14.md +2 -2
  147. package/docs/ja/intlayer_with_nextjs_15.md +2 -2
  148. package/docs/ja/intlayer_with_nextjs_page_router.md +2 -2
  149. package/docs/ja/intlayer_with_nuxt.md +2 -2
  150. package/docs/ja/intlayer_with_react_native+expo.md +18 -29
  151. package/docs/ja/intlayer_with_react_router_v7.md +204 -250
  152. package/docs/ja/intlayer_with_tanstack.md +218 -286
  153. package/docs/ja/intlayer_with_vite+preact.md +9 -9
  154. package/docs/ja/intlayer_with_vite+react.md +11 -11
  155. package/docs/ja/intlayer_with_vite+vue.md +11 -11
  156. package/docs/ko/intlayer_with_angular.md +2 -2
  157. package/docs/ko/intlayer_with_astro.md +246 -0
  158. package/docs/ko/intlayer_with_create_react_app.md +3 -2
  159. package/docs/ko/intlayer_with_express.md +2 -2
  160. package/docs/ko/intlayer_with_nestjs.md +2 -2
  161. package/docs/ko/intlayer_with_nextjs_14.md +2 -2
  162. package/docs/ko/intlayer_with_nextjs_15.md +2 -2
  163. package/docs/ko/intlayer_with_nextjs_page_router.md +2 -2
  164. package/docs/ko/intlayer_with_nuxt.md +2 -2
  165. package/docs/ko/intlayer_with_react_native+expo.md +19 -28
  166. package/docs/ko/intlayer_with_react_router_v7.md +190 -244
  167. package/docs/ko/intlayer_with_tanstack.md +200 -270
  168. package/docs/ko/intlayer_with_vite+preact.md +9 -9
  169. package/docs/ko/intlayer_with_vite+react.md +9 -9
  170. package/docs/ko/intlayer_with_vite+vue.md +11 -11
  171. package/docs/pt/intlayer_with_angular.md +2 -2
  172. package/docs/pt/intlayer_with_astro.md +246 -0
  173. package/docs/pt/intlayer_with_create_react_app.md +3 -2
  174. package/docs/pt/intlayer_with_express.md +2 -2
  175. package/docs/pt/intlayer_with_nestjs.md +2 -2
  176. package/docs/pt/intlayer_with_nextjs_14.md +2 -2
  177. package/docs/pt/intlayer_with_nextjs_15.md +2 -2
  178. package/docs/pt/intlayer_with_nextjs_page_router.md +2 -2
  179. package/docs/pt/intlayer_with_nuxt.md +2 -2
  180. package/docs/pt/intlayer_with_react_native+expo.md +11 -20
  181. package/docs/pt/intlayer_with_react_router_v7.md +7 -13
  182. package/docs/pt/intlayer_with_tanstack.md +183 -258
  183. package/docs/pt/intlayer_with_vite+preact.md +9 -9
  184. package/docs/pt/intlayer_with_vite+react.md +9 -9
  185. package/docs/pt/intlayer_with_vite+vue.md +9 -9
  186. package/docs/ru/intlayer_with_angular.md +2 -2
  187. package/docs/ru/intlayer_with_astro.md +246 -0
  188. package/docs/ru/intlayer_with_create_react_app.md +3 -2
  189. package/docs/ru/intlayer_with_express.md +2 -2
  190. package/docs/ru/intlayer_with_nestjs.md +2 -2
  191. package/docs/ru/intlayer_with_nextjs_14.md +2 -2
  192. package/docs/ru/intlayer_with_nextjs_15.md +2 -2
  193. package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
  194. package/docs/ru/intlayer_with_nuxt.md +2 -2
  195. package/docs/ru/intlayer_with_react_native+expo.md +11 -20
  196. package/docs/ru/intlayer_with_react_router_v7.md +192 -238
  197. package/docs/ru/intlayer_with_tanstack.md +197 -269
  198. package/docs/ru/intlayer_with_vite+preact.md +9 -9
  199. package/docs/ru/intlayer_with_vite+react.md +9 -9
  200. package/docs/ru/intlayer_with_vite+vue.md +11 -11
  201. package/docs/tr/how_works_intlayer.md +1 -1
  202. package/docs/tr/index.md +1 -1
  203. package/docs/tr/intlayer_cli.md +1 -1
  204. package/docs/tr/intlayer_with_angular.md +4 -4
  205. package/docs/tr/intlayer_with_astro.md +246 -0
  206. package/docs/tr/intlayer_with_create_react_app.md +4 -4
  207. package/docs/tr/intlayer_with_express.md +3 -3
  208. package/docs/tr/intlayer_with_lynx+react.md +1 -1
  209. package/docs/tr/intlayer_with_nestjs.md +2 -2
  210. package/docs/tr/intlayer_with_nextjs_14.md +2 -2
  211. package/docs/tr/intlayer_with_nextjs_15.md +4 -4
  212. package/docs/tr/intlayer_with_nextjs_page_router.md +5 -5
  213. package/docs/tr/intlayer_with_nuxt.md +4 -4
  214. package/docs/tr/intlayer_with_react_native+expo.md +12 -21
  215. package/docs/tr/intlayer_with_react_router_v7.md +222 -267
  216. package/docs/tr/intlayer_with_tanstack.md +400 -303
  217. package/docs/tr/intlayer_with_vite+preact.md +12 -12
  218. package/docs/tr/intlayer_with_vite+react.md +12 -12
  219. package/docs/tr/intlayer_with_vite+solid.md +2 -2
  220. package/docs/tr/intlayer_with_vite+svelte.md +2 -2
  221. package/docs/tr/intlayer_with_vite+vue.md +12 -12
  222. package/docs/tr/introduction.md +1 -1
  223. package/docs/tr/packages/react-intlayer/useDictionary.md +1 -1
  224. package/docs/tr/packages/react-intlayer/useI18n.md +1 -1
  225. package/docs/tr/roadmap.md +1 -1
  226. package/docs/zh/intlayer_with_angular.md +2 -2
  227. package/docs/zh/intlayer_with_astro.md +246 -0
  228. package/docs/zh/intlayer_with_create_react_app.md +3 -2
  229. package/docs/zh/intlayer_with_express.md +2 -2
  230. package/docs/zh/intlayer_with_nestjs.md +2 -2
  231. package/docs/zh/intlayer_with_nextjs_14.md +2 -2
  232. package/docs/zh/intlayer_with_nextjs_15.md +2 -2
  233. package/docs/zh/intlayer_with_nextjs_page_router.md +2 -2
  234. package/docs/zh/intlayer_with_nuxt.md +2 -2
  235. package/docs/zh/intlayer_with_react_native+expo.md +19 -28
  236. package/docs/zh/intlayer_with_react_router_v7.md +200 -248
  237. package/docs/zh/intlayer_with_tanstack.md +208 -283
  238. package/docs/zh/intlayer_with_vite+preact.md +9 -9
  239. package/docs/zh/intlayer_with_vite+react.md +9 -9
  240. package/docs/zh/intlayer_with_vite+vue.md +9 -9
  241. package/package.json +11 -11
  242. package/src/generated/docs.entry.ts +16 -0
@@ -2,7 +2,7 @@
2
2
  createdAt: 2025-09-09
3
3
  updatedAt: 2025-09-09
4
4
  title: البدء مع Intlayer في Tanstack Start
5
- description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق Tanstack Start الخاص بك باستخدام Intlayer. اتبع هذا الدليل الشامل لجعل تطبيقك متعدد اللغات مع توجيه واعٍ للغة.
5
+ description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق Tanstack Start الخاص بك باستخدام Intlayer. اتبع هذا الدليل الشامل لجعل تطبيقك متعدد اللغات مع توجيه يعتمد على اللغة.
6
6
  keywords:
7
7
  - التدويل
8
8
  - التوثيق
@@ -15,15 +15,13 @@ keywords:
15
15
  slugs:
16
16
  - doc
17
17
  - environment
18
- - vite-and-react
19
18
  - tanstack-start
20
- applicationTemplate: https://github.com/AydinTheFirst/tanstack-start-intlayer
21
- author: AydinTheFirst
19
+ applicationTemplate: https://github.com/aymericzip/intlayer-tanstack-start-template
22
20
  ---
23
21
 
24
- # البدء في التدويل (i18n) باستخدام Intlayer و Tanstack Start
22
+ # البدء بالتدويل (i18n) باستخدام Intlayer و Tanstack Start
25
23
 
26
- يوضح هذا الدليل كيفية دمج **Intlayer** لتحقيق تدويل سلس في مشاريع Tanstack Start مع توجيه واعٍ للغة، ودعم TypeScript، وممارسات تطوير حديثة.
24
+ يوضح هذا الدليل كيفية دمج **Intlayer** لتحقيق تدويل سلس في مشاريع Tanstack Start مع توجيه يعتمد على اللغة، ودعم TypeScript، وممارسات تطوير حديثة.
27
25
 
28
26
  ## ما هو Intlayer؟
29
27
 
@@ -32,10 +30,10 @@ author: AydinTheFirst
32
30
  مع Intlayer، يمكنك:
33
31
 
34
32
  - **إدارة الترجمات بسهولة** باستخدام قواميس إعلانية على مستوى المكونات.
35
- - **توطين البيانات الوصفية، والمسارات، والمحتوى بشكل ديناميكي**.
36
- - **ضمان دعم TypeScript** من خلال أنواع مولدة تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
33
+ - **توطين البيانات الوصفية والمسارات والمحتوى ديناميكيًا**.
34
+ - **ضمان دعم TypeScript** مع أنواع مولدة تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
37
35
  - **الاستفادة من الميزات المتقدمة**، مثل الكشف الديناميكي عن اللغة والتبديل بينها.
38
- - **تمكين التوجيه الواعي للغة** باستخدام نظام التوجيه المعتمد على الملفات في Tanstack Start.
36
+ - **تمكين التوجيه المعتمد على اللغة** باستخدام نظام التوجيه القائم على الملفات في Tanstack Start.
39
37
 
40
38
  ---
41
39
 
@@ -61,19 +59,19 @@ pnpm add vite-intlayer --save-dev
61
59
 
62
60
  - **intlayer**
63
61
 
64
- الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، والترجمة، و[إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md)، والتحويل البرمجي، و[أوامر CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_cli.md).
62
+ الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، الترجمة، [إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md)، التحويل البرمجي، و[أوامر CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_cli.md).
65
63
 
66
64
  - **react-intlayer**
67
- الحزمة التي تدمج Intlayer مع تطبيق React. توفر موفري السياق (context providers) وخطافات (hooks) لتدويل React.
65
+ الحزمة التي تدمج Intlayer مع تطبيق React. توفر مزودي السياق (context providers) وخطافات (hooks) لتدويل React.
68
66
 
69
67
  - **vite-intlayer**
70
- تتضمن إضافة Vite لدمج Intlayer مع [مجمّع Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط (middleware) لاكتشاف اللغة المفضلة للمستخدم، وإدارة ملفات تعريف الارتباط (cookies)، والتعامل مع إعادة توجيه URL.
68
+ تتضمن إضافة Vite لدمج Intlayer مع [مجمّع Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط (middleware) لاكتشاف اللغة المفضلة للمستخدم، إدارة الكوكيز، والتعامل مع إعادة توجيه عناوين URL.
71
69
 
72
70
  ### الخطوة 3: تكوين مشروعك
73
71
 
74
- قم بإنشاء ملف تكوين لتكوين لغات تطبيقك:
72
+ أنشئ ملف تكوين لتكوين لغات تطبيقك:
75
73
 
76
- ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
74
+ ```typescript fileName="intlayer.config.ts"
77
75
  import type { IntlayerConfig } from "intlayer";
78
76
 
79
77
  import { Locales } from "intlayer";
@@ -81,90 +79,40 @@ import { Locales } from "intlayer";
81
79
  const config: IntlayerConfig = {
82
80
  internationalization: {
83
81
  defaultLocale: Locales.ENGLISH,
84
- locales: [
85
- Locales.ENGLISH,
86
- Locales.FRENCH,
87
- Locales.SPANISH,
88
- // لغاتك الأخرى
89
- ],
82
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
90
83
  },
91
84
  };
92
85
 
93
86
  export default config;
94
87
  ```
95
88
 
96
- ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
97
- import { Locales } from "intlayer";
98
-
99
- /** @type {import('intlayer').IntlayerConfig} */
100
- const config = {
101
- internationalization: {
102
- defaultLocale: Locales.ENGLISH,
103
- locales: [
104
- Locales.ENGLISH,
105
- Locales.FRENCH,
106
- Locales.SPANISH,
107
- // لغاتك الأخرى
108
- ],
109
- },
110
- };
111
-
112
- export default config;
113
- ```
114
-
115
- ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
116
- const { Locales } = require("intlayer");
117
-
118
- /** @type {import('intlayer').IntlayerConfig} */
119
- const config = {
120
- internationalization: {
121
- defaultLocale: Locales.ENGLISH,
122
- locales: [
123
- Locales.ENGLISH,
124
- Locales.FRENCH,
125
- Locales.SPANISH,
126
- // لغاتك الأخرى
127
- ],
128
- },
129
- };
130
-
131
- module.exports = config;
132
- ```
133
-
134
- > من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL محلية، إعادة توجيه الوسيط، أسماء ملفات تعريف الارتباط، موقع وامتداد إعلانات المحتوى الخاصة بك، تعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع [توثيق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md).
89
+ > من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL محلية، إعادة توجيه الوسيط (middleware)، أسماء الكوكيز، موقع وامتداد إعلانات المحتوى الخاصة بك، تعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع [توثيق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md).
135
90
 
136
91
  ### الخطوة 4: دمج Intlayer في تكوين Vite الخاص بك
137
92
 
138
93
  أضف مكون intlayer الإضافي إلى تكوينك:
139
94
 
140
- ```typescript fileName="vite.config.ts" codeFormat="typescript"
95
+ ```typescript fileName="vite.config.ts"
141
96
  import { reactRouter } from "@react-router/dev/vite";
142
97
  import { defineConfig } from "vite";
143
- import { intlayerMiddlewarePlugin, intlayer } from "vite-intlayer";
98
+ import { intlayer } from "vite-intlayer";
144
99
  import tsconfigPaths from "vite-tsconfig-paths";
145
100
 
146
101
  export default defineConfig({
147
- plugins: [
148
- reactRouter(),
149
- tsconfigPaths(),
150
- intlayer(),
151
- intlayerMiddlewarePlugin(),
152
- ],
102
+ plugins: [reactRouter(), tsconfigPaths(), intlayer()],
153
103
  });
154
104
  ```
155
105
 
156
- > يتم استخدام مكون Vite الإضافي `intlayer()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ومراقبتها في وضع التطوير. كما يعرّف متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، يوفر ألقابًا لتحسين الأداء.
106
+ > يُستخدم مكون Vite الإضافي `intlayer()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ومراقبتها في وضع التطوير. كما يعرّف متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، يوفر ألقابًا لتحسين الأداء.
157
107
 
158
108
  ### الخطوة 5: إنشاء مكونات التخطيط
159
109
 
160
- قم بإعداد تخطيط الجذر والتخطيطات الخاصة بكل لغة:
110
+ قم بإعداد التخطيط الجذري والتخطيطات الخاصة بكل لغة:
161
111
 
162
- #### تخطيط الجذر
112
+ #### التخطيط الجذري
163
113
 
164
- ```tsx fileName="src/routes/{-$locale}/route.tsx" codeFormat="typescript"
165
- // src/routes/{-$locale}/route.tsx
114
+ ```tsx fileName="src/routes/{-$locale}/route.tsx"
166
115
  import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
167
- import { configuration } from "intlayer";
168
116
  import { IntlayerProvider, useLocale } from "react-intlayer";
169
117
 
170
118
  import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
@@ -174,10 +122,11 @@ export const Route = createFileRoute("/{-$locale}")({
174
122
  });
175
123
 
176
124
  function LayoutComponent() {
125
+ const { defaultLocale } = useLocale();
177
126
  const { locale } = Route.useParams();
178
127
 
179
128
  return (
180
- <IntlayerProvider locale={locale}>
129
+ <IntlayerProvider locale={defaultLocale}>
181
130
  <Outlet />
182
131
  </IntlayerProvider>
183
132
  );
@@ -188,7 +137,7 @@ function LayoutComponent() {
188
137
 
189
138
  قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:
190
139
 
191
- ```tsx fileName="src/contents/page.content.ts" contentDeclarationFormat="typescript"
140
+ ```tsx fileName="src/contents/page.content.ts"
192
141
  import type { Dictionary } from "intlayer";
193
142
 
194
143
  import { t } from "intlayer";
@@ -197,25 +146,29 @@ const appContent = {
197
146
  content: {
198
147
  links: {
199
148
  about: t({
149
+ ar: "حول",
200
150
  en: "About",
201
151
  es: "Acerca de",
202
152
  fr: "À propos",
203
153
  }),
204
154
  home: t({
205
- en: "الرئيسية",
155
+ ar: "الرئيسية",
156
+ en: "Home",
206
157
  es: "Inicio",
207
158
  fr: "Accueil",
208
159
  }),
209
160
  },
210
161
  meta: {
211
162
  description: t({
212
- en: "هذا مثال على استخدام Intlayer مع TanStack Router",
163
+ ar: "هذا مثال على استخدام Intlayer مع TanStack Router",
164
+ en: "This is an example of using Intlayer with TanStack Router",
213
165
  es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
214
166
  fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
215
167
  }),
216
168
  },
217
169
  title: t({
218
- en: "مرحبًا بك في Intlayer + TanStack Router",
170
+ ar: "مرحبًا بك في Intlayer + TanStack Router",
171
+ en: "Welcome to Intlayer + TanStack Router",
219
172
  es: "Bienvenido a Intlayer + TanStack Router",
220
173
  fr: "Bienvenue à Intlayer + TanStack Router",
221
174
  }),
@@ -226,69 +179,107 @@ const appContent = {
226
179
  export default appContent;
227
180
  ```
228
181
 
229
- > يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `./app`). ويجب أن تتطابق مع امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
182
+ > يمكن تعريف إعلانات المحتوى الخاصة بك في أي مكان في تطبيقك بمجرد تضمينها في دليل `contentDir` (افتراضيًا، `./app`). ويجب أن تطابق امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
230
183
 
231
184
  > لمزيد من التفاصيل، راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md).
232
185
 
233
- ### الخطوة 7: إنشاء مكونات وخطافات تدرك اللغة
186
+ ### الخطوة 7: إنشاء مكونات وخطافات تدعم الواجهة متعددة اللغات
234
187
 
235
- قم بإنشاء مكون `LocalizedLink` للملاحة المدركة للغة:
188
+ أنشئ مكون `LocalizedLink` للتنقل المدرك للواجهة متعددة اللغات:
236
189
 
237
- ```tsx fileName="src/components/localized-link.tsx" codeFormat="typescript"
238
- // src/components/localized-link.tsx
239
- // eslint-disable-next-line no-restricted-imports
240
- import { Link, type LinkProps } from "@tanstack/react-router";
241
- import { getLocalizedUrl } from "intlayer";
190
+ ```tsx fileName="src/components/localized-link.tsx"
191
+ import type { FC } from "react";
192
+
193
+ import { Link, type LinkComponentProps } from "@tanstack/react-router";
242
194
  import { useLocale } from "react-intlayer";
243
195
 
196
+ export const LOCALE_ROUTE = "{-$locale}" as const;
197
+
198
+ // الأداة الرئيسية
199
+ export type RemoveLocaleParam<T> = T extends string
200
+ ? RemoveLocaleFromString<T>
201
+ : T;
202
+
203
+ export type To = RemoveLocaleParam<LinkComponentProps["to"]>;
204
+
205
+ type CollapseDoubleSlashes<S extends string> =
206
+ S extends `${infer H}//${infer T}` ? CollapseDoubleSlashes<`${H}/${T}`> : S;
207
+
244
208
  type LocalizedLinkProps = {
245
- to: string;
246
- } & Omit<LinkProps, "to">;
209
+ to?: To;
210
+ } & Omit<LinkComponentProps, "to">;
247
211
 
248
- export function LocalizedLink(props: LocalizedLinkProps) {
249
- const { locale } = useLocale();
212
+ // المساعدات
213
+ type RemoveAll<
214
+ S extends string,
215
+ Sub extends string,
216
+ > = S extends `${infer H}${Sub}${infer T}` ? RemoveAll<`${H}${T}`, Sub> : S;
250
217
 
251
- // دالة للتحقق مما إذا كان الرابط خارجيًا
252
- const isExternal = (to: string) => {
253
- return /^(https?:)?\/\//.test(to);
254
- };
218
+ type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
219
+ RemoveAll<S, typeof LOCALE_ROUTE>
220
+ >;
255
221
 
256
- // تحديد الرابط بناءً على ما إذا كان خارجيًا أو داخليًا مع تعريب الرابط
257
- const to = isExternal(props.to)
258
- ? props.to
259
- : getLocalizedUrl(props.to, locale);
222
+ export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
223
+ const { locale } = useLocale();
260
224
 
261
- return <Link {...props} to={to as LinkProps["to"]} />;
262
- }
225
+ return (
226
+ <Link
227
+ {...props}
228
+ params={{
229
+ locale,
230
+ ...(typeof props?.params === "object" ? props?.params : {}),
231
+ }}
232
+ to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps["to"]}
233
+ />
234
+ );
235
+ };
263
236
  ```
264
237
 
265
- إنشاء هوك `useLocalizedNavigate` للملاحة البرمجية:
238
+ هذا المكون له هدفان:
266
239
 
267
- ```tsx fileName="src/hooks/useLocalizedNavigate.tsx" codeFormat="typescript"
268
- // src/hooks/useLocalizedNavigate.tsx
269
- // eslint-disable-next-line no-restricted-imports
270
- import { NavigateOptions, useNavigate } from "@tanstack/react-router";
271
- import { getLocalizedUrl } from "intlayer";
272
- import { useLocale } from "react-intlayer";
240
+ - إزالة بادئة `{-$locale}` غير الضرورية من عنوان URL.
241
+ - حقن معامل اللغة (locale) في عنوان URL لضمان إعادة توجيه المستخدم مباشرة إلى المسار المحلي.
273
242
 
274
- type LocalizedNavigateOptions = {
275
- to: string;
276
- } & Omit<NavigateOptions, "to">;
243
+ بعد ذلك يمكننا إنشاء هوك `useLocalizedNavigate` للملاحة البرمجية:
244
+
245
+ ```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
246
+ import { useLocale } from "react-intlayer";
247
+ import { useNavigate } from "@tanstack/react-router";
248
+ import { LOCALE_ROUTE } from "@/components/localized-link";
249
+ import type { FileRouteTypes } from "@/routeTree.gen";
277
250
 
278
251
  export const useLocalizedNavigate = () => {
279
252
  const navigate = useNavigate();
253
+
280
254
  const { locale } = useLocale();
281
255
 
282
- const isExternal = (to: string) => {
283
- return /^(https?:)?\/\//.test(to);
284
- };
256
+ type StripLocalePrefix<T extends string> = T extends
257
+ | `/${typeof LOCALE_ROUTE}`
258
+ | `/${typeof LOCALE_ROUTE}/`
259
+ ? "/"
260
+ : T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
261
+ ? `/${Rest}`
262
+ : never;
263
+
264
+ type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
265
+
266
+ interface LocalizedNavigate {
267
+ (to: LocalizedTo): ReturnType<typeof navigate>;
268
+ (
269
+ opts: { to: LocalizedTo } & Record<string, unknown>
270
+ ): ReturnType<typeof navigate>;
271
+ }
272
+
273
+ const localizedNavigate: LocalizedNavigate = (args: any) => {
274
+ if (typeof args === "string") {
275
+ return navigate({ to: `/${LOCALE_ROUTE}${args}`, params: { locale } });
276
+ }
277
+
278
+ const { to, ...rest } = args;
285
279
 
286
- const localizedNavigate = (options: LocalizedNavigateOptions) => {
287
- const to = isExternal(options.to)
288
- ? options.to
289
- : getLocalizedUrl(options.to, locale);
280
+ const localedTo = `/${LOCALE_ROUTE}${to}` as any;
290
281
 
291
- navigate({ ...options, to: to as NavigateOptions["to"] });
282
+ return navigate({ to: localedTo, params: { locale, ...rest } as any });
292
283
  };
293
284
 
294
285
  return localizedNavigate;
@@ -297,25 +288,11 @@ export const useLocalizedNavigate = () => {
297
288
 
298
289
  ### الخطوة 8: استخدام Intlayer في صفحاتك
299
290
 
300
- الوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء تطبيقك:
301
-
302
- #### صفحة إعادة التوجيه الجذرية
303
-
304
- ```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
305
- // src/routes/page.tsx
306
- import { useLocale } from "intlayer";
307
- import { Navigate } from "react-router";
308
-
309
- export default function Page() {
310
- const { locale } = useLocale();
311
-
312
- return <Navigate replace to={locale} />;
313
- }
314
- ```
291
+ قم بالوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء تطبيقك:
315
292
 
316
293
  #### الصفحة الرئيسية المحلية
317
294
 
318
- ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
295
+ ```tsx fileName="src/routes/{-$locale}/index.tsx"
319
296
  import { createFileRoute } from "@tanstack/react-router";
320
297
  import { getIntlayer } from "intlayer";
321
298
  import { useIntlayer } from "react-intlayer";
@@ -344,16 +321,15 @@ function RouteComponent() {
344
321
  const navigate = useLocalizedNavigate();
345
322
 
346
323
  return (
347
- <div className="grid place-items-center h-screen">
348
- <div className="flex flex-col gap-4 items-center text-center">
324
+ <div>
325
+ <div>
349
326
  {content.title}
350
327
  <LocaleSwitcher />
351
- <div className="flex gap-4">
352
- <a href="/">الفهرس</a>
328
+ <div>
353
329
  <LocalizedLink to="/">{content.links.home}</LocalizedLink>
354
330
  <LocalizedLink to="/about">{content.links.about}</LocalizedLink>
355
331
  </div>
356
- <div className="flex gap-4">
332
+ <div>
357
333
  <button onClick={() => navigate({ to: "/" })}>
358
334
  {content.links.home}
359
335
  </button>
@@ -371,59 +347,67 @@ function RouteComponent() {
371
347
 
372
348
  ### الخطوة 9: إنشاء مكون لتبديل اللغة
373
349
 
374
- أنشئ مكونًا يسمح للمستخدمين بتغيير اللغة:
350
+ قم بإنشاء مكون يسمح للمستخدمين بتغيير اللغة:
351
+
352
+ ```tsx fileName="src/components/locale-switcher.tsx"
353
+ import type { FC } from "react";
375
354
 
376
- ```tsx fileName="src/components/locale-switcher.tsx" codeFormat="typescript"
377
355
  import { useLocation } from "@tanstack/react-router";
378
- import {
379
- getHTMLTextDir,
380
- getLocaleName,
381
- getLocalizedUrl,
382
- Locales,
383
- } from "intlayer";
384
- import { useIntlayer, useLocale } from "react-intlayer";
385
-
386
- export default function LocaleSwitcher() {
387
- const { pathname, searchStr } = useLocation();
388
- const content = useIntlayer("locale-switcher");
389
-
390
- const { availableLocales, locale, setLocale } = useLocale({
391
- onLocaleChange: (newLocale) => {
392
- const pathWithLocale = getLocalizedUrl(pathname + searchStr, newLocale);
393
- location.replace(pathWithLocale);
394
- },
395
- });
356
+ import { getHTMLTextDir, getLocaleName, getPathWithoutLocale } from "intlayer";
357
+ import { setLocaleCookie, useIntlayer, useLocale } from "react-intlayer";
358
+
359
+ import { LocalizedLink, To } from "./localized-link";
360
+
361
+ export const LocaleSwitcher: FC = () => {
362
+ const { localeSwitcherLabel } = useIntlayer("locale-switcher");
363
+ const { pathname } = useLocation();
364
+
365
+ const { availableLocales, locale } = useLocale();
366
+
367
+ const pathWithoutLocale = getPathWithoutLocale(pathname);
396
368
 
397
369
  return (
398
- <select
399
- aria-label={content.label.toString()}
400
- onChange={(e) => setLocale(e.target.value)}
401
- value={locale}
402
- >
403
- {availableLocales.map((localeItem) => (
404
- <option
405
- dir={getHTMLTextDir(localeItem)}
406
- key={localeItem}
407
- lang={localeItem}
408
- value={localeItem}
409
- >
410
- {/* مثال: Français (الفرنسية) */}
411
- {getLocaleName(localeItem, locale)} (
412
- {getLocaleName(localeItem, Locales.ENGLISH)})
413
- </option>
370
+ <ol>
371
+ {availableLocales.map((localeEl) => (
372
+ <li key={localeEl}>
373
+ <LocalizedLink
374
+ aria-current={localeEl === locale ? "page" : undefined}
375
+ aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeEl)}`}
376
+ onClick={() => setLocaleCookie(localeEl)}
377
+ params={{ locale: localeEl }}
378
+ to={pathWithoutLocale as To}
379
+ >
380
+ <span>
381
+ {/* اللغة المحلية - مثل FR */}
382
+ {localeItem}
383
+ </span>
384
+ <span>
385
+ {/* اللغة بلغتها المحلية - مثل Français */}
386
+ {getLocaleName(localeItem, locale)}
387
+ </span>
388
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
389
+ {/* اللغة في اللغة الحالية - مثل Francés مع تعيين اللغة الحالية إلى Locales.SPANISH */}
390
+ {getLocaleName(localeItem)}
391
+ </span>
392
+ <span dir="ltr" lang={Locales.ENGLISH}>
393
+ {/* اللغة بالإنجليزية - مثل French */}
394
+ {getLocaleName(localeItem, Locales.ENGLISH)}
395
+ </span>
396
+ </LocalizedLink>
397
+ </li>
414
398
  ))}
415
- </select>
399
+ </ol>
416
400
  );
417
- }
401
+ };
418
402
  ```
419
403
 
420
- > لمعرفة المزيد عن الخطاف `useLocale`، يرجى الرجوع إلى [التوثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useLocale.md).
404
+ > لمعرفة المزيد عن الخطاف `useLocale`، راجع [التوثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useLocale.md).
421
405
 
422
406
  ### الخطوة 10: إضافة إدارة خصائص HTML (اختياري)
423
407
 
424
- إنشاء خطاف لإدارة خصائص lang و dir في HTML:
408
+ أنشئ خطافًا لإدارة خصائص lang و dir في HTML:
425
409
 
426
- ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
410
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
427
411
  // src/hooks/useI18nHTMLAttributes.tsx
428
412
  import { getHTMLTextDir } from "intlayer";
429
413
  import { useEffect } from "react";
@@ -441,9 +425,8 @@ export const useI18nHTMLAttributes = () => {
441
425
 
442
426
  ثم استخدمه في مكون الجذر الخاص بك:
443
427
 
444
- ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
428
+ ```tsx fileName="src/routes/{-$locale}/index.tsx"
445
429
  import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
446
- import { configuration } from "intlayer";
447
430
  import { IntlayerProvider, useLocale } from "react-intlayer";
448
431
 
449
432
  import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // استيراد الخطاف
@@ -455,55 +438,54 @@ export const Route = createFileRoute("/{-$locale}")({
455
438
  function LayoutComponent() {
456
439
  useI18nHTMLAttributes(); // أضف هذا السطر
457
440
 
441
+ const { defaultLocale } = useLocale();
458
442
  const { locale } = Route.useParams();
459
443
 
460
444
  return (
461
- <IntlayerProvider locale={locale}>
445
+ <IntlayerProvider locale={locale ?? defaultLocale}>
462
446
  <Outlet />
463
447
  </IntlayerProvider>
464
448
  );
465
449
  }
466
450
  ```
467
451
 
468
- ### الخطوة 11: بناء وتشغيل تطبيقك
452
+ ---
469
453
 
470
- قم ببناء قواميس المحتوى وتشغيل تطبيقك:
454
+ ### الخطوة 11: إضافة الوسيط (اختياري)
471
455
 
472
- ```bash packageManager="npm"
473
- # بناء قواميس Intlayer
474
- npm run intlayer:build
456
+ يمكنك أيضًا استخدام `intlayerMiddleware` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا الملحق تلقائيًا بالكشف عن اللغة الحالية بناءً على عنوان URL وتعيين ملف تعريف الارتباط الخاص باللغة المناسبة. إذا لم يتم تحديد لغة، فسيحدد الملحق اللغة الأنسب بناءً على تفضيلات لغة متصفح المستخدم. وإذا لم يتم الكشف عن أي لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.
475
457
 
476
- # بدء خادم التطوير
477
- npm run dev
478
- ```
458
+ > لاحظ أنه لاستخدام `intlayerMiddleware` في بيئة الإنتاج، تحتاج إلى نقل حزمة `vite-intlayer` من `devDependencies` إلى `dependencies`.
479
459
 
480
- ```bash packageManager="pnpm"
481
- # بناء قواميس Intlayer
482
- pnpm intlayer:build
460
+ ```typescript {3,7} fileName="vite.config.ts"
461
+ import { reactRouter } from "@react-router/dev/vite";
462
+ import tailwindcss from "@tailwindcss/vite";
463
+ import { defineConfig } from "vite";
464
+ import { intlayer, intlayerMiddleware } from "vite-intlayer";
465
+ import tsconfigPaths from "vite-tsconfig-paths";
483
466
 
484
- # بدء خادم التطوير
485
- pnpm dev
467
+ export default defineConfig({
468
+ plugins: [
469
+ tailwindcss(),
470
+ reactRouter(),
471
+ tsconfigPaths(),
472
+ intlayer(),
473
+ intlayerMiddleware(),
474
+ ],
475
+ });
486
476
  ```
487
477
 
488
- ```bash packageManager="yarn"
489
- # بناء قواميس Intlayer
490
- yarn intlayer:build
491
-
492
- # بدء خادم التطوير
493
- yarn dev
494
- ```
478
+ ---
495
479
 
496
480
  ### الخطوة 12: تكوين TypeScript (اختياري)
497
481
 
498
- يستخدم Intlayer تعزيز الوحدات للاستفادة من ميزات TypeScript وجعل قاعدة الشيفرة الخاصة بك أقوى.
482
+ يستخدم Intlayer توسيع الوحدات (module augmentation) للاستفادة من TypeScript وجعل قاعدة الشيفرة الخاصة بك أقوى.
499
483
 
500
484
  تأكد من أن تكوين TypeScript الخاص بك يتضمن الأنواع التي تم إنشاؤها تلقائيًا:
501
485
 
502
486
  ```json5 fileName="tsconfig.json"
503
487
  {
504
- compilerOptions: {
505
- // ... تكوينات TypeScript الحالية الخاصة بك
506
- },
488
+ // ... التكوينات الحالية الخاصة بك
507
489
  include: [
508
490
  // ... الملفات التي تشملها حاليًا
509
491
  ".intlayer/**/*.ts", // تضمين الأنواع التي تم إنشاؤها تلقائيًا
@@ -511,11 +493,13 @@ yarn dev
511
493
  }
512
494
  ```
513
495
 
496
+ ---
497
+
514
498
  ### تكوين Git
515
499
 
516
- يوصى بتجاهل الملفات التي تم إنشاؤها بواسطة Intlayer. هذا يسمح لك بتجنب إضافتها إلى مستودع Git الخاص بك.
500
+ يوصى بتجاهل الملفات التي تم إنشاؤها بواسطة Intlayer. هذا يسمح لك بتجنب الالتزام بها في مستودع Git الخاص بك.
517
501
 
518
- للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف `.gitignore` الخاص بك:
502
+ لتحقيق ذلك، يمكنك إضافة التعليمات التالية إلى ملف `.gitignore` الخاص بك:
519
503
 
520
504
  ```plaintext fileName=".gitignore"
521
505
  # تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer
@@ -524,64 +508,6 @@ yarn dev
524
508
 
525
509
  ---
526
510
 
527
- ### الخطوة 13: إنشاء إعادة توجيه (اختياري)
528
-
529
- ```typescript fileName="src/routes/{-$locale}/rotue.tsx" codeFormat="typescript"
530
- function LayoutComponent() {
531
- useI18nHTMLAttributes();
532
-
533
- const { locale } = Route.useParams();
534
- const { locale: selectedLocale } = useLocale();
535
- const { defaultLocale } = configuration.internationalization;
536
- const { prefixDefault } = configuration.middleware;
537
-
538
- // إعادة التوجيه إلى اللغة الافتراضية إذا لم تكن هناك لغة في عنوان URL عندما تكون prefixDefault صحيحة
539
- if (selectedLocale === defaultLocale && !locale && prefixDefault) {
540
- return <Navigate replace to={defaultLocale} />;
541
- }
542
-
543
- // إعادة التوجيه إلى اللغة المختارة إذا كانت اللغة في عنوان URL لا تطابق اللغة المختارة
544
- if (selectedLocale !== defaultLocale && !locale) {
545
- return <Navigate replace to={selectedLocale} />;
546
- }
547
-
548
- return (
549
- <IntlayerProvider locale={locale}>
550
- <Outlet />
551
- </IntlayerProvider>
552
- );
553
- }
554
- ```
555
-
556
- ## النشر في بيئة الإنتاج
557
-
558
- عند نشر تطبيقك:
559
-
560
- 1. **قم ببناء تطبيقك:**
561
-
562
- ```bash
563
- npm run build
564
- ```
565
-
566
- 2. **قم ببناء قواميس Intlayer:**
567
-
568
- ```bash
569
- npm run intlayer:build
570
- ```
571
-
572
- 3. **انقل `vite-intlayer` إلى التبعيات** إذا كنت تستخدم الوسيط (middleware) في الإنتاج:
573
- ```bash
574
- npm install vite-intlayer --save
575
- ```
576
-
577
- سيصبح تطبيقك الآن يدعم:
578
-
579
- - **هيكلية URL**: `/en`، `/en/about`، `/tr`، `/tr/about`
580
- - **الكشف التلقائي عن اللغة** بناءً على تفضيلات المتصفح
581
- - **التوجيه المدرك للغة** باستخدام Tanstack Start
582
- - **دعم TypeScript** مع أنواع مولدة تلقائيًا
583
- - **التصيير على جانب الخادم** مع التعامل الصحيح مع اللغة
584
-
585
511
  ## امتداد VS Code
586
512
 
587
513
  لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت **امتداد Intlayer الرسمي لـ VS Code**.
@@ -593,15 +519,15 @@ function LayoutComponent() {
593
519
  - **الإكمال التلقائي** لمفاتيح الترجمة.
594
520
  - **الكشف الفوري عن الأخطاء** للترجمات المفقودة.
595
521
  - **معاينات داخلية** للمحتوى المترجم.
596
- - **إجراءات سريعة** لإنشاء وتحديث الترجمات بسهولة.
522
+ - **إجراءات سريعة** لإنشاء الترجمات وتحديثها بسهولة.
597
523
 
598
- لمزيد من التفاصيل حول كيفية استخدام الامتداد، راجع [توثيق امتداد Intlayer لـ VS Code](https://intlayer.org/doc/vs-code-extension).
524
+ لمزيد من التفاصيل حول كيفية استخدام الإضافة، راجع [توثيق إضافة Intlayer لـ VS Code](https://intlayer.org/doc/vs-code-extension).
599
525
 
600
526
  ---
601
527
 
602
528
  ## التقدم أكثر
603
529
 
604
- للمضي قدمًا، يمكنك تنفيذ [المحرر المرئي](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).
530
+ للتقدم أكثر، يمكنك تنفيذ [المحرر المرئي](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).
605
531
 
606
532
  ---
607
533
 
@@ -610,11 +536,11 @@ function LayoutComponent() {
610
536
  - [توثيق Intlayer](https://intlayer.org)
611
537
  - [توثيق Tanstack Start](https://reactrouter.com/)
612
538
  - [هوك useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useIntlayer.md)
613
- - [هوك useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useLocale.md)
539
+ - [خطاف useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useLocale.md)
614
540
  - [إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md)
615
541
  - [التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md)
616
542
 
617
- يوفر هذا الدليل الشامل كل ما تحتاجه لدمج Intlayer مع Tanstack Start لتطبيق معرب بالكامل مع توجيه واعٍ للغة ودعم TypeScript.
543
+ يوفر هذا الدليل الشامل كل ما تحتاجه لدمج Intlayer مع Tanstack Start لتطبيق دولي بالكامل مع توجيه واعٍ للغة ودعم TypeScript.
618
544
 
619
545
  ## تاريخ الوثيقة
620
546