@intlayer/docs 8.9.4-canary.0 → 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 (207) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +20 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +20 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +1 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/benchmark/index.md +0 -3
  8. package/docs/ar/benchmark/nextjs.md +15 -6
  9. package/docs/ar/benchmark/solid.md +155 -0
  10. package/docs/ar/benchmark/svelte.md +148 -0
  11. package/docs/ar/benchmark/tanstack.md +12 -3
  12. package/docs/ar/benchmark/vue.md +160 -0
  13. package/docs/ar/configuration.md +16 -12
  14. package/docs/ar/dictionary/content_file.md +51 -1
  15. package/docs/ar/mcp_server.md +30 -17
  16. package/docs/ar/plugins/sync-po.md +333 -0
  17. package/docs/bn/configuration.md +16 -12
  18. package/docs/cs/configuration.md +16 -12
  19. package/docs/de/benchmark/index.md +0 -3
  20. package/docs/de/benchmark/nextjs.md +15 -6
  21. package/docs/de/benchmark/solid.md +155 -0
  22. package/docs/de/benchmark/svelte.md +148 -0
  23. package/docs/de/benchmark/tanstack.md +12 -3
  24. package/docs/de/benchmark/vue.md +160 -0
  25. package/docs/de/configuration.md +16 -12
  26. package/docs/de/dictionary/content_file.md +52 -2
  27. package/docs/de/mcp_server.md +29 -16
  28. package/docs/de/plugins/sync-po.md +332 -0
  29. package/docs/en/benchmark/nextjs.md +11 -2
  30. package/docs/en/benchmark/solid.md +22 -4
  31. package/docs/en/benchmark/svelte.md +17 -5
  32. package/docs/en/benchmark/tanstack.md +18 -3
  33. package/docs/en/benchmark/vue.md +17 -11
  34. package/docs/en/configuration.md +16 -13
  35. package/docs/en/dictionary/content_file.md +51 -1
  36. package/docs/en/mcp_server.md +31 -18
  37. package/docs/en/plugins/sync-po.md +333 -0
  38. package/docs/en-GB/benchmark/index.md +0 -3
  39. package/docs/en-GB/benchmark/nextjs.md +15 -6
  40. package/docs/en-GB/benchmark/solid.md +155 -0
  41. package/docs/en-GB/benchmark/svelte.md +148 -0
  42. package/docs/en-GB/benchmark/tanstack.md +12 -3
  43. package/docs/en-GB/benchmark/vue.md +160 -0
  44. package/docs/en-GB/configuration.md +15 -11
  45. package/docs/en-GB/dictionary/content_file.md +51 -1
  46. package/docs/en-GB/mcp_server.md +31 -18
  47. package/docs/en-GB/plugins/sync-po.md +333 -0
  48. package/docs/es/benchmark/index.md +0 -3
  49. package/docs/es/benchmark/nextjs.md +15 -6
  50. package/docs/es/benchmark/solid.md +155 -0
  51. package/docs/es/benchmark/svelte.md +148 -0
  52. package/docs/es/benchmark/tanstack.md +12 -3
  53. package/docs/es/benchmark/vue.md +160 -0
  54. package/docs/es/configuration.md +16 -12
  55. package/docs/es/dictionary/content_file.md +51 -1
  56. package/docs/es/mcp_server.md +30 -17
  57. package/docs/es/plugins/sync-po.md +333 -0
  58. package/docs/fr/benchmark/index.md +0 -3
  59. package/docs/fr/benchmark/nextjs.md +15 -6
  60. package/docs/fr/benchmark/solid.md +155 -0
  61. package/docs/fr/benchmark/svelte.md +148 -0
  62. package/docs/fr/benchmark/tanstack.md +12 -3
  63. package/docs/fr/benchmark/vue.md +160 -0
  64. package/docs/fr/configuration.md +16 -12
  65. package/docs/fr/dictionary/content_file.md +51 -1
  66. package/docs/fr/mcp_server.md +30 -17
  67. package/docs/fr/plugins/sync-po.md +333 -0
  68. package/docs/hi/benchmark/nextjs.md +15 -6
  69. package/docs/hi/benchmark/solid.md +155 -0
  70. package/docs/hi/benchmark/svelte.md +148 -0
  71. package/docs/hi/benchmark/tanstack.md +12 -3
  72. package/docs/hi/benchmark/vue.md +160 -0
  73. package/docs/hi/configuration.md +16 -12
  74. package/docs/hi/dictionary/content_file.md +51 -1
  75. package/docs/hi/mcp_server.md +31 -18
  76. package/docs/hi/plugins/sync-po.md +333 -0
  77. package/docs/id/benchmark/index.md +0 -3
  78. package/docs/id/benchmark/nextjs.md +15 -6
  79. package/docs/id/benchmark/solid.md +155 -0
  80. package/docs/id/benchmark/svelte.md +148 -0
  81. package/docs/id/benchmark/tanstack.md +12 -3
  82. package/docs/id/benchmark/vue.md +160 -0
  83. package/docs/id/configuration.md +16 -12
  84. package/docs/id/dictionary/content_file.md +51 -1
  85. package/docs/id/mcp_server.md +30 -17
  86. package/docs/id/plugins/sync-po.md +333 -0
  87. package/docs/it/benchmark/index.md +1 -4
  88. package/docs/it/benchmark/nextjs.md +15 -6
  89. package/docs/it/benchmark/solid.md +155 -0
  90. package/docs/it/benchmark/svelte.md +148 -0
  91. package/docs/it/benchmark/tanstack.md +12 -3
  92. package/docs/it/benchmark/vue.md +160 -0
  93. package/docs/it/configuration.md +16 -12
  94. package/docs/it/dictionary/content_file.md +51 -1
  95. package/docs/it/mcp_server.md +30 -17
  96. package/docs/it/plugins/sync-po.md +333 -0
  97. package/docs/ja/benchmark/index.md +5 -5
  98. package/docs/ja/benchmark/nextjs.md +15 -6
  99. package/docs/ja/benchmark/solid.md +155 -0
  100. package/docs/ja/benchmark/svelte.md +148 -0
  101. package/docs/ja/benchmark/tanstack.md +12 -3
  102. package/docs/ja/benchmark/vue.md +160 -0
  103. package/docs/ja/configuration.md +16 -12
  104. package/docs/ja/dictionary/content_file.md +50 -2
  105. package/docs/ja/intlayer_with_nextjs_no_locale_path.md +4 -3
  106. package/docs/ja/mcp_server.md +29 -16
  107. package/docs/ja/plugins/sync-po.md +333 -0
  108. package/docs/ko/benchmark/nextjs.md +15 -6
  109. package/docs/ko/benchmark/solid.md +155 -0
  110. package/docs/ko/benchmark/svelte.md +148 -0
  111. package/docs/ko/benchmark/tanstack.md +12 -3
  112. package/docs/ko/benchmark/vue.md +160 -0
  113. package/docs/ko/configuration.md +16 -12
  114. package/docs/ko/dictionary/content_file.md +51 -1
  115. package/docs/ko/intlayer_with_nextjs_no_locale_path.md +3 -2
  116. package/docs/ko/mcp_server.md +31 -18
  117. package/docs/ko/plugins/sync-po.md +333 -0
  118. package/docs/nl/configuration.md +16 -12
  119. package/docs/pl/benchmark/index.md +0 -3
  120. package/docs/pl/benchmark/nextjs.md +15 -6
  121. package/docs/pl/benchmark/solid.md +155 -0
  122. package/docs/pl/benchmark/svelte.md +148 -0
  123. package/docs/pl/benchmark/tanstack.md +12 -3
  124. package/docs/pl/benchmark/vue.md +160 -0
  125. package/docs/pl/configuration.md +16 -12
  126. package/docs/pl/dictionary/content_file.md +51 -1
  127. package/docs/pl/mcp_server.md +30 -17
  128. package/docs/pl/plugins/sync-po.md +333 -0
  129. package/docs/pt/benchmark/index.md +0 -3
  130. package/docs/pt/benchmark/nextjs.md +16 -7
  131. package/docs/pt/benchmark/solid.md +155 -0
  132. package/docs/pt/benchmark/svelte.md +148 -0
  133. package/docs/pt/benchmark/tanstack.md +13 -4
  134. package/docs/pt/benchmark/vue.md +160 -0
  135. package/docs/pt/configuration.md +16 -12
  136. package/docs/pt/dictionary/content_file.md +51 -1
  137. package/docs/pt/mcp_server.md +30 -17
  138. package/docs/pt/plugins/sync-po.md +333 -0
  139. package/docs/ru/benchmark/nextjs.md +15 -6
  140. package/docs/ru/benchmark/solid.md +155 -0
  141. package/docs/ru/benchmark/svelte.md +148 -0
  142. package/docs/ru/benchmark/tanstack.md +12 -3
  143. package/docs/ru/benchmark/vue.md +160 -0
  144. package/docs/ru/configuration.md +16 -12
  145. package/docs/ru/dictionary/content_file.md +52 -2
  146. package/docs/ru/mcp_server.md +30 -17
  147. package/docs/ru/plugins/sync-po.md +333 -0
  148. package/docs/tr/benchmark/index.md +0 -3
  149. package/docs/tr/benchmark/nextjs.md +15 -6
  150. package/docs/tr/benchmark/solid.md +155 -0
  151. package/docs/tr/benchmark/svelte.md +148 -0
  152. package/docs/tr/benchmark/tanstack.md +12 -3
  153. package/docs/tr/benchmark/vue.md +160 -0
  154. package/docs/tr/configuration.md +16 -12
  155. package/docs/tr/dictionary/content_file.md +51 -1
  156. package/docs/tr/mcp_server.md +31 -18
  157. package/docs/tr/plugins/sync-po.md +333 -0
  158. package/docs/uk/benchmark/nextjs.md +15 -6
  159. package/docs/uk/benchmark/solid.md +155 -0
  160. package/docs/uk/benchmark/svelte.md +148 -0
  161. package/docs/uk/benchmark/tanstack.md +12 -3
  162. package/docs/uk/benchmark/vue.md +160 -0
  163. package/docs/uk/configuration.md +16 -12
  164. package/docs/uk/dictionary/content_file.md +51 -1
  165. package/docs/uk/mcp_server.md +29 -16
  166. package/docs/uk/plugins/sync-po.md +333 -0
  167. package/docs/ur/configuration.md +16 -12
  168. package/docs/vi/benchmark/index.md +0 -3
  169. package/docs/vi/benchmark/nextjs.md +15 -6
  170. package/docs/vi/benchmark/solid.md +155 -0
  171. package/docs/vi/benchmark/svelte.md +148 -0
  172. package/docs/vi/benchmark/tanstack.md +12 -3
  173. package/docs/vi/benchmark/vue.md +160 -0
  174. package/docs/vi/configuration.md +16 -12
  175. package/docs/vi/dictionary/content_file.md +51 -1
  176. package/docs/vi/intlayer_with_nextjs_15.md +10 -57
  177. package/docs/vi/mcp_server.md +30 -17
  178. package/docs/vi/plugins/sync-po.md +333 -0
  179. package/docs/zh/benchmark/nextjs.md +15 -6
  180. package/docs/zh/benchmark/solid.md +155 -0
  181. package/docs/zh/benchmark/svelte.md +148 -0
  182. package/docs/zh/benchmark/tanstack.md +12 -3
  183. package/docs/zh/benchmark/vue.md +160 -0
  184. package/docs/zh/configuration.md +16 -12
  185. package/docs/zh/dictionary/content_file.md +51 -3
  186. package/docs/zh/mcp_server.md +31 -18
  187. package/docs/zh/plugins/sync-po.md +333 -0
  188. package/frequent_questions/ar/intlayerNode.md +3 -3
  189. package/frequent_questions/de/intlayerNode.md +3 -3
  190. package/frequent_questions/en/intlayerNode.md +3 -3
  191. package/frequent_questions/en-GB/intlayerNode.md +3 -3
  192. package/frequent_questions/es/intlayerNode.md +3 -3
  193. package/frequent_questions/fr/intlayerNode.md +3 -3
  194. package/frequent_questions/hi/intlayerNode.md +3 -3
  195. package/frequent_questions/id/intlayerNode.md +3 -3
  196. package/frequent_questions/it/intlayerNode.md +3 -3
  197. package/frequent_questions/ja/intlayerNode.md +3 -3
  198. package/frequent_questions/ko/intlayerNode.md +3 -3
  199. package/frequent_questions/pl/intlayerNode.md +3 -3
  200. package/frequent_questions/pt/intlayerNode.md +3 -3
  201. package/frequent_questions/ru/intlayerNode.md +3 -3
  202. package/frequent_questions/tr/intlayerNode.md +3 -3
  203. package/frequent_questions/uk/intlayerNode.md +3 -3
  204. package/frequent_questions/vi/intlayerNode.md +3 -3
  205. package/frequent_questions/zh/intlayerNode.md +3 -3
  206. package/package.json +8 -8
  207. package/src/generated/docs.entry.ts +20 -0
@@ -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ı
@@ -23,7 +23,7 @@ history:
23
23
  changes: "Claude Desktop kurulumu eklendi"
24
24
  - version: 5.5.12
25
25
  date: 2025-07-10
26
- changes: "SSE aktarımı ve uzak sunucu eklendi"
26
+ changes: "Streamable HTTP aktarımı ve uzak sunucu eklendi"
27
27
  - version: 5.5.10
28
28
  date: 2025-06-29
29
29
  changes: "Geçmiş başlatıldı"
@@ -51,12 +51,12 @@ IDE'nizde Intlayer MCP Sunucusunu etkinleştirerek şunları açığa çıkarır
51
51
 
52
52
  > Komutların ve seçeneklerin tam listesini [Intlayer CLI dokümantasyonunda](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md) görüntüleyin.
53
53
 
54
- ## Yerel sunucu (stdio) vs Uzak sunucu (SSE)
54
+ ## Yerel sunucu (stdio) vs Uzak sunucu (Streamable HTTP)
55
55
 
56
56
  MCP sunucusu iki şekilde kullanılabilir:
57
57
 
58
58
  - Yerel sunucu (stdio)
59
- - Uzak sunucu (SSE)
59
+ - Uzak sunucu (Streamable HTTP)
60
60
 
61
61
  ### Yerel sunucu (stdio) (önerilen)
62
62
 
@@ -64,9 +64,9 @@ Intlayer, makinenizde yerel olarak yüklenebilen bir NPM paketi sağlar. VS Code
64
64
 
65
65
  Bu sunucu, MCP sunucusunun tüm özelliklerini entegre ettiği için önerilen yol, CLI araçları dahil.
66
66
 
67
- ### Uzak sunucu (SSE)
67
+ ### Uzak sunucu (Streamable HTTP)
68
68
 
69
- MCP sunucusu ayrıca uzak olarak, SSE aktarım yöntemini kullanarak kullanılabilir. Bu sunucu Intlayer tarafından barındırılır ve https://mcp.intlayer.org adresinde kullanılabilir. Bu sunucuya herkese açık olarak, herhangi bir kimlik doğrulaması olmadan erişilebilir ve kullanımı ücretsizdir.
69
+ MCP sunucusu ayrıca uzak olarak, Streamable HTTP aktarım yöntemini kullanarak kullanılabilir. Bu sunucu Intlayer tarafından barındırılır ve https://mcp.intlayer.org adresinde kullanılabilir. Bu sunucuya herkese açık olarak, herhangi bir kimlik doğrulaması olmadan erişilebilir ve kullanımı ücretsizdir.
70
70
 
71
71
  Uzak sunucunun CLI araçlarını, AI otomatik tamamlama vb. entegre etmediğini unutmayın. Uzak sunucu sadece AI asistanınızın Intlayer ekosistemiyle etkileşim kurması için dokümantasyon içindir.
72
72
 
@@ -97,7 +97,7 @@ bun x intlayer init mcp
97
97
  Bu komut şunları yapacaktır:
98
98
 
99
99
  1. Hangi platformu kullandığınızı soracaktır (Cursor, VS Code, Claude Desktop vb.).
100
- 2. Hangi taşıma yöntemini kullanmak istediğinizi soracaktır (Yerel sunucu (stdio) veya Uzak sunucu (SSE)).
100
+ 2. Hangi taşıma yöntemini kullanmak istediğinizi soracaktır (Yerel sunucu (stdio) veya Uzak sunucu (Streamable HTTP)).
101
101
  3. Yapılandırma dosyanızı otomatik olarak güncelleyecektir (örneğin, `.cursor/mcp.json`, `.vscode/mcp.json` veya genel Claude Desktop yapılandırması).
102
102
 
103
103
  ---
@@ -107,7 +107,7 @@ Bu komut şunları yapacaktır:
107
107
  1. Komut Paletini açın (Ctrl+Shift+P veya Cmd+Shift+P).
108
108
  2. `Intlayer: Setup AI Agent Skills` yazın
109
109
  3. Kullandığınız platformu seçin (örn. `VS Code`, `Cursor`, `Windsurf`, `OpenCode`, `Claude Code`, `GitHub Copilot Workspace` vb.).
110
- 4. Kurulacak MCP'yi seçin (stdio, SSE)
110
+ 4. Kurulacak MCP'yi seçin (stdio, Streamable HTTP)
111
111
  5. Enter'a basın.
112
112
 
113
113
  ---
@@ -131,16 +131,16 @@ Proje kökünüzde aşağıdaki `.cursor/mcp.json` yapılandırma dosyasını ek
131
131
  }
132
132
  ```
133
133
 
134
- ### Uzak sunucu (SSE)
134
+ ### Uzak sunucu (Streamable HTTP)
135
135
 
136
- Server-Sent Events (SSE) kullanarak uzak bir Intlayer MCP sunucusuna bağlanmak için, MCP istemcinizi barındırılan servise bağlanacak şekilde yapılandırabilirsiniz.
136
+ Server-Sent Events (Streamable HTTP) kullanarak uzak bir Intlayer MCP sunucusuna bağlanmak için, MCP istemcinizi barındırılan servise bağlanacak şekilde yapılandırabilirsiniz.
137
137
 
138
138
  ```json fileName=".cursor/mcp.json"
139
139
  {
140
140
  "mcpServers": {
141
- "intlayer": {
142
- "url": "https://mcp.intlayer.org",
143
- "transport": "sse"
141
+ "intlayer-sse": {
142
+ "command": "npx",
143
+ "args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
144
144
  }
145
145
  }
146
146
  }
@@ -172,16 +172,16 @@ Proje kökünüzde bir `.vscode/mcp.json` dosyası oluşturun:
172
172
  }
173
173
  ```
174
174
 
175
- ### Uzak sunucu (SSE)
175
+ ### Uzak sunucu (Streamable HTTP)
176
176
 
177
- Server-Sent Events (SSE) kullanarak uzak bir Intlayer MCP sunucusuna bağlanmak için, MCP istemcinizi barındırılan servise bağlanacak şekilde yapılandırabilirsiniz.
177
+ Server-Sent Events (Streamable HTTP) kullanarak uzak bir Intlayer MCP sunucusuna bağlanmak için, MCP istemcinizi barındırılan servise bağlanacak şekilde yapılandırabilirsiniz.
178
178
 
179
179
  ```json fileName=".vscode/mcp.json"
180
180
  {
181
181
  "servers": {
182
- "intlayer": {
183
- "url": "https://mcp.intlayer.org",
184
- "type": "sse"
182
+ "intlayer-sse": {
183
+ "command": "npx",
184
+ "args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
185
185
  }
186
186
  }
187
187
  }
@@ -191,7 +191,7 @@ Server-Sent Events (SSE) kullanarak uzak bir Intlayer MCP sunucusuna bağlanmak
191
191
 
192
192
  ## ChatGPT'de Kurulum
193
193
 
194
- ### Uzak sunucu (SSE)
194
+ ### Uzak sunucu (Streamable HTTP)
195
195
 
196
196
  ChatGPT'de MCP sunucusunu yapılandırmak için [resmi dokümantasyonu](https://platform.openai.com/docs/mcp#test-and-connect-your-mcp-server) takip edin.
197
197
 
@@ -232,6 +232,19 @@ Yapılandırma dosyasının yolu:
232
232
  }
233
233
  ```
234
234
 
235
+ ### Uzak sunucu (Streamable HTTP)
236
+
237
+ ```json fileName="claude_desktop_config.json"
238
+ {
239
+ "mcpServers": {
240
+ "intlayer-sse": {
241
+ "command": "npx",
242
+ "args": ["-y", "mcp-remote@latest", "https://mcp.intlayer.org"]
243
+ }
244
+ }
245
+ }
246
+ ```
247
+
235
248
  ---
236
249
 
237
250
  ## CLI aracılığıyla MCP Sunucusunu Kullanma
@@ -0,0 +1,333 @@
1
+ ---
2
+ createdAt: 2026-05-10
3
+ updatedAt: 2026-05-10
4
+ title: Sync PO eklentisi
5
+ description: Intlayer sözlüklerini Gettext PO dosyalarıyla senkronize edin. Mesajlarınızı yönetmek, çevirmek ve test etmek için Intlayer'ı kullanırken mevcut i18n yapınızı koruyun.
6
+ keywords:
7
+ - Intlayer
8
+ - Sync PO
9
+ - Gettext
10
+ - i18n
11
+ - çeviriler
12
+ slugs:
13
+ - doc
14
+ - plugin
15
+ - sync-po
16
+ youtubeVideo: https://www.youtube.com/watch?v=MpGMxniDHNg
17
+ history:
18
+ - version: 8.9.4
19
+ date: 2026-05-10
20
+ changes: "Sync PO eklentisi ilk dokümantasyonu"
21
+ ---
22
+
23
+ # Sync PO (i18n köprüleri) - ICU / i18next desteğiyle Sync PO
24
+
25
+ Intlayer'ı mevcut i18n yığınınız için bir eklenti olarak kullanın. Bu eklenti, Gettext PO mesajlarınızı Intlayer sözlükleriyle senkronize tutar, böylece şunları yapabilirsiniz:
26
+
27
+ - Mevcut PO tabanlı çeviri iş akışınızı koruyun.
28
+ - Uygulamanızı yeniden yapılandırmadan mesajlarınızı Intlayer (CLI, CI, sağlayıcılar, CMS) ile yönetin ve çevirin.
29
+ - PO yönetim katmanı olarak Intlayer'ı önerirken, her ekosistemi hedefleyen öğreticiler ve SEO içerikleri sunun.
30
+
31
+ Notlar ve mevcut kapsam:
32
+
33
+ - CMS'ye dışsallaştırma, çeviriler ve klasik metinler için çalışır.
34
+ - PO girişlerinin kendisinde eklemeler, çoğullar/ICU veya diğer kütüphanelerin gelişmiş çalışma zamanı özellikleri için henüz destek yoktur.
35
+ - Görsel düzenleyici henüz üçüncü taraf i18n çıktıları için desteklenmemektedir.
36
+
37
+ ### Bu eklenti ne zaman kullanılmalı?
38
+
39
+ - Çevirileriniz için zaten Gettext PO dosyalarını kullanıyorsanız.
40
+ - İşleme çalışma zamanınızı değiştirmeden yapay zeka destekli doldurma, CI'da test ve içerik operasyonları istiyorsanız.
41
+
42
+ ## Kurulum
43
+
44
+ ```bash
45
+ pnpm add -D @intlayer/sync-po-plugin
46
+ # veya
47
+ npm i -D @intlayer/sync-po-plugin
48
+ ```
49
+
50
+ ## Eklentiler
51
+
52
+ Bu paket iki eklenti sunar:
53
+
54
+ - `loadPO`: PO dosyalarını Intlayer sözlüklerine yükler.
55
+ - Bu eklenti, bir kaynaktan PO dosyalarını yüklemek için kullanılır ve Intlayer sözlüklerine yüklenecektir. Tüm kod tabanını tarayabilir ve belirli PO dosyalarını arayabilir.
56
+ Bu eklenti şu durumlarda kullanılabilir:
57
+ - PO dosyalarınızın yükleneceği belirli bir konumu zorunlu kılan bir i18n kütüphanesi kullanıyorsanız ancak içerik bildiriminizi kod tabanınızda istediğiniz yere yerleştirmek istiyorsanız.
58
+ - Mesajlarınızı uzak bir kaynaktan (örneğin: bir CMS, bir API vb.) getirmek ve mesajlarınızı PO dosyalarında saklamak istiyorsanız.
59
+
60
+ > Arka planda, bu eklenti tüm kod tabanını tarayacak ve belirli PO dosyalarını arayacak ve bunları Intlayer sözlüklerine yükleyecektir.
61
+ > Bu eklentinin çıktıyı ve çevirileri PO dosyalarına geri yazmayacağını unutmayın.
62
+
63
+ - `syncPO`: PO dosyalarını Intlayer sözlükleriyle senkronize eder.
64
+ - Bu eklenti, PO dosyalarını Intlayer sözlükleriyle senkronize etmek için kullanılır. Verilen konumu tarayabilir ve belirli PO dosyaları için kalıpla eşleşen PO'ları yükleyebilir. Bu eklenti, başka bir i18n kütüphanesi kullanırken Intlayer'ın avantajlarından yararlanmak istiyorsanız yararlıdır.
65
+
66
+ ## Her iki eklentinin kullanımı
67
+
68
+ ```ts fileName="intlayer.config.ts"
69
+ import { Locales, type IntlayerConfig } from "intlayer";
70
+ import { loadPO, syncPO } from "@intlayer/sync-po-plugin";
71
+
72
+ const config: IntlayerConfig = {
73
+ internationalization: {
74
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
75
+ defaultLocale: Locales.ENGLISH,
76
+ },
77
+
78
+ // Mevcut PO dosyalarınızı Intlayer sözlükleriyle senkronize tutun
79
+ plugins: [
80
+ /**
81
+ * src içindeki {key}.i18n.po kalıbıyla eşleşen tüm PO dosyalarını yükleyecektir
82
+ */
83
+ loadPO({
84
+ source: ({ key }) => `./src/**/${key}.i18n.po`,
85
+ locale: Locales.ENGLISH,
86
+ priority: 1, // Bu PO dosyalarının `./locales/en/${key}.po` adresindeki dosyalara göre öncelikli olmasını sağlar
87
+ }),
88
+ /**
89
+ * Çıktıyı ve çevirileri yükleyecek ve locales dizinindeki PO dosyalarına geri yazacaktır
90
+ */
91
+ syncPO({
92
+ source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
93
+ priority: 0,
94
+ }),
95
+ ],
96
+ };
97
+
98
+ export default config;
99
+ ```
100
+
101
+ ## `syncPO` eklentisi
102
+
103
+ ### Hızlı başlangıç
104
+
105
+ Eklentiyi `intlayer.config.ts` dosyanıza ekleyin ve mevcut PO yapınızı işaret edin.
106
+
107
+ ```ts fileName="intlayer.config.ts"
108
+ import { Locales, type IntlayerConfig } from "intlayer";
109
+ import { syncPO } from "@intlayer/sync-po-plugin";
110
+
111
+ const config: IntlayerConfig = {
112
+ internationalization: {
113
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
114
+ defaultLocale: Locales.ENGLISH,
115
+ },
116
+
117
+ // Mevcut PO dosyalarınızı Intlayer sözlükleriyle senkronize tutun
118
+ plugins: [
119
+ syncPO({
120
+ // Dil başına, ad alanı başına düzen
121
+ source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
122
+ }),
123
+ ],
124
+ };
125
+
126
+ export default config;
127
+ ```
128
+
129
+ Alternatif: dil başına tek dosya:
130
+
131
+ ```ts fileName="intlayer.config.ts"
132
+ import { Locales, type IntlayerConfig } from "intlayer";
133
+ import { syncPO } from "@intlayer/sync-po-plugin";
134
+
135
+ const config: IntlayerConfig = {
136
+ internationalization: {
137
+ locales: [Locales.ENGLISH, Locales.FRENCH],
138
+ defaultLocale: Locales.ENGLISH,
139
+ },
140
+ plugins: [
141
+ syncPO({
142
+ source: ({ locale }) => `./locales/${locale}.po`,
143
+ }),
144
+ ],
145
+ };
146
+
147
+ export default config;
148
+ ```
149
+
150
+ #### Nasıl çalışır?
151
+
152
+ - Okuma: Eklenti, `source` oluşturucunuzdan PO dosyalarını bulur ve bunları Intlayer sözlükleri olarak yükler.
153
+ - Yazma: Derlemelerden ve doldurmalardan sonra, yerelleştirilmiş PO'ları aynı yollara geri yazar (uygun Gettext başlıklarıyla).
154
+ - Otomatik Doldurma: Eklenti, her sözlük için bir `autoFill` yolu bildirir. `intlayer fill` komutunu çalıştırmak varsayılan olarak yalnızca PO dosyalarınızdaki eksik çevirileri günceller.
155
+
156
+ API:
157
+
158
+ ```ts
159
+ syncPO({
160
+ source: ({ key, locale }) => string, // gerekli
161
+ location?: string, // isteğe bağlı etiket, varsayılan: "sync-po::path/to/source"
162
+ priority?: number, // çakışma çözümü için isteğe bağlı öncelik, varsayılan: 0
163
+ });
164
+ ```
165
+
166
+ ### Birden fazla PO kaynağı ve öncelik
167
+
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.
169
+
170
+ #### Öncelik sistemi
171
+
172
+ Birden fazla eklenti aynı sözlük anahtarını hedeflediğinde, `priority` parametresi hangi eklentinin öncelikli olduğunu belirler:
173
+
174
+ - Yüksek öncelik sayıları düşük olanlara göre önceliklidir
175
+ - `.content` dosyalarının varsayılan önceliği `0`'dır
176
+ - Eklentilerin varsayılan önceliği `0`'dır
177
+ - Aynı önceliğe sahip eklentiler yapılandırmada göründükleri sıraya göre işlenir
178
+
179
+ ```ts fileName="intlayer.config.ts"
180
+ import { Locales, type IntlayerConfig } from "intlayer";
181
+ import { syncPO } from "@intlayer/sync-po-plugin";
182
+
183
+ const config: IntlayerConfig = {
184
+ internationalization: {
185
+ locales: [Locales.ENGLISH, Locales.FRENCH],
186
+ defaultLocale: Locales.ENGLISH,
187
+ },
188
+
189
+ plugins: [
190
+ // Birincil PO kaynağı (en yüksek öncelik)
191
+ syncPO({
192
+ source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
193
+ location: "main-translations",
194
+ priority: 10,
195
+ }),
196
+
197
+ // Yedek PO kaynağı (düşük öncelik)
198
+ syncPO({
199
+ source: ({ locale }) => `./fallback-locales/${locale}.po`,
200
+ location: "fallback-translations",
201
+ priority: 5,
202
+ }),
203
+
204
+ // Eski PO kaynağı (en düşük öncelik)
205
+ syncPO({
206
+ source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.po`,
207
+ location: "legacy-translations",
208
+ priority: 1,
209
+ }),
210
+ ],
211
+ };
212
+
213
+ export default config;
214
+ ```
215
+
216
+ ## Load PO eklentisi
217
+
218
+ ### Hızlı başlangıç
219
+
220
+ Mevcut PO dosyalarını Intlayer sözlükleri olarak almak için eklentiyi `intlayer.config.ts` dosyanıza ekleyin. Bu eklenti salt okunurdur (diske yazma yapılmaz):
221
+
222
+ ```ts fileName="intlayer.config.ts"
223
+ import { Locales, type IntlayerConfig } from "intlayer";
224
+ import { loadPO } from "@intlayer/sync-po-plugin";
225
+
226
+ const config: IntlayerConfig = {
227
+ internationalization: {
228
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
229
+ defaultLocale: Locales.ENGLISH,
230
+ },
231
+
232
+ plugins: [
233
+ // Kaynak ağacınızın herhangi bir yerinde bulunan PO mesajlarını alın
234
+ loadPO({
235
+ source: ({ key }) => `./src/**/${key}.i18n.po`,
236
+ // Eklenti örneği başına tek bir dil yükle (yapılandırma defaultLocale değerine varsayılan olarak ayarlanır)
237
+ locale: Locales.ENGLISH,
238
+ priority: 0,
239
+ }),
240
+ ],
241
+ };
242
+
243
+ export default config;
244
+ ```
245
+
246
+ Alternatif: dil başına düzen, hala salt okunur (yalnızca seçilen dil yüklenir):
247
+
248
+ ```ts fileName="intlayer.config.ts"
249
+ import { Locales, type IntlayerConfig } from "intlayer";
250
+ import { loadPO } from "@intlayer/sync-po-plugin";
251
+
252
+ const config: IntlayerConfig = {
253
+ internationalization: {
254
+ locales: [Locales.ENGLISH, Locales.FRENCH],
255
+ defaultLocale: Locales.ENGLISH,
256
+ },
257
+ plugins: [
258
+ loadPO({
259
+ // Bu kalıptan yalnızca Locales.FRENCH dosyaları yüklenecektir
260
+ source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
261
+ locale: Locales.FRENCH,
262
+ }),
263
+ ],
264
+ };
265
+
266
+ export default config;
267
+ ```
268
+
269
+ ### Nasıl çalışır?
270
+
271
+ - Keşfetme: `source` oluşturucunuzdan bir glob oluşturur ve eşleşen PO dosyalarını toplar.
272
+ - Alım: Her PO dosyasını sağlanan `locale` ile bir Intlayer sözlüğü olarak yükler.
273
+ - Salt Okunur: Çıktı dosyalarını yazmaz veya biçimlendirmez; gidiş-dönüş senkronizasyonuna ihtiyacınız varsa `syncPO` kullanın.
274
+ - Otomatik Doldurmaya Hazır: Eksik anahtarları doldurmak için `intlayer content fill` komutunun kullanabileceği bir `fill` yolu tanımlar.
275
+
276
+ ### API
277
+
278
+ ```ts
279
+ loadPO({
280
+ // PO dosyalarınıza giden yolları oluşturun. Yapınızda dil segmenti yoksa `locale` isteğe bağlıdır
281
+ source: ({ key, locale }) => string,
282
+
283
+ // Bu eklenti örneği tarafından yüklenen sözlükler için hedef dil
284
+ // configuration.internationalization.defaultLocale değerine varsayılan olarak ayarlanır
285
+ locale?: Locale,
286
+
287
+ // Kaynağı tanımlamak için isteğe bağlı etiket
288
+ location?: string, // varsayılan: "plugin"
289
+
290
+ // Diğer kaynaklara karşı çakışma çözümü için kullanılan öncelik
291
+ priority?: number, // varsayılan: 0
292
+ });
293
+ ```
294
+
295
+ ### Davranış ve kurallar
296
+
297
+ - `source` maskeniz bir dil yer tutucusu içeriyorsa, yalnızca seçilen `locale` için dosyalar alınır.
298
+ - Maskenizde `{key}` segmenti yoksa sözlük anahtarı "index" olur.
299
+ - Anahtarlar, `source` oluşturucunuzdaki `{key}` yer tutucusunun değiştirilmesiyle dosya yollarından türetilir.
300
+ - Eklenti yalnızca bulunan dosyaları kullanır ve eksik dilleri veya anahtarları uydurmaz.
301
+ - `fill` yolu `source` değerinizden çıkarılır ve katılım sağladığınızda CLI aracılığıyla eksik değerleri güncellemek için kullanılır.
302
+
303
+ ## Çakışma çözümü
304
+
305
+ Aynı çeviri anahtarı birden fazla PO kaynağında mevcut olduğunda:
306
+
307
+ 1. En yüksek önceliğe sahip eklenti nihai değeri belirler
308
+ 2. Düşük öncelikli kaynaklar eksik anahtarlar için geri dönüş olarak kullanılır
309
+ 3. Bu, yeni yapılara kademeli olarak geçerken eski çevirileri korumanıza olanak tanır
310
+
311
+ ## CLI
312
+
313
+ Senkronize edilmiş PO dosyaları diğer `.content` dosyaları gibi değerlendirilecektir. Bu, senkronize edilmiş PO dosyaları için tüm intlayer komutlarının kullanılabilir olacağı anlamına gelir. Şunlar dahildir:
314
+
315
+ - Eksik çeviri olup olmadığını test etmek için `intlayer content test`
316
+ - Senkronize edilmiş PO dosyalarını listelemek için `intlayer content list`
317
+ - Eksik çevirileri doldurmak için `intlayer content fill`
318
+ - Senkronize edilmiş PO dosyalarını göndermek (push) için `intlayer content push`
319
+ - Senkronize edilmiş PO dosyalarını çekmek (pull) için `intlayer content pull`
320
+
321
+ Daha fazla ayrıntı için [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md) sayfasına bakın.
322
+
323
+ ## Sınırlamalar (güncel)
324
+
325
+ - Üçüncü taraf kütüphaneleri hedeflerken ekleme veya çoğul/ICU desteği yoktur.
326
+ - Görsel düzenleyici henüz Intlayer dışı çalışma zamanları için mevcut değildir.
327
+ - Yalnızca PO senkronizasyonu; PO dışı katalog biçimleri desteklenmez.
328
+
329
+ ## Bu neden önemli?
330
+
331
+ - Yerleşik i18n çözümlerini önerebilir ve Intlayer'ı bir eklenti olarak konumlandırabiliriz.
332
+ - PO'ları yönetmek için Intlayer'ı önererek sona eren öğreticilerle onların SEO/anahtar kelimelerinden yararlanırız.
333
+ - Adreslenebilir kitleyi "yeni projelerden", "zaten i18n kullanan herhangi bir ekibe" genişletir.
@@ -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