@intlayer/docs 8.10.0-canary.0 → 8.10.0-canary.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.
- package/docs/ar/dictionary/markdown.md +402 -82
- package/docs/de/dictionary/markdown.md +269 -98
- package/docs/en/dictionary/markdown.md +221 -25
- package/docs/en-GB/dictionary/markdown.md +351 -67
- package/docs/es/dictionary/markdown.md +286 -115
- package/docs/fr/dictionary/markdown.md +292 -121
- package/docs/hi/dictionary/markdown.md +366 -81
- package/docs/id/dictionary/markdown.md +368 -83
- package/docs/it/dictionary/markdown.md +288 -122
- package/docs/ko/dictionary/markdown.md +297 -126
- package/docs/pl/dictionary/markdown.md +276 -106
- package/docs/pt/dictionary/markdown.md +276 -106
- package/docs/ru/dictionary/markdown.md +70 -505
- package/docs/tr/dictionary/markdown.md +291 -122
- package/docs/uk/dictionary/markdown.md +377 -92
- package/docs/vi/dictionary/markdown.md +377 -92
- package/docs/zh/dictionary/markdown.md +284 -117
- package/package.json +7 -7
- package/docs/ja/dictionary/markdown.md +0 -666
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
createdAt: 2025-02-07
|
|
3
3
|
updatedAt: 2026-05-19
|
|
4
4
|
title: Markdown
|
|
5
|
-
description: Дізнайтеся, як оголошувати та використовувати
|
|
5
|
+
description: Дізнайтеся, як оголошувати та використовувати вміст Markdown на вашому багатомовному веб-сайті за допомогою Intlayer. Дотримуйтесь інструкцій у цій онлайн-документації, щоб безперешкодно інтегрувати Markdown у ваш проект.
|
|
6
6
|
keywords:
|
|
7
7
|
- Markdown
|
|
8
8
|
- Інтернаціоналізація
|
|
@@ -22,46 +22,46 @@ history:
|
|
|
22
22
|
changes: "Додано підтримку файлів `.content.md`"
|
|
23
23
|
- version: 8.5.0
|
|
24
24
|
date: 2026-03-24
|
|
25
|
-
changes: "
|
|
25
|
+
changes: "Додано об'єкт плагіна `intlayerMarkdown`; використовуйте `app.use(intlayerMarkdown)` замість `app.use(installIntlayerMarkdown)`"
|
|
26
26
|
- version: 8.5.0
|
|
27
27
|
date: 2026-03-24
|
|
28
|
-
changes: "
|
|
28
|
+
changes: "Імпорт переміщено з `{{framework}}-intlayer` до `{{framework}}-intlayer/markdown`"
|
|
29
29
|
- version: 8.0.0
|
|
30
30
|
date: 2026-01-22
|
|
31
|
-
changes: "Додано MarkdownRenderer / useMarkdownRenderer /
|
|
31
|
+
changes: "Додано утиліту MarkdownRenderer / useMarkdownRenderer / renderMarkdown та опцію forceInline"
|
|
32
32
|
- version: 8.0.0
|
|
33
33
|
date: 2026-01-18
|
|
34
|
-
changes: "Автоматичне оформлення
|
|
34
|
+
changes: "Автоматичне оформлення вмісту markdown, підтримка MDX та SSR"
|
|
35
35
|
- version: 5.5.10
|
|
36
36
|
date: 2025-06-29
|
|
37
37
|
changes: "Ініціалізація історії"
|
|
38
38
|
---
|
|
39
39
|
|
|
40
|
-
# Markdown /
|
|
40
|
+
# Markdown / Вміст форматованого тексту
|
|
41
41
|
|
|
42
|
-
Intlayer підтримує
|
|
42
|
+
Intlayer підтримує вміст форматованого тексту, визначений за допомогою синтаксису Markdown. Це дозволяє легко створювати та підтримувати форматований вміст, такий як блоги, статті тощо.
|
|
43
43
|
|
|
44
|
-
## Оголошення
|
|
44
|
+
## Оголошення вмісту Markdown
|
|
45
45
|
|
|
46
|
-
Ви можете оголосити
|
|
46
|
+
Ви можете оголосити вміст Markdown за допомогою функції `md` або просто як рядок (якщо він містить синтаксис Markdown).
|
|
47
47
|
|
|
48
48
|
<Tabs>
|
|
49
49
|
<Tab label=".content.md" value=".content.md">
|
|
50
|
-
Починаючи з версії `8.10.0`, ви можете оголошувати
|
|
50
|
+
Починаючи з версії `8.10.0`, ви можете оголошувати вміст Markdown безпосередньо у файлах `.content.md`. Intlayer автоматично виявлятиме та аналізуватиме вміст Markdown.
|
|
51
51
|
|
|
52
|
-
```md fileName="markdown-file.
|
|
52
|
+
```md fileName="markdown-file.en.content.md"
|
|
53
53
|
---
|
|
54
54
|
key: my-markdown-content
|
|
55
|
-
description: Мій
|
|
56
|
-
locale:
|
|
55
|
+
description: Мій вміст
|
|
56
|
+
locale: en
|
|
57
57
|
---
|
|
58
58
|
|
|
59
|
-
# Мій
|
|
59
|
+
# Мій вміст
|
|
60
60
|
|
|
61
|
-
Ось приклад
|
|
61
|
+
Ось приклад вмісту markdown
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
Поле `locale`
|
|
64
|
+
Поле front-matter `locale` визначає локаль вмісту. Воно є необов'язковим. Якщо його не вказано, Intlayer використовуватиме локаль за замовчуванням, яка також слугуватиме резервною, якщо переклад для конкретної локалі недоступний.
|
|
65
65
|
|
|
66
66
|
Приклад структури файлів:
|
|
67
67
|
|
|
@@ -75,11 +75,11 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
75
75
|
└── markdown-file.es.content.md
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
У front-matter ви можете додати будь-які властивості, визначені у [Визначенні словника](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/content_file.md)
|
|
79
79
|
|
|
80
80
|
</Tab>
|
|
81
81
|
<Tab label="Ручне обгортання" value="manual-wrapping">
|
|
82
|
-
Використовуйте функцію `md` для явного оголошення
|
|
82
|
+
Використовуйте функцію `md` для явного оголошення вмісту Markdown. Це корисно, якщо ви хочете переконатися, що рядок обробляється як Markdown, навіть якщо він не містить очевидного синтаксису.
|
|
83
83
|
|
|
84
84
|
```typescript fileName="markdownDictionary.content.ts"
|
|
85
85
|
import { md, type Dictionary } from "intlayer";
|
|
@@ -95,13 +95,13 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
</Tab>
|
|
98
|
-
<Tab label="Автоматичне виявлення">
|
|
99
|
-
Якщо рядок містить
|
|
98
|
+
<Tab label="Автоматичне виявлення" value="automatic-detection">
|
|
99
|
+
Якщо рядок містить типові індикатори Markdown (наприклад, заголовки, списки, посилання тощо), Intlayer автоматично перетворить його.
|
|
100
100
|
|
|
101
101
|
```typescript fileName="markdownDictionary.content.ts"
|
|
102
102
|
export default {
|
|
103
103
|
key: "app",
|
|
104
|
-
contentAutoTransformation: true, // Увімкнути автоматичне виявлення
|
|
104
|
+
contentAutoTransformation: true, // Увімкнути автоматичне виявлення вмісту Markdown - Можна налаштувати глобально в intlayer.config.ts
|
|
105
105
|
content: {
|
|
106
106
|
myMarkdownContent: "## Мій заголовок \n\nLorem Ipsum",
|
|
107
107
|
},
|
|
@@ -109,6 +109,7 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
</Tab>
|
|
112
|
+
|
|
112
113
|
<Tab label="Зовнішні файли" value="external-files">
|
|
113
114
|
Імпортуйте файли `.md` безпосередньо за допомогою функції `file`.
|
|
114
115
|
|
|
@@ -120,7 +121,7 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
120
121
|
content: {
|
|
121
122
|
content: t({
|
|
122
123
|
en: md(file("./myMarkdown.en.md")),
|
|
123
|
-
|
|
124
|
+
uk: md(file("./myMarkdown.uk.md")),
|
|
124
125
|
}),
|
|
125
126
|
},
|
|
126
127
|
};
|
|
@@ -131,38 +132,74 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
131
132
|
|
|
132
133
|
---
|
|
133
134
|
|
|
134
|
-
##
|
|
135
|
+
## Рендеринг Markdown
|
|
136
|
+
|
|
137
|
+
Intlayer надає два незалежні способи рендерингу Markdown:
|
|
135
138
|
|
|
136
|
-
|
|
139
|
+
1. **Через `useIntlayer`**
|
|
140
|
+
— Intlayer автоматично перетворює вузол `md` у нативний вихідний формат фреймворку (JSX, VNode, HTML-рядок).
|
|
141
|
+
- Frontmatter аналізується та надається як `.metadata`. Ви можете перевизначити рендеринг на двох рівнях — глобально за допомогою `MarkdownProvider` (або еквівалента фреймворку) та локально для кожного вузла за допомогою `.use()`. Обидва підходи можна комбінувати; `.use()` має пріоритет над `MarkdownProvider`, який має пріоритет над поведінкою за замовчуванням.
|
|
137
142
|
|
|
138
|
-
|
|
143
|
+
2. **Допоміжні утиліти** — `<MarkdownRenderer />`, `useMarkdownRenderer()` та `renderMarkdown()` є самостійними інструментами, які приймають **тільки необроблені рядки Markdown**. Вони не залежать від `useIntlayer` і не працюють з оформленими вузлами, які він повертає.
|
|
139
144
|
|
|
140
|
-
|
|
145
|
+
Рендеринг Markdown підтримує **MDX** — використовуйте будь-який компонент JSX/фреймворку за назвою безпосередньо у вашому Markdown.
|
|
146
|
+
|
|
147
|
+
### 1. Автоматичний рендеринг (через `useIntlayer`)
|
|
141
148
|
|
|
142
149
|
<Tabs group="framework">
|
|
143
|
-
<Tab label="React / Next.js">
|
|
144
|
-
Вузли Markdown можна
|
|
150
|
+
<Tab label="React / Next.js" value="react">
|
|
151
|
+
Вузли Markdown можна рендерити безпосередньо як JSX.
|
|
145
152
|
|
|
146
153
|
```tsx fileName="App.tsx"
|
|
147
154
|
import { useIntlayer } from "react-intlayer";
|
|
155
|
+
import { MarkdownProvider } from "react-intlayer/markdown";
|
|
148
156
|
|
|
149
157
|
const AppContent = () => {
|
|
150
158
|
const { myMarkdownContent } = useIntlayer("app");
|
|
159
|
+
|
|
151
160
|
return <div>{myMarkdownContent}</div>;
|
|
152
161
|
};
|
|
162
|
+
|
|
163
|
+
const App = () => (
|
|
164
|
+
<MarkdownProvider
|
|
165
|
+
components={{
|
|
166
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
167
|
+
MyButton: (props) => <button {...props} />, // MDX-компонент
|
|
168
|
+
}}
|
|
169
|
+
>
|
|
170
|
+
<AppContent />
|
|
171
|
+
</MarkdownProvider>
|
|
172
|
+
);
|
|
153
173
|
```
|
|
154
174
|
|
|
175
|
+
> Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown, використовуючи стандартний парсер Markdown у JSX.
|
|
176
|
+
|
|
155
177
|
Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
|
|
156
178
|
|
|
157
179
|
```tsx
|
|
158
180
|
{myMarkdownContent.use({
|
|
159
|
-
h1: ({ children }) => <h1
|
|
181
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
160
182
|
})}
|
|
161
183
|
```
|
|
162
184
|
|
|
185
|
+
Ви можете отримати Markdown як рядок:
|
|
186
|
+
|
|
187
|
+
```tsx
|
|
188
|
+
{myMarkdownContent.value}
|
|
189
|
+
{String(myMarkdownContent)}
|
|
190
|
+
{myMarkdownContent.toString()}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
І ви можете отримати доступ до метаданих markdown наступним чином:
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
{myMarkdownContent.metadata}
|
|
197
|
+
{myMarkdownContent.metadata.title}
|
|
198
|
+
```
|
|
199
|
+
|
|
163
200
|
</Tab>
|
|
164
201
|
<Tab label="Vue" value="vue">
|
|
165
|
-
У Vue
|
|
202
|
+
У Vue вміст Markdown можна рендерити за допомогою вбудованого тегу `component` або безпосередньо як вузол.
|
|
166
203
|
|
|
167
204
|
```vue fileName="App.vue"
|
|
168
205
|
<script setup>
|
|
@@ -175,48 +212,188 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
175
212
|
</template>
|
|
176
213
|
```
|
|
177
214
|
|
|
215
|
+
Глобальне налаштування через плагін `intlayerMarkdown` (підтримує власні компоненти MDX):
|
|
216
|
+
|
|
217
|
+
```ts fileName="main.ts"
|
|
218
|
+
import { intlayerMarkdown } from "vue-intlayer/markdown";
|
|
219
|
+
|
|
220
|
+
app.use(intlayerMarkdown, {
|
|
221
|
+
components: {
|
|
222
|
+
h1: (props) => h('h1', { style: { color: 'green' } }, props.children),
|
|
223
|
+
MyButton: (props) => h('button', props), // MDX-компонент
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
> Якщо плагін `intlayerMarkdown` не встановлено, Intlayer рендеритиме за допомогою компілятора за замовчуванням.
|
|
229
|
+
|
|
230
|
+
Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
|
|
231
|
+
|
|
232
|
+
```vue
|
|
233
|
+
<component :is="myMarkdownContent.use({
|
|
234
|
+
h1: (props) => h('h1', { style: { color: 'red' } }, props.children),
|
|
235
|
+
})" />
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Ви можете отримати Markdown як рядок:
|
|
239
|
+
|
|
240
|
+
```vue
|
|
241
|
+
{{ myMarkdownContent.value }}
|
|
242
|
+
{{ String(myMarkdownContent) }}
|
|
243
|
+
{{ myMarkdownContent.toString() }}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
І ви можете отримати доступ до метаданих markdown наступним чином:
|
|
247
|
+
|
|
248
|
+
```vue
|
|
249
|
+
<component :is="myMarkdownContent.metadata" />
|
|
250
|
+
<component :is="myMarkdownContent.metadata.title" />
|
|
251
|
+
```
|
|
252
|
+
|
|
178
253
|
</Tab>
|
|
179
254
|
<Tab label="Svelte" value="svelte">
|
|
180
|
-
Svelte
|
|
255
|
+
Svelte за замовчуванням рендерить Markdown як HTML-рядок. Використовуйте `{@html}`, щоб його відрендерити.
|
|
181
256
|
|
|
182
|
-
```svelte
|
|
257
|
+
```svelte fileName="App.svelte"
|
|
183
258
|
<script lang="ts">
|
|
184
259
|
import { useIntlayer } from "svelte-intlayer";
|
|
260
|
+
import { MarkdownProvider } from "svelte-intlayer/markdown";
|
|
261
|
+
import MyHeading from "./MyHeading.svelte";
|
|
262
|
+
|
|
185
263
|
const content = useIntlayer("app");
|
|
186
264
|
</script>
|
|
187
265
|
|
|
188
|
-
{
|
|
266
|
+
<MarkdownProvider components={{ h1: MyHeading }}>
|
|
267
|
+
{@html $content.myMarkdownContent}
|
|
268
|
+
</MarkdownProvider>
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
> Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown за допомогою компілятора за замовчуванням.
|
|
272
|
+
|
|
273
|
+
Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
|
|
274
|
+
|
|
275
|
+
```svelte
|
|
276
|
+
{@html $content.myMarkdownContent.use({ ... })}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Ви можете отримати Markdown як рядок:
|
|
280
|
+
|
|
281
|
+
```svelte
|
|
282
|
+
{$content.myMarkdownContent.value}
|
|
283
|
+
{String($content.myMarkdownContent)}
|
|
284
|
+
{$content.myMarkdownContent.toString()}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
І ви можете отримати доступ до метаданих markdown наступним чином:
|
|
288
|
+
|
|
289
|
+
```svelte
|
|
290
|
+
{$content.myMarkdownContent.metadata}
|
|
291
|
+
{$content.myMarkdownContent.metadata.title}
|
|
189
292
|
```
|
|
190
293
|
|
|
191
294
|
</Tab>
|
|
192
295
|
<Tab label="Preact" value="preact">
|
|
193
|
-
Preact підтримує вузли Markdown безпосередньо
|
|
296
|
+
Preact підтримує вузли Markdown безпосередньо у JSX.
|
|
194
297
|
|
|
195
298
|
```tsx fileName="App.tsx"
|
|
196
299
|
import { useIntlayer } from "preact-intlayer";
|
|
300
|
+
import { MarkdownProvider } from "preact-intlayer/markdown";
|
|
197
301
|
|
|
198
302
|
const AppContent = () => {
|
|
199
303
|
const { myMarkdownContent } = useIntlayer("app");
|
|
200
304
|
return <div>{myMarkdownContent}</div>;
|
|
201
305
|
};
|
|
306
|
+
|
|
307
|
+
const App = () => (
|
|
308
|
+
<MarkdownProvider
|
|
309
|
+
components={{
|
|
310
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
311
|
+
MyButton: (props) => <button {...props} />, // MDX-компонент
|
|
312
|
+
}}
|
|
313
|
+
>
|
|
314
|
+
<AppContent />
|
|
315
|
+
</MarkdownProvider>
|
|
316
|
+
);
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
> Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown, використовуючи стандартний парсер Markdown у JSX.
|
|
320
|
+
|
|
321
|
+
Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
|
|
322
|
+
|
|
323
|
+
```tsx
|
|
324
|
+
{myMarkdownContent.use({
|
|
325
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
326
|
+
})}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Ви можете отримати Markdown як рядок:
|
|
330
|
+
|
|
331
|
+
```tsx
|
|
332
|
+
{myMarkdownContent.value}
|
|
333
|
+
{String(myMarkdownContent)}
|
|
334
|
+
{myMarkdownContent.toString()}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
І ви можете отримати доступ до метаданих markdown наступним чином:
|
|
338
|
+
|
|
339
|
+
```tsx
|
|
340
|
+
{myMarkdownContent.metadata}
|
|
341
|
+
{myMarkdownContent.metadata.title}
|
|
202
342
|
```
|
|
203
343
|
|
|
204
344
|
</Tab>
|
|
205
|
-
<Tab label="Solid">
|
|
206
|
-
Solid підтримує вузли Markdown безпосередньо
|
|
345
|
+
<Tab label="Solid" value="solid">
|
|
346
|
+
Solid підтримує вузли Markdown безпосередньо у JSX.
|
|
207
347
|
|
|
208
348
|
```tsx fileName="App.tsx"
|
|
209
349
|
import { useIntlayer } from "solid-intlayer";
|
|
350
|
+
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
210
351
|
|
|
211
352
|
const AppContent = () => {
|
|
212
353
|
const { myMarkdownContent } = useIntlayer("app");
|
|
213
354
|
return <div>{myMarkdownContent}</div>;
|
|
214
355
|
};
|
|
356
|
+
|
|
357
|
+
const App = () => (
|
|
358
|
+
<MarkdownProvider
|
|
359
|
+
components={{
|
|
360
|
+
h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
|
|
361
|
+
MyButton: (props) => <button {...props} />, // MDX-компонент
|
|
362
|
+
}}
|
|
363
|
+
>
|
|
364
|
+
<AppContent />
|
|
365
|
+
</MarkdownProvider>
|
|
366
|
+
);
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
> Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown, використовуючи стандартний парсер Markdown у JSX.
|
|
370
|
+
|
|
371
|
+
Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
|
|
372
|
+
|
|
373
|
+
```tsx
|
|
374
|
+
{myMarkdownContent.use({
|
|
375
|
+
h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
|
|
376
|
+
})}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Ви можете отримати Markdown як рядок:
|
|
380
|
+
|
|
381
|
+
```tsx
|
|
382
|
+
{myMarkdownContent.value}
|
|
383
|
+
{String(myMarkdownContent)}
|
|
384
|
+
{myMarkdownContent.toString()}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
І ви можете отримати доступ до метаданих markdown наступним чином:
|
|
388
|
+
|
|
389
|
+
```tsx
|
|
390
|
+
{myMarkdownContent.metadata}
|
|
391
|
+
{myMarkdownContent.metadata.title}
|
|
215
392
|
```
|
|
216
393
|
|
|
217
394
|
</Tab>
|
|
218
395
|
<Tab label="Angular" value="angular">
|
|
219
|
-
Angular використовує директиву `[innerHTML]` для
|
|
396
|
+
Angular використовує директиву `[innerHTML]` для рендерингу вмісту Markdown.
|
|
220
397
|
|
|
221
398
|
```typescript fileName="app.component.ts"
|
|
222
399
|
import { Component } from "@angular/core";
|
|
@@ -231,6 +408,8 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
231
408
|
}
|
|
232
409
|
```
|
|
233
410
|
|
|
411
|
+
> Якщо провайдер IntlayerMarkdown не налаштовано, Intlayer рендеритиме за допомогою компілятора за замовчуванням.
|
|
412
|
+
|
|
234
413
|
Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
|
|
235
414
|
|
|
236
415
|
```typescript
|
|
@@ -239,31 +418,46 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
239
418
|
})
|
|
240
419
|
```
|
|
241
420
|
|
|
421
|
+
Ви можете отримати Markdown як рядок:
|
|
422
|
+
|
|
423
|
+
```typescript
|
|
424
|
+
content().myMarkdownContent.value
|
|
425
|
+
String(content().myMarkdownContent)
|
|
426
|
+
content().myMarkdownContent.toString()
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
І ви можете отримати доступ до метаданих markdown наступним чином:
|
|
430
|
+
|
|
431
|
+
```typescript
|
|
432
|
+
content().myMarkdownContent.metadata
|
|
433
|
+
content().myMarkdownContent.metadata.title
|
|
434
|
+
```
|
|
435
|
+
|
|
242
436
|
</Tab>
|
|
243
437
|
</Tabs>
|
|
244
438
|
|
|
245
|
-
### 2.
|
|
439
|
+
### 2. Допоміжні утиліти (тільки рядки Markdown)
|
|
246
440
|
|
|
247
|
-
|
|
441
|
+
Ці утиліти рендерять **тільки необроблені рядки Markdown** і не залежать від `useIntlayer`. Використовуйте їх, коли вам потрібно відрендерити Markdown з джерел, відмінних від ваших словників.
|
|
248
442
|
|
|
249
443
|
<Tabs group="framework">
|
|
250
|
-
<Tab label="React / Next.js">
|
|
444
|
+
<Tab label="React / Next.js" value="react">
|
|
251
445
|
|
|
252
446
|
#### Компонент `<MarkdownRenderer />`
|
|
253
447
|
|
|
254
|
-
|
|
448
|
+
Рендерить рядок Markdown з певними опціями.
|
|
255
449
|
|
|
256
450
|
```tsx
|
|
257
451
|
import { MarkdownRenderer } from "react-intlayer/markdown";
|
|
258
452
|
|
|
259
453
|
<MarkdownRenderer forceBlock={true} tagfilter={true}>
|
|
260
|
-
{"# Мій
|
|
454
|
+
{"# Мій Заголовок"}
|
|
261
455
|
</MarkdownRenderer>
|
|
262
456
|
```
|
|
263
457
|
|
|
264
458
|
#### Хук `useMarkdownRenderer()`
|
|
265
459
|
|
|
266
|
-
Отримайте попередньо налаштовану функцію
|
|
460
|
+
Отримайте попередньо налаштовану функцію рендерингу.
|
|
267
461
|
|
|
268
462
|
```tsx
|
|
269
463
|
import { useMarkdownRenderer } from "react-intlayer/markdown";
|
|
@@ -273,16 +467,16 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
273
467
|
components: { h1: (props) => <h1 {...props} className="custom" /> }
|
|
274
468
|
});
|
|
275
469
|
|
|
276
|
-
return renderMarkdown("# Мій
|
|
470
|
+
return renderMarkdown("# Мій Заголовок");
|
|
277
471
|
```
|
|
278
472
|
|
|
279
473
|
#### Утиліта `renderMarkdown()`
|
|
280
|
-
|
|
474
|
+
Окрема утиліта для рендерингу поза компонентами.
|
|
281
475
|
|
|
282
476
|
```tsx
|
|
283
477
|
import { renderMarkdown } from "react-intlayer/markdown";
|
|
284
478
|
|
|
285
|
-
const jsx = renderMarkdown("# Мій
|
|
479
|
+
const jsx = renderMarkdown("# Мій Заголовок", { forceBlock: true });
|
|
286
480
|
```
|
|
287
481
|
|
|
288
482
|
</Tab>
|
|
@@ -296,7 +490,7 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
296
490
|
</script>
|
|
297
491
|
|
|
298
492
|
<template>
|
|
299
|
-
<MarkdownRenderer :forceBlock="true" content="# Мій
|
|
493
|
+
<MarkdownRenderer :forceBlock="true" content="# Мій Заголовок" />
|
|
300
494
|
</template>
|
|
301
495
|
```
|
|
302
496
|
|
|
@@ -310,7 +504,7 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
310
504
|
import { MarkdownRenderer } from "svelte-intlayer/markdown";
|
|
311
505
|
</script>
|
|
312
506
|
|
|
313
|
-
<MarkdownRenderer forceBlock={true} value="# Мій
|
|
507
|
+
<MarkdownRenderer forceBlock={true} value="# Мій Заголовок" />
|
|
314
508
|
```
|
|
315
509
|
|
|
316
510
|
#### Хук `useMarkdownRenderer()`
|
|
@@ -321,7 +515,7 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
321
515
|
const render = useMarkdownRenderer();
|
|
322
516
|
</script>
|
|
323
517
|
|
|
324
|
-
{@html render("# Мій
|
|
518
|
+
{@html render("# Мій Заголовок")}
|
|
325
519
|
```
|
|
326
520
|
|
|
327
521
|
#### Утиліта `renderMarkdown()`
|
|
@@ -331,7 +525,7 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
331
525
|
import { renderMarkdown } from "svelte-intlayer/markdown";
|
|
332
526
|
</script>
|
|
333
527
|
|
|
334
|
-
{@html renderMarkdown("# Мій
|
|
528
|
+
{@html renderMarkdown("# Мій Заголовок")}
|
|
335
529
|
```
|
|
336
530
|
|
|
337
531
|
</Tab>
|
|
@@ -342,7 +536,7 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
342
536
|
import { MarkdownRenderer } from "preact-intlayer/markdown";
|
|
343
537
|
|
|
344
538
|
<MarkdownRenderer forceBlock={true}>
|
|
345
|
-
{"# Мій
|
|
539
|
+
{"# Мій Заголовок"}
|
|
346
540
|
</MarkdownRenderer>
|
|
347
541
|
```
|
|
348
542
|
|
|
@@ -353,7 +547,7 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
353
547
|
|
|
354
548
|
const render = useMarkdownRenderer();
|
|
355
549
|
|
|
356
|
-
return <div>{render("# Мій
|
|
550
|
+
return <div>{render("# Мій Заголовок")}</div>;
|
|
357
551
|
```
|
|
358
552
|
|
|
359
553
|
#### Утиліта `renderMarkdown()`
|
|
@@ -361,18 +555,18 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
361
555
|
```tsx
|
|
362
556
|
import { renderMarkdown } from "preact-intlayer/markdown";
|
|
363
557
|
|
|
364
|
-
return <div>{renderMarkdown("# Мій
|
|
558
|
+
return <div>{renderMarkdown("# Мій Заголовок")}</div>;
|
|
365
559
|
```
|
|
366
560
|
|
|
367
561
|
</Tab>
|
|
368
|
-
<Tab label="Solid">
|
|
562
|
+
<Tab label="Solid" value="solid">
|
|
369
563
|
#### Компонент `<MarkdownRenderer />`
|
|
370
564
|
|
|
371
565
|
```tsx
|
|
372
566
|
import { MarkdownRenderer } from "solid-intlayer/markdown";
|
|
373
567
|
|
|
374
568
|
<MarkdownRenderer forceBlock={true}>
|
|
375
|
-
{"# Мій
|
|
569
|
+
{"# Мій Заголовок"}
|
|
376
570
|
</MarkdownRenderer>
|
|
377
571
|
```
|
|
378
572
|
|
|
@@ -383,7 +577,7 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
383
577
|
|
|
384
578
|
const render = useMarkdownRenderer();
|
|
385
579
|
|
|
386
|
-
return <div>{render("# Мій
|
|
580
|
+
return <div>{render("# Мій Заголовок")}</div>;
|
|
387
581
|
```
|
|
388
582
|
|
|
389
583
|
#### Утиліта `renderMarkdown()`
|
|
@@ -391,16 +585,16 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
391
585
|
```tsx
|
|
392
586
|
import { renderMarkdown } from "solid-intlayer/markdown";
|
|
393
587
|
|
|
394
|
-
return <div>{renderMarkdown("# Мій
|
|
588
|
+
return <div>{renderMarkdown("# Мій Заголовок")}</div>;
|
|
395
589
|
```
|
|
396
590
|
|
|
397
591
|
</Tab>
|
|
398
592
|
<Tab label="Angular" value="angular">
|
|
399
593
|
#### Сервіс `IntlayerMarkdownService`
|
|
400
|
-
|
|
594
|
+
Рендерить рядок Markdown за допомогою сервісу.
|
|
401
595
|
|
|
402
596
|
```typescript
|
|
403
|
-
import { IntlayerMarkdownService } from "angular-intlayer";
|
|
597
|
+
import { IntlayerMarkdownService } from "angular-intlayer/markdown";
|
|
404
598
|
|
|
405
599
|
export class MyComponent {
|
|
406
600
|
constructor(private markdownService: IntlayerMarkdownService) {}
|
|
@@ -416,12 +610,12 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
416
610
|
|
|
417
611
|
---
|
|
418
612
|
|
|
419
|
-
##
|
|
613
|
+
## Глобальне налаштування за допомогою `MarkdownProvider`
|
|
420
614
|
|
|
421
|
-
|
|
615
|
+
`MarkdownProvider` (або його еквівалент у фреймворку) налаштовує конвеєр рендерингу Markdown для всього вашого додатку. Це стосується як автоматичного рендерингу `useIntlayer`, так і допоміжних утиліт. Налаштування, вказані тут, є значеннями за замовчуванням — `.use()` перевизначає їх на рівні вузла.
|
|
422
616
|
|
|
423
617
|
<Tabs group="framework">
|
|
424
|
-
<Tab label="React / Next.js">
|
|
618
|
+
<Tab label="React / Next.js" value="react">
|
|
425
619
|
|
|
426
620
|
```tsx fileName="AppProvider.tsx"
|
|
427
621
|
import { MarkdownProvider } from "react-intlayer/markdown";
|
|
@@ -429,8 +623,9 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
429
623
|
export const AppProvider = ({ children }) => (
|
|
430
624
|
<MarkdownProvider
|
|
431
625
|
components={{
|
|
432
|
-
h1: (
|
|
433
|
-
a: ({ href,
|
|
626
|
+
h1: (props) => <h1 style={{color: 'green'}} {...props} />,
|
|
627
|
+
a: ({ href, ...props }) => <a style={{color: 'red'}} {...props} />,
|
|
628
|
+
MyCustomJSXComponent: (props) => <span style={{color: 'red'}} {...props} />,
|
|
434
629
|
}}
|
|
435
630
|
>
|
|
436
631
|
{children}
|
|
@@ -438,6 +633,27 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
438
633
|
);
|
|
439
634
|
```
|
|
440
635
|
|
|
636
|
+
> Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
|
|
637
|
+
|
|
638
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
639
|
+
|
|
640
|
+
```tsx fileName="AppProvider.tsx"
|
|
641
|
+
import { MarkdownProvider } from "react-intlayer/markdown";
|
|
642
|
+
|
|
643
|
+
export const AppProvider = ({ children }) => (
|
|
644
|
+
<MarkdownProvider
|
|
645
|
+
renderMarkdown={async (md) => {
|
|
646
|
+
const { renderMarkdown } = await import('react-intlayer/markdown');
|
|
647
|
+
return renderMarkdown(md);
|
|
648
|
+
}}
|
|
649
|
+
>
|
|
650
|
+
{children}
|
|
651
|
+
</MarkdownProvider>
|
|
652
|
+
);
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
656
|
+
|
|
441
657
|
</Tab>
|
|
442
658
|
<Tab label="Vue" value="vue">
|
|
443
659
|
|
|
@@ -463,6 +679,29 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
463
679
|
app.mount("#app");
|
|
464
680
|
```
|
|
465
681
|
|
|
682
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
683
|
+
|
|
684
|
+
```typescript fileName="main.ts"
|
|
685
|
+
import { createApp } from "vue";
|
|
686
|
+
import { intlayer } from "vue-intlayer";
|
|
687
|
+
import { intlayerMarkdown } from "vue-intlayer/markdown";
|
|
688
|
+
import App from "./App.vue";
|
|
689
|
+
|
|
690
|
+
const app = createApp(App);
|
|
691
|
+
|
|
692
|
+
app.use(intlayer);
|
|
693
|
+
app.use(intlayerMarkdown, {
|
|
694
|
+
renderMarkdown: async (md) => {
|
|
695
|
+
const { renderMarkdown } = await import('vue-intlayer/markdown');
|
|
696
|
+
return renderMarkdown(md);
|
|
697
|
+
},
|
|
698
|
+
});
|
|
699
|
+
|
|
700
|
+
app.mount("#app");
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
704
|
+
|
|
466
705
|
</Tab>
|
|
467
706
|
<Tab label="Svelte" value="svelte">
|
|
468
707
|
|
|
@@ -481,6 +720,25 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
481
720
|
</MarkdownProvider>
|
|
482
721
|
```
|
|
483
722
|
|
|
723
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
724
|
+
|
|
725
|
+
```svelte fileName="App.svelte"
|
|
726
|
+
<script lang="ts">
|
|
727
|
+
import { MarkdownProvider } from "svelte-intlayer/markdown";
|
|
728
|
+
</script>
|
|
729
|
+
|
|
730
|
+
<MarkdownProvider
|
|
731
|
+
renderMarkdown={async (md) => {
|
|
732
|
+
const { renderMarkdown } = await import('svelte-intlayer/markdown');
|
|
733
|
+
return renderMarkdown(md);
|
|
734
|
+
}}
|
|
735
|
+
>
|
|
736
|
+
<slot />
|
|
737
|
+
</MarkdownProvider>
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
741
|
+
|
|
484
742
|
</Tab>
|
|
485
743
|
<Tab label="Preact" value="preact">
|
|
486
744
|
|
|
@@ -498,8 +756,27 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
498
756
|
);
|
|
499
757
|
```
|
|
500
758
|
|
|
759
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
760
|
+
|
|
761
|
+
```tsx fileName="AppProvider.tsx"
|
|
762
|
+
import { MarkdownProvider } from "preact-intlayer/markdown";
|
|
763
|
+
|
|
764
|
+
export const AppProvider = ({ children }) => (
|
|
765
|
+
<MarkdownProvider
|
|
766
|
+
renderMarkdown={async (md) => {
|
|
767
|
+
const { renderMarkdown } = await import('preact-intlayer/markdown');
|
|
768
|
+
return renderMarkdown(md);
|
|
769
|
+
}}
|
|
770
|
+
>
|
|
771
|
+
{children}
|
|
772
|
+
</MarkdownProvider>
|
|
773
|
+
);
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
777
|
+
|
|
501
778
|
</Tab>
|
|
502
|
-
<Tab label="Solid">
|
|
779
|
+
<Tab label="Solid" value="solid">
|
|
503
780
|
|
|
504
781
|
```tsx fileName="AppProvider.tsx"
|
|
505
782
|
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
@@ -515,38 +792,46 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
515
792
|
);
|
|
516
793
|
```
|
|
517
794
|
|
|
518
|
-
|
|
519
|
-
<Tab label="Angular" value="angular">
|
|
795
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
520
796
|
|
|
521
|
-
```
|
|
522
|
-
import {
|
|
797
|
+
```tsx fileName="AppProvider.tsx"
|
|
798
|
+
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
523
799
|
|
|
524
|
-
export const
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
800
|
+
export const AppProvider = (props) => (
|
|
801
|
+
<MarkdownProvider
|
|
802
|
+
renderMarkdown={async (md) => {
|
|
803
|
+
const { renderMarkdown } = await import('solid-intlayer/markdown');
|
|
804
|
+
return renderMarkdown(md);
|
|
805
|
+
}}
|
|
806
|
+
>
|
|
807
|
+
{props.children}
|
|
808
|
+
</MarkdownProvider>
|
|
809
|
+
);
|
|
533
810
|
```
|
|
534
811
|
|
|
535
|
-
|
|
536
|
-
</Tabs>
|
|
812
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
537
813
|
|
|
538
|
-
|
|
814
|
+
</Tab>
|
|
815
|
+
<Tab label="Angular" value="angular">
|
|
539
816
|
|
|
540
|
-
|
|
817
|
+
```typescript fileName="app.module.ts"
|
|
818
|
+
import { NgModule } from '@angular/core';
|
|
819
|
+
import { IntlayerMarkdownModule } from 'angular-intlayer/markdown';
|
|
820
|
+
|
|
821
|
+
@NgModule({
|
|
822
|
+
imports: [
|
|
823
|
+
IntlayerMarkdownModule.forRoot({
|
|
824
|
+
renderMarkdown: async (md) => {
|
|
825
|
+
const { renderMarkdown } = await import('angular-intlayer/markdown');
|
|
826
|
+
return renderMarkdown(md);
|
|
827
|
+
}
|
|
828
|
+
})
|
|
829
|
+
]
|
|
830
|
+
})
|
|
831
|
+
export class AppModule {}
|
|
832
|
+
```
|
|
541
833
|
|
|
542
|
-
|
|
834
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
543
835
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
| `forceBlock` | `boolean` | `false` | Змушує вивід бути загорнутим у елемент блочного рівня (наприклад, `<div>`). |
|
|
547
|
-
| `forceInline` | `boolean` | `false` | Змушує вивід бути загорнутим у рядковий елемент (наприклад, `<span>`). |
|
|
548
|
-
| `tagfilter` | `boolean` | `true` | Вмикає фільтр тегів GitHub для підвищення безпеки шляхом видалення небезпечних HTML-тегів. |
|
|
549
|
-
| `preserveFrontmatter` | `boolean` | `false` | Якщо `true`, frontmatter на початку рядка Markdown не буде видалено. |
|
|
550
|
-
| `components` | `Overrides` | `{}` | Мапа HTML-тегів до користувацьких компонентів (наприклад, `{ h1: MyHeading }`). |
|
|
551
|
-
| `wrapper` | `Component` | `null` | Користувацький компонент для обгортання відтвореного Markdown. |
|
|
552
|
-
| `renderMarkdown` | `Function` | `null` | Користувацька функція відтворення для повної заміни стандартного компілятора Markdown. |
|
|
836
|
+
</Tab>
|
|
837
|
+
</Tabs>
|