@intlayer/docs 7.0.5 → 7.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/intlayer_with_i18next.md +72 -19
- package/blog/ar/intlayer_with_next-i18next.md +61 -36
- package/blog/ar/intlayer_with_next-intl.md +61 -13
- package/blog/ar/intlayer_with_react-i18next.md +67 -18
- package/blog/ar/intlayer_with_react-intl.md +66 -13
- package/blog/ar/intlayer_with_vue-i18n.md +180 -0
- package/blog/de/intlayer_with_i18next.md +61 -26
- package/blog/de/intlayer_with_next-i18next.md +66 -17
- package/blog/de/intlayer_with_next-intl.md +62 -13
- package/blog/de/intlayer_with_react-i18next.md +66 -17
- package/blog/de/intlayer_with_react-intl.md +66 -14
- package/blog/de/intlayer_with_vue-i18n.md +178 -0
- package/blog/en/intlayer_with_i18next.md +53 -2
- package/blog/en/intlayer_with_next-i18next.md +52 -16
- package/blog/en/intlayer_with_next-intl.md +49 -0
- package/blog/en/intlayer_with_react-i18next.md +50 -1
- package/blog/en/intlayer_with_react-intl.md +53 -0
- package/blog/en/intlayer_with_vue-i18n.md +178 -0
- package/blog/en-GB/intlayer_with_i18next.md +58 -7
- package/blog/en-GB/intlayer_with_next-i18next.md +55 -9
- package/blog/en-GB/intlayer_with_next-intl.md +55 -6
- package/blog/en-GB/intlayer_with_react-i18next.md +55 -6
- package/blog/en-GB/intlayer_with_react-intl.md +56 -3
- package/blog/en-GB/intlayer_with_vue-i18n.md +180 -0
- package/blog/es/intlayer_with_i18next.md +69 -18
- package/blog/es/intlayer_with_next-i18next.md +70 -24
- package/blog/es/intlayer_with_next-intl.md +64 -13
- package/blog/es/intlayer_with_react-i18next.md +61 -12
- package/blog/es/intlayer_with_react-intl.md +65 -12
- package/blog/es/intlayer_with_vue-i18n.md +178 -0
- package/blog/fr/intlayer_with_i18next.md +77 -16
- package/blog/fr/intlayer_with_next-i18next.md +55 -31
- package/blog/fr/intlayer_with_next-intl.md +57 -7
- package/blog/fr/intlayer_with_react-i18next.md +64 -7
- package/blog/fr/intlayer_with_react-intl.md +63 -10
- package/blog/fr/intlayer_with_vue-i18n.md +178 -0
- package/blog/hi/intlayer_with_i18next.md +67 -16
- package/blog/hi/intlayer_with_next-i18next.md +69 -23
- package/blog/hi/intlayer_with_next-intl.md +61 -8
- package/blog/hi/intlayer_with_react-i18next.md +63 -14
- package/blog/hi/intlayer_with_react-intl.md +66 -13
- package/blog/hi/intlayer_with_vue-i18n.md +180 -0
- package/blog/id/intlayer_with_i18next.md +65 -14
- package/blog/id/intlayer_with_next-i18next.md +58 -12
- package/blog/id/intlayer_with_next-intl.md +60 -11
- package/blog/id/intlayer_with_react-i18next.md +59 -10
- package/blog/id/intlayer_with_react-intl.md +66 -13
- package/blog/id/intlayer_with_vue-i18n.md +178 -0
- package/blog/it/intlayer_with_i18next.md +70 -19
- package/blog/it/intlayer_with_next-i18next.md +68 -22
- package/blog/it/intlayer_with_next-intl.md +62 -12
- package/blog/it/intlayer_with_react-i18next.md +65 -16
- package/blog/it/intlayer_with_react-intl.md +67 -14
- package/blog/it/intlayer_with_vue-i18n.md +178 -0
- package/blog/ja/intlayer_with_i18next.md +74 -24
- package/blog/ja/intlayer_with_next-i18next.md +60 -37
- package/blog/ja/intlayer_with_next-intl.md +63 -15
- package/blog/ja/intlayer_with_react-i18next.md +70 -21
- package/blog/ja/intlayer_with_react-intl.md +73 -21
- package/blog/ja/intlayer_with_vue-i18n.md +180 -0
- package/blog/ko/intlayer_with_i18next.md +60 -29
- package/blog/ko/intlayer_with_next-i18next.md +59 -32
- package/blog/ko/intlayer_with_next-intl.md +52 -23
- package/blog/ko/intlayer_with_react-i18next.md +65 -16
- package/blog/ko/intlayer_with_react-intl.md +74 -22
- package/blog/ko/intlayer_with_vue-i18n.md +180 -0
- package/blog/pl/intlayer_with_i18next.md +63 -12
- package/blog/pl/intlayer_with_next-i18next.md +74 -17
- package/blog/pl/intlayer_with_next-intl.md +59 -8
- package/blog/pl/intlayer_with_react-i18next.md +59 -10
- package/blog/pl/intlayer_with_react-intl.md +65 -12
- package/blog/pl/intlayer_with_vue-i18n.md +180 -0
- package/blog/pt/intlayer_with_i18next.md +67 -16
- package/blog/pt/intlayer_with_next-i18next.md +65 -19
- package/blog/pt/intlayer_with_next-intl.md +62 -12
- package/blog/pt/intlayer_with_react-i18next.md +67 -18
- package/blog/pt/intlayer_with_react-intl.md +62 -10
- package/blog/pt/intlayer_with_vue-i18n.md +178 -0
- package/blog/ru/intlayer_with_i18next.md +68 -15
- package/blog/ru/intlayer_with_next-i18next.md +71 -25
- package/blog/ru/intlayer_with_next-intl.md +56 -7
- package/blog/ru/intlayer_with_react-i18next.md +65 -16
- package/blog/ru/intlayer_with_react-intl.md +69 -16
- package/blog/ru/intlayer_with_vue-i18n.md +180 -0
- package/blog/tr/intlayer_with_i18next.md +67 -16
- package/blog/tr/intlayer_with_next-i18next.md +78 -21
- package/blog/tr/intlayer_with_next-intl.md +69 -18
- package/blog/tr/intlayer_with_react-i18next.md +65 -16
- package/blog/tr/intlayer_with_react-intl.md +71 -19
- package/blog/tr/intlayer_with_vue-i18n.md +180 -0
- package/blog/vi/intlayer_with_i18next.md +64 -13
- package/blog/vi/intlayer_with_next-i18next.md +72 -26
- package/blog/vi/intlayer_with_next-intl.md +62 -11
- package/blog/vi/intlayer_with_react-i18next.md +66 -17
- package/blog/vi/intlayer_with_react-intl.md +70 -17
- package/blog/vi/intlayer_with_vue-i18n.md +180 -0
- package/blog/zh/intlayer_with_i18next.md +67 -17
- package/blog/zh/intlayer_with_next-i18next.md +67 -22
- package/blog/zh/intlayer_with_next-intl.md +61 -13
- package/blog/zh/intlayer_with_react-i18next.md +67 -18
- package/blog/zh/intlayer_with_react-intl.md +69 -17
- package/blog/zh/intlayer_with_vue-i18n.md +180 -0
- package/dist/cjs/generated/blog.entry.cjs +19 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +19 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_nextjs_15.md +36 -9
- package/docs/ar/intlayer_with_nextjs_16.md +36 -9
- package/docs/de/intlayer_with_nextjs_15.md +36 -9
- package/docs/de/intlayer_with_nextjs_16.md +24 -6
- package/docs/en/intlayer_with_nextjs_14.md +37 -9
- package/docs/en/intlayer_with_nextjs_15.md +40 -10
- package/docs/en/intlayer_with_nextjs_16.md +40 -10
- package/docs/en/plugins/sync-json.md +152 -55
- package/docs/en/releases/v7.md +1 -1
- package/docs/en-GB/intlayer_with_nextjs_15.md +36 -9
- package/docs/en-GB/intlayer_with_nextjs_16.md +36 -9
- package/docs/en-GB/releases/v7.md +1 -1
- package/docs/es/intlayer_with_nextjs_15.md +36 -9
- package/docs/es/intlayer_with_nextjs_16.md +36 -9
- package/docs/fr/intlayer_with_nextjs_15.md +36 -9
- package/docs/fr/intlayer_with_nextjs_16.md +37 -24
- package/docs/hi/intlayer_with_nextjs_15.md +36 -9
- package/docs/hi/intlayer_with_nextjs_16.md +36 -9
- package/docs/id/intlayer_with_nextjs_16.md +36 -9
- package/docs/it/intlayer_with_nextjs_15.md +36 -9
- package/docs/it/intlayer_with_nextjs_16.md +36 -9
- package/docs/ja/intlayer_with_nextjs_15.md +36 -9
- package/docs/ja/intlayer_with_nextjs_16.md +36 -9
- package/docs/ko/intlayer_with_nextjs_15.md +36 -9
- package/docs/ko/intlayer_with_nextjs_16.md +36 -9
- package/docs/pl/intlayer_with_nextjs_16.md +36 -9
- package/docs/pt/intlayer_with_nextjs_15.md +36 -9
- package/docs/pt/intlayer_with_nextjs_16.md +36 -9
- package/docs/ru/intlayer_with_nextjs_15.md +36 -9
- package/docs/ru/intlayer_with_nextjs_16.md +36 -9
- package/docs/tr/intlayer_with_nextjs_15.md +36 -9
- package/docs/tr/intlayer_with_nextjs_16.md +39 -21
- package/docs/vi/intlayer_with_nextjs_16.md +36 -9
- package/docs/zh/intlayer_with_nextjs_15.md +36 -9
- package/docs/zh/intlayer_with_nextjs_16.md +36 -9
- package/package.json +14 -14
- package/src/generated/blog.entry.ts +19 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-12-24
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-11-01
|
|
4
4
|
title: كيفية أتمتة ترجمات JSON الخاصة بـ i18next باستخدام Intlayer
|
|
5
|
-
description: أتمتة ترجمات JSON الخاصة بك باستخدام Intlayer و i18next لتعزيز التدويل في تطبيقات
|
|
5
|
+
description: أتمتة ترجمات JSON الخاصة بك باستخدام Intlayer و i18next لتعزيز التدويل في تطبيقات جافا سكريبت.
|
|
6
6
|
keywords:
|
|
7
7
|
- Intlayer
|
|
8
8
|
- i18next
|
|
@@ -12,7 +12,7 @@ keywords:
|
|
|
12
12
|
- الترجمة
|
|
13
13
|
- React
|
|
14
14
|
- Next.js
|
|
15
|
-
-
|
|
15
|
+
- جافا سكريبت
|
|
16
16
|
- TypeScript
|
|
17
17
|
- الترحيل
|
|
18
18
|
- التكامل
|
|
@@ -20,16 +20,19 @@ slugs:
|
|
|
20
20
|
- blog
|
|
21
21
|
- intlayer-with-i18next
|
|
22
22
|
history:
|
|
23
|
+
- version: 7.0.6
|
|
24
|
+
date: 2025-11-01
|
|
25
|
+
changes: إضافة ملحق loadJSON
|
|
23
26
|
- version: 7.0.0
|
|
24
27
|
date: 2025-10-29
|
|
25
|
-
changes:
|
|
28
|
+
changes: تغيير إلى ملحق syncJSON
|
|
26
29
|
---
|
|
27
30
|
|
|
28
31
|
# كيفية أتمتة ترجمات JSON الخاصة بـ i18next باستخدام Intlayer
|
|
29
32
|
|
|
30
33
|
## ما هو Intlayer؟
|
|
31
34
|
|
|
32
|
-
**Intlayer** هي مكتبة تدويل مبتكرة ومفتوحة المصدر مصممة لمعالجة أوجه القصور في حلول i18n التقليدية. تقدم نهجًا حديثًا لإدارة المحتوى في تطبيقات
|
|
35
|
+
**Intlayer** هي مكتبة تدويل مبتكرة ومفتوحة المصدر مصممة لمعالجة أوجه القصور في حلول i18n التقليدية. تقدم نهجًا حديثًا لإدارة المحتوى في تطبيقات جافا سكريبت.
|
|
33
36
|
|
|
34
37
|
اطلع على مقارنة ملموسة مع i18next في منشور المدونة الخاص بنا [next-i18next مقابل next-intl مقابل Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md).
|
|
35
38
|
|
|
@@ -37,11 +40,12 @@ history:
|
|
|
37
40
|
|
|
38
41
|
بينما يوفر Intlayer حلاً ممتازًا مستقلاً لـ i18n (راجع دليل التكامل مع Next.js الخاص بنا [Next.js integration guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_with_nextjs_16.md))، قد ترغب في دمجه مع i18next لأسباب عدة:
|
|
39
42
|
|
|
40
|
-
1. **قاعدة الشيفرة الحالية**: لديك تنفيذ قائم لـ i18next
|
|
41
|
-
2. **متطلبات
|
|
43
|
+
1. **قاعدة الشيفرة الحالية**: لديك تنفيذ قائم لـ i18next وتريد الانتقال تدريجيًا إلى تجربة المطور المحسنة التي يقدمها Intlayer.
|
|
44
|
+
2. **متطلبات قديمة**: مشروعك يتطلب التوافق مع الإضافات أو سير العمل الحالي الخاص بـ i18next.
|
|
42
45
|
3. **ألفة الفريق**: فريقك معتاد على i18next لكنه يرغب في إدارة محتوى أفضل.
|
|
46
|
+
4. **استخدام ميزات Intlayer**: تريد استخدام ميزات Intlayer مثل إعلان المحتوى، إدارة مفاتيح الترجمة، حالة الترجمة، والمزيد.
|
|
43
47
|
|
|
44
|
-
**لهذا، يمكن تنفيذ Intlayer كمحول لـ i18next للمساعدة في أتمتة ترجمات JSON الخاصة بك في
|
|
48
|
+
**لهذا، يمكن تنفيذ Intlayer كمحول لـ i18next للمساعدة في أتمتة ترجمات JSON الخاصة بك في سطر الأوامر أو خطوط أنابيب CI/CD، اختبار ترجماتك، والمزيد.**
|
|
45
49
|
|
|
46
50
|
يوضح هذا الدليل كيفية الاستفادة من نظام إعلان المحتوى المتفوق في Intlayer مع الحفاظ على التوافق مع i18next.
|
|
47
51
|
|
|
@@ -67,16 +71,20 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
67
71
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
68
72
|
```
|
|
69
73
|
|
|
74
|
+
```bash packageManager="bun"
|
|
75
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
76
|
+
```
|
|
77
|
+
|
|
70
78
|
**وصف الحزم:**
|
|
71
79
|
|
|
72
80
|
- **intlayer**: المكتبة الأساسية لإدارة التدويل، إعلان المحتوى، والبناء
|
|
73
|
-
- **@intlayer/sync-json-plugin**:
|
|
81
|
+
- **@intlayer/sync-json-plugin**: مكون إضافي لتصدير إعلانات محتوى Intlayer إلى صيغة JSON المتوافقة مع i18next
|
|
74
82
|
|
|
75
|
-
### الخطوة 2: تنفيذ
|
|
83
|
+
### الخطوة 2: تنفيذ مكون Intlayer الإضافي لتغليف JSON
|
|
76
84
|
|
|
77
|
-
قم بإنشاء ملف
|
|
85
|
+
قم بإنشاء ملف تكوين Intlayer لتعريف اللغات المدعومة:
|
|
78
86
|
|
|
79
|
-
**إذا كنت
|
|
87
|
+
**إذا كنت ترغب أيضًا في تصدير قواميس JSON لـ i18next**، أضف مكون `syncJSON` الإضافي:
|
|
80
88
|
|
|
81
89
|
```typescript fileName="intlayer.config.ts"
|
|
82
90
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -89,7 +97,7 @@ const config: IntlayerConfig = {
|
|
|
89
97
|
},
|
|
90
98
|
plugins: [
|
|
91
99
|
syncJSON({
|
|
92
|
-
source: ({ key, locale }) => `./
|
|
100
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
93
101
|
}),
|
|
94
102
|
],
|
|
95
103
|
};
|
|
@@ -97,21 +105,66 @@ const config: IntlayerConfig = {
|
|
|
97
105
|
export default config;
|
|
98
106
|
```
|
|
99
107
|
|
|
100
|
-
|
|
108
|
+
سيقوم مكون الإضافة `syncJSON` تلقائيًا بتغليف ملفات JSON. سيقرأ ويكتب ملفات JSON دون تغيير هيكل المحتوى.
|
|
101
109
|
|
|
102
|
-
إذا كنت
|
|
110
|
+
إذا كنت ترغب في جعل ملفات JSON تتعايش مع ملفات إعلان محتوى intlayer (`.content`)، فسيتبع Intlayer الطريقة التالية:
|
|
103
111
|
|
|
104
112
|
1. تحميل كل من ملفات JSON وملفات إعلان المحتوى وتحويلها إلى قاموس intlayer.
|
|
105
|
-
2. إذا كانت هناك تعارضات بين ملفات JSON وملفات إعلان المحتوى،
|
|
113
|
+
2. إذا كانت هناك تعارضات بين ملفات JSON وملفات إعلان المحتوى، سيقوم Intlayer بدمج جميع القواميس. وذلك حسب أولوية المكونات الإضافية وأولوية ملف إعلان المحتوى (كلها قابلة للتكوين).
|
|
114
|
+
|
|
115
|
+
إذا تم إجراء تغييرات باستخدام واجهة الأوامر CLI لترجمة JSON، أو باستخدام نظام إدارة المحتوى CMS، سيقوم Intlayer بتحديث ملف JSON بالترجمات الجديدة.
|
|
116
|
+
|
|
117
|
+
للاطلاع على مزيد من التفاصيل حول المكون الإضافي `syncJSON`، يرجى الرجوع إلى [توثيق مكون syncJSON الإضافي](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/plugins/sync-json.md).
|
|
118
|
+
|
|
119
|
+
### (اختياري) الخطوة 3: تنفيذ ترجمات JSON لكل مكون على حدة
|
|
120
|
+
|
|
121
|
+
بشكل افتراضي، سيقوم Intlayer بتحميل ودمج ومزامنة كل من ملفات JSON وملفات إعلان المحتوى. راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md) لمزيد من التفاصيل. ولكن إذا كنت تفضل، باستخدام مكون إضافي من Intlayer، يمكنك أيضًا تنفيذ إدارة JSON المترجمة لكل مكون في أي مكان في قاعدة الشيفرة الخاصة بك.
|
|
122
|
+
|
|
123
|
+
لهذا الغرض، يمكنك استخدام المكون الإضافي `loadJSON`.
|
|
106
124
|
|
|
107
|
-
|
|
125
|
+
```ts fileName="intlayer.config.ts"
|
|
126
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
127
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
128
|
+
|
|
129
|
+
const config: IntlayerConfig = {
|
|
130
|
+
internationalization: {
|
|
131
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
132
|
+
defaultLocale: Locales.ENGLISH,
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
// حافظ على مزامنة ملفات JSON الحالية مع قواميس Intlayer
|
|
136
|
+
plugins: [
|
|
137
|
+
/**
|
|
138
|
+
* سيقوم بتحميل جميع ملفات JSON في مجلد src التي تطابق النمط {key}.i18n.json
|
|
139
|
+
*/
|
|
140
|
+
loadJSON({
|
|
141
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
142
|
+
locale: Locales.ENGLISH,
|
|
143
|
+
priority: 1, // يضمن أن هذه الملفات JSON لها أولوية على الملفات في `./locales/en/${key}.json`
|
|
144
|
+
}),
|
|
145
|
+
/**
|
|
146
|
+
* سيقوم بتحميل، وكتابة المخرجات والترجمات مرة أخرى إلى ملفات JSON في مجلد locales
|
|
147
|
+
*/
|
|
148
|
+
syncJSON({
|
|
149
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
150
|
+
priority: 0,
|
|
151
|
+
}),
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export default config;
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
سيقوم هذا بتحميل جميع ملفات JSON في مجلد `src` التي تطابق النمط `{key}.i18n.json` وتحميلها كقواميس Intlayer.
|
|
159
|
+
|
|
160
|
+
---
|
|
108
161
|
|
|
109
|
-
##
|
|
162
|
+
## إعدادات Git
|
|
110
163
|
|
|
111
164
|
يوصى بتجاهل ملفات Intlayer التي يتم إنشاؤها تلقائيًا:
|
|
112
165
|
|
|
113
166
|
```plaintext fileName=".gitignore"
|
|
114
|
-
# تجاهل الملفات التي
|
|
167
|
+
# تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer
|
|
115
168
|
.intlayer
|
|
116
169
|
```
|
|
117
170
|
|
|
@@ -6,22 +6,25 @@ description: دمج إنتلاير مع next-i18next لحل شامل للتدو
|
|
|
6
6
|
keywords:
|
|
7
7
|
- i18next
|
|
8
8
|
- next-i18next
|
|
9
|
-
-
|
|
9
|
+
- إنتلاير
|
|
10
10
|
- التدويل
|
|
11
11
|
- مدونة
|
|
12
12
|
- Next.js
|
|
13
|
-
-
|
|
13
|
+
- جافا سكريبت
|
|
14
14
|
- React
|
|
15
15
|
slugs:
|
|
16
16
|
- blog
|
|
17
17
|
- intlayer-with-next-i18next
|
|
18
18
|
history:
|
|
19
|
+
- version: 7.0.6
|
|
20
|
+
date: 2025-11-01
|
|
21
|
+
changes: إضافة إضافة loadJSON
|
|
19
22
|
- version: 7.0.0
|
|
20
23
|
date: 2025-10-29
|
|
21
|
-
changes: التغيير إلى
|
|
24
|
+
changes: التغيير إلى إضافة syncJSON وإعادة كتابة شاملة
|
|
22
25
|
---
|
|
23
26
|
|
|
24
|
-
# التدويل في Next.js (i18n)
|
|
27
|
+
# التدويل في Next.js (i18n) مع next-i18next و إنتلاير
|
|
25
28
|
|
|
26
29
|
## جدول المحتويات
|
|
27
30
|
|
|
@@ -29,14 +32,14 @@ history:
|
|
|
29
32
|
|
|
30
33
|
## ما هو next-i18next؟
|
|
31
34
|
|
|
32
|
-
**next-i18next**
|
|
35
|
+
**next-i18next** هي واحدة من أكثر أُطُر التدويل (i18n) شعبية لتطبيقات Next.js. مبنية على نظام **i18next** القوي، توفر حلاً شاملاً لإدارة الترجمات، والتعريب، وتبديل اللغات في مشاريع Next.js.
|
|
33
36
|
|
|
34
37
|
ومع ذلك، يأتي next-i18next مع بعض التحديات:
|
|
35
38
|
|
|
36
|
-
- **إعداد معقد**: يتطلب إعداد next-i18next ملفات
|
|
37
|
-
- **ترجمات متفرقة**: عادةً ما تُخزن ملفات الترجمة في مجلدات منفصلة عن المكونات، مما
|
|
38
|
-
- **إدارة
|
|
39
|
-
- **سلامة نوع محدودة**: يتطلب دعم TypeScript
|
|
39
|
+
- **إعداد معقد**: يتطلب إعداد next-i18next ملفات تكوين متعددة وإعداد دقيق لحالات i18n على جانب الخادم والعميل.
|
|
40
|
+
- **ترجمات متفرقة**: عادةً ما تُخزن ملفات الترجمة في مجلدات منفصلة عن المكونات، مما يصعب الحفاظ على الاتساق.
|
|
41
|
+
- **إدارة يدوية للمساحات الاسمية**: يحتاج المطورون إلى إدارة المساحات الاسمية يدويًا وضمان تحميل موارد الترجمة بشكل صحيح.
|
|
42
|
+
- **سلامة نوع محدودة**: يتطلب دعم TypeScript تكوينًا إضافيًا ولا يوفر توليد أنواع تلقائي للترجمات.
|
|
40
43
|
|
|
41
44
|
## ما هو Intlayer؟
|
|
42
45
|
|
|
@@ -48,9 +51,9 @@ history:
|
|
|
48
51
|
|
|
49
52
|
بينما توفر Intlayer حلاً ممتازًا مستقلًا للترجمة الدولية (راجع دليل التكامل مع Next.js الخاص بنا [Next.js integration guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_with_nextjs_16.md))، قد ترغب في دمجها مع next-i18next لأسباب عدة:
|
|
50
53
|
|
|
51
|
-
1. **قاعدة كود موجودة**: لديك تنفيذ قائم لـ next-i18next
|
|
54
|
+
1. **قاعدة كود موجودة**: لديك تنفيذ قائم لـ next-i18next وتريد الترحيل تدريجيًا إلى تجربة المطور المحسنة التي تقدمها Intlayer.
|
|
52
55
|
2. **متطلبات قديمة**: مشروعك يتطلب التوافق مع الإضافات أو سير العمل الحالي لـ i18next.
|
|
53
|
-
3. **ألفة الفريق**: فريقك معتاد على next-i18next
|
|
56
|
+
3. **ألفة الفريق**: فريقك معتاد على next-i18next لكنه يرغب في إدارة محتوى أفضل.
|
|
54
57
|
|
|
55
58
|
لهذا، يمكن تنفيذ Intlayer كمحول لـ next-i18next للمساعدة في أتمتة ترجمات JSON الخاصة بك في واجهة الأوامر أو خطوط أنابيب CI/CD، واختبار ترجماتك، والمزيد.
|
|
56
59
|
|
|
@@ -76,20 +79,20 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
76
79
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
77
80
|
```
|
|
78
81
|
|
|
82
|
+
```bash packageManager="bun"
|
|
83
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
84
|
+
```
|
|
85
|
+
|
|
79
86
|
**توضيحات الحزم:**
|
|
80
87
|
|
|
81
88
|
- **intlayer**: المكتبة الأساسية لإعلان المحتوى وإدارته
|
|
82
|
-
-
|
|
83
|
-
- **i18next**: إطار العمل الأساسي للتدويل (i18n)
|
|
84
|
-
- **next-i18next**: غلاف Next.js لـ i18next
|
|
85
|
-
- **i18next-resources-to-backend**: تحميل الموارد الديناميكي لـ i18next
|
|
86
|
-
- **@intlayer/sync-json-plugin**: إضافة لمزامنة إعلانات محتوى Intlayer مع صيغة JSON الخاصة بـ i18next
|
|
89
|
+
- **@intlayer/sync-json-plugin**: الإضافة لمزامنة إعلانات محتوى Intlayer إلى صيغة JSON الخاصة بـ i18next
|
|
87
90
|
|
|
88
91
|
### الخطوة 2: تنفيذ إضافة Intlayer لتغليف JSON
|
|
89
92
|
|
|
90
93
|
قم بإنشاء ملف تكوين Intlayer لتعريف اللغات المدعومة لديك:
|
|
91
94
|
|
|
92
|
-
**إذا كنت
|
|
95
|
+
**إذا كنت ترغب أيضًا في تصدير قواميس JSON لـ i18next**، أضف إضافة `syncJSON`:
|
|
93
96
|
|
|
94
97
|
```typescript fileName="intlayer.config.ts"
|
|
95
98
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -102,7 +105,7 @@ const config: IntlayerConfig = {
|
|
|
102
105
|
},
|
|
103
106
|
plugins: [
|
|
104
107
|
syncJSON({
|
|
105
|
-
source: ({ key, locale }) => `./
|
|
108
|
+
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
106
109
|
}),
|
|
107
110
|
],
|
|
108
111
|
};
|
|
@@ -110,41 +113,63 @@ const config: IntlayerConfig = {
|
|
|
110
113
|
export default config;
|
|
111
114
|
```
|
|
112
115
|
|
|
113
|
-
|
|
116
|
+
سيقوم مكون `syncJSON` تلقائيًا بتغليف ملفات JSON. سيقرأ ويكتب ملفات JSON دون تغيير هيكل المحتوى.
|
|
114
117
|
|
|
115
|
-
إذا كنت
|
|
118
|
+
إذا كنت ترغب في جعل ملفات JSON تتعايش مع ملفات إعلان المحتوى الخاصة بـ intlayer (`.content` files)، فسيعمل Intlayer بالطريقة التالية:
|
|
116
119
|
|
|
117
120
|
1. تحميل كل من ملفات JSON وملفات إعلان المحتوى وتحويلها إلى قاموس intlayer.
|
|
121
|
+
2. إذا كانت هناك تعارضات بين ملفات JSON وملفات إعلان المحتوى، فسيقوم Intlayer بدمج جميع القواميس. وذلك يعتمد على أولوية الإضافات (plugins) وأولوية ملف إعلان المحتوى (كلها قابلة للتكوين).
|
|
118
122
|
|
|
119
|
-
|
|
123
|
+
إذا تم إجراء تغييرات باستخدام واجهة الأوامر (CLI) لترجمة ملفات JSON، أو باستخدام نظام إدارة المحتوى (CMS)، فسيقوم Intlayer بتحديث ملف JSON بالترجمات الجديدة.
|
|
120
124
|
|
|
121
|
-
|
|
125
|
+
لمزيد من التفاصيل حول إضافة `syncJSON`، يرجى الرجوع إلى [توثيق إضافة syncJSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/plugins/sync-json.md).
|
|
122
126
|
|
|
123
127
|
---
|
|
124
128
|
|
|
125
|
-
|
|
129
|
+
### (اختياري) الخطوة 3: تنفيذ ترجمات JSON لكل مكون على حدة
|
|
126
130
|
|
|
127
|
-
|
|
131
|
+
بشكل افتراضي، يقوم Intlayer بتحميل ودمج ومزامنة كل من ملفات JSON وملفات إعلان المحتوى. راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md) لمزيد من التفاصيل. ولكن إذا كنت تفضل، باستخدام إضافة Intlayer، يمكنك أيضًا تنفيذ إدارة JSON المترجمة لكل مكون في أي مكان في قاعدة الشيفرة الخاصة بك.
|
|
128
132
|
|
|
129
|
-
|
|
130
|
-
# تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer
|
|
131
|
-
.intlayer
|
|
132
|
-
intl
|
|
133
|
-
```
|
|
133
|
+
لهذا، يمكنك استخدام الإضافة `loadJSON`.
|
|
134
134
|
|
|
135
|
-
|
|
135
|
+
```ts fileName="intlayer.config.ts"
|
|
136
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
137
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
136
138
|
|
|
137
|
-
|
|
139
|
+
const config: IntlayerConfig = {
|
|
140
|
+
internationalization: {
|
|
141
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
142
|
+
defaultLocale: Locales.ENGLISH,
|
|
143
|
+
},
|
|
138
144
|
|
|
139
|
-
|
|
145
|
+
// حافظ على مزامنة ملفات JSON الحالية مع قواميس Intlayer
|
|
146
|
+
plugins: [
|
|
147
|
+
/**
|
|
148
|
+
* سيقوم بتحميل جميع ملفات JSON في مجلد src التي تطابق النمط {key}.i18n.json
|
|
149
|
+
*/
|
|
150
|
+
loadJSON({
|
|
151
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
152
|
+
locale: Locales.ENGLISH,
|
|
153
|
+
priority: 1, // يضمن أن هذه الملفات JSON لها أولوية على الملفات في `./public/locales/en/${key}.json`
|
|
154
|
+
}),
|
|
155
|
+
/**
|
|
156
|
+
* سيقوم بتحميل وكتابة المخرجات والترجمات مرة أخرى إلى ملفات JSON في دليل اللغات
|
|
157
|
+
*/
|
|
158
|
+
syncJSON({
|
|
159
|
+
source: ({ key, locale }) => `./public/locales/${locale}/${key}.json`,
|
|
160
|
+
priority: 0,
|
|
161
|
+
}),
|
|
162
|
+
],
|
|
163
|
+
};
|
|
140
164
|
|
|
141
|
-
|
|
165
|
+
export default config;
|
|
166
|
+
```
|
|
142
167
|
|
|
143
|
-
|
|
168
|
+
سيقوم هذا بتحميل جميع ملفات JSON في دليل `src` التي تطابق النمط `{key}.i18n.json` وتحميلها كقواميس لـ Intlayer.
|
|
144
169
|
|
|
145
170
|
---
|
|
146
171
|
|
|
147
|
-
##
|
|
172
|
+
## إعدادات Git
|
|
148
173
|
|
|
149
174
|
استبعاد الملفات المُولدة من نظام التحكم في الإصدارات:
|
|
150
175
|
|
|
@@ -158,6 +183,6 @@ intl
|
|
|
158
183
|
|
|
159
184
|
### إضافة VS Code
|
|
160
185
|
|
|
161
|
-
لتحسين تجربة المطور، قم بتثبيت
|
|
186
|
+
لتحسين تجربة المطور، قم بتثبيت **امتداد Intlayer الرسمي لـ VS Code**:
|
|
162
187
|
|
|
163
188
|
[التثبيت من سوق VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
@@ -7,16 +7,19 @@ slugs:
|
|
|
7
7
|
- blog
|
|
8
8
|
- intlayer-with-next-intl
|
|
9
9
|
history:
|
|
10
|
+
- version: 7.0.6
|
|
11
|
+
date: 2025-11-01
|
|
12
|
+
changes: إضافة ملحق loadJSON
|
|
10
13
|
- version: 7.0.0
|
|
11
14
|
date: 2025-10-29
|
|
12
|
-
changes: التغيير إلى
|
|
15
|
+
changes: التغيير إلى ملحق syncJSON
|
|
13
16
|
---
|
|
14
17
|
|
|
15
18
|
# كيفية أتمتة ترجمات JSON الخاصة بـ next-intl باستخدام Intlayer
|
|
16
19
|
|
|
17
20
|
## ما هو Intlayer؟
|
|
18
21
|
|
|
19
|
-
**Intlayer**
|
|
22
|
+
**Intlayer** هي مكتبة تدويل مبتكرة ومفتوحة المصدر مصممة لمعالجة أوجه القصور في حلول i18n التقليدية. تقدم نهجًا حديثًا لإدارة المحتوى في تطبيقات Next.js.
|
|
20
23
|
|
|
21
24
|
راجع مقارنة ملموسة مع next-intl في منشور المدونة الخاص بنا [next-i18next مقابل next-intl مقابل Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md).
|
|
22
25
|
|
|
@@ -24,11 +27,11 @@ history:
|
|
|
24
27
|
|
|
25
28
|
بينما يوفر Intlayer حلاً ممتازًا مستقلاً للتدويل (راجع دليل التكامل مع Next.js الخاص بنا [Next.js integration guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_with_nextjs_16.md))، قد ترغب في دمجه مع next-intl لأسباب عدة:
|
|
26
29
|
|
|
27
|
-
1. **قاعدة الشيفرة الحالية**: لديك تنفيذ قائم لـ next-intl
|
|
28
|
-
2. **متطلبات قديمة**: يتطلب مشروعك التوافق مع
|
|
30
|
+
1. **قاعدة الشيفرة الحالية**: لديك تنفيذ قائم لـ next-intl وتريد الترحيل تدريجيًا إلى تجربة المطور المحسنة التي يوفرها Intlayer.
|
|
31
|
+
2. **متطلبات قديمة**: يتطلب مشروعك التوافق مع ملحقات أو سير عمل next-intl الحالية.
|
|
29
32
|
3. **ألفة الفريق**: فريقك مرتاح لاستخدام next-intl ولكنه يرغب في إدارة محتوى أفضل.
|
|
30
33
|
|
|
31
|
-
**لهذا السبب، يمكن تنفيذ Intlayer كمحول لـ next-intl للمساعدة في أتمتة ترجمات JSON الخاصة بك في واجهة الأوامر أو خطوط أنابيب CI/CD،
|
|
34
|
+
**لهذا السبب، يمكن تنفيذ Intlayer كمحول لـ next-intl للمساعدة في أتمتة ترجمات JSON الخاصة بك في واجهة الأوامر أو خطوط أنابيب CI/CD، اختبار ترجماتك، والمزيد.**
|
|
32
35
|
|
|
33
36
|
يوضح هذا الدليل كيفية الاستفادة من نظام إعلان المحتوى المتفوق في Intlayer مع الحفاظ على التوافق مع next-intl.
|
|
34
37
|
|
|
@@ -54,6 +57,10 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
54
57
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
55
58
|
```
|
|
56
59
|
|
|
60
|
+
```bash packageManager="bun"
|
|
61
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
62
|
+
```
|
|
63
|
+
|
|
57
64
|
**وصف الحزم:**
|
|
58
65
|
|
|
59
66
|
- **intlayer**: المكتبة الأساسية لإدارة التدويل، إعلان المحتوى، والبناء
|
|
@@ -84,16 +91,59 @@ const config: IntlayerConfig = {
|
|
|
84
91
|
export default config;
|
|
85
92
|
```
|
|
86
93
|
|
|
87
|
-
ستقوم إضافة `syncJSON` تلقائيًا بتغليف JSON.
|
|
94
|
+
ستقوم إضافة `syncJSON` تلقائيًا بتغليف JSON. ستقوم بقراءة وكتابة ملفات JSON دون تغيير بنية المحتوى.
|
|
88
95
|
|
|
89
|
-
إذا كنت تريد جعل JSON يتعايش مع ملفات إعلان
|
|
96
|
+
إذا كنت تريد جعل JSON يتعايش مع ملفات إعلان محتوى intlayer (`.content` files)، فسيعمل Intlayer بهذه الطريقة:
|
|
90
97
|
|
|
91
98
|
1. تحميل كل من ملفات JSON وملفات إعلان المحتوى وتحويلها إلى قاموس intlayer.
|
|
92
99
|
2. إذا كانت هناك تعارضات بين ملفات JSON وملفات إعلان المحتوى، فسيقوم Intlayer بدمج جميع القواميس. وذلك يعتمد على أولوية الإضافات، وأولوية ملف إعلان المحتوى (كلها قابلة للتكوين).
|
|
93
100
|
|
|
94
|
-
إذا تم إجراء تغييرات باستخدام واجهة الأوامر
|
|
101
|
+
إذا تم إجراء تغييرات باستخدام واجهة سطر الأوامر لترجمة JSON، أو باستخدام نظام إدارة المحتوى (CMS)، فسيقوم Intlayer بتحديث ملف JSON بالترجمات الجديدة.
|
|
102
|
+
|
|
103
|
+
للاطلاع على مزيد من التفاصيل حول إضافة `syncJSON`، يرجى الرجوع إلى [توثيق إضافة syncJSON](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/plugins/sync-json.md).
|
|
104
|
+
|
|
105
|
+
### (اختياري) الخطوة 3: تنفيذ ترجمات JSON لكل مكون على حدة
|
|
106
|
+
|
|
107
|
+
بشكل افتراضي، سيقوم Intlayer بتحميل ودمج ومزامنة كل من ملفات JSON وملفات إعلان المحتوى. راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md) لمزيد من التفاصيل. ولكن إذا كنت تفضل، باستخدام إضافة من Intlayer، يمكنك أيضًا تنفيذ إدارة JSON مخصصة لكل مكون في أي مكان في قاعدة الشيفرة الخاصة بك.
|
|
108
|
+
|
|
109
|
+
لهذا الغرض، يمكنك استخدام إضافة `loadJSON`.
|
|
110
|
+
|
|
111
|
+
```ts fileName="intlayer.config.ts"
|
|
112
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
113
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
114
|
+
|
|
115
|
+
const config: IntlayerConfig = {
|
|
116
|
+
internationalization: {
|
|
117
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
118
|
+
defaultLocale: Locales.ENGLISH,
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
// حافظ على تزامن ملفات JSON الحالية مع قواميس Intlayer
|
|
122
|
+
plugins: [
|
|
123
|
+
/**
|
|
124
|
+
* سيقوم بتحميل جميع ملفات JSON في مجلد src التي تطابق النمط {key}.i18n.json
|
|
125
|
+
*/
|
|
126
|
+
loadJSON({
|
|
127
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
128
|
+
locale: Locales.ENGLISH,
|
|
129
|
+
priority: 1, // يضمن أن هذه الملفات JSON لها أولوية على الملفات في `./locales/en/${key}.json`
|
|
130
|
+
}),
|
|
131
|
+
/**
|
|
132
|
+
* سيقوم بتحميل وكتابة المخرجات والترجمات مرة أخرى إلى ملفات JSON في مجلد locales
|
|
133
|
+
*/
|
|
134
|
+
syncJSON({
|
|
135
|
+
source: ({ key, locale }) => `./messages/${locale}/${key}.json`,
|
|
136
|
+
priority: 0,
|
|
137
|
+
}),
|
|
138
|
+
],
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export default config;
|
|
142
|
+
```
|
|
95
143
|
|
|
96
|
-
|
|
144
|
+
سيؤدي هذا إلى تحميل جميع ملفات JSON الموجودة في دليل `src` التي تطابق النمط `{key}.i18n.json` وتحميلها كقواميس Intlayer.
|
|
145
|
+
|
|
146
|
+
## تكوين Git
|
|
97
147
|
|
|
98
148
|
يوصى بتجاهل ملفات Intlayer التي يتم إنشاؤها تلقائيًا:
|
|
99
149
|
|
|
@@ -104,10 +154,8 @@ export default config;
|
|
|
104
154
|
|
|
105
155
|
يمكن إعادة إنشاء هذه الملفات أثناء عملية البناء الخاصة بك ولا تحتاج إلى الالتزام بها في نظام التحكم في الإصدارات.
|
|
106
156
|
|
|
107
|
-
###
|
|
108
|
-
|
|
109
|
-
لتحسين تجربة المطور، قم بتثبيت **إضافة Intlayer الرسمية لـ VS Code**:
|
|
157
|
+
### امتداد VS Code
|
|
110
158
|
|
|
111
|
-
|
|
159
|
+
لتحسين تجربة المطور، قم بتثبيت **امتداد Intlayer الرسمي لـ VS Code**:
|
|
112
160
|
|
|
113
161
|
[التثبيت من سوق VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
@@ -18,9 +18,12 @@ slugs:
|
|
|
18
18
|
- blog
|
|
19
19
|
- intlayer-with-react-i18next
|
|
20
20
|
history:
|
|
21
|
+
- version: 7.0.6
|
|
22
|
+
date: 2025-11-01
|
|
23
|
+
changes: إضافة ملحق loadJSON
|
|
21
24
|
- version: 7.0.0
|
|
22
25
|
date: 2025-10-29
|
|
23
|
-
changes: التغيير إلى
|
|
26
|
+
changes: التغيير إلى ملحق syncJSON
|
|
24
27
|
---
|
|
25
28
|
|
|
26
29
|
# كيفية أتمتة ترجمات JSON الخاصة بـ react-i18next باستخدام Intlayer
|
|
@@ -35,9 +38,10 @@ history:
|
|
|
35
38
|
|
|
36
39
|
بينما يوفر Intlayer حلاً ممتازًا مستقلاً لـ i18n (راجع دليل التكامل مع React الخاص بنا [React integration guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_with_vite+react.md))، قد ترغب في دمجه مع react-i18next لأسباب عدة:
|
|
37
40
|
|
|
38
|
-
1. **قاعدة الشيفرة الحالية**: لديك تنفيذ قائم لـ react-i18next
|
|
39
|
-
2. **متطلبات قديمة**: مشروعك
|
|
40
|
-
3. **ألفة الفريق**: فريقك
|
|
41
|
+
1. **قاعدة الشيفرة الحالية**: لديك تنفيذ قائم لـ react-i18next وتريد الانتقال تدريجيًا إلى تجربة المطور المحسنة التي يقدمها Intlayer.
|
|
42
|
+
2. **متطلبات قديمة**: يتطلب مشروعك التوافق مع الإضافات أو سير العمل الحالي لـ react-i18next.
|
|
43
|
+
3. **ألفة الفريق**: فريقك معتاد على react-i18next لكنه يرغب في إدارة محتوى أفضل.
|
|
44
|
+
4. **استخدام ميزات Intlayer**: تريد استخدام ميزات Intlayer مثل إعلان المحتوى، وأتمتة الترجمة، واختبار الترجمات، والمزيد.
|
|
41
45
|
|
|
42
46
|
**لهذا، يمكن تنفيذ Intlayer كمحول لـ react-i18next للمساعدة في أتمتة ترجمات JSON الخاصة بك في واجهة الأوامر أو خطوط أنابيب CI/CD، واختبار ترجماتك، والمزيد.**
|
|
43
47
|
|
|
@@ -65,16 +69,20 @@ pnpm add intlayer @intlayer/sync-json-plugin
|
|
|
65
69
|
yarn add intlayer @intlayer/sync-json-plugin
|
|
66
70
|
```
|
|
67
71
|
|
|
72
|
+
```bash packageManager="bun"
|
|
73
|
+
bun add intlayer @intlayer/sync-json-plugin
|
|
74
|
+
```
|
|
75
|
+
|
|
68
76
|
**وصف الحزم:**
|
|
69
77
|
|
|
70
|
-
- **intlayer**: المكتبة الأساسية لإدارة التدويل،
|
|
71
|
-
- **@intlayer/sync-json-plugin**:
|
|
78
|
+
- **intlayer**: المكتبة الأساسية لإدارة التدويل، وإعلان المحتوى، والبناء
|
|
79
|
+
- **@intlayer/sync-json-plugin**: مكون إضافي لتصدير إعلانات محتوى Intlayer إلى تنسيق JSON المتوافق مع react-i18next
|
|
72
80
|
|
|
73
|
-
### الخطوة 2: تنفيذ
|
|
81
|
+
### الخطوة 2: تنفيذ مكون Intlayer الإضافي لتغليف JSON
|
|
74
82
|
|
|
75
|
-
|
|
83
|
+
أنشئ ملف تكوين Intlayer لتعريف اللغات المدعومة لديك:
|
|
76
84
|
|
|
77
|
-
**إذا كنت
|
|
85
|
+
**إذا كنت ترغب أيضًا في تصدير قواميس JSON لـ react-i18next**، أضف مكون `syncJSON` الإضافي:
|
|
78
86
|
|
|
79
87
|
```typescript fileName="intlayer.config.ts"
|
|
80
88
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -87,7 +95,7 @@ const config: IntlayerConfig = {
|
|
|
87
95
|
},
|
|
88
96
|
plugins: [
|
|
89
97
|
syncJSON({
|
|
90
|
-
source: ({ key, locale }) => `./
|
|
98
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
91
99
|
}),
|
|
92
100
|
],
|
|
93
101
|
};
|
|
@@ -95,23 +103,64 @@ const config: IntlayerConfig = {
|
|
|
95
103
|
export default config;
|
|
96
104
|
```
|
|
97
105
|
|
|
98
|
-
|
|
106
|
+
سيقوم مكون الإضافة `syncJSON` تلقائيًا بتغليف ملفات JSON. سيقرأ ويكتب ملفات JSON دون تغيير بنية المحتوى.
|
|
107
|
+
|
|
108
|
+
إذا كنت ترغب في جعل ملفات JSON تتعايش مع ملفات إعلان المحتوى الخاصة بـ Intlayer (`.content` files)، فسيتم التعامل معها بهذه الطريقة:
|
|
109
|
+
|
|
110
|
+
1. تحميل كل من ملفات JSON وملفات إعلان المحتوى وتحويلها إلى قاموس Intlayer.
|
|
111
|
+
2. إذا كانت هناك تعارضات بين ملفات JSON وملفات إعلان المحتوى، فسيقوم Intlayer بدمج جميع القواميس. وذلك يعتمد على أولوية المكونات الإضافية وأولوية ملفات إعلان المحتوى (كلها قابلة للتكوين).
|
|
112
|
+
|
|
113
|
+
إذا تم إجراء تغييرات باستخدام واجهة الأوامر CLI لترجمة JSON، أو باستخدام نظام إدارة المحتوى CMS، فسيقوم Intlayer بتحديث ملف JSON بالترجمات الجديدة.
|
|
114
|
+
|
|
115
|
+
للاطلاع على مزيد من التفاصيل حول المكون الإضافي `syncJSON`، يرجى الرجوع إلى [توثيق مكون syncJSON الإضافي](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/plugins/sync-json.md).
|
|
99
116
|
|
|
100
|
-
|
|
117
|
+
### (اختياري) الخطوة 3: تنفيذ ترجمات JSON لكل مكون
|
|
118
|
+
|
|
119
|
+
بشكل افتراضي، يقوم Intlayer بتحميل ودمج ومزامنة كل من ملفات JSON وملفات إعلان المحتوى. راجع [توثيق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md) لمزيد من التفاصيل. ولكن إذا كنت تفضل، باستخدام مكون إضافي من Intlayer، يمكنك أيضًا تنفيذ إدارة JSON لكل مكون محليًا في أي مكان في قاعدة الشيفرة الخاصة بك.
|
|
120
|
+
|
|
121
|
+
لهذا الغرض، يمكنك استخدام المكون الإضافي `loadJSON`.
|
|
122
|
+
|
|
123
|
+
```ts fileName="intlayer.config.ts"
|
|
124
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
125
|
+
import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";
|
|
126
|
+
|
|
127
|
+
const config: IntlayerConfig = {
|
|
128
|
+
internationalization: {
|
|
129
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
130
|
+
defaultLocale: Locales.ENGLISH,
|
|
131
|
+
},
|
|
101
132
|
|
|
102
|
-
|
|
103
|
-
|
|
133
|
+
// حافظ على تزامن ملفات JSON الحالية مع قواميس Intlayer
|
|
134
|
+
plugins: [
|
|
135
|
+
/**
|
|
136
|
+
* سيقوم بتحميل جميع ملفات JSON في مجلد src التي تطابق النمط {key}.i18n.json
|
|
137
|
+
*/
|
|
138
|
+
loadJSON({
|
|
139
|
+
source: ({ key }) => `./src/**/${key}.i18n.json`,
|
|
140
|
+
locale: Locales.ENGLISH,
|
|
141
|
+
priority: 1, // يضمن أن هذه الملفات JSON لها أولوية على الملفات في `./locales/en/${key}.json`
|
|
142
|
+
}),
|
|
143
|
+
/**
|
|
144
|
+
* سيقوم بتحميل، وكتابة المخرجات والترجمات مرة أخرى إلى ملفات JSON في مجلد locales
|
|
145
|
+
*/
|
|
146
|
+
syncJSON({
|
|
147
|
+
source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
|
|
148
|
+
priority: 0,
|
|
149
|
+
}),
|
|
150
|
+
],
|
|
151
|
+
};
|
|
104
152
|
|
|
105
|
-
|
|
153
|
+
export default config;
|
|
154
|
+
```
|
|
106
155
|
|
|
107
|
-
|
|
156
|
+
سيقوم هذا بتحميل جميع ملفات JSON في مجلد `src` التي تطابق النمط `{key}.i18n.json` وتحميلها كقواميس Intlayer.
|
|
108
157
|
|
|
109
|
-
##
|
|
158
|
+
## إعدادات Git
|
|
110
159
|
|
|
111
160
|
يوصى بتجاهل ملفات Intlayer التي يتم إنشاؤها تلقائيًا:
|
|
112
161
|
|
|
113
162
|
```plaintext fileName=".gitignore"
|
|
114
|
-
# تجاهل الملفات التي
|
|
163
|
+
# تجاهل الملفات التي تم إنشاؤها بواسطة Intlayer
|
|
115
164
|
.intlayer
|
|
116
165
|
```
|
|
117
166
|
|