@intlayer/docs 8.10.0-canary.0 → 8.10.0
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 +409 -88
- package/docs/de/dictionary/markdown.md +279 -107
- package/docs/en/dictionary/markdown.md +237 -37
- package/docs/en-GB/dictionary/markdown.md +361 -76
- package/docs/es/dictionary/markdown.md +295 -123
- package/docs/fr/dictionary/markdown.md +301 -129
- package/docs/hi/dictionary/markdown.md +376 -90
- package/docs/id/dictionary/markdown.md +377 -91
- package/docs/it/dictionary/markdown.md +296 -129
- package/docs/ko/dictionary/markdown.md +306 -134
- package/docs/pl/dictionary/markdown.md +287 -116
- package/docs/pt/dictionary/markdown.md +287 -116
- package/docs/ru/dictionary/markdown.md +78 -513
- package/docs/tr/dictionary/markdown.md +300 -130
- package/docs/uk/dictionary/markdown.md +386 -100
- package/docs/vi/dictionary/markdown.md +383 -97
- package/docs/zh/dictionary/markdown.md +293 -125
- 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,33 +95,34 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
</Tab>
|
|
98
|
-
<Tab label="
|
|
99
|
-
|
|
98
|
+
<Tab label="Зовнішні файли" value="external-files">
|
|
99
|
+
Імпортуйте файли `.md` безпосередньо за допомогою функції `file`.
|
|
100
100
|
|
|
101
101
|
```typescript fileName="markdownDictionary.content.ts"
|
|
102
|
+
import { md, file, t } from "intlayer";
|
|
103
|
+
|
|
102
104
|
export default {
|
|
103
105
|
key: "app",
|
|
104
|
-
contentAutoTransformation: true, // Увімкнути автоматичне виявлення контенту Markdown - Можна встановити глобально в intlayer.config.ts
|
|
105
106
|
content: {
|
|
106
|
-
|
|
107
|
+
content: t({
|
|
108
|
+
en: md(file("./myMarkdown.en.md")),
|
|
109
|
+
uk: md(file("./myMarkdown.uk.md")),
|
|
110
|
+
}),
|
|
107
111
|
},
|
|
108
112
|
};
|
|
109
113
|
```
|
|
110
114
|
|
|
111
115
|
</Tab>
|
|
112
|
-
<Tab label="Зовнішні файли" value="external-files">
|
|
113
|
-
Імпортуйте файли `.md` безпосередньо за допомогою функції `file`.
|
|
114
116
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
+
<Tab label="Автоматичне виявлення" value="automatic-detection">
|
|
118
|
+
Якщо рядок містить типові індикатори Markdown (наприклад, заголовки, списки, посилання тощо), Intlayer автоматично перетворить його.
|
|
117
119
|
|
|
120
|
+
```typescript fileName="markdownDictionary.content.ts"
|
|
118
121
|
export default {
|
|
119
122
|
key: "app",
|
|
123
|
+
contentAutoTransformation: true, // Увімкнути автоматичне виявлення вмісту Markdown - Можна налаштувати глобально в intlayer.config.ts
|
|
120
124
|
content: {
|
|
121
|
-
|
|
122
|
-
en: md(file("./myMarkdown.en.md")),
|
|
123
|
-
fr: md(file("./myMarkdown.fr.md")),
|
|
124
|
-
}),
|
|
125
|
+
myMarkdownContent: "## Мій заголовок \n\nLorem Ipsum",
|
|
125
126
|
},
|
|
126
127
|
};
|
|
127
128
|
```
|
|
@@ -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,28 @@ 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
|
+
// Use dynamic import to reduce the bundle size of your application
|
|
647
|
+
const { renderMarkdown } = await import('react-intlayer/markdown');
|
|
648
|
+
return renderMarkdown(md);
|
|
649
|
+
}}
|
|
650
|
+
>
|
|
651
|
+
{children}
|
|
652
|
+
</MarkdownProvider>
|
|
653
|
+
);
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
657
|
+
|
|
441
658
|
</Tab>
|
|
442
659
|
<Tab label="Vue" value="vue">
|
|
443
660
|
|
|
@@ -463,6 +680,29 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
463
680
|
app.mount("#app");
|
|
464
681
|
```
|
|
465
682
|
|
|
683
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
684
|
+
|
|
685
|
+
```typescript fileName="main.ts"
|
|
686
|
+
import { createApp } from "vue";
|
|
687
|
+
import { intlayer } from "vue-intlayer";
|
|
688
|
+
import { intlayerMarkdown } from "vue-intlayer/markdown";
|
|
689
|
+
import App from "./App.vue";
|
|
690
|
+
|
|
691
|
+
const app = createApp(App);
|
|
692
|
+
|
|
693
|
+
app.use(intlayer);
|
|
694
|
+
app.use(intlayerMarkdown, {
|
|
695
|
+
renderMarkdown: async (md) => {
|
|
696
|
+
const { renderMarkdown } = await import('vue-intlayer/markdown');
|
|
697
|
+
return renderMarkdown(md);
|
|
698
|
+
},
|
|
699
|
+
});
|
|
700
|
+
|
|
701
|
+
app.mount("#app");
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
705
|
+
|
|
466
706
|
</Tab>
|
|
467
707
|
<Tab label="Svelte" value="svelte">
|
|
468
708
|
|
|
@@ -481,6 +721,25 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
481
721
|
</MarkdownProvider>
|
|
482
722
|
```
|
|
483
723
|
|
|
724
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
725
|
+
|
|
726
|
+
```svelte fileName="App.svelte"
|
|
727
|
+
<script lang="ts">
|
|
728
|
+
import { MarkdownProvider } from "svelte-intlayer/markdown";
|
|
729
|
+
</script>
|
|
730
|
+
|
|
731
|
+
<MarkdownProvider
|
|
732
|
+
renderMarkdown={async (md) => {
|
|
733
|
+
const { renderMarkdown } = await import('svelte-intlayer/markdown');
|
|
734
|
+
return renderMarkdown(md);
|
|
735
|
+
}}
|
|
736
|
+
>
|
|
737
|
+
<slot />
|
|
738
|
+
</MarkdownProvider>
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
742
|
+
|
|
484
743
|
</Tab>
|
|
485
744
|
<Tab label="Preact" value="preact">
|
|
486
745
|
|
|
@@ -498,8 +757,27 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
498
757
|
);
|
|
499
758
|
```
|
|
500
759
|
|
|
760
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
761
|
+
|
|
762
|
+
```tsx fileName="AppProvider.tsx"
|
|
763
|
+
import { MarkdownProvider } from "preact-intlayer/markdown";
|
|
764
|
+
|
|
765
|
+
export const AppProvider = ({ children }) => (
|
|
766
|
+
<MarkdownProvider
|
|
767
|
+
renderMarkdown={async (md) => {
|
|
768
|
+
const { renderMarkdown } = await import('preact-intlayer/markdown');
|
|
769
|
+
return renderMarkdown(md);
|
|
770
|
+
}}
|
|
771
|
+
>
|
|
772
|
+
{children}
|
|
773
|
+
</MarkdownProvider>
|
|
774
|
+
);
|
|
775
|
+
```
|
|
776
|
+
|
|
777
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
778
|
+
|
|
501
779
|
</Tab>
|
|
502
|
-
<Tab label="Solid">
|
|
780
|
+
<Tab label="Solid" value="solid">
|
|
503
781
|
|
|
504
782
|
```tsx fileName="AppProvider.tsx"
|
|
505
783
|
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
@@ -515,38 +793,46 @@ Intlayer підтримує контент rich text, визначений за
|
|
|
515
793
|
);
|
|
516
794
|
```
|
|
517
795
|
|
|
518
|
-
|
|
519
|
-
<Tab label="Angular" value="angular">
|
|
796
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
520
797
|
|
|
521
|
-
```
|
|
522
|
-
import {
|
|
798
|
+
```tsx fileName="AppProvider.tsx"
|
|
799
|
+
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
523
800
|
|
|
524
|
-
export const
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
801
|
+
export const AppProvider = (props) => (
|
|
802
|
+
<MarkdownProvider
|
|
803
|
+
renderMarkdown={async (md) => {
|
|
804
|
+
const { renderMarkdown } = await import('solid-intlayer/markdown');
|
|
805
|
+
return renderMarkdown(md);
|
|
806
|
+
}}
|
|
807
|
+
>
|
|
808
|
+
{props.children}
|
|
809
|
+
</MarkdownProvider>
|
|
810
|
+
);
|
|
533
811
|
```
|
|
534
812
|
|
|
535
|
-
|
|
536
|
-
</Tabs>
|
|
813
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
537
814
|
|
|
538
|
-
|
|
815
|
+
</Tab>
|
|
816
|
+
<Tab label="Angular" value="angular">
|
|
539
817
|
|
|
540
|
-
|
|
818
|
+
```typescript fileName="app.module.ts"
|
|
819
|
+
import { NgModule } from '@angular/core';
|
|
820
|
+
import { IntlayerMarkdownModule } from 'angular-intlayer/markdown';
|
|
821
|
+
|
|
822
|
+
@NgModule({
|
|
823
|
+
imports: [
|
|
824
|
+
IntlayerMarkdownModule.forRoot({
|
|
825
|
+
renderMarkdown: async (md) => {
|
|
826
|
+
const { renderMarkdown } = await import('angular-intlayer/markdown');
|
|
827
|
+
return renderMarkdown(md);
|
|
828
|
+
}
|
|
829
|
+
})
|
|
830
|
+
]
|
|
831
|
+
})
|
|
832
|
+
export class AppModule {}
|
|
833
|
+
```
|
|
541
834
|
|
|
542
|
-
|
|
835
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
543
836
|
|
|
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. |
|
|
837
|
+
</Tab>
|
|
838
|
+
</Tabs>
|