@intlayer/docs 8.10.0 → 8.11.1

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 (167) hide show
  1. package/dist/cjs/common.cjs +3 -1
  2. package/dist/cjs/common.cjs.map +1 -1
  3. package/dist/cjs/generated/docs.entry.cjs +39 -19
  4. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  5. package/dist/esm/common.mjs +3 -1
  6. package/dist/esm/common.mjs.map +1 -1
  7. package/dist/esm/generated/docs.entry.mjs +39 -19
  8. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  9. package/dist/types/common.d.ts.map +1 -1
  10. package/dist/types/generated/docs.entry.d.ts +2 -1
  11. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  12. package/docs/ar/benchmark/nextjs.md +1 -1
  13. package/docs/ar/benchmark/solid.md +1 -1
  14. package/docs/ar/benchmark/svelte.md +1 -1
  15. package/docs/ar/benchmark/tanstack.md +1 -1
  16. package/docs/ar/dictionary/markdown.md +340 -14
  17. package/docs/ar/interest_of_intlayer.md +1 -1
  18. package/docs/ar/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  19. package/docs/ar/intlayer_with_angular_21.md +412 -0
  20. package/docs/bn/interest_of_intlayer.md +1 -1
  21. package/docs/bn/intlayer_with_angular_21.md +412 -0
  22. package/docs/cs/interest_of_intlayer.md +1 -1
  23. package/docs/cs/intlayer_with_angular_21.md +412 -0
  24. package/docs/de/benchmark/nextjs.md +1 -1
  25. package/docs/de/benchmark/solid.md +1 -1
  26. package/docs/de/benchmark/svelte.md +1 -1
  27. package/docs/de/benchmark/tanstack.md +1 -1
  28. package/docs/de/dictionary/markdown.md +340 -14
  29. package/docs/de/interest_of_intlayer.md +1 -1
  30. package/docs/de/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  31. package/docs/de/intlayer_with_angular_21.md +412 -0
  32. package/docs/en/benchmark/nextjs.md +1 -1
  33. package/docs/en/benchmark/solid.md +1 -1
  34. package/docs/en/benchmark/svelte.md +1 -1
  35. package/docs/en/benchmark/tanstack.md +1 -1
  36. package/docs/en/dictionary/markdown.md +326 -15
  37. package/docs/en/interest_of_intlayer.md +1 -1
  38. package/docs/en/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  39. package/docs/en/intlayer_with_angular_21.md +412 -0
  40. package/docs/en-GB/benchmark/nextjs.md +1 -1
  41. package/docs/en-GB/benchmark/solid.md +1 -1
  42. package/docs/en-GB/benchmark/svelte.md +1 -1
  43. package/docs/en-GB/benchmark/tanstack.md +1 -1
  44. package/docs/en-GB/dictionary/markdown.md +336 -7
  45. package/docs/en-GB/interest_of_intlayer.md +1 -1
  46. package/docs/en-GB/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  47. package/docs/en-GB/intlayer_with_angular_21.md +412 -0
  48. package/docs/es/benchmark/nextjs.md +1 -1
  49. package/docs/es/benchmark/solid.md +1 -1
  50. package/docs/es/benchmark/svelte.md +1 -1
  51. package/docs/es/benchmark/tanstack.md +1 -1
  52. package/docs/es/dictionary/markdown.md +340 -14
  53. package/docs/es/interest_of_intlayer.md +1 -1
  54. package/docs/es/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  55. package/docs/es/intlayer_with_angular_21.md +412 -0
  56. package/docs/fr/benchmark/nextjs.md +1 -1
  57. package/docs/fr/benchmark/solid.md +1 -1
  58. package/docs/fr/benchmark/svelte.md +1 -1
  59. package/docs/fr/benchmark/tanstack.md +1 -1
  60. package/docs/fr/dictionary/markdown.md +340 -14
  61. package/docs/fr/interest_of_intlayer.md +1 -1
  62. package/docs/fr/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  63. package/docs/fr/intlayer_with_angular_21.md +412 -0
  64. package/docs/hi/benchmark/nextjs.md +1 -1
  65. package/docs/hi/benchmark/solid.md +1 -1
  66. package/docs/hi/benchmark/svelte.md +1 -1
  67. package/docs/hi/benchmark/tanstack.md +1 -1
  68. package/docs/hi/dictionary/markdown.md +340 -14
  69. package/docs/hi/interest_of_intlayer.md +1 -1
  70. package/docs/hi/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  71. package/docs/hi/intlayer_with_angular_21.md +412 -0
  72. package/docs/id/benchmark/nextjs.md +1 -1
  73. package/docs/id/benchmark/solid.md +1 -1
  74. package/docs/id/benchmark/svelte.md +1 -1
  75. package/docs/id/benchmark/tanstack.md +1 -1
  76. package/docs/id/dictionary/markdown.md +340 -14
  77. package/docs/id/interest_of_intlayer.md +1 -1
  78. package/docs/id/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  79. package/docs/id/intlayer_with_angular_21.md +412 -0
  80. package/docs/it/benchmark/nextjs.md +1 -1
  81. package/docs/it/benchmark/solid.md +1 -1
  82. package/docs/it/benchmark/svelte.md +1 -1
  83. package/docs/it/benchmark/tanstack.md +1 -1
  84. package/docs/it/dictionary/markdown.md +340 -14
  85. package/docs/it/interest_of_intlayer.md +1 -1
  86. package/docs/it/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  87. package/docs/it/intlayer_with_angular_21.md +412 -0
  88. package/docs/ja/benchmark/nextjs.md +1 -1
  89. package/docs/ja/benchmark/solid.md +1 -1
  90. package/docs/ja/benchmark/svelte.md +1 -1
  91. package/docs/ja/benchmark/tanstack.md +1 -1
  92. package/docs/ja/interest_of_intlayer.md +1 -1
  93. package/docs/ja/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  94. package/docs/ja/intlayer_with_angular_21.md +412 -0
  95. package/docs/ko/benchmark/nextjs.md +1 -1
  96. package/docs/ko/benchmark/solid.md +1 -1
  97. package/docs/ko/benchmark/svelte.md +1 -1
  98. package/docs/ko/benchmark/tanstack.md +1 -1
  99. package/docs/ko/dictionary/markdown.md +340 -14
  100. package/docs/ko/interest_of_intlayer.md +1 -1
  101. package/docs/ko/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  102. package/docs/ko/intlayer_with_angular_21.md +412 -0
  103. package/docs/nl/interest_of_intlayer.md +1 -1
  104. package/docs/nl/intlayer_with_angular_21.md +412 -0
  105. package/docs/pl/benchmark/nextjs.md +1 -1
  106. package/docs/pl/benchmark/solid.md +1 -1
  107. package/docs/pl/benchmark/svelte.md +1 -1
  108. package/docs/pl/benchmark/tanstack.md +1 -1
  109. package/docs/pl/dictionary/markdown.md +340 -14
  110. package/docs/pl/interest_of_intlayer.md +1 -1
  111. package/docs/pl/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  112. package/docs/pl/intlayer_with_angular_21.md +412 -0
  113. package/docs/pt/benchmark/nextjs.md +1 -1
  114. package/docs/pt/benchmark/solid.md +1 -1
  115. package/docs/pt/benchmark/svelte.md +1 -1
  116. package/docs/pt/benchmark/tanstack.md +1 -1
  117. package/docs/pt/dictionary/markdown.md +340 -14
  118. package/docs/pt/interest_of_intlayer.md +1 -1
  119. package/docs/pt/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  120. package/docs/pt/intlayer_with_angular_21.md +412 -0
  121. package/docs/ru/benchmark/nextjs.md +1 -1
  122. package/docs/ru/benchmark/solid.md +1 -1
  123. package/docs/ru/benchmark/svelte.md +1 -1
  124. package/docs/ru/benchmark/tanstack.md +1 -1
  125. package/docs/ru/dictionary/markdown.md +445 -3
  126. package/docs/ru/interest_of_intlayer.md +1 -1
  127. package/docs/ru/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  128. package/docs/ru/intlayer_with_angular_21.md +412 -0
  129. package/docs/tr/benchmark/nextjs.md +1 -1
  130. package/docs/tr/benchmark/solid.md +1 -1
  131. package/docs/tr/benchmark/svelte.md +1 -1
  132. package/docs/tr/benchmark/tanstack.md +1 -1
  133. package/docs/tr/dictionary/markdown.md +340 -14
  134. package/docs/tr/interest_of_intlayer.md +1 -1
  135. package/docs/tr/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  136. package/docs/tr/intlayer_with_angular_21.md +412 -0
  137. package/docs/uk/benchmark/nextjs.md +1 -1
  138. package/docs/uk/benchmark/solid.md +1 -1
  139. package/docs/uk/benchmark/svelte.md +1 -1
  140. package/docs/uk/benchmark/tanstack.md +1 -1
  141. package/docs/uk/dictionary/markdown.md +340 -14
  142. package/docs/uk/interest_of_intlayer.md +1 -1
  143. package/docs/uk/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  144. package/docs/uk/intlayer_with_angular_21.md +412 -0
  145. package/docs/ur/interest_of_intlayer.md +1 -1
  146. package/docs/ur/intlayer_with_angular_21.md +412 -0
  147. package/docs/vi/benchmark/nextjs.md +1 -1
  148. package/docs/vi/benchmark/solid.md +1 -1
  149. package/docs/vi/benchmark/svelte.md +1 -1
  150. package/docs/vi/benchmark/tanstack.md +1 -1
  151. package/docs/vi/dictionary/markdown.md +340 -14
  152. package/docs/vi/interest_of_intlayer.md +1 -1
  153. package/docs/vi/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  154. package/docs/vi/intlayer_with_angular_21.md +412 -0
  155. package/docs/zh/benchmark/nextjs.md +1 -1
  156. package/docs/zh/benchmark/solid.md +1 -1
  157. package/docs/zh/benchmark/svelte.md +1 -1
  158. package/docs/zh/benchmark/tanstack.md +1 -1
  159. package/docs/zh/dictionary/markdown.md +340 -14
  160. package/docs/zh/interest_of_intlayer.md +1 -1
  161. package/docs/zh/{intlayer_with_angular.md → intlayer_with_angular_19.md} +8 -7
  162. package/docs/zh/intlayer_with_angular_21.md +412 -0
  163. package/docs/zh-TW/interest_of_intlayer.md +1 -1
  164. package/docs/zh-TW/intlayer_with_angular_21.md +412 -0
  165. package/package.json +7 -7
  166. package/src/common.ts +12 -6
  167. package/src/generated/docs.entry.ts +39 -19
@@ -66,13 +66,10 @@ Vous pouvez déclarer du contenu Markdown en utilisant la fonction `md` ou simpl
66
66
  Exemple de structure de fichiers :
67
67
 
68
68
  ```text
69
- content/
70
- ├── en/
71
- │ └── markdown-file.en.content.md
72
- ├── fr/
73
- │ └── markdown-file.fr.content.md
74
- └── es/
75
- └── markdown-file.es.content.md
69
+ content
70
+ ├── markdown-file.en.content.md
71
+ ├── markdown-file.fr.content.md
72
+ └── markdown-file.es.content.md
76
73
  ```
77
74
 
78
75
  Vous pouvez ajouter dans le front-matter n'importe quelle propriété définie dans la [Définition du dictionnaire](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/content_file.md)
@@ -130,8 +127,6 @@ Vous pouvez déclarer du contenu Markdown en utilisant la fonction `md` ou simpl
130
127
  </Tab>
131
128
  </Tabs>
132
129
 
133
- ---
134
-
135
130
  ## Rendu Markdown
136
131
 
137
132
  Intlayer propose deux manières indépendantes de rendre du Markdown :
@@ -147,7 +142,7 @@ Le rendu Markdown prend en charge **MDX** — utilisez n'importe quel composant
147
142
  ### 1. Rendu Automatique (via `useIntlayer`)
148
143
 
149
144
  <Tabs group="framework">
150
- <Tab label="React / Next.js" value="react">
145
+ <Tab label="React" value="react">
151
146
  Les nœuds Markdown peuvent être rendus directement sous forme de JSX.
152
147
 
153
148
  ```tsx fileName="App.tsx"
@@ -197,6 +192,57 @@ Le rendu Markdown prend en charge **MDX** — utilisez n'importe quel composant
197
192
  {myMarkdownContent.metadata.title}
198
193
  ```
199
194
 
195
+ </Tab>
196
+ <Tab label="Next.js" value="nextjs">
197
+ Les nœuds Markdown peuvent être rendus directement sous forme de JSX.
198
+
199
+ ```tsx fileName="App.tsx"
200
+ import { useIntlayer } from "next-intlayer";
201
+ import { MarkdownProvider } from "next-intlayer/markdown";
202
+
203
+ const AppContent = () => {
204
+ const { myMarkdownContent } = useIntlayer("app");
205
+
206
+ return <div>{myMarkdownContent}</div>;
207
+ };
208
+
209
+ const App = () => (
210
+ <MarkdownProvider
211
+ components={{
212
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
213
+ MyButton: (props) => <button {...props} />, // Composant MDX
214
+ }}
215
+ >
216
+ <AppContent />
217
+ </MarkdownProvider>
218
+ );
219
+ ```
220
+
221
+ > Si `MarkdownProvider` n'est pas présent, Intlayer rendra le markdown en utilisant le parser par défaut de Markdown vers JSX.
222
+
223
+ Vous pouvez également fournir des remplacements locaux pour des nœuds spécifiques en utilisant la méthode `.use()` :
224
+
225
+ ```tsx
226
+ {myMarkdownContent.use({
227
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
228
+ })}
229
+ ```
230
+
231
+ Vous pouvez récupérer le Markdown sous forme de chaîne de caractères :
232
+
233
+ ```tsx
234
+ {myMarkdownContent.value}
235
+ {String(myMarkdownContent)}
236
+ {myMarkdownContent.toString()}
237
+ ```
238
+
239
+ Et vous pouvez accéder aux métadonnées de votre markdown comme ceci :
240
+
241
+ ```tsx
242
+ {myMarkdownContent.metadata}
243
+ {myMarkdownContent.metadata.title}
244
+ ```
245
+
200
246
  </Tab>
201
247
  <Tab label="Vue" value="vue">
202
248
  Dans Vue, le contenu Markdown peut être rendu en utilisant la balise `component` intégrée ou directement comme un nœud.
@@ -441,7 +487,7 @@ Le rendu Markdown prend en charge **MDX** — utilisez n'importe quel composant
441
487
  Ces utilitaires rendent **des chaînes Markdown brutes** et sont indépendants de `useIntlayer`. Utilisez-les lorsque vous devez afficher du Markdown provenant de sources autres que vos dictionnaires.
442
488
 
443
489
  <Tabs group="framework">
444
- <Tab label="React / Next.js" value="react">
490
+ <Tab label="React" value="react">
445
491
 
446
492
  #### Composant `<MarkdownRenderer />`
447
493
 
@@ -479,6 +525,45 @@ Ces utilitaires rendent **des chaînes Markdown brutes** et sont indépendants d
479
525
  const jsx = renderMarkdown("# Mon Titre", { forceBlock: true });
480
526
  ```
481
527
 
528
+ </Tab>
529
+ <Tab label="Next.js" value="nextjs">
530
+
531
+ #### Composant `<MarkdownRenderer />`
532
+
533
+ Rend une chaîne Markdown avec des options spécifiques.
534
+
535
+ ```tsx
536
+ import { MarkdownRenderer } from "next-intlayer/markdown";
537
+
538
+ <MarkdownRenderer forceBlock={true} tagfilter={true}>
539
+ {"# Mon Titre"}
540
+ </MarkdownRenderer>
541
+ ```
542
+
543
+ #### Hook `useMarkdownRenderer()`
544
+
545
+ Obtenez une fonction de rendu préconfigurée.
546
+
547
+ ```tsx
548
+ import { useMarkdownRenderer } from "next-intlayer/markdown";
549
+
550
+ const renderMarkdown = useMarkdownRenderer({
551
+ forceBlock: true,
552
+ components: { h1: (props) => <h1 {...props} className="custom" /> }
553
+ });
554
+
555
+ return renderMarkdown("# Mon Titre");
556
+ ```
557
+
558
+ #### Utilitaire `renderMarkdown()`
559
+ Utilitaire autonome pour le rendu en dehors des composants.
560
+
561
+ ```tsx
562
+ import { renderMarkdown } from "next-intlayer/markdown";
563
+
564
+ const jsx = renderMarkdown("# Mon Titre", { forceBlock: true });
565
+ ```
566
+
482
567
  </Tab>
483
568
  <Tab label="Vue" value="vue">
484
569
 
@@ -608,14 +693,12 @@ Ces utilitaires rendent **des chaînes Markdown brutes** et sont indépendants d
608
693
  </Tab>
609
694
  </Tabs>
610
695
 
611
- ---
612
-
613
696
  ## Configuration Globale avec `MarkdownProvider`
614
697
 
615
698
  Le `MarkdownProvider` (ou son équivalent dans un framework) configure le pipeline de rendu Markdown pour toute votre application. Cela s'applique aussi bien au rendu automatique `useIntlayer` qu'aux utilitaires d'aide. Les options définies ici sont les options par défaut — `.use()` les remplace au niveau du nœud.
616
699
 
617
700
  <Tabs group="framework">
618
- <Tab label="React / Next.js" value="react">
701
+ <Tab label="React" value="react">
619
702
 
620
703
  ```tsx fileName="AppProvider.tsx"
621
704
  import { MarkdownProvider } from "react-intlayer/markdown";
@@ -633,6 +716,7 @@ Le `MarkdownProvider` (ou son équivalent dans un framework) configure le pipeli
633
716
  );
634
717
  ```
635
718
 
719
+
636
720
  > MDX est pris en charge — tout nom de composant utilisé dans votre Markdown (ex. `<MyCustomJSXComponent />`) est résolu par rapport à la correspondance dans `components`.
637
721
 
638
722
  Vous pouvez également utiliser votre propre rendu de markdown :
@@ -655,6 +739,48 @@ Le `MarkdownProvider` (ou son équivalent dans un framework) configure le pipeli
655
739
 
656
740
  > L'import dynamique de votre système de rendu Markdown est un bon moyen de réduire la taille du bundle de votre application.
657
741
 
742
+ </Tab>
743
+ <Tab label="Next.js" value="nextjs">
744
+
745
+ ```tsx fileName="AppProvider.tsx"
746
+ import { MarkdownProvider } from "next-intlayer/markdown";
747
+
748
+ export const AppProvider = ({ children }) => (
749
+ <MarkdownProvider
750
+ components={{
751
+ h1: (props) => <h1 style={{color: 'green'}} {...props} />,
752
+ a: ({ href, ...props }) => <a style={{color: 'red'}} {...props} />,
753
+ MyCustomJSXComponent: (props) => <span style={{color: 'red'}} {...props} />,
754
+ }}
755
+ >
756
+ {children}
757
+ </MarkdownProvider>
758
+ );
759
+ ```
760
+
761
+
762
+ > MDX est pris en charge — tout nom de composant utilisé dans votre Markdown (ex. `<MyCustomJSXComponent />`) est résolu par rapport à la correspondance dans `components`.
763
+
764
+ Vous pouvez également utiliser votre propre rendu de markdown :
765
+
766
+ ```tsx fileName="AppProvider.tsx"
767
+ import { MarkdownProvider } from "next-intlayer/markdown";
768
+
769
+ export const AppProvider = ({ children }) => (
770
+ <MarkdownProvider
771
+ renderMarkdown={async (md) => {
772
+ // Use dynamic import to reduce the bundle size of your application
773
+ const { renderMarkdown } = await import('next-intlayer/markdown');
774
+ return renderMarkdown(md);
775
+ }}
776
+ >
777
+ {children}
778
+ </MarkdownProvider>
779
+ );
780
+ ```
781
+
782
+ > L'import dynamique de votre système de rendu Markdown est un bon moyen de réduire la taille du bundle de votre application.
783
+
658
784
  </Tab>
659
785
  <Tab label="Vue" value="vue">
660
786
 
@@ -680,6 +806,9 @@ Le `MarkdownProvider` (ou son équivalent dans un framework) configure le pipeli
680
806
  app.mount("#app");
681
807
  ```
682
808
 
809
+
810
+ > MDX est pris en charge — tout nom de composant utilisé dans votre Markdown (ex. `<MyCustomJSXComponent />`) est résolu par rapport à la correspondance dans `components`.
811
+
683
812
  Vous pouvez également utiliser votre propre rendu de markdown :
684
813
 
685
814
  ```typescript fileName="main.ts"
@@ -721,6 +850,9 @@ Le `MarkdownProvider` (ou son équivalent dans un framework) configure le pipeli
721
850
  </MarkdownProvider>
722
851
  ```
723
852
 
853
+
854
+ > MDX est pris en charge — tout nom de composant utilisé dans votre Markdown (ex. `<MyCustomJSXComponent />`) est résolu par rapport à la correspondance dans `components`.
855
+
724
856
  Vous pouvez également utiliser votre propre rendu de markdown :
725
857
 
726
858
  ```svelte fileName="App.svelte"
@@ -757,6 +889,9 @@ Le `MarkdownProvider` (ou son équivalent dans un framework) configure le pipeli
757
889
  );
758
890
  ```
759
891
 
892
+
893
+ > MDX est pris en charge — tout nom de composant utilisé dans votre Markdown (ex. `<MyCustomJSXComponent />`) est résolu par rapport à la correspondance dans `components`.
894
+
760
895
  Vous pouvez également utiliser votre propre rendu de markdown :
761
896
 
762
897
  ```tsx fileName="AppProvider.tsx"
@@ -793,6 +928,9 @@ Le `MarkdownProvider` (ou son équivalent dans un framework) configure le pipeli
793
928
  );
794
929
  ```
795
930
 
931
+
932
+ > MDX est pris en charge — tout nom de composant utilisé dans votre Markdown (ex. `<MyCustomJSXComponent />`) est résolu par rapport à la correspondance dans `components`.
933
+
796
934
  Vous pouvez également utiliser votre propre rendu de markdown :
797
935
 
798
936
  ```tsx fileName="AppProvider.tsx"
@@ -836,3 +974,191 @@ Le `MarkdownProvider` (ou son équivalent dans un framework) configure le pipeli
836
974
 
837
975
  </Tab>
838
976
  </Tabs>
977
+
978
+ ## Suspense
979
+
980
+ Le moteur de rendu Markdown d'Intlayer est chargé dynamiquement. Bien qu'optimisé, le chunk de l'analyseur sous-jacent fait environ 55 ko. Son chargement synchrone retarde le rendu initial de la page et dégrade le First Contentful Paint (FCP).
981
+
982
+ Pour éviter de bloquer l'interface utilisateur, Intlayer s'intègre à l'API Suspense de React. Il récupère l'analyseur en arrière-plan et lève une Promise pendant le téléchargement.
983
+
984
+ Enveloppez tout composant rendant le Markdown d'Intlayer dans une limite `<Suspense>`. Cela affiche un état de repli localisé pendant le téléchargement du chunk, permettant au reste de votre DOM de se rendre immédiatement.
985
+
986
+ Avertissement : Si vous ne fournissez pas de limite `<Suspense>`, React suspendra au niveau racine ou bloquera le rendu de tout l'arbre des composants jusqu'à ce que le chunk de 55 ko soit complètement chargé.
987
+
988
+ <Tabs>
989
+ <Tab label="Next.js" value="nextjs">
990
+
991
+ Dans Next.js App Router, vous pouvez utiliser soit React `Suspense` pour les composants clients, soit un fichier `loading.tsx` pour les composants serveurs.
992
+
993
+ **Composant Client :**
994
+
995
+ ```tsx fileName="components/MyComponent.tsx"
996
+ "use client";
997
+ import { useIntlayer } from "next-intlayer";
998
+ import { Suspense } from "react";
999
+
1000
+ const MyComponent = () => {
1001
+ const markdownContent = useIntlayer("my-markdown");
1002
+
1003
+ return (
1004
+ <Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
1005
+ );
1006
+ };
1007
+ ```
1008
+
1009
+ **Composant Serveur avec `loading.tsx` :**
1010
+
1011
+ ```tsx fileName="app/loading.tsx"
1012
+ export default function Loading() {
1013
+ return <div>Loading...</div>;
1014
+ }
1015
+ ```
1016
+
1017
+ ```tsx fileName="app/page.tsx"
1018
+ import { useIntlayer } from "next-intlayer/server";
1019
+
1020
+ const MyPage = () => {
1021
+ const markdownContent = useIntlayer("my-markdown");
1022
+ return <div>{markdownContent}</div>;
1023
+ };
1024
+
1025
+ export default MyPage;
1026
+ ```
1027
+
1028
+ </Tab>
1029
+
1030
+ <Tab label="React" value="react">
1031
+
1032
+ ```tsx
1033
+ import { useIntlayer } from "react-intlayer";
1034
+ import { Suspense } from "react";
1035
+
1036
+ const MyComponent = () => {
1037
+ const markdownContent = useIntlayer("my-markdown");
1038
+
1039
+ return (
1040
+ <Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
1041
+ );
1042
+ };
1043
+ ```
1044
+
1045
+ </Tab>
1046
+
1047
+ <Tab label="Vue" value="vue">
1048
+
1049
+ Vue possède un composant `<Suspense>` intégré. Enveloppez le composant rendant le contenu Markdown dans une limite `<Suspense>`.
1050
+
1051
+ ```vue fileName="MyComponent.vue"
1052
+ <script setup>
1053
+ import { useIntlayer } from "vue-intlayer";
1054
+
1055
+ const { markdownContent } = useIntlayer("my-markdown");
1056
+ </script>
1057
+
1058
+ <template>
1059
+ <Suspense>
1060
+ <component :is="markdownContent" />
1061
+ <template #fallback>
1062
+ <div>Loading...</div>
1063
+ </template>
1064
+ </Suspense>
1065
+ </template>
1066
+ ```
1067
+
1068
+ </Tab>
1069
+ <Tab label="Svelte" value="svelte">
1070
+
1071
+ Svelte n'a pas d'équivalent à l'API Suspense. Utilisez un bloc `{#await}` pour gérer le rendu asynchrone du contenu Markdown.
1072
+
1073
+ ```svelte fileName="MyComponent.svelte"
1074
+ <script lang="ts">
1075
+ import { useIntlayer } from "svelte-intlayer";
1076
+
1077
+ const content = useIntlayer("my-markdown");
1078
+ </script>
1079
+
1080
+ {#await $content.markdownContent}
1081
+ <div>Loading...</div>
1082
+ {:then rendered}
1083
+ {@html rendered}
1084
+ {/await}
1085
+ ```
1086
+
1087
+ </Tab>
1088
+ <Tab label="Preact" value="preact">
1089
+
1090
+ Preact prend en charge l'API Suspense de React via `preact/compat`.
1091
+
1092
+ ```tsx fileName="MyComponent.tsx"
1093
+ import { useIntlayer } from "preact-intlayer";
1094
+ import { Suspense } from "preact/compat";
1095
+
1096
+ const MyComponent = () => {
1097
+ const markdownContent = useIntlayer("my-markdown");
1098
+
1099
+ return (
1100
+ <Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
1101
+ );
1102
+ };
1103
+ ```
1104
+
1105
+ </Tab>
1106
+ <Tab label="Solid" value="solid">
1107
+
1108
+ Solid possède son propre composant `<Suspense>` provenant de `solid-js`.
1109
+
1110
+ ```tsx fileName="MyComponent.tsx"
1111
+ import { useIntlayer } from "solid-intlayer";
1112
+ import { Suspense } from "solid-js";
1113
+
1114
+ const MyComponent = () => {
1115
+ const { markdownContent } = useIntlayer("my-markdown");
1116
+
1117
+ return (
1118
+ <Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
1119
+ );
1120
+ };
1121
+ ```
1122
+
1123
+ </Tab>
1124
+ <Tab label="Angular" value="angular">
1125
+
1126
+ Angular n'a pas d'API Suspense. Utilisez les vues différées (`@defer`) d'Angular pour gérer le contenu Markdown chargé paresseusement (nécessite Angular 17+).
1127
+
1128
+ ```typescript fileName="my.component.ts"
1129
+ import { Component } from "@angular/core";
1130
+ import { useIntlayer } from "angular-intlayer";
1131
+
1132
+ @Component({
1133
+ selector: "app-my",
1134
+ template: `
1135
+ @defer {
1136
+ <div [innerHTML]="content().markdownContent"></div>
1137
+ } @loading {
1138
+ <div>Loading...</div>
1139
+ }
1140
+ `,
1141
+ })
1142
+ export class MyComponent {
1143
+ content = useIntlayer("my-markdown");
1144
+ }
1145
+ ```
1146
+
1147
+ </Tab>
1148
+ </Tabs>
1149
+
1150
+ ---
1151
+
1152
+ ## Référence des options
1153
+
1154
+ Ces options peuvent être passées à `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer` et `renderMarkdown`.
1155
+
1156
+ | Option | Type | Default | Description |
1157
+ | :-------------------- | :---------- | :------ | :-------------------------------------------------------------------------------------------------- |
1158
+ | `forceBlock` | `boolean` | `false` | Force la sortie à être enveloppée dans un élément de niveau bloc (ex: `<div>`). |
1159
+ | `forceInline` | `boolean` | `false` | Force la sortie à être enveloppée dans un élément en ligne (ex: `<span>`). |
1160
+ | `tagfilter` | `boolean` | `true` | Active le GitHub Tag Filter pour une meilleure sécurité en supprimant les balises HTML dangereuses. |
1161
+ | `preserveFrontmatter` | `boolean` | `false` | Si `true`, le frontmatter au début de la chaîne Markdown ne sera pas supprimé. |
1162
+ | `components` | `Overrides` | `{}` | Une carte des balises HTML vers des composants personnalisés (ex: `{ h1: MyHeading }`). |
1163
+ | `wrapper` | `Component` | `null` | Un composant personnalisé pour envelopper le Markdown rendu. |
1164
+ | `renderMarkdown` | `Function` | `null` | Une fonction de rendu personnalisée pour remplacer complètement le compilateur Markdown par défaut. |
@@ -223,7 +223,7 @@ Cette approche vous permet de :
223
223
 
224
224
  Les étoiles GitHub sont un indicateur fort de la popularité d'un projet, de la confiance de la communauté et de sa pertinence à long terme. Bien qu'elles ne soient pas une mesure directe de la qualité technique, elles reflètent le nombre de développeurs qui trouvent le projet utile, suivent ses progrès et sont susceptibles de l'adopter. Pour estimer la valeur d'un projet, les étoiles aident à comparer l'attraction entre les alternatives et fournissent des informations sur la croissance de l'écosystème.
225
225
 
226
- [![Star History Chart](https://api.star-history.com/chart?repos=formatjs/formatjs%2Ci18next/react-i18next%2Ci18next/i18next%2Ci18next/next-i18next%2Clingui/js-lingui%2Camannn/next-intl%2Cintlify/vue-i18n%2Caymericzip/intlayer%2Copral/inlang&type=date&legend=top-left)](https://www.star-history.com/#formatjs/formatjs&i18next/react-i18next&i18next/i18next&i18next/next-i18next&lingui/js-lingui&amannn/next-intl&intlify/vue-i18n&opral/paraglide-js&aymericzip/intlayer)
226
+ [![Star History Chart](https://api.star-history.com/chart?repos=aymericzip/intlayer%2Cformatjs/formatjs%2Ci18next/react-i18next%2Ci18next/i18next%2Ci18next/next-i18next%2Clingui/js-lingui%2Camannn/next-intl%2Cintlify/vue-i18n%2Ccodingcommons/typesafe-i18n%2Copral/paraglide-js&type=date&legend=top-left)](https://www.star-history.com/#aymericzip/intlayer&formatjs/formatjs&i18next/react-i18next&i18next/i18next&i18next/next-i18next&lingui/js-lingui&amannn/next-intl&intlify/vue-i18n&codingcommons/typesafe-i18n&opral/paraglide-js)
227
227
 
228
228
  ---
229
229
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  createdAt: 2025-04-18
3
3
  updatedAt: 2026-05-06
4
- title: Angular i18n - Comment traduire une application Angular en 2026
4
+ title: Angular i18n - Comment traduire une application Angular 19 (Webpack)
5
5
  description: Découvrez comment rendre votre site web Angular multilingue. Suivez la documentation pour l'internationaliser (i18n) et le traduire.
6
6
  keywords:
7
7
  - Internationalisation
@@ -13,8 +13,9 @@ slugs:
13
13
  - doc
14
14
  - environment
15
15
  - angular
16
- applicationTemplate: https://github.com/aymericzip/intlayer-angular-template
17
- applicationShowcase: https://intlayer-angular-template.vercel.app
16
+ - 19
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-angular-19-template
18
+ applicationShowcase: https://intlayer-angular-19-template.vercel.app
18
19
  history:
19
20
  - version: 8.9.0
20
21
  date: 2026-05-04
@@ -27,7 +28,7 @@ history:
27
28
  changes: "Initialiser l'historique"
28
29
  ---
29
30
 
30
- # Traduisez votre site web Angular avec Intlayer | Internationalisation (i18n)
31
+ # Traduisez votre site web Angular 19 (Webpack) avec Intlayer | Internationalisation (i18n)
31
32
 
32
33
  ## Table des matières
33
34
 
@@ -52,7 +53,7 @@ Avec Intlayer, vous pouvez :
52
53
  <Tab label="Code" value="code">
53
54
 
54
55
  <iframe
55
- src="https://ide.intlayer.org/aymericzip/intlayer-angular-template?file=intlayer.config.ts"
56
+ src="https://ide.intlayer.org/aymericzip/intlayer-angular-19-template?file=intlayer.config.ts"
56
57
  className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
57
58
  title="Démo CodeSandbox - Comment internationaliser votre application avec Intlayer"
58
59
  sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
@@ -63,7 +64,7 @@ Avec Intlayer, vous pouvez :
63
64
  <Tab label="Démo" value="demo">
64
65
 
65
66
  <iframe
66
- src="https://intlayer-angular-template.vercel.app"
67
+ src="https://intlayer-angular-19-template.vercel.app"
67
68
  className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
68
69
  title="Démo - intlayer-angular-template"
69
70
  sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
@@ -73,7 +74,7 @@ Avec Intlayer, vous pouvez :
73
74
  </Tab>
74
75
  </Tabs>
75
76
 
76
- Voir le [Modèle d'application](https://github.com/aymericzip/intlayer-angular-template) sur GitHub.
77
+ Voir le [Modèle d'application](https://github.com/aymericzip/intlayer-angular-19-template) sur GitHub.
77
78
 
78
79
  ### Étape 1 : Installer les dépendances
79
80