@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.
- package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +71 -80
- package/dist/cjs/generated/docs.entry.cjs +16 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +16 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_angular.md +2 -2
- package/docs/ar/intlayer_with_astro.md +246 -0
- package/docs/ar/intlayer_with_create_react_app.md +3 -2
- package/docs/ar/intlayer_with_express.md +2 -2
- package/docs/ar/intlayer_with_nestjs.md +2 -2
- package/docs/ar/intlayer_with_nextjs_14.md +2 -2
- package/docs/ar/intlayer_with_nextjs_15.md +2 -2
- package/docs/ar/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ar/intlayer_with_nuxt.md +2 -2
- package/docs/ar/intlayer_with_react_native+expo.md +11 -20
- package/docs/ar/intlayer_with_react_router_v7.md +195 -241
- package/docs/ar/intlayer_with_tanstack.md +198 -272
- package/docs/ar/intlayer_with_vite+preact.md +9 -9
- package/docs/ar/intlayer_with_vite+react.md +7 -7
- package/docs/ar/intlayer_with_vite+vue.md +9 -9
- package/docs/de/intlayer_with_angular.md +2 -2
- package/docs/de/intlayer_with_astro.md +246 -0
- package/docs/de/intlayer_with_create_react_app.md +2 -2
- package/docs/de/intlayer_with_express.md +2 -2
- package/docs/de/intlayer_with_nestjs.md +2 -2
- package/docs/de/intlayer_with_nextjs_14.md +2 -2
- package/docs/de/intlayer_with_nextjs_15.md +2 -2
- package/docs/de/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/de/intlayer_with_nuxt.md +2 -2
- package/docs/de/intlayer_with_react_native+expo.md +11 -20
- package/docs/de/intlayer_with_react_router_v7.md +193 -242
- package/docs/de/intlayer_with_tanstack.md +194 -266
- package/docs/de/intlayer_with_vite+preact.md +9 -9
- package/docs/de/intlayer_with_vite+react.md +9 -9
- package/docs/de/intlayer_with_vite+vue.md +11 -11
- package/docs/de/packages/vite-intlayer/index.md +3 -3
- package/docs/en/how_works_intlayer.md +1 -1
- package/docs/en/index.md +1 -1
- package/docs/en/intlayer_cli.md +1 -1
- package/docs/en/intlayer_with_angular.md +4 -4
- package/docs/en/intlayer_with_astro.md +246 -0
- package/docs/en/intlayer_with_create_react_app.md +4 -4
- package/docs/en/intlayer_with_express.md +3 -3
- package/docs/en/intlayer_with_lynx+react.md +1 -1
- package/docs/en/intlayer_with_nestjs.md +2 -2
- package/docs/en/intlayer_with_nextjs_14.md +13 -4
- package/docs/en/intlayer_with_nextjs_15.md +13 -4
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/en/intlayer_with_nuxt.md +4 -4
- package/docs/en/intlayer_with_react_native+expo.md +46 -24
- package/docs/en/intlayer_with_react_router_v7.md +164 -211
- package/docs/en/intlayer_with_tanstack.md +166 -241
- package/docs/en/intlayer_with_vite+preact.md +12 -12
- package/docs/en/intlayer_with_vite+react.md +12 -12
- package/docs/en/intlayer_with_vite+solid.md +2 -2
- package/docs/en/intlayer_with_vite+svelte.md +2 -2
- package/docs/en/intlayer_with_vite+vue.md +12 -12
- package/docs/en/introduction.md +1 -1
- package/docs/en/packages/next-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/en/packages/react-intlayer/useI18n.md +1 -1
- package/docs/en/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/en/releases/v6.md +1 -0
- package/docs/en/roadmap.md +1 -1
- package/docs/en-GB/intlayer_with_angular.md +3 -3
- package/docs/en-GB/intlayer_with_astro.md +246 -0
- package/docs/en-GB/intlayer_with_create_react_app.md +5 -4
- package/docs/en-GB/intlayer_with_express.md +2 -2
- package/docs/en-GB/intlayer_with_nestjs.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_14.md +4 -4
- package/docs/en-GB/intlayer_with_nextjs_15.md +2 -2
- package/docs/en-GB/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/en-GB/intlayer_with_nuxt.md +2 -2
- package/docs/en-GB/intlayer_with_react_native+expo.md +11 -20
- package/docs/en-GB/intlayer_with_react_router_v7.md +171 -220
- package/docs/en-GB/intlayer_with_tanstack.md +174 -248
- package/docs/en-GB/intlayer_with_vite+preact.md +9 -9
- package/docs/en-GB/intlayer_with_vite+react.md +9 -9
- package/docs/en-GB/intlayer_with_vite+vue.md +11 -11
- package/docs/en-GB/packages/next-intlayer/useIntlayer.md +1 -1
- package/docs/en-GB/packages/react-intlayer/useIntlayer.md +1 -1
- package/docs/es/intlayer_with_angular.md +2 -2
- package/docs/es/intlayer_with_astro.md +246 -0
- package/docs/es/intlayer_with_create_react_app.md +3 -2
- package/docs/es/intlayer_with_express.md +2 -2
- package/docs/es/intlayer_with_nextjs_14.md +2 -2
- package/docs/es/intlayer_with_nextjs_15.md +2 -2
- package/docs/es/intlayer_with_react_native+expo.md +11 -20
- package/docs/es/intlayer_with_react_router_v7.md +188 -232
- package/docs/es/intlayer_with_tanstack.md +203 -273
- package/docs/es/intlayer_with_vite+preact.md +7 -7
- package/docs/es/intlayer_with_vite+react.md +7 -7
- package/docs/es/intlayer_with_vite+vue.md +9 -9
- package/docs/fr/intlayer_with_angular.md +2 -2
- package/docs/fr/intlayer_with_astro.md +246 -0
- package/docs/fr/intlayer_with_create_react_app.md +3 -2
- package/docs/fr/intlayer_with_express.md +2 -2
- package/docs/fr/intlayer_with_nestjs.md +2 -2
- package/docs/fr/intlayer_with_nextjs_14.md +2 -2
- package/docs/fr/intlayer_with_react_native+expo.md +11 -20
- package/docs/fr/intlayer_with_react_router_v7.md +188 -248
- package/docs/fr/intlayer_with_tanstack.md +192 -265
- package/docs/fr/intlayer_with_vite+preact.md +7 -7
- package/docs/fr/intlayer_with_vite+react.md +7 -7
- package/docs/fr/intlayer_with_vite+vue.md +9 -9
- package/docs/hi/intlayer_cli.md +1 -4
- package/docs/hi/intlayer_with_angular.md +2 -2
- package/docs/hi/intlayer_with_astro.md +246 -0
- package/docs/hi/intlayer_with_create_react_app.md +2 -2
- package/docs/hi/intlayer_with_express.md +2 -2
- package/docs/hi/intlayer_with_nestjs.md +2 -2
- package/docs/hi/intlayer_with_nextjs_14.md +2 -2
- package/docs/hi/intlayer_with_nextjs_15.md +2 -2
- package/docs/hi/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/hi/intlayer_with_nuxt.md +2 -2
- package/docs/hi/intlayer_with_react_native+expo.md +11 -20
- package/docs/hi/intlayer_with_react_router_v7.md +199 -243
- package/docs/hi/intlayer_with_tanstack.md +210 -285
- package/docs/hi/intlayer_with_vite+preact.md +9 -9
- package/docs/hi/intlayer_with_vite+react.md +9 -9
- package/docs/hi/intlayer_with_vite+solid.md +1 -1
- package/docs/hi/intlayer_with_vite+vue.md +11 -11
- package/docs/it/intlayer_with_angular.md +2 -2
- package/docs/it/intlayer_with_astro.md +246 -0
- package/docs/it/intlayer_with_create_react_app.md +3 -2
- package/docs/it/intlayer_with_express.md +2 -2
- package/docs/it/intlayer_with_nestjs.md +2 -2
- package/docs/it/intlayer_with_nextjs_14.md +2 -2
- package/docs/it/intlayer_with_nextjs_15.md +2 -2
- package/docs/it/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/it/intlayer_with_nuxt.md +2 -2
- package/docs/it/intlayer_with_react_native+expo.md +11 -21
- package/docs/it/intlayer_with_react_router_v7.md +195 -242
- package/docs/it/intlayer_with_tanstack.md +203 -267
- package/docs/it/intlayer_with_vite+preact.md +9 -9
- package/docs/it/intlayer_with_vite+react.md +13 -11
- package/docs/it/intlayer_with_vite+vue.md +11 -11
- package/docs/ja/intlayer_with_angular.md +2 -2
- package/docs/ja/intlayer_with_astro.md +246 -0
- package/docs/ja/intlayer_with_create_react_app.md +3 -2
- package/docs/ja/intlayer_with_express.md +2 -2
- package/docs/ja/intlayer_with_nestjs.md +2 -2
- package/docs/ja/intlayer_with_nextjs_14.md +2 -2
- package/docs/ja/intlayer_with_nextjs_15.md +2 -2
- package/docs/ja/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ja/intlayer_with_nuxt.md +2 -2
- package/docs/ja/intlayer_with_react_native+expo.md +18 -29
- package/docs/ja/intlayer_with_react_router_v7.md +204 -250
- package/docs/ja/intlayer_with_tanstack.md +218 -286
- package/docs/ja/intlayer_with_vite+preact.md +9 -9
- package/docs/ja/intlayer_with_vite+react.md +11 -11
- package/docs/ja/intlayer_with_vite+vue.md +11 -11
- package/docs/ko/intlayer_with_angular.md +2 -2
- package/docs/ko/intlayer_with_astro.md +246 -0
- package/docs/ko/intlayer_with_create_react_app.md +3 -2
- package/docs/ko/intlayer_with_express.md +2 -2
- package/docs/ko/intlayer_with_nestjs.md +2 -2
- package/docs/ko/intlayer_with_nextjs_14.md +2 -2
- package/docs/ko/intlayer_with_nextjs_15.md +2 -2
- package/docs/ko/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ko/intlayer_with_nuxt.md +2 -2
- package/docs/ko/intlayer_with_react_native+expo.md +19 -28
- package/docs/ko/intlayer_with_react_router_v7.md +190 -244
- package/docs/ko/intlayer_with_tanstack.md +200 -270
- package/docs/ko/intlayer_with_vite+preact.md +9 -9
- package/docs/ko/intlayer_with_vite+react.md +9 -9
- package/docs/ko/intlayer_with_vite+vue.md +11 -11
- package/docs/pt/intlayer_with_angular.md +2 -2
- package/docs/pt/intlayer_with_astro.md +246 -0
- package/docs/pt/intlayer_with_create_react_app.md +3 -2
- package/docs/pt/intlayer_with_express.md +2 -2
- package/docs/pt/intlayer_with_nestjs.md +2 -2
- package/docs/pt/intlayer_with_nextjs_14.md +2 -2
- package/docs/pt/intlayer_with_nextjs_15.md +2 -2
- package/docs/pt/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/pt/intlayer_with_nuxt.md +2 -2
- package/docs/pt/intlayer_with_react_native+expo.md +11 -20
- package/docs/pt/intlayer_with_react_router_v7.md +7 -13
- package/docs/pt/intlayer_with_tanstack.md +183 -258
- package/docs/pt/intlayer_with_vite+preact.md +9 -9
- package/docs/pt/intlayer_with_vite+react.md +9 -9
- package/docs/pt/intlayer_with_vite+vue.md +9 -9
- package/docs/ru/intlayer_with_angular.md +2 -2
- package/docs/ru/intlayer_with_astro.md +246 -0
- package/docs/ru/intlayer_with_create_react_app.md +3 -2
- package/docs/ru/intlayer_with_express.md +2 -2
- package/docs/ru/intlayer_with_nestjs.md +2 -2
- package/docs/ru/intlayer_with_nextjs_14.md +2 -2
- package/docs/ru/intlayer_with_nextjs_15.md +2 -2
- package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/ru/intlayer_with_nuxt.md +2 -2
- package/docs/ru/intlayer_with_react_native+expo.md +11 -20
- package/docs/ru/intlayer_with_react_router_v7.md +192 -238
- package/docs/ru/intlayer_with_tanstack.md +197 -269
- package/docs/ru/intlayer_with_vite+preact.md +9 -9
- package/docs/ru/intlayer_with_vite+react.md +9 -9
- package/docs/ru/intlayer_with_vite+vue.md +11 -11
- package/docs/tr/how_works_intlayer.md +1 -1
- package/docs/tr/index.md +1 -1
- package/docs/tr/intlayer_cli.md +1 -1
- package/docs/tr/intlayer_with_angular.md +4 -4
- package/docs/tr/intlayer_with_astro.md +246 -0
- package/docs/tr/intlayer_with_create_react_app.md +4 -4
- package/docs/tr/intlayer_with_express.md +3 -3
- package/docs/tr/intlayer_with_lynx+react.md +1 -1
- package/docs/tr/intlayer_with_nestjs.md +2 -2
- package/docs/tr/intlayer_with_nextjs_14.md +2 -2
- package/docs/tr/intlayer_with_nextjs_15.md +4 -4
- package/docs/tr/intlayer_with_nextjs_page_router.md +5 -5
- package/docs/tr/intlayer_with_nuxt.md +4 -4
- package/docs/tr/intlayer_with_react_native+expo.md +12 -21
- package/docs/tr/intlayer_with_react_router_v7.md +222 -267
- package/docs/tr/intlayer_with_tanstack.md +400 -303
- package/docs/tr/intlayer_with_vite+preact.md +12 -12
- package/docs/tr/intlayer_with_vite+react.md +12 -12
- package/docs/tr/intlayer_with_vite+solid.md +2 -2
- package/docs/tr/intlayer_with_vite+svelte.md +2 -2
- package/docs/tr/intlayer_with_vite+vue.md +12 -12
- package/docs/tr/introduction.md +1 -1
- package/docs/tr/packages/react-intlayer/useDictionary.md +1 -1
- package/docs/tr/packages/react-intlayer/useI18n.md +1 -1
- package/docs/tr/roadmap.md +1 -1
- package/docs/zh/intlayer_with_angular.md +2 -2
- package/docs/zh/intlayer_with_astro.md +246 -0
- package/docs/zh/intlayer_with_create_react_app.md +3 -2
- package/docs/zh/intlayer_with_express.md +2 -2
- package/docs/zh/intlayer_with_nestjs.md +2 -2
- package/docs/zh/intlayer_with_nextjs_14.md +2 -2
- package/docs/zh/intlayer_with_nextjs_15.md +2 -2
- package/docs/zh/intlayer_with_nextjs_page_router.md +2 -2
- package/docs/zh/intlayer_with_nuxt.md +2 -2
- package/docs/zh/intlayer_with_react_native+expo.md +19 -28
- package/docs/zh/intlayer_with_react_router_v7.md +200 -248
- package/docs/zh/intlayer_with_tanstack.md +208 -283
- package/docs/zh/intlayer_with_vite+preact.md +9 -9
- package/docs/zh/intlayer_with_vite+react.md +9 -9
- package/docs/zh/intlayer_with_vite+vue.md +9 -9
- package/package.json +11 -11
- package/src/generated/docs.entry.ts +16 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-04
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-10-03
|
|
4
4
|
title: البدء مع Intlayer في React Router v7
|
|
5
|
-
description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق React Router v7 الخاص بك باستخدام Intlayer. اتبع هذا الدليل الشامل لجعل تطبيقك متعدد اللغات مع توجيه
|
|
5
|
+
description: تعلّم كيفية إضافة التدويل (i18n) إلى تطبيق React Router v7 الخاص بك باستخدام Intlayer. اتبع هذا الدليل الشامل لجعل تطبيقك متعدد اللغات مع توجيه يدعم اللغة المحلية.
|
|
6
6
|
keywords:
|
|
7
7
|
- التدويل
|
|
8
8
|
- التوثيق
|
|
@@ -11,19 +11,18 @@ keywords:
|
|
|
11
11
|
- React
|
|
12
12
|
- i18n
|
|
13
13
|
- TypeScript
|
|
14
|
-
- توجيه اللغة
|
|
14
|
+
- توجيه اللغة المحلية
|
|
15
15
|
slugs:
|
|
16
16
|
- doc
|
|
17
17
|
- environment
|
|
18
18
|
- vite-and-react
|
|
19
19
|
- react-router-v7
|
|
20
|
-
applicationTemplate: https://github.com/
|
|
21
|
-
author: AydinTheFirst
|
|
20
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-react-router-v7-template
|
|
22
21
|
---
|
|
23
22
|
|
|
24
|
-
# البدء
|
|
23
|
+
# البدء بالتدويل (i18n) مع Intlayer و React Router v7
|
|
25
24
|
|
|
26
|
-
يوضح هذا الدليل كيفية دمج **Intlayer**
|
|
25
|
+
يوضح هذا الدليل كيفية دمج **Intlayer** لتحقيق التدويل السلس في مشاريع React Router v7 مع توجيه يدعم اللغة المحلية، ودعم TypeScript، وممارسات تطوير حديثة.
|
|
27
26
|
|
|
28
27
|
## ما هو Intlayer؟
|
|
29
28
|
|
|
@@ -31,11 +30,11 @@ author: AydinTheFirst
|
|
|
31
30
|
|
|
32
31
|
مع Intlayer، يمكنك:
|
|
33
32
|
|
|
34
|
-
- **إدارة الترجمات بسهولة** باستخدام قواميس
|
|
33
|
+
- **إدارة الترجمات بسهولة** باستخدام قواميس تعبيرية على مستوى المكونات.
|
|
35
34
|
- **توطين البيانات الوصفية، والمسارات، والمحتوى بشكل ديناميكي**.
|
|
36
|
-
- **ضمان دعم TypeScript**
|
|
37
|
-
- **الاستفادة من الميزات المتقدمة**، مثل الكشف الديناميكي عن اللغة والتبديل بينها.
|
|
38
|
-
- **تمكين التوجيه
|
|
35
|
+
- **ضمان دعم TypeScript** مع أنواع مولدة تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
|
|
36
|
+
- **الاستفادة من الميزات المتقدمة**، مثل الكشف الديناميكي عن اللغة المحلية والتبديل بينها.
|
|
37
|
+
- **تمكين التوجيه المدرك للغة المحلية** باستخدام نظام التوجيه القائم على التكوين في React Router v7.
|
|
39
38
|
|
|
40
39
|
---
|
|
41
40
|
|
|
@@ -60,10 +59,10 @@ pnpm add vite-intlayer --save-dev
|
|
|
60
59
|
الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، والترجمة، و[إعلان المحتوى](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).
|
|
61
60
|
|
|
62
61
|
- **react-intlayer**
|
|
63
|
-
الحزمة التي تدمج Intlayer مع تطبيق React. توفر موفري السياق
|
|
62
|
+
الحزمة التي تدمج Intlayer مع تطبيق React. توفر موفري السياق وخطافات للتدويل في React.
|
|
64
63
|
|
|
65
64
|
- **vite-intlayer**
|
|
66
|
-
تتضمن إضافة Vite لدمج Intlayer مع [مجمّع Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط
|
|
65
|
+
تتضمن إضافة Vite لدمج Intlayer مع [مجمّع Vite](https://vite.dev/guide/why.html#why-bundle-for-production)، بالإضافة إلى وسيط للكشف عن اللغة المفضلة للمستخدم، وإدارة الكوكيز، والتعامل مع إعادة توجيه URL.
|
|
67
66
|
|
|
68
67
|
### الخطوة 2: تكوين مشروعك
|
|
69
68
|
|
|
@@ -74,11 +73,8 @@ import { type IntlayerConfig, Locales } from "intlayer";
|
|
|
74
73
|
|
|
75
74
|
const config: IntlayerConfig = {
|
|
76
75
|
internationalization: {
|
|
77
|
-
defaultLocale: Locales.ENGLISH,
|
|
78
|
-
locales: [Locales.ENGLISH, Locales.
|
|
79
|
-
},
|
|
80
|
-
middleware: {
|
|
81
|
-
prefixDefault: true, // دائمًا أضف بادئة اللغة الافتراضية في عناوين URL
|
|
76
|
+
defaultLocale: Locales.ENGLISH, // اللغة الافتراضية
|
|
77
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // اللغات المدعومة
|
|
82
78
|
},
|
|
83
79
|
};
|
|
84
80
|
|
|
@@ -91,11 +87,8 @@ import { Locales } from "intlayer";
|
|
|
91
87
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
92
88
|
const config = {
|
|
93
89
|
internationalization: {
|
|
94
|
-
defaultLocale: Locales.ENGLISH,
|
|
95
|
-
locales: [Locales.ENGLISH, Locales.
|
|
96
|
-
},
|
|
97
|
-
middleware: {
|
|
98
|
-
prefixDefault: true,
|
|
90
|
+
defaultLocale: Locales.ENGLISH, // اللغة الافتراضية
|
|
91
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // اللغات المدعومة
|
|
99
92
|
},
|
|
100
93
|
};
|
|
101
94
|
|
|
@@ -108,11 +101,8 @@ const { Locales } = require("intlayer");
|
|
|
108
101
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
109
102
|
const config = {
|
|
110
103
|
internationalization: {
|
|
111
|
-
defaultLocale: Locales.ENGLISH,
|
|
112
|
-
locales: [Locales.ENGLISH, Locales.
|
|
113
|
-
},
|
|
114
|
-
middleware: {
|
|
115
|
-
prefixDefault: true,
|
|
104
|
+
defaultLocale: Locales.ENGLISH, // اللغة الافتراضية
|
|
105
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // اللغات المدعومة
|
|
116
106
|
},
|
|
117
107
|
};
|
|
118
108
|
|
|
@@ -121,58 +111,56 @@ module.exports = config;
|
|
|
121
111
|
|
|
122
112
|
> من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL محلية، إعادة توجيه الوسيط، أسماء ملفات تعريف الارتباط، موقع وامتداد إعلانات المحتوى الخاصة بك، تعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع [توثيق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md).
|
|
123
113
|
|
|
124
|
-
### الخطوة 3: تكوين
|
|
125
|
-
|
|
126
|
-
قم بإعداد تكوين التوجيه الخاص بك مع مسارات مدركة للغة:
|
|
127
|
-
|
|
128
|
-
```typescript fileName="app/routes.ts" codeFormat="typescript"
|
|
129
|
-
import { layout, route, type RouteConfig } from "@react-router/dev/routes";
|
|
130
|
-
|
|
131
|
-
export default [
|
|
132
|
-
layout("routes/layout.tsx", [
|
|
133
|
-
route("/", "routes/page.tsx"), // الصفحة الجذرية - يعيد التوجيه إلى اللغة
|
|
134
|
-
route("/:lang", "routes/[lang]/page.tsx"), // الصفحة الرئيسية المحلية
|
|
135
|
-
route("/:lang/about", "routes/[lang]/about/page.tsx"), // صفحة حول المحلية
|
|
136
|
-
]),
|
|
137
|
-
] satisfies RouteConfig;
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### الخطوة 4: دمج Intlayer في تكوين Vite الخاص بك
|
|
114
|
+
### الخطوة 3: دمج Intlayer في تكوين Vite الخاص بك
|
|
141
115
|
|
|
142
116
|
أضف مكون intlayer الإضافي إلى تكوينك:
|
|
143
117
|
|
|
144
|
-
```typescript fileName="vite.config.ts"
|
|
118
|
+
```typescript fileName="vite.config.ts"
|
|
145
119
|
import { reactRouter } from "@react-router/dev/vite";
|
|
146
120
|
import { defineConfig } from "vite";
|
|
147
|
-
import {
|
|
121
|
+
import { intlayer } from "vite-intlayer";
|
|
148
122
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
149
123
|
|
|
150
124
|
export default defineConfig({
|
|
151
|
-
plugins: [
|
|
152
|
-
reactRouter(),
|
|
153
|
-
tsconfigPaths(),
|
|
154
|
-
intlayer(),
|
|
155
|
-
intlayerMiddlewarePlugin(),
|
|
156
|
-
],
|
|
125
|
+
plugins: [reactRouter(), tsconfigPaths(), intlayer()],
|
|
157
126
|
});
|
|
158
127
|
```
|
|
159
128
|
|
|
160
|
-
> يتم استخدام مكون Vite الإضافي `intlayer()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى
|
|
129
|
+
> يتم استخدام مكون Vite الإضافي `intlayer()` لدمج Intlayer مع Vite. يضمن بناء ملفات إعلان المحتوى ويراقبها في وضع التطوير. كما يحدد متغيرات بيئة Intlayer داخل تطبيق Vite. بالإضافة إلى ذلك، يوفر أسماء مستعارة لتحسين الأداء.
|
|
130
|
+
|
|
131
|
+
### الخطوة 4: تكوين مسارات React Router v7
|
|
132
|
+
|
|
133
|
+
قم بإعداد تكوين التوجيه الخاص بك مع مسارات مدركة للغة:
|
|
134
|
+
|
|
135
|
+
```typescript fileName="app/routes.ts"
|
|
136
|
+
typescript fileName="app/routes.ts"
|
|
137
|
+
import { layout, route, type RouteConfig } from "@react-router/dev/routes";
|
|
138
|
+
|
|
139
|
+
export default [
|
|
140
|
+
layout("routes/layout.tsx", [
|
|
141
|
+
route("/:lang?", "routes/page.tsx"), // الصفحة الرئيسية المحلية
|
|
142
|
+
route("/:lang?/about", "routes/about/page.tsx"), // صفحة حول المحلية
|
|
143
|
+
]),
|
|
144
|
+
] satisfies RouteConfig;
|
|
145
|
+
```
|
|
161
146
|
|
|
162
147
|
### الخطوة 5: إنشاء مكونات التخطيط
|
|
163
148
|
|
|
164
|
-
قم بإعداد
|
|
149
|
+
قم بإعداد التخطيط الجذري والتخطيطات الخاصة باللغة:
|
|
165
150
|
|
|
166
|
-
####
|
|
151
|
+
#### التخطيط الجذري
|
|
167
152
|
|
|
168
|
-
```tsx fileName="app/routes/layout.tsx"
|
|
169
|
-
// app/routes/layout.tsx
|
|
170
|
-
import { Outlet } from "react-router";
|
|
153
|
+
```tsx fileName="app/routes/layout.tsx"
|
|
171
154
|
import { IntlayerProvider } from "react-intlayer";
|
|
155
|
+
import { Outlet } from "react-router";
|
|
156
|
+
|
|
157
|
+
import type { Route } from "./+types/layout";
|
|
158
|
+
|
|
159
|
+
export default function RootLayout({ params }: Route.ComponentProps) {
|
|
160
|
+
const { locale } = params;
|
|
172
161
|
|
|
173
|
-
export default function RootLayout() {
|
|
174
162
|
return (
|
|
175
|
-
<IntlayerProvider>
|
|
163
|
+
<IntlayerProvider locale={locale}>
|
|
176
164
|
<Outlet />
|
|
177
165
|
</IntlayerProvider>
|
|
178
166
|
);
|
|
@@ -183,7 +171,7 @@ export default function RootLayout() {
|
|
|
183
171
|
|
|
184
172
|
قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:
|
|
185
173
|
|
|
186
|
-
```tsx fileName="app/routes/[lang]/page.content.ts"
|
|
174
|
+
```tsx fileName="app/routes/[lang]/page.content.ts"
|
|
187
175
|
import { t, type Dictionary } from "intlayer";
|
|
188
176
|
|
|
189
177
|
const pageContent = {
|
|
@@ -191,19 +179,23 @@ const pageContent = {
|
|
|
191
179
|
content: {
|
|
192
180
|
title: t({
|
|
193
181
|
en: "Welcome to React Router v7 + Intlayer",
|
|
194
|
-
|
|
182
|
+
es: "Bienvenido a React Router v7 + Intlayer",
|
|
183
|
+
fr: "Bienvenue sur React Router v7 + Intlayer",
|
|
195
184
|
}),
|
|
196
185
|
description: t({
|
|
197
186
|
en: "Build multilingual applications with ease using React Router v7 and Intlayer.",
|
|
198
|
-
|
|
187
|
+
es: "Cree aplicaciones multilingües fácilmente usando React Router v7 y Intlayer.",
|
|
188
|
+
fr: "Créez des applications multilingues facilement avec React Router v7 et Intlayer.",
|
|
199
189
|
}),
|
|
200
190
|
aboutLink: t({
|
|
201
191
|
en: "تعرف علينا",
|
|
202
|
-
|
|
192
|
+
es: "Aprender Sobre Nosotros",
|
|
193
|
+
fr: "En savoir plus sur nous",
|
|
203
194
|
}),
|
|
204
195
|
homeLink: t({
|
|
205
196
|
en: "الرئيسية",
|
|
206
|
-
|
|
197
|
+
es: "Inicio",
|
|
198
|
+
fr: "Accueil",
|
|
207
199
|
}),
|
|
208
200
|
},
|
|
209
201
|
} satisfies Dictionary;
|
|
@@ -215,101 +207,88 @@ export default pageContent;
|
|
|
215
207
|
|
|
216
208
|
> لمزيد من التفاصيل، راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md).
|
|
217
209
|
|
|
218
|
-
### الخطوة 7: إنشاء مكونات
|
|
210
|
+
### الخطوة 7: إنشاء مكونات تدرك اللغة
|
|
219
211
|
|
|
220
212
|
قم بإنشاء مكون `LocalizedLink` للتنقل المدرك للغة:
|
|
221
213
|
|
|
222
|
-
```tsx fileName="app/components/localized-link.tsx"
|
|
223
|
-
|
|
224
|
-
import { getLocalizedUrl } from "intlayer";
|
|
225
|
-
import { useLocale } from "react-intlayer";
|
|
226
|
-
import React from "react";
|
|
227
|
-
import { Link, useLocation } from "react-router";
|
|
228
|
-
|
|
229
|
-
type RouterLinkProps = React.ComponentProps<typeof Link>;
|
|
214
|
+
```tsx fileName="app/components/localized-link.tsx"
|
|
215
|
+
import type { FC } from "react";
|
|
230
216
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
217
|
+
import { getLocalizedUrl, type LocalesValues } from "intlayer";
|
|
218
|
+
import { useLocale } from "react-intlayer";
|
|
219
|
+
import { Link, type LinkProps, type To } from "react-router";
|
|
234
220
|
|
|
235
|
-
|
|
236
|
-
const isExternal = (path: string) =>
|
|
237
|
-
/^([a-z][a-z0-9+.-]*:)?\/\//i.test(path) || path.startsWith("mailto:");
|
|
221
|
+
const isExternalLink = (to: string) => /^(https?:)?\/\//.test(to);
|
|
238
222
|
|
|
223
|
+
// دالة لتحويل الرابط إلى رابط محلي بناءً على اللغة
|
|
224
|
+
export const locacalizeTo = (to: To, locale: LocalesValues): To => {
|
|
239
225
|
if (typeof to === "string") {
|
|
240
|
-
if (
|
|
241
|
-
return
|
|
226
|
+
if (isExternalLink(to)) {
|
|
227
|
+
return to;
|
|
242
228
|
}
|
|
243
|
-
|
|
229
|
+
|
|
230
|
+
return getLocalizedUrl(to, locale);
|
|
244
231
|
}
|
|
245
232
|
|
|
246
|
-
if (to
|
|
247
|
-
|
|
248
|
-
if (pathname && pathname.startsWith("/") && !isExternal(pathname)) {
|
|
249
|
-
return (
|
|
250
|
-
<Link
|
|
251
|
-
to={{ ...to, pathname: getLocalizedUrl(pathname, locale) }}
|
|
252
|
-
{...props}
|
|
253
|
-
/>
|
|
254
|
-
);
|
|
255
|
-
}
|
|
256
|
-
return <Link to={to} {...props} />;
|
|
233
|
+
if (isExternalLink(to.pathname ?? "")) {
|
|
234
|
+
return to;
|
|
257
235
|
}
|
|
258
236
|
|
|
259
|
-
return
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
);
|
|
265
|
-
}
|
|
266
|
-
```
|
|
237
|
+
return {
|
|
238
|
+
...to,
|
|
239
|
+
pathname: getLocalizedUrl(to.pathname ?? "", locale),
|
|
240
|
+
};
|
|
241
|
+
};
|
|
267
242
|
|
|
268
|
-
|
|
243
|
+
// مكون رابط محلي يدعم التنقل حسب اللغة
|
|
244
|
+
export const LocalizedLink: FC<LinkProps> = (props) => {
|
|
245
|
+
const { locale } = useLocale();
|
|
269
246
|
|
|
270
|
-
|
|
247
|
+
return <Link {...props} to={locacalizeTo(props.to, locale)} />;
|
|
248
|
+
};
|
|
249
|
+
```
|
|
271
250
|
|
|
272
|
-
|
|
251
|
+
في حال رغبت في التنقل إلى المسارات المحلية، يمكنك استخدام الخطاف `useLocalizedNavigate`:
|
|
273
252
|
|
|
274
|
-
```tsx fileName="app/
|
|
275
|
-
|
|
276
|
-
import {
|
|
277
|
-
import { Navigate } from "react-router";
|
|
253
|
+
```tsx fileName="app/hooks/useLocalizedNavigate.ts"
|
|
254
|
+
import { useLocale } from "intlayer";
|
|
255
|
+
import { type NavigateOptions, type To, useNavigate } from "react-router";
|
|
278
256
|
|
|
279
|
-
|
|
257
|
+
import { locacalizeTo } from "~/components/localized-link";
|
|
258
|
+
|
|
259
|
+
export const useLocalizedNavigate = () => {
|
|
260
|
+
const navigate = useNavigate();
|
|
280
261
|
const { locale } = useLocale();
|
|
281
262
|
|
|
282
|
-
|
|
283
|
-
|
|
263
|
+
const localizedNavigate = (to: To, options?: NavigateOptions) => {
|
|
264
|
+
const localedTo = locacalizeTo(to, locale);
|
|
265
|
+
|
|
266
|
+
navigate(localedTo, options);
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
return localizedNavigate;
|
|
270
|
+
};
|
|
284
271
|
```
|
|
285
272
|
|
|
273
|
+
### الخطوة 8: استخدام Intlayer في صفحاتك
|
|
274
|
+
|
|
275
|
+
قم بالوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء تطبيقك:
|
|
276
|
+
|
|
286
277
|
#### الصفحة الرئيسية المترجمة
|
|
287
278
|
|
|
288
|
-
```tsx fileName="app/routes/[lang]/page.tsx"
|
|
279
|
+
```tsx fileName="app/routes/[lang]/page.tsx"
|
|
289
280
|
import { useIntlayer } from "react-intlayer";
|
|
290
|
-
import LocalizedLink from "~/components/localized-link";
|
|
281
|
+
import { LocalizedLink } from "~/components/localized-link";
|
|
291
282
|
|
|
292
283
|
export default function Page() {
|
|
293
|
-
const
|
|
284
|
+
const { title, description, aboutLink } = useIntlayer("page");
|
|
294
285
|
|
|
295
286
|
return (
|
|
296
|
-
<div
|
|
297
|
-
<h1>{
|
|
298
|
-
<p>{
|
|
299
|
-
<nav
|
|
300
|
-
<LocalizedLink
|
|
301
|
-
to="/about"
|
|
302
|
-
style={{
|
|
303
|
-
display: "inline-block",
|
|
304
|
-
padding: "0.5rem 1rem",
|
|
305
|
-
backgroundColor: "#007bff",
|
|
306
|
-
color: "white",
|
|
307
|
-
textDecoration: "none",
|
|
308
|
-
borderRadius: "4px",
|
|
309
|
-
}}
|
|
310
|
-
>
|
|
311
|
-
{content.aboutLink}
|
|
312
|
-
</LocalizedLink>
|
|
287
|
+
<div>
|
|
288
|
+
<h1>{title}</h1>
|
|
289
|
+
<p>{description}</p>
|
|
290
|
+
<nav>
|
|
291
|
+
<LocalizedLink to="/about">{aboutLink}</LocalizedLink>
|
|
313
292
|
</nav>
|
|
314
293
|
</div>
|
|
315
294
|
);
|
|
@@ -320,60 +299,73 @@ export default function Page() {
|
|
|
320
299
|
|
|
321
300
|
### الخطوة 9: إنشاء مكون لتبديل اللغة
|
|
322
301
|
|
|
323
|
-
قم بإنشاء مكون يسمح للمستخدمين بتغيير
|
|
302
|
+
قم بإنشاء مكون يسمح للمستخدمين بتغيير اللغات:
|
|
324
303
|
|
|
325
|
-
```tsx fileName="app/components/locale-switcher.tsx"
|
|
326
|
-
import {
|
|
327
|
-
import { useLocale } from "react-intlayer";
|
|
328
|
-
import { useLocation, useNavigate } from "react-router";
|
|
304
|
+
```tsx fileName="app/components/locale-switcher.tsx"
|
|
305
|
+
import type { FC } from "react";
|
|
329
306
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
307
|
+
import {
|
|
308
|
+
getHTMLTextDir,
|
|
309
|
+
getLocaleName,
|
|
310
|
+
getLocalizedUrl,
|
|
311
|
+
getPathWithoutLocale,
|
|
312
|
+
} from "intlayer";
|
|
313
|
+
import { setLocaleCookie, useIntlayer, useLocale } from "react-intlayer";
|
|
314
|
+
import { Link, useLocation } from "react-router";
|
|
334
315
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
};
|
|
316
|
+
export const LocaleSwitcher: FC = () => {
|
|
317
|
+
const { localeSwitcherLabel } = useIntlayer("locale-switcher");
|
|
318
|
+
const { pathname } = useLocation();
|
|
319
|
+
|
|
320
|
+
const { availableLocales, locale } = useLocale();
|
|
321
|
+
|
|
322
|
+
const pathWithoutLocale = getPathWithoutLocale(pathname);
|
|
343
323
|
|
|
344
324
|
return (
|
|
345
|
-
<
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
325
|
+
<ol>
|
|
326
|
+
{availableLocales.map((localeItem) => (
|
|
327
|
+
<li key={localeItem}>
|
|
328
|
+
<Link
|
|
329
|
+
aria-current={localeItem === locale ? "page" : undefined}
|
|
330
|
+
aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeItem)}`}
|
|
331
|
+
onClick={() => setLocaleCookie(localeItem)}
|
|
332
|
+
to={getLocalizedUrl(pathWithoutLocale, localeItem)}
|
|
333
|
+
>
|
|
334
|
+
<span>
|
|
335
|
+
{/* اللغة - على سبيل المثال FR */}
|
|
336
|
+
{localeItem}
|
|
337
|
+
</span>
|
|
338
|
+
<span>
|
|
339
|
+
{/* اللغة بلغتها الخاصة - على سبيل المثال Français */}
|
|
340
|
+
{getLocaleName(localeItem, locale)}
|
|
341
|
+
</span>
|
|
342
|
+
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
343
|
+
{/* اللغة باللغة الحالية - على سبيل المثال Francés مع تعيين اللغة الحالية إلى Locales.SPANISH */}
|
|
344
|
+
{getLocaleName(localeItem)}
|
|
345
|
+
</span>
|
|
346
|
+
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
347
|
+
{/* اللغة باللغة الإنجليزية - على سبيل المثال French */}
|
|
348
|
+
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
349
|
+
</span>
|
|
350
|
+
</Link>
|
|
351
|
+
</li>
|
|
352
|
+
))}
|
|
353
|
+
</ol>
|
|
360
354
|
);
|
|
361
|
-
}
|
|
355
|
+
};
|
|
362
356
|
```
|
|
363
357
|
|
|
364
358
|
> لمعرفة المزيد عن الخطاف `useLocale`، راجع [التوثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useLocale.md).
|
|
365
359
|
|
|
366
|
-
### الخطوة 10: إضافة إدارة
|
|
360
|
+
### الخطوة 10: إضافة إدارة سمات HTML (اختياري)
|
|
367
361
|
|
|
368
|
-
أنشئ خطافًا لإدارة
|
|
362
|
+
أنشئ خطافًا لإدارة سمات lang و dir في HTML:
|
|
369
363
|
|
|
370
|
-
```tsx fileName="app/hooks/useI18nHTMLAttributes.tsx"
|
|
371
|
-
// app/hooks/useI18nHTMLAttributes.tsx
|
|
364
|
+
```tsx fileName="app/hooks/useI18nHTMLAttributes.tsx"
|
|
372
365
|
import { getHTMLTextDir } from "intlayer";
|
|
373
366
|
import { useEffect } from "react";
|
|
374
367
|
import { useLocale } from "react-intlayer";
|
|
375
368
|
|
|
376
|
-
tsx;
|
|
377
369
|
export const useI18nHTMLAttributes = () => {
|
|
378
370
|
const { locale } = useLocale();
|
|
379
371
|
|
|
@@ -384,17 +376,16 @@ export const useI18nHTMLAttributes = () => {
|
|
|
384
376
|
};
|
|
385
377
|
```
|
|
386
378
|
|
|
387
|
-
ثم
|
|
379
|
+
ثم استخدمه في مكون الجذر الخاص بك:
|
|
388
380
|
|
|
389
|
-
```tsx fileName="app/
|
|
390
|
-
// app/routes/layout.tsx
|
|
381
|
+
```tsx fileName="app/routes/layout.tsx"
|
|
391
382
|
import { Outlet } from "react-router";
|
|
392
383
|
import { IntlayerProvider } from "react-intlayer";
|
|
393
384
|
|
|
394
|
-
import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; // استيراد
|
|
385
|
+
import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; // استيراد الخطاف
|
|
395
386
|
|
|
396
387
|
export default function RootLayout() {
|
|
397
|
-
useI18nHTMLAttributes(); // استدعاء
|
|
388
|
+
useI18nHTMLAttributes(); // استدعاء الخطاف
|
|
398
389
|
|
|
399
390
|
return (
|
|
400
391
|
<IntlayerProvider>
|
|
@@ -404,55 +395,46 @@ export default function RootLayout() {
|
|
|
404
395
|
}
|
|
405
396
|
```
|
|
406
397
|
|
|
407
|
-
### الخطوة 11:
|
|
408
|
-
|
|
409
|
-
قم ببناء قواميس المحتوى وتشغيل تطبيقك:
|
|
398
|
+
### الخطوة 11: إضافة الوسيط (اختياري)
|
|
410
399
|
|
|
411
|
-
|
|
412
|
-
# بناء قواميس Intlayer
|
|
413
|
-
npm run intlayer:build
|
|
400
|
+
يمكنك أيضًا استخدام `intlayerMiddleware` لإضافة التوجيه من جانب الخادم إلى تطبيقك. سيقوم هذا المكون الإضافي بالكشف تلقائيًا عن اللغة الحالية بناءً على عنوان URL وتعيين ملف تعريف الارتباط المناسب للغة. إذا لم يتم تحديد لغة، فسيحدد المكون الإضافي اللغة الأنسب بناءً على تفضيلات لغة متصفح المستخدم. إذا لم يتم الكشف عن أي لغة، فسيتم إعادة التوجيه إلى اللغة الافتراضية.
|
|
414
401
|
|
|
415
|
-
|
|
416
|
-
npm run dev
|
|
417
|
-
```
|
|
402
|
+
> لاحظ أنه لاستخدام `intlayerMiddleware` في بيئة الإنتاج، تحتاج إلى نقل حزمة `vite-intlayer` من `devDependencies` إلى `dependencies`.
|
|
418
403
|
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
|
|
404
|
+
```typescript {3,7} fileName="vite.config.ts"
|
|
405
|
+
import { defineConfig } from "vite";
|
|
406
|
+
import react from "@vitejs/plugin-react-swc";
|
|
407
|
+
import { intlayer, intlayerMiddleware } from "vite-intlayer";
|
|
422
408
|
|
|
423
|
-
|
|
424
|
-
|
|
409
|
+
// https://vitejs.dev/config/
|
|
410
|
+
export default defineConfig({
|
|
411
|
+
plugins: [react(), intlayer(), intlayerMiddleware()],
|
|
412
|
+
});
|
|
425
413
|
```
|
|
426
414
|
|
|
427
|
-
|
|
428
|
-
# بناء قواميس Intlayer
|
|
429
|
-
yarn intlayer:build
|
|
430
|
-
|
|
431
|
-
# بدء خادم التطوير
|
|
432
|
-
yarn dev
|
|
433
|
-
```
|
|
415
|
+
---
|
|
434
416
|
|
|
435
|
-
|
|
417
|
+
## تكوين TypeScript
|
|
436
418
|
|
|
437
|
-
يستخدم Intlayer
|
|
419
|
+
يستخدم Intlayer توسيع الوحدات (module augmentation) للاستفادة من TypeScript وجعل قاعدة الشيفرة الخاصة بك أقوى.
|
|
438
420
|
|
|
439
|
-
تأكد من أن تكوين TypeScript الخاص بك
|
|
421
|
+
تأكد من أن تكوين TypeScript الخاص بك يتضمن الأنواع التي تم إنشاؤها تلقائيًا:
|
|
440
422
|
|
|
441
423
|
```json5 fileName="tsconfig.json"
|
|
442
424
|
{
|
|
443
|
-
|
|
444
|
-
// ... تكوينات TypeScript الحالية الخاصة بك
|
|
445
|
-
},
|
|
425
|
+
// ... التكوينات الحالية الخاصة بك
|
|
446
426
|
include: [
|
|
447
|
-
// ...
|
|
427
|
+
// ... الملفات المضمنة الحالية الخاصة بك
|
|
448
428
|
".intlayer/**/*.ts", // تضمين الأنواع التي تم إنشاؤها تلقائيًا
|
|
449
429
|
],
|
|
450
430
|
}
|
|
451
431
|
```
|
|
452
432
|
|
|
453
|
-
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## تكوين Git
|
|
454
436
|
|
|
455
|
-
يوصى بتجاهل الملفات التي
|
|
437
|
+
يوصى بتجاهل الملفات التي تم إنشاؤها بواسطة Intlayer. هذا يسمح لك بتجنب الالتزام بها في مستودع Git الخاص بك.
|
|
456
438
|
|
|
457
439
|
للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف `.gitignore` الخاص بك:
|
|
458
440
|
|
|
@@ -463,35 +445,6 @@ yarn dev
|
|
|
463
445
|
|
|
464
446
|
---
|
|
465
447
|
|
|
466
|
-
## النشر في بيئة الإنتاج
|
|
467
|
-
|
|
468
|
-
عند نشر تطبيقك:
|
|
469
|
-
|
|
470
|
-
1. **قم ببناء تطبيقك:**
|
|
471
|
-
|
|
472
|
-
```bash
|
|
473
|
-
npm run build
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
2. **قم ببناء قواميس Intlayer:**
|
|
477
|
-
|
|
478
|
-
```bash
|
|
479
|
-
npm run intlayer:build
|
|
480
|
-
```
|
|
481
|
-
|
|
482
|
-
3. **نقل `vite-intlayer` إلى التبعيات** إذا كنت تستخدم الوسيط (middleware) في الإنتاج:
|
|
483
|
-
```bash
|
|
484
|
-
npm install vite-intlayer --save
|
|
485
|
-
```
|
|
486
|
-
|
|
487
|
-
سيدعم تطبيقك الآن:
|
|
488
|
-
|
|
489
|
-
- **هيكلية عناوين URL**: `/en`، `/en/about`، `/tr`، `/tr/about`
|
|
490
|
-
- **الكشف التلقائي عن اللغة** بناءً على تفضيلات المتصفح
|
|
491
|
-
- **التوجيه المدرك للغة** باستخدام React Router v7
|
|
492
|
-
- **دعم TypeScript** مع أنواع مولدة تلقائيًا
|
|
493
|
-
- **التصيير على جانب الخادم** مع التعامل الصحيح مع اللغة
|
|
494
|
-
|
|
495
448
|
## إضافة VS Code
|
|
496
449
|
|
|
497
450
|
لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت **إضافة Intlayer الرسمية لـ VS Code**.
|
|
@@ -503,7 +456,7 @@ yarn dev
|
|
|
503
456
|
- **الإكمال التلقائي** لمفاتيح الترجمة.
|
|
504
457
|
- **الكشف الفوري عن الأخطاء** للترجمات المفقودة.
|
|
505
458
|
- **معاينات داخلية** للمحتوى المترجم.
|
|
506
|
-
- **إجراءات سريعة** لإنشاء
|
|
459
|
+
- **إجراءات سريعة** لإنشاء وتحديث الترجمات بسهولة.
|
|
507
460
|
|
|
508
461
|
لمزيد من التفاصيل حول كيفية استخدام الإضافة، راجع [توثيق إضافة Intlayer لـ VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
509
462
|
|
|
@@ -511,7 +464,7 @@ yarn dev
|
|
|
511
464
|
|
|
512
465
|
## التقدم أكثر
|
|
513
466
|
|
|
514
|
-
|
|
467
|
+
للمضي قدمًا، يمكنك تنفيذ [المحرر المرئي](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).
|
|
515
468
|
|
|
516
469
|
---
|
|
517
470
|
|
|
@@ -520,7 +473,7 @@ yarn dev
|
|
|
520
473
|
- [توثيق Intlayer](https://intlayer.org)
|
|
521
474
|
- [توثيق React Router v7](https://reactrouter.com/)
|
|
522
475
|
- [هوك useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useIntlayer.md)
|
|
523
|
-
- [
|
|
476
|
+
- [هوك useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/react-intlayer/useLocale.md)
|
|
524
477
|
- [إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/get_started.md)
|
|
525
478
|
- [التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md)
|
|
526
479
|
|
|
@@ -528,6 +481,7 @@ yarn dev
|
|
|
528
481
|
|
|
529
482
|
## تاريخ الوثيقة
|
|
530
483
|
|
|
531
|
-
| الإصدار | التاريخ
|
|
532
|
-
| ------- |
|
|
533
|
-
|
|
|
484
|
+
| الإصدار | التاريخ | التغييرات |
|
|
485
|
+
| ------- | ---------- | ------------------------ |
|
|
486
|
+
| 6.1.5 | 2025-10-03 | تحديث الوثيقة |
|
|
487
|
+
| 5.8.2 | 2025-09-04 | أضيف دعم React Router v7 |
|