@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
|
@@ -95,34 +95,34 @@ Intlayer підтримує вміст форматованого тексту,
|
|
|
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
116
|
|
|
113
|
-
<Tab label="
|
|
114
|
-
|
|
117
|
+
<Tab label="Автоматичне виявлення" value="automatic-detection">
|
|
118
|
+
Якщо рядок містить типові індикатори Markdown (наприклад, заголовки, списки, посилання тощо), Intlayer автоматично перетворить його.
|
|
115
119
|
|
|
116
120
|
```typescript fileName="markdownDictionary.content.ts"
|
|
117
|
-
import { md, file, t } from "intlayer";
|
|
118
|
-
|
|
119
121
|
export default {
|
|
120
122
|
key: "app",
|
|
123
|
+
contentAutoTransformation: true, // Увімкнути автоматичне виявлення вмісту Markdown - Можна налаштувати глобально в intlayer.config.ts
|
|
121
124
|
content: {
|
|
122
|
-
|
|
123
|
-
en: md(file("./myMarkdown.en.md")),
|
|
124
|
-
uk: md(file("./myMarkdown.uk.md")),
|
|
125
|
-
}),
|
|
125
|
+
myMarkdownContent: "## Мій заголовок \n\nLorem Ipsum",
|
|
126
126
|
},
|
|
127
127
|
};
|
|
128
128
|
```
|
|
@@ -130,8 +130,6 @@ Intlayer підтримує вміст форматованого тексту,
|
|
|
130
130
|
</Tab>
|
|
131
131
|
</Tabs>
|
|
132
132
|
|
|
133
|
-
---
|
|
134
|
-
|
|
135
133
|
## Рендеринг Markdown
|
|
136
134
|
|
|
137
135
|
Intlayer надає два незалежні способи рендерингу Markdown:
|
|
@@ -147,7 +145,7 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
147
145
|
### 1. Автоматичний рендеринг (через `useIntlayer`)
|
|
148
146
|
|
|
149
147
|
<Tabs group="framework">
|
|
150
|
-
<Tab label="React
|
|
148
|
+
<Tab label="React" value="react">
|
|
151
149
|
Вузли Markdown можна рендерити безпосередньо як JSX.
|
|
152
150
|
|
|
153
151
|
```tsx fileName="App.tsx"
|
|
@@ -197,6 +195,57 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
197
195
|
{myMarkdownContent.metadata.title}
|
|
198
196
|
```
|
|
199
197
|
|
|
198
|
+
</Tab>
|
|
199
|
+
<Tab label="Next.js" value="nextjs">
|
|
200
|
+
Вузли Markdown можна рендерити безпосередньо як JSX.
|
|
201
|
+
|
|
202
|
+
```tsx fileName="App.tsx"
|
|
203
|
+
import { useIntlayer } from "next-intlayer";
|
|
204
|
+
import { MarkdownProvider } from "next-intlayer/markdown";
|
|
205
|
+
|
|
206
|
+
const AppContent = () => {
|
|
207
|
+
const { myMarkdownContent } = useIntlayer("app");
|
|
208
|
+
|
|
209
|
+
return <div>{myMarkdownContent}</div>;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
const App = () => (
|
|
213
|
+
<MarkdownProvider
|
|
214
|
+
components={{
|
|
215
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
216
|
+
MyButton: (props) => <button {...props} />, // MDX-компонент
|
|
217
|
+
}}
|
|
218
|
+
>
|
|
219
|
+
<AppContent />
|
|
220
|
+
</MarkdownProvider>
|
|
221
|
+
);
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
> Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown, використовуючи стандартний парсер Markdown у JSX.
|
|
225
|
+
|
|
226
|
+
Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
|
|
227
|
+
|
|
228
|
+
```tsx
|
|
229
|
+
{myMarkdownContent.use({
|
|
230
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
231
|
+
})}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Ви можете отримати Markdown як рядок:
|
|
235
|
+
|
|
236
|
+
```tsx
|
|
237
|
+
{myMarkdownContent.value}
|
|
238
|
+
{String(myMarkdownContent)}
|
|
239
|
+
{myMarkdownContent.toString()}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
І ви можете отримати доступ до метаданих markdown наступним чином:
|
|
243
|
+
|
|
244
|
+
```tsx
|
|
245
|
+
{myMarkdownContent.metadata}
|
|
246
|
+
{myMarkdownContent.metadata.title}
|
|
247
|
+
```
|
|
248
|
+
|
|
200
249
|
</Tab>
|
|
201
250
|
<Tab label="Vue" value="vue">
|
|
202
251
|
У Vue вміст Markdown можна рендерити за допомогою вбудованого тегу `component` або безпосередньо як вузол.
|
|
@@ -441,7 +490,7 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
441
490
|
Ці утиліти рендерять **тільки необроблені рядки Markdown** і не залежать від `useIntlayer`. Використовуйте їх, коли вам потрібно відрендерити Markdown з джерел, відмінних від ваших словників.
|
|
442
491
|
|
|
443
492
|
<Tabs group="framework">
|
|
444
|
-
<Tab label="React
|
|
493
|
+
<Tab label="React" value="react">
|
|
445
494
|
|
|
446
495
|
#### Компонент `<MarkdownRenderer />`
|
|
447
496
|
|
|
@@ -479,6 +528,45 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
479
528
|
const jsx = renderMarkdown("# Мій Заголовок", { forceBlock: true });
|
|
480
529
|
```
|
|
481
530
|
|
|
531
|
+
</Tab>
|
|
532
|
+
<Tab label="Next.js" value="nextjs">
|
|
533
|
+
|
|
534
|
+
#### Компонент `<MarkdownRenderer />`
|
|
535
|
+
|
|
536
|
+
Рендерить рядок Markdown з певними опціями.
|
|
537
|
+
|
|
538
|
+
```tsx
|
|
539
|
+
import { MarkdownRenderer } from "next-intlayer/markdown";
|
|
540
|
+
|
|
541
|
+
<MarkdownRenderer forceBlock={true} tagfilter={true}>
|
|
542
|
+
{"# Мій Заголовок"}
|
|
543
|
+
</MarkdownRenderer>
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
#### Хук `useMarkdownRenderer()`
|
|
547
|
+
|
|
548
|
+
Отримайте попередньо налаштовану функцію рендерингу.
|
|
549
|
+
|
|
550
|
+
```tsx
|
|
551
|
+
import { useMarkdownRenderer } from "next-intlayer/markdown";
|
|
552
|
+
|
|
553
|
+
const renderMarkdown = useMarkdownRenderer({
|
|
554
|
+
forceBlock: true,
|
|
555
|
+
components: { h1: (props) => <h1 {...props} className="custom" /> }
|
|
556
|
+
});
|
|
557
|
+
|
|
558
|
+
return renderMarkdown("# Мій Заголовок");
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
#### Утиліта `renderMarkdown()`
|
|
562
|
+
Окрема утиліта для рендерингу поза компонентами.
|
|
563
|
+
|
|
564
|
+
```tsx
|
|
565
|
+
import { renderMarkdown } from "next-intlayer/markdown";
|
|
566
|
+
|
|
567
|
+
const jsx = renderMarkdown("# Мій Заголовок", { forceBlock: true });
|
|
568
|
+
```
|
|
569
|
+
|
|
482
570
|
</Tab>
|
|
483
571
|
<Tab label="Vue" value="vue">
|
|
484
572
|
|
|
@@ -608,14 +696,12 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
608
696
|
</Tab>
|
|
609
697
|
</Tabs>
|
|
610
698
|
|
|
611
|
-
---
|
|
612
|
-
|
|
613
699
|
## Глобальне налаштування за допомогою `MarkdownProvider`
|
|
614
700
|
|
|
615
701
|
`MarkdownProvider` (або його еквівалент у фреймворку) налаштовує конвеєр рендерингу Markdown для всього вашого додатку. Це стосується як автоматичного рендерингу `useIntlayer`, так і допоміжних утиліт. Налаштування, вказані тут, є значеннями за замовчуванням — `.use()` перевизначає їх на рівні вузла.
|
|
616
702
|
|
|
617
703
|
<Tabs group="framework">
|
|
618
|
-
<Tab label="React
|
|
704
|
+
<Tab label="React" value="react">
|
|
619
705
|
|
|
620
706
|
```tsx fileName="AppProvider.tsx"
|
|
621
707
|
import { MarkdownProvider } from "react-intlayer/markdown";
|
|
@@ -633,6 +719,7 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
633
719
|
);
|
|
634
720
|
```
|
|
635
721
|
|
|
722
|
+
|
|
636
723
|
> Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
|
|
637
724
|
|
|
638
725
|
Ви також можете використовувати власний рендерер markdown:
|
|
@@ -643,6 +730,7 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
643
730
|
export const AppProvider = ({ children }) => (
|
|
644
731
|
<MarkdownProvider
|
|
645
732
|
renderMarkdown={async (md) => {
|
|
733
|
+
// Use dynamic import to reduce the bundle size of your application
|
|
646
734
|
const { renderMarkdown } = await import('react-intlayer/markdown');
|
|
647
735
|
return renderMarkdown(md);
|
|
648
736
|
}}
|
|
@@ -654,6 +742,48 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
654
742
|
|
|
655
743
|
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
656
744
|
|
|
745
|
+
</Tab>
|
|
746
|
+
<Tab label="Next.js" value="nextjs">
|
|
747
|
+
|
|
748
|
+
```tsx fileName="AppProvider.tsx"
|
|
749
|
+
import { MarkdownProvider } from "next-intlayer/markdown";
|
|
750
|
+
|
|
751
|
+
export const AppProvider = ({ children }) => (
|
|
752
|
+
<MarkdownProvider
|
|
753
|
+
components={{
|
|
754
|
+
h1: (props) => <h1 style={{color: 'green'}} {...props} />,
|
|
755
|
+
a: ({ href, ...props }) => <a style={{color: 'red'}} {...props} />,
|
|
756
|
+
MyCustomJSXComponent: (props) => <span style={{color: 'red'}} {...props} />,
|
|
757
|
+
}}
|
|
758
|
+
>
|
|
759
|
+
{children}
|
|
760
|
+
</MarkdownProvider>
|
|
761
|
+
);
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
> Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
|
|
766
|
+
|
|
767
|
+
Ви також можете використовувати власний рендерер markdown:
|
|
768
|
+
|
|
769
|
+
```tsx fileName="AppProvider.tsx"
|
|
770
|
+
import { MarkdownProvider } from "next-intlayer/markdown";
|
|
771
|
+
|
|
772
|
+
export const AppProvider = ({ children }) => (
|
|
773
|
+
<MarkdownProvider
|
|
774
|
+
renderMarkdown={async (md) => {
|
|
775
|
+
// Use dynamic import to reduce the bundle size of your application
|
|
776
|
+
const { renderMarkdown } = await import('next-intlayer/markdown');
|
|
777
|
+
return renderMarkdown(md);
|
|
778
|
+
}}
|
|
779
|
+
>
|
|
780
|
+
{children}
|
|
781
|
+
</MarkdownProvider>
|
|
782
|
+
);
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
> Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
|
|
786
|
+
|
|
657
787
|
</Tab>
|
|
658
788
|
<Tab label="Vue" value="vue">
|
|
659
789
|
|
|
@@ -679,6 +809,9 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
679
809
|
app.mount("#app");
|
|
680
810
|
```
|
|
681
811
|
|
|
812
|
+
|
|
813
|
+
> Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
|
|
814
|
+
|
|
682
815
|
Ви також можете використовувати власний рендерер markdown:
|
|
683
816
|
|
|
684
817
|
```typescript fileName="main.ts"
|
|
@@ -720,6 +853,9 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
720
853
|
</MarkdownProvider>
|
|
721
854
|
```
|
|
722
855
|
|
|
856
|
+
|
|
857
|
+
> Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
|
|
858
|
+
|
|
723
859
|
Ви також можете використовувати власний рендерер markdown:
|
|
724
860
|
|
|
725
861
|
```svelte fileName="App.svelte"
|
|
@@ -756,6 +892,9 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
756
892
|
);
|
|
757
893
|
```
|
|
758
894
|
|
|
895
|
+
|
|
896
|
+
> Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
|
|
897
|
+
|
|
759
898
|
Ви також можете використовувати власний рендерер markdown:
|
|
760
899
|
|
|
761
900
|
```tsx fileName="AppProvider.tsx"
|
|
@@ -792,6 +931,9 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
792
931
|
);
|
|
793
932
|
```
|
|
794
933
|
|
|
934
|
+
|
|
935
|
+
> Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
|
|
936
|
+
|
|
795
937
|
Ви також можете використовувати власний рендерер markdown:
|
|
796
938
|
|
|
797
939
|
```tsx fileName="AppProvider.tsx"
|
|
@@ -835,3 +977,191 @@ Intlayer надає два незалежні способи рендеринг
|
|
|
835
977
|
|
|
836
978
|
</Tab>
|
|
837
979
|
</Tabs>
|
|
980
|
+
|
|
981
|
+
## Suspense
|
|
982
|
+
|
|
983
|
+
Рендерер Markdown Intlayer завантажується динамічно. Хоча він оптимізований, базовий фрагмент аналізатора становить близько 55 кБ. Синхронне завантаження цього затримує початковий рендеринг сторінки та погіршує First Contentful Paint (FCP).
|
|
984
|
+
|
|
985
|
+
Щоб запобігти блокуванню інтерфейсу користувача, Intlayer інтегрується з API Suspense від React. Він завантажує аналізатор у фоновому режимі та створює Promise під час завантаження.
|
|
986
|
+
|
|
987
|
+
Оберніть будь-який компонент, що відображає Intlayer Markdown, у межу `<Suspense>`. Це показує локалізований резервний стан під час завантаження фрагмента, дозволяючи решті вашого DOM відображатися негайно.
|
|
988
|
+
|
|
989
|
+
Попередження: Якщо ви не надасте межу `<Suspense>`, React призупинить рендеринг на кореневому рівні або заблокує рендеринг всього дерева компонентів, доки фрагмент у 55 кБ не буде повністю завантажений.
|
|
990
|
+
|
|
991
|
+
<Tabs>
|
|
992
|
+
<Tab label="Next.js" value="nextjs">
|
|
993
|
+
|
|
994
|
+
У маршрутизаторі Next.js App Router ви можете використовувати або React `Suspense` для клієнтських компонентів, або файл `loading.tsx` для серверних компонентів.
|
|
995
|
+
|
|
996
|
+
**Клієнтський компонент:**
|
|
997
|
+
|
|
998
|
+
```tsx fileName="components/MyComponent.tsx"
|
|
999
|
+
"use client";
|
|
1000
|
+
import { useIntlayer } from "next-intlayer";
|
|
1001
|
+
import { Suspense } from "react";
|
|
1002
|
+
|
|
1003
|
+
const MyComponent = () => {
|
|
1004
|
+
const markdownContent = useIntlayer("my-markdown");
|
|
1005
|
+
|
|
1006
|
+
return (
|
|
1007
|
+
<Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
|
|
1008
|
+
);
|
|
1009
|
+
};
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
**Серверний компонент з `loading.tsx`:**
|
|
1013
|
+
|
|
1014
|
+
```tsx fileName="app/loading.tsx"
|
|
1015
|
+
export default function Loading() {
|
|
1016
|
+
return <div>Loading...</div>;
|
|
1017
|
+
}
|
|
1018
|
+
```
|
|
1019
|
+
|
|
1020
|
+
```tsx fileName="app/page.tsx"
|
|
1021
|
+
import { useIntlayer } from "next-intlayer/server";
|
|
1022
|
+
|
|
1023
|
+
const MyPage = () => {
|
|
1024
|
+
const markdownContent = useIntlayer("my-markdown");
|
|
1025
|
+
return <div>{markdownContent}</div>;
|
|
1026
|
+
};
|
|
1027
|
+
|
|
1028
|
+
export default MyPage;
|
|
1029
|
+
```
|
|
1030
|
+
|
|
1031
|
+
</Tab>
|
|
1032
|
+
|
|
1033
|
+
<Tab label="React" value="react">
|
|
1034
|
+
|
|
1035
|
+
```tsx
|
|
1036
|
+
import { useIntlayer } from "react-intlayer";
|
|
1037
|
+
import { Suspense } from "react";
|
|
1038
|
+
|
|
1039
|
+
const MyComponent = () => {
|
|
1040
|
+
const markdownContent = useIntlayer("my-markdown");
|
|
1041
|
+
|
|
1042
|
+
return (
|
|
1043
|
+
<Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
|
|
1044
|
+
);
|
|
1045
|
+
};
|
|
1046
|
+
```
|
|
1047
|
+
|
|
1048
|
+
</Tab>
|
|
1049
|
+
|
|
1050
|
+
<Tab label="Vue" value="vue">
|
|
1051
|
+
|
|
1052
|
+
Vue має вбудований компонент `<Suspense>`. Оберніть компонент, який відображає вміст Markdown, у межу `<Suspense>`.
|
|
1053
|
+
|
|
1054
|
+
```vue fileName="MyComponent.vue"
|
|
1055
|
+
<script setup>
|
|
1056
|
+
import { useIntlayer } from "vue-intlayer";
|
|
1057
|
+
|
|
1058
|
+
const { markdownContent } = useIntlayer("my-markdown");
|
|
1059
|
+
</script>
|
|
1060
|
+
|
|
1061
|
+
<template>
|
|
1062
|
+
<Suspense>
|
|
1063
|
+
<component :is="markdownContent" />
|
|
1064
|
+
<template #fallback>
|
|
1065
|
+
<div>Loading...</div>
|
|
1066
|
+
</template>
|
|
1067
|
+
</Suspense>
|
|
1068
|
+
</template>
|
|
1069
|
+
```
|
|
1070
|
+
|
|
1071
|
+
</Tab>
|
|
1072
|
+
<Tab label="Svelte" value="svelte">
|
|
1073
|
+
|
|
1074
|
+
Svelte не має еквівалента API Suspense. Використовуйте блок `{#await}` для обробки асинхронного рендерингу вмісту Markdown.
|
|
1075
|
+
|
|
1076
|
+
```svelte fileName="MyComponent.svelte"
|
|
1077
|
+
<script lang="ts">
|
|
1078
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
1079
|
+
|
|
1080
|
+
const content = useIntlayer("my-markdown");
|
|
1081
|
+
</script>
|
|
1082
|
+
|
|
1083
|
+
{#await $content.markdownContent}
|
|
1084
|
+
<div>Loading...</div>
|
|
1085
|
+
{:then rendered}
|
|
1086
|
+
{@html rendered}
|
|
1087
|
+
{/await}
|
|
1088
|
+
```
|
|
1089
|
+
|
|
1090
|
+
</Tab>
|
|
1091
|
+
<Tab label="Preact" value="preact">
|
|
1092
|
+
|
|
1093
|
+
Preact підтримує API React Suspense через `preact/compat`.
|
|
1094
|
+
|
|
1095
|
+
```tsx fileName="MyComponent.tsx"
|
|
1096
|
+
import { useIntlayer } from "preact-intlayer";
|
|
1097
|
+
import { Suspense } from "preact/compat";
|
|
1098
|
+
|
|
1099
|
+
const MyComponent = () => {
|
|
1100
|
+
const markdownContent = useIntlayer("my-markdown");
|
|
1101
|
+
|
|
1102
|
+
return (
|
|
1103
|
+
<Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
|
|
1104
|
+
);
|
|
1105
|
+
};
|
|
1106
|
+
```
|
|
1107
|
+
|
|
1108
|
+
</Tab>
|
|
1109
|
+
<Tab label="Solid" value="solid">
|
|
1110
|
+
|
|
1111
|
+
Solid має власний компонент `<Suspense>` від `solid-js`.
|
|
1112
|
+
|
|
1113
|
+
```tsx fileName="MyComponent.tsx"
|
|
1114
|
+
import { useIntlayer } from "solid-intlayer";
|
|
1115
|
+
import { Suspense } from "solid-js";
|
|
1116
|
+
|
|
1117
|
+
const MyComponent = () => {
|
|
1118
|
+
const { markdownContent } = useIntlayer("my-markdown");
|
|
1119
|
+
|
|
1120
|
+
return (
|
|
1121
|
+
<Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>
|
|
1122
|
+
);
|
|
1123
|
+
};
|
|
1124
|
+
```
|
|
1125
|
+
|
|
1126
|
+
</Tab>
|
|
1127
|
+
<Tab label="Angular" value="angular">
|
|
1128
|
+
|
|
1129
|
+
Angular не має API Suspense. Використовуйте відкладені представлення (`@defer`) в Angular для обробки вмісту Markdown із відкладеним завантаженням (потрібен Angular 17+).
|
|
1130
|
+
|
|
1131
|
+
```typescript fileName="my.component.ts"
|
|
1132
|
+
import { Component } from "@angular/core";
|
|
1133
|
+
import { useIntlayer } from "angular-intlayer";
|
|
1134
|
+
|
|
1135
|
+
@Component({
|
|
1136
|
+
selector: "app-my",
|
|
1137
|
+
template: `
|
|
1138
|
+
@defer {
|
|
1139
|
+
<div [innerHTML]="content().markdownContent"></div>
|
|
1140
|
+
} @loading {
|
|
1141
|
+
<div>Loading...</div>
|
|
1142
|
+
}
|
|
1143
|
+
`,
|
|
1144
|
+
})
|
|
1145
|
+
export class MyComponent {
|
|
1146
|
+
content = useIntlayer("my-markdown");
|
|
1147
|
+
}
|
|
1148
|
+
```
|
|
1149
|
+
|
|
1150
|
+
</Tab>
|
|
1151
|
+
</Tabs>
|
|
1152
|
+
|
|
1153
|
+
---
|
|
1154
|
+
|
|
1155
|
+
## Довідник опцій
|
|
1156
|
+
|
|
1157
|
+
Ці параметри можна передати до `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer` та `renderMarkdown`.
|
|
1158
|
+
|
|
1159
|
+
| Option | Type | Default | Опис |
|
|
1160
|
+
| :-------------------- | :---------- | :------ | :------------------------------------------------------------------------------------------- |
|
|
1161
|
+
| `forceBlock` | `boolean` | `false` | Примушує вивід обгортатися блочним елементом (наприклад, `<div>`). |
|
|
1162
|
+
| `forceInline` | `boolean` | `false` | Примушує вивід обгортатися вбудованим елементом (наприклад, `<span>`). |
|
|
1163
|
+
| `tagfilter` | `boolean` | `true` | Увімкнює фільтр тегів GitHub для підвищення безпеки шляхом видалення небезпечних тегів HTML. |
|
|
1164
|
+
| `preserveFrontmatter` | `boolean` | `false` | Якщо `true`, початкові метадані (frontmatter) на початку рядка Markdown не будуть видалені. |
|
|
1165
|
+
| `components` | `Overrides` | `{}` | Карта тегів HTML до власних компонентів (наприклад, `{ h1: MyHeading }`). |
|
|
1166
|
+
| `wrapper` | `Component` | `null` | Спеціальний компонент для обгортання відображеного Markdown. |
|
|
1167
|
+
| `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
|
|
|
@@ -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
|
|