@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는 Markdown 구문을 사용하여 정의된 서식 있는 텍스트
|
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
</Tab>
|
|
98
|
-
<Tab label="
|
|
99
|
-
|
|
98
|
+
<Tab label="외부 파일" value="external-files">
|
|
99
|
+
`file` 함수를 사용하여 `.md` 파일을 직접 가져옵니다.
|
|
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
|
+
ko: md(file("./myMarkdown.ko.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
|
-
ko: md(file("./myMarkdown.ko.md")),
|
|
125
|
-
}),
|
|
125
|
+
myMarkdownContent: "## 내 제목 \n\nLorem Ipsum",
|
|
126
126
|
},
|
|
127
127
|
};
|
|
128
128
|
```
|
|
@@ -130,8 +130,6 @@ Intlayer는 Markdown 구문을 사용하여 정의된 서식 있는 텍스트
|
|
|
130
130
|
</Tab>
|
|
131
131
|
</Tabs>
|
|
132
132
|
|
|
133
|
-
---
|
|
134
|
-
|
|
135
133
|
## Markdown 렌더링
|
|
136
134
|
|
|
137
135
|
Intlayer는 Markdown을 렌더링하는 두 가지 독립적인 방법을 제공합니다:
|
|
@@ -147,7 +145,7 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
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 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
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 to 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
|
+
그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
|
|
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 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
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 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
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 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
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 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
633
719
|
);
|
|
634
720
|
```
|
|
635
721
|
|
|
722
|
+
|
|
636
723
|
> MDX 지원 — Markdown 내부에서 사용된 모든 컴포넌트 이름(예: `<MyCustomJSXComponent />`)은 `components` 맵에서 확인됩니다.
|
|
637
724
|
|
|
638
725
|
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
@@ -643,6 +730,7 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
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 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
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
|
+
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
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 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
679
809
|
app.mount("#app");
|
|
680
810
|
```
|
|
681
811
|
|
|
812
|
+
|
|
813
|
+
> MDX 지원 — Markdown 내부에서 사용된 모든 컴포넌트 이름(예: `<MyCustomJSXComponent />`)은 `components` 맵에서 확인됩니다.
|
|
814
|
+
|
|
682
815
|
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
683
816
|
|
|
684
817
|
```typescript fileName="main.ts"
|
|
@@ -720,6 +853,9 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
720
853
|
</MarkdownProvider>
|
|
721
854
|
```
|
|
722
855
|
|
|
856
|
+
|
|
857
|
+
> MDX 지원 — Markdown 내부에서 사용된 모든 컴포넌트 이름(예: `<MyCustomJSXComponent />`)은 `components` 맵에서 확인됩니다.
|
|
858
|
+
|
|
723
859
|
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
724
860
|
|
|
725
861
|
```svelte fileName="App.svelte"
|
|
@@ -756,6 +892,9 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
756
892
|
);
|
|
757
893
|
```
|
|
758
894
|
|
|
895
|
+
|
|
896
|
+
> MDX 지원 — Markdown 내부에서 사용된 모든 컴포넌트 이름(예: `<MyCustomJSXComponent />`)은 `components` 맵에서 확인됩니다.
|
|
897
|
+
|
|
759
898
|
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
760
899
|
|
|
761
900
|
```tsx fileName="AppProvider.tsx"
|
|
@@ -792,6 +931,9 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
792
931
|
);
|
|
793
932
|
```
|
|
794
933
|
|
|
934
|
+
|
|
935
|
+
> MDX 지원 — Markdown 내부에서 사용된 모든 컴포넌트 이름(예: `<MyCustomJSXComponent />`)은 `components` 맵에서 확인됩니다.
|
|
936
|
+
|
|
795
937
|
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
796
938
|
|
|
797
939
|
```tsx fileName="AppProvider.tsx"
|
|
@@ -835,3 +977,191 @@ Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름
|
|
|
835
977
|
|
|
836
978
|
</Tab>
|
|
837
979
|
</Tabs>
|
|
980
|
+
|
|
981
|
+
## 서스펜스 (Suspense)
|
|
982
|
+
|
|
983
|
+
Intlayer Markdown 렌더러는 동적으로 로드됩니다. 최적화되어 있지만 기본 구문 분석기 청크는 약 55kb입니다. 이를 동기적으로 로드하면 초기 페이지 렌더링이 지연되고 FCP(First Contentful Paint)가 저하됩니다.
|
|
984
|
+
|
|
985
|
+
UI 차단을 방지하기 위해 Intlayer는 React의 Suspense API와 통합됩니다. 백그라운드에서 구문 분석기를 가져오고 다운로드하는 동안 Promise를 던집니다.
|
|
986
|
+
|
|
987
|
+
Intlayer Markdown을 렌더링하는 구성 요소를 `<Suspense>` 경계로 래핑하십시오. 이렇게 하면 청크가 다운로드되는 동안 현지화된 대체 상태가 표시되어 나머지 DOM이 즉시 렌더링될 수 있습니다.
|
|
988
|
+
|
|
989
|
+
경고: `<Suspense>` 경계를 제공하지 않으면 React는 55kb 청크가 완전히 로드될 때까지 루트 수준에서 일시 중지하거나 전체 구성 요소 트리의 렌더링을 차단합니다.
|
|
990
|
+
|
|
991
|
+
<Tabs>
|
|
992
|
+
<Tab label="Next.js" value="nextjs">
|
|
993
|
+
|
|
994
|
+
Next.js 앱 라우터에서는 클라이언트 구성 요소에 대해 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에는 Suspense API에 해당하는 기능이 없습니다. Markdown 콘텐츠의 비동기 렌더링을 처리하려면 `{#await}` 블록을 사용하십시오.
|
|
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는 `preact/compat`를 통해 React의 Suspense API를 지원합니다.
|
|
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는 `solid-js`의 자체 `<Suspense>` 구성 요소를 가지고 있습니다.
|
|
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에는 Suspense API가 없습니다. 지연 로드된 Markdown 콘텐츠를 처리하려면 Angular의 지연된 보기(`@defer`)를 사용하십시오(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` | 위험한 HTML 태그를 제거하여 보안을 강화하기 위해 GitHub 태그 필터를 활성화합니다. |
|
|
1164
|
+
| `preserveFrontmatter` | `boolean` | `false` | `true`인 경우 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 @@ Deze aanpak stelt u in staat om:
|
|
|
224
224
|
|
|
225
225
|
GitHub-sterren zijn een sterke indicator voor de populariteit van een project, het vertrouwen van de gemeenschap en de relevantie op de lange termijn. Hoewel ze geen directe maatstaf zijn voor technische kwaliteit, weerspiegelen ze hoeveel ontwikkelaars het project nuttig vinden, de voortgang ervan volgen en het waarschijnlijk zullen adopteren. Voor het schatten van de waarde van een project helpen sterren om de tractie tussen alternatieven te vergelijken en bieden ze inzichten in de groei van het ecosysteem.
|
|
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
|
|