@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 @@ Intlayer підтримує вміст форматованого тексту,
66
66
  Приклад структури файлів:
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
  У front-matter ви можете додати будь-які властивості, визначені у [Визначенні словника](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/content_file.md)
@@ -130,8 +127,6 @@ Intlayer підтримує вміст форматованого тексту,
130
127
  </Tab>
131
128
  </Tabs>
132
129
 
133
- ---
134
-
135
130
  ## Рендеринг Markdown
136
131
 
137
132
  Intlayer надає два незалежні способи рендерингу Markdown:
@@ -147,7 +142,7 @@ Intlayer надає два незалежні способи рендеринг
147
142
  ### 1. Автоматичний рендеринг (через `useIntlayer`)
148
143
 
149
144
  <Tabs group="framework">
150
- <Tab label="React / Next.js" value="react">
145
+ <Tab label="React" value="react">
151
146
  Вузли Markdown можна рендерити безпосередньо як JSX.
152
147
 
153
148
  ```tsx fileName="App.tsx"
@@ -197,6 +192,57 @@ Intlayer надає два незалежні способи рендеринг
197
192
  {myMarkdownContent.metadata.title}
198
193
  ```
199
194
 
195
+ </Tab>
196
+ <Tab label="Next.js" value="nextjs">
197
+ Вузли Markdown можна рендерити безпосередньо як 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} />, // MDX-компонент
214
+ }}
215
+ >
216
+ <AppContent />
217
+ </MarkdownProvider>
218
+ );
219
+ ```
220
+
221
+ > Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown, використовуючи стандартний парсер Markdown у JSX.
222
+
223
+ Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
224
+
225
+ ```tsx
226
+ {myMarkdownContent.use({
227
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
228
+ })}
229
+ ```
230
+
231
+ Ви можете отримати Markdown як рядок:
232
+
233
+ ```tsx
234
+ {myMarkdownContent.value}
235
+ {String(myMarkdownContent)}
236
+ {myMarkdownContent.toString()}
237
+ ```
238
+
239
+ І ви можете отримати доступ до метаданих markdown наступним чином:
240
+
241
+ ```tsx
242
+ {myMarkdownContent.metadata}
243
+ {myMarkdownContent.metadata.title}
244
+ ```
245
+
200
246
  </Tab>
201
247
  <Tab label="Vue" value="vue">
202
248
  У Vue вміст Markdown можна рендерити за допомогою вбудованого тегу `component` або безпосередньо як вузол.
@@ -441,7 +487,7 @@ Intlayer надає два незалежні способи рендеринг
441
487
  Ці утиліти рендерять **тільки необроблені рядки Markdown** і не залежать від `useIntlayer`. Використовуйте їх, коли вам потрібно відрендерити Markdown з джерел, відмінних від ваших словників.
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
  #### Компонент `<MarkdownRenderer />`
447
493
 
@@ -479,6 +525,45 @@ Intlayer надає два незалежні способи рендеринг
479
525
  const jsx = renderMarkdown("# Мій Заголовок", { forceBlock: true });
480
526
  ```
481
527
 
528
+ </Tab>
529
+ <Tab label="Next.js" value="nextjs">
530
+
531
+ #### Компонент `<MarkdownRenderer />`
532
+
533
+ Рендерить рядок Markdown з певними опціями.
534
+
535
+ ```tsx
536
+ import { MarkdownRenderer } from "next-intlayer/markdown";
537
+
538
+ <MarkdownRenderer forceBlock={true} tagfilter={true}>
539
+ {"# Мій Заголовок"}
540
+ </MarkdownRenderer>
541
+ ```
542
+
543
+ #### Хук `useMarkdownRenderer()`
544
+
545
+ Отримайте попередньо налаштовану функцію рендерингу.
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("# Мій Заголовок");
556
+ ```
557
+
558
+ #### Утиліта `renderMarkdown()`
559
+ Окрема утиліта для рендерингу поза компонентами.
560
+
561
+ ```tsx
562
+ import { renderMarkdown } from "next-intlayer/markdown";
563
+
564
+ const jsx = renderMarkdown("# Мій Заголовок", { forceBlock: true });
565
+ ```
566
+
482
567
  </Tab>
483
568
  <Tab label="Vue" value="vue">
484
569
 
@@ -608,14 +693,12 @@ Intlayer надає два незалежні способи рендеринг
608
693
  </Tab>
609
694
  </Tabs>
610
695
 
611
- ---
612
-
613
696
  ## Глобальне налаштування за допомогою `MarkdownProvider`
614
697
 
615
698
  `MarkdownProvider` (або його еквівалент у фреймворку) налаштовує конвеєр рендерингу Markdown для всього вашого додатку. Це стосується як автоматичного рендерингу `useIntlayer`, так і допоміжних утиліт. Налаштування, вказані тут, є значеннями за замовчуванням — `.use()` перевизначає їх на рівні вузла.
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 @@ Intlayer надає два незалежні способи рендеринг
633
716
  );
634
717
  ```
635
718
 
719
+
636
720
  > Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
637
721
 
638
722
  Ви також можете використовувати власний рендерер markdown:
@@ -655,6 +739,48 @@ Intlayer надає два незалежні способи рендеринг
655
739
 
656
740
  > Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
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 — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
763
+
764
+ Ви також можете використовувати власний рендерер 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
+ > Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
783
+
658
784
  </Tab>
659
785
  <Tab label="Vue" value="vue">
660
786
 
@@ -680,6 +806,9 @@ Intlayer надає два незалежні способи рендеринг
680
806
  app.mount("#app");
681
807
  ```
682
808
 
809
+
810
+ > Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
811
+
683
812
  Ви також можете використовувати власний рендерер markdown:
684
813
 
685
814
  ```typescript fileName="main.ts"
@@ -721,6 +850,9 @@ Intlayer надає два незалежні способи рендеринг
721
850
  </MarkdownProvider>
722
851
  ```
723
852
 
853
+
854
+ > Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
855
+
724
856
  Ви також можете використовувати власний рендерер markdown:
725
857
 
726
858
  ```svelte fileName="App.svelte"
@@ -757,6 +889,9 @@ Intlayer надає два незалежні способи рендеринг
757
889
  );
758
890
  ```
759
891
 
892
+
893
+ > Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
894
+
760
895
  Ви також можете використовувати власний рендерер markdown:
761
896
 
762
897
  ```tsx fileName="AppProvider.tsx"
@@ -793,6 +928,9 @@ Intlayer надає два незалежні способи рендеринг
793
928
  );
794
929
  ```
795
930
 
931
+
932
+ > Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
933
+
796
934
  Ви також можете використовувати власний рендерер markdown:
797
935
 
798
936
  ```tsx fileName="AppProvider.tsx"
@@ -836,3 +974,191 @@ Intlayer надає два незалежні способи рендеринг
836
974
 
837
975
  </Tab>
838
976
  </Tabs>
977
+
978
+ ## Suspense
979
+
980
+ Рендерер Markdown Intlayer завантажується динамічно. Хоча він оптимізований, базовий фрагмент аналізатора становить близько 55 кБ. Синхронне завантаження цього затримує початковий рендеринг сторінки та погіршує First Contentful Paint (FCP).
981
+
982
+ Щоб запобігти блокуванню інтерфейсу користувача, Intlayer інтегрується з API Suspense від React. Він завантажує аналізатор у фоновому режимі та створює Promise під час завантаження.
983
+
984
+ Оберніть будь-який компонент, що відображає Intlayer Markdown, у межу `<Suspense>`. Це показує локалізований резервний стан під час завантаження фрагмента, дозволяючи решті вашого DOM відображатися негайно.
985
+
986
+ Попередження: Якщо ви не надасте межу `<Suspense>`, React призупинить рендеринг на кореневому рівні або заблокує рендеринг всього дерева компонентів, доки фрагмент у 55 кБ не буде повністю завантажений.
987
+
988
+ <Tabs>
989
+ <Tab label="Next.js" value="nextjs">
990
+
991
+ У маршрутизаторі Next.js App Router ви можете використовувати або React `Suspense` для клієнтських компонентів, або файл `loading.tsx` для серверних компонентів.
992
+
993
+ **Клієнтський компонент:**
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
+ **Серверний компонент з `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 має вбудований компонент `<Suspense>`. Оберніть компонент, який відображає вміст Markdown, у межу `<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 не має еквівалента API Suspense. Використовуйте блок `{#await}` для обробки асинхронного рендерингу вмісту 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 підтримує API React Suspense через `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 має власний компонент `<Suspense>` від `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 не має API Suspense. Використовуйте відкладені представлення (`@defer`) в Angular для обробки вмісту Markdown із відкладеним завантаженням (потрібен 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
+ ## Довідник опцій
1153
+
1154
+ Ці параметри можна передати до `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer` та `renderMarkdown`.
1155
+
1156
+ | Option | Type | Default | Опис |
1157
+ | :-------------------- | :---------- | :------ | :------------------------------------------------------------------------------------------- |
1158
+ | `forceBlock` | `boolean` | `false` | Примушує вивід обгортатися блочним елементом (наприклад, `<div>`). |
1159
+ | `forceInline` | `boolean` | `false` | Примушує вивід обгортатися вбудованим елементом (наприклад, `<span>`). |
1160
+ | `tagfilter` | `boolean` | `true` | Увімкнює фільтр тегів GitHub для підвищення безпеки шляхом видалення небезпечних тегів HTML. |
1161
+ | `preserveFrontmatter` | `boolean` | `false` | Якщо `true`, початкові метадані (frontmatter) на початку рядка Markdown не будуть видалені. |
1162
+ | `components` | `Overrides` | `{}` | Карта тегів HTML до власних компонентів (наприклад, `{ h1: MyHeading }`). |
1163
+ | `wrapper` | `Component` | `null` | Спеціальний компонент для обгортання відображеного Markdown. |
1164
+ | `renderMarkdown` | `Function` | `null` | Власна функція рендерингу для повної заміни компілятора Markdown за замовчуванням. |
@@ -224,7 +224,7 @@ export const ComponentExample = () => {
224
224
 
225
225
  Зірки на GitHub є потужним індикатором популярності проекту, довіри спільноти та довгострокової актуальності. Хоча вони не є прямим показником технічної якості, вони відображають, скільки розробників вважають проект корисним, стежать за його розвитком і, ймовірно, впровадять його. Для оцінки цінності проекту зірки допомагають порівняти інтерес до альтернатив і дають уявлення про зростання екосистеми.
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 - Як перекласти додаток Angular у 2026
4
+ title: Angular i18n - Як перекласти додаток Angular 19 (Webpack)
5
5
  description: Дізнайтеся, як зробити свій Angular веб-сайт багатомовним. Дотримуйтесь документації для інтернаціоналізації (i18n) та перекладу.
6
6
  keywords:
7
7
  - Інтернаціоналізація
@@ -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: "Ініціалізація історії"
28
29
  ---
29
30
 
30
- # Перекладіть свій Angular веб-сайт за допомогою Intlayer | Інтернаціоналізація (i18n)
31
+ # Перекладіть свій Angular 19 (Webpack) веб-сайт за допомогою Intlayer | Інтернаціоналізація (i18n)
31
32
 
32
33
  ## Зміст
33
34
 
@@ -52,7 +53,7 @@ history:
52
53
  <Tab label="Код" 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="Демо CodeSandbox - Як інтернаціоналізувати ваш додаток за допомогою Intlayer"
58
59
  sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
@@ -63,7 +64,7 @@ history:
63
64
  <Tab label="Демо" 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="Демо - intlayer-angular-template"
69
70
  sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
@@ -73,7 +74,7 @@ history:
73
74
  </Tab>
74
75
  </Tabs>
75
76
 
76
- Дивіться [Шаблон додатка](https://github.com/aymericzip/intlayer-angular-template) на GitHub.
77
+ Дивіться [Шаблон додатка](https://github.com/aymericzip/intlayer-angular-19-template) на GitHub.
77
78
 
78
79
  ### Крок 1: Встановлення залежностей
79
80