@intlayer/docs 5.5.8 → 5.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/ar/autoFill.md +1 -2
  2. package/ar/intlayer_with_create_react_app.md +1 -14
  3. package/ar/intlayer_with_nextjs_14.md +1 -14
  4. package/ar/intlayer_with_nextjs_15.md +1 -14
  5. package/ar/intlayer_with_nextjs_page_router.md +1 -13
  6. package/ar/intlayer_with_nuxt.md +792 -0
  7. package/ar/intlayer_with_react_native+expo.md +6 -3
  8. package/ar/intlayer_with_vite+preact.md +7 -18
  9. package/ar/intlayer_with_vite+react.md +7 -17
  10. package/ar/intlayer_with_vite+vue.md +25 -5
  11. package/ar/packages/nuxt-intlayer/index.md +29 -0
  12. package/ar/roadmap.md +11 -11
  13. package/de/autoFill.md +1 -2
  14. package/de/how_works_intlayer.md +1 -1
  15. package/de/intlayer_with_create_react_app.md +1 -14
  16. package/de/intlayer_with_nextjs_14.md +1 -14
  17. package/de/intlayer_with_nextjs_15.md +1 -14
  18. package/de/intlayer_with_nextjs_page_router.md +1 -13
  19. package/de/intlayer_with_nuxt.md +791 -0
  20. package/de/intlayer_with_react_native+expo.md +6 -3
  21. package/de/intlayer_with_vite+preact.md +7 -18
  22. package/de/intlayer_with_vite+react.md +7 -17
  23. package/de/intlayer_with_vite+vue.md +84 -62
  24. package/de/packages/nuxt-intlayer/index.md +29 -0
  25. package/de/roadmap.md +11 -11
  26. package/en/autoFill.md +1 -2
  27. package/en/how_works_intlayer.md +17 -3
  28. package/en/intlayer_with_angular.md +535 -6
  29. package/en/intlayer_with_create_react_app.md +1 -14
  30. package/en/intlayer_with_nextjs_14.md +193 -59
  31. package/en/intlayer_with_nextjs_15.md +192 -61
  32. package/en/intlayer_with_nextjs_page_router.md +396 -61
  33. package/en/intlayer_with_nuxt.md +737 -0
  34. package/en/intlayer_with_react_native+expo.md +6 -3
  35. package/en/intlayer_with_vite+preact.md +8 -27
  36. package/en/intlayer_with_vite+react.md +7 -17
  37. package/en/intlayer_with_vite+solid.md +6 -3
  38. package/en/intlayer_with_vite+svelte.md +6 -3
  39. package/en/intlayer_with_vite+vue.md +17 -6
  40. package/en/packages/nuxt-intlayer/index.md +31 -0
  41. package/en/roadmap.md +13 -13
  42. package/en/t.md +5 -5
  43. package/en-GB/how_works_intlayer.md +16 -4
  44. package/en-GB/intlayer_with_create_react_app.md +1 -14
  45. package/en-GB/intlayer_with_nextjs_14.md +1 -14
  46. package/en-GB/intlayer_with_nextjs_15.md +1 -14
  47. package/en-GB/intlayer_with_nextjs_page_router.md +1 -13
  48. package/en-GB/intlayer_with_nuxt.md +795 -0
  49. package/en-GB/intlayer_with_react_native+expo.md +6 -3
  50. package/en-GB/intlayer_with_vite+preact.md +7 -18
  51. package/en-GB/intlayer_with_vite+react.md +6 -9
  52. package/en-GB/intlayer_with_vite+vue.md +65 -59
  53. package/en-GB/packages/nuxt-intlayer/index.md +31 -0
  54. package/en-GB/roadmap.md +11 -11
  55. package/es/autoFill.md +1 -2
  56. package/es/how_works_intlayer.md +1 -1
  57. package/es/intlayer_with_create_react_app.md +1 -14
  58. package/es/intlayer_with_nextjs_14.md +1 -14
  59. package/es/intlayer_with_nextjs_15.md +1 -14
  60. package/es/intlayer_with_nextjs_page_router.md +1 -13
  61. package/es/intlayer_with_nuxt.md +731 -0
  62. package/es/intlayer_with_react_native+expo.md +6 -3
  63. package/es/intlayer_with_vite+preact.md +7 -18
  64. package/es/intlayer_with_vite+react.md +7 -17
  65. package/es/intlayer_with_vite+vue.md +64 -51
  66. package/es/packages/nuxt-intlayer/index.md +29 -0
  67. package/fr/autoFill.md +1 -2
  68. package/fr/how_works_intlayer.md +1 -1
  69. package/fr/intlayer_with_create_react_app.md +1 -14
  70. package/fr/intlayer_with_nextjs_14.md +1 -14
  71. package/fr/intlayer_with_nextjs_15.md +1 -14
  72. package/fr/intlayer_with_nextjs_page_router.md +1 -13
  73. package/fr/intlayer_with_nuxt.md +731 -0
  74. package/fr/intlayer_with_react_native+expo.md +6 -3
  75. package/fr/intlayer_with_vite+preact.md +7 -18
  76. package/fr/intlayer_with_vite+react.md +7 -17
  77. package/fr/intlayer_with_vite+vue.md +30 -15
  78. package/fr/packages/nuxt-intlayer/index.md +29 -0
  79. package/fr/roadmap.md +11 -11
  80. package/hi/autoFill.md +1 -2
  81. package/hi/how_works_intlayer.md +1 -1
  82. package/hi/intlayer_with_create_react_app.md +1 -14
  83. package/hi/intlayer_with_nextjs_14.md +1 -14
  84. package/hi/intlayer_with_nextjs_15.md +1 -14
  85. package/hi/intlayer_with_nextjs_page_router.md +1 -13
  86. package/hi/intlayer_with_nuxt.md +784 -0
  87. package/hi/intlayer_with_react_native+expo.md +6 -3
  88. package/hi/intlayer_with_vite+preact.md +7 -18
  89. package/hi/intlayer_with_vite+react.md +7 -17
  90. package/hi/intlayer_with_vite+vue.md +59 -47
  91. package/hi/packages/nuxt-intlayer/index.md +29 -0
  92. package/hi/roadmap.md +11 -11
  93. package/index.cjs +30 -0
  94. package/index.d.ts +2 -0
  95. package/it/autoFill.md +1 -2
  96. package/it/how_works_intlayer.md +1 -1
  97. package/it/intlayer_with_create_react_app.md +0 -6
  98. package/it/intlayer_with_nextjs_14.md +1 -14
  99. package/it/intlayer_with_nextjs_15.md +1 -14
  100. package/it/intlayer_with_nextjs_page_router.md +1 -13
  101. package/it/intlayer_with_nuxt.md +793 -0
  102. package/it/intlayer_with_react_native+expo.md +6 -3
  103. package/it/intlayer_with_vite+preact.md +7 -18
  104. package/it/intlayer_with_vite+react.md +7 -17
  105. package/it/intlayer_with_vite+vue.md +26 -17
  106. package/it/packages/nuxt-intlayer/index.md +29 -0
  107. package/it/roadmap.md +11 -11
  108. package/ja/autoFill.md +1 -2
  109. package/ja/how_works_intlayer.md +1 -1
  110. package/ja/intlayer_with_create_react_app.md +1 -14
  111. package/ja/intlayer_with_nextjs_14.md +1 -14
  112. package/ja/intlayer_with_nextjs_15.md +1 -14
  113. package/ja/intlayer_with_nextjs_page_router.md +1 -13
  114. package/ja/intlayer_with_nuxt.md +792 -0
  115. package/ja/intlayer_with_react_native+expo.md +6 -3
  116. package/ja/intlayer_with_vite+preact.md +7 -18
  117. package/ja/intlayer_with_vite+react.md +7 -17
  118. package/ja/intlayer_with_vite+vue.md +68 -63
  119. package/ja/packages/nuxt-intlayer/index.md +29 -0
  120. package/ja/roadmap.md +11 -11
  121. package/ko/autoFill.md +1 -2
  122. package/ko/how_works_intlayer.md +1 -1
  123. package/ko/intlayer_with_create_react_app.md +1 -14
  124. package/ko/intlayer_with_nextjs_14.md +1 -14
  125. package/ko/intlayer_with_nextjs_15.md +1 -14
  126. package/ko/intlayer_with_nextjs_page_router.md +1 -13
  127. package/ko/intlayer_with_nuxt.md +784 -0
  128. package/ko/intlayer_with_react_native+expo.md +6 -3
  129. package/ko/intlayer_with_vite+preact.md +7 -18
  130. package/ko/intlayer_with_vite+react.md +7 -17
  131. package/ko/intlayer_with_vite+vue.md +69 -59
  132. package/ko/packages/nuxt-intlayer/index.md +31 -0
  133. package/ko/roadmap.md +11 -11
  134. package/package.json +4 -4
  135. package/pt/autoFill.md +1 -2
  136. package/pt/how_works_intlayer.md +1 -1
  137. package/pt/intlayer_with_create_react_app.md +1 -14
  138. package/pt/intlayer_with_nextjs_14.md +1 -14
  139. package/pt/intlayer_with_nextjs_15.md +1 -14
  140. package/pt/intlayer_with_nextjs_page_router.md +1 -13
  141. package/pt/intlayer_with_nuxt.md +792 -0
  142. package/pt/intlayer_with_react_native+expo.md +6 -3
  143. package/pt/intlayer_with_vite+preact.md +7 -18
  144. package/pt/intlayer_with_vite+react.md +7 -17
  145. package/pt/intlayer_with_vite+vue.md +23 -19
  146. package/pt/packages/nuxt-intlayer/index.md +29 -0
  147. package/pt/roadmap.md +11 -11
  148. package/ru/autoFill.md +1 -2
  149. package/ru/how_works_intlayer.md +1 -1
  150. package/ru/intlayer_with_create_react_app.md +1 -14
  151. package/ru/intlayer_with_nextjs_14.md +1 -14
  152. package/ru/intlayer_with_nextjs_15.md +1 -14
  153. package/ru/intlayer_with_nextjs_page_router.md +1 -13
  154. package/ru/intlayer_with_nuxt.md +792 -0
  155. package/ru/intlayer_with_react_native+expo.md +6 -3
  156. package/ru/intlayer_with_vite+preact.md +7 -18
  157. package/ru/intlayer_with_vite+react.md +7 -17
  158. package/ru/intlayer_with_vite+vue.md +25 -17
  159. package/ru/packages/nuxt-intlayer/index.md +31 -0
  160. package/ru/roadmap.md +11 -11
  161. package/zh/autoFill.md +1 -2
  162. package/zh/intlayer_with_create_react_app.md +1 -14
  163. package/zh/intlayer_with_nextjs_14.md +1 -14
  164. package/zh/intlayer_with_nextjs_15.md +1 -14
  165. package/zh/intlayer_with_nextjs_page_router.md +1 -13
  166. package/zh/intlayer_with_nuxt.md +784 -0
  167. package/zh/intlayer_with_react_native+expo.md +6 -3
  168. package/zh/intlayer_with_vite+preact.md +7 -18
  169. package/zh/intlayer_with_vite+react.md +7 -17
  170. package/zh/intlayer_with_vite+vue.md +68 -57
  171. package/zh/packages/nuxt-intlayer/index.md +31 -0
  172. package/zh/roadmap.md +11 -11
@@ -0,0 +1,792 @@
1
+ # البدء في التدويل (i18n) باستخدام Intlayer و Nuxt
2
+
3
+ راجع [قالب التطبيق](https://github.com/aymericzip/intlayer-nuxt-template) على GitHub.
4
+
5
+ ## ما هو Intlayer؟
6
+
7
+ **Intlayer** هي مكتبة مفتوحة المصدر مبتكرة للتدويل (i18n) مصممة لتبسيط دعم اللغات المتعددة في تطبيقات الويب الحديثة.
8
+
9
+ مع Intlayer، يمكنك:
10
+
11
+ - **إدارة الترجمات بسهولة** باستخدام القواميس التصريحية على مستوى المكونات.
12
+ - **توطين البيانات الوصفية، المسارات، والمحتوى ديناميكيًا**.
13
+ - **ضمان دعم TypeScript** مع الأنواع المولدة تلقائيًا، مما يحسن الإكمال التلقائي واكتشاف الأخطاء.
14
+ - **الاستفادة من الميزات المتقدمة**، مثل اكتشاف اللغة الديناميكي والتبديل.
15
+
16
+ ---
17
+
18
+ ## دليل خطوة بخطوة لإعداد Intlayer في تطبيق Nuxt
19
+
20
+ ### الخطوة 1: تثبيت التبعيات
21
+
22
+ قم بتثبيت الحزم الضرورية باستخدام npm:
23
+
24
+ ```bash packageManager="npm"
25
+ npm install intlayer vue-intlayer
26
+ npm install --save-dev nuxt-intlayer
27
+ ```
28
+
29
+ ```bash packageManager="pnpm"
30
+ pnpm add intlayer vue-intlayer
31
+ pnpm add --save-dev nuxt-intlayer
32
+ ```
33
+
34
+ ```bash packageManager="yarn"
35
+ yarn add intlayer vue-intlayer
36
+ yarn add --save-dev nuxt-intlayer
37
+ ```
38
+
39
+ - **intlayer**
40
+
41
+ الحزمة الأساسية التي توفر أدوات التدويل لإدارة التكوين، الترجمة، [إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/ar/dictionary/get_started.md)، الترجمة، و[أوامر CLI](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_cli.md).
42
+
43
+ - **vue-intlayer**
44
+ الحزمة التي تدمج Intlayer مع تطبيق Vue. توفر الأدوات القابلة للاستخدام مع مكونات Vue.
45
+
46
+ - **nuxt-intlayer**
47
+ الوحدة الخاصة بـ Nuxt التي تدمج Intlayer مع تطبيقات Nuxt. توفر الإعداد التلقائي، الوسيط لاكتشاف اللغة، إدارة الكوكيز، وإعادة التوجيه لعناوين URL.
48
+
49
+ ### الخطوة 2: تكوين مشروعك
50
+
51
+ قم بإنشاء ملف تكوين لتحديد لغات تطبيقك:
52
+
53
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
54
+ import { Locales, type IntlayerConfig } from "intlayer";
55
+
56
+ const config: IntlayerConfig = {
57
+ internationalization: {
58
+ locales: [
59
+ Locales.ENGLISH,
60
+ Locales.FRENCH,
61
+ Locales.SPANISH,
62
+ // لغاتك الأخرى
63
+ ],
64
+ defaultLocale: Locales.ENGLISH,
65
+ },
66
+ };
67
+
68
+ export default config;
69
+ ```
70
+
71
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
72
+ import { Locales } from "intlayer";
73
+
74
+ /** @type {import('intlayer').IntlayerConfig} */
75
+ const config = {
76
+ internationalization: {
77
+ locales: [
78
+ Locales.ENGLISH,
79
+ Locales.FRENCH,
80
+ Locales.SPANISH,
81
+ // لغاتك الأخرى
82
+ ],
83
+ defaultLocale: Locales.ENGLISH,
84
+ },
85
+ };
86
+
87
+ export default config;
88
+ ```
89
+
90
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
91
+ const { Locales } = require("intlayer");
92
+
93
+ /** @type {import('intlayer').IntlayerConfig} */
94
+ const config = {
95
+ internationalization: {
96
+ locales: [
97
+ Locales.ENGLISH,
98
+ Locales.FRENCH,
99
+ Locales.SPANISH,
100
+ // لغاتك الأخرى
101
+ ],
102
+ defaultLocale: Locales.ENGLISH,
103
+ },
104
+ };
105
+
106
+ module.exports = config;
107
+ ```
108
+
109
+ > من خلال ملف التكوين هذا، يمكنك إعداد عناوين URL المحلية، إعادة التوجيه عبر الوسيط، أسماء الكوكيز، موقع وامتداد إعلانات المحتوى الخاصة بك، تعطيل سجلات Intlayer في وحدة التحكم، والمزيد. للحصول على قائمة كاملة بالمعلمات المتاحة، راجع [وثائق التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/ar/configuration.md).
110
+
111
+ ### الخطوة 3: دمج Intlayer في تكوين Nuxt الخاص بك
112
+
113
+ أضف وحدة intlayer إلى تكوين Nuxt الخاص بك:
114
+
115
+ ```typescript fileName="nuxt.config.ts"
116
+ import { defineNuxtConfig } from "nuxt/config";
117
+
118
+ export default defineNuxtConfig({
119
+ // ... تكوين Nuxt الحالي الخاص بك
120
+ modules: ["nuxt-intlayer"],
121
+ });
122
+ ```
123
+
124
+ > تقوم وحدة `nuxt-intlayer` تلقائيًا بمعالجة دمج Intlayer مع Nuxt. تقوم بإعداد بناء إعلان المحتوى، مراقبة الملفات في وضع التطوير، توفير الوسيط لاكتشاف اللغة، وإدارة التوجيه المحلي.
125
+
126
+ ### الخطوة 4: إعلان المحتوى الخاص بك
127
+
128
+ قم بإنشاء وإدارة إعلانات المحتوى الخاصة بك لتخزين الترجمات:
129
+
130
+ ```tsx fileName="components/helloWorld.content.ts" contentDeclarationFormat="typescript"
131
+ import { t, type Dictionary } from "intlayer";
132
+
133
+ const helloWorldContent = {
134
+ key: "helloworld",
135
+ content: {
136
+ count: t({
137
+ ar: "العدد هو ",
138
+ en: "count is ",
139
+ fr: "le compte est ",
140
+ es: "el recuento es ",
141
+ }),
142
+ edit: t({
143
+ ar: "قم بتحرير <code>components/HelloWorld.vue</code> واحفظ لاختبار HMR",
144
+ en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
145
+ fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
146
+ es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
147
+ }),
148
+ checkOut: t({
149
+ ar: "تحقق من ",
150
+ en: "Check out ",
151
+ fr: "Vérifiez ",
152
+ es: "Compruebe ",
153
+ }),
154
+ nuxtIntlayer: t({
155
+ ar: "وثائق Nuxt Intlayer",
156
+ en: "Nuxt Intlayer documentation",
157
+ fr: "Documentation de Nuxt Intlayer",
158
+ es: "Documentación de Nuxt Intlayer",
159
+ }),
160
+ learnMore: t({
161
+ ar: "تعرف على المزيد حول Nuxt في ",
162
+ en: "Learn more about Nuxt in the ",
163
+ fr: "En savoir plus sur Nuxt dans la ",
164
+ es: "Aprenda más sobre Nuxt en la ",
165
+ }),
166
+ nuxtDocs: t({
167
+ ar: "وثائق Nuxt",
168
+ en: "Nuxt Documentation",
169
+ fr: "Documentation Nuxt",
170
+ es: "Documentación de Nuxt",
171
+ }),
172
+ readTheDocs: t({
173
+ ar: "انقر على شعار Nuxt لمعرفة المزيد",
174
+ en: "Click on the Nuxt logo to learn more",
175
+ fr: "Cliquez sur le logo Nuxt pour en savoir plus",
176
+ es: "Haga clic en el logotipo de Nuxt para obtener más información",
177
+ }),
178
+ },
179
+ } satisfies Dictionary;
180
+
181
+ export default helloWorldContent;
182
+ ```
183
+
184
+ ```javascript fileName="components/helloWorld.content.mjs" contentDeclarationFormat="esm"
185
+ import { t } from "intlayer";
186
+
187
+ /** @type {import('intlayer').Dictionary} */
188
+ const helloWorldContent = {
189
+ key: "helloworld",
190
+ content: {
191
+ count: t({
192
+ ar: "العدد هو ",
193
+ en: "count is ",
194
+ fr: "le compte est ",
195
+ es: "el recuento es ",
196
+ }),
197
+ edit: t({
198
+ ar: "قم بتحرير <code>components/HelloWorld.vue</code> واحفظ لاختبار HMR",
199
+ en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
200
+ fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
201
+ es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
202
+ }),
203
+ checkOut: t({
204
+ ar: "تحقق من ",
205
+ en: "Check out ",
206
+ fr: "Vérifiez ",
207
+ es: "Compruebe ",
208
+ }),
209
+ nuxtIntlayer: t({
210
+ ar: "وثائق Nuxt Intlayer",
211
+ en: "Nuxt Intlayer documentation",
212
+ fr: "Documentation de Nuxt Intlayer",
213
+ es: "Documentación de Nuxt Intlayer",
214
+ }),
215
+ learnMore: t({
216
+ ar: "تعرف على المزيد حول Nuxt في ",
217
+ en: "Learn more about Nuxt in the ",
218
+ fr: "En savoir plus sur Nuxt dans la ",
219
+ es: "Aprenda más sobre Nuxt en la ",
220
+ }),
221
+ nuxtDocs: t({
222
+ ar: "وثائق Nuxt",
223
+ en: "Nuxt Documentation",
224
+ fr: "Documentation Nuxt",
225
+ es: "Documentación de Nuxt",
226
+ }),
227
+ readTheDocs: t({
228
+ ar: "انقر على شعار Nuxt لمعرفة المزيد",
229
+ en: "Click on the Nuxt logo to learn more",
230
+ fr: "Cliquez sur le logo Nuxt pour en savoir plus",
231
+ es: "Haga clic en el logotipo de Nuxt para obtener más información",
232
+ }),
233
+ },
234
+ };
235
+
236
+ export default helloWorldContent;
237
+ ```
238
+
239
+ ```javascript fileName="components/helloWorld.content.cjs" contentDeclarationFormat="commonjs"
240
+ const { t } = require("intlayer");
241
+
242
+ /** @type {import('intlayer').Dictionary} */
243
+ const helloWorldContent = {
244
+ key: "helloworld",
245
+ content: {
246
+ count: t({
247
+ ar: "العدد هو ",
248
+ en: "count is ",
249
+ fr: "le compte est ",
250
+ es: "el recuento es ",
251
+ }),
252
+ edit: t({
253
+ ar: "قم بتحرير <code>components/HelloWorld.vue</code> واحفظ لاختبار HMR",
254
+ en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
255
+ fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
256
+ es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
257
+ }),
258
+ checkOut: t({
259
+ ar: "تحقق من ",
260
+ en: "Check out ",
261
+ fr: "Vérifiez ",
262
+ es: "Compruebe ",
263
+ }),
264
+ nuxtIntlayer: t({
265
+ ar: "وثائق Nuxt Intlayer",
266
+ en: "Nuxt Intlayer documentation",
267
+ fr: "Documentation de Nuxt Intlayer",
268
+ es: "Documentación de Nuxt Intlayer",
269
+ }),
270
+ learnMore: t({
271
+ ar: "تعرف على المزيد حول Nuxt في ",
272
+ en: "Learn more about Nuxt in the ",
273
+ fr: "En savoir plus sur Nuxt dans la ",
274
+ es: "Aprenda más sobre Nuxt en la ",
275
+ }),
276
+ nuxtDocs: t({
277
+ ar: "وثائق Nuxt",
278
+ en: "Nuxt Documentation",
279
+ fr: "Documentation Nuxt",
280
+ es: "Documentación de Nuxt",
281
+ }),
282
+ readTheDocs: t({
283
+ ar: "انقر على شعار Nuxt لمعرفة المزيد",
284
+ en: "Click on the Nuxt logo to learn more",
285
+ fr: "Cliquez sur le logo Nuxt pour en savoir plus",
286
+ es: "Haga clic en el logotipo de Nuxt para obtener más información",
287
+ }),
288
+ },
289
+ };
290
+
291
+ module.exports = helloWorldContent;
292
+ ```
293
+
294
+ {
295
+ "$schema": "https://intlayer.org/schema.json",
296
+ "key": "helloworld",
297
+ "content": {
298
+ "count": {
299
+ "nodeType": "translation",
300
+ "translation": {
301
+ "ar": "العدد هو ",
302
+ "en": "count is ",
303
+ "fr": "le compte est ",
304
+ "es": "el recuento es "
305
+ }
306
+ },
307
+ "edit": {
308
+ "nodeType": "translation",
309
+ "translation": {
310
+ "ar": "قم بتعديل <code>components/HelloWorld.vue</code> واحفظ لاختبار HMR",
311
+ "en": "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
312
+ "fr": "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
313
+ "es": "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR"
314
+ }
315
+ },
316
+ "checkOut": {
317
+ "nodeType": "translation",
318
+ "translation": {
319
+ "ar": "تحقق من ",
320
+ "en": "Check out ",
321
+ "fr": "Vérifiez ",
322
+ "es": "Compruebe "
323
+ }
324
+ },
325
+ "nuxtIntlayer": {
326
+ "nodeType": "translation",
327
+ "translation": {
328
+ "ar": "وثائق Nuxt Intlayer",
329
+ "en": "Nuxt Intlayer documentation",
330
+ "fr": "Documentation de Nuxt Intlayer",
331
+ "es": "Documentación de Nuxt Intlayer"
332
+ }
333
+ },
334
+ "learnMore": {
335
+ "nodeType": "translation",
336
+ "translation": {
337
+ "ar": "تعرف على المزيد حول Nuxt في ",
338
+ "en": "Learn more about Nuxt in the ",
339
+ "fr": "En savoir plus sur Nuxt dans la ",
340
+ "es": "Aprenda más sobre Nuxt en la "
341
+ }
342
+ },
343
+ "nuxtDocs": {
344
+ "nodeType": "translation",
345
+ "translation": {
346
+ "ar": "وثائق Nuxt",
347
+ "en": "Nuxt Documentation",
348
+ "fr": "Documentation Nuxt",
349
+ "es": "Documentación de Nuxt"
350
+ }
351
+ },
352
+ "readTheDocs": {
353
+ "nodeType": "translation",
354
+ "translation": {
355
+ "ar": "انقر على شعار Nuxt لمعرفة المزيد",
356
+ "en": "Click on the Nuxt logo to learn more",
357
+ "fr": "Cliquez sur le logo Nuxt pour en savoir plus",
358
+ "es": "Haga clic en el logotipo de Nuxt para obtener más información"
359
+ }
360
+ }
361
+ }
362
+ }
363
+
364
+ ````
365
+
366
+ > يمكن تعريف إعلانات المحتوى في أي مكان في تطبيقك طالما تم تضمينها في دليل `contentDir` (افتراضيًا، `./src`). ويجب أن تتطابق مع امتداد ملف إعلان المحتوى (افتراضيًا، `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
367
+
368
+ > لمزيد من التفاصيل، راجع [وثائق إعلان المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/ar/dictionary/get_started.md).
369
+
370
+ ### الخطوة 5: استخدام Intlayer في الكود الخاص بك
371
+
372
+ يمكنك الوصول إلى قواميس المحتوى الخاصة بك في جميع أنحاء تطبيق Nuxt باستخدام المكون `useIntlayer`:
373
+
374
+ ```vue fileName="components/HelloWorld.vue"
375
+ <script setup lang="ts">
376
+ import { ref } from "vue";
377
+ import { useIntlayer } from "vue-intlayer";
378
+
379
+ defineProps({
380
+ msg: String,
381
+ });
382
+
383
+ const {
384
+ count,
385
+ edit,
386
+ checkOut,
387
+ nuxtIntlayer,
388
+ learnMore,
389
+ nuxtDocs,
390
+ readTheDocs,
391
+ } = useIntlayer("helloworld");
392
+ const countRef = ref(0);
393
+ </script>
394
+
395
+ <template>
396
+ <h1>{{ msg }}</h1>
397
+
398
+ <div class="card">
399
+ <button type="button" @click="countRef++">
400
+ <count />
401
+ {{ countRef }}
402
+ </button>
403
+ <p v-html="edit"></p>
404
+ </div>
405
+
406
+ <p>
407
+ <checkOut />
408
+ <a href="https://nuxt.com/docs/getting-started/introduction" target="_blank"
409
+ >Nuxt</a
410
+ >, <nuxtIntlayer />
411
+ </p>
412
+ <p>
413
+ <learnMore />
414
+ <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.
415
+ </p>
416
+ <p class="read-the-docs"><readTheDocs /></p>
417
+ <p class="read-the-docs">{{ readTheDocs }}</p>
418
+ </template>
419
+ ````
420
+
421
+ #### الوصول إلى المحتوى في Intlayer
422
+
423
+ يوفر Intlayer طريقتين للوصول إلى المحتوى الخاص بك:
424
+
425
+ - **صيغة تعتمد على المكونات** (موصى بها):
426
+ استخدم صيغة `<myContent />` أو `<Component :is="myContent" />` لعرض المحتوى كعقدة Intlayer. يتكامل هذا بسلاسة مع [المحرر المرئي](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_visual_editor.md) و[نظام إدارة المحتوى](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_CMS.md).
427
+
428
+ - **صيغة تعتمد على النصوص**:
429
+ استخدم `{{ myContent }}` لعرض المحتوى كنص عادي، بدون دعم المحرر المرئي.
430
+
431
+ - **صيغة HTML الخام**:
432
+ استخدم `<div v-html="myContent" />` لعرض المحتوى كـ HTML خام، بدون دعم المحرر المرئي.
433
+
434
+ - **صيغة التفكيك**:
435
+ يقوم المكون `useIntlayer` بإرجاع Proxy مع المحتوى. يمكن تفكيك هذا الوكيل للوصول إلى المحتوى مع الحفاظ على التفاعلية.
436
+ - استخدم `const content = useIntlayer("myContent");` و `{{ content.myContent }}` / `<content.myContent />`.
437
+ - أو استخدم `const { myContent } = useIntlayer("myContent");` و `{{ myContent }}` / `<myContent/>` لتفكيك المحتوى.
438
+
439
+ ### (اختياري) الخطوة 6: تغيير لغة المحتوى الخاص بك
440
+
441
+ لتغيير لغة المحتوى الخاص بك، يمكنك استخدام وظيفة `setLocale` التي يوفرها المكون `useLocale`. تتيح لك هذه الوظيفة تعيين لغة التطبيق وتحديث المحتوى وفقًا لذلك.
442
+
443
+ قم بإنشاء مكون للتبديل بين اللغات:
444
+
445
+ ```vue fileName="components/LocaleSwitcher.vue"
446
+ <template>
447
+ <div class="locale-switcher">
448
+ <select v-model="selectedLocale" @change="changeLocale">
449
+ <option v-for="loc in availableLocales" :key="loc" :value="loc">
450
+ {{ getLocaleName(loc) }}
451
+ </option>
452
+ </select>
453
+ </div>
454
+ </template>
455
+
456
+ <script setup lang="ts">
457
+ import { ref, watch } from "vue";
458
+ import { getLocaleName } from "intlayer";
459
+ import { useLocale } from "vue-intlayer";
460
+
461
+ // الحصول على معلومات اللغة ووظيفة setLocale
462
+ const { locale, availableLocales, setLocale } = useLocale();
463
+
464
+ // تتبع اللغة المحددة باستخدام ref
465
+ const selectedLocale = ref(locale.value);
466
+
467
+ // تحديث اللغة عند تغيير الاختيار
468
+ const changeLocale = () => setLocale(selectedLocale.value);
469
+
470
+ // الحفاظ على تزامن selectedLocale مع اللغة العامة
471
+ watch(
472
+ () => locale.value,
473
+ (newLocale) => {
474
+ selectedLocale.value = newLocale;
475
+ }
476
+ );
477
+ </script>
478
+ </template>
479
+
480
+ <style scoped>
481
+ .locale-switcher {
482
+ margin: 1rem 0;
483
+ }
484
+
485
+ select {
486
+ padding: 0.5rem;
487
+ border-radius: 0.25rem;
488
+ border: 1px solid #ccc;
489
+ }
490
+ </style>
491
+ ```
492
+
493
+ ثم استخدم هذا المكون في صفحاتك أو التخطيطات:
494
+
495
+ ```vue fileName="app.vue"
496
+ <script setup lang="ts">
497
+ import { useIntlayer } from "vue-intlayer";
498
+ import LocaleSwitcher from "~/components/LocaleSwitcher.vue";
499
+
500
+ const content = useIntlayer("app"); // إنشاء ملف إعلان intlayer ذو صلة
501
+ </script>
502
+
503
+ <template>
504
+ <div>
505
+ <header>
506
+ <LocaleSwitcher />
507
+ </header>
508
+ <main>
509
+ <NuxtPage />
510
+ </main>
511
+ </div>
512
+ </template>
513
+ ```
514
+
515
+ ### (اختياري) الخطوة 7: إضافة التوجيه المحلي إلى تطبيقك
516
+
517
+ يتعامل Nuxt تلقائيًا مع التوجيه المحلي عند استخدام وحدة `nuxt-intlayer`. يتم إنشاء مسارات لكل لغة تلقائيًا بناءً على بنية دليل الصفحات الخاص بك.
518
+
519
+ مثال:
520
+
521
+ ```plaintext
522
+ pages/
523
+ ├── index.vue → /, /ar, /fr, /es
524
+ ├── about.vue → /about, /ar/about, /fr/about, /es/about
525
+ └── contact/
526
+ └── index.vue → /contact, /ar/contact, /fr/contact, /es/contact
527
+ ```
528
+
529
+ لإنشاء صفحة محلية، قم ببساطة بإنشاء ملفات Vue الخاصة بك في دليل `pages/`:
530
+
531
+ ```vue fileName="pages/about.vue"
532
+ <script setup lang="ts">
533
+ import { useIntlayer } from "vue-intlayer";
534
+
535
+ const content = useIntlayer("about");
536
+ </script>
537
+
538
+ <template>
539
+ <div>
540
+ <h1>{{ content.title }}</h1>
541
+ <p>{{ content.description }}</p>
542
+ </div>
543
+ </template>
544
+ ```
545
+
546
+ ستقوم وحدة `nuxt-intlayer` تلقائيًا بـ:
547
+
548
+ - اكتشاف اللغة المفضلة للمستخدم
549
+ - التعامل مع تبديل اللغة عبر عنوان URL
550
+ - تعيين السمة المناسبة `<html lang="">`
551
+ - إدارة ملفات تعريف الارتباط الخاصة باللغة
552
+ - إعادة توجيه المستخدمين إلى عنوان URL المحلي المناسب
553
+
554
+ ### (اختياري) الخطوة 8: إنشاء مكون رابط محلي
555
+
556
+ لضمان أن التنقل في تطبيقك يحترم اللغة الحالية، يمكنك إنشاء مكون `LocalizedLink` مخصص. يقوم هذا المكون تلقائيًا بإضافة بادئة لعناوين URL الداخلية باللغة الحالية.
557
+
558
+ ```vue fileName="components/LocalizedLink.vue"
559
+ <template>
560
+ <NuxtLink :to="localizedHref" v-bind="$attrs">
561
+ <slot />
562
+ </NuxtLink>
563
+ </template>
564
+
565
+ <script setup lang="ts">
566
+ import { computed } from "vue";
567
+ import { getLocalizedUrl } from "intlayer";
568
+ import { useLocale } from "vue-intlayer";
569
+
570
+ const props = defineProps({
571
+ to: {
572
+ type: String,
573
+ required: true,
574
+ },
575
+ });
576
+
577
+ const { locale } = useLocale();
578
+
579
+ // تحقق إذا كان الرابط خارجيًا
580
+ const isExternalLink = computed(() => /^https?:\/\//.test(props.to || ""));
581
+
582
+ // إنشاء رابط محلي للروابط الداخلية
583
+ const localizedHref = computed(() =>
584
+ isExternalLink.value ? props.to : getLocalizedUrl(props.to, locale.value)
585
+ );
586
+ </script>
587
+ ```
588
+
589
+ ثم استخدم هذا المكون في جميع أنحاء تطبيقك:
590
+
591
+ ```vue fileName="pages/index.vue"
592
+ <template>
593
+ <div>
594
+ <LocalizedLink to="/about">
595
+ {{ content.aboutLink }}
596
+ </LocalizedLink>
597
+
598
+ <LocalizedLink to="/ar/contact">
599
+ {{ content.contactLink }}
600
+ </LocalizedLink>
601
+ </div>
602
+ </template>
603
+
604
+ <script setup lang="ts">
605
+ import { useIntlayer } from "vue-intlayer";
606
+ import LocalizedLink from "~/components/LocalizedLink.vue";
607
+
608
+ const content = useIntlayer("home");
609
+ </script>
610
+ ```
611
+
612
+ ### (اختياري) الخطوة 9: التعامل مع البيانات الوصفية وتحسين محركات البحث (SEO)
613
+
614
+ يوفر Nuxt إمكانيات ممتازة لتحسين محركات البحث. يمكنك استخدام Intlayer للتعامل مع البيانات الوصفية المترجمة:
615
+
616
+ ```vue fileName="pages/about.vue"
617
+ <script setup lang="ts">
618
+ import { useSeoMeta } from "nuxt/app";
619
+ import { getIntlayer } from "intlayer";
620
+ import { useLocale } from "vue-intlayer";
621
+
622
+ const { locale } = useLocale();
623
+ const content = getIntlayer("about-meta", locale.value);
624
+
625
+ useSeoMeta({
626
+ title: content.title,
627
+ description: content.description,
628
+ });
629
+ </script>
630
+
631
+ <template>
632
+ <div>
633
+ <h1>{{ content.pageTitle }}</h1>
634
+ <p>{{ content.pageContent }}</p>
635
+ </div>
636
+ </template>
637
+ ```
638
+
639
+ قم بإنشاء إعلان المحتوى المقابل:
640
+
641
+ ```typescript fileName="pages/about-meta.content.ts" contentDeclarationFormat="typescript"
642
+ import { t, type Dictionary } from "intlayer";
643
+ import type { useSeoMeta } from "nuxt/app";
644
+
645
+ const aboutMetaContent = {
646
+ key: "about-meta",
647
+ content: {
648
+ title: t({
649
+ ar: "من نحن - شركتنا",
650
+ en: "About Us - My Company",
651
+ fr: "À Propos - Ma Société",
652
+ es: "Acerca de Nosotros - Mi Empresa",
653
+ }),
654
+ description: t({
655
+ ar: "تعرف على المزيد عن شركتنا ومهمتنا",
656
+ en: "Learn more about our company and our mission",
657
+ fr: "En savoir plus sur notre société et notre mission",
658
+ es: "Conozca más sobre nuestra empresa y nuestra misión",
659
+ }),
660
+ },
661
+ } satisfies Dictionary<Parameters<typeof useSeoMeta>[0]>;
662
+
663
+ export default aboutMetaContent;
664
+ ```
665
+
666
+ ```typescript fileName="pages/about-meta.content.mjs" contentDeclarationFormat="esm"
667
+ import { t } from "intlayer";
668
+
669
+ /** @type {import('intlayer').Dictionary} */
670
+ const aboutMetaContent = {
671
+ key: "about-meta",
672
+ content: {
673
+ title: t({
674
+ ar: "من نحن - شركتنا",
675
+ en: "About Us - My Company",
676
+ fr: "À Propos - Ma Société",
677
+ es: "Acerca de Nosotros - Mi Empresa",
678
+ }),
679
+ description: t({
680
+ ar: "تعرف على المزيد عن شركتنا ومهمتنا",
681
+ en: "Learn more about our company and our mission",
682
+ fr: "En savoir plus sur notre société et notre mission",
683
+ es: "Conozca más sobre nuestra empresa y nuestra misión",
684
+ }),
685
+ },
686
+ };
687
+
688
+ export default aboutMetaContent;
689
+ ```
690
+
691
+ ```typescript fileName="pages/about-meta.content.js" contentDeclarationFormat="cjs"
692
+ const { t } = require("intlayer");
693
+
694
+ /** @type {import('intlayer').Dictionary} */
695
+ const aboutMetaContent = {
696
+ key: "about-meta",
697
+ content: {
698
+ title: t({
699
+ ar: "من نحن - شركتنا",
700
+ en: "About Us - My Company",
701
+ fr: "À Propos - Ma Société",
702
+ es: "Acerca de Nosotros - Mi Empresa",
703
+ }),
704
+ description: t({
705
+ ar: "تعرف على المزيد عن شركتنا ومهمتنا",
706
+ en: "Learn more about our company and our mission",
707
+ fr: "En savoir plus sur notre société et notre mission",
708
+ es: "Conozca más sobre nuestra empresa y nuestra misión",
709
+ }),
710
+ },
711
+ };
712
+
713
+ module.exports = aboutMetaContent;
714
+ ```
715
+
716
+ ```json fileName="pages/about-meta.content.json" contentDeclarationFormat="json"
717
+ {
718
+ "key": "about-meta",
719
+ "content": {
720
+ "title": {
721
+ "nodeType": "translation",
722
+ "translations": {
723
+ "ar": "من نحن - شركتنا",
724
+ "en": "About Us - My Company",
725
+ "fr": "À Propos - Ma Société",
726
+ "es": "Acerca de Nosotros - Mi Empresa"
727
+ }
728
+ },
729
+ "description": {
730
+ "nodeType": "translation",
731
+ "translations": {
732
+ "ar": "تعرف على المزيد عن شركتنا ومهمتنا",
733
+ "en": "Learn more about our company and our mission",
734
+ "fr": "En savoir plus sur notre société et notre mission",
735
+ "es": "Conozca más sobre nuestra empresa y nuestra misión"
736
+ }
737
+ }
738
+ }
739
+ }
740
+ ```
741
+
742
+ ### إعداد TypeScript
743
+
744
+ يستخدم Intlayer توسيع الوحدة للحصول على فوائد TypeScript وجعل قاعدة التعليمات البرمجية الخاصة بك أقوى.
745
+
746
+ ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
747
+
748
+ ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
749
+
750
+ تأكد من أن إعدادات TypeScript الخاصة بك تتضمن الأنواع التي يتم إنشاؤها تلقائيًا.
751
+
752
+ ```json5 fileName="tsconfig.json"
753
+ {
754
+ // ... إعدادات TypeScript الحالية الخاصة بك
755
+ "include": [
756
+ // ... إعدادات TypeScript الحالية الخاصة بك
757
+ ".intlayer/**/*.ts", // تضمين الأنواع التي يتم إنشاؤها تلقائيًا
758
+ ],
759
+ }
760
+ ```
761
+
762
+ ### إعداد Git
763
+
764
+ يوصى بتجاهل الملفات التي يتم إنشاؤها بواسطة Intlayer. يتيح لك ذلك تجنب إضافتها إلى مستودع Git الخاص بك.
765
+
766
+ للقيام بذلك، يمكنك إضافة التعليمات التالية إلى ملف `.gitignore` الخاص بك:
767
+
768
+ ```plaintext fileName=".gitignore"
769
+ # تجاهل الملفات التي يتم إنشاؤها بواسطة Intlayer
770
+ .intlayer
771
+ ```
772
+
773
+ ### إضافة VS Code
774
+
775
+ لتحسين تجربة التطوير الخاصة بك مع Intlayer، يمكنك تثبيت **إضافة Intlayer الرسمية لـ VS Code**.
776
+
777
+ [تثبيت من سوق VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
778
+
779
+ توفر هذه الإضافة:
780
+
781
+ - **الإكمال التلقائي** لمفاتيح الترجمة.
782
+ - **اكتشاف الأخطاء في الوقت الفعلي** للترجمات المفقودة.
783
+ - **معاينات مدمجة** للمحتوى المترجم.
784
+ - **إجراءات سريعة** لإنشاء وتحديث الترجمات بسهولة.
785
+
786
+ لمزيد من التفاصيل حول كيفية استخدام الإضافة، راجع [وثائق إضافة Intlayer لـ VS Code](https://intlayer.org/doc/vs-code-extension).
787
+
788
+ ---
789
+
790
+ ### الذهاب إلى أبعد من ذلك
791
+
792
+ ## للمزيد، يمكنك تنفيذ [المحرر المرئي](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_visual_editor.md) أو نقل المحتوى الخاص بك باستخدام [نظام إدارة المحتوى (CMS)](https://github.com/aymericzip/intlayer/blob/main/docs/ar/intlayer_CMS.md).