@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-03
3
+ updatedAt: 2026-05-12
4
4
  title: Yapılandırma (Configuration)
5
5
  description: Uygulamanız için Intlayer'ı nasıl yapılandıracağınızı öğrenin. Intlayer'ı ihtiyaçlarınıza göre özelleştirmek için çeşitli ayarları ve seçenekleri anlayın.
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 sağlayıcısı için destek eklendi"
17
20
  - version: 8.7.0
18
21
  date: 2026-04-07
19
22
  changes: "Derleme yapılandırmasına `minify` ve `prune` seçenekleri eklendi"
@@ -350,7 +353,7 @@ const config: IntlayerConfig = {
350
353
  ai: {
351
354
  /**
352
355
  * Kullanılacak yapay zeka sağlayıcısı.
353
- * Seçenekler: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
356
+ * Seçenekler: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
354
357
  * Varsayılan: 'openai'
355
358
  */
356
359
  provider: "openai",
@@ -916,16 +919,17 @@ Intlayer, maksimum esneklik için birden fazla yapay zeka sağlayıcısını des
916
919
  - **Groq**
917
920
  - **Amazon Bedrock**
918
921
  - **Together.ai**
919
-
920
- | Alan | Açıklama | Tür | Varsayılan | Örnek | Not |
921
- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
922
- | `provider` | Intlayer yapay zeka özellikleri için kullanılacak sağlayıcı. | `'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'` | Farklı sağlayıcılar farklı API anahtarları gerektirir ve farklı fiyatlandırmalara sahiptir. |
923
- | `model` | Yapay zeka özellikleri için kullanılacak model. | `string` | Yok | `'gpt-4o-2024-11-20'` | Belirli model sağlayıcıya göre değişir. |
924
- | `temperature` | Yapay zeka yanıtlarının rastgeleliğini kontrol eder. | `number` | Yok | `0.1` | Daha yüksek sıcaklık = daha yaratıcı ve daha az tahmin edilebilir. |
925
- | `apiKey` | Seçilen sağlayıcı için API anahtarınız. | `string` | Yok | `process.env.OPENAI_API_KEY` | Gizli tutulmalıdır; ortam değişkenlerinde saklayın. |
926
- | `applicationContext` | Yapay zekanın daha doğru çeviriler üretmesine yardımcı olmak için uygulamanız hakkında ek bağlam (alan adı, hedef kitle, ton, terminoloji). | `string` | Yok | `'Kendi uygulama bağlamım'` | Kurallar eklemek için kullanılabilir (örneğin: `"URL'leri dönüştürmemelisiniz"`). |
927
- | `baseURL` | Yapay zeka API'si için temel URL. | `string` | Yok | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Yerel veya özel bir yapay zeka API uç noktasına işaret edebilir. |
928
- | `dataSerialization` | Yapay zeka özellikleri için veri serileştirme formatı. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | `'json'`: varsayılan, güvenilir; daha fazla token kullanır.<br/>• `'toon'`: daha az token, daha az tutarlı.<br/>• Modele bağlam olarak ek parametreler iletilir (akıl yürütme çabası vb.). |
922
+ - **LM Studio**
923
+
924
+ | Alan | Açıklama | Tür | Varsayılan | Örnek | Not |
925
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
926
+ | `provider` | Intlayer yapay zeka özellikleri için kullanılacak sağlayıcı. | `'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'` | Farklı sağlayıcılar farklı API anahtarları gerektirir ve farklı fiyatlandırmalara sahiptir. |
927
+ | `model` | Yapay zeka özellikleri için kullanılacak model. | `string` | Yok | `'gpt-4o-2024-11-20'` | Belirli model sağlayıcıya göre değişir. |
928
+ | `temperature` | Yapay zeka yanıtlarının rastgeleliğini kontrol eder. | `number` | Yok | `0.1` | Daha yüksek sıcaklık = daha yaratıcı ve daha az tahmin edilebilir. |
929
+ | `apiKey` | Seçilen sağlayıcı için API anahtarınız. | `string` | Yok | `process.env.OPENAI_API_KEY` | Gizli tutulmalıdır; ortam değişkenlerinde saklayın. |
930
+ | `applicationContext` | Yapay zekanın daha doğru çeviriler üretmesine yardımcı olmak için uygulamanız hakkında ek bağlam (alan adı, hedef kitle, ton, terminoloji). | `string` | Yok | `'Kendi uygulama bağlamım'` | Kurallar eklemek için kullanılabilir (örneğin: `"URL'leri dönüştürmemelisiniz"`). |
931
+ | `baseURL` | Yapay zeka API'si için temel URL. | `string` | Yok | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Yerel veya özel bir yapay zeka API noktasına işaret edebilir. |
932
+ | `dataSerialization` | Yapay zeka özellikleri için veri serileştirme formatı. | `'json'` &#124; <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: varsayılan, güvenilir; daha fazla token kullanır.<br/>• `'toon'`: daha az token, daha az tutarlı.<br/>• Modele bağlam olarak ek parametreler iletilir (akıl yürütme çabası vb.). |
929
933
 
930
934
  ---
931
935
 
@@ -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: İçerik Dosyası
5
5
  description: İçerik bildirim dosyalarınız için uzantıları nasıl özelleştireceğinizi öğrenin. Projenizde koşulları verimli bir şekilde uygulamak için bu dokümantasyonu takip edin.
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` içerik düğümü tipi eklendi"
@@ -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,
@@ -82,6 +86,7 @@ interface Content {
82
86
  };
83
87
  multilingualContent: string;
84
88
  quantityContent: string;
89
+ pluralContent: string;
85
90
  conditionalContent: string;
86
91
  markdownContent: never;
87
92
  htmlContent: never;
@@ -117,6 +122,10 @@ export default {
117
122
  ">5": "Birkaç araba",
118
123
  ">19": "Birçok araba",
119
124
  }),
125
+ pluralContent: plural({
126
+ one: "One car",
127
+ other: "{{count}} cars",
128
+ }),
120
129
  conditionalContent: cond({
121
130
  true: "Doğrulama etkin",
122
131
  false: "Doğrulama devre dışı",
@@ -171,6 +180,13 @@ export default {
171
180
  ">5": "Birkaç araba",
172
181
  ">19": "Birçok araba",
173
182
  },
183
+ "pluralContent": {
184
+ "nodeType": "plural",
185
+ "plural": {
186
+ "one": "One car",
187
+ "other": "{{count}} cars",
188
+ },
189
+ },
174
190
  },
175
191
  "conditionalContent": {
176
192
  "nodeType": "condition",
@@ -218,6 +234,7 @@ export default {
218
234
  - **İlkel değerler**: stringler, sayılar, booleanlar, null, undefined
219
235
  - **Tiplenmiş düğümler**: Çeviriler, koşullar, markdown gibi özel içerik türleri
220
236
  - **Fonksiyonlar**: Çalışma zamanında değerlendirilebilen dinamik içerik [bkz. Fonksiyon Getirme](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/function_fetching.md)
237
+ - **Plural Content**: See Plural Content [See Plural Content](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/plural.md)
221
238
  - **İç içe içerik**: Diğer sözlüklere referanslar
222
239
 
223
240
  #### İçerik Türleri
@@ -563,6 +580,8 @@ multilingualContent: t({
563
580
  });
564
581
  ```
565
582
 
583
+ > See [Çeviri İçeriği (`t`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/translation.md) for more information.
584
+
566
585
  ### Koşul İçeriği (`cond`)
567
586
 
568
587
  Boolean koşullara göre değişen içerik:
@@ -576,6 +595,8 @@ conditionalContent: cond({
576
595
  });
577
596
  ```
578
597
 
598
+ > See [Koşul İçeriği (`cond`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/condition.md) for more information.
599
+
579
600
  ### Numaralandırma İçeriği (`enu`)
580
601
 
581
602
  Numaralandırılmış değerlere göre değişen içerik:
@@ -590,6 +611,23 @@ statusContent: enu({
590
611
  });
591
612
  ```
592
613
 
614
+ > See [Numaralandırma İçeriği (`enu`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/enumeration.md) for more information.
615
+
616
+ ### Plural Content (`plural`)
617
+
618
+ Content that varies based on plural rules:
619
+
620
+ ```typescript
621
+ import { plural } from "intlayer";
622
+
623
+ pluralContent: plural({
624
+ one: "One car",
625
+ other: "{{count}} cars",
626
+ });
627
+ ```
628
+
629
+ > See [Plural Content Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/plural.md) for more information.
630
+
593
631
  ### Ekleme İçeriği (`insert`)
594
632
 
595
633
  Başka içeriklere eklenebilen içerik:
@@ -600,6 +638,8 @@ import { insert } from "intlayer";
600
638
  insertionContent: insert("Bu metin herhangi bir yere eklenebilir");
601
639
  ```
602
640
 
641
+ > See [Ekleme İçeriği (`insert`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/insertion.md) for more information.
642
+
603
643
  ### İç İçe İçerik (`nest`)
604
644
 
605
645
  Diğer sözlüklere referanslar:
@@ -610,6 +650,8 @@ import { nest } from "intlayer";
610
650
  nestedContent: nest("about-page");
611
651
  ```
612
652
 
653
+ > See [İç İçe İçerik (`nest`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/nesting.md) for more information.
654
+
613
655
  ### Markdown İçeriği (`md`)
614
656
 
615
657
  Markdown formatında zengin metin içeriği:
@@ -622,6 +664,8 @@ markdownContent: md(
622
664
  );
623
665
  ```
624
666
 
667
+ > See [Markdown İçeriği (`md`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/markdown.md) for more information.
668
+
625
669
  ### HTML İçeriği (`html`)
626
670
 
627
671
  Standart etiketler veya özel bileşenler kullanabilen zengin HTML içeriği:
@@ -639,6 +683,8 @@ localizedHtmlContent: t({
639
683
  });
640
684
  ```
641
685
 
686
+ > See [HTML İçeriği (`html`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/html.md) for more information.
687
+
642
688
  ### Cinsiyete Göre İçerik (`gender`)
643
689
 
644
690
  Cinsiyete göre değişen içerik:
@@ -653,6 +699,8 @@ genderContent: gender({
653
699
  });
654
700
  ```
655
701
 
702
+ > See [Cinsiyete Göre İçerik (`gender`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/gender.md) for more information.
703
+
656
704
  ### Dosya İçeriği (`file`)
657
705
 
658
706
  Harici dosyalara referanslar:
@@ -663,6 +711,8 @@ import { file } from "intlayer";
663
711
  fileContent: file("./path/to/content.txt");
664
712
  ```
665
713
 
714
+ > See [Dosya İçeriği (`file`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dictionary/file.md) for more information.
715
+
666
716
  ## İçerik Dosyaları Oluşturma
667
717
 
668
718
  ### Temel İçerik Dosyası Yapısı
@@ -160,30 +160,9 @@ syncPO({
160
160
  source: ({ key, locale }) => string, // gerekli
161
161
  location?: string, // isteğe bağlı etiket, varsayılan: "sync-po::path/to/source"
162
162
  priority?: number, // çakışma çözümü için isteğe bağlı öncelik, varsayılan: 0
163
- format?: 'icu' | 'i18next' | 'vue-i18n', // isteğe bağlı, yalnızca msgstr değerleriniz belirli bir enterpolasyon sözdizimi kullandığında gereklidir
164
163
  });
165
164
  ```
166
165
 
167
- #### `format` ('icu' | 'i18next' | 'vue-i18n')
168
-
169
- PO dosyaları her zaman Gettext Portable Object dosyalarıdır — bu sabittir. Bu seçenek yalnızca `msgstr` değerlerinin içinde kullanılan **enterpolasyon sözdizimini** açıklar, böylece Intlayer bunları ayrıştırma zamanında ( `formatDictionary` aracılığıyla) kendi biçimine dönüştürebilir ve çıktıyı yazarken geri dönüştürebilir.
170
-
171
- - `undefined` _(varsayılan)_: `msgstr` değerleri düz dizeler olarak işlenir — dönüşüm yok. Çoğu PO dosyası için bunu kullanın.
172
- - `'icu'`: `msgstr` değerleri ICU mesaj sözdizimini kullanır (örneğin `{count, plural, one {# item} other {# items}}`).
173
- - `'i18next'`: `msgstr` değerleri i18next enterpolasyon sözdizimini kullanır (örneğin `{{variable}}`).
174
- - `'vue-i18n'`: `msgstr` değerleri Vue I18n sözdizimini kullanır.
175
-
176
- > Dönüşüm, yükleme sırasında `@intlayer/chokidar`'ın `formatDictionary` işlevi tarafından uygulanır ve yazma sırasında `formatDictionaryOutput` ile tersine çevrilir. ICU çoğulları gibi karmaşık kurallar için gidiş-dönüş doğruluğu garanti edilmez.
177
-
178
- **Örnek — PO dosyaları i18next tarzı enterpolasyon içeriyor:**
179
-
180
- ```ts
181
- syncPO({
182
- source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
183
- format: "i18next",
184
- }),
185
- ```
186
-
187
166
  ### Birden fazla PO kaynağı ve öncelik
188
167
 
189
168
  Farklı PO kaynaklarını senkronize etmek için birden fazla `syncPO` eklentisi ekleyebilirsiniz. Bu, projenizde birden fazla çeviri kaynağınız veya farklı PO yapılarınız olduğunda kullanışlıdır.
@@ -61,6 +61,13 @@ history:
61
61
 
62
62
  Intlayer намагається оптимізувати всі ці параметри одночасно.
63
63
 
64
+ ## TL;DR
65
+
66
+ - **Intlayer** та **next-translate**: Найкращі варіанти для продуктивності Next.js, що забезпечують мінімальний розмір та найкращу підтримку статичного рендерингу.
67
+ - **next-intl**: Найбільш трендовий варіант на сьогодні, проте він важкий і складний в оптимізації для великих додатків.
68
+ - **next-i18next**: Популярний та багатий на плагіни, але має значну вагу бандла (~3× Intlayer).
69
+ - **Уникайте**: **gt-next** та **lingo.dev** через серйозні проблеми з продуктивністю, прив'язку до вендора (vendor lock-in) та критичні помилки при збірці.
70
+
64
71
  ## Протестуйте свій додаток
65
72
 
66
73
  Щоб виявити ці проблеми, я створив безкоштовний сканер, який ви можете спробувати [тут](https://intlayer.org/i18n-seo-scanner).
@@ -99,14 +106,14 @@ Intlayer намагається оптимізувати всі ці парам
99
106
  Для цього бенчмарку ми порівняли наступні бібліотеки:
100
107
 
101
108
  - `Base App` (Без бібліотеки 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 @@ Intlayer намагається оптимізувати всі ці парам
161
168
 
162
169
  **(General Translation)** (`gt-next@6.16.5`):
163
170
 
164
- - Для додатку розміром 110 КБ `gt-react` додає понад 440 КБ зайвих даних.
171
+ - Для додатку розміром 110 КБ `gt-next` додає понад 440 КБ зайвих даних.
165
172
  - `Quota Exceeded, please upgrade your plan` вже під час першої збірки.
166
173
  - Переклади не рендериться; отримую помилку `Error: <T> used on the client-side outside of <GTProvider>`, що схоже на баг бібліотеки.
167
- - При впровадженні **gt-tanstack-start-react** я також стикнувся з [проблемою](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) бібліотеки: помилка `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, через яку додаток падав. Після звіту про помилку розробник виправив її протягом 24 годин.
174
+ - При впровадженні **gt-next** я також стикнувся з [проблемою](https://github.com/generaltranslation/gt/issues/1210#event-24510646961) бібліотеки: помилка `does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`, через яку додаток падав. Після звіту про помилку розробник виправив її протягом 24 годин.
168
175
  - Бібліотека блокує статичний рендеринг сторінок Next.js.
169
176
 
170
177
  **(Lingo.dev)** (`@lingo.dev/compiler@0.4.0`):
@@ -186,9 +193,11 @@ Intlayer намагається оптимізувати всі ці парам
186
193
  Особисто мені не подобається необхідність регенерувати JS-файли перед кожним пушем, що створює постійний ризик конфліктів під час злиття через PR. Інструмент також здається більш орієнтованим на Vite, ніж на Next.js.
187
194
  Нарешті, порівняно з іншими рішеннями, Paraglide не використовує стор (наприклад, React context) для отримання поточної локалі для рендерингу. Для кожного обробленого вузла він запитує локаль з localStorage / cookie тощо. Це призводить до виконання непотрібної логіки, що впливає на реактивність компонентів.
188
195
 
196
+ > Примітка щодо paraglide: це рішення впроваджує код у вашу кодову базу для імпорту, в результаті чого показник 'розмір бібліотеки' у звіті бенчмарку становить майже 0. Генерація коду — це добре, оскільки функція, що використовується, міститиме лише необхідну логіку (повний префікс проти відсутності префікса, кукі проти сховища тощо). Для порівняння, Intlayer виконує цю фільтрацію через впровадження змінних середовища під час збірки, щоб змусити бандлер видалити невикористаний контент (tree-shaking) залежно від логіки. Завдяки цьому paraglide та intlayer виявляються в 6-10 разів легшими рішеннями, ніж i18next або next-intl.
197
+
189
198
  ### 3 — Прийнятні рішення
190
199
 
191
- **(Tolgee)** (`tolgee@7.0.0`):
200
+ **(Tolgee)** (`@tolgee/react@7.0.0`):
192
201
 
193
202
  `Tolgee` вирішує багато зі згаданих проблем. Проте його впровадження здалося мені складнішим, ніж у подібних інструментів. Він не забезпечує типізацію (type safety), що ускладнює виявлення відсутніх ключів під час компіляції. Мені довелося обертати функції Tolgee своїми, щоб додати перевірку відсутніх ключів.
194
203
 
@@ -216,7 +225,7 @@ Intlayer намагається оптимізувати всі ці парам
216
225
 
217
226
  `next-translate` — моя основна рекомендація, якщо вам подобається API у стилі `t()`. Він елегантно працює через `next-translate-plugin`, завантажуючи простори імен через `getStaticProps` за допомогою завантажувача Webpack / Turbopack. Це також найлегший варіант у цьому списку (~2.5 КБ). Визначення просторів імен для сторінок або маршрутів у конфігу добре продумане і простіше в підтримці, ніж у **next-intl** чи **next-i18next**. У версії `3.1.2` я помітив, що статичний рендеринг не працював; Next.js переходив до динамічного рендерингу.
218
227
 
219
- **(Intlayer)** (`next-intlayer@8.7.5`):
228
+ **(Intlayer)** (`next-intlayer@8.7.12`):
220
229
 
221
230
  Я не буду особисто оцінювати `next-intlayer` заради об’єктивності, оскільки це моє власне рішення.
222
231
 
@@ -0,0 +1,155 @@
1
+ ---
2
+ createdAt: 2026-04-20
3
+ updatedAt: 2026-04-21
4
+ title: Найкраще i18n рішення для Solid у 2026 році — Звіт про бенчмарк
5
+ description: Порівняйте бібліотеки інтернаціоналізації (i18n) для Solid, такі як solid-primitives, solid-i18next та Intlayer. Детальний звіт про продуктивність щодо розміру бандла, витоків та реактивності.
6
+ keywords:
7
+ - benchmark
8
+ - i18n
9
+ - intl
10
+ - solid
11
+ - продуктивність
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: "Ініціалізація бенчмарку"
23
+ ---
24
+
25
+ # Бібліотеки i18n для Solid — Звіт про бенчмарк 2026
26
+
27
+ Ця сторінка є звітом про бенчмарк рішень i18n на Solid.
28
+
29
+ ## Зміст
30
+
31
+ <Toc/>
32
+
33
+ ## Інтерактивний бенчмарк
34
+
35
+ <I18nBenchmark framework="vite-solid" vertical/>
36
+
37
+ ## Посилання на результати:
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
+ Повний репозиторій бенчмарку можна знайти [тут](https://github.com/intlayer-org/benchmark-i18n/tree/main).
49
+
50
+ ## Вступ
51
+
52
+ Рішення для інтернаціоналізації є одними з найважчих залежностей у додатку Solid. Основний ризик полягає у відправці непотрібного контенту: перекладів для інших сторінок та інших локалей у бандлі одного маршруту.
53
+
54
+ З ростом вашого додатка ця проблема може швидко збільшити обсяг JavaScript, що надсилається клієнту, і сповільнити навігацію.
55
+
56
+ На практиці, для найменш оптимізованих реалізацій, інтернаціоналізована сторінка може виявитися в кілька разів важчою, ніж версія без i18n.
57
+
58
+ Інший вплив стосується досвіду розробника (DX): як ви оголошуєте контент, типи, організацію просторів імен, динамічне завантаження та реактивність при зміні локалі.
59
+
60
+ ## TL;DR
61
+
62
+ - **Intlayer**: Рекомендований вибір для професійних додатків Solid, які потребують розширених функцій та оптимізації (v8.7.12).
63
+ - **@solid-primitives/i18n**: Відмінна легка альтернатива для простих проєктів, хоча їй бракує розширених функцій, таких як lazy loading.
64
+ - **solid-i18next**: Стандартний, але важкий варіант (~4.7 рази більше за Intlayer) з тими ж недоліками, що і React i18next.
65
+ - **Paraglide**: Інноваційний підхід, але складний DX та проблеми з tree-shaking у деяких конфігураціях.
66
+
67
+ ## Протестуйте свій додаток
68
+
69
+ Щоб швидко виявити проблеми з витоком i18n, я налаштував безкоштовний сканер, доступний [тут](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
+ ## Проблема
74
+
75
+ Два важелі є важливими для обмеження вартості багатомовного додатка:
76
+
77
+ - Розділіть контент за сторінками / просторами імен, щоб не завантажувати цілі словники, коли вони не потрібні.
78
+ - Завантажуйте потрібну локаль динамічно, тільки коли це необхідно.
79
+
80
+ Розуміння технічних обмежень цих підходів:
81
+
82
+ **Динамічне завантаження**
83
+
84
+ Без динамічного завантаження більшість рішень зберігають повідомлення в пам'яті з першого рендеру, що додає значне навантаження для додатків з багатьма маршрутами та локалями.
85
+
86
+ З динамічним завантаженням ви приймаєте компроміс: менше початкового JS, але іноді додатковий запит при зміні мови.
87
+
88
+ **Поділ контенту (Splitting)**
89
+
90
+ Синтаксис, побудований навколо `t('a.b.c')`, дуже зручний, але часто заохочує зберігати великі JSON-об'єкти під час виконання. Ця модель ускладнює tree-shaking, якщо бібліотека не пропонує реальної стратегії поділу на сторінки.
91
+
92
+ ## Методологія дослідження
93
+
94
+ Для цього бенчмарку ми порівняли наступні бібліотеки:
95
+
96
+ - `Base App` (Без бібліотеки 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
+ Фреймворк — `Solid` з багатомовним додатком із **10 сторінок** і **10 мов**.
103
+
104
+ Ми порівняли **чотири стратегії завантаження**:
105
+
106
+ | Стратегія | Без просторів імен (глобально) | З просторами імен (scoped) |
107
+ | :------------------------- | :------------------------------------------------------ | :---------------------------------------------------------------------------- |
108
+ | **Статичне завантаження** | **Static**: Все в пам'яті при запуску. | **Scoped static**: Розділено за просторами імен; все завантажено при запуску. |
109
+ | **Динамічне завантаження** | **Dynamic**: Завантаження за запитом для кожної локалі. | **Scoped dynamic**: Детальне завантаження за простором імен та локаллю. |
110
+
111
+ ## Підсумок стратегій
112
+
113
+ - **Static**: Просто; немає затримки мережі після початкового завантаження. Мінус: великий розмір бандла.
114
+ - **Dynamic**: Зменшує початкову вагу (lazy-loading). Ідеально, коли у вас багато локалей.
115
+ - **Scoped static**: Зберігає код організованим (логічне розділення) без складних додаткових мережевих запитів.
116
+ - **Scoped dynamic**: Найкращий підхід для _code splitting_ та продуктивності. Мінімізує пам'ять, завантажуючи лише те, що потрібно поточному перегляду та активній локалі.
117
+
118
+ ## Результати детально
119
+
120
+ ### 1 — Рішення, яких слід уникати
121
+
122
+ > В екосистемі Solid немає очевидних рішень, яких слід уникати.
123
+
124
+ ### 2 — Прийнятні рішення
125
+
126
+ **(solid-i18next)** (`solid-i18next@17.0.2`):
127
+
128
+ `solid-i18next`, ймовірно, є найпопулярнішим варіантом, оскільки він був одним із перших, хто задовольнив потреби i18n у JavaScript-додатках. Він також має широкий набір плагінів спільноти для конкретних проблем.
129
+
130
+ Пакет важкий (~14.6kb, що приблизно в 4.7 рази більше за `solid-intlayer`).
131
+
132
+ Тим не менш, він має ті ж основні недоліки, що і стеки, побудовані на `t('a.b.c')`: оптимізація можлива, але забирає багато часу, а великі проєкти ризикують поганими практиками (простори імен + динамічне завантаження + типи).
133
+
134
+ **(@solid-primitives/i18n)** (`@solid-primitives/i18n@2.2.1`):
135
+
136
+ Solid primitive надзвичайно легкий і ефективний. Я рекомендую це рішення для легких проєктів, але в ньому може швидко не вистачити функцій для професійних рішень, що включають управління кукі, перенаправлення проксі, форматери тощо.
137
+ Йому також не вистачає lazy loading та скоупінгу просторів імен для оптимізації розміру сторінки.
138
+
139
+ **(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
140
+
141
+ `Paraglide` пропонує інноваційний, добре продуманий підхід. Незважаючи на це, у цьому бенчмарку деревоподібне шейкінг (tree-shaking), яке рекламує їхня компанія, не спрацювало для моєї реалізації. Робочий процес і DX також складніші за інші варіанти.
142
+ Особисто я не прихильник того, щоб перегенерувати файли JS перед кожним пушем, що створює постійний ризик конфліктів при злитті через PR.
143
+ Нарешті, у порівнянні з іншими рішеннями, Paraglide не використовує стор (наприклад, Solid signal) для отримання поточної локалі для рендерингу контенту. Для кожного розібраного вузла він запитуватиме локаль з localStorage / cookie тощо. Це призводить до виконання непотрібної логіки, яка впливає на реактивність компонентів.
144
+
145
+ ### 3 — Рекомендації
146
+
147
+ **(Intlayer)** (`solid-intlayer@8.7.12`):
148
+
149
+ Я не буду особисто оцінювати `solid-intlayer` заради об'єктивності, оскільки це моє власне рішення.
150
+
151
+ ### Особиста примітка
152
+
153
+ Ця примітка є особистою і не впливає на результати бенчмарку. Тим не менш, у світі i18n часто можна побачити консенсус щодо патерну на кшталт `const t = useTranslation('xx')` + `<>{t('xx.xx')}</>` для перекладеного контенту.
154
+
155
+ У додатках Solid впорскування функції як `JSX.Element`, на мій погляд, є антипатерном. Це також додає зайву складність та накладні витрати на виконання JavaScript (навіть якщо це ледь помітно).