@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.
- package/docs/ar/dictionary/markdown.md +402 -82
- package/docs/de/dictionary/markdown.md +269 -98
- package/docs/en/dictionary/markdown.md +221 -25
- package/docs/en-GB/dictionary/markdown.md +351 -67
- package/docs/es/dictionary/markdown.md +286 -115
- package/docs/fr/dictionary/markdown.md +292 -121
- package/docs/hi/dictionary/markdown.md +366 -81
- package/docs/id/dictionary/markdown.md +368 -83
- package/docs/it/dictionary/markdown.md +288 -122
- package/docs/ko/dictionary/markdown.md +297 -126
- package/docs/pl/dictionary/markdown.md +276 -106
- package/docs/pt/dictionary/markdown.md +276 -106
- package/docs/ru/dictionary/markdown.md +70 -505
- package/docs/tr/dictionary/markdown.md +291 -122
- package/docs/uk/dictionary/markdown.md +377 -92
- package/docs/vi/dictionary/markdown.md +377 -92
- package/docs/zh/dictionary/markdown.md +284 -117
- package/package.json +7 -7
- package/docs/ja/dictionary/markdown.md +0 -666
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
createdAt: 2025-02-07
|
|
3
3
|
updatedAt: 2026-05-19
|
|
4
4
|
title: Markdown
|
|
5
|
-
description: Pelajari cara mendeklarasikan dan menggunakan konten Markdown di situs web multibahasa Anda dengan Intlayer. Ikuti langkah-langkah dalam dokumentasi online ini untuk mengintegrasikan Markdown
|
|
5
|
+
description: Pelajari cara mendeklarasikan dan menggunakan konten Markdown di situs web multibahasa Anda dengan Intlayer. Ikuti langkah-langkah dalam dokumentasi online ini untuk mengintegrasikan Markdown dengan mulus ke dalam proyek Anda.
|
|
6
6
|
keywords:
|
|
7
7
|
- Markdown
|
|
8
8
|
- Internasionalisasi
|
|
@@ -19,19 +19,19 @@ slugs:
|
|
|
19
19
|
history:
|
|
20
20
|
- version: 8.10.0
|
|
21
21
|
date: 2026-05-19
|
|
22
|
-
changes: "Menambahkan dukungan file `.content.md`"
|
|
22
|
+
changes: "Menambahkan dukungan untuk file `.content.md`"
|
|
23
23
|
- version: 8.5.0
|
|
24
24
|
date: 2026-03-24
|
|
25
|
-
changes: "
|
|
25
|
+
changes: "Menambahkan objek plugin `intlayerMarkdown`; gunakan `app.use(intlayerMarkdown)` sebagai ganti `app.use(installIntlayerMarkdown)`"
|
|
26
26
|
- version: 8.5.0
|
|
27
27
|
date: 2026-03-24
|
|
28
|
-
changes: "
|
|
28
|
+
changes: "Memindahkan impor dari `{{framework}}-intlayer` ke `{{framework}}-intlayer/markdown`"
|
|
29
29
|
- version: 8.0.0
|
|
30
30
|
date: 2026-01-22
|
|
31
31
|
changes: "Menambahkan utilitas MarkdownRenderer / useMarkdownRenderer / renderMarkdown dan opsi forceInline"
|
|
32
32
|
- version: 8.0.0
|
|
33
33
|
date: 2026-01-18
|
|
34
|
-
changes: "Dekorasi otomatis konten markdown, dukungan MDX dan SSR"
|
|
34
|
+
changes: "Dekorasi otomatis dari konten markdown, dukungan MDX dan SSR"
|
|
35
35
|
- version: 5.5.10
|
|
36
36
|
date: 2025-06-29
|
|
37
37
|
changes: "Inisialisasi riwayat"
|
|
@@ -39,21 +39,21 @@ history:
|
|
|
39
39
|
|
|
40
40
|
# Markdown / Konten Teks Kaya
|
|
41
41
|
|
|
42
|
-
Intlayer mendukung konten teks kaya yang didefinisikan menggunakan sintaks Markdown. Ini memungkinkan Anda menulis dan memelihara konten
|
|
42
|
+
Intlayer mendukung konten teks kaya yang didefinisikan menggunakan sintaks Markdown. Ini memungkinkan Anda dengan mudah menulis dan memelihara konten berformat kaya seperti blog, artikel, dan lainnya.
|
|
43
43
|
|
|
44
44
|
## Mendeklarasikan Konten Markdown
|
|
45
45
|
|
|
46
|
-
Anda dapat
|
|
46
|
+
Anda dapat mendeklarasikan konten Markdown menggunakan fungsi `md` atau cukup sebagai string (jika mengandung sintaks Markdown).
|
|
47
47
|
|
|
48
48
|
<Tabs>
|
|
49
49
|
<Tab label=".content.md" value=".content.md">
|
|
50
|
-
|
|
50
|
+
Mulai dari versi `8.10.0`, Anda dapat mendeklarasikan konten Markdown langsung di dalam file `.content.md`. Intlayer akan secara otomatis mendeteksi dan mem-parsing konten Markdown.
|
|
51
51
|
|
|
52
|
-
```md fileName="markdown-file.
|
|
52
|
+
```md fileName="markdown-file.en.content.md"
|
|
53
53
|
---
|
|
54
54
|
key: my-markdown-content
|
|
55
55
|
description: Konten saya
|
|
56
|
-
locale:
|
|
56
|
+
locale: en
|
|
57
57
|
---
|
|
58
58
|
|
|
59
59
|
# Konten saya
|
|
@@ -61,7 +61,7 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
|
|
|
61
61
|
Berikut adalah contoh konten markdown
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
Bidang
|
|
64
|
+
Bidang `locale` pada front-matter adalah bidang yang mendefinisikan bahasa konten. Ini bersifat opsional. Jika tidak diberikan, Intlayer akan menggunakan bahasa default, yang juga digunakan sebagai bahasa cadangan jika tidak ada terjemahan yang tersedia untuk bahasa tertentu.
|
|
65
65
|
|
|
66
66
|
Contoh struktur file:
|
|
67
67
|
|
|
@@ -75,11 +75,11 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
|
|
|
75
75
|
└── markdown-file.es.content.md
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
Anda dapat menambahkan properti apa pun yang didefinisikan dalam [
|
|
78
|
+
Anda dapat menambahkan properti apa pun yang didefinisikan dalam [Definisi Kamus](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md) ke dalam front-matter
|
|
79
79
|
|
|
80
80
|
</Tab>
|
|
81
81
|
<Tab label="Pembungkusan Manual" value="manual-wrapping">
|
|
82
|
-
Gunakan fungsi `md` untuk
|
|
82
|
+
Gunakan fungsi `md` untuk mendeklarasikan konten Markdown secara eksplisit. Ini berguna jika Anda ingin memastikan sebuah string diperlakukan sebagai Markdown bahkan jika tidak mengandung sintaks yang jelas.
|
|
83
83
|
|
|
84
84
|
```typescript fileName="markdownDictionary.content.ts"
|
|
85
85
|
import { md, type Dictionary } from "intlayer";
|
|
@@ -87,7 +87,7 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
|
|
|
87
87
|
const markdownDictionary = {
|
|
88
88
|
key: "app",
|
|
89
89
|
content: {
|
|
90
|
-
myMarkdownContent: md("##
|
|
90
|
+
myMarkdownContent: md("## Judul saya \n\nLorem Ipsum"),
|
|
91
91
|
},
|
|
92
92
|
} satisfies Dictionary;
|
|
93
93
|
|
|
@@ -96,19 +96,20 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
|
|
|
96
96
|
|
|
97
97
|
</Tab>
|
|
98
98
|
<Tab label="Deteksi Otomatis" value="automatic-detection">
|
|
99
|
-
Jika string mengandung indikator Markdown umum (seperti
|
|
99
|
+
Jika string mengandung indikator Markdown umum (seperti judul, daftar, tautan, dll.), Intlayer akan secara otomatis mengubahnya.
|
|
100
100
|
|
|
101
101
|
```typescript fileName="markdownDictionary.content.ts"
|
|
102
102
|
export default {
|
|
103
103
|
key: "app",
|
|
104
|
-
contentAutoTransformation: true, //
|
|
104
|
+
contentAutoTransformation: true, // Mengaktifkan deteksi otomatis dari konten Markdown - Dapat diatur secara global di intlayer.config.ts
|
|
105
105
|
content: {
|
|
106
|
-
myMarkdownContent: "##
|
|
106
|
+
myMarkdownContent: "## Judul saya \n\nLorem Ipsum",
|
|
107
107
|
},
|
|
108
108
|
};
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
</Tab>
|
|
112
|
+
|
|
112
113
|
<Tab label="File Eksternal" value="external-files">
|
|
113
114
|
Impor file `.md` secara langsung menggunakan fungsi `file`.
|
|
114
115
|
|
|
@@ -120,7 +121,7 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
|
|
|
120
121
|
content: {
|
|
121
122
|
content: t({
|
|
122
123
|
en: md(file("./myMarkdown.en.md")),
|
|
123
|
-
|
|
124
|
+
id: md(file("./myMarkdown.id.md")),
|
|
124
125
|
}),
|
|
125
126
|
},
|
|
126
127
|
};
|
|
@@ -133,36 +134,72 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
|
|
|
133
134
|
|
|
134
135
|
## Merender Markdown
|
|
135
136
|
|
|
136
|
-
|
|
137
|
+
Intlayer menyediakan dua cara independen untuk merender Markdown:
|
|
138
|
+
|
|
139
|
+
1. **Melalui `useIntlayer`**
|
|
140
|
+
— Intlayer secara otomatis mengubah simpul `md` menjadi keluaran asli kerangka kerja (JSX, VNode, string HTML).
|
|
141
|
+
- Frontmatter diparsing dan diekspos sebagai `.metadata`. Anda dapat mengesampingkan rendering pada dua tingkat — secara global dengan `MarkdownProvider` (atau yang setara di kerangka kerja) dan secara lokal per simpul dengan `.use()`. Keduanya dapat digabungkan; `.use()` diutamakan daripada `MarkdownProvider`, yang pada gilirannya diutamakan daripada nilai default.
|
|
137
142
|
|
|
138
|
-
|
|
143
|
+
2. **Utilitas Pembantu** — `<MarkdownRenderer />`, `useMarkdownRenderer()`, dan `renderMarkdown()` adalah alat mandiri yang menerima **hanya string Markdown mentah**. Alat-alat ini independen dari `useIntlayer` dan tidak bekerja dengan simpul dekoratif yang dikembalikannya.
|
|
139
144
|
|
|
140
|
-
|
|
145
|
+
Rendering Markdown mendukung **MDX** — gunakan komponen JSX/kerangka kerja apa pun berdasarkan namanya langsung di dalam Markdown Anda.
|
|
146
|
+
|
|
147
|
+
### 1. Rendering Otomatis (melalui `useIntlayer`)
|
|
141
148
|
|
|
142
149
|
<Tabs group="framework">
|
|
143
150
|
<Tab label="React / Next.js" value="react">
|
|
144
|
-
|
|
151
|
+
Simpul Markdown dapat dirender langsung sebagai 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} />, // Komponen MDX
|
|
168
|
+
}}
|
|
169
|
+
>
|
|
170
|
+
<AppContent />
|
|
171
|
+
</MarkdownProvider>
|
|
172
|
+
);
|
|
153
173
|
```
|
|
154
174
|
|
|
155
|
-
|
|
175
|
+
> Jika `MarkdownProvider` tidak ada, Intlayer akan merender markdown menggunakan parser default Markdown ke JSX.
|
|
176
|
+
|
|
177
|
+
Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
|
|
156
178
|
|
|
157
179
|
```tsx
|
|
158
180
|
{myMarkdownContent.use({
|
|
159
|
-
h1: ({ children }) => <h1
|
|
181
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
160
182
|
})}
|
|
161
183
|
```
|
|
162
184
|
|
|
185
|
+
Anda dapat mengambil Markdown sebagai sebuah string:
|
|
186
|
+
|
|
187
|
+
```tsx
|
|
188
|
+
{myMarkdownContent.value}
|
|
189
|
+
{String(myMarkdownContent)}
|
|
190
|
+
{myMarkdownContent.toString()}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Dan Anda dapat mengakses metadata markdown Anda seperti ini:
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
{myMarkdownContent.metadata}
|
|
197
|
+
{myMarkdownContent.metadata.title}
|
|
198
|
+
```
|
|
199
|
+
|
|
163
200
|
</Tab>
|
|
164
201
|
<Tab label="Vue" value="vue">
|
|
165
|
-
Di Vue, konten Markdown dapat dirender menggunakan
|
|
202
|
+
Di Vue, konten Markdown dapat dirender menggunakan tag `component` bawaan atau langsung sebagai sebuah simpul.
|
|
166
203
|
|
|
167
204
|
```vue fileName="App.vue"
|
|
168
205
|
<script setup>
|
|
@@ -175,43 +212,183 @@ Saat Anda mengakses konten melalui `useIntlayer`, node Markdown sudah disiapkan
|
|
|
175
212
|
</template>
|
|
176
213
|
```
|
|
177
214
|
|
|
215
|
+
Konfigurasikan secara global melalui plugin `intlayerMarkdown` (mendukung komponen kustom 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), // Komponen MDX
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
> Jika plugin `intlayerMarkdown` tidak diinstal, Intlayer akan merender menggunakan kompilator default.
|
|
229
|
+
|
|
230
|
+
Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
|
|
231
|
+
|
|
232
|
+
```vue
|
|
233
|
+
<component :is="myMarkdownContent.use({
|
|
234
|
+
h1: (props) => h('h1', { style: { color: 'red' } }, props.children),
|
|
235
|
+
})" />
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Anda dapat mengambil Markdown sebagai sebuah string:
|
|
239
|
+
|
|
240
|
+
```vue
|
|
241
|
+
{{ myMarkdownContent.value }}
|
|
242
|
+
{{ String(myMarkdownContent) }}
|
|
243
|
+
{{ myMarkdownContent.toString() }}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Dan Anda dapat mengakses metadata markdown Anda seperti ini:
|
|
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
255
|
Svelte merender Markdown sebagai string HTML secara default. Gunakan `{@html}` untuk merendernya.
|
|
181
256
|
|
|
182
|
-
```svelte
|
|
257
|
+
```svelte fileName="App.svelte"
|
|
183
258
|
<script lang="ts">
|
|
184
259
|
import { useIntlayer } from "svelte-intlayer";
|
|
260
|
+
import { MarkdownProvider } from "svelte-intlayer/markdown";
|
|
261
|
+
import MyHeading from "./MyHeading.svelte";
|
|
262
|
+
|
|
185
263
|
const content = useIntlayer("app");
|
|
186
264
|
</script>
|
|
187
265
|
|
|
188
|
-
{
|
|
266
|
+
<MarkdownProvider components={{ h1: MyHeading }}>
|
|
267
|
+
{@html $content.myMarkdownContent}
|
|
268
|
+
</MarkdownProvider>
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
> Jika `MarkdownProvider` tidak ada, Intlayer akan merender markdown menggunakan kompilator default.
|
|
272
|
+
|
|
273
|
+
Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
|
|
274
|
+
|
|
275
|
+
```svelte
|
|
276
|
+
{@html $content.myMarkdownContent.use({ ... })}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Anda dapat mengambil Markdown sebagai sebuah string:
|
|
280
|
+
|
|
281
|
+
```svelte
|
|
282
|
+
{$content.myMarkdownContent.value}
|
|
283
|
+
{String($content.myMarkdownContent)}
|
|
284
|
+
{$content.myMarkdownContent.toString()}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Dan Anda dapat mengakses metadata markdown Anda seperti ini:
|
|
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 mendukung
|
|
296
|
+
Preact mendukung simpul Markdown secara langsung di JSX.
|
|
194
297
|
|
|
195
298
|
```tsx fileName="App.tsx"
|
|
196
299
|
import { useIntlayer } from "preact-intlayer";
|
|
300
|
+
import { MarkdownProvider } from "preact-intlayer/markdown";
|
|
197
301
|
|
|
198
302
|
const AppContent = () => {
|
|
199
303
|
const { myMarkdownContent } = useIntlayer("app");
|
|
200
304
|
return <div>{myMarkdownContent}</div>;
|
|
201
305
|
};
|
|
306
|
+
|
|
307
|
+
const App = () => (
|
|
308
|
+
<MarkdownProvider
|
|
309
|
+
components={{
|
|
310
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
311
|
+
MyButton: (props) => <button {...props} />, // Komponen MDX
|
|
312
|
+
}}
|
|
313
|
+
>
|
|
314
|
+
<AppContent />
|
|
315
|
+
</MarkdownProvider>
|
|
316
|
+
);
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
> Jika `MarkdownProvider` tidak ada, Intlayer akan merender markdown menggunakan parser default Markdown ke JSX.
|
|
320
|
+
|
|
321
|
+
Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
|
|
322
|
+
|
|
323
|
+
```tsx
|
|
324
|
+
{myMarkdownContent.use({
|
|
325
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
326
|
+
})}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Anda dapat mengambil Markdown sebagai sebuah string:
|
|
330
|
+
|
|
331
|
+
```tsx
|
|
332
|
+
{myMarkdownContent.value}
|
|
333
|
+
{String(myMarkdownContent)}
|
|
334
|
+
{myMarkdownContent.toString()}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Dan Anda dapat mengakses metadata markdown Anda seperti ini:
|
|
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 mendukung
|
|
346
|
+
Solid mendukung simpul Markdown secara langsung di JSX.
|
|
207
347
|
|
|
208
348
|
```tsx fileName="App.tsx"
|
|
209
349
|
import { useIntlayer } from "solid-intlayer";
|
|
350
|
+
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
210
351
|
|
|
211
352
|
const AppContent = () => {
|
|
212
353
|
const { myMarkdownContent } = useIntlayer("app");
|
|
213
354
|
return <div>{myMarkdownContent}</div>;
|
|
214
355
|
};
|
|
356
|
+
|
|
357
|
+
const App = () => (
|
|
358
|
+
<MarkdownProvider
|
|
359
|
+
components={{
|
|
360
|
+
h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
|
|
361
|
+
MyButton: (props) => <button {...props} />, // Komponen MDX
|
|
362
|
+
}}
|
|
363
|
+
>
|
|
364
|
+
<AppContent />
|
|
365
|
+
</MarkdownProvider>
|
|
366
|
+
);
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
> Jika `MarkdownProvider` tidak ada, Intlayer akan merender markdown menggunakan parser default Markdown ke JSX.
|
|
370
|
+
|
|
371
|
+
Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
|
|
372
|
+
|
|
373
|
+
```tsx
|
|
374
|
+
{myMarkdownContent.use({
|
|
375
|
+
h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
|
|
376
|
+
})}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Anda dapat mengambil Markdown sebagai sebuah string:
|
|
380
|
+
|
|
381
|
+
```tsx
|
|
382
|
+
{myMarkdownContent.value}
|
|
383
|
+
{String(myMarkdownContent)}
|
|
384
|
+
{myMarkdownContent.toString()}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Dan Anda dapat mengakses metadata markdown Anda seperti ini:
|
|
388
|
+
|
|
389
|
+
```tsx
|
|
390
|
+
{myMarkdownContent.metadata}
|
|
391
|
+
{myMarkdownContent.metadata.title}
|
|
215
392
|
```
|
|
216
393
|
|
|
217
394
|
</Tab>
|
|
@@ -231,7 +408,9 @@ Saat Anda mengakses konten melalui `useIntlayer`, node Markdown sudah disiapkan
|
|
|
231
408
|
}
|
|
232
409
|
```
|
|
233
410
|
|
|
234
|
-
|
|
411
|
+
> Jika penyedia IntlayerMarkdown tidak dikonfigurasi, Intlayer akan merender menggunakan kompilator default.
|
|
412
|
+
|
|
413
|
+
Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
|
|
235
414
|
|
|
236
415
|
```typescript
|
|
237
416
|
content().myMarkdownContent.use({
|
|
@@ -239,12 +418,27 @@ Saat Anda mengakses konten melalui `useIntlayer`, node Markdown sudah disiapkan
|
|
|
239
418
|
})
|
|
240
419
|
```
|
|
241
420
|
|
|
421
|
+
Anda dapat mengambil Markdown sebagai sebuah string:
|
|
422
|
+
|
|
423
|
+
```typescript
|
|
424
|
+
content().myMarkdownContent.value
|
|
425
|
+
String(content().myMarkdownContent)
|
|
426
|
+
content().myMarkdownContent.toString()
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
Dan Anda dapat mengakses metadata markdown Anda seperti ini:
|
|
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. Utilitas Pembantu (Hanya String Markdown)
|
|
246
440
|
|
|
247
|
-
|
|
441
|
+
Utilitas ini merender **hanya string Markdown mentah** dan independen dari `useIntlayer`. Gunakan utilitas ini saat Anda perlu merender Markdown dari sumber selain dari kamus Anda.
|
|
248
442
|
|
|
249
443
|
<Tabs group="framework">
|
|
250
444
|
<Tab label="React / Next.js" value="react">
|
|
@@ -257,13 +451,13 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
257
451
|
import { MarkdownRenderer } from "react-intlayer/markdown";
|
|
258
452
|
|
|
259
453
|
<MarkdownRenderer forceBlock={true} tagfilter={true}>
|
|
260
|
-
{"#
|
|
454
|
+
{"# Judul Saya"}
|
|
261
455
|
</MarkdownRenderer>
|
|
262
456
|
```
|
|
263
457
|
|
|
264
|
-
#### `useMarkdownRenderer()`
|
|
458
|
+
#### Hook `useMarkdownRenderer()`
|
|
265
459
|
|
|
266
|
-
|
|
460
|
+
Mendapatkan fungsi perender yang sudah dikonfigurasi sebelumnya.
|
|
267
461
|
|
|
268
462
|
```tsx
|
|
269
463
|
import { useMarkdownRenderer } from "react-intlayer/markdown";
|
|
@@ -273,16 +467,16 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
273
467
|
components: { h1: (props) => <h1 {...props} className="custom" /> }
|
|
274
468
|
});
|
|
275
469
|
|
|
276
|
-
return renderMarkdown("#
|
|
470
|
+
return renderMarkdown("# Judul Saya");
|
|
277
471
|
```
|
|
278
472
|
|
|
279
473
|
#### Utilitas `renderMarkdown()`
|
|
280
|
-
Utilitas mandiri untuk
|
|
474
|
+
Utilitas mandiri untuk rendering di luar komponen.
|
|
281
475
|
|
|
282
476
|
```tsx
|
|
283
477
|
import { renderMarkdown } from "react-intlayer/markdown";
|
|
284
478
|
|
|
285
|
-
const jsx = renderMarkdown("#
|
|
479
|
+
const jsx = renderMarkdown("# Judul Saya", { forceBlock: true });
|
|
286
480
|
```
|
|
287
481
|
|
|
288
482
|
</Tab>
|
|
@@ -296,7 +490,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
296
490
|
</script>
|
|
297
491
|
|
|
298
492
|
<template>
|
|
299
|
-
<MarkdownRenderer :forceBlock="true" content="#
|
|
493
|
+
<MarkdownRenderer :forceBlock="true" content="# Judul Saya" />
|
|
300
494
|
</template>
|
|
301
495
|
```
|
|
302
496
|
|
|
@@ -310,10 +504,10 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
310
504
|
import { MarkdownRenderer } from "svelte-intlayer/markdown";
|
|
311
505
|
</script>
|
|
312
506
|
|
|
313
|
-
<MarkdownRenderer forceBlock={true} value="#
|
|
507
|
+
<MarkdownRenderer forceBlock={true} value="# Judul Saya" />
|
|
314
508
|
```
|
|
315
509
|
|
|
316
|
-
#### `useMarkdownRenderer()`
|
|
510
|
+
#### Hook `useMarkdownRenderer()`
|
|
317
511
|
|
|
318
512
|
```svelte
|
|
319
513
|
<script lang="ts">
|
|
@@ -321,7 +515,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
321
515
|
const render = useMarkdownRenderer();
|
|
322
516
|
</script>
|
|
323
517
|
|
|
324
|
-
{@html render("#
|
|
518
|
+
{@html render("# Judul Saya")}
|
|
325
519
|
```
|
|
326
520
|
|
|
327
521
|
#### Utilitas `renderMarkdown()`
|
|
@@ -331,7 +525,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
331
525
|
import { renderMarkdown } from "svelte-intlayer/markdown";
|
|
332
526
|
</script>
|
|
333
527
|
|
|
334
|
-
{@html renderMarkdown("#
|
|
528
|
+
{@html renderMarkdown("# Judul Saya")}
|
|
335
529
|
```
|
|
336
530
|
|
|
337
531
|
</Tab>
|
|
@@ -342,18 +536,18 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
342
536
|
import { MarkdownRenderer } from "preact-intlayer/markdown";
|
|
343
537
|
|
|
344
538
|
<MarkdownRenderer forceBlock={true}>
|
|
345
|
-
{"#
|
|
539
|
+
{"# Judul Saya"}
|
|
346
540
|
</MarkdownRenderer>
|
|
347
541
|
```
|
|
348
542
|
|
|
349
|
-
#### `useMarkdownRenderer()`
|
|
543
|
+
#### Hook `useMarkdownRenderer()`
|
|
350
544
|
|
|
351
545
|
```tsx
|
|
352
546
|
import { useMarkdownRenderer } from "preact-intlayer/markdown";
|
|
353
547
|
|
|
354
548
|
const render = useMarkdownRenderer();
|
|
355
549
|
|
|
356
|
-
return <div>{render("#
|
|
550
|
+
return <div>{render("# Judul Saya")}</div>;
|
|
357
551
|
```
|
|
358
552
|
|
|
359
553
|
#### Utilitas `renderMarkdown()`
|
|
@@ -361,7 +555,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
361
555
|
```tsx
|
|
362
556
|
import { renderMarkdown } from "preact-intlayer/markdown";
|
|
363
557
|
|
|
364
|
-
return <div>{renderMarkdown("#
|
|
558
|
+
return <div>{renderMarkdown("# Judul Saya")}</div>;
|
|
365
559
|
```
|
|
366
560
|
|
|
367
561
|
</Tab>
|
|
@@ -372,18 +566,18 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
372
566
|
import { MarkdownRenderer } from "solid-intlayer/markdown";
|
|
373
567
|
|
|
374
568
|
<MarkdownRenderer forceBlock={true}>
|
|
375
|
-
{"#
|
|
569
|
+
{"# Judul Saya"}
|
|
376
570
|
</MarkdownRenderer>
|
|
377
571
|
```
|
|
378
572
|
|
|
379
|
-
#### `useMarkdownRenderer()`
|
|
573
|
+
#### Hook `useMarkdownRenderer()`
|
|
380
574
|
|
|
381
575
|
```tsx
|
|
382
576
|
import { useMarkdownRenderer } from "solid-intlayer/markdown";
|
|
383
577
|
|
|
384
578
|
const render = useMarkdownRenderer();
|
|
385
579
|
|
|
386
|
-
return <div>{render("#
|
|
580
|
+
return <div>{render("# Judul Saya")}</div>;
|
|
387
581
|
```
|
|
388
582
|
|
|
389
583
|
#### Utilitas `renderMarkdown()`
|
|
@@ -391,16 +585,16 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
391
585
|
```tsx
|
|
392
586
|
import { renderMarkdown } from "solid-intlayer/markdown";
|
|
393
587
|
|
|
394
|
-
return <div>{renderMarkdown("#
|
|
588
|
+
return <div>{renderMarkdown("# Judul Saya")}</div>;
|
|
395
589
|
```
|
|
396
590
|
|
|
397
591
|
</Tab>
|
|
398
592
|
<Tab label="Angular" value="angular">
|
|
399
593
|
#### Layanan `IntlayerMarkdownService`
|
|
400
|
-
|
|
594
|
+
Merender string Markdown menggunakan layanan.
|
|
401
595
|
|
|
402
596
|
```typescript
|
|
403
|
-
import { IntlayerMarkdownService } from "angular-intlayer";
|
|
597
|
+
import { IntlayerMarkdownService } from "angular-intlayer/markdown";
|
|
404
598
|
|
|
405
599
|
export class MyComponent {
|
|
406
600
|
constructor(private markdownService: IntlayerMarkdownService) {}
|
|
@@ -418,7 +612,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
|
|
|
418
612
|
|
|
419
613
|
## Konfigurasi Global dengan `MarkdownProvider`
|
|
420
614
|
|
|
421
|
-
|
|
615
|
+
`MarkdownProvider` (atau padanan kerangka kerjanya) mengonfigurasi jalur rendering Markdown untuk seluruh aplikasi Anda. Ini berlaku baik untuk rendering `useIntlayer` otomatis maupun utilitas pembantu. Opsi yang ditetapkan di sini adalah default — `.use()` mengesampingkannya di tingkat simpul.
|
|
422
616
|
|
|
423
617
|
<Tabs group="framework">
|
|
424
618
|
<Tab label="React / Next.js" value="react">
|
|
@@ -429,8 +623,28 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
|
|
|
429
623
|
export const AppProvider = ({ children }) => (
|
|
430
624
|
<MarkdownProvider
|
|
431
625
|
components={{
|
|
432
|
-
h1: (
|
|
433
|
-
a: ({ href,
|
|
626
|
+
h1: (props) => <h1 style={{color: 'green'}} {...props} />,
|
|
627
|
+
a: ({ href, ...props }) => <a style={{color: 'red'}} {...props} />,
|
|
628
|
+
MyCustomJSXComponent: (props) => <span style={{color: 'red'}} {...props} />,
|
|
629
|
+
}}
|
|
630
|
+
>
|
|
631
|
+
{children}
|
|
632
|
+
</MarkdownProvider>
|
|
633
|
+
);
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
> MDX didukung — nama komponen apa pun yang digunakan di dalam Markdown Anda (misalnya `<MyCustomJSXComponent />`) diselesaikan terhadap peta `components`.
|
|
637
|
+
|
|
638
|
+
Anda juga dapat menggunakan perender markdown Anda sendiri:
|
|
639
|
+
|
|
640
|
+
```tsx fileName="AppProvider.tsx"
|
|
641
|
+
import { MarkdownProvider } from "react-intlayer/markdown";
|
|
642
|
+
|
|
643
|
+
export const AppProvider = ({ children }) => (
|
|
644
|
+
<MarkdownProvider
|
|
645
|
+
renderMarkdown={async (md) => {
|
|
646
|
+
const { renderMarkdown } = await import('react-intlayer/markdown');
|
|
647
|
+
return renderMarkdown(md);
|
|
434
648
|
}}
|
|
435
649
|
>
|
|
436
650
|
{children}
|
|
@@ -438,6 +652,8 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
|
|
|
438
652
|
);
|
|
439
653
|
```
|
|
440
654
|
|
|
655
|
+
> Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
|
|
656
|
+
|
|
441
657
|
</Tab>
|
|
442
658
|
<Tab label="Vue" value="vue">
|
|
443
659
|
|
|
@@ -463,6 +679,29 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
|
|
|
463
679
|
app.mount("#app");
|
|
464
680
|
```
|
|
465
681
|
|
|
682
|
+
Anda juga dapat menggunakan perender markdown Anda sendiri:
|
|
683
|
+
|
|
684
|
+
```typescript fileName="main.ts"
|
|
685
|
+
import { createApp } from "vue";
|
|
686
|
+
import { intlayer } from "vue-intlayer";
|
|
687
|
+
import { intlayerMarkdown } from "vue-intlayer/markdown";
|
|
688
|
+
import App from "./App.vue";
|
|
689
|
+
|
|
690
|
+
const app = createApp(App);
|
|
691
|
+
|
|
692
|
+
app.use(intlayer);
|
|
693
|
+
app.use(intlayerMarkdown, {
|
|
694
|
+
renderMarkdown: async (md) => {
|
|
695
|
+
const { renderMarkdown } = await import('vue-intlayer/markdown');
|
|
696
|
+
return renderMarkdown(md);
|
|
697
|
+
},
|
|
698
|
+
});
|
|
699
|
+
|
|
700
|
+
app.mount("#app");
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
> Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
|
|
704
|
+
|
|
466
705
|
</Tab>
|
|
467
706
|
<Tab label="Svelte" value="svelte">
|
|
468
707
|
|
|
@@ -481,6 +720,25 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
|
|
|
481
720
|
</MarkdownProvider>
|
|
482
721
|
```
|
|
483
722
|
|
|
723
|
+
Anda juga dapat menggunakan perender markdown Anda sendiri:
|
|
724
|
+
|
|
725
|
+
```svelte fileName="App.svelte"
|
|
726
|
+
<script lang="ts">
|
|
727
|
+
import { MarkdownProvider } from "svelte-intlayer/markdown";
|
|
728
|
+
</script>
|
|
729
|
+
|
|
730
|
+
<MarkdownProvider
|
|
731
|
+
renderMarkdown={async (md) => {
|
|
732
|
+
const { renderMarkdown } = await import('svelte-intlayer/markdown');
|
|
733
|
+
return renderMarkdown(md);
|
|
734
|
+
}}
|
|
735
|
+
>
|
|
736
|
+
<slot />
|
|
737
|
+
</MarkdownProvider>
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
> Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
|
|
741
|
+
|
|
484
742
|
</Tab>
|
|
485
743
|
<Tab label="Preact" value="preact">
|
|
486
744
|
|
|
@@ -498,6 +756,25 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
|
|
|
498
756
|
);
|
|
499
757
|
```
|
|
500
758
|
|
|
759
|
+
Anda juga dapat menggunakan perender markdown Anda sendiri:
|
|
760
|
+
|
|
761
|
+
```tsx fileName="AppProvider.tsx"
|
|
762
|
+
import { MarkdownProvider } from "preact-intlayer/markdown";
|
|
763
|
+
|
|
764
|
+
export const AppProvider = ({ children }) => (
|
|
765
|
+
<MarkdownProvider
|
|
766
|
+
renderMarkdown={async (md) => {
|
|
767
|
+
const { renderMarkdown } = await import('preact-intlayer/markdown');
|
|
768
|
+
return renderMarkdown(md);
|
|
769
|
+
}}
|
|
770
|
+
>
|
|
771
|
+
{children}
|
|
772
|
+
</MarkdownProvider>
|
|
773
|
+
);
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
> Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
|
|
777
|
+
|
|
501
778
|
</Tab>
|
|
502
779
|
<Tab label="Solid" value="solid">
|
|
503
780
|
|
|
@@ -515,38 +792,46 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
|
|
|
515
792
|
);
|
|
516
793
|
```
|
|
517
794
|
|
|
518
|
-
|
|
519
|
-
<Tab label="Angular" value="angular">
|
|
795
|
+
Anda juga dapat menggunakan perender markdown Anda sendiri:
|
|
520
796
|
|
|
521
|
-
```
|
|
522
|
-
import {
|
|
797
|
+
```tsx fileName="AppProvider.tsx"
|
|
798
|
+
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
523
799
|
|
|
524
|
-
export const
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
800
|
+
export const AppProvider = (props) => (
|
|
801
|
+
<MarkdownProvider
|
|
802
|
+
renderMarkdown={async (md) => {
|
|
803
|
+
const { renderMarkdown } = await import('solid-intlayer/markdown');
|
|
804
|
+
return renderMarkdown(md);
|
|
805
|
+
}}
|
|
806
|
+
>
|
|
807
|
+
{props.children}
|
|
808
|
+
</MarkdownProvider>
|
|
809
|
+
);
|
|
533
810
|
```
|
|
534
811
|
|
|
535
|
-
|
|
536
|
-
</Tabs>
|
|
812
|
+
> Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
|
|
537
813
|
|
|
538
|
-
|
|
814
|
+
</Tab>
|
|
815
|
+
<Tab label="Angular" value="angular">
|
|
539
816
|
|
|
540
|
-
|
|
817
|
+
```typescript fileName="app.module.ts"
|
|
818
|
+
import { NgModule } from '@angular/core';
|
|
819
|
+
import { IntlayerMarkdownModule } from 'angular-intlayer/markdown';
|
|
820
|
+
|
|
821
|
+
@NgModule({
|
|
822
|
+
imports: [
|
|
823
|
+
IntlayerMarkdownModule.forRoot({
|
|
824
|
+
renderMarkdown: async (md) => {
|
|
825
|
+
const { renderMarkdown } = await import('angular-intlayer/markdown');
|
|
826
|
+
return renderMarkdown(md);
|
|
827
|
+
}
|
|
828
|
+
})
|
|
829
|
+
]
|
|
830
|
+
})
|
|
831
|
+
export class AppModule {}
|
|
832
|
+
```
|
|
541
833
|
|
|
542
|
-
|
|
834
|
+
> Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
|
|
543
835
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
| `forceBlock` | `boolean` | `false` | Memaksa output untuk dibungkus dalam elemen tingkat blok (misalnya, `<div>`). |
|
|
547
|
-
| `forceInline` | `boolean` | `false` | Memaksa output untuk dibungkus dalam elemen inline (misalnya, `<span>`). |
|
|
548
|
-
| `tagfilter` | `boolean` | `true` | Mengaktifkan Filter Tag GitHub untuk keamanan yang lebih baik dengan menghapus tag HTML yang berbahaya. |
|
|
549
|
-
| `preserveFrontmatter` | `boolean` | `false` | Jika `true`, frontmatter di awal string Markdown tidak akan dihapus. |
|
|
550
|
-
| `components` | `Overrides` | `{}` | Peta tag HTML ke komponen kustom (misalnya, `{ h1: MyHeading }`). |
|
|
551
|
-
| `wrapper` | `Component` | `null` | Komponen kustom untuk membungkus Markdown yang dirender. |
|
|
552
|
-
| `renderMarkdown` | `Function` | `null` | Fungsi render kustom untuk menggantikan sepenuhnya kompiler Markdown default. |
|
|
836
|
+
</Tab>
|
|
837
|
+
</Tabs>
|