@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: Fichier de Contenu
5
5
  description: Apprenez à personnaliser les extensions pour vos fichiers de déclaration de contenu. Suivez cette documentation pour implémenter efficacement des conditions dans votre projet.
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: "Ajouter le type de nœud de contenu `plural`"
15
18
  - version: 8.0.0
16
19
  date: 2026-01-28
17
20
  changes: "Ajout du type de nœud de contenu `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,
@@ -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": "Quelques voitures",
118
123
  ">19": "Beaucoup de voitures",
119
124
  }),
125
+ pluralContent: plural({
126
+ one: "One car",
127
+ other: "{{count}} cars",
128
+ }),
120
129
  conditionalContent: cond({
121
130
  true: "La validation est activée",
122
131
  false: "La validation est désactivée",
@@ -171,6 +180,13 @@ export default {
171
180
  ">5": "Quelques voitures",
172
181
  ">19": "Beaucoup de voitures",
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 @@ Les nœuds de contenu sont les éléments de base du contenu du dictionnaire. Il
218
234
  - **Valeurs primitives** : chaînes de caractères, nombres, booléens, null, undefined
219
235
  - **Nœuds typés** : Types de contenu spéciaux comme les traductions, conditions, markdown, etc.
220
236
  - **Fonctions** : Contenu dynamique pouvant être évalué à l'exécution [voir Récupération de fonctions](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/function_fetching.md)
237
+ - **Contenu Pluriel**: Voir Contenu Pluriel [Voir Contenu Pluriel](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/plural.md)
221
238
  - **Contenu imbriqué** : Références à d'autres dictionnaires
222
239
 
223
240
  #### Types de contenu
@@ -536,6 +553,8 @@ multilingualContent: t({
536
553
  });
537
554
  ```
538
555
 
556
+ > Voir [Contenu de traduction (`t`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/translation.md) pour plus d'informations.
557
+
539
558
  ### Contenu conditionnel (`cond`)
540
559
 
541
560
  Contenu qui change en fonction de conditions booléennes :
@@ -549,6 +568,8 @@ conditionalContent: cond({
549
568
  });
550
569
  ```
551
570
 
571
+ > Voir [Contenu conditionnel (`cond`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/condition.md) pour plus d'informations.
572
+
552
573
  ### Contenu d'énumération (`enu`)
553
574
 
554
575
  Contenu qui varie en fonction de valeurs énumérées :
@@ -563,6 +584,23 @@ statusContent: enu({
563
584
  });
564
585
  ```
565
586
 
587
+ > Voir [Contenu d'énumération (`enu`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/enumeration.md) pour plus d'informations.
588
+
589
+ ### Contenu Pluriel (`plural`)
590
+
591
+ Contenu qui varie selon les règles de pluriel :
592
+
593
+ ```typescript
594
+ import { plural } from "intlayer";
595
+
596
+ pluralContent: plural({
597
+ one: "One car",
598
+ other: "{{count}} cars",
599
+ });
600
+ ```
601
+
602
+ > Voir [Contenu Pluriel Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/plural.md) pour plus d'informations.
603
+
566
604
  ### Contenu d'insertion (`insert`)
567
605
 
568
606
  Contenu qui peut être inséré dans un autre contenu :
@@ -573,6 +611,8 @@ import { insert } from "intlayer";
573
611
  insertionContent: insert("Ce texte peut être inséré n'importe où");
574
612
  ```
575
613
 
614
+ > Voir [Contenu d'insertion (`insert`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/insertion.md) pour plus d'informations.
615
+
576
616
  ### Contenu imbriqué (`nest`)
577
617
 
578
618
  Références à d'autres dictionnaires :
@@ -583,6 +623,8 @@ import { nest } from "intlayer";
583
623
  nestedContent: nest("about-page");
584
624
  ```
585
625
 
626
+ > Voir [Contenu imbriqué (`nest`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/nesting.md) pour plus d'informations.
627
+
586
628
  ### Contenu Markdown (`md`)
587
629
 
588
630
  Contenu riche au format Markdown :
@@ -595,6 +637,8 @@ markdownContent: md(
595
637
  );
596
638
  ```
597
639
 
640
+ > Voir [Contenu Markdown (`md`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/markdown.md) pour plus d'informations.
641
+
598
642
  ### Contenu HTML (`html`)
599
643
 
600
644
  Contenu HTML riche pouvant utiliser des balises standard ou des composants personnalisés :
@@ -612,6 +656,8 @@ localizedHtmlContent: t({
612
656
  });
613
657
  ```
614
658
 
659
+ > Voir [Contenu HTML (`html`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/html.md) pour plus d'informations.
660
+
615
661
  ### Contenu selon le genre (`gender`)
616
662
 
617
663
  Contenu qui varie selon le genre :
@@ -626,6 +672,8 @@ genderContent: gender({
626
672
  });
627
673
  ```
628
674
 
675
+ > Voir [Contenu selon le genre (`gender`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/gender.md) pour plus d'informations.
676
+
629
677
  ### Contenu de fichier (`file`)
630
678
 
631
679
  Références à des fichiers externes :
@@ -636,6 +684,8 @@ import { file } from "intlayer";
636
684
  fileContent: file("./path/to/content.txt");
637
685
  ```
638
686
 
687
+ > Voir [Contenu de fichier (`file`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/file.md) pour plus d'informations.
688
+
639
689
  ## Création de fichiers de contenu
640
690
 
641
691
  ### Structure de base d’un fichier de contenu
@@ -23,7 +23,7 @@ history:
23
23
  changes: "Ajout de la configuration de Claude Desktop"
24
24
  - version: 5.5.12
25
25
  date: 2025-07-10
26
- changes: "Ajout du transport SSE et du serveur distant"
26
+ changes: "Ajout du transport Streamable HTTP et du serveur distant"
27
27
  - version: 5.5.10
28
28
  date: 2025-06-29
29
29
  changes: "Historique initial"
@@ -51,12 +51,12 @@ En activant le serveur MCP Intlayer dans votre IDE, vous débloquez :
51
51
 
52
52
  > Consultez la liste complète des commandes et options dans la [documentation CLI d'Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/cli/index.md).
53
53
 
54
- ## Serveur local (stdio) vs Serveur distant (SSE)
54
+ ## Serveur local (stdio) vs Serveur distant (Streamable HTTP)
55
55
 
56
56
  Le serveur MCP peut être utilisé de deux manières :
57
57
 
58
58
  - Serveur local (stdio)
59
- - Serveur distant (SSE)
59
+ - Serveur distant (Streamable HTTP)
60
60
 
61
61
  ### Serveur local (stdio) (recommandé)
62
62
 
@@ -64,7 +64,7 @@ Intlayer fournit un package NPM qui peut être installé localement sur votre ma
64
64
 
65
65
  Ce serveur est la méthode recommandée pour utiliser le serveur MCP. Car il intègre toutes les fonctionnalités du serveur MCP, y compris les outils CLI.
66
66
 
67
- ### Serveur distant (SSE)
67
+ ### Serveur distant (Streamable HTTP)
68
68
 
69
69
  Le serveur MCP peut également être utilisé à distance, en utilisant la méthode de transport SSE. Ce serveur est hébergé par Intlayer, et est disponible à l'adresse https://mcp.intlayer.org. Ce serveur est accessible publiquement, sans aucune authentification, et est gratuit à utiliser.
70
70
 
@@ -97,7 +97,7 @@ bun x intlayer init mcp
97
97
  Cette commande va :
98
98
 
99
99
  1. Vous demander quelle plateforme vous utilisez (Cursor, VS Code, Claude Desktop, etc.).
100
- 2. Vous demander quelle méthode de transport vous souhaitez utiliser (Serveur local (stdio) ou Serveur distant (SSE)).
100
+ 2. Vous demander quelle méthode de transport vous souhaitez utiliser (Serveur local (stdio) ou Serveur distant (Streamable HTTP)).
101
101
  3. Mettre à jour automatiquement votre fichier de configuration (ex: `.cursor/mcp.json`, `.vscode/mcp.json`, ou la configuration globale de Claude Desktop).
102
102
 
103
103
  ---
@@ -107,7 +107,7 @@ Cette commande va :
107
107
  1. Ouvrez la palette de commandes (Ctrl+Shift+P ou Cmd+Shift+P).
108
108
  2. Tapez `Intlayer: Setup AI Agent Skills`
109
109
  3. Choisissez la plateforme que vous utilisez (ex: `VS Code`, `Cursor`, `Windsurf`, `OpenCode`, `Claude Code`, `GitHub Copilot Workspace`, etc.).
110
- 4. Choisissez le MCP à installer (stdio, SSE)
110
+ 4. Choisissez le MCP à installer (stdio, Streamable HTTP)
111
111
  5. Appuyez sur Entrée.
112
112
 
113
113
  ---
@@ -131,16 +131,16 @@ Suivez la [documentation officielle](https://docs.cursor.com/context/mcp) pour c
131
131
  }
132
132
  ```
133
133
 
134
- ### Serveur distant (SSE)
134
+ ### Serveur distant (Streamable HTTP)
135
135
 
136
- Pour se connecter à un serveur MCP Intlayer distant utilisant les Server-Sent Events (SSE), vous pouvez configurer votre client MCP pour se connecter au service hébergé.
136
+ Pour se connecter à un serveur MCP Intlayer distant utilisant les Server-Sent Events (Streamable HTTP), vous pouvez configurer votre client MCP pour se connecter au service hébergé.
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 @@ Créez un fichier `.vscode/mcp.json` à la racine de votre projet :
172
172
  }
173
173
  ```
174
174
 
175
- ### Serveur distant (SSE)
175
+ ### Serveur distant (Streamable HTTP)
176
176
 
177
- Pour se connecter à un serveur MCP Intlayer distant utilisant les Server-Sent Events (SSE), vous pouvez configurer votre client MCP pour se connecter au service hébergé.
177
+ Pour se connecter à un serveur MCP Intlayer distant utilisant les Server-Sent Events (Streamable HTTP), vous pouvez configurer votre client MCP pour se connecter au service hébergé.
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 @@ Pour se connecter à un serveur MCP Intlayer distant utilisant les Server-Sent E
191
191
 
192
192
  ## Configuration dans ChatGPT
193
193
 
194
- ### Serveur distant (SSE)
194
+ ### Serveur distant (Streamable HTTP)
195
195
 
196
196
  Suivez la [documentation officielle](https://platform.openai.com/docs/mcp#test-and-connect-your-mcp-server) pour configurer le serveur MCP dans ChatGPT.
197
197
 
@@ -232,6 +232,19 @@ Chemin du fichier de configuration :
232
232
  }
233
233
  ```
234
234
 
235
+ ### Serveur distant (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
  ## Utilisation du serveur MCP via la CLI
@@ -0,0 +1,333 @@
1
+ ---
2
+ createdAt: 2026-05-10
3
+ updatedAt: 2026-05-10
4
+ title: Plugin Sync PO
5
+ description: Synchronisez les dictionnaires Intlayer avec les fichiers Gettext PO. Conservez votre i18n existante tout en utilisant Intlayer pour gérer, traduire et tester vos messages.
6
+ keywords:
7
+ - Intlayer
8
+ - Sync PO
9
+ - Gettext
10
+ - i18n
11
+ - traductions
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: "Documentation initiale du plugin Sync PO"
21
+ ---
22
+
23
+ # Sync PO (ponts i18n) - Sync PO avec support ICU / i18next
24
+
25
+ Utilisez Intlayer comme un complément à votre stack i18n existante. Ce plugin maintient vos messages Gettext PO synchronisés avec les dictionnaires Intlayer afin que vous puissiez :
26
+
27
+ - Conserver votre workflow de traduction basé sur PO existant.
28
+ - Gérer et traduire vos messages avec Intlayer (CLI, CI, fournisseurs, CMS), sans refactoriser votre application.
29
+ - Publier des tutoriels et du contenu SEO ciblant chaque écosystème, tout en suggérant Intlayer comme couche de gestion PO.
30
+
31
+ Notes et portée actuelle :
32
+
33
+ - L'externalisation vers le CMS fonctionne pour les traductions et le texte classique.
34
+ - Pas encore de support pour les insertions, les pluriels/ICU ou les fonctionnalités avancées au moment de l'exécution d'autres bibliothèques au sein des entrées PO elles-mêmes.
35
+ - L'éditeur visuel n'est pas encore supporté pour les sorties i18n tierces.
36
+
37
+ ### Quand utiliser ce plugin
38
+
39
+ - Vous utilisez déjà des fichiers Gettext PO pour vos traductions.
40
+ - Vous souhaitez bénéficier du remplissage assisté par IA, des tests en CI et des opérations de contenu sans changer votre runtime de rendu.
41
+
42
+ ## Installation
43
+
44
+ ```bash
45
+ pnpm add -D @intlayer/sync-po-plugin
46
+ # ou
47
+ npm i -D @intlayer/sync-po-plugin
48
+ ```
49
+
50
+ ## Plugins
51
+
52
+ Ce package fournit deux plugins :
53
+
54
+ - `loadPO` : Charge les fichiers PO dans les dictionnaires Intlayer.
55
+ - Ce plugin est utilisé pour charger des fichiers PO à partir d'une source et les intégrer dans les dictionnaires Intlayer. Il peut scanner toute la base de code et rechercher des fichiers PO spécifiques.
56
+ Ce plugin peut être utilisé :
57
+ - si vous utilisez une bibliothèque i18n qui impose un emplacement spécifique pour le chargement de vos fichiers PO, mais que vous souhaitez placer votre déclaration de contenu où vous le souhaitez dans votre base de code.
58
+ - Il peut également être utilisé si vous souhaitez récupérer vos messages à partir d'une source distante (ex : un CMS, une API, etc.) et stocker vos messages dans des fichiers PO.
59
+
60
+ > Sous le capot, ce plugin scannera toute la base de code, recherchera des fichiers PO spécifiques et les chargera dans les dictionnaires Intlayer.
61
+ > Notez que ce plugin n'écrira pas la sortie et les traductions en retour dans les fichiers PO.
62
+
63
+ - `syncPO` : Synchronise les fichiers PO avec les dictionnaires Intlayer.
64
+ - Ce plugin est utilisé pour synchroniser les fichiers PO avec les dictionnaires Intlayer. Il peut scanner l'emplacement donné et charger les PO qui correspondent au motif pour des fichiers PO spécifiques. Ce plugin est utile si vous souhaitez bénéficier des avantages d'Intlayer tout en utilisant une autre bibliothèque i18n.
65
+
66
+ ## Utilisation des deux plugins
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
+ // Gardez vos fichiers PO actuels synchronisés avec les dictionnaires Intlayer
79
+ plugins: [
80
+ /**
81
+ * Chargera tous les fichiers PO dans le src qui correspondent au motif {key}.i18n.po
82
+ */
83
+ loadPO({
84
+ source: ({ key }) => `./src/**/${key}.i18n.po`,
85
+ locale: Locales.ENGLISH,
86
+ priority: 1, // Garantit que ces fichiers PO ont la priorité sur les fichiers à `./locales/en/${key}.po`
87
+ }),
88
+ /**
89
+ * Chargera et écrira la sortie et les traductions en retour dans les fichiers PO du répertoire locales
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
+ ## Plugin `syncPO`
102
+
103
+ ### Démarrage rapide
104
+
105
+ Ajoutez le plugin à votre `intlayer.config.ts` et pointez-le vers votre structure PO existante.
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
+ // Gardez vos fichiers PO actuels synchronisés avec les dictionnaires Intlayer
118
+ plugins: [
119
+ syncPO({
120
+ // Mise en page par langue, par espace de noms
121
+ source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
122
+ }),
123
+ ],
124
+ };
125
+
126
+ export default config;
127
+ ```
128
+
129
+ Alternative : un seul fichier par langue :
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
+ #### Comment ça marche
151
+
152
+ - Lecture : le plugin découvre les fichiers PO à partir de votre constructeur `source` et les charge en tant que dictionnaires Intlayer.
153
+ - Écriture : après les constructions et les remplissages, il réécrit les PO localisés dans les mêmes chemins (avec les en-têtes Gettext appropriés).
154
+ - Auto-remplissage : le plugin déclare un chemin `autoFill` pour chaque dictionnaire. L'exécution de `intlayer fill` met à jour uniquement les traductions manquantes dans vos fichiers PO par défaut.
155
+
156
+ API :
157
+
158
+ ```ts
159
+ syncPO({
160
+ source: ({ key, locale }) => string, // requis
161
+ location?: string, // étiquette optionnelle, défaut : "sync-po::path/to/source"
162
+ priority?: number, // priorité optionnelle pour la résolution de conflits, défaut : 0
163
+ });
164
+ ```
165
+
166
+ ### Sources PO multiples et priorité
167
+
168
+ Vous pouvez ajouter plusieurs plugins `syncPO` pour synchroniser différentes sources PO. Ceci est utile lorsque vous avez plusieurs sources de traduction ou différentes structures PO dans votre projet.
169
+
170
+ #### Système de priorité
171
+
172
+ Lorsque plusieurs plugins ciblent la même clé de dictionnaire, le paramètre `priority` détermine quel plugin prime :
173
+
174
+ - Les numéros de priorité plus élevés l'emportent sur les plus bas
175
+ - La priorité par défaut des fichiers `.content` est `0`
176
+ - La priorité par défaut des plugins est `0`
177
+ - Les plugins ayant la même priorité sont traités dans l'ordre où ils apparaissent dans la configuration
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
+ // Source PO principale (priorité la plus élevée)
191
+ syncPO({
192
+ source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
193
+ location: "main-translations",
194
+ priority: 10,
195
+ }),
196
+
197
+ // Source PO de secours (priorité plus basse)
198
+ syncPO({
199
+ source: ({ locale }) => `./fallback-locales/${locale}.po`,
200
+ location: "fallback-translations",
201
+ priority: 5,
202
+ }),
203
+
204
+ // Source PO héritée (priorité la plus basse)
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
+ ## Plugin Load PO
217
+
218
+ ### Démarrage rapide
219
+
220
+ Ajoutez le plugin à votre `intlayer.config.ts` pour ingérer des fichiers PO existants en tant que dictionnaires Intlayer. Ce plugin est en lecture seule (pas d'écriture sur le disque) :
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
+ // Ingérer les messages PO situés n'importe où dans votre arborescence source
234
+ loadPO({
235
+ source: ({ key }) => `./src/**/${key}.i18n.po`,
236
+ // Charger une seule langue par instance de plugin (par défaut la langue par défaut de la configuration)
237
+ locale: Locales.ENGLISH,
238
+ priority: 0,
239
+ }),
240
+ ],
241
+ };
242
+
243
+ export default config;
244
+ ```
245
+
246
+ Alternative : mise en page par langue, toujours en lecture seule (seule la langue sélectionnée est chargée) :
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
+ // Seuls les fichiers pour Locales.FRENCH seront chargés à partir de ce motif
260
+ source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
261
+ locale: Locales.FRENCH,
262
+ }),
263
+ ],
264
+ };
265
+
266
+ export default config;
267
+ ```
268
+
269
+ ### Comment ça marche
270
+
271
+ - Découverte : construit un glob à partir de votre constructeur `source` et collecte les fichiers PO correspondants.
272
+ - Ingestion : charge chaque fichier PO en tant que dictionnaire Intlayer avec la `locale` fournie.
273
+ - Lecture seule : n'écrit ni ne formate les fichiers de sortie ; utilisez `syncPO` si vous avez besoin d'une synchronisation aller-retour.
274
+ - Prêt pour l'auto-remplissage : définit un chemin `fill` afin que `intlayer content fill` puisse peupler les clés manquantes.
275
+
276
+ ### API
277
+
278
+ ```ts
279
+ loadPO({
280
+ // Construire les chemins vers vos PO. `locale` est optionnel si votre structure n'a pas de segment de langue
281
+ source: ({ key, locale }) => string,
282
+
283
+ // Langue cible pour les dictionnaires chargés par cette instance de plugin
284
+ // Par défaut configuration.internationalization.defaultLocale
285
+ locale?: Locale,
286
+
287
+ // Étiquette optionnelle pour identifier la source
288
+ location?: string, // défaut : "plugin"
289
+
290
+ // Priorité utilisée pour la résolution de conflits avec d'autres sources
291
+ priority?: number, // défaut : 0
292
+ });
293
+ ```
294
+
295
+ ### Comportement et conventions
296
+
297
+ - Si votre masque `source` inclut un espace réservé pour la langue, seuls les fichiers pour la `locale` sélectionnée sont ingérés.
298
+ - S'il n'y a pas de segment `{key}` dans votre masque, la clé du dictionnaire est "index".
299
+ - Les clés sont dérivées des chemins de fichiers en remplaçant l'espace réservé `{key}` dans votre constructeur `source`.
300
+ - Le plugin utilise uniquement les fichiers découverts et ne fabrique pas de langues ou de clés manquantes.
301
+ - Le chemin `fill` est déduit de votre `source` et utilisé pour mettre à jour les valeurs manquantes via CLI lorsque vous l'acceptez.
302
+
303
+ ## Résolution de conflits
304
+
305
+ Lorsque la même clé de traduction existe dans plusieurs sources PO :
306
+
307
+ 1. Le plugin ayant la priorité la plus élevée détermine la valeur finale
308
+ 2. Les sources de priorité inférieure sont utilisées comme secours pour les clés manquantes
309
+ 3. Cela vous permet de conserver les traductions héritées tout en migrant progressivement vers de nouvelles structures
310
+
311
+ ## CLI
312
+
313
+ Les fichiers PO synchronisés seront considérés comme les autres fichiers `.content`. Cela signifie que toutes les commandes intlayer seront disponibles pour les fichiers PO synchronisés. Y compris :
314
+
315
+ - `intlayer content test` pour tester s'il y a des traductions manquantes
316
+ - `intlayer content list` pour lister les fichiers PO synchronisés
317
+ - `intlayer content fill` pour remplir les traductions manquantes
318
+ - `intlayer content push` pour pousser les fichiers PO synchronisés
319
+ - `intlayer content pull` pour tirer les fichiers PO synchronisés
320
+
321
+ Voir [Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md) pour plus de détails.
322
+
323
+ ## Limitations (actuelles)
324
+
325
+ - Pas de support pour les insertions ou les pluriels/ICU lors du ciblage de bibliothèques tierces.
326
+ - L'éditeur visuel n'est pas encore disponible pour les runtimes non-Intlayer.
327
+ - Synchronisation PO uniquement ; les formats de catalogue non-PO ne sont pas supportés.
328
+
329
+ ## Pourquoi c'est important
330
+
331
+ - Nous pouvons recommander des solutions i18n établies et positionner Intlayer comme un complément.
332
+ - Nous exploitons leur SEO/mots-clés avec des tutoriels qui se terminent par la suggestion d'utiliser Intlayer pour gérer les PO.
333
+ - Étend l'audience adressable des « nouveaux projets » à « toute équipe utilisant déjà i18n ».