docs: some spelling and grammar corrections for Spanish

Portuguese translations cleaned up, non-existent links fixed
pull/4352/head
jackestar 10 months ago
parent d200f4e125
commit 856ec797c2

@ -6,7 +6,7 @@ const pkg = require('vitepress/package.json')
export const es = defineConfig({
lang: 'es-CO',
description: 'Generador de Sitios Estaticos desarrollado con Vite y Vue.',
description: 'Generador de Sitios Estáticos desarrollado con Vite y Vue.',
themeConfig: {
nav: nav(),
@ -55,7 +55,7 @@ export const es = defineConfig({
function nav(): DefaultTheme.NavItem[] {
return [
{
text: 'Guia',
text: 'Guía',
link: '/es/guide/what-is-vitepress',
activeMatch: '/es/guide/'
},
@ -104,7 +104,7 @@ function sidebarGuide(): DefaultTheme.SidebarItem[] {
]
},
{
text: 'Pesonalización',
text: 'Personalización',
collapsed: false,
items: [
{ text: 'Usando un tema personalizado', link: 'custom-theme' },
@ -155,12 +155,12 @@ function sidebarReference(): DefaultTheme.SidebarItem[] {
{ text: 'Página Inicial', link: 'home-page' },
{ text: 'Pie de página', link: 'footer' },
{ text: 'Layout', link: 'layout' },
{ text: 'Distintivo', link: 'badge' },
{ text: 'Badge', link: 'badge' },
{ text: 'Página del equipo', link: 'team-page' },
{ text: 'Links Anterior / Siguiente', link: 'prev-next-links' },
{ text: 'Editar Link', link: 'edit-link' },
{ text: 'Sello temporal de actualización', link: 'last-updated' },
{ text: 'Busqueda', link: 'search' },
{ text: 'Búsqueda', link: 'search' },
{ text: 'Carbon Ads', link: 'carbon-ads' }
]
}
@ -200,13 +200,13 @@ export const search: DefaultTheme.AlgoliaSearchOptions['locales'] = {
selectText: 'Seleccionar',
navigateText: 'Navegar',
closeText: 'Cerrar',
searchByText: 'Busqueda por'
searchByText: 'Búsqueda por'
},
noResultsScreen: {
noResultsText: 'No fue posible encontrar resultados',
suggestedQueryText: 'Puede intentar una nueva búsqueda',
reportMissingResultsText:
'Deberian haber resultados para esa consulta?',
'Deberían haber resultados para esa consulta?',
reportMissingResultsLinkText: 'Click para enviar feedback'
}
}

@ -8,9 +8,9 @@ Todos los archivos Markdown son compilados en componentes Vue y procesados por [
![Una imagen](./imagen.png)
```
Puede referenciar assets estáticos en sus archivos markdown, sus componentes `*.vue` en el tema, estilos y simples archivos `.css`, usando paths públicos absolutos (com base en la raiz del projeto) o paths relativos (con base en su sistema de arhivos). Este último es semejante al comportamiento que está acostumbrado se ya usó Vite, Vue CLI o el `file-loader` de webpack.
Puede referenciar assets estáticos en sus archivos markdown, sus componentes `*.vue` en el tema, estilos y simples archivos `.css`, usando paths públicos absolutos (com base en la raíz del proyecto) o paths relativos (con base en su sistema de archivos). Este último es semejante al comportamiento que está acostumbrado se ya usó Vite, Vue CLI o el `file-loader` de webpack.
Tipos comunes de archivos de imagen, media y fuente son detectados e incluidos automaticamente como assets.
Tipos comunes de archivos de imagen, media y fuente son detectados e incluidos automáticamente como assets.
Todos los assets referenciados, incluyendo aquellos usando paths absolutos, serán copiados al directorio de salida con un nombre de archivo hash en la compilación de producción. Assets nunca referenciados no serán copiados. Assets de imagen menores que 4KB serán incorporados en base64 - esto puede ser configurado por la opción [`vite`](../reference/site-config#vite) en configuración.
@ -20,15 +20,15 @@ Todas las referencias de path **estáticas**, incluyendo paths absolutos, deben
A veces, puede ser necesario proveer assets estáticos que no son referenciados directamente en ninguno de sus componentes del tema o Markdown, o usted puede querer servir ciertos archivos con el nombre del archivo original. Ejemplos de tales archivos incluyen `robots.txt`, favicons e iconos PWA.
Puede colocar esos archivos en el directorio `public` sobre el [directorio de origen](./routing#source-directory). Por ejemplo, se la raiz de su proyecto fuera `./docs` y estuviera usando localización por defecto del directorio fuente, entonces el directorio público será `./docs/public`.
Puede colocar esos archivos en el directorio `public` sobre el [directorio de origen](./routing#source-directory). Por ejemplo, se la raíz de su proyecto fuera `./docs` y estuviera usando localización por defecto del directorio fuente, entonces el directorio público será `./docs/public`.
Los assets colocados en `public` serán copiados a la raiz del directorio de salida tal como son.
Los assets colocados en `public` serán copiados a la raíz del directorio de salida tal como son.
Observe que usted debe referenciar archivos colocados en `public` usando e path absoluto de la raiz - por ejemplo, `public/icon.png` debe siempre ser referenciado en el código fuente como `/icon.png`.
Observe que usted debe referenciar archivos colocados en `public` usando e path absoluto de la raíz - por ejemplo, `public/icon.png` debe siempre ser referenciado en el código fuente como `/icon.png`.
## URL Base {#base-url}
Si su sitio estuviera implantado en una URL que no sea la raiz, será necesario definir la opción `base` en `.vitepress/config.js`. Por ejemplo, se planea implantar su sitio en `https://foo.github.io/bar/`, entonces `base` debe ser definido como `'/bar/'` (siempre debe comenzar y terminar con una barra).
Si su sitio estuviera implantado en una URL que no sea la raíz, será necesario definir la opción `base` en `.vitepress/config.js`. Por ejemplo, se planea implantar su sitio en `https://foo.github.io/bar/`, entonces `base` debe ser definido como `'/bar/'` (siempre debe comenzar y terminar con una barra).
Todos los paths de sus assets estáticos son procesados automáticamente para ajustarse a los diferentes valores de configuración `base`. Por ejemplo, se tuviera una referencia absoluta a un asset sobre `public` en su Markdown:

@ -6,9 +6,9 @@ outline: deep
## Flujo de Trabajo general {#general-workflow}
Conectar VitePress a un CMS girará mayormente en torno a [Rutas dinámicas](./routing#dynamic-routes). Asegurese de entender cómo funcionan antes de proceder.
Conectar VitePress a un CMS girará mayormente en torno a [Rutas dinámicas](./routing#dynamic-routes). Asegúrese de entender cómo funcionan antes de proceder.
Como cada CMS funcionará de forma diferente, aqui podemos proveer apenas un flujo de trabajo genérico que requiere ser adaptado para cada escenario específico.
Como cada CMS funcionará de forma diferente, aquí podemos proveer apenas un flujo de trabajo genérico que requiere ser adaptado para cada escenario específico.
1. Si su CMS exige autenticación, cree un archivo `.env` para almacenar los tokens del API y cargarlos como:
@ -51,6 +51,6 @@ Como cada CMS funcionará de forma diferente, aqui podemos proveer apenas un flu
<!-- @content -->
```
## Guias de Integración {#integration-guides}
## Guías de Integración {#integration-guides}
Se usted escribió una guía sobre cómo integrar VitePress con un CMS específico, por favor use el link "Edite esta página" abajo para enviarlo hacia aqui!
Se usted escribió una guía sobre cómo integrar VitePress con un CMS específico, por favor use el link "Edite esta página" abajo para enviarlo hacia aquí!

@ -6,7 +6,7 @@ Puede habilitar un tema personalizado creando un archivo `.vitepress/theme/index
```
.
├─ docs # raiz del proyecto
├─ docs # raíz del proyecto
│ ├─ .vitepress
│ │ ├─ theme
│ │ │ └─ index.js # entrada de tema
@ -15,16 +15,16 @@ Puede habilitar un tema personalizado creando un archivo `.vitepress/theme/index
└─ package.json
```
VitePress siempre usará el tema personalizado en vez del tema por defecto cuando detecte la precencia de un archivo de entrada de tema. Sin embargo, puede [extender el tema por defecto](./extending-default-theme) para realizar personalizaciones avanzadas sobre el.
VitePress siempre usará el tema personalizado en vez del tema por defecto cuando detecte la presencia de un archivo de entrada de tema. Sin embargo, puede [extender el tema por defecto](./extending-default-theme) para realizar personalizaciones avanzadas sobre el.
## Interfaz del Tema {#theme-interface}
Un tema personalizado de VitePress es definifo como un objeto con la siguiente interfaz:
Un tema personalizado de VitePress es definido como un objeto con la siguiente interfaz:
```ts
interface Theme {
/**
* Componente raiz de layout para todas las páginas
* Componente raíz de layout para todas las páginas
* @required
*/
Layout: Component
@ -64,7 +64,7 @@ export default {
}
```
La exportación por defecto es el único contrato para un tema personalizado, y apenas la propiedad `Layout` es exigida. Tecnicamente, un tema de VitePress puede ser tan simple como un único componente Vue.
La exportación por defecto es el único contrato para un tema personalizado, y apenas la propiedad `Layout` es exigida. Técnicamente, un tema de VitePress puede ser tan simple como un único componente Vue.
Dentro de su componente de layout, el funciona como una aplicación Vite + Vue 3 normal. Note que el tema también necesita ser [compatible con SSR](./ssr-compat).
@ -77,7 +77,7 @@ El componente de layout más básico necesita un componente [`<Content />`](../r
<template>
<h1>Layout Personalizado!</h1>
<!-- aqui es donde el contenido markdown será presentado -->
<!-- aquí es donde el contenido markdown será presentado -->
<Content />
</template>
```
@ -100,7 +100,7 @@ const { page } = useData()
</template>
```
El auxiliar [`useData()`](../reference/runtime-api#usedata) proporciona todos los datos en tiempo de ejecución que necesitamos para mostrar layouts diferentes. Uno de los otros datos que podemos accesar es el frontmatter de la página actual. Podemos aprovechar esto para permitir que el usuario final controle el layout en cada página. Por ejemplo, el usuario puede indicar que la página debe usar un layout especial de la pagina inicial con:
El auxiliar [`useData()`](../reference/runtime-api#usedata) proporciona todos los datos en tiempo de ejecución que necesitamos para mostrar layouts diferentes. Otro de los datos que podemos acceder es al frontmatter de la página actual. Podemos aprovechar esto para permitir que el usuario final controle el layout en cada página. Por ejemplo, el usuario puede indicar que la página debe usar un layout especial de la pagina inicial con:
```md
---
@ -154,7 +154,7 @@ Consulte la [Referencia del API en tiempo de Ejecución](../reference/runtime-ap
## Distribuyendo un Tema Personalizado {#distributing-a-custom-theme}
La manera más facil de distribuir un tema personalizado es proporcionarlo como un [repositorio de template en GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-template-repository).
La manera más fácil de distribuir un tema personalizado es proporcionarlo como un [repositorio de template en GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-template-repository).
Si desea distribuir su tema como un paquete npm, siga estos pasos:
@ -170,7 +170,7 @@ Si desea distribuir su tema como un paquete npm, siga estos pasos:
## Consumiendo un Tema Personalizado {#consuming-a-custom-theme}
Para consumir un tema extereno, importelo e reexportelo a partir del archivo de entrada del tema personalizado:
Para consumir un tema externo, importelo y reexportelo a partir del archivo de entrada del tema personalizado:
```js
// .vitepress/theme/index.js

@ -1,8 +1,8 @@
# Carga de Datos en Tiempo de Compilacion {#build-time-data-loading}
# Carga de Datos en Tiempo de Compilación {#build-time-data-loading}
VitePress proporciona un recurso llamado **cargadores de dato** que permite cargar datos arbitrarios e importarlos desde páginas o componentes. La carga de datos es ejecutada **apenas en el tiempo del build** los datos resultantes serán serializados como JSON en el paquete de JavaScript final.
Los cargadores de datos pueden ser usados para buscar datos remotos o generar metadatos con base en archivos locales. Por ejemplo, puede usar cargadores de datos para procesar todas sus pagínas API locales y generar automáticamente un indice de todas las entradas del API.
Los cargadores de datos pueden ser usados para buscar datos remotos o generar metadatos con base en archivos locales. Por ejemplo, puede usar cargadores de datos para procesar todas sus páginas API locales y generar automáticamente un indice de todas las entradas del API.
## Uso Básico {#basic-usage}
@ -38,7 +38,7 @@ Salida:
}
```
Notará que el propio cargados de datos no exporta `data`. Es VitePress llamando el método `load()` entre bastidores y exponiendo implicitamente el resultado por medio de la exportación llamada `data`.
Notará que el propio cargados de datos no exporta `data`. Es VitePress llamando el método `load()` entre bastidores y exponiendo implícitamente el resultado por medio de la exportación llamada `data`.
Esto funciona incluso si el cargador fuera asíncrono:
@ -55,7 +55,7 @@ export default {
Cuando necesita generar datos con base en archivos locales, debe usar la opción `watch` en el cargador de datos para que los cambios hechos en esos archivos puedan accionar actualizaciones rápidas.
La opción `watch` tabién es conveniente porque puede usar [patrones glob](https://github.com/mrmlnc/fast-glob#pattern-syntax) para corresponder a vários archivos. Los patrones pueden ser relativos al propio archivo del cargador, y la función `load()` recibirá los archivos correspondientes como paths absolutos.
La opción `watch` también es conveniente porque puede usar [patrones glob](https://github.com/mrmlnc/fast-glob#pattern-syntax) para corresponder a varios archivos. Los patrones pueden ser relativos al propio archivo del cargador, y la función `load()` recibirá los archivos correspondientes como paths absolutos.
El siguiente ejemplo muestra el cargamento de archivos CSV y la transformación de estos en JSON usando [csv-parse](https://github.com/adaltas/node-csv/tree/master/packages/csv-parse/). Como este archivo solo es ejecutado en el tiempo del build, usted no enviará el procesador de CSV para el cliente!
@ -66,7 +66,7 @@ import { parse } from 'csv-parse/sync'
export default {
watch: ['./data/*.csv'],
load(watchedFiles) {
// watchedFiles será un array de paths absolutos de los archivos um array de caminhos absolutos dos arquivos correspondientes.
// watchedFiles será un array de paths absolutos de los archivos coincidentes
// generar un array de metadatos de post que puede ser usado para mostrar
// una lista en el layout del tema
return watchedFiles.map((file) => {
@ -81,7 +81,7 @@ export default {
## `createContentLoader`
Al construir un sitio enfocado en contenido, frecuentemente necesitamos crear una página de "archivo" o "índice": una página donde listamos todas las entradas disponibles en nuestra colección de contenido, por ejemplo, articulos de blog o páginas de API. Nosotros **podemos** implementar esto directamente con el API de cargador de datos, pero como este es un caso de uso tan común, VitePress también proporciona un auxiliar `createContentLoader` para simplificar esto:
Al construir un sitio enfocado en contenido, frecuentemente necesitamos crear una página de "archivo" o "índice": una página donde listamos todas las entradas disponibles en nuestra colección de contenido, por ejemplo, artículos de blog o páginas de API. Nosotros **podemos** implementar esto directamente con el API de cargador de datos, pero como este es un caso de uso tan común, VitePress también proporciona un auxiliar `createContentLoader` para simplificar esto:
```js
// posts.data.js
@ -90,7 +90,7 @@ import { createContentLoader } from 'vitepress'
export default createContentLoader('posts/*.md', /* opciones */)
```
El auxiliar acepta un patrón glob relativo al [direrio fuente](./routing#source-directory) y retorna un objeto de cargador de datos `{ watch, load }` que puede ser usado como exportación por defecto en un archivo de cargador de datos. El también implementa cache con base en los sellos se datos del archivo para mejorar el desempeño en el desarrollo.
El auxiliar acepta un patrón glob relativo al [directorio fuente](./routing#source-directory) y retorna un objeto de cargador de datos `{ watch, load }` que puede ser usado como exportación por defecto en un archivo de cargador de datos. El también implementa cache con base en los sellos se datos del archivo para mejorar el desempeño en el desarrollo.
Note que el cargador solo funciona con archivos Markdown - archivos no Markdown encontrados serán ignorados.
@ -112,7 +112,7 @@ interface ContentData {
}
```
Por defecto, apenas `url` y `frontmatter` son proporcionados. Esto ocurre porque los datos cargados serán incorporados como JSON en el paquete del cliente, entonces necesitamos ser cautelosos con su tamaño. Aqui está un ejemplo de cómo usar los datos para construir una página de índice de blog mínima:
Por defecto, apenas `url` y `frontmatter` son proporcionados. Esto ocurre porque los datos cargados serán incorporados como JSON en el paquete del cliente, entonces necesitamos ser cautelosos con su tamaño. Aquí está un ejemplo de cómo usar los datos para construir una página de índice de blog mínima:
```vue
<script setup>
@ -190,7 +190,7 @@ interface ContentOptions<T = ContentData[]> {
/**
* Si `boolean`, debe procesarse e incluir el resumen? (presentado como HTML)
*
* Si `function`, controla como el extracto es extraido del contenido.
* Si `function`, controla como el extracto es extraído del contenido.
*
* Si `string`, define un separador personalizado usado para extraer el
* extracto. El separados por defecto es `---` si `excerpt` fuera `true`.

@ -49,23 +49,23 @@ Las siguientes orientaciones están basadas en algunos supuestos:
## Configurando un Path Base Publico {#setting-a-public-base-path}
Por defecto, asumimos que el sitio será implantado en el path raiz de un dominio (`/`). Si su sitio fuera servido en un subpath, por ejemplo, `https://meusite.com/blog/`, necesitará entonces configurar la opción [`base`](../reference/site-config#base) para `'/blog/'` en la configuración VitePress.
Por defecto, asumimos que el sitio será implantado en el path raíz de un dominio (`/`). Si su sitio fuera servido en un subpath, por ejemplo, `https://meusite.com/blog/`, necesitará entonces configurar la opción [`base`](../reference/site-config#base) para `'/blog/'` en la configuración VitePress.
**Ejemplo:** Al usar GitHub Pages (ou GitLab Pages) e implantar en `user.github.io/repo/`, defina su `base` como `/repo/`.
## Headers de Cache HTTP {#http-cache-headers}
Si tiene control sobre los headers HTTP de su servidor en producción, se puede configurar headers `cache-control` para obtener mejor desempeño en vistar repetidas.
Si tiene control sobre los headers HTTP de su servidor en producción, se puede configurar headers `cache-control` para obtener mejor desempeño en visitas repetidas.
La compilación de producción usa nombres de archivos con hash para assets estáticos (JavaScript, CSS e otros assets que no están en `public`). Se inspecciona la previa de producción usando las herramientas de desarrollador de su navegador en la pestaña red, verá archivos como `app.4f283b18.js`.
Este hash `4f283b18` es generado a partir del contenido de este archivo. La misma URL con hash es garantizada para servir el mismo contenido del archivo - se el contenido cambia, las URLs también cambian. Esto significa que puede utilizar con seguridad los headers de cahe más fuertespara esos archivos. Todos esos archivos serán colocados en `assets/` en la directorio de salida, entonces puede configurar el siguiente header para ellos:
Este hash `4f283b18` es generado a partir del contenido de este archivo. La misma URL con hash es garantizada para servir el mismo contenido del archivo - se el contenido cambia, las URLs también cambian. Esto significa que puede utilizar con seguridad los headers de cache más fuertes para esos archivos. Todos esos archivos serán colocados en `assets/` en la directorio de salida, entonces puede configurar el siguiente header para ellos:
```
Cache-Control: max-age=31536000,immutable
```
::: detralles Ejemplo de archivo `_headers` do Netlify
::: detalles Ejemplo de archivo `_headers` do Netlify
```
/assets/*
@ -73,7 +73,7 @@ Cache-Control: max-age=31536000,immutable
cache-control: immutable
```
Nota: el archivo `_headers` debe ser colocado en [direrio public](./asset-handling#the-public-directory) - en nuestro caso, `docs/public/_headers` - para que el sea copiado exactamente para la directorio de salida.
Nota: el archivo `_headers` debe ser colocado en [directorio public](./asset-handling#the-public-directory) - en nuestro caso, `docs/public/_headers` - para que el sea copiado exactamente para la directorio de salida.
[Documentación de headers personalizados de Netlify](https://docs.netlify.com/routing/headers/)
@ -97,13 +97,13 @@ Nota: el archivo `_headers` debe ser colocado en [diretório public](./asset-han
}
```
Nota: el archivo `vercel.json` debe ser colocado en la raiz de su **repositório**.
Nota: el archivo `vercel.json` debe ser colocado en la raíz de su **repositorio**.
[Documentación Vercel sobre configuración de headers ](https://vercel.com/docs/concepts/projects/project-configuration#headers)
:::
## Guias de Plataforma {#platform-guides}
## Guías de Plataforma {#platform-guides}
### Netlify / Vercel / Cloudflare Pages / AWS Amplify / Render
@ -114,12 +114,12 @@ Configure un nuevo proyecto y altere estas configuraciones usando su panel:
- **Versión de Node:** `18` (o superior)
::: warning
No active opciones como _Auto Minify_ para código HTML. Eso removera comentarios de salida que tiene significado para Vue. Habrán errores de incompatibilidad de hidratación se fueran removidos.
No active opciones como _Auto Minify_ para código HTML. Eso removerá comentarios de salida que tiene significado para Vue. Habrán errores de incompatibilidad de hidratación se fueran removidos.
:::
### GitHub Pages
1. Cree un archivo llamado `deploy.yml` dentro del directorio `.github/workflows` do seu projeto com algum conteúdo como este:
1. Cree un archivo llamado `deploy.yml` dentro del directorio `.github/workflows` de su proyecto con contenido como este:
```yaml
# Ejemplo de flujo de trabajo para compilar e implantar un sitio VitePress en GitHub Pages
@ -132,7 +132,7 @@ No active opciones como _Auto Minify_ para código HTML. Eso removera comentario
push:
branches: [main]
# Permite ejecutar manualmente este flujo de trabajo en la guia Actions
# Permite ejecutar manualmente este flujo de trabajo en la guía Actions
workflow_dispatch:
# Define permisos GITHUB_TOKEN para la implementación en GitHub Pages
@ -142,7 +142,7 @@ No active opciones como _Auto Minify_ para código HTML. Eso removera comentario
id-token: write
# Permite apenas una implantación simultánea, omitiendo ejecuciones en fila entre la ejecución en progreso y la última de la fila.
# Sin embargo, NO cancela ejecuciones en progreso, pues queremos permitir que esas implantaciones de producción sean concuidas.
# Sin embargo, NO cancela ejecuciones en progreso, pues queremos permitir que esos despliegues a producción se completen.
concurrency:
group: pages
cancel-in-progress: false
@ -192,18 +192,18 @@ No active opciones como _Auto Minify_ para código HTML. Eso removera comentario
uses: actions/deploy-pages@v4
```
Asegurese de que la opción `base` en su VitePress esté configurada correctamentse. Vea [Configuranco un Path base Público](#setting-a-public-base-path) para más detalles.
Asegúrese de que la opción `base` en su VitePress esté configurada correctamente. Vea [Configuración un Path base Público](#setting-a-public-base-path) para más detalles.
:::
2. En las configuraciones de su repositorio sobre el item del menú "Pages", seleccione "GitHub Actions" en "Build and deployment > Source".
3. Envie sus modificaciones para el branch `main` y espere la conclusión del flujo de trabajo de GitHub Actions. Verá su sitio implantado en `https://<username>.github.io/[repository]/` o `https://<custom-domain>/` dependiendo de sus configuraciones. Su sitio será implantado automáticamente en cada push para la branch `main`.
3. Envié sus modificaciones para el branch `main` y espere la conclusión del flujo de trabajo de GitHub Actions. Verá su sitio implantado en `https://<username>.github.io/[repository]/` o `https://<custom-domain>/` dependiendo de sus configuraciones. Su sitio será implantado automáticamente en cada push para la branch `main`.
### GitLab Pages
1. Defina `outDir` en la configuración VitePress como `../public`. Configure la opción `base` para `'/<repository>/'` se desea implantar en `https://<username>.gitlab.io/<repository>/`.
2. Cree un archivo llamado `.gitlab-ci.yml` en la raiz del proyecto con el contenido abajo. Esto construirá e implantará su sitio siempre que haga alteraciones en el contenido.
2. Cree un archivo llamado `.gitlab-ci.yml` en la raíz del proyecto con el contenido abajo. Esto construirá e implantará su sitio siempre que haga alteraciones en el contenido.
```yaml
image: node:18
@ -212,7 +212,7 @@ No active opciones como _Auto Minify_ para código HTML. Eso removera comentario
paths:
- node_modules/
script:
# - apk add git # Desconecte eso se estuviera usando imagenes pequeñas de Docker como Alpine y tuviera lastUpdated habilitado
# - apk add git # Desconecte eso se estuviera usando imágenes pequeñas de Docker como Alpine y tuviera lastUpdated habilitado
- npm install
- npm run docs:build
artifacts:
@ -234,7 +234,7 @@ No active opciones como _Auto Minify_ para código HTML. Eso removera comentario
### Firebase {#firebase}
1. Cree `firebase.json` y `.firebaserc` en la raiz de su proyecto:
1. Cree `firebase.json` y `.firebaserc` en la raíz de su proyecto:
`firebase.json`:
@ -273,9 +273,9 @@ No active opciones como _Auto Minify_ para código HTML. Eso removera comentario
### Heroku
1. Siga la documentación y el guia proporcionados por [`heroku-buildpack-static`](https://elements.heroku.com/buildpacks/heroku/heroku-buildpack-static).
1. Siga la documentación y el guía proporcionados por [`heroku-buildpack-static`](https://elements.heroku.com/buildpacks/heroku/heroku-buildpack-static).
2. Cree un archivo llamado `static.json` en la raiz de su proyecto con el contenido abajo:
2. Cree un archivo llamado `static.json` en la raíz de su proyecto con el contenido abajo:
```json
{

@ -15,12 +15,12 @@ Sin embargo, hay casos en que apenas la configuración no será suficiente. Por
Esas personalizaciones avanzadas exigirán el uso de un tema personalizado que "extiende" el tema por defecto.
::: tip
Antes de seguir, asegurese de leer primero [Usando un Tema Personalizado](./custom-theme) para entender como funcionan los temas personalizados.
Antes de seguir, asegúrese de leer primero [Usando un Tema Personalizado](./custom-theme) para entender como funcionan los temas personalizados.
:::
## Personalizando el CSS {#customizing-css}
El CSS del tema por defecto puede ser personalizado substuyendo las variables CSS a nivel de la raiz:
El CSS del tema por defecto puede ser personalizado substrayendo las variables CSS a nivel de la raíz:
```js
// .vitepress/theme/index.js
@ -38,11 +38,11 @@ export default DefaultTheme
}
```
Vea las [variables CSS del tema por defecto](https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css) que pueden ser substituídas.
Vea las [variables CSS del tema por defecto](https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css) que pueden ser substituidas.
## Usando Fuentes Diferentes {#using-different-fonts}
VitePress usa [Inter](https://rsms.me/inter/) como fuente por defecto e incluirá las fuentes en la salida de compilación. La fuente también es pre-cargada automaticamente en producción. Sin embargo, eso puede no ser deseable se quiere usar una fuente principal diferente.
VitePress usa [Inter](https://rsms.me/inter/) como fuente por defecto e incluirá las fuentes en la salida de compilación. La fuente también es pre-cargada automáticamente en producción. Sin embargo, eso puede no ser deseable se quiere usar una fuente principal diferente.
Para evitar la inclusión de Inter en la salida de compilación, importe el tema de `vitepress/theme-without-fonts`:
@ -63,7 +63,7 @@ export default DefaultTheme
```
::: warning
Si está usando componentes opcionales como los componentes de la [Página del equipo](../reference/default-theme-team-page), asegurese de también importarlos de `vitepress/theme-without-fonts`!
Si está usando componentes opcionales como los componentes de la [Página del equipo](../reference/default-theme-team-page), asegúrese de también importarlos de `vitepress/theme-without-fonts`!
:::
Si su fuente es un archivo local referenciado via `@font-face`, ella será procesada como un asset e incluida en `.vitepress/dist/assets` con un nombre de archivo hash. Para pre-cargar ese archivo, use el hook de construcción [transformHead](../reference/site-config#transformhead):
@ -123,11 +123,11 @@ export default {
} satisfies Theme
```
Como estamos usando Vite, puede también aprovechar la [funcionalidad de importación glob](https://vitejs.dev/guide/features.html#glob-import) de Vite para registrar automaticamente un directorio de componetes.
Como estamos usando Vite, puede también aprovechar la [funcionalidad de importación glob](https://vitejs.dev/guide/features.html#glob-import) de Vite para registrar automáticamente un directorio de componentes.
## _Slots_ en el Layout {#layout-slots}
El componente `<Layout/>` del tema por defecto posee algunos _slots_ que pueden ser usados para inyectar contenido en lugares específicos de la página. Aqui un ejemplo de como inyectar un componente antes del esquema:
El componente `<Layout/>` del tema por defecto posee algunos _slots_ que pueden ser usados para inyectar contenido en lugares específicos de la página. Aquí un ejemplo de como inyectar un componente antes del esquema:
```js
// .vitepress/theme/index.js

@ -19,7 +19,7 @@ Puede también definir datos propios del frontmatter personalizados, para ser us
Los datos del frontmatter pueden ser accedidos por medio de la variable global especial `$frontmatter`:
Aqui está un ejemplo de como podría usarlo en su archivo Markdown:
Aquí está un ejemplo de como podría usarlo en su archivo Markdown:
```md
---
@ -29,7 +29,7 @@ editLink: true
# {{ $frontmatter.title }}
Contenido de guia
Contenido de guía
```
Puede acceder los datos del frontmatter de la página actual en `<script setup>` con el auxiliar [`useData()`](../reference/runtime-api#usedata).

@ -9,7 +9,7 @@ Puede experimentar VitePress directamente en su navegador en [StackBlitz](https:
### Prerrequisitos {#prerequisites}
- [Node.js](https://nodejs.org/) versión 18 o superior.
- Terminal para acessar VitePress a través de su interfaz de linea de comando (CLI).
- Terminal para acceder VitePress a través de su interfaz de linea de comando (CLI).
- Editor de texto con soporte a sintaxis [Markdown](https://en.wikipedia.org/wiki/Markdown).
- [VSCode](https://code.visualstudio.com/) es recomendado, junto con la [extensión oficial Vue](https://marketplace.visualstudio.com/items?itemName=Vue.volar).
@ -53,7 +53,7 @@ Si usa PNPM, percibirá un aviso de ausencia de `@docsearch/js`. Esto no evita q
::: tip NOTA
VitePress es un paquete apenas para ESM. No use `require()` para importarlo, y asegurese de que el `package.json` más cercano contiene `"type": "module"`, o cambie la extensión de archivo de sus archivos relevantes como `.vitepress/config.js` a `.mjs`/`.mts`. Consulte la [Guía de resolución de problemas Vite](http://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only) para más detalles. Además de eso, dentro de contextos de JavaScript asíncronos, puede usar `await import('vitepress')`.
VitePress es un paquete apenas para ESM. No use `require()` para importarlo, y asegúrese de que el `package.json` más cercano contiene `"type": "module"`, o cambie la extensión de archivo de sus archivos relevantes como `.vitepress/config.js` a `.mjs`/`.mts`. Consulte la [Guía de resolución de problemas Vite](http://vitejs.dev/guide/troubleshooting.html#this-package-is-esm-only) para más detalles. Además de eso, dentro de contextos de JavaScript asíncronos, puede usar `await import('vitepress')`.
:::
@ -86,7 +86,7 @@ Será saludado con algunas preguntas simples:
<<< @/snippets/init.ansi
::: tip Vue como Dependencia Correspondiente
Si tiene la intención de realizar una personalización que usa componentes Vue o APIs, debe instalar explicitamente `vue` como una dependencia correspondiente.
Si tiene la intención de realizar una personalización que usa componentes Vue o APIs, debe instalar explícitamente `vue` como una dependencia correspondiente.
:::
## Estrutura de Archivos {#file-structure}
@ -106,7 +106,7 @@ Asumiendo la opción de desarrollar el proyecto VitePress en `./docs`, la estruc
└─ package.json
```
El directorio `docs` es considerado la **raiz del proyecto** de su sitio VitePress. El directorio `.vitepress` es un lugar reservado para archivos de configuración VitePress, caché del servidor de desarrollo, resultado del build, y código de personalización de tema opcional.
El directorio `docs` es considerado la **raíz del proyecto** de su sitio VitePress. El directorio `.vitepress` es un lugar reservado para archivos de configuración VitePress, caché del servidor de desarrollo, resultado del build, y código de personalización de tema opcional.
::: tip
Por defecto, VitePress almacena el caché del servidor de desarrollo en `.vitepress/cache`, y el resultado del build de producción en `.vitepress/dist`. Se usa Git, debe adicionarlos a su archivo `.gitignore`. Estas ubicaciones también pueden ser [configuradas](../reference/site-config#outdir).
@ -114,7 +114,7 @@ Por defecto, VitePress almacena el caché del servidor de desarrollo en `.vitepr
### El archivo de configuración {#the-config-file}
El archivo de configuración (`.vitepress/config.js`) permite que personalice vários aspectos de su sitio VitePress, con las opciones más básicas siendo el titulo y la descripción del sitio:
El archivo de configuración (`.vitepress/config.js`) permite que personalice varios aspectos de su sitio VitePress, con las opciones más básicas siendo el titulo y la descripción del sitio:
```js
// .vitepress/config.js
@ -129,15 +129,15 @@ export default {
}
```
Puede también configurar el comportamiento del tema a través de la opción `themeConfig`. Consulte la [Referencia de Configuración](../reference/site-config) para detaller completos sobre todas las opciones de configuración.
Puede también configurar el comportamiento del tema a través de la opción `themeConfig`. Consulte la [Referencia de Configuración](../reference/site-config) para los detalles completos sobre todas las opciones de configuración.
### Archivos fuente {#source-files}
Archivos Markdown fuera del directorio `.vitepress` son considerados **archivos fuente**.
VitePress usa **enrutamiento basado en archivos**: cada archivo `.md` es compilado en un archivo `.html` correspondiente con el mismo path. Por ejemplo, `index.md` será compilado en `index.html`, y puede ser visitado en el path raiz `/` del sitio VitePress resultante.
VitePress usa **enrutamiento basado en archivos**: cada archivo `.md` es compilado en un archivo `.html` correspondiente con el mismo path. Por ejemplo, `index.md` será compilado en `index.html`, y puede ser visitado en el path raíz `/` del sitio VitePress resultante.
VitePress también proporciona la habilidad de generar URLs limpias, retambém fornece a habilidade de gerar URLs limpas, reescribir paths, y generare páginas dinámicamente. Estos serán tratados en la [Guía de Enrutamiento](./routing).
VitePress también proporciona la habilidad de generar URLs limpias, reescribir paths y generar páginas dinámicamente. Estos serán tratados en la [Guía de Enrutamiento](./routing).
## Instalado y Funcionando {#up-and-running}
@ -155,7 +155,7 @@ La herramienta debe tener también inyectado los siguientes scripts npm en su `p
}
```
El script `docs:dev` iniciará un servidor de desarrollo local con actualizaciones instantáneas. Ejecutelo con el siguiente comando:
El script `docs:dev` iniciará un servidor de desarrollo local con actualizaciones instantáneas. Ejecútelo con el siguiente comando:
::: code-group
@ -199,7 +199,7 @@ $ bun vitepress dev docs
:::
Más usos de la linea de comandos están documaentados en la [Referencia CLI](../reference/cli).
Más usos de la linea de comandos están documentados en la [Referencia CLI](../reference/cli).
El servidor de desarrollo debe estar corriendo en `http://localhost:5173`. Visite la URL en su navegador para ver su nuevo sitio en acción!
@ -213,4 +213,4 @@ El servidor de desarrollo debe estar corriendo en `http://localhost:5173`. Visit
- Se quiere profundizar la personalización de la apariencia de su sitio, explore tanto [Extienda el Tema por Defecto](./extending-default-theme) como [Construya un Tema Personalizado](./custom-theme).
- Una vez que su documentación tome forma, asegurese de leer la [Guia de Despliegue](./deploy).
- Una vez que su documentación tome forma, asegúrese de leer la [Guía de Despliegue](./deploy).

@ -35,7 +35,7 @@ export default defineConfig({
})
```
Las siguientes propiedades pueden ser substituidas para cada idioma (incluyendo la raiz):
Las siguientes propiedades pueden ser substituidas para cada idioma (incluyendo la raíz):
```ts
interface LocaleSpecificConfig<ThemeConfig = any> {
@ -45,11 +45,11 @@ interface LocaleSpecificConfig<ThemeConfig = any> {
titleTemplate?: string | boolean
description?: string
head?: HeadConfig[] // será mezclado con las entradas head existentes, las meta tags duplicadas son removidas automáticamente
themeConfig?: ThemeConfig // será mezclado superficialmente, cosas comunes pueden ser colocadas en la entrada superios de themeConfig
themeConfig?: ThemeConfig // será mezclado superficialmente, las cosas comunes pueden colocar en la entrada themeConfig en la parte superior
}
```
Consulte la interfaz [`DefaultTheme.Config`](https://github.com/vuejs/vitepress/blob/main/types/default-theme.d.ts) para obtener detaller sobre la personalización de los textos marcadores del tema por defecto. No substituya `themeConfig.algolia` o `themeConfig.carbonAds` en el nivel de idioma. Consulte la [documentação Algolia](../reference/default-theme-search#i18n) para usar la busqueda multilenguaje.
Consulte la interfaz [`DefaultTheme.Config`](https://github.com/vuejs/vitepress/blob/main/types/default-theme.d.ts) para obtener detalles sobre la personalización de los textos marcadores del tema por defecto. No substituya `themeConfig.algolia` o `themeConfig.carbonAds` en el nivel de idioma. Consulte la [documentación Algolia](../reference/default-theme-search#i18n) para usar la búsqueda multilenguaje.
**Consejo profesional:** El archivo de configuración puede ser almacenado en `docs/.vitepress/config/index.ts` también. Esto puede ayudar a organizar las cosas creando un archivo de configuración por idioma y entonces mezclarlos y exportarlos a partir de `index.ts`.

@ -1,6 +1,6 @@
# Extensiones Markdown {#markdown-extensions}
VitePress viene con Extensiones embutidas.
VitePress viene con Extensiones integradas.
## Anchors de Header {#header-anchors}
@ -42,7 +42,7 @@ Por ejemplo, dada la siguiente estructura de directorios:
Y suponiendo que está en `foo/one.md`:
```md
[Página Inicial](/) <!-- lleva al usuario al index.md raiz -->
[Página Inicial](/) <!-- lleva al usuario al index.md raíz -->
[foo](/foo/) <!-- lleva al usuario al index.html del directorio foo -->
[foo heading](./#heading) <!-- ancla al usuario a un header del archivo índice foo -->
[bar - three](../bar/three) <!-- puede omitir la extensión -->
@ -82,19 +82,19 @@ Para más detalles, vea [Frontmatter](../reference/frontmatter-config).
```md
| Tablas | Son | Geniales|
| ------------- | :-----------: | ----: |
| col 3 está | à direita | $1600 |
| col 2 está | centralizada | $12 |
| listras | são legais | $1 |
| ------------- | :------------: | ----: |
| col 3 está | justf-derecha | $1600 |
| col 2 está | centrada | $12 |
| las zebras | son bonitas | $1 |
```
**Salida**
| Tablas | Son | Geniales|
| ------------- | :-----------: | -----: |
| col 3 está | à direita | \$1600 |
| col 2 está | centralizada | \$12 |
| listras | são legais | \$1 |
| ------------- | :------------: | ----: |
| col 3 está | justf-derecha | $1600 |
| col 2 está | centrada | $12 |
| las zebras | son bonitas | $1 |
## Emoji :tada:
@ -207,7 +207,7 @@ console.log('Hola, VitePress!')
```
:::
Además de eso, puede definir títulos personalizados globalmente adicionando el siguiente contenifo en el archivo de configuración del sitio, útil si no estuviera escribiendo en ingles:
Además de eso, puede definir títulos personalizados globalmente adicionando el siguiente contenido en el archivo de configuración del sitio, útil si no estuviera escribiendo en ingles:
```ts
// config.ts
@ -228,7 +228,7 @@ export default defineConfig({
### `raw`
Este es un recipiente especial que puee ser usado para evitar conflictos de estilo y enrutador con VitePress. Esto es especialmente útil al documentar bibliotecas de componentes. Puede tambien verificar [whyframe](https://whyframe.dev/docs/integrations/vitepress) para mejor aislamiento.
Este es un recipiente especial que puede ser usado para evitar conflictos de estilo y enrutador con VitePress. Esto es especialmente útil al documentar bibliotecas de componentes. Puede también verificar [whyframe](https://whyframe.dev/docs/integrations/vitepress) para mejor aislamiento.
**Sintaxis**
@ -260,7 +260,7 @@ La clase `vp-raw` también puede ser usada directamente en elementos. El aislami
```js
postcssIsolateStyles({
includeFiles: [/vp-doc\.css/] // o padrão é /base\.css/
includeFiles: [/vp-doc\.css/] // por defecto a /base\.css/
})
```
@ -270,7 +270,7 @@ VitePress también soporta [alertas en estilo GitHub](https://docs.github.com/en
```md
> [!NOTE]
> Destaca informaciones que los usuarios deben tener en consideración, incluso leyendo rapidamente.
> Destaca informaciones que los usuarios deben tener en consideración, incluso leyendo rápidamente.
> [!TIP]
> Informaciones opcionales para ayudar al usuario a tener más éxito.
@ -286,7 +286,7 @@ VitePress también soporta [alertas en estilo GitHub](https://docs.github.com/en
```
> [!NOTE]
> Destaca informaciones que los usuarios deben tener en consideración, incluso leyendo rapidamente.
> Destaca informaciones que los usuarios deben tener en consideración, incluso leyendo rápidamente.
> [!TIP]
> Informaciones opcionales para ayudar al usuario a tener más éxito.
@ -342,7 +342,7 @@ export default {
</ul>
```
Una [lista de lenguajes válidas](https://shiki.style/languages) está disponible en el repositório Shiki.
Una [lista de lenguajes válidas](https://shiki.style/languages) está disponible en el repositorio Shiki.
También puede personalizar el tema de destaque de sintaxis en la configuración de la aplicación. Consulte las [opciones `markdown`](../reference/site-config#markdown) para más detalles.
@ -390,7 +390,7 @@ export default { // Destacado
msg: `Destacado!
Esta linea no está destacada,
pero esta y las próximas están.`,
motd: 'VitePress es increible',
motd: 'VitePress es increíble',
lorem: 'ipsum'
}
}
@ -407,7 +407,7 @@ export default { // Destacado
msg: `Destacado!
Esta linea no está destacada,
pero esta y las próximas están.`,
motd: 'VitePress es increible',
motd: 'VitePress es increíble',
lorem: 'ipsum',
}
}
@ -430,7 +430,7 @@ export default {
```
````
**Saída**
**Salida**
```js
export default {
@ -508,7 +508,7 @@ export default {
## Errores y Avisos en Bloques de Código {#errors-and-warnings-in-code-blocks}
Adicionar los comentarios `// [!code warning]` o `// [!code error]` en una linea coloreará los bloques conforme necesário.
Adicionar los comentarios `// [!code warning]` o `// [!code error]` en una linea coloreará los bloques conforme necesario.
**Entrada**
@ -628,7 +628,7 @@ También soporta [destaque de linea](#line-highlighting-in-code-blocks):
::: tip
El valor de `@` corresponde a la raiz del código fuente. Por defecto, es la raiz del proyecto VitePress, a menos que `srcDir` sea configurado. Alternativamente, puede también importar de paths relativos:
El valor de `@` corresponde a la raíz del código fuente. Por defecto, es la raíz del proyecto VitePress, a menos que `srcDir` sea configurado. Alternativamente, puede también importar de paths relativos:
```md
<<< ../snippets/snippet.js
@ -701,7 +701,7 @@ export default config
:::
````
**Salída**
**Salida**
::: code-group
@ -758,10 +758,10 @@ También puede [importar _snippets_ de código](#import-code-snippets) en grupos
## Inclusión de Archivo Markdown {#markdown-file-inclusion}
Puede incluir un archivo markdown en otro archvo markdown, incluso anidado.
Puede incluir un archivo markdown en otro archivo markdown, incluso anidado.
::: tip
Puede prefijar el path del markdown con `@`, el actuará como la raiz de origen. Por defecto, es la raiz del projecto VitePress, a menos que `srcDir` sea configurado.
Puede prefijar el path del markdown con `@`, el actuará como la raíz de origen. Por defecto, es la raíz del proyecto VitePress, a menos que `srcDir` sea configurado.
:::
Por ejemplo, puede incluir un archivo markdown relativo usando esto:
@ -837,7 +837,7 @@ Puede ser creada usando `.foorc.json`.
El formato del intervalo de lineas seleccionado puede ser: `{3,}`, `{,10}`, `{1,10}`
::: warning
Observe que esto no genera errores si el archivo no está presente. Por lo tanto, al usar este recurso, asegurese de que el contenido está siendo mostrado como se espera.:::
Observe que esto no genera errores si el archivo no está presente. Por lo tanto, al usar este recurso, asegúrese de que el contenido está siendo mostrado como se espera.:::
## Ecuaciones Matemáticas {#math-equations}
@ -870,7 +870,7 @@ $$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$
| $\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} = \vec{\mathbf{0}}$ | la rotacional de $\vec{\mathbf{E}}$ es proporcional a la tasa de variación de $\vec{\mathbf{B}}$ |
| $\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} = \frac{4\pi}{c}\vec{\mathbf{j}} \nabla \cdot \vec{\mathbf{E}} = 4 \pi \rho$ | _hã?_ |
**Salída**
**Salida**
Cuando $a \ne 0$, existen dos soluciones para $(ax^2 + bx + c = 0)$ y ellas son
$$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$
@ -883,7 +883,7 @@ $$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$
| $\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} = \vec{\mathbf{0}}$ | la rotacional de $\vec{\mathbf{E}}$ es proporcional a la tasa de variación de $\vec{\mathbf{B}}$ |
| $\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} = \frac{4\pi}{c}\vec{\mathbf{j}} \nabla \cdot \vec{\mathbf{E}} = 4 \pi \rho$ | _hã?_ |
## _Lazy Loading_ de Imagenes {#image-lazy-loading}
## _Lazy Loading_ de Imágenes {#image-lazy-loading}
Puede activar la "carga perezosa" para cada imagen adicionada via markdown definiendo `lazyLoading` como `true` en su archivo de configuración:
@ -891,7 +891,7 @@ Puede activar la "carga perezosa" para cada imagen adicionada via markdown defin
export default {
markdown: {
image: {
// la carga perezosa de imagenes está desactivada por defecto
// la carga perezosa de imágenes está desactivada por defecto
lazyLoading: true
}
}

@ -2,11 +2,11 @@
El modo MPA (Aplicación de multiples páginas) puede ser habilitado por la linea de comandos con `vitepress build --mpa`, o a través de la configuración por la opción `mpa: true`.
En el modo MPA, todas las páginas son presentadas por defecto sin JavaScript incluído. Como resultado, el sitio en producción probablemente tendrá una marca de desempeño de visita inicial superior con herramientas de auditoría.
En el modo MPA, todas las páginas son presentadas por defecto sin JavaScript incluido. Como resultado, el sitio en producción probablemente tendrá una marca de desempeño de visita inicial superior con herramientas de auditoría.
Sin embargo, debido a la ausencia de navegación SPA, los links entre páginas resultan en recargas de página completos. Navegaciones después de la carga en el modo MPA no parecerán tan instantáneos en comparación con el modo SPA.
También note que no tener JavaScript por defecto significa que está esencialmente utilizando Vue como modelo de lenguaje en el lado del servidor. Nungun manipulador de eventos será embutido en el navegador, entonces no habrá interactividad. Para cargar JavaScript en el lado del cliente, necesitará usar el tag especial `<script client>`:
También note que no tener JavaScript por defecto significa que está esencialmente utilizando Vue como modelo de lenguaje en el lado del servidor. Ningún manipulador de eventos será embutido en el navegador, entonces no habrá interactividad. Para cargar JavaScript en el lado del cliente, necesitará usar el tag especial `<script client>`:
```html
<script client>

@ -4,7 +4,7 @@ outline: deep
# Enrutamiento {#routing}
## Enrutamiento basasdo en Archivos {#file-based-routing}
## Enrutamiento basado en Archivos {#file-based-routing}
VitePress utiliza enrutamiento basado en archivos, esto significa que las páginas HTML generadas son mapeadas de la estructura de directorios de los archivos Markdown. Por ejemplo, dada la siguiente estructura de directorio:
@ -28,19 +28,19 @@ guide/getting-started.md --> /guide/getting-started.html
El HTML resultante puede ser hospedado en cualquier servidor web que pueda servir archivos estáticos.
## Diretório Raiz y fuente {#root-and-source-directory}
## Directorio Raíz y fuente {#root-and-source-directory}
Existen dos conceptos importantes en la estructura de archivos de un proyecto VitePress: el **directorio raiz** y el **directorio fuente**.
Existen dos conceptos importantes en la estructura de archivos de un proyecto VitePress: el **directorio raíz** y el **directorio fuente**.
### Directorio Raiz {#project-root}
### Directorio Raíz {#project-root}
El directorio raiz es donde VitePress busca por el directorio especial `.vitepress`. El directorio `.vitepress` es un lugar reservado para el archivo de configuración de VitePress, el caché del servidor de desarrollo, el resultado de la compilación y el código de personalización del tema opcional.
El directorio raíz es donde VitePress busca por el directorio especial `.vitepress`. El directorio `.vitepress` es un lugar reservado para el archivo de configuración de VitePress, el caché del servidor de desarrollo, el resultado de la compilación y el código de personalización del tema opcional.
Al ejecutar `vitepress dev` o `vitepress build` en el terminal, VitePress usará el directorio actual como directorio raiz del proyecto. Para especificar un subdirectorio como raiz, es necesario pasar el camino relativo para el comando. Por ejemplo, si el proyecto VitePress estuviera localizado en `./docs`, debe ejecutarse `vitepress dev docs`:
Al ejecutar `vitepress dev` o `vitepress build` en el terminal, VitePress usará el directorio actual como directorio raíz del proyecto. Para especificar un subdirectorio como raíz, es necesario pasar el camino relativo para el comando. Por ejemplo, si el proyecto VitePress estuviera localizado en `./docs`, debe ejecutarse `vitepress dev docs`:
```
.
├─ docs # directorio raiz
├─ docs # directorio raíz
│ ├─ .vitepress # directorio de configuración
│ ├─ getting-started.md
│ └─ index.md
@ -51,7 +51,7 @@ Al ejecutar `vitepress dev` o `vitepress build` en el terminal, VitePress usará
vitepress dev docs
```
Esto resultará en el siguiente mapeamento de fuente para HTML:
Esto resultará en el siguiente mapeo de fuente para HTML:
```
docs/index.md --> /index.html (accesible como /)
@ -60,19 +60,19 @@ docs/getting-started.md --> /getting-started.html
### Directorio Fuente {#source-directory}
El directorio fuente es donde sus archivos fuente en Markdown están. Por defecto, es el mismo que el directorio raiz. Sin embargo, puede configurarlo por medio de la opción de configuración [`srcDir`](../reference/site-config#srcdir).
El directorio fuente es donde sus archivos fuente en Markdown están. Por defecto, es el mismo que el directorio raíz. Sin embargo, puede configurarlo por medio de la opción de configuración [`srcDir`](../reference/site-config#srcdir).
La opción `srcDir` es resuelta en relación al directorio raiz del proyecto. Por ejemplo, con `srcDir: 'src'`, su estructura de archivos quedará así:
La opción `srcDir` es resuelta en relación al directorio raíz del proyecto. Por ejemplo, con `srcDir: 'src'`, su estructura de archivos quedará así:
```
. # directorio raiz
. # directorio raíz
├─ .vitepress # directorio de configuración
└─ src # directorio fuente
├─ getting-started.md
└─ index.md
```
El mapeamente resultante de la fuente para HTML:
El mapeado resultante de la fuente para HTML:
```
src/index.md --> /index.html (accesible como /)
@ -81,7 +81,7 @@ src/getting-started.md --> /getting-started.html
## Links Entre Páginas {#linking-between-pages}
Puede usar tanto paths absolutos como relativos al vincular páginas. Note que, incluso si ambas extensiones `.md` y `.html` funcionan, funcionem, la práctica recomendada es omitir las extensiones de archivo para que VitePress pueda generar las URLs finales con base en su configuración.
Puede usar tanto paths absolutos como relativos al vincular páginas. Note que, incluso si ambas extensiones `.md` y `.html` funcionan, la práctica recomendada es omitir las extensiones de archivo para que VitePress pueda generar las URLs finales con base en su configuración.
```md
<!-- Hacer -->
@ -93,7 +93,7 @@ Puede usar tanto paths absolutos como relativos al vincular páginas. Note que,
[Getting Started](./getting-started.html)
```
Averigue más sobre la vinculación de assets, como imagenes, en [Manipulación de Assets](./asset-handling).
Averigue más sobre la vinculación de assets, como imágenes, en [Manipulación de Assets](./asset-handling).
### Vinculación de Páginas No VitePress {#linking-to-non-vitepress-pages}
@ -151,7 +151,7 @@ Sin embargo, si no puede configurar el servidor con ese soporte, será necesario
```
# Reescritura de Ruta {#route-rewrites}
Puede personalizar el mapeamento entre la estructura de directorios fuente y las páginas generadas. Esto es útil cuando tiene una estructura de proyecto compleja. Por ejemplo, digamos que tiene un monorepo con varios paquetes y le gustaría colocar la documentación junto con los archivos fuente de esta forma:
Puede personalizar el mapeado entre la estructura de directorios fuente y las páginas generadas. Esto es útil cuando tiene una estructura de proyecto compleja. Por ejemplo, digamos que tiene un monorepo con varios paquetes y le gustaría colocar la documentación junto con los archivos fuente de esta forma:
```
.
@ -185,7 +185,7 @@ export default {
}
```
La opción `rewrites` también soporta parametros de ruta dinámicos. En el ejemplo arriba, sería tedioso listar todos los paths si tiene muchos paquetes. Dado que todos ellos tienen la misma estructura de archivo, puede simplificar la configuración así:
La opción `rewrites` también soporta parámetros de ruta dinámicos. En el ejemplo arriba, sería tedioso listar todos los paths si tiene muchos paquetes. Dado que todos ellos tienen la misma estructura de archivo, puede simplificar la configuración así:
```ts
export default {
@ -208,7 +208,7 @@ Cuando las reescrituras están habilitadas, **links relativos deben ser basados
## Rutas Dinámicas {#dynamic-routes}
Puede generar muchas páginas usando un único archivo Markdown y datos dinámicos. Por ejemplo, puede crear un archivo `packages/[pkg].md` que genera una página correspondiente para cáda paquete en un proyecto. Aqui, el segmento `[pkg]` es un **parámetro** de ruta que diferencia cada página de las otras.
Puede generar muchas páginas usando un único archivo Markdown y datos dinámicos. Por ejemplo, puede crear un archivo `packages/[pkg].md` que genera una página correspondiente para cada paquete en un proyecto. Aqui, el segmento `[pkg]` es un **parámetro** de ruta que diferencia cada página de las otras.
### Archivo de Carga de Paths {#paths-loader-file}

@ -6,7 +6,7 @@ outline: deep
VitePress pre-interpreta la aplicación en Node.js durante la compilación del producción, utilizando las capacidades de Interpretación del lado del servidor (SSR) de Vue. Esto significa que todo el código personalizado en los componentes del tema está sujeto a la compatibilidad SSR.
La [sección SSR en la documentación Vue oficial](https://vuejs.org/guide/scaling-up/ssr.html) proporciona más contexto sobre lo que es SSR, la relación entre SSR / SSG y notas comunes sobre escribir código amigable con SSR. La regla general es acceder apenas APIs deln navegador / DOM en los hooks `beforeMount` o `mounted` de los componentes Vue.
La [sección SSR en la documentación Vue oficial](https://vuejs.org/guide/scaling-up/ssr.html) proporciona más contexto sobre lo que es SSR, la relación entre SSR / SSG y notas comunes sobre escribir código amigable con SSR. La regla general es acceder apenas APIs del navegador / DOM en los hooks `beforeMount` o `mounted` de los componentes Vue.
## `<ClientOnly>`
@ -107,7 +107,7 @@ import { defineClientComponent } from 'vitepress'
const clientCompRef = ref(null)
const ClientComp = defineClientComponent(
() => import('componente-que-acessa-window-na-importacao'),
() => import('componente-que-accede-window-en-la-importacion'),
// los argumentos son pasados para h() - https://vuejs.org/api/render-function.html#h
[

@ -1,8 +1,8 @@
# Usando Vue en Markdown {#using-vue-in-markdown}
En VitePress, cada archivo Markdown es compilado para HTML y entonces procesado como un [Componente de Archivo Único de Vue](https://vuejs.org/guide/scaling-up/sfc.html). Esto significa que puede usar cualquier funcionalidad de Vue dentro del Markdown, incluyendo la interpolación dinámica, usar componentes Vue o lógica arbitrária de componentes Vue dentro de la página adicionando una tag `<script>`.
En VitePress, cada archivo Markdown es compilado para HTML y entonces procesado como un [Componente de Archivo Único de Vue](https://vuejs.org/guide/scaling-up/sfc.html). Esto significa que puede usar cualquier funcionalidad de Vue dentro del Markdown, incluyendo la interpolación dinámica, usar componentes Vue o lógica arbitraria de componentes Vue dentro de la página adicionando una tag `<script>`.
Vale resaltar que VitePress aprovecha el compilador Vue para detectar y optimizar automáticamente las partes puramente estáticas del contenido Markdown. Los contenidos estáticaos son optimizados en nodos de espacio reservado únicos y eliminados de la carga JavaScript de la página para visitas iniciales. Ellos también son ignorados durante la hidratación en el lado del cliente. En resumen, solo paga por las partes dinámicas en cualquier página específica.
Vale resaltar que VitePress aprovecha el compilador Vue para detectar y optimizar automáticamente las partes puramente estáticas del contenido Markdown. Los contenidos estáticos son optimizados en nodos de espacio reservado únicos y eliminados de la carga JavaScript de la página para visitas iniciales. Ellos también son ignorados durante la hidratación en el lado del cliente. En resumen, solo paga por las partes dinámicas en cualquier página específica.
::: tip Compatibilidad SSR
Todo uso de Vue necesita ser compatible con SSR. Consulte [Compatibilidad SSR](./ssr-compat) para detalles y soluciones comunes.
@ -40,7 +40,7 @@ Las Directivas también funcionan (observe que, por definición, HTML crudo tamb
## `<script>` e `<style>`
las tags `<script>` e `<style>` en nivel raiz en los archivos Markdown funcionan igualmente como en los componentes de archivo único Vue, incluyendo `<script setup>`, `<style module>`, y etc. La principal diferencia aquí es que no hay una tag `<template>`: todo contenido en nivel raiz es Markdown. Además, observe que todas las tags deben ser colocadas **después** del frontmatter:
las tags `<script>` e `<style>` en nivel raíz en los archivos Markdown funcionan igualmente como en los componentes de archivo único Vue, incluyendo `<script setup>`, `<style module>`, y etc. La principal diferencia aquí es que no hay una tag `<template>`: todo contenido en nivel raíz es Markdown. Además, observe que todas las tags deben ser colocadas **después** del frontmatter:
```html
---
@ -68,10 +68,10 @@ El conteo es: {{ count }}
```
::: warning Evite `<style scoped>` en el Markdown
Cuando es usado en Markdown, `<style scoped>` exige la adición de atributos especiales a cada elemento en la página actual, lo que aumentará significativamente el tamaño de la página. `<style module>` es preferido cuando es necesaria una estilización localizada en una página.
Cuando es usado en Markdown, `<style scoped>` exige la adición de atributos especiales a cada elemento en la página actual, lo que aumentará significativamente el tamaño de la página. `<style module>` es preferido cuando es necesaria una estilizado localizada en una página.
:::
También tiene acceso a los APIs de tiempo de ejecución VitePress, como el [auxiliar `useData`](../reference/runtime-api#usedata), que proporciona acceso a los metadados de la página actual:
También tiene acceso a los APIs de tiempo de ejecución VitePress, como el [auxiliar `useData`](../reference/runtime-api#usedata), que proporciona acceso a los metadatos de la página actual:
**Entrada**
@ -102,7 +102,7 @@ Puede importar y usar componentes Vue directamente en los archivos Markdown.
### Importando en el Markdown {#importing-in-markdown}
Si un componente es usado apenas por algunas páginas, es recomendable importarlos explicitamente donde son usados. Esto permite que ellos sean divididos adecuadamente y cargados apenas cuando las páginas relevantes son mostradas.
Si un componente es usado apenas por algunas páginas, es recomendable importarlos explícitamente donde son usados. Esto permite que ellos sean divididos adecuadamente y cargados apenas cuando las páginas relevantes son mostradas.
```md
<script setup>
@ -125,7 +125,7 @@ Este es un archivo .md usando un componente personalizado
Si un componente fuera usado en la mayoría de las páginas, ellos pueden ser registrados globalmente personalizando la instancia de la aplicación Vue. Consulte la sección relevante en [Extendiendo el Tema por Defecto](./extending-default-theme#registering-global-components) para un ejemplo.
::: warning IMPORTANT
Asegurese de que el nombre de un componente personalizado contenga un hífen o esté en PascalCase. Caso contrario, el será tratado como un elemento alineado y envuelto dentro de una tag `<p>`, lo que llevará a una incompatibilidad de hidratación pues `<p>` no permite que elementos de bloque sean colocados dentro de el.
Asegúrese de que el nombre de un componente personalizado contenga un guion o esté en PascalCase. Caso contrario, el será tratado como un elemento alineado y envuelto dentro de una tag `<p>`, lo que llevará a una incompatibilidad de hidratación pues `<p>` no permite que elementos de bloque sean colocados dentro de el.
:::
### Usando Componentes En Headers <ComponenteEnHeader /> {#using-components-in-headers}
@ -145,25 +145,25 @@ EL HTML de salida es realizado por [Markdown-it](https://github.com/Markdown-it/
## Escapes {#escaping}
Puede escapar de interpolaciones Vue envolvientdolas en un `<span>` u otros elementos con la directiva `v-pre`:
Puede escapar de interpolaciones Vue envolviéndolas en un `<span>` u otros elementos con la directiva `v-pre`:
**Entrada**
```md
Esto <span v-pre>{{ será exibido como es }}</span>
Esto <span v-pre>{{ será mostrado como es }}</span>
```
**Salida**
<div class="escape-demo">
<p>Esto <span v-pre>{{ será exibido como es }}</span></p>
<p>Esto <span v-pre>{{ será mostrado como es }}</span></p>
</div>
Alternativamente, puede envolver todo el paragrafo en un contenedor personalizadon `v-pre`:
Alternativamente, puede envolver todo el párrafo en un contenedor personalizado `v-pre`:
```md
::: v-pre
{{ Esto será exibido como es }}
{{ Esto será mostrado como es }}
:::
```
@ -172,12 +172,12 @@ Alternativamente, puede envolver todo el paragrafo en un contenedor personalizad
<div class="escape-demo">
::: v-pre
{{ Esto será exibido como es }}
{{ Esto será mostrado como es }}
:::
</div>
## "Desescape" en bloques de Código {#unescape-in-code-blocks}
## Evitar escapes en bloques de Código {#unescape-in-code-blocks}
Por defecto, todos los bloques de código cercados son automáticamente envueltos con `v-pre`, entonces ninguna sintaxis Vue será procesada dentro de ellos. Para permitir la interpolación en el estilo Vue dentro de la valla, puede adicionar el lenguaje con el sufijo `-vue`, por ejemplo, `js-vue`:
@ -200,7 +200,7 @@ Observe que esto puede impedir que ciertos tokens sean realzados correctamente.
## Usando Preprocesadores CSS {#using-css-pre-processors}
VitePress poseé [soporte embutido](https://vitejs.dev/guide/features.html#css-pre-processors) para preprocesadores CSS: archivos `.scss`, `.sass`, `.less`, `.styl` e `.stylus`. No es necesario instalar plugins específicos de Vite para ellos, pero el propio preprocesados correspondiente debe ser instalado:
VitePress posee [soporte embutido](https://vitejs.dev/guide/features.html#css-pre-processors) para preprocesadores CSS: archivos `.scss`, `.sass`, `.less`, `.styl` e `.stylus`. No es necesario instalar plugins específicos de Vite para ellos, pero el propio preprocesados correspondiente debe ser instalado:
```
# .scss e .sass

@ -1,9 +1,9 @@
# Qué es VitePress? {#what-is-vitepress}
VitePress es un [Generador de Sitios Estáticos](https://en.wikipedia.org/wiki/Static_site_generator) (SSG) proyectado para crear sitios rápidos y centrados en contenido. En suma, VitePress utiliza su contenido fuente escrito en [Markdown](https://en.wikipedia.org/wiki/Markdown), aplica un tema a el y genera páginas HTML estáticas que pueden ser facilmente implantadas en cualquier lugar.
VitePress es un [Generador de Sitios Estáticos](https://en.wikipedia.org/wiki/Static_site_generator) (SSG) proyectado para crear sitios rápidos y centrados en contenido. En suma, VitePress utiliza su contenido fuente escrito en [Markdown](https://en.wikipedia.org/wiki/Markdown), aplica un tema a el y genera páginas HTML estáticas que pueden ser fácilmente implantadas en cualquier lugar.
<div class="tip custom-block" style="padding-top: 8px">
Quiere apenas experimentar? Valla al [Início Rápido](./getting-started).
Quiere apenas experimentar? Valla al [Inicio Rápido](./getting-started).
</div>
@ -15,9 +15,9 @@ Quiere apenas experimentar? Valla al [Início Rápido](./getting-started).
La [documentación oficial Vue.js](https://vuejs.org/) también está basada en VitePress, pero usa un tema personalizado compartido entre varias traducciones.
- **Blogs, Portfólios y sitios de Marketing**
- **Blogs, Portfolios y sitios de Marketing**
VitePress soporta [temas totalmente personalizables](./custom-theme), con la experiencia de desarrollador por defecto de una aplicaciónn Vite + Vue. La construcción con Vite significa que puede aprovechar directamente plugins Vite de su rico ecosistema. Adicionalmente, VitePress proporciona APIs flexibles para[cargar datos](./data-loading) (locales o remotos) y [generar rutas dinámicamente](./routing#dynamic-routes). Puede usarlo para construir practicamente cualquier cosa desde que los datos puedan ser determinados en el momento del build.
VitePress soporta [temas totalmente personalizables](./custom-theme), con la experiencia de desarrollador por defecto de una aplicación Vite + Vue. La construcción con Vite significa que puede aprovechar directamente plugins Vite de su rico ecosistema. Adicionalmente, VitePress proporciona APIs flexibles para[cargar datos](./data-loading) (locales o remotos) y [generar rutas dinámicamente](./routing#dynamic-routes). Puede usarlo para construir prácticamente cualquier cosa desde que los datos puedan ser determinados en el momento del build.
El [blog oficial Vue.js](https://blog.vuejs.org/) es un blog simple que genera su página inicial basada en contenido local.
@ -27,7 +27,7 @@ VitePress visa proporcionar excelente Experiencia de Desarrollador (DX) al traba
- **[Alimentado por Vite:](https://vitejs.dev/)** inicialización instantánea del servidor, con ediciones siempre reflejadas instantáneamente (<100ms) sin recarga de página.
- **[Extensiones Markdown Integradas:](./markdown)** Frontmatter, tablas, destaque de sintaxis... usted escoje. Especificamente, VitePress proporciona muchos recursos para trabajar con bloques de código, tornandolo ideal para documentación altamente técnica.
- **[Extensiones Markdown Integradas:](./markdown)** Frontmatter, tablas, destaque de sintaxis... usted encoje. Específicamente, VitePress proporciona muchos recursos para trabajar con bloques de código, tornandolo ideal para documentación altamente técnica.
- **[Markdown Mejorado por Vue:](./using-vue)** cada página Markdown es también un [Componente de Archivo único](https://pt.vuejs.org/guide/scaling-up/sfc.html), gracias a la compatibilidad de sintaxis de 100% del template Vue con HTML. Puede también incorporar iteractividad con su contenido estático usando recursos de template Vue o componentes Vue importados.
@ -37,11 +37,11 @@ Al contrario de muchos SSGs tradicionales, un sitio generado por VitePress es la
- **Carga Inicial Rápida**
La visita inicial a cualquier página será servida con el HTML estático pré-renderizado para velocidad de carga rápida y SEO optimizado. La página entonces carga un paquete JavaScript que transforma la página en una SPA Vue ("hidratación"). El proceso de hidratación es extremadamente rápido: en [PageSpeed Insights](https://pagespeed.web.dev/report?url=https%3A%2F%2Fvitepress.dev%2F), sitios típicos VitePress alcanzan puntuaciones de desempeño casi perfectas, incluso en dispositivos móbiles de bajo desempeño con una red lenta.
La visita inicial a cualquier página será servida con el HTML estático pré-renderizado para velocidad de carga rápida y SEO optimizado. La página entonces carga un paquete JavaScript que transforma la página en una SPA Vue ("hidratación"). El proceso de hidratación es extremadamente rápido: en [PageSpeed Insights](https://pagespeed.web.dev/report?url=https%3A%2F%2Fvitepress.dev%2F), sitios típicos VitePress alcanzan puntuaciones de desempeño casi perfectas, incluso en dispositivos móviles de bajo desempeño con una red lenta.
- **Navegación Rápida pos-carga**
Más importante todavía, el modelo SPA lleva a una mejor experiencia del usuario **después** de la carga inicial. La navegación subsequente dentro del sitio no causará una recarga adicional completa de la página. En vez de eso, el contenido de la página de entrada será buscado y actualizado dinámicamente. VitePress también pre-carga automáticamente pedazos de página para links que están dentro del viewport. En la mayoría de los casos, la navegación pos-carga parecerá instantánea.
Más importante todavía, el modelo SPA lleva a una mejor experiencia del usuario **después** de la carga inicial. La navegación subsecuente dentro del sitio no causará una recarga adicional completa de la página. En vez de eso, el contenido de la página de entrada será buscado y actualizado dinámicamente. VitePress también pre-carga automáticamente pedazos de página para links que están dentro del viewport. En la mayoría de los casos, la navegación pos-carga parecerá instantánea.
- **Interactividad Sin Penalidades**
@ -49,7 +49,7 @@ Al contrario de muchos SSGs tradicionales, un sitio generado por VitePress es la
## Y VuePress? {#what-about-vuepress}
VitePress es el sucesor espiritual de VuePress. VuePress era orginalmente basado en Vue 2 y webpack. Con Vue 3 y Vite, VitePress ofrece una experiencia de desarrollador significamente mejor, mejor desempeño en producción, un tema por defecto más pulido y un API de personalización más flexible.
VitePress es el sucesor espiritual de VuePress. VuePress era originalmente basado en Vue 2 y webpack. Con Vue 3 y Vite, VitePress ofrece una experiencia de desarrollador significativamente mejor, mejor desempeño en producción, un tema por defecto más pulido y un API de personalización más flexible.
A diferencia del API entre VitePress y VuePress reside principalmente en temas y personalización. Si estuviera usando VuePress 1 con el tema por defecto, la migración para VitePress debe ser relativamente simple.

@ -28,7 +28,7 @@ features:
details: Cree lindos sitios de documentación apenas con markdown.
- icon: <svg xmlns="http://www.w3.org/2000/svg" width="30" viewBox="0 0 256 256.32"><defs><linearGradient id="a" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"/><stop offset="100%" stop-color="#BD34FE"/></linearGradient><linearGradient id="b" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"/><stop offset="8.333%" stop-color="#FFDD35"/><stop offset="100%" stop-color="#FFA800"/></linearGradient></defs><path fill="url(#a)" d="M255.153 37.938 134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"/><path fill="url(#b)" d="M185.432.063 96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028 72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"/></svg>
title: Disfruta de la experiencia Vite
details: Inicio instantaneo de servidor, actualizaciones ultrarrápidas, y plugins del ecosistema Vite.
details: Inicio instantáneo de servidor, actualizaciones ultrarrápidas, y plugins del ecosistema Vite.
- icon: <svg xmlns="http://www.w3.org/2000/svg" width="30" viewBox="0 0 256 220.8"><path fill="#41B883" d="M204.8 0H256L128 220.8 0 0h97.92L128 51.2 157.44 0h47.36Z"/><path fill="#41B883" d="m0 0 128 220.8L256 0h-51.2L128 132.48 50.56 0H0Z"/><path fill="#35495E" d="M50.56 0 128 133.12 204.8 0h-47.36L128 51.2 97.92 0H50.56Z"/></svg>
title: Personaliza con Vue
details: Usa la sintaxis y componentes Vue directamente en markdown, o construye temas personalizados con Vue.

@ -1,4 +1,4 @@
# Intefaz de Linea de Comando {#command-line-interface}
# Interfaz de Linea de Comando {#command-line-interface}
## `vitepress dev`
@ -43,7 +43,7 @@ vitepress build [root]
| `--base <path>` | Ruta de base pública (por defecto: `/`) (`string`) |
| `--target <target>` | Transpilar objetivo (por defecto: `"modules"`) (`string`) |
| `--outDir <dir>` | Directorio de salida relativo a **cwd** (por defecto: `<root>/.vitepress/dist`) (`string`) |
| `--minify [minifier]` | Habilitar/desabilitar la minificación, o especifica un minero para usar (por defecto: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) |
| `--minify [minifier]` | Habilitar/deshabilitar la minificación, o especifica un minero para usar (por defecto: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) |
| `--assetsInlineLimit <number>` | Limitar los bytes para alinear los activos en base 64 (por defecto: `4096`) (`number`) |
## `vitepress preview`

@ -7,28 +7,28 @@ Los Badge te permite agregar estados a tus encabezados. Por ejemplo, podría res
Puedes usar el componente `Badge` que está disponible globalmente.
```html
### Title <Badge type="info" text="default" />
### Title <Badge type="tip" text="^1.9.0" />
### Title <Badge type="warning" text="beta" />
### Title <Badge type="danger" text="caution" />
### Titulo <Badge type="info" text="default" />
### Titulo <Badge type="tip" text="^1.9.0" />
### Titulo <Badge type="warning" text="beta" />
### Titulo <Badge type="danger" text="precaución" />
```
el código anterior se representa como:
### Title <Badge type="info" text="default" />
### Title <Badge type="tip" text="^1.9.0" />
### Title <Badge type="warning" text="beta" />
### Title <Badge type="danger" text="caution" />
### Titulo <Badge type="info" text="default" />
### Titulo <Badge type="tip" text="^1.9.0" />
### Titulo <Badge type="warning" text="beta" />
### Titulo <Badge type="danger" text="precaución" />
## Personalizar hijos {#custom-children}
`<Badge>` acepta `children` (hijos), que se mostrará en el badge.
```html
### Title <Badge type="info">custom element</Badge>
### Titulo <Badge type="info">custom element</Badge>
```
### Title <Badge type="info">custom element</Badge>
### Titulo <Badge type="info">custom element</Badge>
## Personalizar Tipo de Color {#customize-type-color}

@ -4,9 +4,9 @@ La configuración del tema te permite personalizar tu tema. puedes definir la co
```ts
export default {
lang: 'pt-BR',
lang: 'es-CO',
title: 'VitePress',
description: 'Generador de site estático Vite & Vue.',
description: 'Generador de Sitios Estáticos desarrollado con Vite y Vue.',
// Configuraciones relacionadas con el tema.
themeConfig: {
@ -70,7 +70,7 @@ La configuración del elemento del menú de navegación. Más detalles en [Tema
export default {
themeConfig: {
nav: [
{ text: 'Guia', link: '/guide' },
{ text: 'Guía', link: '/guide' },
{
text: 'Menú Dropdown',
items: [
@ -119,7 +119,7 @@ export default {
themeConfig: {
sidebar: [
{
text: 'Guia',
text: 'Guía',
items: [
{ text: 'Introducción', link: '/introduction' },
{ text: 'A partir de', link: '/getting-started' },
@ -168,7 +168,7 @@ export type SidebarItem = {
## aside
- Tipo: `boolean | 'left'`
- Estandar: `true`
- Defecto: `true`
- Puede ser anulado por la página a través de [frontmatter](./frontmatter-config#aside)
Definir este valor como `false` evita que se muestre el elemento lateral.\
@ -197,7 +197,7 @@ interface Outline {
level?: number | [number, number] | 'deep'
/**
* El titulo que se mostrará en el equema.
* El titulo que se mostrará en el esquema.
*
* @default 'On this page'
*/
@ -391,48 +391,48 @@ export interface DocFooter {
## darkModeSwitchLabel
- Tipo: `string`
- Estandar: `Appearance`
- Defecto: `Appearance`
Se puede utilizar para personalizar la etiqueta del botón del modo oscuro. Esta etiqueta solo se muestra en la vista móvil.
## lightModeSwitchTitle
- Tipo: `string`
- Estandar: `Switch to light theme`
- Defecto: `Switch to light theme`
Se puede utilizar para personalizar el título del botón borrar que aparece al pasar el mouse.
## darkModeSwitchTitle
- Tipo: `string`
- Estandar: `Switch to dark theme`
- Defecto: `Switch to dark theme`
Se puede utilizar para personalizar el título del botón del modo oscuro que aparece al pasar el mouse.
## sidebarMenuLabel
- Tipo: `string`
- Estandar: `Menu`
- Defecto: `Menu`
Se puede utilizar para personalizar la etiqueta del menú de la barra lateral. Esta etiqueta solo se muestra en la vista móvil.
## returnToTopLabel
- Tipo: `string`
- Estandar: `Return to top`
- Defecto: `Return to top`
Se puede utilizar para personalizar la etiqueta del botón Volver al principio. Esta etiqueta solo se muestra en la vista móvil.
## langMenuLabel
- Tipo: `string`
- Estandar: `Change language`
- Defecto: `Change language`
Se puede utilizar para personalizar la etiqueta aria del botón de idioma en la barra de navegación. Esto sólo se usa si estás usando [i18n](../guide/i18n).
## externalLinkIcon
- Tipo: `boolean`
- Estandar: `false`
- Defecto: `false`
Se debe mostrar um ícono de link externo junto a los enlaces externos en markdown.

@ -61,7 +61,7 @@ type ThemeableImage =
| { light: string; dark: string; alt?: string }
interface HeroAction {
// Tema de color de botón. Estándar: `brand`.
// Tema de color de botón. Defecto: `brand`.
theme?: 'brand' | 'alt'
// Etiqueta del botón.
@ -97,7 +97,7 @@ También puedes personalizarlo aún más combinando `--vp-home-hero-name-backgr
}
```
## Sección de caracteristicas {#features-section}
## Sección de características {#features-section}
En la sección de funciones, puede enumerar cualquier cantidad de funciones que desee mostrar inmediatamente después de la sección. _Hero_. Para configurarlo seleccione la opción `features` para el frontmatter.
@ -113,12 +113,12 @@ features:
details: Lorem ipsum...
- icon:
src: /cool-feature-icon.svg
title: Otra caracteristica interesante
title: Otra característica interesante
details: Lorem ipsum...
- icon:
dark: /dark-feature-icon.svg
light: /light-feature-icon.svg
title: Otra caracteristica interesante
title: Otra característica interesante
details: Lorem ipsum...
---
```
@ -128,10 +128,10 @@ interface Feature {
// Muestra el icono en cada cuadro de función.
icon?: FeatureIcon
// Título de la caracteristica.
// Título de la característica.
title: string
// Detalles de la caracteristicas.
// Detalles de la características.
details: string
// Enlace al hacer clic en el componente de funcionalidad

@ -31,11 +31,11 @@ Tenga en cuenta que incluso en este mismo layout, la barra lateral seguirá apar
## Layout de Home {#home-layout}
La opción `home` gerará un modelo de _"Homepage"_. En este layout podrás definir opciones extras, como `hero` y `features`, para personalizar todavá más el contenido. Visite [Tema predeterminado: Página Inicial](./default-theme-home-page) para obter más detalles.
La opción `home` gerará un modelo de _"Homepage"_. En este layout podrás definir opciones extras, como `hero` y `features`, para personalizar todavá más el contenido. Visite [Tema predeterminado: Página Inicial](./default-theme-home-page) para obtener más detalles.
## Sin Layout {#no-layout}
Si no quieres ningún diseño, puedes pasar `layout: false` a través del frontmatter. Esta opción es útil si deseas una página de destino completamente personalizable (sin barra lateral, barra de navegacón o pie de página por defecto).
Si no quieres ningún diseño, puedes pasar `layout: false` a través del frontmatter. Esta opción es útil si deseas una página de destino completamente personalizable (sin barra lateral, barra de navegación o pie de página por defecto).
## Layout Personalizado {#custom-layout}

@ -45,7 +45,7 @@ Puedes configurar la opción `themeConfig.nav` para añadir enlaces a tu navegac
export default {
themeConfig: {
nav: [
{ text: 'Guia', link: '/guide' },
{ text: 'Guía', link: '/guide' },
{ text: 'Configuración', link: '/config' },
{ text: 'Registro de Cambios', link: 'https://github.com/...' }
]
@ -61,7 +61,7 @@ Links de navegación también pueden ser menus _dropdown_. Para hacer eso, estab
export default {
themeConfig: {
nav: [
{ text: 'Guia', link: '/guide' },
{ text: 'Guía', link: '/guide' },
{
text: 'Menú Dropdown',
items: [
@ -83,12 +83,12 @@ También puedes agregar "secciones" a los elementos del menú _dropdown_ pasando
export default {
themeConfig: {
nav: [
{ text: 'Guia', link: '/guia' },
{ text: 'Guía', link: '/guide' },
{
text: 'Menú Dropdown',
items: [
{
// Título da seção.
// Título para la Sección
text: 'Título de la sección A',
items: [
{ text: 'Item A de la sección A', link: '...' },
@ -103,8 +103,8 @@ export default {
{
// También puedes omitir el título
items: [
{ text: 'Item A da Seção A', link: '...' },
{ text: 'Item B da Seção B', link: '...' }
{ text: 'Item A de la sección A', link: '...' },
{ text: 'Item B de la sección B', link: '...' }
]
}
]
@ -125,7 +125,7 @@ export default {
// Este link esta en estado activo cuando
// el usuario esta en el camino `/config/`.
{
text: 'Guia',
text: 'Guía',
link: '/guide',
activeMatch: '/config/'
}
@ -157,6 +157,6 @@ export default {
}
```
## Links Scociales {#social-links}
## Links Sociales {#social-links}
Consulte [`socialLinks`](./default-theme-config#sociallinks).

@ -4,7 +4,7 @@ outline: deep
# Buscar {#search}
## Busqueda local {#local-search}
## Búsqueda local {#local-search}
VitePress admite la búsqueda de texto completo utilizando un índice en el navegador gracias a [minisearch](https://github.com/lucaong/minisearch/). Para habilitar esta función, simplemente configure la opción `themeConfig.search.provider` como `'local'` en el archivo `.vitepress/config.ts`:
@ -126,9 +126,9 @@ export default defineConfig({
Esta función se eliminará de los datos del sitio web en el lado del cliente, por lo que podrá utilizar las API de Node.js en ella.
#### Ejemplo: Excluir páginas de la busqueda {#example-excluding-pages-from-search}
#### Ejemplo: Excluir páginas de la búsqueda {#example-excluding-pages-from-search}
Puedes excluir páginas de la busqueda adicionando `search: false` al principio de la página. Alternativamente:
Puedes excluir páginas de la búsqueda adicionando `search: false` al principio de la página. Alternativamente:
```ts
import { defineConfig } from 'vitepress'
@ -141,7 +141,7 @@ export default defineConfig({
_render(src, env, md) {
const html = md.render(src, env)
if (env.frontmatter?.search === false) return ''
if (env.relativePath.startsWith('algum/caminho')) return ''
if (env.relativePath.startsWith('algun/directorio')) return ''
return html
}
}
@ -176,7 +176,7 @@ export default defineConfig({
})
```
## Busqueda de Algolia {#algolia-search}
## Búsqueda de Algolia {#algolia-search}
VitePress admite la búsqueda en su sitio de documentación utilizando [Algolia DocSearch](https://docsearch.algolia.com/docs/what-is-docsearch). Consulte su guía de introducción. en tu archivo `.vitepress/config.ts`, Deberá proporcionar al menos lo siguiente para que funcione:

@ -7,7 +7,7 @@ export default {
themeConfig: {
sidebar: [
{
text: 'Guia',
text: 'Guía',
items: [
{ text: 'Introducción', link: '/introduction' },
{ text: 'Iniciando', link: '/getting-started' },
@ -56,7 +56,7 @@ export default {
themeConfig: {
sidebar: [
{
text: 'Guia',
text: 'Guía',
items: [
// Esto muestra la página `/guide/index.md`.
{ text: 'Introducción', link: '/guide/' }
@ -122,11 +122,11 @@ export default {
// está en el directorio `guide`.
'/guide/': [
{
text: 'Guia',
text: 'Guía',
items: [
{ text: 'Índice', link: '/guide/' },
{ text: 'Um', link: '/guide/one' },
{ text: 'Dois', link: '/guide/two' }
{ text: 'Uno', link: '/guide/one' },
{ text: 'Dos', link: '/guide/two' }
]
}
],
@ -201,7 +201,7 @@ export interface DocSidebar {
}
```
**Exemplo:**
**Ejemplo:**
```vue
<script setup>

@ -5,7 +5,7 @@ const members = [
{
avatar: 'https://github.com/yyx990803.png',
name: 'Evan You',
title: 'Criador',
title: 'Creador',
links: [
{ icon: 'github', link: 'https://github.com/yyx990803' },
{ icon: 'twitter', link: 'https://twitter.com/youyuxi' }
@ -14,7 +14,7 @@ const members = [
{
avatar: 'https://github.com/kiaking.png',
name: 'Kia King Ishii',
title: 'Desenvolvedor',
title: 'Desarrollador',
links: [
{ icon: 'github', link: 'https://github.com/kiaking' },
{ icon: 'twitter', link: 'https://twitter.com/KiaKing85' }
@ -51,7 +51,7 @@ const members = [
# Nuestro equipo
Saluda a nuestro increible equipo.
Saluda a nuestro increíble equipo.
<VPTeamMembers size="small" :members="members" />
```
@ -60,7 +60,7 @@ El código anterior mostrará a un miembro del equipo en un elemento similar a u
<VPTeamMembers size="small" :members="members" />
El componente `<VPTeamMembers>` viene en dos tamaños diferentes, pequeño `small` y médio `medium`. Si bien es una cuestión de preferencia, generalmente el tamaño `small` debería encajar mejor cuando se use en la página del documento. Además, puede agregar más propiedades a cada miembro, como agregar el botón "descripción" o "patrocinador". Obtenga más información sobre en [`<VPTeamMembers>`](#vpteammembers).
El componente `<VPTeamMembers>` viene en dos tamaños diferentes, pequeño `small` y medio `medium`. Si bien es una cuestión de preferencia, generalmente el tamaño `small` debería encajar mejor cuando se use en la página del documento. Además, puede agregar más propiedades a cada miembro, como agregar el botón "descripción" o "patrocinador". Obtenga más información sobre en [`<VPTeamMembers>`](#vpteammembers).
Incrustar miembros del equipo en la página del documento es bueno para equipos pequeños donde tener una página de equipo dedicada completa puede ser demasiado, o introducir miembros parciales como referencia al contexto de la documentación.

@ -46,7 +46,7 @@ titleTemplate: Generador de sitios web estáticos con Vite & Vue
---
```
## descripción
## description
- Tipo: `string`
@ -94,7 +94,7 @@ Las siguientes opciones de frontmatter solo se aplican cuando se usa el tema pre
Determina el layout de la página.
- `doc` - Aplica estilos de documentación por defecto al contenido markdown.
- `home` - Layout especial para la "Página Inicial". Puedes agregar opciones extras como `hero` y `features` para crear rapidamente una hermosa página inicial.
- `home` - Layout especial para la "Página Inicial". Puedes agregar opciones extras como `hero` y `features` para crear rápidamente una hermosa página inicial.
- `page` - Se comporta de manera similar a `doc`, pero no aplica estilos al contenido. Útil cuando desea crear una página totalmente personalizada.
```yaml
@ -216,6 +216,6 @@ Luego puede personalizar los estilos para esta página específica en el archivo
```css
.custom-page-class {
/* estilos especificos de la página */
/* estilos específicos de la página */
}
```

@ -13,7 +13,7 @@ Retorna datos específicos de la página. El objeto devuelto tiene el siguiente
```ts
interface VitePressData<T = any> {
/**
* Metadátos a nivel del sitio
* Metadatos a nivel del sitio
*/
site: Ref<SiteData<T>>
/**
@ -21,7 +21,7 @@ interface VitePressData<T = any> {
*/
theme: Ref<T>
/**
* Metadátos a nível de la página
* Metadatos a nivel de la página
*/
page: Ref<PageData>
/**
@ -87,7 +87,7 @@ Devuelve la instancia del enrutador VitePress para que pueda navegar mediante pr
```ts
interface Router {
/**
* Ruta atual.
* Ruta actual.
*/
route: Route
/**

@ -2,7 +2,7 @@
outline: deep
---
# Configuración de site {#site-config}
# Configuración del sitio {#site-config}
La configuración del site es donde puede configurar los ajustes globales del site. Las opciones de configuración de la aplicación definen las configuraciones que se aplican a todos los sites de VitePress, independientemente del tema que estén utilizando. Por ejemplo, el directorio base o el título del site.
@ -10,7 +10,7 @@ La configuración del site es donde puede configurar los ajustes globales del si
### Resolución de configuración {#config-resolution}
El archivo de configuración siempre se resuelve desde `<root>/.vitepress/config.[ext]`, donde `<root>` es la [raiz del proyecto](../guide/routing#root-and-source-directory) VitePress y `[ext]` es una de las extensiones de archivo compatibles. TypeScript es compatible desde el primer momento. Las extensiones compatibles incluyen `.js`, `.ts`, `.mjs` y `.mts`.
El archivo de configuración siempre se resuelve desde `<root>/.vitepress/config.[ext]`, donde `<root>` es la [raíz del proyecto](../guide/routing#root-and-source-directory) VitePress y `[ext]` es una de las extensiones de archivo compatibles. TypeScript es compatible desde el primer momento. Las extensiones compatibles incluyen `.js`, `.ts`, `.mjs` y `.mts`.
Recuerde usar la sintaxis de módulos ES en los archivos de configuración. El archivo de configuración debe exportar por defecto un objeto:
@ -24,7 +24,7 @@ export default {
}
```
:::details Configuración dinámica (Assíncrona)
:::details Configuración dinámica (Asíncrona)
Si necesitas generar dinamicamente la configuración, también puedes exportar por defecto una función. Por ejemplo:
@ -92,7 +92,7 @@ export default defineConfig({
})
```
### Configuración de Tema Escrito {#typed-theme-config}
### Configuración del Tipado del Tema {#typed-theme-config}
Por defecto, el auxiliar `defineConfig` espera el tipo de configuración del tema por defecto:
@ -133,7 +133,7 @@ export default defineConfigWithTheme<ThemeConfig>({
Puede configurar la instancia subyacente de [Markdown-It](https://github.com/markdown-it/markdown-it) usando la opción [markdown](#markdown) en su configuración VitePress.
## Metadatos de Site {#site-metadata}
## Metadatos del Sitio {#site-metadata}
### title
@ -147,7 +147,7 @@ También se utilizará como sufijo predeterminado para todos los títulos de pá
```ts
export default {
title: 'Mi increible sitio web'
title: 'Mi increíble sitio web'
}
```
@ -155,7 +155,7 @@ export default {
# Hola
```
El título de la página será `Hola | Mi increible sitio web`.
El título de la página será `Hola | Mi increíble sitio web`.
### titleTemplate
@ -166,7 +166,7 @@ Le permite personalizar el sufijo del título de cada página o el título compl
```ts
export default {
title: 'Mi increible sitio web',
title: 'Mi increíble sitio web',
titleTemplate: 'Sufijo Personalizado'
}
```
@ -185,7 +185,7 @@ export default {
}
```
Aqui, `:title` será reemplazado por el texto que se deduce del primer título `<h1>` de la página. El título del ejemplo de la página anterior será `Hola - Sufijo Personalizado`.
Aquí, `:title` será reemplazado por el texto que se deduce del primer título `<h1>` de la página. El título del ejemplo de la página anterior será `Hola - Sufijo Personalizado`.
Una opción puede ser definida como `false` para desactivar sufijos del título.
@ -193,7 +193,7 @@ Una opción puede ser definida como `false` para desactivar sufijos del título.
- Tipo: `string`
- Predeterminado: `Um site VitePress`
- Puede ser sustituído por página a través de [frontmatter](./frontmatter-config#descrição)
- Puede ser sustituido por página a través de [frontmatter](./frontmatter-config#descripcion)
Descripción del sitio web. Esto se presentará como una etiqueta. `<meta>` en la página HTML.
@ -209,7 +209,7 @@ export default {
- Predeterminado: `[]`
- Se puede agregar por página a través de [frontmatter](./frontmatter-config#head)
Elementos adicionales para agregar a la etiqueta `<head>` de la página HTML. Las etiquetas agregadas por los usuarios son mostradas antes de la etiqueta `head` de cierre, despues de las etiquetas VitePress.
Elementos adicionales para agregar a la etiqueta `<head>` de la página HTML. Las etiquetas agregadas por los usuarios son mostradas antes de la etiqueta `head` de cierre, después de las etiquetas VitePress.
```ts
type HeadConfig =
@ -343,7 +343,7 @@ export default {
}
```
## Roteamento {#routing}
## Enrutamiento {#routing}
### cleanUrls
@ -377,7 +377,7 @@ export default {
- Tipo: `string`
- Predeterminado: `.`
El directorio donde se almacenan tus páginas de rebajas, en relación con la raíz del proyecto. vea también [Directorio Raiz y de origen](../guide/routing#root-and-source-directory).
El directorio donde se almacenan tus páginas de rebajas, en relación con la raíz del proyecto. vea también [Directorio Raíz y de origen](../guide/routing#root-and-source-directory).
```ts
export default {
@ -390,7 +390,7 @@ export default {
- Tipo: `string`
- Predeterminado: `undefined`
Un [patrón glob](https://github.com/mrmlnc/fast-glob#pattern-syntax) para hacer coincidir los archivos de rebajas que deben exluirse como contenido de origen.
Un [patrón glob](https://github.com/mrmlnc/fast-glob#pattern-syntax) para hacer coincidir los archivos de rebajas que deben excluirse como contenido de origen.
```ts
export default {
@ -403,7 +403,7 @@ export default {
- Tipo: `string`
- Predeterminado: `./.vitepress/dist`
La ubicación de la salida de compilación para el sitio, en relación con el [raiz del proyecto](../guide/routing#root-and-source-directory).
La ubicación de la salida de compilación para el sitio, en relación con el [raíz del proyecto](../guide/routing#root-and-source-directory).
```ts
export default {
@ -429,7 +429,7 @@ export default {
- Tipo: `string`
- Predeterminado: `./.vitepress/cache`
El directorio para los archivos de caché, en relación con el [raiz del proyecto](../guide/routing#root-and-source-directory). Vea también: [cacheDir](https://vitejs.dev/config/shared-options.html#cachedir).
El directorio para los archivos de caché, en relación con el [raíz del proyecto](../guide/routing#root-and-source-directory). Vea también: [cacheDir](https://vitejs.dev/config/shared-options.html#cachedir).
```ts
export default {
@ -478,7 +478,7 @@ export default {
Cuando se define como `true`, la aplicación de producción se compilará en [Modo MPA](../guide/mpa-mode). El modo MPA envía 0 kb de JavaScript de forma predeterminada, a expensas de deshabilitar la navegación del lado del cliente y requerir permiso explícito para la interactividad.
## Tematización {#theming}
## Estilizado {#theming}
### appearance
@ -553,7 +553,7 @@ export default {
Los enlaces de compilación VitePress permiten agregar nuevas funciones al su sitio web:
- Sitemap
- Indexación de busqueda
- Indexación de búsqueda
- PWA
- _Teleports_

Loading…
Cancel
Save