@intlayer/docs 8.9.4 → 8.9.6-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.
Files changed (182) hide show
  1. package/docs/ar/benchmark/index.md +0 -3
  2. package/docs/ar/benchmark/nextjs.md +15 -6
  3. package/docs/ar/benchmark/solid.md +155 -0
  4. package/docs/ar/benchmark/svelte.md +148 -0
  5. package/docs/ar/benchmark/tanstack.md +12 -3
  6. package/docs/ar/benchmark/vue.md +160 -0
  7. package/docs/ar/configuration.md +16 -12
  8. package/docs/ar/dictionary/content_file.md +51 -1
  9. package/docs/ar/plugins/sync-po.md +0 -21
  10. package/docs/bn/configuration.md +16 -12
  11. package/docs/cs/configuration.md +16 -12
  12. package/docs/de/benchmark/index.md +0 -3
  13. package/docs/de/benchmark/nextjs.md +15 -6
  14. package/docs/de/benchmark/solid.md +155 -0
  15. package/docs/de/benchmark/svelte.md +148 -0
  16. package/docs/de/benchmark/tanstack.md +12 -3
  17. package/docs/de/benchmark/vue.md +160 -0
  18. package/docs/de/configuration.md +16 -12
  19. package/docs/de/dictionary/content_file.md +52 -2
  20. package/docs/de/plugins/sync-po.md +0 -22
  21. package/docs/en/benchmark/nextjs.md +11 -2
  22. package/docs/en/benchmark/solid.md +22 -4
  23. package/docs/en/benchmark/svelte.md +17 -5
  24. package/docs/en/benchmark/tanstack.md +18 -3
  25. package/docs/en/benchmark/vue.md +17 -11
  26. package/docs/en/configuration.md +16 -13
  27. package/docs/en/dictionary/content_file.md +51 -1
  28. package/docs/en/plugins/sync-po.md +0 -21
  29. package/docs/en-GB/benchmark/index.md +0 -3
  30. package/docs/en-GB/benchmark/nextjs.md +15 -6
  31. package/docs/en-GB/benchmark/solid.md +155 -0
  32. package/docs/en-GB/benchmark/svelte.md +148 -0
  33. package/docs/en-GB/benchmark/tanstack.md +12 -3
  34. package/docs/en-GB/benchmark/vue.md +160 -0
  35. package/docs/en-GB/configuration.md +15 -11
  36. package/docs/en-GB/dictionary/content_file.md +51 -1
  37. package/docs/en-GB/plugins/sync-po.md +0 -21
  38. package/docs/es/benchmark/index.md +0 -3
  39. package/docs/es/benchmark/nextjs.md +15 -6
  40. package/docs/es/benchmark/solid.md +155 -0
  41. package/docs/es/benchmark/svelte.md +148 -0
  42. package/docs/es/benchmark/tanstack.md +12 -3
  43. package/docs/es/benchmark/vue.md +160 -0
  44. package/docs/es/configuration.md +16 -12
  45. package/docs/es/dictionary/content_file.md +51 -1
  46. package/docs/es/plugins/sync-po.md +0 -21
  47. package/docs/fr/benchmark/index.md +0 -3
  48. package/docs/fr/benchmark/nextjs.md +15 -6
  49. package/docs/fr/benchmark/solid.md +155 -0
  50. package/docs/fr/benchmark/svelte.md +148 -0
  51. package/docs/fr/benchmark/tanstack.md +12 -3
  52. package/docs/fr/benchmark/vue.md +160 -0
  53. package/docs/fr/configuration.md +16 -12
  54. package/docs/fr/dictionary/content_file.md +51 -1
  55. package/docs/fr/plugins/sync-po.md +0 -21
  56. package/docs/hi/benchmark/nextjs.md +15 -6
  57. package/docs/hi/benchmark/solid.md +155 -0
  58. package/docs/hi/benchmark/svelte.md +148 -0
  59. package/docs/hi/benchmark/tanstack.md +12 -3
  60. package/docs/hi/benchmark/vue.md +160 -0
  61. package/docs/hi/configuration.md +16 -12
  62. package/docs/hi/dictionary/content_file.md +51 -1
  63. package/docs/hi/plugins/sync-po.md +0 -21
  64. package/docs/id/benchmark/index.md +0 -3
  65. package/docs/id/benchmark/nextjs.md +15 -6
  66. package/docs/id/benchmark/solid.md +155 -0
  67. package/docs/id/benchmark/svelte.md +148 -0
  68. package/docs/id/benchmark/tanstack.md +12 -3
  69. package/docs/id/benchmark/vue.md +160 -0
  70. package/docs/id/configuration.md +16 -12
  71. package/docs/id/dictionary/content_file.md +51 -1
  72. package/docs/id/plugins/sync-po.md +0 -21
  73. package/docs/it/benchmark/index.md +1 -4
  74. package/docs/it/benchmark/nextjs.md +15 -6
  75. package/docs/it/benchmark/solid.md +155 -0
  76. package/docs/it/benchmark/svelte.md +148 -0
  77. package/docs/it/benchmark/tanstack.md +12 -3
  78. package/docs/it/benchmark/vue.md +160 -0
  79. package/docs/it/configuration.md +16 -12
  80. package/docs/it/dictionary/content_file.md +51 -1
  81. package/docs/it/plugins/sync-po.md +0 -21
  82. package/docs/ja/benchmark/index.md +5 -5
  83. package/docs/ja/benchmark/nextjs.md +15 -6
  84. package/docs/ja/benchmark/solid.md +155 -0
  85. package/docs/ja/benchmark/svelte.md +148 -0
  86. package/docs/ja/benchmark/tanstack.md +12 -3
  87. package/docs/ja/benchmark/vue.md +160 -0
  88. package/docs/ja/configuration.md +16 -12
  89. package/docs/ja/dictionary/content_file.md +50 -2
  90. package/docs/ja/intlayer_with_nextjs_no_locale_path.md +4 -3
  91. package/docs/ja/plugins/sync-po.md +0 -21
  92. package/docs/ko/benchmark/nextjs.md +15 -6
  93. package/docs/ko/benchmark/solid.md +155 -0
  94. package/docs/ko/benchmark/svelte.md +148 -0
  95. package/docs/ko/benchmark/tanstack.md +12 -3
  96. package/docs/ko/benchmark/vue.md +160 -0
  97. package/docs/ko/configuration.md +16 -12
  98. package/docs/ko/dictionary/content_file.md +51 -1
  99. package/docs/ko/intlayer_with_nextjs_no_locale_path.md +3 -2
  100. package/docs/ko/plugins/sync-po.md +0 -21
  101. package/docs/nl/configuration.md +16 -12
  102. package/docs/pl/benchmark/index.md +0 -3
  103. package/docs/pl/benchmark/nextjs.md +15 -6
  104. package/docs/pl/benchmark/solid.md +155 -0
  105. package/docs/pl/benchmark/svelte.md +148 -0
  106. package/docs/pl/benchmark/tanstack.md +12 -3
  107. package/docs/pl/benchmark/vue.md +160 -0
  108. package/docs/pl/configuration.md +16 -12
  109. package/docs/pl/dictionary/content_file.md +51 -1
  110. package/docs/pl/plugins/sync-po.md +0 -21
  111. package/docs/pt/benchmark/index.md +0 -3
  112. package/docs/pt/benchmark/nextjs.md +16 -7
  113. package/docs/pt/benchmark/solid.md +155 -0
  114. package/docs/pt/benchmark/svelte.md +148 -0
  115. package/docs/pt/benchmark/tanstack.md +13 -4
  116. package/docs/pt/benchmark/vue.md +160 -0
  117. package/docs/pt/configuration.md +16 -12
  118. package/docs/pt/dictionary/content_file.md +51 -1
  119. package/docs/pt/plugins/sync-po.md +0 -21
  120. package/docs/ru/benchmark/nextjs.md +15 -6
  121. package/docs/ru/benchmark/solid.md +155 -0
  122. package/docs/ru/benchmark/svelte.md +148 -0
  123. package/docs/ru/benchmark/tanstack.md +12 -3
  124. package/docs/ru/benchmark/vue.md +160 -0
  125. package/docs/ru/configuration.md +16 -12
  126. package/docs/ru/dictionary/content_file.md +52 -2
  127. package/docs/ru/plugins/sync-po.md +0 -21
  128. package/docs/tr/benchmark/index.md +0 -3
  129. package/docs/tr/benchmark/nextjs.md +15 -6
  130. package/docs/tr/benchmark/solid.md +155 -0
  131. package/docs/tr/benchmark/svelte.md +148 -0
  132. package/docs/tr/benchmark/tanstack.md +12 -3
  133. package/docs/tr/benchmark/vue.md +160 -0
  134. package/docs/tr/configuration.md +16 -12
  135. package/docs/tr/dictionary/content_file.md +51 -1
  136. package/docs/tr/plugins/sync-po.md +0 -21
  137. package/docs/uk/benchmark/nextjs.md +15 -6
  138. package/docs/uk/benchmark/solid.md +155 -0
  139. package/docs/uk/benchmark/svelte.md +148 -0
  140. package/docs/uk/benchmark/tanstack.md +12 -3
  141. package/docs/uk/benchmark/vue.md +160 -0
  142. package/docs/uk/configuration.md +16 -12
  143. package/docs/uk/dictionary/content_file.md +51 -1
  144. package/docs/uk/plugins/sync-po.md +0 -21
  145. package/docs/ur/configuration.md +16 -12
  146. package/docs/vi/benchmark/index.md +0 -3
  147. package/docs/vi/benchmark/nextjs.md +15 -6
  148. package/docs/vi/benchmark/solid.md +155 -0
  149. package/docs/vi/benchmark/svelte.md +148 -0
  150. package/docs/vi/benchmark/tanstack.md +12 -3
  151. package/docs/vi/benchmark/vue.md +160 -0
  152. package/docs/vi/configuration.md +16 -12
  153. package/docs/vi/dictionary/content_file.md +51 -1
  154. package/docs/vi/intlayer_with_nextjs_15.md +10 -57
  155. package/docs/vi/plugins/sync-po.md +0 -21
  156. package/docs/zh/benchmark/nextjs.md +15 -6
  157. package/docs/zh/benchmark/solid.md +155 -0
  158. package/docs/zh/benchmark/svelte.md +148 -0
  159. package/docs/zh/benchmark/tanstack.md +12 -3
  160. package/docs/zh/benchmark/vue.md +160 -0
  161. package/docs/zh/configuration.md +16 -12
  162. package/docs/zh/dictionary/content_file.md +51 -3
  163. package/docs/zh/plugins/sync-po.md +0 -21
  164. package/frequent_questions/ar/intlayerNode.md +3 -3
  165. package/frequent_questions/de/intlayerNode.md +3 -3
  166. package/frequent_questions/en/intlayerNode.md +3 -3
  167. package/frequent_questions/en-GB/intlayerNode.md +3 -3
  168. package/frequent_questions/es/intlayerNode.md +3 -3
  169. package/frequent_questions/fr/intlayerNode.md +3 -3
  170. package/frequent_questions/hi/intlayerNode.md +3 -3
  171. package/frequent_questions/id/intlayerNode.md +3 -3
  172. package/frequent_questions/it/intlayerNode.md +3 -3
  173. package/frequent_questions/ja/intlayerNode.md +3 -3
  174. package/frequent_questions/ko/intlayerNode.md +3 -3
  175. package/frequent_questions/pl/intlayerNode.md +3 -3
  176. package/frequent_questions/pt/intlayerNode.md +3 -3
  177. package/frequent_questions/ru/intlayerNode.md +3 -3
  178. package/frequent_questions/tr/intlayerNode.md +3 -3
  179. package/frequent_questions/uk/intlayerNode.md +3 -3
  180. package/frequent_questions/vi/intlayerNode.md +3 -3
  181. package/frequent_questions/zh/intlayerNode.md +3 -3
  182. package/package.json +8 -8
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-04-08
3
+ updatedAt: 2026-05-12
4
4
  title: الإعدادات (Configuration)
5
5
  description: تعرف على كيفية إعداد Intlayer لتطبيقك. افهم الإعدادات والخيارات المختلفة المتاحة لتخصيص Intlayer وفقًا لاحتياجاتك.
6
6
  keywords:
@@ -14,6 +14,9 @@ slugs:
14
14
  - concept
15
15
  - configuration
16
16
  history:
17
+ - version: 8.9.4
18
+ date: 2026-05-12
19
+ changes: "إضافة دعم لمزود LM Studio"
17
20
  - version: 8.7.0
18
21
  date: 2026-04-08
19
22
  changes: "إضافة خياري `prune` و `minify` إلى إعدادات البناء"
@@ -350,7 +353,7 @@ const config: IntlayerConfig = {
350
353
  ai: {
351
354
  /**
352
355
  * مزود الذكاء الاصطناعي المستخدم.
353
- * الخيارات: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
356
+ * الخيارات: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
354
357
  * الافتراضي: 'openai'
355
358
  */
356
359
  provider: "openai",
@@ -909,16 +912,17 @@ dictionary: {
909
912
  - **Groq**
910
913
  - **Amazon Bedrock**
911
914
  - **Together.ai**
912
-
913
- | الحقل | الوصف | النوع | الافتراضي | مثال | ملاحظة |
914
- | -------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
915
- | `provider` | المزود المستخدم لميزات الذكاء الاصطناعي في Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` | `undefined` | `'anthropic'` | يحتاج المزودون المختلفون إلى مفاتيح واجهة برمجة تطبيقات مختلفة ولهم أسعار مختلفة. |
916
- | `model` | النموذج المستخدم لميزات الذكاء الاصطناعي. | `string` | لا يوجد | `'gpt-4o-2024-11-20'` | يعتمد النموذج المحدد على المزود. |
917
- | `temperature` | يتحكم في عشوائية ردود الذكاء الاصطناعي. | `number` | لا يوجد | `0.1` | درجة حرارة أعلى = أكثر إبداعاً وأقل قابلية للتنبؤ. |
918
- | `apiKey` | مفتاح واجهة برمجة التطبيقات الخاص بك للمزود المختار. | `string` | لا يوجد | `process.env.OPENAI_API_KEY` | يجب الحفاظ على سريته؛ استخدم متغيرات البيئة. |
919
- | `applicationContext` | سياق إضافي حول تطبيقك لمساعدة الذكاء الاصطناعي في توليد ترجمات أكثر دقة (المجال، الجمهور المستهدف، النبرة، المصطلحات). | `string` | لا يوجد | `'سياق تطبيقي الخاص'` | يمكن استخدامه لإضافة قواعد (مثلاً: `"لا يجب عليك تحويل روابط URL"`). |
920
- | `baseURL` | الرابط الأساسي لواجهة برمجة تطبيقات الذكاء الاصطناعي. | `string` | لا يوجد | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | يمكن أن يشير إلى نقطة نهاية محلية أو مخصصة لواجهة برمجة تطبيقات الذكاء الاصطناعي. |
921
- | `dataSerialization` | صيغة تسلسل البيانات لميزات الذكاء الاصطناعي. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: افتراضي، موثوق؛ يستهلك المزيد من الوحدات. <br/> `'toon'`: وحدات أقل، أقل استقراراً. <br/> يتم تمرير المعاملات الإضافية إلى النموذج كسياق (جهد التفكير إلخ). |
915
+ - **LM Studio**
916
+
917
+ | الحقل | الوصف | النوع | الافتراضي | مثال | ملاحظة |
918
+ | -------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
919
+ | `provider` | المزود المستخدم لميزات الذكاء الاصطناعي في Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` | `undefined` | `'anthropic'` | يحتاج المزودون المختلفون إلى مفاتيح واجهة برمجة تطبيقات مختلفة ولهم أسعار مختلفة. |
920
+ | `model` | النموذج المستخدم لميزات الذكاء الاصطناعي. | `string` | لا يوجد | `'gpt-4o-2024-11-20'` | يعتمد النموذج المحدد على المزود. |
921
+ | `temperature` | يتحكم في عشوائية ردود الذكاء الاصطناعي. | `number` | لا يوجد | `0.1` | درجة حرارة أعلى = أكثر إبداعاً وأقل قابلية للتنبؤ. |
922
+ | `apiKey` | مفتاح واجهة برمجة التطبيقات الخاص بك للمزود المختار. | `string` | لا يوجد | `process.env.OPENAI_API_KEY` | يجب الحفاظ على سريته؛ استخدم متغيرات البيئة. |
923
+ | `applicationContext` | سياق إضافي حول تطبيقك لمساعدة الذكاء الاصطناعي في توليد ترجمات أكثر دقة (المجال، الجمهور المستهدف، النبرة، المصطلحات). | `string` | لا يوجد | `'سياق تطبيقي الخاص'` | يمكن استخدامه لإضافة قواعد (مثلاً: `"لا يجب عليك تحويل روابط URL"`). |
924
+ | `baseURL` | الرابط الأساسي لواجهة برمجة تطبيقات الذكاء الاصطناعي. | `string` | لا يوجد | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | يمكن أن يشير إلى نقطة نهاية محلية أو مخصصة لواجهة برمجة تطبيقات الذكاء الاصطناعي. |
925
+ | `dataSerialization` | صيغة تسلسل البيانات لميزات الذكاء الاصطناعي. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: افتراضي، موثوق؛ يستهلك المزيد من الوحدات. <br/> • `'toon'`: وحدات أقل، أقل استقراراً. <br/> • يتم تمرير المعاملات الإضافية إلى النموذج كسياق (جهد التفكير إلخ). |
922
926
 
923
927
  ---
924
928
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-02-07
3
- updatedAt: 2026-01-28
3
+ updatedAt: 2026-05-12
4
4
  title: ملف المحتوى
5
5
  description: تعلّم كيفية تخصيص الامتدادات لملفات إعلان المحتوى الخاصة بك. اتبع هذا التوثيق لتنفيذ الشروط بكفاءة في مشروعك.
6
6
  keywords:
@@ -12,6 +12,9 @@ slugs:
12
12
  - concept
13
13
  - content
14
14
  history:
15
+ - version: 8.9.0
16
+ date: 2026-05-12
17
+ changes: "إضافة نوع عقدة المحتوى `plural`"
15
18
  - version: 8.0.0
16
19
  date: 2026-01-28
17
20
  changes: "إضافة نوع عقدة المحتوى `html`"
@@ -66,6 +69,7 @@ import { type ReactNode } from "react";
66
69
  import {
67
70
  t,
68
71
  enu,
72
+ plural,
69
73
  cond,
70
74
  nest,
71
75
  md,
@@ -85,6 +89,7 @@ interface Content {
85
89
  };
86
90
  multilingualContent: string;
87
91
  quantityContent: string;
92
+ pluralContent: string;
88
93
  conditionalContent: string;
89
94
  markdownContent: never;
90
95
  htmlContent: never;
@@ -121,6 +126,10 @@ export default {
121
126
  ">5": "بعض السيارات",
122
127
  ">19": "الكثير من السيارات",
123
128
  }),
129
+ pluralContent: plural({
130
+ one: "One car",
131
+ other: "{{count}} cars",
132
+ }),
124
133
  conditionalContent: cond({
125
134
  true: "التحقق مفعل",
126
135
  false: "التحقق معطل",
@@ -175,6 +184,13 @@ export default {
175
184
  ">5": "بعض السيارات",
176
185
  ">19": "العديد من السيارات",
177
186
  },
187
+ "pluralContent": {
188
+ "nodeType": "plural",
189
+ "plural": {
190
+ "one": "One car",
191
+ "other": "{{count}} cars",
192
+ },
193
+ },
178
194
  },
179
195
  "conditionalContent": {
180
196
  "nodeType": "condition",
@@ -222,6 +238,7 @@ export default {
222
238
  - **قيم بدائية**: سلاسل نصية، أرقام، قيم منطقية، null، undefined
223
239
  - **عقد ذات نوع**: أنواع محتوى خاصة مثل الترجمات، الشروط، الماركداون، إلخ.
224
240
  - **دوال**: محتوى ديناميكي يمكن تقييمه أثناء وقت التشغيل [انظر جلب الدوال](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/function_fetching.md)
241
+ - **محتوى الجمع**: راجع محتوى الجمع [راجع محتوى الجمع](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/plural.md)
225
242
  - **محتوى متداخل**: مراجع إلى قواميس أخرى
226
243
 
227
244
  #### أنواع المحتوى
@@ -547,6 +564,8 @@ multilingualContent: t({
547
564
  });
548
565
  ```
549
566
 
567
+ > راجع [محتوى الترجمة (`t`) توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/translation.md) لمزيد من المعلومات.
568
+
550
569
  ### محتوى الشرط (`cond`)
551
570
 
552
571
  محتوى يتغير بناءً على شروط منطقية:
@@ -560,6 +579,8 @@ conditionalContent: cond({
560
579
  });
561
580
  ```
562
581
 
582
+ > راجع [محتوى الشرط (`cond`) توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/condition.md) لمزيد من المعلومات.
583
+
563
584
  ### محتوى التعداد (`enu`)
564
585
 
565
586
  المحتوى الذي يختلف بناءً على القيم المعدودة:
@@ -574,6 +595,23 @@ statusContent: enu({
574
595
  });
575
596
  ```
576
597
 
598
+ > راجع [محتوى التعداد (`enu`) توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/enumeration.md) لمزيد من المعلومات.
599
+
600
+ ### محتوى الجمع (`plural`)
601
+
602
+ المحتوى الذي يختلف بناءً على قواعد الجمع:
603
+
604
+ ```typescript
605
+ import { plural } from "intlayer";
606
+
607
+ pluralContent: plural({
608
+ one: "One car",
609
+ other: "{{count}} cars",
610
+ });
611
+ ```
612
+
613
+ > راجع [محتوى الجمع توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/plural.md) لمزيد من المعلومات.
614
+
577
615
  ### محتوى الإدراج (`insert`)
578
616
 
579
617
  محتوى يمكن إدراجه داخل محتويات أخرى:
@@ -584,6 +622,8 @@ import { insert } from "intlayer";
584
622
  insertionContent: insert("يمكن إدراج هذا النص في أي مكان");
585
623
  ```
586
624
 
625
+ > راجع [محتوى الإدراج (`insert`) توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/insertion.md) لمزيد من المعلومات.
626
+
587
627
  ### المحتوى المتداخل (`nest`)
588
628
 
589
629
  مراجع إلى قواميس أخرى:
@@ -594,6 +634,8 @@ import { nest } from "intlayer";
594
634
  nestedContent: nest("about-page");
595
635
  ```
596
636
 
637
+ > راجع [المحتوى المتداخل (`nest`) توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/nesting.md) لمزيد من المعلومات.
638
+
597
639
  ### محتوى ماركداون (`md`)
598
640
 
599
641
  محتوى نص غني بصيغة ماركداون:
@@ -606,6 +648,8 @@ markdownContent: md(
606
648
  );
607
649
  ```
608
650
 
651
+ > راجع [محتوى ماركداون (`md`) توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/markdown.md) لمزيد من المعلومات.
652
+
609
653
  ### محتوى HTML (`html`)
610
654
 
611
655
  محتوى HTML غني يمكنه استخدام وسوم قياسية أو مكونات مخصصة:
@@ -623,6 +667,8 @@ localizedHtmlContent: t({
623
667
  });
624
668
  ```
625
669
 
670
+ > راجع [محتوى HTML (`html`) توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/html.md) لمزيد من المعلومات.
671
+
626
672
  ### محتوى الجنس (`gender`)
627
673
 
628
674
  محتوى يتغير بناءً على الجنس:
@@ -637,6 +683,8 @@ genderContent: gender({
637
683
  });
638
684
  ```
639
685
 
686
+ > راجع [محتوى الجنس (`gender`) توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/gender.md) لمزيد من المعلومات.
687
+
640
688
  ### محتوى الملف (`file`)
641
689
 
642
690
  مراجع لملفات خارجية:
@@ -647,6 +695,8 @@ import { file } from "intlayer";
647
695
  fileContent: file("./path/to/content.txt");
648
696
  ```
649
697
 
698
+ > راجع [محتوى الملف (`file`) توثيق](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/file.md) لمزيد من المعلومات.
699
+
650
700
  ## إنشاء ملفات المحتوى
651
701
 
652
702
  ### الهيكل الأساسي لملف المحتوى
@@ -160,30 +160,9 @@ syncPO({
160
160
  source: ({ key, locale }) => string, // مطلوب
161
161
  location?: string, // تسمية اختيارية، الافتراضي: "sync-po::path/to/source"
162
162
  priority?: number, // أولوية اختيارية لحل النزاعات، الافتراضي: 0
163
- format?: 'icu' | 'i18next' | 'vue-i18n', // اختياري، مطلوب فقط عندما تستخدم قيم msgstr الخاصة بك بناء جملة إدراج محدد
164
163
  });
165
164
  ```
166
165
 
167
- #### `format` ('icu' | 'i18next' | 'vue-i18n')
168
-
169
- ملفات PO هي دائمًا ملفات Gettext Portable Object — وهذا أمر ثابت. يصف هذا الخيار فقط **بناء جملة الإدراج** المستخدم داخل قيم `msgstr` ، بحيث يمكن لـ Intlayer تحويلها إلى تنسيقه الخاص في وقت التحليل (عبر `formatDictionary`) والعودة عند كتابة المخرجات.
170
-
171
- - `undefined` _(افتراضي)_: يتم التعامل مع قيم `msgstr` كسلاسل نصية عادية — لا يوجد تحويل. استخدم هذا لمعظم ملفات PO.
172
- - `'icu'`: تستخدم قيم `msgstr` بناء جملة رسائل ICU (على سبيل المثال `{count, plural, one {# item} other {# items}}`).
173
- - `'i18next'`: تستخدم قيم `msgstr` بناء جملة إدراج i18next (على سبيل المثال `{{variable}}`).
174
- - `'vue-i18n'`: تستخدم قيم `msgstr` بناء جملة Vue I18n.
175
-
176
- > يتم تطبيق التحويل بواسطة `formatDictionary` الخاص بـ `@intlayer/chokidar` عند التحميل، ويتم عكسه باستخدام `formatDictionaryOutput` عند الكتابة. بالنسبة للقواعد المعقدة مثل جموع ICU، فإن دقة الرحلة الذهاب والاياب غير مضمونة.
177
-
178
- **مثال — تحتوي ملفات PO على إدراج بنمط i18next:**
179
-
180
- ```ts
181
- syncPO({
182
- source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
183
- format: "i18next",
184
- }),
185
- ```
186
-
187
166
  ### مصادر PO متعددة والأولوية
188
167
 
189
168
  يمكنك إضافة إضافات `syncPO` متعددة لمزامنة مصادر PO مختلفة. هذا مفيد عندما يكون لديك مصادر ترجمة متعددة أو هياكل PO مختلفة في مشروعك.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-04-08
3
+ updatedAt: 2026-05-12
4
4
  title: কনফিগারেশন (Configuration)
5
5
  description: আপনার অ্যাপ্লিকেশনের জন্য Intlayer কীভাবে কনফিগার করবেন তা শিখুন। আপনার প্রয়োজন অনুযায়ী Intlayer কাস্টমাইজ করতে উপলব্ধ বিভিন্ন সেটিংস এবং বিকল্পগুলি বুঝুন।
6
6
  keywords:
@@ -14,6 +14,9 @@ slugs:
14
14
  - concept
15
15
  - configuration
16
16
  history:
17
+ - version: 8.9.4
18
+ date: 2026-05-12
19
+ changes: "LM Studio প্রদানকারীর জন্য সমর্থন যোগ করুন"
17
20
  - version: 8.7.0
18
21
  date: 2026-04-08
19
22
  changes: "বিল্ড কনফিগারেশনে `prune` এবং `minify` বিকল্প যোগ করা হয়েছে"
@@ -350,7 +353,7 @@ const config: IntlayerConfig = {
350
353
  ai: {
351
354
  /**
352
355
  * ব্যবহৃত AI প্রোভাইডার।
353
- * বিকল্পসমূহ: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
356
+ * বিকল্পসমূহ: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
354
357
  * ডিফল্ট: 'openai'
355
358
  */
356
359
  provider: "openai",
@@ -909,16 +912,17 @@ Intlayer সর্বোচ্চ নমনীয়তার জন্য এ
909
912
  - **Groq**
910
913
  - **Amazon Bedrock**
911
914
  - **Together.ai**
912
-
913
- | ফিল্ড | বর্ণনা | টাইপ | ডিফল্ট | উদাহরণ | মন্তব্য |
914
- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
915
- | `provider` | Intlayer AI বৈশিষ্ট্যের জন্য ব্যবহৃত প্রোভাইডার। | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` | `undefined` | `'anthropic'` | বিভিন্ন প্রোভাইডারের জন্য আলাদা আলাদা API কী প্রয়োজন এবং তাদের দামও আলাদা। |
916
- | `model` | AI বৈশিষ্ট্যের জন্য ব্যবহৃত মডেল। | `string` | নেই | `'gpt-4o-2024-11-20'` | নির্দিষ্ট মডেল প্রোভাইডারের ওপর নির্ভর করে। |
917
- | `temperature` | AI রেসপন্সের র্যান্ডমনেস নিয়ন্ত্রণ করে। | `number` | নেই | `0.1` | উচ্চ টেম্পারেচার = আরও সৃজনশীল এবং কম নির্ভরযোগ্য। |
918
- | `apiKey` | নির্বাচিত প্রোভাইডারের জন্য আপনার API কী। | `string` | নেই | `process.env.OPENAI_API_KEY` | এটি গোপন রাখতে হবে; এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করুন। |
919
- | `applicationContext` | AI-কে আরও নির্ভুল অনুবাদ তৈরিতে সাহায্য করার জন্য আপনার অ্যাপ্লিকেশন সম্পর্কে অতিরিক্ত কনটেক্সট (ডোমেইন, টার্গেট অডিয়েন্স, টোন, পরিভাষা)। | `string` | নেই | `'আমার নিজস্ব অ্যাপ্লিকেশন কনটেক্সট'` | নিয়ম যোগ করার জন্য ব্যবহৃত হতে পারে (যেমন: `"আপনাদের URL গুলো রূপান্তর করা উচিত নয়"` )। |
920
- | `baseURL` | AI API-এর জন্য বেস URL | `string` | নেই | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | স্থানীয় বা কাস্টম AI API এন্ডপয়েন্টে পয়েন্ট করতে পারে। |
921
- | `dataSerialization` | AI বৈশিষ্ট্যের জন্য ডেটা সিরিয়ালাইজেশন ফরম্যাট। | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | `'json'`: ডিফল্ট, নির্ভরযোগ্য; বেশি টোকেন ব্যবহার করে।<br/>• `'toon'`: কম টোকেন, কম স্থিতিশীল।<br/>• অতিরিক্ত প্যারামিটার হিসেবে মডেলকে কনটেক্সট পাস করা হয় (রিজনিং এফোর্ট ইত্যাদি)। |
915
+ - **LM Studio**
916
+
917
+ | ফিল্ড | বর্ণনা | টাইপ | ডিফল্ট | উদাহরণ | মন্তব্য |
918
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
919
+ | `provider` | Intlayer AI বৈশিষ্ট্যের জন্য ব্যবহৃত প্রোভাইডার। | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` | `undefined` | `'anthropic'` | বিভিন্ন প্রোভাইডারের জন্য আলাদা আলাদা API কী প্রয়োজন এবং তাদের দামও আলাদা। |
920
+ | `model` | AI বৈশিষ্ট্যের জন্য ব্যবহৃত মডেল। | `string` | নেই | `'gpt-4o-2024-11-20'` | নির্দিষ্ট মডেল প্রোভাইডারের ওপর নির্ভর করে। |
921
+ | `temperature` | AI রেসপন্সের র্যান্ডমনেস নিয়ন্ত্রণ করে। | `number` | নেই | `0.1` | উচ্চ টেম্পারেচার = আরও সৃজনশীল এবং কম নির্ভরযোগ্য। |
922
+ | `apiKey` | নির্বাচিত প্রোভাইডারের জন্য আপনার API কী। | `string` | নেই | `process.env.OPENAI_API_KEY` | এটি গোপন রাখতে হবে; এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করুন। |
923
+ | `applicationContext` | AI-কে আরও নির্ভুল অনুবাদ তৈরিতে সাহায্য করার জন্য আপনার অ্যাপ্লিকেশন সম্পর্কে অতিরিক্ত কনটেক্সট (ডোমেইন, টার্গেট অডিয়েন্স, টোন, পরিভাষা) | `string` | নেই | `'আমার নিজস্ব অ্যাপ্লিকেশন কনটেক্সট'` | নিয়ম যোগ করার জন্য ব্যবহৃত হতে পারে (যেমন: `"আপনাদের URL গুলো রূপান্তর করা উচিত নয়"` )। |
924
+ | `baseURL` | AI API-এর জন্য বেস URL। | `string` | নেই | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | স্থানীয় বা কাস্টম AI API এন্ডপয়েন্টে পয়েন্ট করতে পারে। |
925
+ | `dataSerialization` | AI বৈশিষ্ট্যের জন্য ডেটা সিরিয়ালাইজেশন ফরম্যাট। | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: ডিফল্ট, নির্ভরযোগ্য; বেশি টোকেন ব্যবহার করে।<br/>• `'toon'`: কম টোকেন, কম স্থিতিশীল।<br/>• অতিরিক্ত প্যারামিটার হিসেবে মডেলকে কনটেক্সট পাস করা হয় (রিজনিং এফোর্ট ইত্যাদি)। |
922
926
 
923
927
  ---
924
928
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-04-08
3
+ updatedAt: 2026-05-12
4
4
  title: Konfigurace (Configuration)
5
5
  description: Naučte se, jak nakonfigurovat Intlayer pro vaši aplikaci. Porozumějte různým nastavením a možnostem dostupným pro přizpůsobení Intlayer vašim potřebám.
6
6
  keywords:
@@ -14,6 +14,9 @@ slugs:
14
14
  - concept
15
15
  - configuration
16
16
  history:
17
+ - version: 8.9.4
18
+ date: 2026-05-12
19
+ changes: "Přidána podpora pro poskytovatele LM Studio"
17
20
  - version: 8.7.0
18
21
  date: 2026-04-08
19
22
  changes: "Přidány volby `prune` a `minify` do konfigurace sestavení"
@@ -350,7 +353,7 @@ const config: IntlayerConfig = {
350
353
  ai: {
351
354
  /**
352
355
  * Použitý poskytovatel AI.
353
- * Možnosti: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
356
+ * Možnosti: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
354
357
  * Výchozí: 'openai'
355
358
  */
356
359
  provider: "openai",
@@ -916,16 +919,17 @@ Intlayer podporuje několik AI poskytovatelů pro maximální flexibilitu. V sou
916
919
  - **Groq**
917
920
  - **Amazon Bedrock**
918
921
  - **Together.ai**
919
-
920
- | Pole | Popis | Typ | Výchozí | Příklad | Poznámka |
921
- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
922
- | `provider` | Poskytovatel použitý pro AI funkce Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` | `undefined` | `'anthropic'` | Různí poskytovatelé vyžadují různé API klíče a mají různé ceny. |
923
- | `model` | Model použitý pro AI funkce. | `string` | Žádný | `'gpt-4o-2024-11-20'` | Konkrétní model závisí na poskytovateli. |
924
- | `temperature` | Ovládá náhodnost odpovědí AI. | `number` | Žádný | `0.1` | Vyšší teplota = kreativnější a méně předvídatelné. |
925
- | `apiKey` | Váš API klíč pro zvoleného poskytovatele. | `string` | Žádný | `process.env.OPENAI_API_KEY` | Musí být uchováváno v tajnosti; použijte proměnné prostředí. |
926
- | `applicationContext` | Dodatečný kontext o vaší aplikaci, který pomůže AI generovat přesnější překlady (doména, cílová skupina, tón, terminologie). | `string` | Žádný | `'Můj vlastní kontext aplikace'` | Lze použít k přidání pravidel (např.: `"Neměli byste transformovat URL"`). |
927
- | `baseURL` | Základní URL pro AI API. | `string` | Žádný | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Může ukazovat na lokální nebo vlastní endpoint AI API. |
928
- | `dataSerialization` | Formát serializace dat pro AI funkce. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | `'json'`: výchozí, spolehlivé; spotřebovává více tokenů.<br/>• `'toon'`: méně tokenů, méně stabilní.<br/>• Další parametry se předávají modelu jako kontext (úsilí uvažování atd.). |
922
+ - **LM Studio**
923
+
924
+ | Pole | Popis | Typ | Výchozí | Příklad | Poznámka |
925
+ | -------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
926
+ | `provider` | Poskytovatel použitý pro AI funkce Intlayer. | `'openai'` &#124; <br/> `'anthropic'` &#124; <br/> `'mistral'` &#124; <br/> `'deepseek'` &#124; <br/> `'gemini'` &#124; <br/> `'ollama'` &#124; <br/> `'openrouter'` &#124; <br/> `'alibaba'` &#124; <br/> `'fireworks'` &#124; <br/> `'groq'` &#124; <br/> `'huggingface'` &#124; <br/> `'bedrock'` &#124; <br/> `'googleaistudio'` &#124; <br/> `'googlevertex'` &#124; <br/> `'togetherai'` &#124; <br/> `'lmstudio'` | `undefined` | `'anthropic'` | Různí poskytovatelé vyžadují různé API klíče a mají různé ceny. |
927
+ | `model` | Model použitý pro AI funkce. | `string` | Žádný | `'gpt-4o-2024-11-20'` | Konkrétní model závisí na poskytovateli. |
928
+ | `temperature` | Ovládá náhodnost odpovědí AI. | `number` | Žádný | `0.1` | Vyšší teplota = kreativnější a méně předvídatelné. |
929
+ | `apiKey` | Váš API klíč pro zvoleného poskytovatele. | `string` | Žádný | `process.env.OPENAI_API_KEY` | Musí být uchováváno v tajnosti; použijte proměnné prostředí. |
930
+ | `applicationContext` | Dodatečný kontext o vaší aplikaci, který pomůže AI generovat přesnější překlady (doména, cílová skupina, tón, terminologie). | `string` | Žádný | `'Můj vlastní kontext aplikace'` | Lze použít k přidání pravidel (např.: `"Neměli byste transformovat URL"`). |
931
+ | `baseURL` | Základní URL pro AI API. | `string` | Žádný | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Může ukazovat na lokální nebo vlastní endpoint AI API. |
932
+ | `dataSerialization` | Formát serializace dat pro AI funkce. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: výchozí, spolehlivé; spotřebovává více tokenů.<br/>• `'toon'`: méně tokenů, méně stabilní.<br/>• Další parametry se předávají modelu jako kontext (úsilí uvažování atd.). |
929
933
 
930
934
  ---
931
935
 
@@ -30,6 +30,3 @@ Detaillierte Berichte und technische Dokumentation für jedes Framework finden S
30
30
  - [**Vue Benchmark Report**](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/benchmark/vue.md)
31
31
  - [**Solid Benchmark Report**](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/benchmark/solid.md)
32
32
  - [**Svelte Benchmark Report**](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/benchmark/svelte.md)
33
- - [**Vue Benchmark Report**](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/benchmark/vue.md)
34
- - [**Solid Benchmark Report**](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/benchmark/solid.md)
35
- - [**Svelte Benchmark Report**](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/benchmark/svelte.md)
@@ -61,6 +61,13 @@ Da das Problem komplex ist, gibt es viele Lösungen – einige konzentrieren sic
61
61
 
62
62
  Intlayer versucht, über all diese Dimensionen hinweg zu optimieren.
63
63
 
64
+ ## TL;DR
65
+
66
+ - **Intlayer** & **next-translate**: Top-Empfehlungen für die Next.js-Performance, mit dem kleinsten Fußabdruck und der besten Unterstützung für statisches Rendering.
67
+ - **next-intl**: Die aktuell trendigste Option, aber schwerfällig und komplex für die Optimierung großer Anwendungen.
68
+ - **next-i18next**: Beliebt und reich an Plugins, bringt jedoch ein erhebliches Bundle-Gewicht mit sich (~3× Intlayer).
69
+ - **Vermeiden**: **gt-next** und **lingo.dev** aufgrund schwerwiegender Performance-Probleme, Vendor-Lock-in und Build-Fehlern.
70
+
64
71
  ## Testen Sie Ihre App
65
72
 
66
73
  Um diese Probleme aufzudecken, habe ich einen kostenlosen Scanner entwickelt, den Sie [hier](https://intlayer.org/i18n-seo-scanner) ausprobieren können.
@@ -99,14 +106,14 @@ Schließlich wendet `Intlayer` eine Build-Optimierung an, sodass `useIntlayer('m
99
106
  Für diesen Benchmark haben wir die folgenden Bibliotheken verglichen:
100
107
 
101
108
  - `Base App` (Ohne i18n-Bibliothek)
102
- - `next-intlayer` (v8.7.5)
109
+ - `next-intlayer` (v8.7.12)
103
110
  - `next-i18next` (v16.0.5)
104
111
  - `next-intl` (v4.9.1)
105
112
  - `@lingui/core` (v5.3.0)
106
113
  - `next-translate` (v3.1.2)
107
114
  - `next-international` (v1.3.1)
108
115
  - `@inlang/paraglide-js` (v2.15.1)
109
- - `tolgee` (v7.0.0)
116
+ - `@tolgee/react` (v7.0.0)
110
117
  - `@lingo.dev/compiler` (v0.4.0)
111
118
  - `wuchale` (v0.22.11)
112
119
  - `gt-next` (v6.16.5)
@@ -161,10 +168,10 @@ Aufgetretene Probleme:
161
168
 
162
169
  **(General Translation)** (`gt-next@6.16.5`):
163
170
 
164
- - Bei einer 110-KB-App fügt `gt-react` mehr als 440 KB hinzu.
171
+ - Bei einer 110-KB-App fügt `gt-next` mehr als 440 KB hinzu.
165
172
  - `Quota Exceeded, please upgrade your plan` bereits beim allerersten Build mit General Translation.
166
173
  - Übersetzungen werden nicht gerendert; ich erhalte den Fehler `Error: <T> used on the client-side outside of <GTProvider>`, was anscheinend ein Bug in der Bibliothek ist.
167
- - Bei der Implementierung von **gt-tanstack-start-react** stieß ich ebenfalls auf ein [Problem](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) mit der Bibliothek: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, was zum Absturz der Anwendung führte. Nach Meldung dieses Problems behob der Maintainer es innerhalb von 24 Stunden.
174
+ - Bei der Implementierung von **gt-next** stieß ich ebenfalls auf ein [Problem](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) mit der Bibliothek: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, was zum Absturz der Anwendung führte. Nach Meldung dieses Problems behob der Maintainer es innerhalb von 24 Stunden.
168
175
  - Die Bibliothek blockiert das statische Rendering von Next.js-Seiten.
169
176
 
170
177
  **(Lingo.dev)** (`@lingo.dev/compiler@0.4.0`):
@@ -186,9 +193,11 @@ Die Idee hinter `Wuchale` ist interessant, aber noch nicht reif für den Einsatz
186
193
  Persönlich missfällt mir die Notwendigkeit, JS-Dateien vor jedem Push neu zu generieren, was ein ständiges Risiko für Merge-Konflikte in PRs darstellt. Das Tool scheint zudem stärker auf Vite als auf Next.js ausgerichtet zu sein.
187
194
  Schließlich nutzt Paraglide im Vergleich zu anderen Lösungen keinen Store (z. B. React Context), um die aktuelle Sprache für das Rendering abzurufen. Für jeden geparsten Node wird die Sprache aus dem localStorage / Cookie etc. angefragt. Dies führt zur Ausführung unnötiger Logik, die die Reaktivität der Komponenten beeinträchtigt.
188
195
 
196
+ > Hinweis zu Paraglide: Die Lösung injiziert Code in Ihre Codebasis für den Import, wodurch die Metrik 'Bibliotheksgröße' im Benchmark-Bericht fast 0 ist. Codegenerierung ist eine gute Sache, da die verwendete Funktion nur die notwendige Logik enthält (Präfix-Gesamtheit vs. kein Präfix, Cookie vs. Speicher usw.). Im Vergleich dazu führt Intlayer diese Filterung durch Injektionen von Umgebungsvariablen in den Build durch, um den Bundler zu zwingen, Inhalte je nach Logik per Tree-shaking zu entfernen. Dank dessen sind Paraglide und Intlayer am Ende 6- bis 10-mal leichtere Lösungen als i18next oder next-intl.
197
+
189
198
  ### 3 — Akzeptable Lösungen
190
199
 
191
- **(Tolgee)** (`tolgee@7.0.0`):
200
+ **(Tolgee)** (`@tolgee/react@7.0.0`):
192
201
 
193
202
  `Tolgee` adressiert viele der oben genannten Probleme. Ich fand es schwieriger zu adoptieren als ähnliche Tools. Es bietet keine Typsicherheit, was es zudem erschwert, fehlende Schlüssel zur Kompilierzeit zu finden. Ich musste die Tolgee-Funktionen mit eigenen Funktionen umhüllen, um eine Erkennung fehlender Schlüssel hinzuzufügen.
194
203
 
@@ -216,7 +225,7 @@ Die Nachrichtenformate unterscheiden sich ebenfalls: `next-intl` verwendet ICU M
216
225
 
217
226
  `next-translate` ist meine Hauptempfehlung, wenn Sie eine API im `t()`-Stil bevorzugen. Es ist durch das `next-translate-plugin` elegant gelöst und lädt Namespaces über `getStaticProps` mit einem Webpack / Turbopack Loader. Es ist zudem die leichteste Option hier (~2,5 KB). Für das Namespacing ist die Definition pro Seite oder Route in der Konfiguration gut durchdacht und einfacher zu warten als die Hauptalternativen wie **next-intl** oder **next-i18next**. In Version `3.1.2` stellte ich fest, dass das statische Rendering nicht funktionierte; Next.js fiel auf dynamisches Rendering zurück.
218
227
 
219
- **(Intlayer)** (`next-intlayer@8.7.5`):
228
+ **(Intlayer)** (`next-intlayer@8.7.12`):
220
229
 
221
230
  Ich werde `next-intlayer` der Objektivität halber nicht persönlich bewerten, da es meine eigene Lösung ist.
222
231