@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 @@ Você pode declarar conteúdo Markdown usando a função `md` ou simplesmente co
66
66
  Exemplo de estrutura de diretórios:
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
  Você pode adicionar no front-matter quaisquer propriedades definidas na [Definição de Dicionário](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/dictionary/content_file.md)
@@ -130,8 +127,6 @@ Você pode declarar conteúdo Markdown usando a função `md` ou simplesmente co
130
127
  </Tab>
131
128
  </Tabs>
132
129
 
133
- ---
134
-
135
130
  ## Renderizando Markdown
136
131
 
137
132
  O Intlayer fornece duas maneiras independentes de renderizar Markdown:
@@ -147,7 +142,7 @@ A renderização do Markdown suporta **MDX** — use qualquer componente JSX/fra
147
142
  ### 1. Renderização Automática (através de `useIntlayer`)
148
143
 
149
144
  <Tabs group="framework">
150
- <Tab label="React / Next.js" value="react">
145
+ <Tab label="React" value="react">
151
146
  Nós Markdown podem ser renderizados diretamente como JSX.
152
147
 
153
148
  ```tsx fileName="App.tsx"
@@ -197,6 +192,57 @@ A renderização do Markdown suporta **MDX** — use qualquer componente JSX/fra
197
192
  {myMarkdownContent.metadata.title}
198
193
  ```
199
194
 
195
+ </Tab>
196
+ <Tab label="Next.js" value="nextjs">
197
+ Nós Markdown podem ser renderizados diretamente como 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} />, // Componente MDX
214
+ }}
215
+ >
216
+ <AppContent />
217
+ </MarkdownProvider>
218
+ );
219
+ ```
220
+
221
+ > Se o `MarkdownProvider` não estiver presente, o Intlayer renderizará o markdown usando o parser padrão Markdown-para-JSX.
222
+
223
+ Você também pode fornecer substituições locais para nós específicos usando o método `.use()`:
224
+
225
+ ```tsx
226
+ {myMarkdownContent.use({
227
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
228
+ })}
229
+ ```
230
+
231
+ Você pode recuperar o Markdown como string:
232
+
233
+ ```tsx
234
+ {myMarkdownContent.value}
235
+ {String(myMarkdownContent)}
236
+ {myMarkdownContent.toString()}
237
+ ```
238
+
239
+ E você pode acessar os metadados do markdown assim:
240
+
241
+ ```tsx
242
+ {myMarkdownContent.metadata}
243
+ {myMarkdownContent.metadata.title}
244
+ ```
245
+
200
246
  </Tab>
201
247
  <Tab label="Vue" value="vue">
202
248
  No Vue, o conteúdo Markdown pode ser renderizado usando a tag nativa `component` ou diretamente como um nó.
@@ -441,7 +487,7 @@ A renderização do Markdown suporta **MDX** — use qualquer componente JSX/fra
441
487
  Estes utilitários renderizam **apenas strings Markdown brutas** e são independentes do `useIntlayer`. Use-os quando precisar renderizar Markdown de fontes além de seus dicionários.
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
  #### Componente `<MarkdownRenderer />`
447
493
 
@@ -479,6 +525,45 @@ Estes utilitários renderizam **apenas strings Markdown brutas** e são independ
479
525
  const jsx = renderMarkdown("# Meu Título", { forceBlock: true });
480
526
  ```
481
527
 
528
+ </Tab>
529
+ <Tab label="Next.js" value="nextjs">
530
+
531
+ #### Componente `<MarkdownRenderer />`
532
+
533
+ Renderiza uma string Markdown com opções específicas.
534
+
535
+ ```tsx
536
+ import { MarkdownRenderer } from "next-intlayer/markdown";
537
+
538
+ <MarkdownRenderer forceBlock={true} tagfilter={true}>
539
+ {"# Meu Título"}
540
+ </MarkdownRenderer>
541
+ ```
542
+
543
+ #### Hook `useMarkdownRenderer()`
544
+
545
+ Obtém uma função de renderização pré-configurada.
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("# Meu Título");
556
+ ```
557
+
558
+ #### Utilitário `renderMarkdown()`
559
+ Utilitário autônomo para renderização fora dos componentes.
560
+
561
+ ```tsx
562
+ import { renderMarkdown } from "next-intlayer/markdown";
563
+
564
+ const jsx = renderMarkdown("# Meu Título", { forceBlock: true });
565
+ ```
566
+
482
567
  </Tab>
483
568
  <Tab label="Vue" value="vue">
484
569
 
@@ -608,14 +693,12 @@ Estes utilitários renderizam **apenas strings Markdown brutas** e são independ
608
693
  </Tab>
609
694
  </Tabs>
610
695
 
611
- ---
612
-
613
696
  ## Configuração Global com `MarkdownProvider`
614
697
 
615
698
  O `MarkdownProvider` (ou o seu equivalente do framework) configura o pipeline de renderização Markdown para toda a sua aplicação. Aplica-se tanto para a renderização automática do `useIntlayer` quanto para os utilitários auxiliares. Opções definidas aqui são os padrões — o `.use()` substitui-os em nível de nó.
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 @@ O `MarkdownProvider` (ou o seu equivalente do framework) configura o pipeline de
633
716
  );
634
717
  ```
635
718
 
719
+
636
720
  > O MDX é suportado — qualquer nome de componente usado dentro do seu Markdown (ex: `<MyCustomJSXComponent />`) é resolvido com base no mapa de `components`.
637
721
 
638
722
  Você também pode usar seu próprio renderizador de markdown:
@@ -655,6 +739,48 @@ O `MarkdownProvider` (ou o seu equivalente do framework) configura o pipeline de
655
739
 
656
740
  > Importar dinamicamente o seu renderizador de Markdown é uma ótima maneira de reduzir o tamanho do pacote da sua aplicação.
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
+ > O MDX é suportado — qualquer nome de componente usado dentro do seu Markdown (ex: `<MyCustomJSXComponent />`) é resolvido com base no mapa de `components`.
763
+
764
+ Você também pode usar seu próprio renderizador 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
+ > Importar dinamicamente o seu renderizador de Markdown é uma ótima maneira de reduzir o tamanho do pacote da sua aplicação.
783
+
658
784
  </Tab>
659
785
  <Tab label="Vue" value="vue">
660
786
 
@@ -680,6 +806,9 @@ O `MarkdownProvider` (ou o seu equivalente do framework) configura o pipeline de
680
806
  app.mount("#app");
681
807
  ```
682
808
 
809
+
810
+ > O MDX é suportado — qualquer nome de componente usado dentro do seu Markdown (ex: `<MyCustomJSXComponent />`) é resolvido com base no mapa de `components`.
811
+
683
812
  Você também pode usar seu próprio renderizador de markdown:
684
813
 
685
814
  ```typescript fileName="main.ts"
@@ -721,6 +850,9 @@ O `MarkdownProvider` (ou o seu equivalente do framework) configura o pipeline de
721
850
  </MarkdownProvider>
722
851
  ```
723
852
 
853
+
854
+ > O MDX é suportado — qualquer nome de componente usado dentro do seu Markdown (ex: `<MyCustomJSXComponent />`) é resolvido com base no mapa de `components`.
855
+
724
856
  Você também pode usar seu próprio renderizador de markdown:
725
857
 
726
858
  ```svelte fileName="App.svelte"
@@ -757,6 +889,9 @@ O `MarkdownProvider` (ou o seu equivalente do framework) configura o pipeline de
757
889
  );
758
890
  ```
759
891
 
892
+
893
+ > O MDX é suportado — qualquer nome de componente usado dentro do seu Markdown (ex: `<MyCustomJSXComponent />`) é resolvido com base no mapa de `components`.
894
+
760
895
  Você também pode usar seu próprio renderizador de markdown:
761
896
 
762
897
  ```tsx fileName="AppProvider.tsx"
@@ -793,6 +928,9 @@ O `MarkdownProvider` (ou o seu equivalente do framework) configura o pipeline de
793
928
  );
794
929
  ```
795
930
 
931
+
932
+ > O MDX é suportado — qualquer nome de componente usado dentro do seu Markdown (ex: `<MyCustomJSXComponent />`) é resolvido com base no mapa de `components`.
933
+
796
934
  Você também pode usar seu próprio renderizador de markdown:
797
935
 
798
936
  ```tsx fileName="AppProvider.tsx"
@@ -836,3 +974,191 @@ O `MarkdownProvider` (ou o seu equivalente do framework) configura o pipeline de
836
974
 
837
975
  </Tab>
838
976
  </Tabs>
977
+
978
+ ## Suspense
979
+
980
+ O renderizador Markdown do Intlayer é carregado dinamicamente. Embora otimizado, o chunk do analisador subjacente tem aproximadamente 55 kb. Carregar isso de forma síncrona atrasa a renderização inicial da página e degrada o First Contentful Paint (FCP).
981
+
982
+ Para evitar o bloqueio da interface do usuário, o Intlayer se integra com a API Suspense do React. Ele busca o analisador em segundo plano e lança uma Promise durante o download.
983
+
984
+ Envolva qualquer componente que renderize o Intlayer Markdown em um limite `<Suspense>`. Isso exibe um estado de fallback localizado enquanto o chunk é baixado, permitindo que o restante de seu DOM seja renderizado imediatamente.
985
+
986
+ Aviso: Se você não fornecer um limite `<Suspense>`, o React irá suspender no nível raiz ou bloquear a renderização de toda a árvore de componentes até que o chunk de 55 kb seja totalmente carregado.
987
+
988
+ <Tabs>
989
+ <Tab label="Next.js" value="nextjs">
990
+
991
+ No Next.js App Router, você pode usar o React `Suspense` para componentes do cliente ou um arquivo `loading.tsx` para componentes do servidor.
992
+
993
+ **Componente do Cliente:**
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
+ **Componente do Servidor com `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 tem um componente `<Suspense>` integrado. Envolva o componente que renderiza o conteúdo Markdown em um 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
+ O Svelte não tem um equivalente à API Suspense. Use um bloco `{#await}` para lidar com a renderização assíncrona do conteúdo 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
+ O Preact suporta a API Suspense do 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 tem seu próprio componente `<Suspense>` do `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ão tem uma API Suspense. Use as exibições adiáveis (`@defer`) para lidar com o conteúdo Markdown carregado lentamente (requer 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
+ ## Referência de opções
1153
+
1154
+ Essas opções podem ser passadas para `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer` e `renderMarkdown`.
1155
+
1156
+ | Option | Type | Default | Descrição |
1157
+ | :-------------------- | :---------- | :------ | :--------------------------------------------------------------------------------------------------- |
1158
+ | `forceBlock` | `boolean` | `false` | Força a saída a ser envolvida em um elemento de nível de bloco (ex: `<div>`). |
1159
+ | `forceInline` | `boolean` | `false` | Força a saída a ser envolvida em um elemento em linha (ex: `<span>`). |
1160
+ | `tagfilter` | `boolean` | `true` | Habilita o GitHub Tag Filter para melhor segurança removendo tags HTML perigosas. |
1161
+ | `preserveFrontmatter` | `boolean` | `false` | Se `true`, o frontmatter no início da string Markdown não será removido. |
1162
+ | `components` | `Overrides` | `{}` | Um mapa de tags HTML para componentes personalizados (ex: `{ h1: MyHeading }`). |
1163
+ | `wrapper` | `Component` | `null` | Um componente personalizado para envolver o Markdown renderizado. |
1164
+ | `renderMarkdown` | `Function` | `null` | Uma função de renderização personalizada para substituir completamente o compilador Markdown padrão. |
@@ -224,7 +224,7 @@ Esta abordagem permite que você:
224
224
 
225
225
  As estrelas do GitHub são um forte indicador da popularidade de um projeto, da confiança da comunidade e da relevância a longo prazo. Embora não sejam uma medida direta da qualidade técnica, elas refletem quantos desenvolvedores consideram o projeto útil, acompanham seu progresso e têm probabilidade de adotá-lo. Para estimar o valor de um projeto, as estrelas ajudam a comparar a tração entre as alternativas e fornecem insights sobre o crescimento do ecossistema.
226
226
 
227
- [![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)
227
+ [![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)
228
228
 
229
229
  ---
230
230
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  createdAt: 2025-04-18
3
3
  updatedAt: 2026-05-06
4
- title: Angular i18n - Como traduzir um app Angular em 2026
4
+ title: Angular i18n - Como traduzir um app Angular 19 (Webpack)
5
5
  description: Descubra como tornar seu site Angular multilíngue. Siga a documentação para internacionalizar (i18n) e traduzi-lo.
6
6
  keywords:
7
7
  - Internacionalização
@@ -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: "Histórico inicial"
28
29
  ---
29
30
 
30
- # Traduza seu site Angular usando Intlayer | Internacionalização (i18n)
31
+ # Traduza seu site Angular 19 (Webpack) usando Intlayer | Internacionalização (i18n)
31
32
 
32
33
  ## Tabela de Conteúdos
33
34
 
@@ -52,7 +53,7 @@ Com o Intlayer, você pode:
52
53
  <Tab label="Código" 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="Demo CodeSandbox - Como internacionalizar sua aplicação usando Intlayer"
58
59
  sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
@@ -63,7 +64,7 @@ Com o Intlayer, você pode:
63
64
  <Tab label="Demo" 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="Demo - intlayer-angular-template"
69
70
  sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
@@ -73,7 +74,7 @@ Com o Intlayer, você pode:
73
74
  </Tab>
74
75
  </Tabs>
75
76
 
76
- Veja o [Modelo de Aplicação](https://github.com/aymericzip/intlayer-angular-template) no GitHub.
77
+ Veja o [Modelo de Aplicação](https://github.com/aymericzip/intlayer-angular-19-template) no GitHub.
77
78
 
78
79
  ### Passo 1: Instalar Dependências
79
80