@intlayer/docs 5.7.7 → 5.8.0-canary.0
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_next-i18next.md +3 -4
- package/blog/ar/intlayer_with_next-intl.md +3 -4
- package/blog/ar/intlayer_with_react-i18next.md +1 -1
- package/blog/ar/intlayer_with_react-intl.md +1 -1
- package/blog/de/intlayer_with_next-i18next.md +3 -4
- package/blog/de/intlayer_with_react-intl.md +1 -1
- package/blog/en/intlayer_with_next-i18next.md +3 -4
- package/blog/en/intlayer_with_next-intl.md +3 -4
- package/blog/en/intlayer_with_react-i18next.md +1 -1
- package/blog/en/intlayer_with_react-intl.md +1 -1
- package/blog/en-GB/intlayer_with_next-i18next.md +3 -4
- package/blog/en-GB/intlayer_with_next-intl.md +3 -4
- package/blog/en-GB/intlayer_with_react-i18next.md +1 -1
- package/blog/en-GB/intlayer_with_react-intl.md +1 -1
- package/blog/es/intlayer_with_next-i18next.md +3 -4
- package/blog/es/intlayer_with_next-intl.md +3 -4
- package/blog/es/intlayer_with_react-i18next.md +1 -1
- package/blog/es/intlayer_with_react-intl.md +1 -1
- package/blog/fr/intlayer_with_next-i18next.md +3 -4
- package/blog/fr/intlayer_with_next-intl.md +3 -4
- package/blog/fr/intlayer_with_react-i18next.md +1 -1
- package/blog/fr/intlayer_with_react-intl.md +1 -1
- package/blog/hi/intlayer_with_next-i18next.md +3 -4
- package/blog/hi/intlayer_with_next-intl.md +3 -4
- package/blog/hi/intlayer_with_react-i18next.md +1 -1
- package/blog/hi/intlayer_with_react-intl.md +1 -1
- package/blog/it/intlayer_with_next-i18next.md +3 -4
- package/blog/it/intlayer_with_next-intl.md +3 -4
- package/blog/it/intlayer_with_react-i18next.md +1 -1
- package/blog/it/intlayer_with_react-intl.md +1 -1
- package/blog/ja/intlayer_with_next-i18next.md +3 -4
- package/blog/ja/intlayer_with_next-intl.md +3 -4
- package/blog/ja/intlayer_with_react-intl.md +1 -1
- package/blog/ko/intlayer_with_next-i18next.md +3 -4
- package/blog/ko/intlayer_with_next-intl.md +3 -4
- package/blog/ko/intlayer_with_react-intl.md +1 -1
- package/blog/pt/intlayer_with_next-i18next.md +3 -4
- package/blog/pt/intlayer_with_next-intl.md +3 -4
- package/blog/pt/intlayer_with_react-intl.md +1 -1
- package/blog/ru/intlayer_with_next-i18next.md +3 -4
- package/blog/ru/intlayer_with_next-intl.md +3 -4
- package/blog/ru/intlayer_with_react-i18next.md +1 -1
- package/blog/ru/intlayer_with_react-intl.md +1 -1
- package/blog/zh/intlayer_with_next-i18next.md +3 -4
- package/blog/zh/intlayer_with_next-intl.md +3 -4
- package/blog/zh/intlayer_with_react-i18next.md +1 -1
- package/blog/zh/intlayer_with_react-intl.md +1 -1
- package/dist/cjs/generated/docs.entry.cjs +41 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +41 -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/CI_CD.md +67 -41
- package/docs/ar/formatters.md +239 -0
- package/docs/ar/interest_of_intlayer.md +162 -49
- package/docs/ar/introduction.md +3 -3
- package/docs/ar/packages/intlayer/index.md +3 -3
- package/docs/ar/packages/next-intlayer/index.md +3 -3
- package/docs/de/CI_CD.md +63 -37
- package/docs/de/formatters.md +239 -0
- package/docs/de/interest_of_intlayer.md +161 -47
- package/docs/de/introduction.md +3 -3
- package/docs/de/packages/intlayer/index.md +3 -3
- package/docs/de/packages/next-intlayer/index.md +3 -3
- package/docs/de/packages/react-intlayer/index.md +3 -3
- package/docs/en/CI_CD.md +51 -27
- package/docs/en/formatters.md +250 -0
- package/docs/en/interest_of_intlayer.md +159 -46
- package/docs/en/introduction.md +3 -3
- package/docs/en/packages/intlayer/index.md +3 -3
- package/docs/en/packages/next-intlayer/index.md +3 -3
- package/docs/en/packages/react-intlayer/index.md +3 -3
- package/docs/en-GB/CI_CD.md +58 -32
- package/docs/en-GB/formatters.md +239 -0
- package/docs/en-GB/interest_of_intlayer.md +160 -53
- package/docs/en-GB/packages/intlayer/index.md +3 -3
- package/docs/en-GB/packages/next-intlayer/index.md +3 -3
- package/docs/en-GB/packages/react-intlayer/index.md +3 -3
- package/docs/es/CI_CD.md +68 -42
- package/docs/es/formatters.md +239 -0
- package/docs/es/interest_of_intlayer.md +159 -47
- package/docs/es/introduction.md +3 -3
- package/docs/es/packages/intlayer/index.md +3 -3
- package/docs/es/packages/next-intlayer/index.md +3 -3
- package/docs/fr/formatters.md +239 -0
- package/docs/fr/interest_of_intlayer.md +160 -46
- package/docs/fr/introduction.md +3 -3
- package/docs/fr/packages/intlayer/index.md +3 -3
- package/docs/fr/packages/next-intlayer/index.md +3 -3
- package/docs/fr/packages/react-intlayer/index.md +3 -3
- package/docs/hi/CI_CD.md +69 -44
- package/docs/hi/formatters.md +239 -0
- package/docs/hi/interest_of_intlayer.md +158 -42
- package/docs/hi/introduction.md +3 -3
- package/docs/hi/packages/intlayer/index.md +3 -3
- package/docs/hi/packages/next-intlayer/index.md +3 -3
- package/docs/hi/packages/react-intlayer/index.md +3 -3
- package/docs/it/CI_CD.md +67 -41
- package/docs/it/formatters.md +239 -0
- package/docs/it/interest_of_intlayer.md +160 -46
- package/docs/it/introduction.md +3 -3
- package/docs/it/packages/intlayer/index.md +3 -3
- package/docs/it/packages/next-intlayer/index.md +3 -3
- package/docs/it/packages/react-intlayer/index.md +3 -3
- package/docs/ja/CI_CD.md +67 -41
- package/docs/ja/formatters.md +261 -0
- package/docs/ja/interest_of_intlayer.md +157 -48
- package/docs/ja/introduction.md +3 -3
- package/docs/ja/packages/intlayer/index.md +3 -3
- package/docs/ja/packages/next-intlayer/index.md +3 -3
- package/docs/ja/packages/react-intlayer/index.md +3 -3
- package/docs/ko/CI_CD.md +63 -37
- package/docs/ko/formatters.md +258 -0
- package/docs/ko/interest_of_intlayer.md +160 -48
- package/docs/ko/introduction.md +3 -3
- package/docs/ko/packages/intlayer/index.md +3 -3
- package/docs/ko/packages/next-intlayer/index.md +3 -3
- package/docs/ko/packages/react-intlayer/index.md +3 -3
- package/docs/pt/CI_CD.md +67 -41
- package/docs/pt/formatters.md +239 -0
- package/docs/pt/interest_of_intlayer.md +162 -47
- package/docs/pt/introduction.md +3 -3
- package/docs/pt/packages/intlayer/index.md +3 -3
- package/docs/pt/packages/next-intlayer/index.md +3 -3
- package/docs/pt/packages/react-intlayer/index.md +3 -3
- package/docs/ru/CI_CD.md +70 -44
- package/docs/ru/formatters.md +239 -0
- package/docs/ru/interest_of_intlayer.md +168 -50
- package/docs/ru/introduction.md +3 -3
- package/docs/ru/packages/intlayer/index.md +3 -3
- package/docs/ru/packages/next-intlayer/index.md +3 -3
- package/docs/ru/packages/react-intlayer/index.md +3 -3
- package/docs/zh/CI_CD.md +62 -36
- package/docs/zh/formatters.md +239 -0
- package/docs/zh/interest_of_intlayer.md +158 -48
- package/docs/zh/introduction.md +3 -3
- package/docs/zh/packages/intlayer/index.md +3 -3
- package/docs/zh/packages/next-intlayer/index.md +3 -3
- package/docs/zh/packages/react-intlayer/index.md +3 -3
- package/package.json +12 -12
- package/src/generated/docs.entry.ts +41 -0
|
@@ -1,51 +1,114 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-14
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-08-20
|
|
4
4
|
title: أهمية Intlayer
|
|
5
|
-
description: اكتشف فوائد ومزايا استخدام Intlayer في مشاريعك.
|
|
5
|
+
description: اكتشف فوائد ومزايا استخدام Intlayer في مشاريعك. فهم لماذا يتميز Intlayer بين الأُطُر الأخرى.
|
|
6
6
|
keywords:
|
|
7
|
-
-
|
|
8
|
-
-
|
|
7
|
+
- الفوائد
|
|
8
|
+
- المزايا
|
|
9
9
|
- Intlayer
|
|
10
|
-
- إطار
|
|
11
|
-
-
|
|
10
|
+
- إطار العمل
|
|
11
|
+
- المقارنة
|
|
12
12
|
slugs:
|
|
13
13
|
- doc
|
|
14
|
-
-
|
|
15
|
-
- interest
|
|
14
|
+
- why
|
|
16
15
|
---
|
|
17
16
|
|
|
18
|
-
#
|
|
17
|
+
# لماذا يجب أن تفكر في Intlayer؟
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
## ما هو Intlayer؟
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
**Intlayer** هو مكتبة تعريب (تدويل) مصممة خصيصًا لمطوري جافا سكريبت. يسمح لك بالإعلان عن محتواك في كل مكان داخل الكود الخاص بك. يقوم بتحويل إعلانات المحتوى متعدد اللغات إلى قواميس منظمة لتتكامل بسهولة في كودك. باستخدام TypeScript، يجعل **Intlayer** تطويرك أقوى وأكثر كفاءة.
|
|
22
|
+
|
|
23
|
+
## لماذا تم إنشاء Intlayer؟
|
|
24
|
+
|
|
25
|
+
تم إنشاء Intlayer لحل مشكلة شائعة تؤثر على جميع مكتبات i18n الشائعة مثل `next-intl`، `react-i18next`، `react-intl`، `next-i18next`، `react-intl`، و `vue-i18n`.
|
|
26
|
+
|
|
27
|
+
تعتمد كل هذه الحلول على نهج مركزي لقائمة وإدارة المحتوى الخاص بك. على سبيل المثال:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
.
|
|
31
|
+
├── locales
|
|
32
|
+
│ ├── en.json
|
|
33
|
+
│ ├── fr.json
|
|
34
|
+
│ └── es.json
|
|
35
|
+
├── i18n.ts
|
|
36
|
+
└── src
|
|
37
|
+
└── components
|
|
38
|
+
└── MyComponent
|
|
39
|
+
└── index.tsx
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
أو هنا باستخدام المساحات الاسمية:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
.
|
|
46
|
+
├── locales
|
|
47
|
+
│ ├── en
|
|
48
|
+
│ │ ├── footer.json
|
|
49
|
+
│ │ └── navbar.json
|
|
50
|
+
│ ├── fr
|
|
51
|
+
│ │ ├── footer.json
|
|
52
|
+
│ │ └── navbar.json
|
|
53
|
+
│ └── es
|
|
54
|
+
│ ├── footer.json
|
|
55
|
+
│ └── navbar.json
|
|
56
|
+
├── i18n.ts
|
|
57
|
+
└── src
|
|
58
|
+
└── components
|
|
59
|
+
└── MyComponent
|
|
60
|
+
└── index.tsx
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
هذا النوع من البنية يبطئ عملية التطوير ويجعل قاعدة الشيفرة أكثر تعقيدًا للصيانة لأسباب عدة:
|
|
64
|
+
|
|
65
|
+
1. **لأي مكون جديد يتم إنشاؤه، يجب عليك:**
|
|
66
|
+
- إنشاء المورد/المساحة الاسمية الجديدة في مجلد `locales`
|
|
67
|
+
- تذكر استيراد المساحة الاسمية الجديدة في صفحتك
|
|
68
|
+
- ترجمة المحتوى الخاص بك (غالبًا ما يتم ذلك يدويًا عن طريق النسخ/اللصق من مزودي الذكاء الاصطناعي)
|
|
69
|
+
|
|
70
|
+
2. **لأي تغيير يتم على مكوناتك، يجب عليك:**
|
|
71
|
+
- البحث عن المورد/المساحة الاسمية ذات الصلة (بعيدًا عن المكون)
|
|
72
|
+
- ترجمة المحتوى الخاص بك
|
|
73
|
+
- التأكد من تحديث المحتوى الخاص بك لكل لغة
|
|
74
|
+
- التحقق من أن المساحة الاسمية لا تحتوي على مفاتيح/قيم غير مستخدمة
|
|
75
|
+
- التأكد من أن هيكل ملفات JSON هو نفسه لجميع اللغات
|
|
76
|
+
|
|
77
|
+
في المشاريع الاحترافية التي تستخدم هذه الحلول، غالبًا ما تُستخدم منصات الترجمة للمساعدة في إدارة ترجمة المحتوى الخاص بك. ومع ذلك، يمكن أن يصبح هذا مكلفًا بسرعة للمشاريع الكبيرة.
|
|
78
|
+
|
|
79
|
+
لحل هذه المشكلة، تعتمد Intlayer نهجًا يقوم بتحديد نطاق المحتوى الخاص بك لكل مكون ويحافظ على المحتوى قريبًا من المكون الخاص بك، كما نفعل غالبًا مع CSS (`styled-components`)، وأنواع البيانات، والوثائق (`storybook`)، أو اختبارات الوحدة (`jest`).
|
|
23
80
|
|
|
24
81
|
```bash codeFormat="typescript"
|
|
25
82
|
.
|
|
26
|
-
└──
|
|
83
|
+
└── components
|
|
27
84
|
└── MyComponent
|
|
28
85
|
├── index.content.ts
|
|
86
|
+
├── index.test.tsx
|
|
87
|
+
├── index.stories.tsx
|
|
29
88
|
└── index.tsx
|
|
30
89
|
```
|
|
31
90
|
|
|
32
91
|
```bash codeFormat="commonjs"
|
|
33
92
|
.
|
|
34
|
-
└──
|
|
93
|
+
└── components
|
|
35
94
|
└── MyComponent
|
|
36
95
|
├── index.content.cjs
|
|
37
|
-
|
|
96
|
+
├── index.test.mjs
|
|
97
|
+
├── index.stories.mjs
|
|
98
|
+
└── index.tsx
|
|
38
99
|
```
|
|
39
100
|
|
|
40
101
|
```bash codeFormat="esm"
|
|
41
102
|
.
|
|
42
|
-
└──
|
|
103
|
+
└── components
|
|
43
104
|
└── MyComponent
|
|
44
105
|
├── index.content.mjs
|
|
45
|
-
|
|
106
|
+
├── index.test.mjs
|
|
107
|
+
├── index.stories.mjs
|
|
108
|
+
└── index.tsx
|
|
46
109
|
```
|
|
47
110
|
|
|
48
|
-
```tsx fileName="./
|
|
111
|
+
```tsx fileName="./components/MyComponent/index.content.ts" codeFormat="typescript"
|
|
49
112
|
import { t, type Dictionary } from "intlayer";
|
|
50
113
|
|
|
51
114
|
const componentExampleContent = {
|
|
@@ -53,8 +116,8 @@ const componentExampleContent = {
|
|
|
53
116
|
content: {
|
|
54
117
|
myTranslatedContent: t({
|
|
55
118
|
en: "Hello World",
|
|
56
|
-
fr: "Bonjour le monde",
|
|
57
119
|
es: "Hola Mundo",
|
|
120
|
+
fr: "Bonjour le monde",
|
|
58
121
|
}),
|
|
59
122
|
},
|
|
60
123
|
} satisfies Dictionary;
|
|
@@ -62,18 +125,17 @@ const componentExampleContent = {
|
|
|
62
125
|
export default componentExampleContent;
|
|
63
126
|
```
|
|
64
127
|
|
|
65
|
-
```jsx fileName="./
|
|
128
|
+
```jsx fileName="./components/MyComponent/index.mjx" codeFormat="esm"
|
|
66
129
|
import { t } from "intlayer";
|
|
67
130
|
|
|
68
131
|
/** @type {import('intlayer').Dictionary} */
|
|
69
|
-
// محتوى مثال المكون
|
|
70
132
|
const componentExampleContent = {
|
|
71
133
|
key: "component-example",
|
|
72
134
|
content: {
|
|
73
135
|
myTranslatedContent: t({
|
|
74
136
|
en: "Hello World",
|
|
75
|
-
fr: "Bonjour le monde",
|
|
76
137
|
es: "Hola Mundo",
|
|
138
|
+
fr: "Bonjour le monde",
|
|
77
139
|
}),
|
|
78
140
|
},
|
|
79
141
|
};
|
|
@@ -81,18 +143,18 @@ const componentExampleContent = {
|
|
|
81
143
|
export default componentExampleContent;
|
|
82
144
|
```
|
|
83
145
|
|
|
84
|
-
```jsx fileName="./
|
|
146
|
+
```jsx fileName="./components/MyComponent/index.csx" codeFormat="commonjs"
|
|
85
147
|
const { t } = require("intlayer");
|
|
86
148
|
|
|
87
149
|
/** @type {import('intlayer').Dictionary} */
|
|
88
|
-
// محتوى
|
|
150
|
+
// تعريف محتوى المثال للمكون
|
|
89
151
|
const componentExampleContent = {
|
|
90
152
|
key: "component-example",
|
|
91
153
|
content: {
|
|
92
154
|
myTranslatedContent: t({
|
|
93
155
|
en: "Hello World",
|
|
94
|
-
fr: "Bonjour le monde",
|
|
95
156
|
es: "Hola Mundo",
|
|
157
|
+
fr: "Bonjour le monde",
|
|
96
158
|
}),
|
|
97
159
|
},
|
|
98
160
|
};
|
|
@@ -100,10 +162,9 @@ const componentExampleContent = {
|
|
|
100
162
|
module.exports = componentExampleContent;
|
|
101
163
|
```
|
|
102
164
|
|
|
103
|
-
```tsx fileName="./
|
|
165
|
+
```tsx fileName="./components/MyComponent/index.tsx" codeFormat="typescript"
|
|
104
166
|
import { useIntlayer } from "react-intlayer";
|
|
105
167
|
|
|
106
|
-
// مثال لمكون يستخدم intlayer لجلب المحتوى المترجم
|
|
107
168
|
export const ComponentExample = () => {
|
|
108
169
|
const { myTranslatedContent } = useIntlayer("component-example");
|
|
109
170
|
|
|
@@ -111,7 +172,7 @@ export const ComponentExample = () => {
|
|
|
111
172
|
};
|
|
112
173
|
```
|
|
113
174
|
|
|
114
|
-
```jsx fileName="./
|
|
175
|
+
```jsx fileName="./components/MyComponent/index.mjx" codeFormat="esm"
|
|
115
176
|
import { useIntlayer } from "react-intlayer";
|
|
116
177
|
|
|
117
178
|
const ComponentExample = () => {
|
|
@@ -121,7 +182,7 @@ const ComponentExample = () => {
|
|
|
121
182
|
};
|
|
122
183
|
```
|
|
123
184
|
|
|
124
|
-
```jsx fileName="./
|
|
185
|
+
```jsx fileName="./components/MyComponent/index.csx" codeFormat="commonjs"
|
|
125
186
|
const { useIntlayer } = require("react-intlayer");
|
|
126
187
|
|
|
127
188
|
const ComponentExample = () => {
|
|
@@ -131,27 +192,79 @@ const ComponentExample = () => {
|
|
|
131
192
|
};
|
|
132
193
|
```
|
|
133
194
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
195
|
+
تتيح لك هذه الطريقة:
|
|
196
|
+
|
|
197
|
+
1. **زيادة سرعة التطوير**
|
|
198
|
+
- يمكن إنشاء ملفات `.content.{{ts|mjs|cjs|json}}` باستخدام إضافة VSCode
|
|
199
|
+
- يمكن لأدوات الإكمال التلقائي المعتمدة على الذكاء الاصطناعي في بيئة التطوير الخاصة بك (مثل GitHub Copilot) مساعدتك في إعلان المحتوى الخاص بك، مما يقلل من النسخ/اللصق
|
|
200
|
+
|
|
201
|
+
2. **تقليل تعقيد قاعدة الشيفرة الخاصة بك**
|
|
202
|
+
|
|
203
|
+
3. **زيادة قابلية صيانة قاعدة الشيفرة الخاصة بك**
|
|
204
|
+
|
|
205
|
+
4. **تكرار مكوناتك والمحتوى المرتبط بها بسهولة أكبر (مثال: مكونات تسجيل الدخول/التسجيل، إلخ)**
|
|
206
|
+
- من خلال الحد من خطر التأثير على محتوى المكونات الأخرى
|
|
207
|
+
- من خلال نسخ/لصق المحتوى الخاص بك من تطبيق إلى آخر بدون تبعيات خارجية
|
|
208
|
+
|
|
209
|
+
5. **تجنب تلويث قاعدة الشيفرة الخاصة بك بمفاتيح/قيم غير مستخدمة للمكونات غير المستخدمة**
|
|
210
|
+
- إذا لم تستخدم مكونًا، فلن تحتاج إلى استيراد محتواه
|
|
211
|
+
- إذا قمت بحذف مكون، ستتذكر بسهولة أكبر إزالة المحتوى المرتبط به لأنه سيكون موجودًا في نفس المجلد
|
|
212
|
+
|
|
213
|
+
6. **تقليل تكلفة التفكير لوكلاء الذكاء الاصطناعي لإعلان المحتوى متعدد اللغات الخاص بك**
|
|
214
|
+
- لن يضطر وكيل الذكاء الاصطناعي إلى مسح قاعدة الشيفرة الخاصة بك بالكامل لمعرفة مكان تنفيذ المحتوى الخاص بك
|
|
215
|
+
- يمكن إجراء الترجمات بسهولة بواسطة أدوات الإكمال التلقائي للذكاء الاصطناعي في بيئة التطوير الخاصة بك (مثل GitHub Copilot)
|
|
216
|
+
|
|
217
|
+
7. **تحسين أداء التحميل**
|
|
218
|
+
- إذا تم تحميل مكون بشكل كسول، فسيتم تحميل المحتوى المرتبط به في نفس الوقت
|
|
219
|
+
|
|
220
|
+
## الميزات الإضافية لـ Intlayer
|
|
221
|
+
|
|
222
|
+
| الميزة | الوصف |
|
|
223
|
+
| ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
224
|
+
|  | **دعم عبر الأُطُر المختلفة**<br><br>يتوافق Intlayer مع جميع الأُطُر والمكتبات الرئيسية، بما في ذلك Next.js و React و Vite و Vue.js و Nuxt و Preact و Express والمزيد. |
|
|
225
|
+
|  | **إدارة المحتوى باستخدام جافاسكريبت**<br><br>استفد من مرونة جافاسكريبت لتعريف وإدارة محتواك بكفاءة. <br><br> - [إعلان المحتوى](https://intlayer.org/doc/concept/content) |
|
|
226
|
+
|  | **ملف إعلان المحتوى لكل لغة**<br><br>سرّع عملية تطويرك من خلال إعلان محتواك مرة واحدة، قبل التوليد التلقائي.<br><br> - [ملف إعلان المحتوى لكل لغة](https://intlayer.org/doc/concept/per-locale-file) |
|
|
227
|
+
|  | **بيئة آمنة من حيث النوع**<br><br>استفد من TypeScript لضمان أن تعريفات المحتوى والرمز الخاص بك خالية من الأخطاء، مع الاستفادة أيضًا من الإكمال التلقائي في بيئة التطوير المتكاملة (IDE).<br><br> - [تكوين TypeScript](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
|
|
228
|
+
|  | **إعداد مبسط**<br><br>ابدأ بسرعة مع أقل قدر من التهيئة. قم بضبط الإعدادات الخاصة بالتدويل، التوجيه، الذكاء الاصطناعي، البناء، وإدارة المحتوى بسهولة.<br><br> - [استكشاف تكامل Next.js](https://intlayer.org/doc/environment/nextjs) |
|
|
229
|
+
|  | **استرجاع المحتوى المبسط**<br><br>لا حاجة لاستدعاء دالة `t` لكل قطعة محتوى. استرجع كل محتواك مباشرة باستخدام هوك واحد.<br><br> - [تكامل React](https://intlayer.org/doc/environment/create-react-app) |
|
|
230
|
+
|  | **تنفيذ متسق لمكونات الخادم**<br><br>مناسب تمامًا لمكونات الخادم في Next.js، استخدم نفس التنفيذ لكل من مكونات العميل والخادم، لا حاجة لتمرير دالة `t` الخاصة بك عبر كل مكون خادم. <br><br> - [مكونات الخادم](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code) |
|
|
231
|
+
|  | **قاعدة شفرة منظمة**<br><br>حافظ على تنظيم قاعدة الشفرة الخاصة بك بشكل أفضل: مكون واحد = قاموس واحد في نفس المجلد. الترجمة القريبة من مكوناتها تعزز من سهولة الصيانة والوضوح. <br><br> - [كيف يعمل Intlayer](https://intlayer.org/doc/concept/how-works-intlayer) |
|
|
232
|
+
|  | **توجيه محسّن**<br><br>دعم كامل لتوجيه التطبيقات، يتكيف بسلاسة مع هياكل التطبيقات المعقدة، لـ Next.js و React و Vite و Vue.js، وغيرها.<br><br> - [استكشاف تكامل Next.js](https://intlayer.org/doc/environment/nextjs) |
|
|
233
|
+
|  | **دعم ماركداون**<br><br>استيراد وتفسير ملفات اللغة وملفات ماركداون عن بُعد للمحتوى متعدد اللغات مثل سياسات الخصوصية، الوثائق، إلخ. تفسير وجعل بيانات التعريف الخاصة بماركداون متاحة في كودك.<br><br> - [ملفات المحتوى](https://intlayer.org/doc/concept/content/file) |
|
|
234
|
+
|  | **محرر مرئي مجاني ونظام إدارة محتوى**<br><br>يتوفر محرر مرئي مجاني ونظام إدارة محتوى لكتاب المحتوى، مما يلغي الحاجة إلى منصة تعريب. حافظ على تزامن محتواك باستخدام Git، أو قم بتفويضه كليًا أو جزئيًا باستخدام نظام إدارة المحتوى.<br><br> - [محرر Intlayer](https://intlayer.org/doc/concept/editor) <br> - [نظام إدارة محتوى Intlayer](https://intlayer.org/doc/concept/cms) |
|
|
235
|
+
|  | **محتوى قابل للتقليل الشجري**<br><br>محتوى قابل للتقليل الشجري، مما يقلل من حجم الحزمة النهائية. يقوم بتحميل المحتوى لكل مكون، مستبعدًا أي محتوى غير مستخدم من الحزمة الخاصة بك. يدعم التحميل الكسول لتحسين كفاءة تحميل التطبيق. <br><br> - [تحسين بناء التطبيق](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization) |
|
|
236
|
+
|  | **العرض الثابت**<br><br>لا يعوق العرض الثابت.<br><br> - [تكامل Next.js](https://intlayer.org/doc/environment/nextjs) |
|
|
237
|
+
|  | **الترجمة المدعومة بالذكاء الاصطناعي**<br><br>حوّل موقعك الإلكتروني إلى 231 لغة بنقرة واحدة فقط باستخدام أدوات الترجمة المتقدمة المدعومة بالذكاء الاصطناعي من Intlayer باستخدام مزود الذكاء الاصطناعي الخاص بك/مفتاح API الخاص بك. <br><br> - [تكامل CI/CD](https://intlayer.org/doc/concept/ci-cd) <br> - [واجهة سطر أوامر Intlayer](https://intlayer.org/doc/concept/cli) <br> - [الملء التلقائي](https://intlayer.org/doc/concept/auto-fill) |
|
|
238
|
+
|  | **تكامل خادم MCP**<br><br>يوفر خادم MCP (بروتوكول سياق النموذج) لأتمتة بيئة التطوير المتكاملة (IDE)، مما يتيح إدارة محتوى سلسة وسير عمل التدويل (i18n) مباشرة داخل بيئة التطوير الخاصة بك. <br><br> - [خادم MCP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/mcp_server.md) |
|
|
239
|
+
|  | **امتداد VSCode**<br><br>يوفر Intlayer امتدادًا لـ VSCode لمساعدتك في إدارة المحتوى والترجمات الخاصة بك، وبناء قواميسك، وترجمة المحتوى الخاص بك، والمزيد.<br><br> - [امتداد VSCode](https://intlayer.org/doc/vs-code-extension) |
|
|
240
|
+
|  | **التشغيل البيني**<br><br>يتيح التشغيل البيني مع react-i18next و next-i18next و next-intl و react-intl. <br><br> - [Intlayer و react-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayer و next-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayer و next-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) |
|
|
241
|
+
|
|
242
|
+
## مقارنة Intlayer مع الحلول الأخرى
|
|
243
|
+
|
|
244
|
+
| الميزة | Intlayer | React-i18next / i18next | React-Intl (FormatJS) | LinguiJS | next-intl | next-i18next | vue-i18n |
|
|
245
|
+
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------------------------ |
|
|
246
|
+
| **الترجمات بالقرب من المكونات** | نعم، المحتوى موضوع بجانب كل مكون | لا | لا | لا | لا | لا | نعم - باستخدام `مكونات الملف الواحد` (SFCs) |
|
|
247
|
+
| **تكامل TypeScript** | متقدم، أنواع صارمة مولدة تلقائيًا | أساسي؛ إعداد إضافي للسلامة | جيد، لكنه أقل صرامة | أنواع، يحتاج إلى إعداد | جيد | أساسي | جيد (الأنواع متاحة؛ يحتاج إعداد لأمان المفاتيح) |
|
|
248
|
+
| **كشف الترجمات المفقودة** | خطأ/تحذير أثناء وقت البناء | في الغالب سلاسل بديلة أثناء وقت التشغيل | سلاسل بديلة | يحتاج إلى إعداد إضافي | سلاسل بديلة أثناء وقت التشغيل | سلاسل بديلة أثناء وقت التشغيل | سلاسل بديلة أثناء وقت التشغيل/تحذيرات (قابلة للتكوين) |
|
|
249
|
+
| **المحتوى الغني (JSX/Markdown/المكونات)** | دعم مباشر، حتى لعقد React | محدود / فقط التداخل | صيغة ICU، ليست JSX حقيقية | محدود | غير مصمم للعقد الغنية | محدود | محدود (المكونات عبر `<i18n-t>`، Markdown عبر الإضافات) |
|
|
250
|
+
| **الترجمة المدعومة بالذكاء الاصطناعي** | نعم، يدعم عدة مزودي ذكاء اصطناعي. يمكن استخدامه باستخدام مفاتيح API الخاصة بك. يأخذ في الاعتبار سياق تطبيقك ونطاق المحتوى | لا | لا | لا | لا | لا | لا |
|
|
251
|
+
| **المحرر المرئي** | نعم، محرر مرئي محلي + نظام إدارة محتوى اختياري؛ يمكنه إخراج محتوى قاعدة الشيفرة؛ قابل للتضمين | لا / متوفر عبر منصات الترجمة الخارجية | لا / متوفر عبر منصات الترجمة الخارجية | لا / متوفر عبر منصات الترجمة الخارجية | لا / متوفر عبر منصات الترجمة الخارجية | لا / متوفر عبر منصات الترجمة الخارجية | لا / متوفر عبر منصات الترجمة الخارجية |
|
|
252
|
+
| **التوجيه المحلي** | مدمج، دعم الوسيط | إضافات أو إعداد يدوي | غير مدمج | إعداد يدوي/إضافة | مدمج | مدمج | يدوي عبر Vue Router (يتعامل Nuxt i18n معه) |
|
|
253
|
+
| **توليد المسار الديناميكي** | نعم | إضافة/نظام بيئي أو إعداد يدوي | غير متوفر | إضافة/يدوي | نعم | نعم | غير متوفر (يوفره Nuxt i18n) |
|
|
254
|
+
| **التصريف الجمعي** | أنماط قائمة على التعداد؛ راجع الوثائق | قابل للتكوين (إضافات مثل i18next-icu) | متقدم (ICU) | متقدم (ICU/messageformat) | جيد | جيد | متقدم (قواعد الجمع المدمجة) |
|
|
255
|
+
| **التنسيق (التواريخ، الأرقام، العملات)** | منسقات محسّنة (Intl تحت الغطاء) | عبر الإضافات أو استخدام Intl مخصص | منسقات ICU متقدمة | مساعدو ICU/CLI | جيد (مساعدو Intl) | جيد (مساعدو Intl) | منسقات مدمجة للتواريخ/الأرقام (Intl) |
|
|
256
|
+
| **تنسيق المحتوى** | .tsx, .ts, .js, .json, .md, .txt | .json | .json, .js | .po, .json | .json, .js, .ts | .json | .json, .js |
|
|
257
|
+
| **دعم ICU** | جاري العمل عليه (ICU الأصلي) | عبر الإضافة (i18next-icu) | نعم | نعم | نعم | عبر الإضافة (i18next-icu) | عبر مهيئ/مجمّع مخصص |
|
|
258
|
+
| **مساعدو تحسين محركات البحث (hreflang، خريطة الموقع)** | أدوات مدمجة: مساعدات لخريطة الموقع، **robots.txt**، البيانات الوصفية | إضافات المجتمع/يدوي | ليست جزءًا أساسيًا | ليست جزءًا أساسيًا | جيد | جيد | ليست جزءًا أساسيًا (يوفر Nuxt i18n مساعدات) |
|
|
259
|
+
| **النظام البيئي / المجتمع** | أصغر ولكنها تنمو بسرعة وتتميز بالتفاعل | الأكبر والأكثر نضجًا | كبير، مؤسسي | ينمو، أصغر | متوسط الحجم، يركز على Next.js | متوسط الحجم، يركز على Next.js | كبير في نظام Vue البيئي |
|
|
260
|
+
| **التصيير على جانب الخادم ومكونات الخادم** | نعم، مُبسّط للتصيير على جانب الخادم / مكونات خادم React | مدعوم، يتطلب بعض الإعدادات | مدعوم في Next.js | مدعوم | دعم كامل | دعم كامل | التصيير على جانب الخادم عبر Nuxt/Vue SSR (بدون RSC) |
|
|
261
|
+
| **تحليل الشجرة (تحميل المحتوى المستخدم فقط)** | نعم، لكل مكون أثناء وقت البناء عبر إضافات Babel/SWC | عادةً ما يتم تحميل الكل (يمكن تحسينه باستخدام المساحات الاسمية/تقسيم الكود) | عادةً ما يتم تحميل الكل | ليس افتراضيًا | جزئي | جزئي | جزئي (مع تقسيم الكود/إعداد يدوي) |
|
|
262
|
+
| **التحميل الكسول** | نعم، لكل لغة/لكل مكون | نعم (مثل الخلفيات/الأسماء عند الطلب) | نعم (تقسيم حزم اللغة) | نعم (استيراد الكتالوجات الديناميكي) | نعم (لكل مسار/لكل لغة) | نعم (لكل مسار/لكل لغة) | نعم (رسائل اللغة غير المتزامنة) |
|
|
263
|
+
| **إدارة المشاريع الكبيرة** | يشجع على التصميم المعياري، مناسب لنظام التصميم | يحتاج إلى انضباط جيد في الملفات | يمكن أن تصبح الكتالوجات المركزية كبيرة | قد تصبح معقدة | معياري مع الإعداد | معياري مع الإعداد | معياري مع إعداد Vue Router/Nuxt i18n |
|
|
154
264
|
|
|
155
265
|
## تاريخ الوثيقة
|
|
156
266
|
|
|
157
|
-
|
|
267
|
+
| الإصدار | التاريخ | التغييرات |
|
|
268
|
+
| ------- | ---------- | ------------------- |
|
|
269
|
+
| 5.8.0 | 2025-08-19 | تحديث جدول المقارنة |
|
|
270
|
+
| 5.5.10 | 2025-06-29 | بدء التاريخ |
|
package/docs/ar/introduction.md
CHANGED
|
@@ -44,8 +44,8 @@ const componentContent = {
|
|
|
44
44
|
content: {
|
|
45
45
|
myTranslatedContent: t({
|
|
46
46
|
en: "Hello World",
|
|
47
|
-
fr: "Bonjour le monde",
|
|
48
47
|
es: "Hola Mundo",
|
|
48
|
+
fr: "Bonjour le monde",
|
|
49
49
|
}),
|
|
50
50
|
},
|
|
51
51
|
} satisfies Dictionary;
|
|
@@ -62,8 +62,8 @@ const componentContent = {
|
|
|
62
62
|
content: {
|
|
63
63
|
myTranslatedContent: t({
|
|
64
64
|
en: "Hello World",
|
|
65
|
-
fr: "Bonjour le monde",
|
|
66
65
|
es: "Hola Mundo",
|
|
66
|
+
fr: "Bonjour le monde",
|
|
67
67
|
}),
|
|
68
68
|
},
|
|
69
69
|
};
|
|
@@ -80,8 +80,8 @@ const componentContent = {
|
|
|
80
80
|
content: {
|
|
81
81
|
myTranslatedContent: t({
|
|
82
82
|
en: "Hello World",
|
|
83
|
-
fr: "Bonjour le monde",
|
|
84
83
|
es: "Hola Mundo",
|
|
84
|
+
fr: "Bonjour le monde",
|
|
85
85
|
}),
|
|
86
86
|
},
|
|
87
87
|
};
|
|
@@ -148,8 +148,8 @@ const clientComponentContent = {
|
|
|
148
148
|
content: {
|
|
149
149
|
myTranslatedContent: t({
|
|
150
150
|
en: "Hello World",
|
|
151
|
-
fr: "Bonjour le monde",
|
|
152
151
|
es: "Hola Mundo",
|
|
152
|
+
fr: "Bonjour le monde",
|
|
153
153
|
}),
|
|
154
154
|
numberOfCar: enu({
|
|
155
155
|
"<-1": "أقل من ناقص سيارة واحدة",
|
|
@@ -174,8 +174,8 @@ const clientComponentContent = {
|
|
|
174
174
|
content: {
|
|
175
175
|
myTranslatedContent: t({
|
|
176
176
|
en: "Hello World",
|
|
177
|
-
fr: "Bonjour le monde",
|
|
178
177
|
es: "Hola Mundo",
|
|
178
|
+
fr: "Bonjour le monde",
|
|
179
179
|
}),
|
|
180
180
|
numberOfCar: enu({
|
|
181
181
|
"<-1": "أقل من ناقص سيارة واحدة",
|
|
@@ -200,8 +200,8 @@ const clientComponentContent = {
|
|
|
200
200
|
content: {
|
|
201
201
|
myTranslatedContent: t({
|
|
202
202
|
en: "Hello World",
|
|
203
|
-
fr: "Bonjour le monde",
|
|
204
203
|
es: "Hola Mundo",
|
|
204
|
+
fr: "Bonjour le monde",
|
|
205
205
|
}),
|
|
206
206
|
numberOfCar: enu({
|
|
207
207
|
"<-1": "أقل من ناقص سيارة واحدة",
|
|
@@ -110,8 +110,8 @@ const clientComponentContent = {
|
|
|
110
110
|
content: {
|
|
111
111
|
myTranslatedContent: t({
|
|
112
112
|
en: "Hello World",
|
|
113
|
-
fr: "Bonjour le monde",
|
|
114
113
|
es: "Hola Mundo",
|
|
114
|
+
fr: "Bonjour le monde",
|
|
115
115
|
}),
|
|
116
116
|
numberOfCar: enu({
|
|
117
117
|
"<-1": "Less than minus one car",
|
|
@@ -136,8 +136,8 @@ const clientComponentContent = {
|
|
|
136
136
|
content: {
|
|
137
137
|
myTranslatedContent: t({
|
|
138
138
|
en: "Hello World",
|
|
139
|
-
fr: "Bonjour le monde",
|
|
140
139
|
es: "Hola Mundo",
|
|
140
|
+
fr: "Bonjour le monde",
|
|
141
141
|
}),
|
|
142
142
|
numberOfCar: enu({
|
|
143
143
|
"<-1": "أقل من ناقص سيارة واحدة",
|
|
@@ -162,8 +162,8 @@ const clientComponentContent = {
|
|
|
162
162
|
content: {
|
|
163
163
|
myTranslatedContent: t({
|
|
164
164
|
en: "Hello World",
|
|
165
|
-
fr: "Bonjour le monde",
|
|
166
165
|
es: "Hola Mundo",
|
|
166
|
+
fr: "Bonjour le monde",
|
|
167
167
|
}),
|
|
168
168
|
numberOfCar: enu({
|
|
169
169
|
"<-1": "أقل من ناقص سيارة واحدة",
|
package/docs/de/CI_CD.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-05-20
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-08-13
|
|
4
4
|
title: CI/CD-Integration
|
|
5
5
|
description: Erfahren Sie, wie Sie Intlayer in Ihre CI/CD-Pipeline für automatisiertes Content-Management und Deployment integrieren.
|
|
6
6
|
keywords:
|
|
@@ -19,11 +19,11 @@ slugs:
|
|
|
19
19
|
|
|
20
20
|
# Automatische Generierung von Übersetzungen in einer CI/CD-Pipeline
|
|
21
21
|
|
|
22
|
-
Intlayer ermöglicht die automatische Generierung von Übersetzungen für Ihre Content-Deklarationsdateien. Es gibt verschiedene Möglichkeiten, dies je nach Ihrem Workflow zu
|
|
22
|
+
Intlayer ermöglicht die automatische Generierung von Übersetzungen für Ihre Content-Deklarationsdateien. Es gibt verschiedene Möglichkeiten, dies je nach Ihrem Workflow zu realisieren.
|
|
23
23
|
|
|
24
24
|
## Verwendung des CMS
|
|
25
25
|
|
|
26
|
-
Mit Intlayer können Sie einen Workflow
|
|
26
|
+
Mit Intlayer können Sie einen Workflow verwenden, bei dem nur eine einzige Locale lokal deklariert wird, während alle Übersetzungen remote über das CMS verwaltet werden. Dies ermöglicht es, Inhalte und Übersetzungen vollständig von der Codebasis zu trennen, bietet mehr Flexibilität für Content-Editoren und ermöglicht ein Hot Content Reloading (kein erneutes Bauen der Anwendung erforderlich, um Änderungen anzuwenden).
|
|
27
27
|
|
|
28
28
|
### Beispielkonfiguration
|
|
29
29
|
|
|
@@ -52,7 +52,7 @@ const config: IntlayerConfig = {
|
|
|
52
52
|
export default config;
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
Um mehr über das CMS zu erfahren,
|
|
55
|
+
Um mehr über das CMS zu erfahren, lesen Sie die [offizielle Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_CMS.md).
|
|
56
56
|
|
|
57
57
|
## Verwendung von Husky
|
|
58
58
|
|
|
@@ -85,11 +85,11 @@ export default config;
|
|
|
85
85
|
```
|
|
86
86
|
|
|
87
87
|
```bash fileName=".husky/pre-push"
|
|
88
|
-
npx intlayer build # Um sicherzustellen, dass die Wörterbücher
|
|
89
|
-
npx intlayer fill --unpushed --mode fill #
|
|
88
|
+
npx intlayer build # Um sicherzustellen, dass die Wörterbücher auf dem neuesten Stand sind
|
|
89
|
+
npx intlayer fill --unpushed --mode fill # Nur fehlende Inhalte ausfüllen, bestehende nicht aktualisieren
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
> Für weitere Informationen zu den Intlayer
|
|
92
|
+
> Für weitere Informationen zu den Intlayer CLI-Befehlen und deren Verwendung siehe die [CLI-Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_cli.md).
|
|
93
93
|
|
|
94
94
|
> Wenn Sie mehrere Apps in Ihrem Repository haben, die separate Intlayer-Instanzen verwenden, können Sie das Argument `--base-dir` wie folgt verwenden:
|
|
95
95
|
|
|
@@ -105,68 +105,94 @@ npx intlayer fill --base-dir ./app2 --unpushed --mode fill
|
|
|
105
105
|
|
|
106
106
|
## Verwendung von GitHub Actions
|
|
107
107
|
|
|
108
|
-
Intlayer
|
|
108
|
+
Intlayer bietet einen CLI-Befehl zum automatischen Ausfüllen und Überprüfen von Wörterbuchinhalten. Dies kann in Ihren CI/CD-Workflow mit GitHub Actions integriert werden.
|
|
109
109
|
|
|
110
110
|
```yaml fileName=".github/workflows/intlayer-translate.yml"
|
|
111
111
|
name: Intlayer Auto-Fill
|
|
112
|
+
# Auslöserbedingungen für diesen Workflow
|
|
112
113
|
on:
|
|
113
|
-
push:
|
|
114
|
-
branches: [ main ]
|
|
115
|
-
paths:
|
|
116
|
-
- 'src/**'
|
|
117
114
|
pull_request:
|
|
118
|
-
branches:
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
115
|
+
branches:
|
|
116
|
+
- "main"
|
|
117
|
+
|
|
118
|
+
permissions:
|
|
119
|
+
contents: write
|
|
120
|
+
pull-requests: write
|
|
122
121
|
|
|
123
122
|
concurrency:
|
|
124
|
-
group:
|
|
123
|
+
group: "autofill-${{ github.ref }}"
|
|
125
124
|
cancel-in-progress: true
|
|
126
125
|
|
|
127
126
|
jobs:
|
|
128
127
|
autofill:
|
|
129
128
|
runs-on: ubuntu-latest
|
|
130
129
|
env:
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
130
|
+
# OpenAI
|
|
131
|
+
AI_MODEL: openai
|
|
132
|
+
AI_PROVIDER: gpt-5-mini
|
|
133
|
+
AI_API_KEY: ${{ secrets.AI_API_KEY }}
|
|
134
134
|
|
|
135
135
|
steps:
|
|
136
|
+
# Schritt 1: Hole den neuesten Code aus dem Repository
|
|
136
137
|
- name: ⬇️ Repository auschecken
|
|
137
|
-
uses: actions/checkout@
|
|
138
|
+
uses: actions/checkout@v4
|
|
138
139
|
with:
|
|
139
|
-
persist-credentials: true
|
|
140
|
+
persist-credentials: true # Anmeldeinformationen zum Erstellen von PRs beibehalten
|
|
141
|
+
fetch-depth: 0 # Vollständige Git-Historie für Differenzanalyse abrufen
|
|
140
142
|
|
|
143
|
+
# Schritt 2: Node.js-Umgebung einrichten
|
|
141
144
|
- name: 🟢 Node.js einrichten
|
|
142
|
-
uses: actions/setup-node@
|
|
145
|
+
uses: actions/setup-node@v4
|
|
143
146
|
with:
|
|
144
|
-
node-version: 20
|
|
147
|
+
node-version: 20 # Node.js 20 LTS für Stabilität verwenden
|
|
145
148
|
|
|
149
|
+
# Schritt 3: Projektabhängigkeiten installieren
|
|
146
150
|
- name: 📦 Abhängigkeiten installieren
|
|
147
|
-
run: npm
|
|
151
|
+
run: npm install
|
|
152
|
+
|
|
153
|
+
# Schritt 4: Intlayer CLI global für Übersetzungsmanagement installieren
|
|
154
|
+
- name: 📦 Intlayer installieren
|
|
155
|
+
run: npm install -g intlayer-cli
|
|
148
156
|
|
|
157
|
+
# Schritt 5: Intlayer-Projekt bauen, um Übersetzungsdateien zu generieren
|
|
149
158
|
- name: ⚙️ Intlayer-Projekt bauen
|
|
150
159
|
run: npx intlayer build
|
|
151
160
|
|
|
161
|
+
# Schritt 6: KI verwenden, um fehlende Übersetzungen automatisch auszufüllen
|
|
152
162
|
- name: 🤖 Fehlende Übersetzungen automatisch ausfüllen
|
|
153
|
-
run: npx intlayer fill --git-diff --mode fill
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
163
|
+
run: npx intlayer fill --git-diff --mode fill --provider $AI_PROVIDER --model $AI_MODEL --api-key $AI_API_KEY
|
|
164
|
+
|
|
165
|
+
# Schritt 7: Prüfen, ob Änderungen vorliegen und diese committen
|
|
166
|
+
- name: � Auf Änderungen prüfen
|
|
167
|
+
id: check-changes
|
|
168
|
+
run: |
|
|
169
|
+
if [ -n "$(git status --porcelain)" ]; then
|
|
170
|
+
echo "has-changes=true" >> $GITHUB_OUTPUT
|
|
171
|
+
else
|
|
172
|
+
echo "has-changes=false" >> $GITHUB_OUTPUT
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
# Schritt 8: Änderungen committen und pushen, falls vorhanden
|
|
176
|
+
- name: 📤 Änderungen committen und pushen
|
|
177
|
+
if: steps.check-changes.outputs.has-changes == 'true'
|
|
178
|
+
run: |
|
|
179
|
+
git config --local user.email "action@github.com"
|
|
180
|
+
git config --local user.name "GitHub Action"
|
|
181
|
+
git add .
|
|
182
|
+
git commit -m "chore: fehlende Übersetzungen automatisch ausfüllen [skip ci]"
|
|
183
|
+
git push origin HEAD:${{ github.head_ref }}
|
|
162
184
|
```
|
|
163
185
|
|
|
186
|
+
Um die Umgebungsvariablen einzurichten, gehen Sie zu GitHub → Einstellungen → Geheimnisse und Variablen → Aktionen und fügen Sie das Geheimnis hinzu.
|
|
187
|
+
|
|
164
188
|
> Wie bei Husky können Sie im Fall eines Monorepos das Argument `--base-dir` verwenden, um jede App nacheinander zu behandeln.
|
|
165
189
|
|
|
166
190
|
> Standardmäßig filtert das Argument `--git-diff` Wörterbücher, die Änderungen vom Basiszweig (Standard `origin/main`) zum aktuellen Zweig (Standard: `HEAD`) enthalten.
|
|
167
191
|
|
|
168
|
-
> Für weitere Informationen zu den Intlayer
|
|
192
|
+
> Für weitere Informationen zu den Intlayer CLI-Befehlen und deren Verwendung lesen Sie bitte die [CLI-Dokumentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/intlayer_cli.md).
|
|
169
193
|
|
|
170
|
-
##
|
|
194
|
+
## Dokumentationshistorie
|
|
171
195
|
|
|
172
|
-
|
|
196
|
+
| Version | Datum | Änderungen |
|
|
197
|
+
| ------- | ---------- | ----------------------- |
|
|
198
|
+
| 5.5.10 | 2025-06-29 | Historie initialisieren |
|