@intlayer/docs 8.10.0-canary.0 → 8.10.0-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,11 +2,11 @@
2
2
  createdAt: 2025-02-07
3
3
  updatedAt: 2026-05-19
4
4
  title: Markdown
5
- description: Intlayer를 사용하여 다국어 웹사이트에서 Markdown 콘텐츠를 선언하고 사용하는 방법을 알아보세요. 이 온라인 문서의 단계를 따라 프로젝트에 Markdown을 손쉽게 통합하세요.
5
+ description: Intlayer를 사용하여 다국어 웹사이트에서 Markdown 콘텐츠를 선언하고 사용하는 방법을 알아보세요. 이 온라인 문서의 단계를 따라 Markdown을 프로젝트에 원활하게 통합하세요.
6
6
  keywords:
7
7
  - Markdown
8
- - 국제화
9
- - 문서
8
+ - Internationalization
9
+ - Documentation
10
10
  - Intlayer
11
11
  - Next.js
12
12
  - JavaScript
@@ -22,46 +22,46 @@ history:
22
22
  changes: "`.content.md` 파일 지원 추가"
23
23
  - version: 8.5.0
24
24
  date: 2026-03-24
25
- changes: "Add `intlayerMarkdown` plugin object; use `app.use(intlayerMarkdown)` instead of `app.use(installIntlayerMarkdown)`"
25
+ changes: "`intlayerMarkdown` 플러그인 객체 추가; `app.use(installIntlayerMarkdown)` 대신 `app.use(intlayerMarkdown)` 사용"
26
26
  - version: 8.5.0
27
27
  date: 2026-03-24
28
- changes: "{{framework}}-intlayer에서 {{framework}}-intlayer/markdown으로 임포트 이동"
28
+ changes: "가져오기를 `{{framework}}-intlayer`에서 `{{framework}}-intlayer/markdown`으로 이동"
29
29
  - version: 8.0.0
30
30
  date: 2026-01-22
31
31
  changes: "MarkdownRenderer / useMarkdownRenderer / renderMarkdown 유틸리티 및 forceInline 옵션 추가"
32
32
  - version: 8.0.0
33
33
  date: 2026-01-18
34
- changes: "마크다운 콘텐츠의 자동 장식, MDX 및 SSR 지원"
34
+ changes: "Markdown 콘텐츠의 자동 장식, MDX 및 SSR 지원"
35
35
  - version: 5.5.10
36
36
  date: 2025-06-29
37
- changes: "히스토리 초기화"
37
+ changes: "초기 기록 생성"
38
38
  ---
39
39
 
40
- # 마크다운 / 리치 텍스트 콘텐츠
40
+ # Markdown / 서식 있는 텍스트 콘텐츠
41
41
 
42
- Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘텐츠를 지원합니다. 이를 통해 블로그, 기사 등과 같은 리치 포맷의 콘텐츠를 쉽게 작성하고 관리할 수 있습니다.
42
+ Intlayer는 Markdown 구문을 사용하여 정의된 서식 있는 텍스트 콘텐츠를 지원합니다. 이를 통해 블로그, 기사 등과 같이 서식이 풍부한 콘텐츠를 쉽게 작성하고 유지 관리할 수 있습니다.
43
43
 
44
- ## 마크다운 콘텐츠 선언
44
+ ## Markdown 콘텐츠 선언
45
45
 
46
- 마크다운 콘텐츠는 `md` 함수를 사용하거나 (마크다운 문법을 포함하는 경우) 단순히 문자열로 선언할 수 있습니다.
46
+ `md` 함수를 사용하거나 (Markdown 구문이 포함된 경우) 단순한 문자열로 Markdown 콘텐츠를 선언할 수 있습니다.
47
47
 
48
48
  <Tabs>
49
49
  <Tab label=".content.md" value=".content.md">
50
- 버전 `8.10.0`부터 `.content.md` 파일에 마크다운 콘텐츠를 직접 선언할 수 있습니다. Intlayer 자동으로 마크다운 콘텐츠를 감지하고 파싱합니다.
50
+ 버전 `8.10.0`부터 `.content.md` 파일에서 직접 Markdown 콘텐츠를 선언할 수 있습니다. Intlayer Markdown 콘텐츠를 자동으로 감지하고 구문 분석합니다.
51
51
 
52
- ```md fileName="markdown-file.ko.content.md"
52
+ ```md fileName="markdown-file.en.content.md"
53
53
  ---
54
54
  key: my-markdown-content
55
- description: 나의 콘텐츠
56
- locale: ko
55
+ description: 콘텐츠
56
+ locale: en
57
57
  ---
58
58
 
59
- # 나의 콘텐츠
59
+ # 콘텐츠
60
60
 
61
- 여기 마크다운 콘텐츠 예시가 있습니다
61
+ 여기에 마크다운 콘텐츠 예시가 있습니다.
62
62
  ```
63
63
 
64
- `locale` frontmatter 필드는 콘텐츠의 로케일을 정의하는 필드입니다. 선택 사항입니다. 지정하지 않으면 Intlayer는 기본 로케일을 사용하며, 특정 로케일에 대한 번역이 없는 경우 폴백(fallback) 로케일로도 사용됩니다.
64
+ `locale` 프런트매터 필드는 콘텐츠의 로캘을 정의하는 필드입니다. 선택 사항입니다. 제공되지 않으면 Intlayer는 기본 로캘을 사용하며, 특정 로캘에 대한 번역이 없을 대체 로캘로도 사용됩니다.
65
65
 
66
66
  파일 구조 예시:
67
67
 
@@ -75,11 +75,11 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
75
75
  └── markdown-file.es.content.md
76
76
  ```
77
77
 
78
- front-matter에는 [사전 정의(Dictionary definition)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/content_file.md)에 정의된 모든 속성을 추가할 수 있습니다.
78
+ [사전 정의](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/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";
@@ -87,7 +87,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
87
87
  const markdownDictionary = {
88
88
  key: "app",
89
89
  content: {
90
- myMarkdownContent: md("## My title \n\nLorem Ipsum"),
90
+ myMarkdownContent: md("## 제목 \n\nLorem Ipsum"),
91
91
  },
92
92
  } satisfies Dictionary;
93
93
 
@@ -96,19 +96,20 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
96
96
 
97
97
  </Tab>
98
98
  <Tab label="자동 감지" value="automatic-detection">
99
- 문자열에 일반적인 마크다운 표시(예: 헤더, 리스트, 링크 등)가 포함되어 있으면 Intlayer가 자동으로 변환합니다.
99
+ 문자열에 일반적인 Markdown 표시기(예: 제목, 목록, 링크 등)가 포함된 경우 Intlayer가 자동으로 이를 변환합니다.
100
100
 
101
101
  ```typescript fileName="markdownDictionary.content.ts"
102
102
  export default {
103
103
  key: "app",
104
- contentAutoTransformation: true, // 마크다운 콘텐츠 자동 감지 활성화 - intlayer.config.ts에서 전역 설정 가능
104
+ contentAutoTransformation: true, // Markdown 콘텐츠의 자동 감지 활성화 - intlayer.config.ts에서 전역으로 설정할 수 있습니다
105
105
  content: {
106
- myMarkdownContent: "## My title \n\nLorem Ipsum",
106
+ myMarkdownContent: "## 제목 \n\nLorem Ipsum",
107
107
  },
108
108
  };
109
109
  ```
110
110
 
111
111
  </Tab>
112
+
112
113
  <Tab label="외부 파일" value="external-files">
113
114
  `file` 함수를 사용하여 `.md` 파일을 직접 가져옵니다.
114
115
 
@@ -120,7 +121,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
120
121
  content: {
121
122
  content: t({
122
123
  en: md(file("./myMarkdown.en.md")),
123
- fr: md(file("./myMarkdown.fr.md")),
124
+ ko: md(file("./myMarkdown.ko.md")),
124
125
  }),
125
126
  },
126
127
  };
@@ -131,38 +132,74 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
131
132
 
132
133
  ---
133
134
 
134
- ## 마크다운 렌더링
135
+ ## Markdown 렌더링
136
+
137
+ Intlayer는 Markdown을 렌더링하는 두 가지 독립적인 방법을 제공합니다:
138
+
139
+ 1. **`useIntlayer`를 통한 방식**
140
+ — Intlayer는 프레임워크의 네이티브 출력(JSX, VNode, HTML 문자열)으로 `md` 노드를 자동으로 변환합니다.
141
+ - 프런트매터는 분석되어 `.metadata`로 노출됩니다. 렌더링은 두 가지 수준에서 재정의할 수 있습니다. `MarkdownProvider`(또는 프레임워크 동등 기능)를 통한 전역 설정과 `.use()`를 통한 노드별 로컬 설정입니다. 두 가지를 결합할 수 있으며, `.use()`가 `MarkdownProvider`보다 우선하고, `MarkdownProvider`가 기본값보다 우선합니다.
135
142
 
136
- 렌더링은 Intlayer의 콘텐츠 시스템을 통해 자동으로 처리하거나, 전문 도구를 사용해 수동으로 처리할 있습니다.
143
+ 2. **도우미 유틸리티** `<MarkdownRenderer />`, `useMarkdownRenderer()`, `renderMarkdown()`은 **순수 Markdown 문자열만** 허용하는 독립 실행형 도구입니다. 이들은 `useIntlayer`와 독립적이며 반환되는 장식된 노드와 작동하지 않습니다.
137
144
 
138
- ### 1. 자동 렌더링 (`useIntlayer` 사용)
145
+ Markdown 렌더링은 **MDX**를 지원합니다 Markdown 내에서 이름으로 직접 JSX/프레임워크 컴포넌트를 사용할 수 있습니다.
139
146
 
140
- `useIntlayer`로 콘텐츠에 접근하면 마크다운 노드는 이미 렌더링 준비가 되어 있습니다.
147
+ ### 1. 자동 렌더링 (`useIntlayer`를 통한 방식)
141
148
 
142
149
  <Tabs group="framework">
143
150
  <Tab label="React / Next.js" value="react">
144
- 마크다운 노드는 JSX로 직접 렌더링할 수 있습니다.
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
 
155
- `.use()` 메서드를 사용하여 특정 노드에 대해 로컬 오버라이드를 제공할 수도 있습니다:
175
+ > `MarkdownProvider`가 없는 경우 Intlayer는 기본 Markdown to JSX 파서를 사용하여 마크다운을 렌더링합니다.
176
+
177
+ `.use()` 메서드를 사용하여 특정 노드에 대한 로컬 재정의를 제공할 수도 있습니다:
156
178
 
157
179
  ```tsx
158
180
  {myMarkdownContent.use({
159
- h1: ({ children }) => <h1 className="text-3xl font-bold">{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
+ 그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
194
+
195
+ ```tsx
196
+ {myMarkdownContent.metadata}
197
+ {myMarkdownContent.metadata.title}
198
+ ```
199
+
163
200
  </Tab>
164
201
  <Tab label="Vue" value="vue">
165
- Vue에서는 마크다운 콘텐츠를 내장된 `component`를 사용하거나 직접 노드로 렌더링할 수 있습니다.
202
+ Vue에서 Markdown 콘텐츠는 내장 `component`를 사용하거나 노드로서 직접 렌더링될 수 있습니다.
166
203
 
167
204
  ```vue fileName="App.vue"
168
205
  <script setup>
@@ -175,48 +212,188 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
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
+ 그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
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는 기본적으로 마크다운을 HTML 문자열로 렌더링합니다. 이를 렌더링하려면 `{@html}`을 사용하세요.
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
- {@html $content.myMarkdownContent}
266
+ <MarkdownProvider components={{ h1: MyHeading }}>
267
+ {@html $content.myMarkdownContent}
268
+ </MarkdownProvider>
269
+ ```
270
+
271
+ > `MarkdownProvider`가 없는 경우 Intlayer는 기본 컴파일러를 사용하여 마크다운을 렌더링합니다.
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
+ 그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
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는 JSX에서 마크다운 노드를 직접 지원합니다.
296
+ Preact는 JSX에서 Markdown 노드를 직접 지원합니다.
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 to 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
+ 그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
338
+
339
+ ```tsx
340
+ {myMarkdownContent.metadata}
341
+ {myMarkdownContent.metadata.title}
202
342
  ```
203
343
 
204
344
  </Tab>
205
345
  <Tab label="Solid" value="solid">
206
- Solid는 JSX에서 마크다운 노드를 직접 지원합니다.
346
+ Solid는 JSX에서 Markdown 노드를 직접 지원합니다.
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 to 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
+ 그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
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,7 +408,9 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
231
408
  }
232
409
  ```
233
410
 
234
- `.use()` 메서드를 사용하여 특정 노드에 대해 로컬 오버라이드를 제공할 수도 있습니다:
411
+ > IntlayerMarkdown 공급자가 구성되지 않은 경우 Intlayer는 기본 컴파일러를 사용하여 렌더링합니다.
412
+
413
+ `.use()` 메서드를 사용하여 특정 노드에 대한 로컬 재정의를 제공할 수도 있습니다:
235
414
 
236
415
  ```typescript
237
416
  content().myMarkdownContent.use({
@@ -239,27 +418,46 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
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
+ 그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
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
444
  <Tab label="React / Next.js" value="react">
251
445
 
446
+ #### `<MarkdownRenderer />` 컴포넌트
447
+
448
+ 특정 옵션으로 Markdown 문자열을 렌더링합니다.
449
+
252
450
  ```tsx
253
451
  import { MarkdownRenderer } from "react-intlayer/markdown";
254
452
 
255
453
  <MarkdownRenderer forceBlock={true} tagfilter={true}>
256
- {"# My Title"}
454
+ {"# 제목"}
257
455
  </MarkdownRenderer>
258
456
  ```
259
457
 
260
458
  #### `useMarkdownRenderer()` 훅
261
459
 
262
- 미리 구성된 렌더러 함수를 얻습니다.
460
+ 사전 구성된 렌더러 함수를 가져옵니다.
263
461
 
264
462
  ```tsx
265
463
  import { useMarkdownRenderer } from "react-intlayer/markdown";
@@ -269,16 +467,16 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
269
467
  components: { h1: (props) => <h1 {...props} className="custom" /> }
270
468
  });
271
469
 
272
- return renderMarkdown("# My Title");
470
+ return renderMarkdown("# 제목");
273
471
  ```
274
472
 
275
473
  #### `renderMarkdown()` 유틸리티
276
- 컴포넌트 외부에서 렌더링할 사용하는 독립 유틸리티입니다.
474
+ 컴포넌트 외부 렌더링용 독립 실행형 유틸리티.
277
475
 
278
476
  ```tsx
279
477
  import { renderMarkdown } from "react-intlayer/markdown";
280
478
 
281
- const jsx = renderMarkdown("# My Title", { forceBlock: true });
479
+ const jsx = renderMarkdown("# 제목", { forceBlock: true });
282
480
  ```
283
481
 
284
482
  </Tab>
@@ -292,7 +490,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
292
490
  </script>
293
491
 
294
492
  <template>
295
- <MarkdownRenderer :forceBlock="true" content="# My Title" />
493
+ <MarkdownRenderer :forceBlock="true" content="# 제목" />
296
494
  </template>
297
495
  ```
298
496
 
@@ -306,7 +504,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
306
504
  import { MarkdownRenderer } from "svelte-intlayer/markdown";
307
505
  </script>
308
506
 
309
- <MarkdownRenderer forceBlock={true} value="# My Title" />
507
+ <MarkdownRenderer forceBlock={true} value="# 제목" />
310
508
  ```
311
509
 
312
510
  #### `useMarkdownRenderer()` 훅
@@ -317,7 +515,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
317
515
  const render = useMarkdownRenderer();
318
516
  </script>
319
517
 
320
- {@html render("# My Title")}
518
+ {@html render("# 제목")}
321
519
  ```
322
520
 
323
521
  #### `renderMarkdown()` 유틸리티
@@ -327,7 +525,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
327
525
  import { renderMarkdown } from "svelte-intlayer/markdown";
328
526
  </script>
329
527
 
330
- {@html renderMarkdown("# My Title")}
528
+ {@html renderMarkdown("# 제목")}
331
529
  ```
332
530
 
333
531
  </Tab>
@@ -338,7 +536,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
338
536
  import { MarkdownRenderer } from "preact-intlayer/markdown";
339
537
 
340
538
  <MarkdownRenderer forceBlock={true}>
341
- {"# My Title"}
539
+ {"# 제목"}
342
540
  </MarkdownRenderer>
343
541
  ```
344
542
 
@@ -349,7 +547,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
349
547
 
350
548
  const render = useMarkdownRenderer();
351
549
 
352
- return <div>{render("# My Title")}</div>;
550
+ return <div>{render("# 제목")}</div>;
353
551
  ```
354
552
 
355
553
  #### `renderMarkdown()` 유틸리티
@@ -357,7 +555,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
357
555
  ```tsx
358
556
  import { renderMarkdown } from "preact-intlayer/markdown";
359
557
 
360
- return <div>{renderMarkdown("# My Title")}</div>;
558
+ return <div>{renderMarkdown("# 제목")}</div>;
361
559
  ```
362
560
 
363
561
  </Tab>
@@ -368,7 +566,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
368
566
  import { MarkdownRenderer } from "solid-intlayer/markdown";
369
567
 
370
568
  <MarkdownRenderer forceBlock={true}>
371
- {"# My Title"}
569
+ {"# 제목"}
372
570
  </MarkdownRenderer>
373
571
  ```
374
572
 
@@ -379,7 +577,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
379
577
 
380
578
  const render = useMarkdownRenderer();
381
579
 
382
- return <div>{render("# My Title")}</div>;
580
+ return <div>{render("# 제목")}</div>;
383
581
  ```
384
582
 
385
583
  #### `renderMarkdown()` 유틸리티
@@ -387,13 +585,13 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
387
585
  ```tsx
388
586
  import { renderMarkdown } from "solid-intlayer/markdown";
389
587
 
390
- return <div>{renderMarkdown("# My Title")}</div>;
588
+ return <div>{renderMarkdown("# 제목")}</div>;
391
589
  ```
392
590
 
393
591
  </Tab>
394
592
  <Tab label="Angular" value="angular">
395
593
  #### `IntlayerMarkdownService` 서비스
396
- 서비스를 사용하여 마크다운 문자열을 렌더링합니다.
594
+ 서비스를 사용하여 Markdown 문자열을 렌더링합니다.
397
595
 
398
596
  ```typescript
399
597
  import { IntlayerMarkdownService } from "angular-intlayer/markdown";
@@ -412,9 +610,9 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
412
610
 
413
611
  ---
414
612
 
415
- ## `MarkdownProvider`를 사용한 전역 구성
613
+ ## `MarkdownProvider`를 통한 전역 구성
416
614
 
417
- 애플리케이션 전체에 대해 마크다운 렌더링을 전역으로 구성할 있습니다. 이를 통해 모든 렌더러에 동일한 프롭을 전달하는 번거로움을 피할 있습니다.
615
+ `MarkdownProvider`(또는 해당 프레임워크 기능)는 전체 애플리케이션의 Markdown 렌더링 파이프라인을 구성합니다. 이는 자동 `useIntlayer` 렌더링과 도우미 유틸리티 모두에 적용됩니다. 여기서 설정된 옵션이 기본값이며, `.use()`는 노드 수준에서 이를 덮어씁니다.
418
616
 
419
617
  <Tabs group="framework">
420
618
  <Tab label="React / Next.js" value="react">
@@ -425,8 +623,9 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
425
623
  export const AppProvider = ({ children }) => (
426
624
  <MarkdownProvider
427
625
  components={{
428
- h1: ({ children }) => <h1 className="text-2xl font-bold">{children}</h1>,
429
- a: ({ href, children }) => <Link to={href}>{children}</Link>,
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} />,
430
629
  }}
431
630
  >
432
631
  {children}
@@ -434,7 +633,9 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
434
633
  );
435
634
  ```
436
635
 
437
- 나만의 Markdown 렌더러를 사용할 수도 있습니다:
636
+ > MDX 지원 — Markdown 내부에서 사용된 모든 컴포넌트 이름(예: `<MyCustomJSXComponent />`)은 `components` 맵에서 확인됩니다.
637
+
638
+ 자체 마크다운 렌더러를 사용할 수도 있습니다:
438
639
 
439
640
  ```tsx fileName="AppProvider.tsx"
440
641
  import { MarkdownProvider } from "react-intlayer/markdown";
@@ -442,8 +643,8 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
442
643
  export const AppProvider = ({ children }) => (
443
644
  <MarkdownProvider
444
645
  renderMarkdown={async (md) => {
445
- const { compileMarkdown } = await import('react-intlayer/markdown');
446
- return compileMarkdown(md);
646
+ const { renderMarkdown } = await import('react-intlayer/markdown');
647
+ return renderMarkdown(md);
447
648
  }}
448
649
  >
449
650
  {children}
@@ -451,7 +652,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
451
652
  );
452
653
  ```
453
654
 
454
- > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션의 번들 크기를 줄이는 좋은 방법입니다.
655
+ > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
455
656
 
456
657
  </Tab>
457
658
  <Tab label="Vue" value="vue">
@@ -478,7 +679,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
478
679
  app.mount("#app");
479
680
  ```
480
681
 
481
- 나만의 Markdown 렌더러를 사용할 수도 있습니다:
682
+ 자체 마크다운 렌더러를 사용할 수도 있습니다:
482
683
 
483
684
  ```typescript fileName="main.ts"
484
685
  import { createApp } from "vue";
@@ -491,15 +692,15 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
491
692
  app.use(intlayer);
492
693
  app.use(intlayerMarkdown, {
493
694
  renderMarkdown: async (md) => {
494
- const { compileMarkdown } = await import('vue-intlayer/markdown');
495
- return compileMarkdown(md);
695
+ const { renderMarkdown } = await import('vue-intlayer/markdown');
696
+ return renderMarkdown(md);
496
697
  },
497
698
  });
498
699
 
499
700
  app.mount("#app");
500
701
  ```
501
702
 
502
- > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션의 번들 크기를 줄이는 좋은 방법입니다.
703
+ > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
503
704
 
504
705
  </Tab>
505
706
  <Tab label="Svelte" value="svelte">
@@ -519,7 +720,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
519
720
  </MarkdownProvider>
520
721
  ```
521
722
 
522
- 나만의 Markdown 렌더러를 사용할 수도 있습니다:
723
+ 자체 마크다운 렌더러를 사용할 수도 있습니다:
523
724
 
524
725
  ```svelte fileName="App.svelte"
525
726
  <script lang="ts">
@@ -528,15 +729,15 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
528
729
 
529
730
  <MarkdownProvider
530
731
  renderMarkdown={async (md) => {
531
- const { compileMarkdown } = await import('svelte-intlayer/markdown');
532
- return compileMarkdown(md);
732
+ const { renderMarkdown } = await import('svelte-intlayer/markdown');
733
+ return renderMarkdown(md);
533
734
  }}
534
735
  >
535
736
  <slot />
536
737
  </MarkdownProvider>
537
738
  ```
538
739
 
539
- > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션의 번들 크기를 줄이는 좋은 방법입니다.
740
+ > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
540
741
 
541
742
  </Tab>
542
743
  <Tab label="Preact" value="preact">
@@ -555,7 +756,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
555
756
  );
556
757
  ```
557
758
 
558
- 나만의 Markdown 렌더러를 사용할 수도 있습니다:
759
+ 자체 마크다운 렌더러를 사용할 수도 있습니다:
559
760
 
560
761
  ```tsx fileName="AppProvider.tsx"
561
762
  import { MarkdownProvider } from "preact-intlayer/markdown";
@@ -563,8 +764,8 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
563
764
  export const AppProvider = ({ children }) => (
564
765
  <MarkdownProvider
565
766
  renderMarkdown={async (md) => {
566
- const { compileMarkdown } = await import('preact-intlayer/markdown');
567
- return compileMarkdown(md);
767
+ const { renderMarkdown } = await import('preact-intlayer/markdown');
768
+ return renderMarkdown(md);
568
769
  }}
569
770
  >
570
771
  {children}
@@ -572,7 +773,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
572
773
  );
573
774
  ```
574
775
 
575
- > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션의 번들 크기를 줄이는 좋은 방법입니다.
776
+ > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
576
777
 
577
778
  </Tab>
578
779
  <Tab label="Solid" value="solid">
@@ -591,7 +792,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
591
792
  );
592
793
  ```
593
794
 
594
- 나만의 Markdown 렌더러를 사용할 수도 있습니다:
795
+ 자체 마크다운 렌더러를 사용할 수도 있습니다:
595
796
 
596
797
  ```tsx fileName="AppProvider.tsx"
597
798
  import { MarkdownProvider } from "solid-intlayer/markdown";
@@ -599,8 +800,8 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
599
800
  export const AppProvider = (props) => (
600
801
  <MarkdownProvider
601
802
  renderMarkdown={async (md) => {
602
- const { compileMarkdown } = await import('solid-intlayer/markdown');
603
- return compileMarkdown(md);
803
+ const { renderMarkdown } = await import('solid-intlayer/markdown');
804
+ return renderMarkdown(md);
604
805
  }}
605
806
  >
606
807
  {props.children}
@@ -608,59 +809,29 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
608
809
  );
609
810
  ```
610
811
 
611
- > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션의 번들 크기를 줄이는 좋은 방법입니다.
812
+ > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
612
813
 
613
814
  </Tab>
614
815
  <Tab label="Angular" value="angular">
615
816
 
616
- ```typescript fileName="app.config.ts"
617
- import { createIntlayerMarkdownProvider } from "angular-intlayer/markdown";
618
-
619
- export const appConfig: ApplicationConfig = {
620
- providers: [
621
- createIntlayerMarkdownProvider({
622
- components: {
623
- h1: { class: "text-2xl font-bold" },
624
- },
625
- }),
626
- ],
627
- };
628
- ```
629
-
630
- 나만의 Markdown 렌더러를 사용할 수도 있습니다:
631
-
632
- ```typescript fileName="app.config.ts"
633
- import { createIntlayerMarkdownProvider } from "angular-intlayer/markdown";
817
+ ```typescript fileName="app.module.ts"
818
+ import { NgModule } from '@angular/core';
819
+ import { IntlayerMarkdownModule } from 'angular-intlayer/markdown';
634
820
 
635
- export const appConfig: ApplicationConfig = {
636
- providers: [
637
- createIntlayerMarkdownProvider({
821
+ @NgModule({
822
+ imports: [
823
+ IntlayerMarkdownModule.forRoot({
638
824
  renderMarkdown: async (md) => {
639
- const { compileMarkdown } = await import('angular-intlayer/markdown');
640
- return compileMarkdown(md);
641
- },
642
- }),
643
- ],
644
- };
825
+ const { renderMarkdown } = await import('angular-intlayer/markdown');
826
+ return renderMarkdown(md);
827
+ }
828
+ })
829
+ ]
830
+ })
831
+ export class AppModule {}
645
832
  ```
646
833
 
647
- > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션의 번들 크기를 줄이는 좋은 방법입니다.
834
+ > Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
648
835
 
649
836
  </Tab>
650
837
  </Tabs>
651
-
652
- ---
653
-
654
- ## 옵션 참조
655
-
656
- 이 옵션들은 `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer`, 및 `renderMarkdown`에 전달할 수 있습니다.
657
-
658
- | 옵션 | 타입 | 기본값 | 설명 |
659
- | :-------------------- | :---------- | :------ | :---------------------------------------------------------------------------- |
660
- | `forceBlock` | `boolean` | `false` | 출력을 블록 수준 요소(예: `<div>`)로 감싸도록 강제합니다. |
661
- | `forceInline` | `boolean` | `false` | 출력을 인라인 요소(예: `<span>`)로 감싸도록 강제합니다. |
662
- | `tagfilter` | `boolean` | `true` | 위험한 HTML 태그를 제거하여 보안을 강화하는 GitHub Tag Filter를 활성화합니다. |
663
- | `preserveFrontmatter` | `boolean` | `false` | `true`인 경우 마크다운 문자열 시작 부분의 frontmatter가 제거되지 않습니다. |
664
- | `components` | `Overrides` | `{}` | HTML 태그를 커스텀 컴포넌트에 매핑하는 맵(예: `{ h1: MyHeading }`). |
665
- | `wrapper` | `Component` | `null` | 렌더링된 마크다운을 감싸는 커스텀 컴포넌트입니다. |
666
- | `renderMarkdown` | `Function` | `null` | 기본 마크다운 컴파일러를 완전히 대체하는 커스텀 렌더링 함수입니다. |