@intlayer/docs 8.10.0-canary.1 → 8.10.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 +349 -19
- package/docs/ar/interest_of_intlayer.md +1 -1
- package/docs/bn/interest_of_intlayer.md +1 -1
- package/docs/cs/interest_of_intlayer.md +1 -1
- package/docs/de/dictionary/markdown.md +349 -19
- package/docs/de/interest_of_intlayer.md +1 -1
- package/docs/en/dictionary/markdown.md +338 -20
- package/docs/en/interest_of_intlayer.md +1 -1
- package/docs/en-GB/dictionary/markdown.md +349 -19
- package/docs/en-GB/interest_of_intlayer.md +1 -1
- package/docs/es/dictionary/markdown.md +349 -19
- package/docs/es/interest_of_intlayer.md +1 -1
- package/docs/fr/dictionary/markdown.md +349 -19
- package/docs/fr/interest_of_intlayer.md +1 -1
- package/docs/hi/dictionary/markdown.md +349 -19
- package/docs/hi/interest_of_intlayer.md +1 -1
- package/docs/id/dictionary/markdown.md +349 -19
- package/docs/id/interest_of_intlayer.md +1 -1
- package/docs/it/dictionary/markdown.md +349 -19
- package/docs/it/interest_of_intlayer.md +1 -1
- package/docs/ja/interest_of_intlayer.md +1 -1
- package/docs/ko/dictionary/markdown.md +349 -19
- package/docs/ko/interest_of_intlayer.md +1 -1
- package/docs/nl/interest_of_intlayer.md +1 -1
- package/docs/pl/dictionary/markdown.md +349 -19
- package/docs/pl/interest_of_intlayer.md +1 -1
- package/docs/pt/benchmark/solid.md +1 -1
- package/docs/pt/benchmark/svelte.md +1 -1
- package/docs/pt/dictionary/markdown.md +349 -19
- package/docs/pt/interest_of_intlayer.md +1 -1
- package/docs/ru/dictionary/markdown.md +458 -16
- package/docs/ru/interest_of_intlayer.md +1 -1
- package/docs/tr/dictionary/markdown.md +349 -19
- package/docs/tr/interest_of_intlayer.md +1 -1
- package/docs/uk/dictionary/markdown.md +349 -19
- package/docs/uk/interest_of_intlayer.md +1 -1
- package/docs/ur/interest_of_intlayer.md +1 -1
- package/docs/vi/dictionary/markdown.md +349 -19
- package/docs/vi/interest_of_intlayer.md +1 -1
- package/docs/zh/dictionary/markdown.md +349 -19
- package/docs/zh/interest_of_intlayer.md +1 -1
- package/docs/zh-TW/interest_of_intlayer.md +1 -1
- package/package.json +7 -7
|
@@ -96,35 +96,35 @@ Intlayer поддерживает форматированный текстов
|
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
</Tab>
|
|
99
|
-
<Tab label="
|
|
100
|
-
|
|
99
|
+
<Tab label="Внешние файлы" value="external-files">
|
|
100
|
+
Импортируйте файлы `.md` напрямую, используя функцию `file`.
|
|
101
101
|
|
|
102
102
|
```typescript fileName="markdownDictionary.content.ts"
|
|
103
|
+
import { md, file, t } from "intlayer";
|
|
104
|
+
|
|
103
105
|
export default {
|
|
104
106
|
key: "app",
|
|
105
|
-
contentAutoTransformation: true, // Включить автоматическое обнаружение Markdown контента — можно установить глобально в intlayer.config.ts
|
|
106
107
|
content: {
|
|
107
|
-
|
|
108
|
+
content: t({
|
|
109
|
+
ru: md(file("./myMarkdown.ru.md")),
|
|
110
|
+
en: md(file("./myMarkdown.en.md")),
|
|
111
|
+
fr: md(file("./myMarkdown.fr.md")),
|
|
112
|
+
}),
|
|
108
113
|
},
|
|
109
114
|
};
|
|
110
115
|
```
|
|
111
116
|
|
|
112
117
|
</Tab>
|
|
113
118
|
|
|
114
|
-
<Tab label="
|
|
115
|
-
|
|
119
|
+
<Tab label="Автоматическое обнаружение" value="automatic-detection">
|
|
120
|
+
Если строка содержит общие признаки Markdown (такие как заголовки, списки, ссылки и т. д.), Intlayer автоматически преобразует ее.
|
|
116
121
|
|
|
117
122
|
```typescript fileName="markdownDictionary.content.ts"
|
|
118
|
-
import { md, file, t } from "intlayer";
|
|
119
|
-
|
|
120
123
|
export default {
|
|
121
124
|
key: "app",
|
|
125
|
+
contentAutoTransformation: true, // Включить автоматическое обнаружение Markdown контента — можно установить глобально в intlayer.config.ts
|
|
122
126
|
content: {
|
|
123
|
-
|
|
124
|
-
ru: md(file("./myMarkdown.ru.md")),
|
|
125
|
-
en: md(file("./myMarkdown.en.md")),
|
|
126
|
-
fr: md(file("./myMarkdown.fr.md")),
|
|
127
|
-
}),
|
|
127
|
+
myMarkdownContent: "## My title \n\nLorem Ipsum",
|
|
128
128
|
},
|
|
129
129
|
};
|
|
130
130
|
```
|
|
@@ -132,8 +132,6 @@ Intlayer поддерживает форматированный текстов
|
|
|
132
132
|
</Tab>
|
|
133
133
|
</Tabs>
|
|
134
134
|
|
|
135
|
-
---
|
|
136
|
-
|
|
137
135
|
## Рендеринг Markdown
|
|
138
136
|
|
|
139
137
|
Intlayer предоставляет два независимых способа рендеринга Markdown:
|
|
@@ -149,7 +147,7 @@ Intlayer предоставляет два независимых способа
|
|
|
149
147
|
### 1. Автоматический рендеринг (через `useIntlayer`)
|
|
150
148
|
|
|
151
149
|
<Tabs group="framework">
|
|
152
|
-
<Tab label="React
|
|
150
|
+
<Tab label="React" value="react">
|
|
153
151
|
Markdown-узлы могут быть отрисованы напрямую как JSX.
|
|
154
152
|
|
|
155
153
|
```tsx fileName="App.tsx"
|
|
@@ -176,6 +174,57 @@ Intlayer предоставляет два независимых способа
|
|
|
176
174
|
|
|
177
175
|
> Если `MarkdownProvider` отсутствует, intlayer будет отрисовывать markdown, используя стандартный парсер Markdown в JSX.
|
|
178
176
|
|
|
177
|
+
Вы также можете предоставить локальные переопределения для конкретных узлов, используя метод `.use()`:
|
|
178
|
+
|
|
179
|
+
```tsx
|
|
180
|
+
{myMarkdownContent.use({
|
|
181
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
182
|
+
})}
|
|
183
|
+
```
|
|
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
|
+
|
|
200
|
+
</Tab>
|
|
201
|
+
<Tab label="Next.js" value="nextjs">
|
|
202
|
+
Markdown-узлы могут быть отрисованы напрямую как JSX.
|
|
203
|
+
|
|
204
|
+
```tsx fileName="App.tsx"
|
|
205
|
+
import { useIntlayer } from "next-intlayer";
|
|
206
|
+
import { MarkdownProvider } from "next-intlayer/markdown";
|
|
207
|
+
|
|
208
|
+
const AppContent = () => {
|
|
209
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
210
|
+
|
|
211
|
+
return <div>{myMarkdownContent}</div>;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
const App = () => (
|
|
215
|
+
<MarkdownProvider
|
|
216
|
+
components={{
|
|
217
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
218
|
+
MyButton: (props) => <button {...props} />, // MDX-компонент
|
|
219
|
+
}}
|
|
220
|
+
>
|
|
221
|
+
<AppContent />
|
|
222
|
+
</MarkdownProvider>
|
|
223
|
+
);
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
> Если `MarkdownProvider` отсутствует, intlayer будет отрисовывать markdown, используя стандартный парсер Markdown в JSX.
|
|
227
|
+
|
|
179
228
|
Вы также можете предоставить локальные переопределения для конкретных узлов, используя метод `.use()`:
|
|
180
229
|
|
|
181
230
|
```tsx
|
|
@@ -232,3 +281,396 @@ Intlayer предоставляет два независимых способа
|
|
|
232
281
|
Вы также можете предоставить локальные переопределения для конкретных узлов, используя метод `.use()`:
|
|
233
282
|
|
|
234
283
|
```vue
|
|
284
|
+
<component :is="myMarkdownContent.use({
|
|
285
|
+
h1: (props) => h('h1', { style: { color: 'red' } }, props.children),
|
|
286
|
+
})" />
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Вы можете получить Markdown в виде строки:
|
|
290
|
+
|
|
291
|
+
```vue
|
|
292
|
+
{{ myMarkdownContent.value }}
|
|
293
|
+
{{ String(myMarkdownContent) }}
|
|
294
|
+
{{ myMarkdownContent.toString() }}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
И вы можете получить доступ к метаданным вашего markdown, например:
|
|
298
|
+
|
|
299
|
+
```vue
|
|
300
|
+
<component :is="myMarkdownContent.metadata" />
|
|
301
|
+
<component :is="myMarkdownContent.metadata.title" />
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
</Tab>
|
|
305
|
+
<Tab label="Svelte" value="svelte">
|
|
306
|
+
Svelte по умолчанию рендерит Markdown как HTML-строку. Используйте `{@html}` для его рендеринга.
|
|
307
|
+
|
|
308
|
+
```svelte fileName="App.svelte"
|
|
309
|
+
<script lang="ts">
|
|
310
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
311
|
+
import { MarkdownProvider } from "svelte-intlayer/markdown";
|
|
312
|
+
import MyHeading from "./MyHeading.svelte";
|
|
313
|
+
|
|
314
|
+
const content = useIntlayer("app");
|
|
315
|
+
</script>
|
|
316
|
+
|
|
317
|
+
<MarkdownProvider components={{ h1: MyHeading }}>
|
|
318
|
+
{@html $content.myMarkdownContent}
|
|
319
|
+
</MarkdownProvider>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
> Если `MarkdownProvider` отсутствует, Intlayer будет рендерить markdown с использованием компилятора по умолчанию.
|
|
323
|
+
|
|
324
|
+
Вы также можете предоставить локальные переопределения для конкретных узлов, используя метод `.use()`:
|
|
325
|
+
|
|
326
|
+
```svelte
|
|
327
|
+
{@html $content.myMarkdownContent.use({ ... })}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
Вы можете получить Markdown в виде строки:
|
|
331
|
+
|
|
332
|
+
```svelte
|
|
333
|
+
{$content.myMarkdownContent.value}
|
|
334
|
+
{String($content.myMarkdownContent)}
|
|
335
|
+
{$content.myMarkdownContent.toString()}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
И вы можете получить доступ к метаданным вашего markdown, например:
|
|
339
|
+
|
|
340
|
+
```svelte
|
|
341
|
+
{$content.myMarkdownContent.metadata}
|
|
342
|
+
{$content.myMarkdownContent.metadata.title}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
</Tab>
|
|
346
|
+
<Tab label="Preact" value="preact">
|
|
347
|
+
Preact поддерживает узлы Markdown непосредственно в JSX.
|
|
348
|
+
|
|
349
|
+
```tsx fileName="App.tsx"
|
|
350
|
+
import { useIntlayer } from "preact-intlayer";
|
|
351
|
+
import { MarkdownProvider } from "preact-intlayer/markdown";
|
|
352
|
+
|
|
353
|
+
const AppContent = () => {
|
|
354
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
355
|
+
return <div>{myMarkdownContent}</div>;
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
const App = () => (
|
|
359
|
+
<MarkdownProvider
|
|
360
|
+
components={{
|
|
361
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
362
|
+
MyButton: (props) => <button {...props} />, // Компонент MDX
|
|
363
|
+
}}
|
|
364
|
+
>
|
|
365
|
+
<AppContent />
|
|
366
|
+
</MarkdownProvider>
|
|
367
|
+
);
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
> Если `MarkdownProvider` отсутствует, intlayer будет отрисовывать markdown, используя стандартный парсер Markdown в JSX.
|
|
371
|
+
|
|
372
|
+
Вы также можете предоставить локальные переопределения для конкретных узлов, используя метод `.use()`:
|
|
373
|
+
|
|
374
|
+
```tsx
|
|
375
|
+
{myMarkdownContent.use({
|
|
376
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
377
|
+
})}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Вы можете получить Markdown в виде строки:
|
|
381
|
+
|
|
382
|
+
```tsx
|
|
383
|
+
{myMarkdownContent.value}
|
|
384
|
+
{String(myMarkdownContent)}
|
|
385
|
+
{myMarkdownContent.toString()}
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
И вы можете получить доступ к метаданным вашего markdown, например:
|
|
389
|
+
|
|
390
|
+
```tsx
|
|
391
|
+
{myMarkdownContent.metadata}
|
|
392
|
+
{myMarkdownContent.metadata.title}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
</Tab>
|
|
396
|
+
<Tab label="Solid" value="solid">
|
|
397
|
+
Solid поддерживает узлы Markdown непосредственно в JSX.
|
|
398
|
+
|
|
399
|
+
```tsx fileName="App.tsx"
|
|
400
|
+
import { useIntlayer } from "solid-intlayer";
|
|
401
|
+
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
402
|
+
|
|
403
|
+
const AppContent = () => {
|
|
404
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
405
|
+
return <div>{myMarkdownContent}</div>;
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
const App = () => (
|
|
409
|
+
<MarkdownProvider
|
|
410
|
+
components={{
|
|
411
|
+
h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
|
|
412
|
+
MyButton: (props) => <button {...props} />, // Компонент MDX
|
|
413
|
+
}}
|
|
414
|
+
>
|
|
415
|
+
<AppContent />
|
|
416
|
+
</MarkdownProvider>
|
|
417
|
+
);
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
> Если `MarkdownProvider` отсутствует, intlayer будет отрисовывать markdown, используя стандартный парсер Markdown в JSX.
|
|
421
|
+
|
|
422
|
+
Вы также можете предоставить локальные переопределения для конкретных узлов, используя метод `.use()`:
|
|
423
|
+
|
|
424
|
+
```tsx
|
|
425
|
+
{myMarkdownContent.use({
|
|
426
|
+
h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
|
|
427
|
+
})}
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
Вы можете получить Markdown в виде строки:
|
|
431
|
+
|
|
432
|
+
```tsx
|
|
433
|
+
{myMarkdownContent.value}
|
|
434
|
+
{String(myMarkdownContent)}
|
|
435
|
+
{myMarkdownContent.toString()}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
И вы можете получить доступ к метаданным вашего markdown, например:
|
|
439
|
+
|
|
440
|
+
```tsx
|
|
441
|
+
{myMarkdownContent.metadata}
|
|
442
|
+
{myMarkdownContent.metadata.title}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
</Tab>
|
|
446
|
+
<Tab label="Angular" value="angular">
|
|
447
|
+
Angular использует директиву `[innerHTML]` для рендеринга контента Markdown.
|
|
448
|
+
|
|
449
|
+
```typescript fileName="app.component.ts"
|
|
450
|
+
import { Component } from "@angular/core";
|
|
451
|
+
import { useIntlayer } from "angular-intlayer";
|
|
452
|
+
|
|
453
|
+
@Component({
|
|
454
|
+
selector: "app-root",
|
|
455
|
+
template: `<div [innerHTML]="content().myMarkdownContent"></div>`,
|
|
456
|
+
})
|
|
457
|
+
export class AppComponent {
|
|
458
|
+
content = useIntlayer("app");
|
|
459
|
+
}
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
> Если провайдер IntlayerMarkdown не настроен, Intlayer будет выполнять рендеринг с использованием компилятора по умолчанию.
|
|
463
|
+
|
|
464
|
+
Вы также можете предоставить локальные переопределения для конкретных узлов, используя метод `.use()`:
|
|
465
|
+
|
|
466
|
+
```typescript
|
|
467
|
+
content().myMarkdownContent.use({
|
|
468
|
+
h1: { class: "text-3xl font-bold" },
|
|
469
|
+
})
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
Вы можете получить Markdown в виде строки:
|
|
473
|
+
|
|
474
|
+
```typescript
|
|
475
|
+
content().myMarkdownContent.value
|
|
476
|
+
String(content().myMarkdownContent)
|
|
477
|
+
content().myMarkdownContent.toString()
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
И вы можете получить доступ к метаданным вашего markdown, например:
|
|
481
|
+
|
|
482
|
+
```typescript
|
|
483
|
+
content().myMarkdownContent.metadata
|
|
484
|
+
content().myMarkdownContent.metadata.title
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
</Tab>
|
|
488
|
+
</Tabs>
|
|
489
|
+
|
|
490
|
+
## Suspense
|
|
491
|
+
|
|
492
|
+
Рендерер Markdown в Intlayer загружается динамически. Несмотря на оптимизацию, базовый фрагмент парсера составляет около 55 КБ. Его синхронная загрузка задерживает первоначальный рендеринг страницы и ухудшает First Contentful Paint (FCP).
|
|
493
|
+
|
|
494
|
+
Чтобы предотвратить блокировку пользовательского интерфейса, Intlayer интегрируется с API React Suspense. Он загружает парсер в фоновом режиме и выдает Promise во время загрузки.
|
|
495
|
+
|
|
496
|
+
Оберните любой компонент, рендерящий Intlayer Markdown, в границу `<Suspense>`. Это отобразит локализованное резервное состояние во время загрузки фрагмента, позволяя остальной части вашего DOM рендериться немедленно.
|
|
497
|
+
|
|
498
|
+
Предупреждение: Если вы не предоставите границу `<Suspense>`, React приостановит работу на корневом уровне или заблокирует рендеринг всего дерева компонентов до тех пор, пока фрагмент размером 55 КБ не будет полностью загружен.
|
|
499
|
+
|
|
500
|
+
<Tabs>
|
|
501
|
+
<Tab label="Next.js" value="nextjs">
|
|
502
|
+
|
|
503
|
+
В маршрутизаторе Next.js App Router вы можете использовать либо React `Suspense` для клиентских компонентов, либо файл `loading.tsx` для серверных компонентов.
|
|
504
|
+
|
|
505
|
+
**Клиентский компонент:**
|
|
506
|
+
|
|
507
|
+
```tsx fileName="components/MyComponent.tsx"
|
|
508
|
+
"use client";
|
|
509
|
+
import { useIntlayer } from "next-intlayer";
|
|
510
|
+
import { Suspense } from "react";
|
|
511
|
+
|
|
512
|
+
const MyComponent = () => {
|
|
513
|
+
const markdownContent = useIntlayer("my-markdown");
|
|
514
|
+
|
|
515
|
+
return (
|
|
516
|
+
<Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
|
|
517
|
+
);
|
|
518
|
+
};
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
**Серверный компонент с `loading.tsx`:**
|
|
522
|
+
|
|
523
|
+
```tsx fileName="app/loading.tsx"
|
|
524
|
+
export default function Loading() {
|
|
525
|
+
return <div>Loading...</div>;
|
|
526
|
+
}
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
```tsx fileName="app/page.tsx"
|
|
530
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
531
|
+
|
|
532
|
+
const MyPage = () => {
|
|
533
|
+
const markdownContent = useIntlayer("my-markdown");
|
|
534
|
+
return <div>{markdownContent}</div>;
|
|
535
|
+
};
|
|
536
|
+
|
|
537
|
+
export default MyPage;
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
</Tab>
|
|
541
|
+
|
|
542
|
+
<Tab label="React" value="react">
|
|
543
|
+
|
|
544
|
+
```tsx
|
|
545
|
+
import { useIntlayer } from "react-intlayer";
|
|
546
|
+
import { Suspense } from "react";
|
|
547
|
+
|
|
548
|
+
const MyComponent = () => {
|
|
549
|
+
const markdownContent = useIntlayer("my-markdown");
|
|
550
|
+
|
|
551
|
+
return (
|
|
552
|
+
<Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
|
|
553
|
+
);
|
|
554
|
+
};
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
</Tab>
|
|
558
|
+
|
|
559
|
+
<Tab label="Vue" value="vue">
|
|
560
|
+
|
|
561
|
+
В Vue есть встроенный компонент `<Suspense>`. Оберните компонент, рендерящий содержимое Markdown, в границу `<Suspense>`.
|
|
562
|
+
|
|
563
|
+
```vue fileName="MyComponent.vue"
|
|
564
|
+
<script setup>
|
|
565
|
+
import { useIntlayer } from "vue-intlayer";
|
|
566
|
+
|
|
567
|
+
const { markdownContent } = useIntlayer("my-markdown");
|
|
568
|
+
</script>
|
|
569
|
+
|
|
570
|
+
<template>
|
|
571
|
+
<Suspense>
|
|
572
|
+
<component :is="markdownContent" />
|
|
573
|
+
<template #fallback>
|
|
574
|
+
<div>Loading...</div>
|
|
575
|
+
</template>
|
|
576
|
+
</Suspense>
|
|
577
|
+
</template>
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
</Tab>
|
|
581
|
+
<Tab label="Svelte" value="svelte">
|
|
582
|
+
|
|
583
|
+
Svelte не имеет эквивалента API Suspense. Используйте блок `{#await}` для обработки асинхронного рендеринга содержимого Markdown.
|
|
584
|
+
|
|
585
|
+
```svelte fileName="MyComponent.svelte"
|
|
586
|
+
<script lang="ts">
|
|
587
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
588
|
+
|
|
589
|
+
const content = useIntlayer("my-markdown");
|
|
590
|
+
</script>
|
|
591
|
+
|
|
592
|
+
{#await $content.markdownContent}
|
|
593
|
+
<div>Loading...</div>
|
|
594
|
+
{:then rendered}
|
|
595
|
+
{@html rendered}
|
|
596
|
+
{/await}
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
</Tab>
|
|
600
|
+
<Tab label="Preact" value="preact">
|
|
601
|
+
|
|
602
|
+
Preact поддерживает API React Suspense через `preact/compat`.
|
|
603
|
+
|
|
604
|
+
```tsx fileName="MyComponent.tsx"
|
|
605
|
+
import { useIntlayer } from "preact-intlayer";
|
|
606
|
+
import { Suspense } from "preact/compat";
|
|
607
|
+
|
|
608
|
+
const MyComponent = () => {
|
|
609
|
+
const markdownContent = useIntlayer("my-markdown");
|
|
610
|
+
|
|
611
|
+
return (
|
|
612
|
+
<Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
|
|
613
|
+
);
|
|
614
|
+
};
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
</Tab>
|
|
618
|
+
<Tab label="Solid" value="solid">
|
|
619
|
+
|
|
620
|
+
В Solid есть собственный компонент `<Suspense>` из `solid-js`.
|
|
621
|
+
|
|
622
|
+
```tsx fileName="MyComponent.tsx"
|
|
623
|
+
import { useIntlayer } from "solid-intlayer";
|
|
624
|
+
import { Suspense } from "solid-js";
|
|
625
|
+
|
|
626
|
+
const MyComponent = () => {
|
|
627
|
+
const { markdownContent } = useIntlayer("my-markdown");
|
|
628
|
+
|
|
629
|
+
return (
|
|
630
|
+
<Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
|
|
631
|
+
);
|
|
632
|
+
};
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
</Tab>
|
|
636
|
+
<Tab label="Angular" value="angular">
|
|
637
|
+
|
|
638
|
+
Angular не имеет API Suspense. Используйте отложенные представления (`@defer`) для обработки лениво загружаемого содержимого Markdown (требуется Angular 17+).
|
|
639
|
+
|
|
640
|
+
```typescript fileName="my.component.ts"
|
|
641
|
+
import { Component } from "@angular/core";
|
|
642
|
+
import { useIntlayer } from "angular-intlayer";
|
|
643
|
+
|
|
644
|
+
@Component({
|
|
645
|
+
selector: "app-my",
|
|
646
|
+
template: `
|
|
647
|
+
@defer {
|
|
648
|
+
<div [innerHTML]="content().markdownContent"></div>
|
|
649
|
+
} @loading {
|
|
650
|
+
<div>Loading...</div>
|
|
651
|
+
}
|
|
652
|
+
`,
|
|
653
|
+
})
|
|
654
|
+
export class MyComponent {
|
|
655
|
+
content = useIntlayer("my-markdown");
|
|
656
|
+
}
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
</Tab>
|
|
660
|
+
</Tabs>
|
|
661
|
+
|
|
662
|
+
---
|
|
663
|
+
|
|
664
|
+
## Справочник по опциям
|
|
665
|
+
|
|
666
|
+
Эти параметры могут быть переданы в `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer` и `renderMarkdown`.
|
|
667
|
+
|
|
668
|
+
| Option | Type | Default | Описание |
|
|
669
|
+
| :-------------------- | :---------- | :------ | :----------------------------------------------------------------------------------------- |
|
|
670
|
+
| `forceBlock` | `boolean` | `false` | Принудительно оборачивает вывод в блочный элемент (например, `<div>`). |
|
|
671
|
+
| `forceInline` | `boolean` | `false` | Принудительно оборачивает вывод во встроенный элемент (например, `<span>`). |
|
|
672
|
+
| `tagfilter` | `boolean` | `true` | Включает фильтр тегов GitHub для повышения безопасности путем удаления опасных тегов HTML. |
|
|
673
|
+
| `preserveFrontmatter` | `boolean` | `false` | Если `true`, начальный мета-блок (frontmatter) в строке Markdown не будет удален. |
|
|
674
|
+
| `components` | `Overrides` | `{}` | Карта HTML-тегов в пользовательские компоненты (например, `{ h1: MyHeading }`). |
|
|
675
|
+
| `wrapper` | `Component` | `null` | Пользовательский компонент для обертывания отрендеренного Markdown. |
|
|
676
|
+
| `renderMarkdown` | `Function` | `null` | Пользовательская функция рендеринга для полной замены компилятора Markdown по умолчанию. |
|
|
@@ -224,7 +224,7 @@ export const ComponentExample = () => {
|
|
|
224
224
|
|
|
225
225
|
Звезды на GitHub - это сильный индикатор популярности проекта, доверия сообщества и долгосрочной актуальности. Хотя они не являются прямым показателем технического качества, они отражают, сколько разработчиков считают проект полезным, следят за его прогрессом и, вероятно, будут его использовать. Для оценки ценности проекта звезды помогают сравнивать популярность альтернатив и дают представление о росте экосистемы.
|
|
226
226
|
|
|
227
|
-
[](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
|
|