@intlayer/docs 8.10.0-canary.0 → 8.10.0
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 +409 -88
- package/docs/de/dictionary/markdown.md +279 -107
- package/docs/en/dictionary/markdown.md +237 -37
- package/docs/en-GB/dictionary/markdown.md +361 -76
- package/docs/es/dictionary/markdown.md +295 -123
- package/docs/fr/dictionary/markdown.md +301 -129
- package/docs/hi/dictionary/markdown.md +376 -90
- package/docs/id/dictionary/markdown.md +377 -91
- package/docs/it/dictionary/markdown.md +296 -129
- package/docs/ko/dictionary/markdown.md +306 -134
- package/docs/pl/dictionary/markdown.md +287 -116
- package/docs/pt/dictionary/markdown.md +287 -116
- package/docs/ru/dictionary/markdown.md +78 -513
- package/docs/tr/dictionary/markdown.md +300 -130
- package/docs/uk/dictionary/markdown.md +386 -100
- package/docs/vi/dictionary/markdown.md +383 -97
- package/docs/zh/dictionary/markdown.md +293 -125
- 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: Aprenda
|
|
5
|
+
description: Aprenda cómo declarar y usar contenido Markdown en su sitio web multilingüe con Intlayer. Siga los pasos de esta documentación en línea para integrar Markdown sin problemas en su proyecto.
|
|
6
6
|
keywords:
|
|
7
7
|
- Markdown
|
|
8
8
|
- Internacionalización
|
|
@@ -19,49 +19,49 @@ slugs:
|
|
|
19
19
|
history:
|
|
20
20
|
- version: 8.10.0
|
|
21
21
|
date: 2026-05-19
|
|
22
|
-
changes: "
|
|
22
|
+
changes: "Se agregó soporte para archivos `.content.md`"
|
|
23
23
|
- version: 8.5.0
|
|
24
24
|
date: 2026-03-24
|
|
25
|
-
changes: "
|
|
25
|
+
changes: "Se agregó el objeto plugin `intlayerMarkdown`; use `app.use(intlayerMarkdown)` en lugar de `app.use(installIntlayerMarkdown)`"
|
|
26
26
|
- version: 8.5.0
|
|
27
27
|
date: 2026-03-24
|
|
28
|
-
changes: "
|
|
28
|
+
changes: "Se movió la importación de `{{framework}}-intlayer` a `{{framework}}-intlayer/markdown`"
|
|
29
29
|
- version: 8.0.0
|
|
30
30
|
date: 2026-01-22
|
|
31
|
-
changes: "
|
|
31
|
+
changes: "Se agregó la utilidad MarkdownRenderer / useMarkdownRenderer / renderMarkdown y la opción forceInline"
|
|
32
32
|
- version: 8.0.0
|
|
33
33
|
date: 2026-01-18
|
|
34
34
|
changes: "Decoración automática de contenido markdown, soporte para MDX y SSR"
|
|
35
35
|
- version: 5.5.10
|
|
36
36
|
date: 2025-06-29
|
|
37
|
-
changes: "
|
|
37
|
+
changes: "Historial inicializado"
|
|
38
38
|
---
|
|
39
39
|
|
|
40
40
|
# Markdown / Contenido de Texto Enriquecido
|
|
41
41
|
|
|
42
|
-
Intlayer admite contenido de texto enriquecido definido mediante la sintaxis Markdown. Esto le permite escribir y mantener fácilmente contenido con
|
|
42
|
+
Intlayer admite contenido de texto enriquecido definido mediante la sintaxis Markdown. Esto le permite escribir y mantener fácilmente contenido con formato enriquecido, como blogs, artículos y mucho más.
|
|
43
43
|
|
|
44
44
|
## Declarar Contenido Markdown
|
|
45
45
|
|
|
46
|
-
Puede declarar contenido Markdown
|
|
46
|
+
Puede declarar contenido Markdown usando la función `md` o simplemente como una cadena de texto (si contiene sintaxis Markdown).
|
|
47
47
|
|
|
48
48
|
<Tabs>
|
|
49
49
|
<Tab label=".content.md" value=".content.md">
|
|
50
50
|
A partir de la versión `8.10.0`, puede declarar contenido Markdown directamente en archivos `.content.md`. Intlayer detectará y analizará automáticamente el contenido 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: Mi contenido
|
|
56
|
-
locale:
|
|
56
|
+
locale: en
|
|
57
57
|
---
|
|
58
58
|
|
|
59
59
|
# Mi contenido
|
|
60
60
|
|
|
61
|
-
Aquí un ejemplo de contenido
|
|
61
|
+
Aquí hay un ejemplo de contenido markdown
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
El campo
|
|
64
|
+
El campo `locale` en el front-matter es el campo que define el idioma del contenido. Es opcional. Si no se proporciona, Intlayer utilizará el idioma por defecto, que también se usa como idioma de respaldo si no hay traducción disponible para un idioma específico.
|
|
65
65
|
|
|
66
66
|
Ejemplo de estructura de archivos:
|
|
67
67
|
|
|
@@ -75,11 +75,11 @@ Puede declarar contenido Markdown mediante la función `md` o simplemente como u
|
|
|
75
75
|
└── markdown-file.es.content.md
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
Puede agregar en front-matter cualquier propiedad definida en la [
|
|
78
|
+
Puede agregar en el front-matter cualquier propiedad definida en la [Definición del Diccionario](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/content_file.md)
|
|
79
79
|
|
|
80
80
|
</Tab>
|
|
81
81
|
<Tab label="Envoltura Manual" value="manual-wrapping">
|
|
82
|
-
|
|
82
|
+
Use la función `md` para declarar explícitamente contenido Markdown. Esto es útil si desea asegurarse de que una cadena se trate como Markdown incluso si no contiene sintaxis evidente.
|
|
83
83
|
|
|
84
84
|
```typescript fileName="markdownDictionary.content.ts"
|
|
85
85
|
import { md, type Dictionary } from "intlayer";
|
|
@@ -87,7 +87,7 @@ Puede declarar contenido Markdown mediante la función `md` o simplemente como u
|
|
|
87
87
|
const markdownDictionary = {
|
|
88
88
|
key: "app",
|
|
89
89
|
content: {
|
|
90
|
-
myMarkdownContent: md("##
|
|
90
|
+
myMarkdownContent: md("## Mi título \n\nLorem Ipsum"),
|
|
91
91
|
},
|
|
92
92
|
} satisfies Dictionary;
|
|
93
93
|
|
|
@@ -95,33 +95,34 @@ Puede declarar contenido Markdown mediante la función `md` o simplemente como u
|
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
</Tab>
|
|
98
|
-
<Tab label="
|
|
99
|
-
|
|
98
|
+
<Tab label="Archivos Externos" value="external-files">
|
|
99
|
+
Importe archivos `.md` directamente usando la función `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, // Habilitar la detección automática de contenido Markdown - Se puede configurar globalmente en intlayer.config.ts
|
|
105
106
|
content: {
|
|
106
|
-
|
|
107
|
+
content: t({
|
|
108
|
+
en: md(file("./myMarkdown.en.md")),
|
|
109
|
+
es: md(file("./myMarkdown.es.md")),
|
|
110
|
+
}),
|
|
107
111
|
},
|
|
108
112
|
};
|
|
109
113
|
```
|
|
110
114
|
|
|
111
115
|
</Tab>
|
|
112
|
-
<Tab label="Archivos Externos" value="external-files">
|
|
113
|
-
Importe archivos `.md` directamente mediante la función `file`.
|
|
114
116
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
+
<Tab label="Detección Automática" value="automatic-detection">
|
|
118
|
+
Si la cadena contiene indicadores comunes de Markdown (como encabezados, listas, enlaces, etc.), Intlayer la transformará automáticamente.
|
|
117
119
|
|
|
120
|
+
```typescript fileName="markdownDictionary.content.ts"
|
|
118
121
|
export default {
|
|
119
122
|
key: "app",
|
|
123
|
+
contentAutoTransformation: true, // Habilitar detección automática de contenido Markdown - Se puede configurar globalmente en intlayer.config.ts
|
|
120
124
|
content: {
|
|
121
|
-
|
|
122
|
-
en: md(file("./myMarkdown.en.md")),
|
|
123
|
-
fr: md(file("./myMarkdown.fr.md")),
|
|
124
|
-
}),
|
|
125
|
+
myMarkdownContent: "## Mi título \n\nLorem Ipsum",
|
|
125
126
|
},
|
|
126
127
|
};
|
|
127
128
|
```
|
|
@@ -131,13 +132,19 @@ Puede declarar contenido Markdown mediante la función `md` o simplemente como u
|
|
|
131
132
|
|
|
132
133
|
---
|
|
133
134
|
|
|
134
|
-
##
|
|
135
|
+
## Renderización de Markdown
|
|
136
|
+
|
|
137
|
+
Intlayer proporciona dos formas independientes de renderizar Markdown:
|
|
138
|
+
|
|
139
|
+
1. **A través de `useIntlayer`**
|
|
140
|
+
— Intlayer transforma automáticamente el nodo `md` en la salida nativa del framework (JSX, VNode, cadena HTML).
|
|
141
|
+
- El Frontmatter se analiza y expone como `.metadata`. Puede anular la renderización en dos niveles — globalmente con `MarkdownProvider` (o el equivalente en el framework) y localmente por nodo con `.use()`. Ambos pueden combinarse; `.use()` tiene prioridad sobre `MarkdownProvider`, el cual tiene prioridad sobre el predeterminado.
|
|
135
142
|
|
|
136
|
-
|
|
143
|
+
2. **Utilidades auxiliares** — `<MarkdownRenderer />`, `useMarkdownRenderer()`, y `renderMarkdown()` son herramientas independientes que aceptan **únicamente cadenas Markdown puras**. Son independientes de `useIntlayer` y no funcionan con los nodos decorados que este retorna.
|
|
137
144
|
|
|
138
|
-
|
|
145
|
+
La renderización de Markdown admite **MDX** — use cualquier componente JSX/framework por su nombre directamente dentro de su Markdown.
|
|
139
146
|
|
|
140
|
-
|
|
147
|
+
### 1. Renderización Automática (a través de `useIntlayer`)
|
|
141
148
|
|
|
142
149
|
<Tabs group="framework">
|
|
143
150
|
<Tab label="React / Next.js" value="react">
|
|
@@ -145,24 +152,54 @@ Cuando accede al contenido a través de `useIntlayer`, los nodos Markdown ya est
|
|
|
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} />, // Componente MDX
|
|
168
|
+
}}
|
|
169
|
+
>
|
|
170
|
+
<AppContent />
|
|
171
|
+
</MarkdownProvider>
|
|
172
|
+
);
|
|
153
173
|
```
|
|
154
174
|
|
|
155
|
-
|
|
175
|
+
> Si `MarkdownProvider` no está presente, Intlayer renderizará el markdown usando el analizador por defecto de Markdown a JSX.
|
|
176
|
+
|
|
177
|
+
También puede proporcionar anulaciones locales para nodos específicos utilizando el método `.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
|
+
Puede recuperar el Markdown como cadena:
|
|
186
|
+
|
|
187
|
+
```tsx
|
|
188
|
+
{myMarkdownContent.value}
|
|
189
|
+
{String(myMarkdownContent)}
|
|
190
|
+
{myMarkdownContent.toString()}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Y puede acceder a los metadatos de su markdown así:
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
{myMarkdownContent.metadata}
|
|
197
|
+
{myMarkdownContent.metadata.title}
|
|
198
|
+
```
|
|
199
|
+
|
|
163
200
|
</Tab>
|
|
164
201
|
<Tab label="Vue" value="vue">
|
|
165
|
-
En Vue, el contenido Markdown se puede renderizar
|
|
202
|
+
En Vue, el contenido Markdown se puede renderizar usando la etiqueta incorporada `component` o directamente como un nodo.
|
|
166
203
|
|
|
167
204
|
```vue fileName="App.vue"
|
|
168
205
|
<script setup>
|
|
@@ -175,43 +212,183 @@ Cuando accede al contenido a través de `useIntlayer`, los nodos Markdown ya est
|
|
|
175
212
|
</template>
|
|
176
213
|
```
|
|
177
214
|
|
|
215
|
+
Configure globalmente a través del plugin `intlayerMarkdown` (admite componentes MDX personalizados):
|
|
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), // Componente MDX
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
> Si el plugin `intlayerMarkdown` no está instalado, Intlayer renderizará utilizando el compilador predeterminado.
|
|
229
|
+
|
|
230
|
+
También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
|
|
231
|
+
|
|
232
|
+
```vue
|
|
233
|
+
<component :is="myMarkdownContent.use({
|
|
234
|
+
h1: (props) => h('h1', { style: { color: 'red' } }, props.children),
|
|
235
|
+
})" />
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Puede recuperar el Markdown como cadena:
|
|
239
|
+
|
|
240
|
+
```vue
|
|
241
|
+
{{ myMarkdownContent.value }}
|
|
242
|
+
{{ String(myMarkdownContent) }}
|
|
243
|
+
{{ myMarkdownContent.toString() }}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Y puede acceder a los metadatos de su markdown así:
|
|
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 renderiza Markdown como una cadena HTML por defecto.
|
|
255
|
+
Svelte renderiza el Markdown como una cadena HTML por defecto. Use `{@html}` para renderizarlo.
|
|
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
|
+
> Si `MarkdownProvider` no está presente, Intlayer renderizará el markdown usando el compilador por defecto.
|
|
272
|
+
|
|
273
|
+
También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
|
|
274
|
+
|
|
275
|
+
```svelte
|
|
276
|
+
{@html $content.myMarkdownContent.use({ ... })}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Puede recuperar el Markdown como cadena:
|
|
280
|
+
|
|
281
|
+
```svelte
|
|
282
|
+
{$content.myMarkdownContent.value}
|
|
283
|
+
{String($content.myMarkdownContent)}
|
|
284
|
+
{$content.myMarkdownContent.toString()}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Y puede acceder a los metadatos de su markdown así:
|
|
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
|
|
296
|
+
Preact soporta los nodos Markdown directamente en 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} />, // Componente MDX
|
|
312
|
+
}}
|
|
313
|
+
>
|
|
314
|
+
<AppContent />
|
|
315
|
+
</MarkdownProvider>
|
|
316
|
+
);
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
> Si `MarkdownProvider` no está presente, Intlayer renderizará el markdown usando el analizador predeterminado de Markdown a JSX.
|
|
320
|
+
|
|
321
|
+
También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
|
|
322
|
+
|
|
323
|
+
```tsx
|
|
324
|
+
{myMarkdownContent.use({
|
|
325
|
+
h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
|
|
326
|
+
})}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Puede recuperar el Markdown como cadena:
|
|
330
|
+
|
|
331
|
+
```tsx
|
|
332
|
+
{myMarkdownContent.value}
|
|
333
|
+
{String(myMarkdownContent)}
|
|
334
|
+
{myMarkdownContent.toString()}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Y puede acceder a los metadatos de su markdown así:
|
|
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
|
|
346
|
+
Solid soporta los nodos Markdown directamente en 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} />, // Componente MDX
|
|
362
|
+
}}
|
|
363
|
+
>
|
|
364
|
+
<AppContent />
|
|
365
|
+
</MarkdownProvider>
|
|
366
|
+
);
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
> Si `MarkdownProvider` no está presente, Intlayer renderizará el markdown usando el analizador predeterminado de Markdown a JSX.
|
|
370
|
+
|
|
371
|
+
También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
|
|
372
|
+
|
|
373
|
+
```tsx
|
|
374
|
+
{myMarkdownContent.use({
|
|
375
|
+
h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
|
|
376
|
+
})}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Puede recuperar el Markdown como cadena:
|
|
380
|
+
|
|
381
|
+
```tsx
|
|
382
|
+
{myMarkdownContent.value}
|
|
383
|
+
{String(myMarkdownContent)}
|
|
384
|
+
{myMarkdownContent.toString()}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Y puede acceder a los metadatos de su markdown así:
|
|
388
|
+
|
|
389
|
+
```tsx
|
|
390
|
+
{myMarkdownContent.metadata}
|
|
391
|
+
{myMarkdownContent.metadata.title}
|
|
215
392
|
```
|
|
216
393
|
|
|
217
394
|
</Tab>
|
|
@@ -231,7 +408,9 @@ Cuando accede al contenido a través de `useIntlayer`, los nodos Markdown ya est
|
|
|
231
408
|
}
|
|
232
409
|
```
|
|
233
410
|
|
|
234
|
-
|
|
411
|
+
> Si el proveedor IntlayerMarkdown no está configurado, Intlayer renderizará utilizando el compilador predeterminado.
|
|
412
|
+
|
|
413
|
+
También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
|
|
235
414
|
|
|
236
415
|
```typescript
|
|
237
416
|
content().myMarkdownContent.use({
|
|
@@ -239,21 +418,40 @@ Cuando accede al contenido a través de `useIntlayer`, los nodos Markdown ya est
|
|
|
239
418
|
})
|
|
240
419
|
```
|
|
241
420
|
|
|
421
|
+
Puede recuperar el Markdown como cadena:
|
|
422
|
+
|
|
423
|
+
```typescript
|
|
424
|
+
content().myMarkdownContent.value
|
|
425
|
+
String(content().myMarkdownContent)
|
|
426
|
+
content().myMarkdownContent.toString()
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
Y puede acceder a los metadatos de su markdown así:
|
|
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. Utilidades Auxiliares (Solo Cadenas Markdown)
|
|
246
440
|
|
|
247
|
-
|
|
441
|
+
Estas utilidades renderizan **únicamente cadenas Markdown puras** y son independientes de `useIntlayer`. Úselas cuando necesite renderizar Markdown de fuentes que no sean sus diccionarios.
|
|
248
442
|
|
|
249
443
|
<Tabs group="framework">
|
|
250
444
|
<Tab label="React / Next.js" value="react">
|
|
251
445
|
|
|
446
|
+
#### Componente `<MarkdownRenderer />`
|
|
447
|
+
|
|
448
|
+
Renderiza una cadena Markdown con opciones específicas.
|
|
449
|
+
|
|
252
450
|
```tsx
|
|
253
451
|
import { MarkdownRenderer } from "react-intlayer/markdown";
|
|
254
452
|
|
|
255
453
|
<MarkdownRenderer forceBlock={true} tagfilter={true}>
|
|
256
|
-
{"#
|
|
454
|
+
{"# Mi Título"}
|
|
257
455
|
</MarkdownRenderer>
|
|
258
456
|
```
|
|
259
457
|
|
|
@@ -269,7 +467,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
269
467
|
components: { h1: (props) => <h1 {...props} className="custom" /> }
|
|
270
468
|
});
|
|
271
469
|
|
|
272
|
-
return renderMarkdown("#
|
|
470
|
+
return renderMarkdown("# Mi Título");
|
|
273
471
|
```
|
|
274
472
|
|
|
275
473
|
#### Utilidad `renderMarkdown()`
|
|
@@ -278,7 +476,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
278
476
|
```tsx
|
|
279
477
|
import { renderMarkdown } from "react-intlayer/markdown";
|
|
280
478
|
|
|
281
|
-
const jsx = renderMarkdown("#
|
|
479
|
+
const jsx = renderMarkdown("# Mi Título", { forceBlock: true });
|
|
282
480
|
```
|
|
283
481
|
|
|
284
482
|
</Tab>
|
|
@@ -292,7 +490,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
292
490
|
</script>
|
|
293
491
|
|
|
294
492
|
<template>
|
|
295
|
-
<MarkdownRenderer :forceBlock="true" content="#
|
|
493
|
+
<MarkdownRenderer :forceBlock="true" content="# Mi Título" />
|
|
296
494
|
</template>
|
|
297
495
|
```
|
|
298
496
|
|
|
@@ -306,7 +504,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
306
504
|
import { MarkdownRenderer } from "svelte-intlayer/markdown";
|
|
307
505
|
</script>
|
|
308
506
|
|
|
309
|
-
<MarkdownRenderer forceBlock={true} value="#
|
|
507
|
+
<MarkdownRenderer forceBlock={true} value="# Mi Título" />
|
|
310
508
|
```
|
|
311
509
|
|
|
312
510
|
#### Hook `useMarkdownRenderer()`
|
|
@@ -317,7 +515,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
317
515
|
const render = useMarkdownRenderer();
|
|
318
516
|
</script>
|
|
319
517
|
|
|
320
|
-
{@html render("#
|
|
518
|
+
{@html render("# Mi Título")}
|
|
321
519
|
```
|
|
322
520
|
|
|
323
521
|
#### Utilidad `renderMarkdown()`
|
|
@@ -327,7 +525,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
327
525
|
import { renderMarkdown } from "svelte-intlayer/markdown";
|
|
328
526
|
</script>
|
|
329
527
|
|
|
330
|
-
{@html renderMarkdown("#
|
|
528
|
+
{@html renderMarkdown("# Mi Título")}
|
|
331
529
|
```
|
|
332
530
|
|
|
333
531
|
</Tab>
|
|
@@ -338,7 +536,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
338
536
|
import { MarkdownRenderer } from "preact-intlayer/markdown";
|
|
339
537
|
|
|
340
538
|
<MarkdownRenderer forceBlock={true}>
|
|
341
|
-
{"#
|
|
539
|
+
{"# Mi Título"}
|
|
342
540
|
</MarkdownRenderer>
|
|
343
541
|
```
|
|
344
542
|
|
|
@@ -349,7 +547,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
349
547
|
|
|
350
548
|
const render = useMarkdownRenderer();
|
|
351
549
|
|
|
352
|
-
return <div>{render("#
|
|
550
|
+
return <div>{render("# Mi Título")}</div>;
|
|
353
551
|
```
|
|
354
552
|
|
|
355
553
|
#### Utilidad `renderMarkdown()`
|
|
@@ -357,7 +555,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
357
555
|
```tsx
|
|
358
556
|
import { renderMarkdown } from "preact-intlayer/markdown";
|
|
359
557
|
|
|
360
|
-
return <div>{renderMarkdown("#
|
|
558
|
+
return <div>{renderMarkdown("# Mi Título")}</div>;
|
|
361
559
|
```
|
|
362
560
|
|
|
363
561
|
</Tab>
|
|
@@ -368,7 +566,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
368
566
|
import { MarkdownRenderer } from "solid-intlayer/markdown";
|
|
369
567
|
|
|
370
568
|
<MarkdownRenderer forceBlock={true}>
|
|
371
|
-
{"#
|
|
569
|
+
{"# Mi Título"}
|
|
372
570
|
</MarkdownRenderer>
|
|
373
571
|
```
|
|
374
572
|
|
|
@@ -379,7 +577,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
379
577
|
|
|
380
578
|
const render = useMarkdownRenderer();
|
|
381
579
|
|
|
382
|
-
return <div>{render("#
|
|
580
|
+
return <div>{render("# Mi Título")}</div>;
|
|
383
581
|
```
|
|
384
582
|
|
|
385
583
|
#### Utilidad `renderMarkdown()`
|
|
@@ -387,13 +585,13 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
387
585
|
```tsx
|
|
388
586
|
import { renderMarkdown } from "solid-intlayer/markdown";
|
|
389
587
|
|
|
390
|
-
return <div>{renderMarkdown("#
|
|
588
|
+
return <div>{renderMarkdown("# Mi Título")}</div>;
|
|
391
589
|
```
|
|
392
590
|
|
|
393
591
|
</Tab>
|
|
394
592
|
<Tab label="Angular" value="angular">
|
|
395
593
|
#### Servicio `IntlayerMarkdownService`
|
|
396
|
-
Renderiza una cadena Markdown
|
|
594
|
+
Renderiza una cadena Markdown usando el servicio.
|
|
397
595
|
|
|
398
596
|
```typescript
|
|
399
597
|
import { IntlayerMarkdownService } from "angular-intlayer/markdown";
|
|
@@ -414,7 +612,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
|
|
|
414
612
|
|
|
415
613
|
## Configuración Global con `MarkdownProvider`
|
|
416
614
|
|
|
417
|
-
|
|
615
|
+
`MarkdownProvider` (o su equivalente en el framework) configura el proceso de renderización Markdown para toda su aplicación. Esto se aplica tanto a la renderización automática de `useIntlayer` como a las utilidades auxiliares. Las opciones configuradas aquí son las predeterminadas — `.use()` las anula a nivel de nodo.
|
|
418
616
|
|
|
419
617
|
<Tabs group="framework">
|
|
420
618
|
<Tab label="React / Next.js" value="react">
|
|
@@ -425,8 +623,9 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
425
623
|
export const AppProvider = ({ children }) => (
|
|
426
624
|
<MarkdownProvider
|
|
427
625
|
components={{
|
|
428
|
-
h1: (
|
|
429
|
-
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} />,
|
|
430
629
|
}}
|
|
431
630
|
>
|
|
432
631
|
{children}
|
|
@@ -434,7 +633,9 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
434
633
|
);
|
|
435
634
|
```
|
|
436
635
|
|
|
437
|
-
|
|
636
|
+
> MDX es compatible — cualquier nombre de componente usado dentro de su Markdown (ej. `<MyCustomJSXComponent />`) se resuelve contra el mapeo de `components`.
|
|
637
|
+
|
|
638
|
+
También puede usar su propio renderizador de markdown:
|
|
438
639
|
|
|
439
640
|
```tsx fileName="AppProvider.tsx"
|
|
440
641
|
import { MarkdownProvider } from "react-intlayer/markdown";
|
|
@@ -442,8 +643,9 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
442
643
|
export const AppProvider = ({ children }) => (
|
|
443
644
|
<MarkdownProvider
|
|
444
645
|
renderMarkdown={async (md) => {
|
|
445
|
-
|
|
446
|
-
|
|
646
|
+
// Use dynamic import to reduce the bundle size of your application
|
|
647
|
+
const { renderMarkdown } = await import('react-intlayer/markdown');
|
|
648
|
+
return renderMarkdown(md);
|
|
447
649
|
}}
|
|
448
650
|
>
|
|
449
651
|
{children}
|
|
@@ -451,7 +653,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
451
653
|
);
|
|
452
654
|
```
|
|
453
655
|
|
|
454
|
-
> Importar
|
|
656
|
+
> Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
|
|
455
657
|
|
|
456
658
|
</Tab>
|
|
457
659
|
<Tab label="Vue" value="vue">
|
|
@@ -478,7 +680,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
478
680
|
app.mount("#app");
|
|
479
681
|
```
|
|
480
682
|
|
|
481
|
-
También puede
|
|
683
|
+
También puede usar su propio renderizador de markdown:
|
|
482
684
|
|
|
483
685
|
```typescript fileName="main.ts"
|
|
484
686
|
import { createApp } from "vue";
|
|
@@ -491,15 +693,15 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
491
693
|
app.use(intlayer);
|
|
492
694
|
app.use(intlayerMarkdown, {
|
|
493
695
|
renderMarkdown: async (md) => {
|
|
494
|
-
const {
|
|
495
|
-
return
|
|
696
|
+
const { renderMarkdown } = await import('vue-intlayer/markdown');
|
|
697
|
+
return renderMarkdown(md);
|
|
496
698
|
},
|
|
497
699
|
});
|
|
498
700
|
|
|
499
701
|
app.mount("#app");
|
|
500
702
|
```
|
|
501
703
|
|
|
502
|
-
> Importar
|
|
704
|
+
> Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
|
|
503
705
|
|
|
504
706
|
</Tab>
|
|
505
707
|
<Tab label="Svelte" value="svelte">
|
|
@@ -519,7 +721,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
519
721
|
</MarkdownProvider>
|
|
520
722
|
```
|
|
521
723
|
|
|
522
|
-
También puede
|
|
724
|
+
También puede usar su propio renderizador de markdown:
|
|
523
725
|
|
|
524
726
|
```svelte fileName="App.svelte"
|
|
525
727
|
<script lang="ts">
|
|
@@ -528,15 +730,15 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
528
730
|
|
|
529
731
|
<MarkdownProvider
|
|
530
732
|
renderMarkdown={async (md) => {
|
|
531
|
-
const {
|
|
532
|
-
return
|
|
733
|
+
const { renderMarkdown } = await import('svelte-intlayer/markdown');
|
|
734
|
+
return renderMarkdown(md);
|
|
533
735
|
}}
|
|
534
736
|
>
|
|
535
737
|
<slot />
|
|
536
738
|
</MarkdownProvider>
|
|
537
739
|
```
|
|
538
740
|
|
|
539
|
-
> Importar
|
|
741
|
+
> Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
|
|
540
742
|
|
|
541
743
|
</Tab>
|
|
542
744
|
<Tab label="Preact" value="preact">
|
|
@@ -555,7 +757,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
555
757
|
);
|
|
556
758
|
```
|
|
557
759
|
|
|
558
|
-
También puede
|
|
760
|
+
También puede usar su propio renderizador de markdown:
|
|
559
761
|
|
|
560
762
|
```tsx fileName="AppProvider.tsx"
|
|
561
763
|
import { MarkdownProvider } from "preact-intlayer/markdown";
|
|
@@ -563,8 +765,8 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
563
765
|
export const AppProvider = ({ children }) => (
|
|
564
766
|
<MarkdownProvider
|
|
565
767
|
renderMarkdown={async (md) => {
|
|
566
|
-
const {
|
|
567
|
-
return
|
|
768
|
+
const { renderMarkdown } = await import('preact-intlayer/markdown');
|
|
769
|
+
return renderMarkdown(md);
|
|
568
770
|
}}
|
|
569
771
|
>
|
|
570
772
|
{children}
|
|
@@ -572,7 +774,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
572
774
|
);
|
|
573
775
|
```
|
|
574
776
|
|
|
575
|
-
> Importar
|
|
777
|
+
> Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
|
|
576
778
|
|
|
577
779
|
</Tab>
|
|
578
780
|
<Tab label="Solid" value="solid">
|
|
@@ -591,7 +793,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
591
793
|
);
|
|
592
794
|
```
|
|
593
795
|
|
|
594
|
-
También puede
|
|
796
|
+
También puede usar su propio renderizador de markdown:
|
|
595
797
|
|
|
596
798
|
```tsx fileName="AppProvider.tsx"
|
|
597
799
|
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
@@ -599,8 +801,8 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
599
801
|
export const AppProvider = (props) => (
|
|
600
802
|
<MarkdownProvider
|
|
601
803
|
renderMarkdown={async (md) => {
|
|
602
|
-
const {
|
|
603
|
-
return
|
|
804
|
+
const { renderMarkdown } = await import('solid-intlayer/markdown');
|
|
805
|
+
return renderMarkdown(md);
|
|
604
806
|
}}
|
|
605
807
|
>
|
|
606
808
|
{props.children}
|
|
@@ -608,59 +810,29 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
|
|
|
608
810
|
);
|
|
609
811
|
```
|
|
610
812
|
|
|
611
|
-
> Importar
|
|
813
|
+
> Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
|
|
612
814
|
|
|
613
815
|
</Tab>
|
|
614
816
|
<Tab label="Angular" value="angular">
|
|
615
817
|
|
|
616
|
-
```typescript fileName="app.
|
|
617
|
-
import {
|
|
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
|
-
También puede utilizar su propio motor de renderizado de markdown:
|
|
818
|
+
```typescript fileName="app.module.ts"
|
|
819
|
+
import { NgModule } from '@angular/core';
|
|
820
|
+
import { IntlayerMarkdownModule } from 'angular-intlayer/markdown';
|
|
631
821
|
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
export const appConfig: ApplicationConfig = {
|
|
636
|
-
providers: [
|
|
637
|
-
createIntlayerMarkdownProvider({
|
|
822
|
+
@NgModule({
|
|
823
|
+
imports: [
|
|
824
|
+
IntlayerMarkdownModule.forRoot({
|
|
638
825
|
renderMarkdown: async (md) => {
|
|
639
|
-
const {
|
|
640
|
-
return
|
|
641
|
-
}
|
|
642
|
-
})
|
|
643
|
-
]
|
|
644
|
-
}
|
|
826
|
+
const { renderMarkdown } = await import('angular-intlayer/markdown');
|
|
827
|
+
return renderMarkdown(md);
|
|
828
|
+
}
|
|
829
|
+
})
|
|
830
|
+
]
|
|
831
|
+
})
|
|
832
|
+
export class AppModule {}
|
|
645
833
|
```
|
|
646
834
|
|
|
647
|
-
> Importar
|
|
835
|
+
> Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
|
|
648
836
|
|
|
649
837
|
</Tab>
|
|
650
838
|
</Tabs>
|
|
651
|
-
|
|
652
|
-
---
|
|
653
|
-
|
|
654
|
-
## Referencia de Opciones
|
|
655
|
-
|
|
656
|
-
Estas opciones se pueden pasar a `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer` y `renderMarkdown`.
|
|
657
|
-
|
|
658
|
-
| Opción | Tipo | Por Defecto | Descripción |
|
|
659
|
-
| :-------------------- | :---------- | :---------- | :------------------------------------------------------------------------------------------------------------ |
|
|
660
|
-
| `forceBlock` | `boolean` | `false` | Obliga a que la salida esté envuelta en un elemento de nivel de bloque (p. ej., `<div>`). |
|
|
661
|
-
| `forceInline` | `boolean` | `false` | Obliga a que la salida esté envuelta en un elemento en línea (p. ej., `<span>`). |
|
|
662
|
-
| `tagfilter` | `boolean` | `true` | Habilita el filtro de etiquetas de GitHub para mejorar la seguridad al eliminar etiquetas HTML peligrosas. |
|
|
663
|
-
| `preserveFrontmatter` | `boolean` | `false` | Si es `true`, no se eliminará el frontmatter al principio de la cadena Markdown. |
|
|
664
|
-
| `components` | `Overrides` | `{}` | Un mapa de etiquetas HTML a componentes personalizados (p. ej., `{ h1: MyHeading }`). |
|
|
665
|
-
| `wrapper` | `Component` | `null` | Un componente personalizado para envolver el Markdown renderizado. |
|
|
666
|
-
| `renderMarkdown` | `Function` | `null` | Una función de renderizado personalizada para reemplazar completamente el compilador de Markdown por defecto. |
|