@intlayer/docs 8.9.4 → 8.9.5

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
  * उपयोग किया गया 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 अधिकतम लचीलेपन के लिए कई AI प
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 प्रतिक्रियाओं की यादृच्छिकता (randomness) को नियंत्रित करता है। | `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 प्रतिक्रियाओं की यादृच्छिकता (randomness) को नियंत्रित करता है। | `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: 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: "Add `plural` content node type"
15
18
  - version: 8.0.0
16
19
  date: 2026-01-28
17
20
  changes: "`html` कंटेंट नोड प्रकार जोड़ें"
@@ -63,6 +66,7 @@ import { type ReactNode } from "react";
63
66
  import {
64
67
  t,
65
68
  enu,
69
+ plural,
66
70
  cond,
67
71
  nest,
68
72
  md,
@@ -83,6 +87,7 @@ interface Content {
83
87
  };
84
88
  multilingualContent: string;
85
89
  quantityContent: string;
90
+ pluralContent: string;
86
91
  conditionalContent: string;
87
92
  markdownContent: never;
88
93
  htmlContent: never;
@@ -119,6 +124,10 @@ export default {
119
124
  ">5": "कुछ कारें",
120
125
  ">19": "कई कारें",
121
126
  }),
127
+ pluralContent: plural({
128
+ one: "One car",
129
+ other: "{{count}} cars",
130
+ }),
122
131
  conditionalContent: cond({
123
132
  true: "सत्यापन सक्षम है",
124
133
  false: "सत्यापन अक्षम है",
@@ -173,6 +182,13 @@ export default {
173
182
  ">5": "कुछ कारें",
174
183
  ">19": "कई कारें",
175
184
  },
185
+ "pluralContent": {
186
+ "nodeType": "plural",
187
+ "plural": {
188
+ "one": "One car",
189
+ "other": "{{count}} cars",
190
+ },
191
+ },
176
192
  },
177
193
  "conditionalContent": {
178
194
  "nodeType": "condition",
@@ -220,6 +236,7 @@ export default {
220
236
  - **प्रिमिटिव मान**: स्ट्रिंग्स, संख्याएँ, बूलियन, नल, अपरिभाषित
221
237
  - **टाइप्ड नोड्स**: विशेष सामग्री प्रकार जैसे अनुवाद, शर्तें, मार्कडाउन, आदि
222
238
  - **फंक्शन्स**: गतिशील सामग्री जिसे रनटाइम पर मूल्यांकन किया जा सकता है [देखें फंक्शन फेचिंग](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/function_fetching.md)
239
+ - **Plural Content**: See Plural Content [See Plural Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/plural.md)
223
240
  - **नेस्टेड कंटेंट**: अन्य शब्दकोशों के संदर्भ
224
241
 
225
242
  #### कंटेंट प्रकार
@@ -545,6 +562,8 @@ multilingualContent: t({
545
562
  });
546
563
  ```
547
564
 
565
+ > See [अनुवाद सामग्री (`t`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/translation.md) for more information.
566
+
548
567
  ### शर्त सामग्री (`cond`)
549
568
 
550
569
  सामग्री जो बूलियन शर्तों के आधार पर बदलती है:
@@ -558,6 +577,8 @@ conditionalContent: cond({
558
577
  });
559
578
  ```
560
579
 
580
+ > See [शर्त सामग्री (`cond`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/condition.md) for more information.
581
+
561
582
  ### गणना सामग्री (`enu`)
562
583
 
563
584
  सूचीबद्ध मानों के आधार पर भिन्न सामग्री:
@@ -572,6 +593,23 @@ statusContent: enu({
572
593
  });
573
594
  ```
574
595
 
596
+ > See [गणना सामग्री (`enu`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/enumeration.md) for more information.
597
+
598
+ ### Plural Content (`plural`)
599
+
600
+ Content that varies based on plural rules:
601
+
602
+ ```typescript
603
+ import { plural } from "intlayer";
604
+
605
+ pluralContent: plural({
606
+ one: "One car",
607
+ other: "{{count}} cars",
608
+ });
609
+ ```
610
+
611
+ > See [Plural Content Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/plural.md) for more information.
612
+
575
613
  ### सम्मिलन सामग्री (`insert`)
576
614
 
577
615
  सामग्री जिसे अन्य सामग्री में सम्मिलित किया जा सकता है:
@@ -582,6 +620,8 @@ import { insert } from "intlayer";
582
620
  insertionContent: insert("यह पाठ कहीं भी सम्मिलित किया जा सकता है");
583
621
  ```
584
622
 
623
+ > See [सम्मिलन सामग्री (`insert`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/insertion.md) for more information.
624
+
585
625
  ### नेस्टेड सामग्री (`nest`)
586
626
 
587
627
  अन्य शब्दकोशों के संदर्भ:
@@ -592,6 +632,8 @@ import { nest } from "intlayer";
592
632
  nestedContent: nest("about-page");
593
633
  ```
594
634
 
635
+ > See [नेस्टेड सामग्री (`nest`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/nesting.md) for more information.
636
+
595
637
  ### मार्कडाउन सामग्री (`md`)
596
638
 
597
639
  मार्कडाउन प्रारूप में समृद्ध पाठ सामग्री:
@@ -604,6 +646,8 @@ markdownContent: md(
604
646
  );
605
647
  ```
606
648
 
649
+ > See [मार्कडाउन सामग्री (`md`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/markdown.md) for more information.
650
+
607
651
  ### HTML सामग्री (`html`)
608
652
 
609
653
  समृद्ध HTML सामग्री जो मानक टैग या कस्टम कंपोनेंट्स का उपयोग कर सकती है:
@@ -621,6 +665,8 @@ localizedHtmlContent: t({
621
665
  });
622
666
  ```
623
667
 
668
+ > See [HTML सामग्री (`html`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/html.md) for more information.
669
+
624
670
  ### जेंडर सामग्री (`gender`)
625
671
 
626
672
  लिंग के आधार पर भिन्न सामग्री:
@@ -635,6 +681,8 @@ genderContent: gender({
635
681
  });
636
682
  ```
637
683
 
684
+ > See [जेंडर सामग्री (`gender`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/gender.md) for more information.
685
+
638
686
  ### फ़ाइल सामग्री (`file`)
639
687
 
640
688
  बाहरी फ़ाइलों के संदर्भ:
@@ -645,6 +693,8 @@ import { file } from "intlayer";
645
693
  fileContent: file("./path/to/content.txt");
646
694
  ```
647
695
 
696
+ > See [फ़ाइल सामग्री (`file`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dictionary/file.md) for more information.
697
+
648
698
  ## सामग्री फ़ाइलें बनाना
649
699
 
650
700
  ### बुनियादी सामग्री फ़ाइल संरचना
@@ -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
- > रूपांतरण लोड होने पर `@intlayer/chokidar` के `formatDictionary` द्वारा लागू किया जाता है, और लिखते समय `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
  आप विभिन्न PO स्रोतों को सिंक्रनाइज़ करने के लिए एकाधिक `syncPO` प्लगइन्स जोड़ सकते हैं। यह तब उपयोगी होता है जब आपके प्रोजेक्ट में कई अनुवाद स्रोत या अलग-अलग PO संरचनाएं हों।
@@ -30,6 +30,3 @@ Laporan terperinci dan dokumentasi teknis untuk setiap framework tersedia di baw
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 @@ Karena masalah ini sulit, banyak solusi tersedia—beberapa berfokus pada DX (De
61
61
 
62
62
  Intlayer mencoba mengoptimalkan di semua dimensi ini.
63
63
 
64
+ ## TL;DR
65
+
66
+ - **Intlayer** & **next-translate**: Pilihan terbaik untuk performa Next.js, menawarkan footprint terkecil dan dukungan render statis terbaik.
67
+ - **next-intl**: Opsi paling tren, tetapi berat dan kompleks untuk dioptimalkan bagi aplikasi besar.
68
+ - **next-i18next**: Populer dan kaya plugin, tetapi membawa beban bundle yang signifikan (~3× Intlayer).
69
+ - **Hindari**: **gt-next** dan **lingo.dev** karena masalah performa yang parah, ketergantungan pada vendor (vendor lock-in), dan bug yang merusak build.
70
+
64
71
  ## Uji aplikasi Anda
65
72
 
66
73
  Untuk mengungkap masalah ini, saya membangun pemindai gratis yang dapat Anda coba [di sini](https://intlayer.org/i18n-seo-scanner).
@@ -99,14 +106,14 @@ Terakhir, `Intlayer` menerapkan optimisasi waktu build sehingga `useIntlayer('ku
99
106
  Untuk benchmark ini, kami membandingkan library berikut:
100
107
 
101
108
  - `Base App` (Tanpa library i18n)
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 @@ Masalah yang ditemui:
161
168
 
162
169
  **(General Translation)** (`gt-next@6.16.5`):
163
170
 
164
- - Untuk aplikasi 110kb, `gt-react` menambahkan lebih dari 440kb ekstra.
171
+ - Untuk aplikasi 110kb, `gt-next` menambahkan lebih dari 440kb ekstra.
165
172
  - `Quota Exceeded, please upgrade your plan` pada build pertama dengan General Translation.
166
173
  - Terjemahan tidak dirender; saya mendapatkan error `Error: <T> used on the client-side outside of <GTProvider>`, yang tampaknya merupakan bug pada library.
167
- - Saat menerapkan **gt-tanstack-start-react**, saya juga menemukan [masalah](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) dengan library tersebut: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, yang membuat aplikasi rusak. Setelah melaporkan masalah ini, pengelola memperbaikinya dalam waktu 24 jam.
174
+ - Saat menerapkan **gt-next**, saya juga menemukan [masalah](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) dengan library tersebut: `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, yang membuat aplikasi rusak. Setelah melaporkan masalah ini, pengelola memperbaikinya dalam waktu 24 jam.
168
175
  - Library ini memblokir rendering statis halaman Next.js.
169
176
 
170
177
  **(Lingo.dev)** (`@lingo.dev/compiler@0.4.0`):
@@ -186,9 +193,11 @@ Ide di balik `Wuchale` menarik tetapi belum layak. Saya menemui masalah reaktivi
186
193
  Secara pribadi saya tidak suka harus membuat ulang file JS sebelum setiap push, yang menciptakan risiko konflik merge konstan melalui PR. Alat ini juga tampak lebih fokus pada Vite daripada Next.js.
187
194
  Terakhir, dibandingkan dengan solusi lain, Paraglide tidak menggunakan store (misalnya React context) untuk mengambil lokal saat ini untuk merender konten. Untuk setiap node yang di-parsing, ia akan meminta lokal dari localStorage / cookie dst. Ini mengarah pada eksekusi logika yang tidak perlu yang berdampak pada reaktivitas komponen.
188
195
 
196
+ > Catatan tentang paraglide: solusi ini menyuntikkan kode ke dalam basis kode Anda untuk impor, akibatnya metrik 'ukuran lib' dalam laporan benchmark hampir 0. Pembuatan kode (code generation) adalah hal yang baik, karena fungsi yang digunakan hanya akan mencakup logika yang diperlukan (semua awalan vs tanpa awalan, cookie vs penyimpanan, dll.). Sebagai perbandingan, Intlayer melakukan pemfilteran ini melalui injeksi variabel lingkungan dalam build untuk memaksa bundler melakukan tree-shake pada konten tergantung pada logikanya. Berkat ini, paraglide dan intlayer berakhir menjadi solusi yang 6 hingga 10 kali lebih ringan daripada i18next atau next-intl.
197
+
189
198
  ### 3 — Solusi yang dapat diterima
190
199
 
191
- **(Tolgee)** (`tolgee@7.0.0`):
200
+ **(Tolgee)** (`@tolgee/react@7.0.0`):
192
201
 
193
202
  `Tolgee` mengatasi banyak masalah yang disebutkan sebelumnya. Saya merasa lebih sulit untuk mengadopsinya daripada alat serupa. Ia tidak memberikan type safety, yang juga membuat pendeteksian kunci yang hilang saat compile time lebih sulit. Saya harus membungkus fungsi Tolgee dengan fungsi saya sendiri untuk menambahkan deteksi kunci yang hilang.
194
203
 
@@ -216,7 +225,7 @@ Format pesan juga berbeda: `next-intl` menggunakan ICU MessageFormat, sementara
216
225
 
217
226
  `next-translate` adalah rekomendasi utama saya jika Anda menyukai API bergaya `t()`. Ini elegan melalui `next-translate-plugin`, memuat namespace melalui `getStaticProps` dengan loader Webpack / Turbopack. Ini juga merupakan opsi teringan di sini (~2,5kb). Untuk namespacing, mendefinisikan namespace per halaman atau rute di config dipikirkan dengan matang dan lebih mudah dipelihara daripada alternatif utama seperti **next-intl** atau **next-i18next**. Di versi `3.1.2`, saya mencatat bahwa rendering statis tidak berfungsi; Next.js kembali ke rendering dinamis.
218
227
 
219
- **(Intlayer)** (`next-intlayer@8.7.5`):
228
+ **(Intlayer)** (`next-intlayer@8.7.12`):
220
229
 
221
230
  Saya tidak akan secara pribadi menilai `next-intlayer` demi objektivitas, karena itu adalah solusi saya sendiri.
222
231
 
@@ -0,0 +1,155 @@
1
+ ---
2
+ createdAt: 2026-04-20
3
+ updatedAt: 2026-04-21
4
+ title: Solusi i18n Terbaik untuk Solid di Tahun 2026 - Laporan Benchmark
5
+ description: Bandingkan pustaka internasionalisasi (i18n) Solid seperti solid-primitives, solid-i18next, dan Intlayer. Laporan performa mendetail tentang ukuran bundle, kebocoran, dan reaktivitas.
6
+ keywords:
7
+ - benchmark
8
+ - i18n
9
+ - intl
10
+ - solid
11
+ - performa
12
+ - intlayer
13
+ slugs:
14
+ - doc
15
+ - benchmark
16
+ - solid
17
+ author: Aymeric PINEAU
18
+ applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-solid-template
19
+ history:
20
+ - version: 8.7.12
21
+ date: 2026-01-06
22
+ changes: "Inisialisasi benchmark"
23
+ ---
24
+
25
+ # Pustaka i18n Solid — Laporan Benchmark 2026
26
+
27
+ Halaman ini adalah laporan benchmark untuk solusi i18n pada Solid.
28
+
29
+ ## Daftar Isi
30
+
31
+ <Toc/>
32
+
33
+ ## Benchmark Interaktif
34
+
35
+ <I18nBenchmark framework="vite-solid" vertical/>
36
+
37
+ ## Referensi hasil:
38
+
39
+ <iframe
40
+ src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-vite_solid.md"
41
+ width="100%"
42
+ height="600px"
43
+ style="border:none;">
44
+ </iframe>
45
+
46
+ > https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-vite_solid.md
47
+
48
+ Lihat repositori benchmark lengkap [di sini](https://github.com/intlayer-org/benchmark-i18n/tree/main).
49
+
50
+ ## Pendahuluan
51
+
52
+ Solusi internasionalisasi adalah salah satu dependensi terberat dalam aplikasi Solid. Risiko utamanya adalah mengirimkan konten yang tidak perlu: terjemahan untuk halaman lain dan bahasa lain dalam satu bundle rute.
53
+
54
+ Seiring berkembangnya aplikasi Anda, masalah tersebut dapat dengan cepat membengkak JavaScript yang dikirim ke klien dan memperlambat navigasi.
55
+
56
+ Dalam praktiknya, untuk implementasi yang paling tidak dioptimalkan, halaman yang diinternasionalisasi bisa berakhir beberapa kali lebih berat daripada versi tanpa i18n.
57
+
58
+ Dampak lainnya adalah pada pengalaman pengembang (DX): bagaimana Anda mendeklarasikan konten, tipe data, organisasi namespace, pemuatan dinamis, dan reaktivitas saat bahasa berubah.
59
+
60
+ ## TL;DR
61
+
62
+ - **Intlayer**: Pilihan yang direkomendasikan untuk aplikasi Solid profesional yang membutuhkan fitur canggih dan optimasi (v8.7.12).
63
+ - **@solid-primitives/i18n**: Alternatif ringan yang sangat baik untuk proyek sederhana, meskipun tidak memiliki fitur canggih seperti lazy loading.
64
+ - **solid-i18next**: Opsi standar tetapi berat (~4.7× Intlayer) dengan kelemahan yang sama seperti React i18next.
65
+ - **Paraglide**: Pendekatan inovatif tetapi DX yang kompleks dan masalah tree-shaking di beberapa pengaturan.
66
+
67
+ ## Uji aplikasi Anda
68
+
69
+ Untuk mendeteksi masalah kebocoran i18n dengan cepat, saya menyiapkan pemindai gratis yang tersedia [di sini](https://intlayer.org/i18n-seo-scanner).
70
+
71
+ <iframe src="https://intlayer.org/i18n-seo-scanner" width="100%" height="600px" style="border:none;"/>
72
+
73
+ ## Masalahnya
74
+
75
+ Dua tuas sangat penting untuk membatasi biaya aplikasi multibahasa:
76
+
77
+ - Pisahkan konten berdasarkan halaman / namespace agar Anda tidak memuat seluruh kamus saat tidak dibutuhkan.
78
+ - Muat bahasa yang tepat secara dinamis, hanya saat dibutuhkan.
79
+
80
+ Memahami batasan teknis dari pendekatan ini:
81
+
82
+ **Pemuatan dinamis**
83
+
84
+ Tanpa pemuatan dinamis, sebagian besar solusi menyimpan pesan dalam memori sejak render pertama, yang menambah overhead signifikan untuk aplikasi dengan banyak rute dan bahasa.
85
+
86
+ Dengan pemuatan dinamis, Anda menerima kompromi: JS awal yang lebih sedikit, tetapi terkadang permintaan ekstra saat mengganti bahasa.
87
+
88
+ **Pemisahan konten (Splitting)**
89
+
90
+ Sintaks yang dibangun di sekitar `t('a.b.c')` sangat nyaman tetapi sering kali mendorong penyimpanan objek JSON besar saat runtime. Model tersebut membuat tree-shaking sulit kecuali pustaka menawarkan strategi pemisahan per halaman yang nyata.
91
+
92
+ ## Metodologi Penelitian
93
+
94
+ Untuk benchmark ini, kami membandingkan pustaka berikut:
95
+
96
+ - `Base App` (Tanpa pustaka i18n)
97
+ - `solid-intlayer` (v8.7.12)
98
+ - `@solid-primitives/i18n` (v2.2.1)
99
+ - `solid-i18next` (v17.0.2)
100
+ - `@inlang/paraglide-js` (v2.17.0)
101
+
102
+ Framework yang digunakan adalah `Solid` dengan aplikasi multibahasa yang terdiri dari **10 halaman** dan **10 bahasa**.
103
+
104
+ Kami membandingkan **empat strategi pemuatan**:
105
+
106
+ | Strategia | Tanpa namespace (global) | Dengan namespace (scoped) |
107
+ | :------------------- | :-------------------------------------------------- | :------------------------------------------------------------------------------- |
108
+ | **Pemuatan statis** | **Static**: Segalanya di memori saat startup. | **Scoped static**: Dipisah berdasarkan namespace; segalanya dimuat saat startup. |
109
+ | **Pemuatan dinamis** | **Dynamic**: Pemuatan sesuai permintaan per bahasa. | **Scoped dynamic**: Pemuatan granular per namespace dan bahasa. |
110
+
111
+ ## Ringkasan strategi
112
+
113
+ - **Static**: Sederhana; tidak ada latensi jaringan setelah pemuatan awal. Kekurangan: ukuran bundle besar.
114
+ - **Dynamic**: Mengurangi beban awal (lazy-loading). Ideal bila Anda memiliki banyak bahasa.
115
+ - **Scoped static**: Menjaga kode tetap teratur (pemisahan logis) tanpa permintaan jaringan ekstra yang kompleks.
116
+ - **Scoped dynamic**: Pendekatan terbaik untuk _code splitting_ dan performa. Meminimalkan memori dengan hanya memuat apa yang dibutuhkan oleh tampilan saat ini dan bahasa yang aktif.
117
+
118
+ ## Hasil secara mendetail
119
+
120
+ ### 1 — Solusi yang harus dihindari
121
+
122
+ > Tidak ada solusi yang jelas untuk dihindari dalam ekosistem Solid.
123
+
124
+ ### 2 — Solusi yang dapat diterima
125
+
126
+ **(solid-i18next)** (`solid-i18next@17.0.2`):
127
+
128
+ `solid-i18next` mungkin merupakan opsi yang paling populer karena merupakan salah satu yang pertama memenuhi kebutuhan i18n aplikasi JavaScript. Ia juga memiliki serangkaian plugin komunitas yang luas untuk masalah tertentu.
129
+
130
+ Paketnya berat (~14.6kb, yang mana sekitar 4.7× `solid-intlayer`).
131
+
132
+ Namun, ia memiliki kelemahan utama yang sama dengan stack yang dibangun di atas `t('a.b.c')`: optimasi dimungkinkan tetapi sangat memakan waktu, dan proyek besar berisiko terkena praktik buruk (namespace + pemuatan dinamis + tipe).
133
+
134
+ **(@solid-primitives/i18n)** (`@solid-primitives/i18n@2.2.1`):
135
+
136
+ Solid primitive sangat ringan dan efisien. Saya merekomendasikan solusi tersebut untuk proyek ringan, tetapi fitur-fiturnya mungkin cepat terasa kurang untuk solusi profesional yang mencakup manajemen cookie, pengalihan proxy, formatter, dll.
137
+ Ia juga tidak memiliki lazy loading dan scoping namespace untuk optimasi ukuran halaman.
138
+
139
+ **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
140
+
141
+ `Paraglide` menawarkan pendekatan yang inovatif dan dipikirkan dengan matang. Meskipun demikian, dalam benchmark ini, tree-shaking yang diiklankan perusahaan mereka tidak berhasil untuk implementasi saya. Alur kerja dan DX juga lebih kompleks daripada opsi lainnya.
142
+ Secara pribadi saya tidak suka harus meregenerasi file JS sebelum setiap push, yang menciptakan risiko konflik merge yang konstan melalui PR.
143
+ Terakhir, dibandingkan dengan solusi lain, Paraglide tidak menggunakan store (misalnya Solid signal) untuk mengambil locale saat ini guna merender konten. Untuk setiap node yang di-parse, ia akan meminta locale dari localStorage / cookie dll. Hal ini menyebabkan eksekusi logika yang tidak perlu yang berdampak pada reaktivitas komponen.
144
+
145
+ ### 3 — Rekomendasi
146
+
147
+ **(Intlayer)** (`solid-intlayer@8.7.12`):
148
+
149
+ Saya tidak akan menilai `solid-intlayer` secara pribadi demi objektivitas, karena ini adalah solusi saya sendiri.
150
+
151
+ ### Catatan pribadi
152
+
153
+ Catatan ini bersifat pribadi dan tidak memengaruhi hasil benchmark. Namun, di dunia i18n Anda sering melihat konsensus seputar pola seperti `const t = useTranslation('xx')` + `<>{t('xx.xx')}</>` untuk konten terjemahan.
154
+
155
+ Dalam aplikasi Solid, menginjeksi fungsi sebagai `JSX.Element` menurut pandangan saya adalah sebuah anti-pattern. Hal ini juga menambah kompleksitas yang dapat dihindari dan overhead eksekusi JavaScript (meskipun hampir tidak terlihat).