\n\n
\n\n\n\n

{$content.title}

\n\n

{@const Title = $content.title}</h1>\n<!-- Para renderizar el contenido como una cadena -->\n<div aria-label={$content.title.value}></div>\n<div aria-label={$content.title.toString()}></div>\n<div aria-label={String($content.title)}></div>\n```\n\n> Si su aplicación ya existe, puede utilizar el [Compilador Intlayer](/es/doc/compiler), así como el [comando de extracción](/es/doc/concept/cli/extract), para transformar miles de componentes en un segundo.\n\n</Step>\n\n<Step number={6} title=\"Cambiar el idioma de tu contenido\" isOptional={true}>\n\n```svelte fileName=\"src/App.svelte\"\n<script lang=\"ts\">\nimport { getLocaleName } from 'intlayer';\nimport { useLocale } from \"svelte-intlayer\";\n\n// Obtener información del locale y la función setLocale\nconst { locale, availableLocales, setLocale } = useLocale();\n\n// Manejar el cambio de locale\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n setLocale(newLocale);\n};\n</script>\n\n<div>\n <select value={$locale} on:change={changeLocale}>\n {#each availableLocales ?? [] as loc}\n <option value={loc}>\n {getLocaleName(loc)}\n </option>\n {/each}\n </select>\n</div>\n```\n\n</Step>\n\n<Step number={7} title=\"Renderizar Markdown\" isOptional={true}>\n\nIntlayer soporta renderizar contenido Markdown directamente en tu aplicación Svelte. Por defecto, Markdown se trata como texto plano. Para convertir Markdown en HTML enriquecido, puedes integrar `@humanspeak/svelte-markdown` u otro parser de markdown.\n\n> Para ver cómo declarar contenido markdown usando el paquete `intlayer`, consulta la [documentación de markdown](https://github.com/aymericzip/intlayer/tree/main/docs/docs/es/dictionary/markdown.md).\n\n```svelte fileName=\"src/App.svelte\"\n<script>\n import { setIntlayerMarkdown } from \"svelte-intlayer\";\n\n setIntlayerMarkdown((markdown) =>\n // renderizar el contenido markdown como una cadena\n return markdown;\n );\n</script>\n\n<h1>{$content.markdownContent}</h1>\n```\n\n> También puedes acceder a los datos del front-matter de tu markdown usando la propiedad `content.markdownContent.metadata.xxx`.\n\n</Step>\n\n<Step number={8} title=\"Configurar el editor / CMS de intlayer\" isOptional={true}>\n\nPara configurar el editor de intlayer, debes seguir la [documentación del editor de intlayer](/es/doc/concept/editor).\n\nPara configurar el CMS de intlayer, debes seguir la [documentación del CMS de intlayer](/es/doc/concept/cms).\n\n</Step>\n\n<Step number={7} title=\"Añadir enrutamiento por localeizado a tu aplicación\" isOptional={true}>\n\nPara manejar el enrutamiento por localeizado en tu aplicación Svelte, puedes usar `svelte-spa-router` junto con `localeFlatMap` de Intlayer para generar rutas para cada locale.\n\nPrimero, instala `svelte-spa-router`:\n\n```bash packageManager=\"npm\"\nnpm install svelte-spa-router\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add svelte-spa-router\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add svelte-spa-router\nyarn intlayer init\n```\n\n```bash packageManager=\"bun\"\nbun add svelte-spa-router\n```\n\nLuego, crea un archivo `Router.svelte` para definir tus rutas:\n\n```svelte fileName=\"src/Router.svelte\"\n<script lang=\"ts\">\nimport { localeFlatMap } from \"intlayer\";\nimport Router from \"svelte-spa-router\";\nimport { wrap } from \"svelte-spa-router/wrap\";\nimport App from \"./App.svelte\";\n\nconst routes = Object.fromEntries(\n localeFlatMap(({locale, urlPrefix}) => [\n [\n urlPrefix || '/',\n wrap({\n component: App as any,\n props: {\n locale,\n },\n }),\n ],\n ])\n);\n</script>\n\n<Router {routes} />\n```\n\nActualiza tu `main.ts` para montar el componente `Router` en lugar de `App`:\n\n```typescript fileName=\"src/main.ts\"\nimport { mount } from \"svelte\";\nimport Router from \"./Router.svelte\";\n\nconst app = mount(Router, {\n target: document.getElementById(\"app\")!,\n});\n\nexport default app;\n```\n\nFinalmente, actualiza tu `App.svelte` para recibir la propiedad `locale` y usarla con `useIntlayer`:\n\n```svelte fileName=\"src/App.svelte\"\n<script lang=\"ts\">\nimport type { Locale } from 'intlayer';\nimport { useIntlayer } from \"svelte-intlayer\";\nimport Counter from './lib/Counter.svelte';\nimport LocaleSwitcher from './lib/LocaleSwitcher.svelte';\n\nexport let locale: Locale;\n\n$: content = useIntlayer('app', locale);\n</script>\n\n<main>\n <div class=\"locale-switcher-container\">\n <LocaleSwitcher currentLocale={locale} />\n </div>\n\n <!-- ... resto de tu aplicación ... -->\n</main>\n```\n\n#### Configurar el enrutamiento del lado del servidor (Opcional)\n\nParalelamente, también puedes usar `intlayerProxy` para añadir enrutamiento del lado del servidor a tu aplicación. Este plugin detectará automáticamente la locale actual basada en la URL y establecerá la cookie de locale correspondiente. Si no se especifica ninguna locale, el plugin determinará la locale más adecuada según las preferencias de idioma del navegador del usuario. Si no se detecta ninguna locale, redirigirá a la locale por defecto.\n\n> Ten en cuenta que para usar `intlayerProxy` en producción, necesitas mover el paquete `vite-intlayer` de `devDependencies` a `dependencies`.\n\n```typescript {3,7} fileName=\"vite.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n```\n\n</Step>\n\n<Step number={8} title=\"Cambiar la URL cuando cambia la locale\" isOptional={true}>\n\nPara permitir que los usuarios cambien de idioma y actualicen la URL en consecuencia, puedes crear un componente `LocaleSwitcher`. Este componente usará `getLocalizedUrl` de `intlayer` y `push` de `svelte-spa-router`.\n\n```svelte fileName=\"src/lib/LocaleSwitcher.svelte\"\n<script lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Obtener información de la locale\nconst { locale, availableLocales } = useLocale();\n\n// Manejar el cambio de locale\nconst changeLocale = (event: Event) => {\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n```\n\n</Step>\n\n<Step number={8} title=\"Cambiar la URL cuando cambia la configuración regional\" isOptional={true}>\n\nPara permitir que los usuarios cambien de idioma y actualicen la URL en consecuencia, puedes crear un componente `LocaleSwitcher`. Este componente utilizará `getLocalizedUrl` de `intlayer` y `push` de `svelte-spa-router`.\n\n```svelte fileName=\"src/lib/LocaleSwitcher.svelte\"\n<script lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Obtener información de la configuración regional\nconst { locale, availableLocales } = useLocale();\n\n// Manejar el cambio de configuración regional\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n const currentUrl = window.location.pathname;\n const url = getLocalizedUrl( currentUrl, newLocale);\n push(url);\n};\n</script>\n\n<div class=\"locale-switcher\">\n <select value={currentLocale ?? $locale} onchange={changeLocale}>\n {#each availableLocales ?? [] as loc}\n <option value={loc}>\n {getLocaleName(loc)}\n </option>\n {/each}\n </select>\n</div>\n```\n\n</Step>\n\n<Step number={9} title=\"Extraer el contenido de tus componentes\" isOptional={true}>\n\nSi tienes una base de código existente, transformar miles de archivos puede llevar mucho tiempo.\n\nPara facilitar este proceso, Intlayer propone un [compilador](/es/doc/compiler) / [extractor](/es/doc/concept/cli/extract) para transformar tus componentes y extraer el contenido.\n\nPara configurarlo, puedes agregar una sección `compiler` en tu archivo `intlayer.config.ts` :\n\n```typescript fileName=\"intlayer.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Resto de tu configuración\n compiler: {\n /**\n * Indica si el compilador debe estar habilitado.\n */\n enabled: true,\n\n /**\n * Define la ruta de los archivos de salida\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Indica si los componentes deben guardarse después de ser transformados. De esa manera, el compilador se puede ejecutar solo una vez para transformar la aplicación y luego se puede eliminar.\n */\n saveComponents: false,\n\n /**\n * Prefijo de clave de diccionario\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n```\n\n<Tabs>\n <Tab value='Comando de extracción'>\n\nEjecuta el extractor para transformar tus componentes y extraer el contenido\n\n```bash packageManager=\"npm\"\nnpx intlayer extract\n```\n\n```bash packageManager=\"pnpm\"\npnpm intlayer extract\n```\n\n```bash packageManager=\"yarn\"\nyarn intlayer extract\n```\n\n```bash packageManager=\"bun\"\nbun x intlayer extract\n```\n\n </Tab>\n <Tab value='Compilador Babel'>\n\nActualiza tu archivo `vite.config.ts` para incluir el plugin `intlayerCompiler` :\n\n```ts fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Agrega el plugin del compilador\n ],\n});\n```\n\n```bash packageManager=\"npm\"\nnpm run build # O npm run dev\n```\n\n```bash packageManager=\"pnpm\"\npnpm run build # O pnpm run dev\n```\n\n```bash packageManager=\"yarn\"\nyarn build # O yarn dev\n```\n\n```bash packageManager=\"bun\"\nbun run build # Or bun run dev\n```\n\n </Tab>\n</Tabs>\n</Step>\n\n</Steps>\n\n### (Opcional) Sitemap y robots.txt (generación en el build)\n\nIntlayer ofrece utilidades - `generateSitemap` y `getMultilingualUrls` - para formatear un `sitemap.xml` multilingüe y un `robots.txt` listos para rastreadores y escribirlos automáticamente en `public/`. Lo habitual es ejecutar un script pequeño de Node **antes** de Vite (por ejemplo hooks npm `predev` / `prebuild`) para que esos archivos existan al compilar o al levantar el servidor de desarrollo.\n\n#### Sitemap\n\nEl generador de sitemaps de Intlayer respeta tu configuración de idiomas y añade los metadatos habituales.\n\n> El sitemap admite el espacio de nombres `xhtml:link` (hreflang). En lugar de listar solo URLs sueltas, Intlayer enlaza de forma bidireccional todas las versiones localizadas de cada página (p. ej. `/about`, `/fr/about` o `/about?lang=fr` según el modo de rutas).\n\n#### Robots.txt\n\nUsa `getMultilingualUrls` para que las reglas `Disallow` cubran todas las variantes localizadas de rutas sensibles.\n\n#### 1. Crear `generate-seo.mjs` en la raíz del proyecto\n\n```javascript fileName=\"generate-seo.mjs\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n```\n\nDebe estar instalado `intlayer` para poder importarlo. Define `SITE_URL` en el entorno en producción (por ejemplo en CI).\n\n> Prefiere `generate-seo.mjs` para ESM en Node. Si usas `generate-seo.js`, asegúrate de tener `\"type\": \"module\"` en `package.json` o ejecuta Node con ESM.\n\n#### 2. Ejecutar el script antes de Vite\n\n```json fileName=\"package.json\"\n{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n```\n\nAjusta los comandos si usas pnpm o yarn. También puedes llamar al script desde CI u otro paso del pipeline.\n\n### Configuración de Git\n\nSe recomienda ignorar los archivos generados por Intlayer. Esto te permite evitar comprometerlos en tu repositorio Git.\n\nPara hacerlo, puedes agregar las siguientes instrucciones a tu archivo `.gitignore`:\n\n```bash\n# Ignorar los archivos generados por Intlayer\n.intlayer\n```\n\n### Extensión para VS Code\n\nPara mejorar tu experiencia de desarrollo con Intlayer, puedes instalar la extensión oficial **Intlayer VS Code Extension**.\n\n[Instalar desde el VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nEsta extensión ofrece:\n\n- **Autocompletado** para las claves de traducción.\n- **Detección de errores en tiempo real** para traducciones faltantes.\n- **Vistas previas en línea** del contenido traducido.\n- **Acciones rápidas** para crear y actualizar traducciones fácilmente.\n\nPara más detalles sobre cómo usar la extensión, consulta la [documentación de la extensión Intlayer para VS Code](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### Ir Más Allá\n\nPara ir más allá, puedes implementar el [editor visual](/es/doc/concept/editor) o externalizar tu contenido usando el [CMS](/es/doc/concept/cms).\n","description":"Sin más i18next. La guía 2026 para crear una aplicación Vite + Svelte multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.","url":"https://intlayer.org/es/doc/environment/vite-and-svelte","datePublished":"2025-04-18","dateModified":"2026-05-31","version":"8.9.0","keywords":"Internacionalización, Documentación, Intlayer, Vite, Svelte, JavaScript","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"Desarrolladores, Gestores de Contenido"}}</script></head><body class="relative flex size-full min-h-screen flex-col overflow-auto overflow-x-clip scroll-smooth bg-background leading-8 transition md:flex"><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-100 flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-105"></ol></div><!--$--><script>((e, i, s, u, m, a, l, h) => { let d = document.documentElement, w = ["light", "dark"]; function p(n) { (Array.isArray(e) ? e : [e]).forEach((y) => { let k = y === "class", S = k && a ? m.map((f) => a[f] || f) : m; k ? (d.classList.remove(...S), d.classList.add(a && a[n] ? a[n] : n)) : d.setAttribute(y, n); }), R(n); } function R(n) { h && w.includes(n) && (d.style.colorScheme = n); } function c() { return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; } if (u) p(u); else try { let n = localStorage.getItem(i) || s; p(l && n === "system" ? c() : n); } catch (n) {} })("data-theme","theme","system",null,["light","dark"],null,true,true)</script><nav class="sticky top-0 z-50 flex w-full items-center bg-card/95 px-4 py-3 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur"><div class="group/dropdown relative flex items-center" aria-label="DropDown navbar-logo" id="dropdown-container-navbar-logo"><a aria-label="Logotipo de la empresa - Ir a la página de inicio" aria-current="page" id="dropdown-trigger-navbar-logo" aria-haspopup="true" aria-controls="dropdown-panel-navbar-logo" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral active" href="/es" target="_self" data-status="active"><svg width="2704" height="517" viewBox="0 0 2704 517" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" role="img" aria-label="Intlayer logo" class="max-h-6 w-auto flex-auto text-text"><path fill-rule="evenodd" clip-rule="evenodd" d="M5 46C5 21.1472 25.1472 1 50 1H295C319.853 1 340 21.1472 340 46C340 70.8528 319.853 91 295 91H50C25.1472 91 5 70.8528 5 46ZM50 176C25.1472 176 5 196.147 5 221C5 245.853 25.1472 266 50 266H430C454.853 266 475 245.853 475 221C475 196.147 454.853 176 430 176H50ZM50 349C25.1472 349 5 369.147 5 394C5 418.853 25.1472 439 50 439H230C254.853 439 275 418.853 275 394C275 369.147 254.853 349 230 349H50ZM841.5 38V403H914.5V38H841.5ZM991.215 143V403H1060.21V250C1060.21 239 1062.71 229.5 1067.71 221.5C1073.05 213.167 1080.38 206.667 1089.71 202C1099.05 197 1109.71 194.5 1121.71 194.5C1137.71 194.5 1149.38 199.5 1156.71 209.5C1164.05 219.167 1167.71 234.833 1167.71 256.5V403H1236.21V243C1236.21 206.667 1228.71 180.167 1213.71 163.5C1199.05 146.5 1176.05 138 1144.71 138C1126.05 138 1109.55 141 1095.21 147C1081.21 152.667 1068.88 161.5 1058.21 173.5H1057.21L1056.71 143H991.215ZM1341.52 389C1355.52 401.667 1378.19 408 1409.52 408C1420.52 408 1431.19 407.167 1441.52 405.5C1451.85 404.167 1462.69 401.833 1474.02 398.5L1468.52 344C1461.85 346.333 1454.52 348.167 1446.52 349.5C1438.85 350.833 1431.52 351.5 1424.52 351.5C1411.52 351.5 1402.52 348.5 1397.52 342.5C1392.52 336.167 1390.02 325.167 1390.02 309.5V196.5H1474.52V143H1390.02V58H1321.02V143H1264.52V196.5H1321.02V326.5C1321.02 355.5 1327.85 376.333 1341.52 389ZM1536.71 38V403H1606.71V38H1536.71ZM1681.19 386.5C1696.19 400.833 1716.52 408 1742.19 408C1759.19 408 1775.86 404.833 1792.19 398.5C1808.52 392.167 1821.36 383.667 1830.69 373H1831.19L1832.19 403H1897.69V239C1897.69 214 1894.19 194.167 1887.19 179.5C1880.19 164.5 1869.02 153.833 1853.69 147.5C1838.36 141.167 1817.36 138 1790.69 138C1769.69 138 1748.52 139.833 1727.19 143.5C1706.19 146.833 1687.02 151.667 1669.69 158L1678.19 211C1694.19 204.667 1711.19 199.833 1729.19 196.5C1747.19 192.833 1764.52 191 1781.19 191C1793.86 191 1803.52 192.333 1810.19 195C1817.19 197.333 1822.02 201.667 1824.69 208C1827.69 214.333 1829.19 223.333 1829.19 235H1794.69C1751.36 235 1717.86 243.167 1694.19 259.5C1670.86 275.833 1659.19 299 1659.19 329C1659.19 353 1666.52 372.167 1681.19 386.5ZM1798.69 350C1789.36 354 1778.86 356 1767.19 356C1753.52 356 1742.86 353 1735.19 347C1727.86 341 1724.19 332.667 1724.19 322C1724.19 307.667 1730.86 297.167 1744.19 290.5C1757.52 283.5 1777.69 280 1804.69 280H1829.19V309.5C1829.19 318.167 1826.36 326.167 1820.69 333.5C1815.36 340.5 1808.02 346 1798.69 350ZM2025.11 401.5L1982.11 508H2054.61L2197.61 143H2123.61L2060.11 335.5H2059.11L1996.11 143L1922.61 143.5L2025.11 401.5ZM2251.46 373C2276.79 396.333 2312.79 408 2359.46 408C2376.13 408 2392.63 406.5 2408.96 403.5C2425.63 400.833 2440.13 397 2452.46 392L2444.46 339.5C2432.13 344.167 2417.96 347.833 2401.96 350.5C2385.96 353.167 2370.79 354.5 2356.46 354.5C2331.13 354.5 2312.29 349 2299.96 338C2289.75 328.893 2283.77 315.56 2282.01 298H2464.46C2464.79 295 2464.96 290.5 2464.96 284.5C2465.29 278.5 2465.46 273.167 2465.46 268.5C2465.46 226.833 2454.79 194.667 2433.46 172C2412.46 149.333 2382.46 138 2343.46 138C2303.13 138 2271.46 150 2248.46 174C2225.46 198 2213.96 231 2213.96 273C2213.96 316.333 2226.46 349.667 2251.46 373ZM2282.19 250.5C2283.95 232.347 2288.87 218.18 2296.96 208C2307.29 194.667 2322.79 188 2343.46 188C2363.13 188 2377.63 194.333 2386.96 207C2394.74 217.188 2399.38 231.688 2400.91 250.5H2282.19ZM2583.09 143H2517.09V403H2586.59V283C2586.59 267 2591.59 252.5 2601.59 239.5C2611.59 226.167 2625.09 215.667 2642.09 208C2659.09 200.333 2677.93 196.5 2698.59 196.5V138C2683.59 138 2668.93 140.167 2654.59 144.5C2640.59 148.5 2627.59 154.5 2615.59 162.5C2603.93 170.167 2593.76 179.833 2585.09 191.5H2583.59L2583.09 143Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M5 46C5 21.1472 25.1472 1 50 1H295C319.853 1 340 21.1472 340 46C340 70.8528 319.853 91 295 91H50C25.1472 91 5 70.8528 5 46ZM50 176C25.1472 176 5 196.147 5 221C5 245.853 25.1472 266 50 266H430C454.853 266 475 245.853 475 221C475 196.147 454.853 176 430 176H50ZM50 349C25.1472 349 5 369.147 5 394C5 418.853 25.1472 439 50 439H230C254.853 439 275 418.853 275 394C275 369.147 254.853 349 230 349H50ZM841.5 38V403H914.5V38H841.5ZM991.215 143V403H1060.21V250C1060.21 239 1062.71 229.5 1067.71 221.5C1073.05 213.167 1080.38 206.667 1089.71 202C1099.05 197 1109.71 194.5 1121.71 194.5C1137.71 194.5 1149.38 199.5 1156.71 209.5C1164.05 219.167 1167.71 234.833 1167.71 256.5V403H1236.21V243C1236.21 206.667 1228.71 180.167 1213.71 163.5C1199.05 146.5 1176.05 138 1144.71 138C1126.05 138 1109.55 141 1095.21 147C1081.21 152.667 1068.88 161.5 1058.21 173.5H1057.21L1056.71 143H991.215ZM1341.52 389C1355.52 401.667 1378.19 408 1409.52 408C1420.52 408 1431.19 407.167 1441.52 405.5C1451.85 404.167 1462.69 401.833 1474.02 398.5L1468.52 344C1461.85 346.333 1454.52 348.167 1446.52 349.5C1438.85 350.833 1431.52 351.5 1424.52 351.5C1411.52 351.5 1402.52 348.5 1397.52 342.5C1392.52 336.167 1390.02 325.167 1390.02 309.5V196.5H1474.52V143H1390.02V58H1321.02V143H1264.52V196.5H1321.02V326.5C1321.02 355.5 1327.85 376.333 1341.52 389ZM1536.71 38V403H1606.71V38H1536.71ZM1681.19 386.5C1696.19 400.833 1716.52 408 1742.19 408C1759.19 408 1775.86 404.833 1792.19 398.5C1808.52 392.167 1821.36 383.667 1830.69 373H1831.19L1832.19 403H1897.69V239C1897.69 214 1894.19 194.167 1887.19 179.5C1880.19 164.5 1869.02 153.833 1853.69 147.5C1838.36 141.167 1817.36 138 1790.69 138C1769.69 138 1748.52 139.833 1727.19 143.5C1706.19 146.833 1687.02 151.667 1669.69 158L1678.19 211C1694.19 204.667 1711.19 199.833 1729.19 196.5C1747.19 192.833 1764.52 191 1781.19 191C1793.86 191 1803.52 192.333 1810.19 195C1817.19 197.333 1822.02 201.667 1824.69 208C1827.69 214.333 1829.19 223.333 1829.19 235H1794.69C1751.36 235 1717.86 243.167 1694.19 259.5C1670.86 275.833 1659.19 299 1659.19 329C1659.19 353 1666.52 372.167 1681.19 386.5ZM1798.69 350C1789.36 354 1778.86 356 1767.19 356C1753.52 356 1742.86 353 1735.19 347C1727.86 341 1724.19 332.667 1724.19 322C1724.19 307.667 1730.86 297.167 1744.19 290.5C1757.52 283.5 1777.69 280 1804.69 280H1829.19V309.5C1829.19 318.167 1826.36 326.167 1820.69 333.5C1815.36 340.5 1808.02 346 1798.69 350ZM2025.11 401.5L1982.11 508H2054.61L2197.61 143H2123.61L2060.11 335.5H2059.11L1996.11 143L1922.61 143.5L2025.11 401.5ZM2251.46 373C2276.79 396.333 2312.79 408 2359.46 408C2376.13 408 2392.63 406.5 2408.96 403.5C2425.63 400.833 2440.13 397 2452.46 392L2444.46 339.5C2432.13 344.167 2417.96 347.833 2401.96 350.5C2385.96 353.167 2370.79 354.5 2356.46 354.5C2331.13 354.5 2312.29 349 2299.96 338C2289.75 328.893 2283.77 315.56 2282.01 298H2464.46C2464.79 295 2464.96 290.5 2464.96 284.5C2465.29 278.5 2465.46 273.167 2465.46 268.5C2465.46 226.833 2454.79 194.667 2433.46 172C2412.46 149.333 2382.46 138 2343.46 138C2303.13 138 2271.46 150 2248.46 174C2225.46 198 2213.96 231 2213.96 273C2213.96 316.333 2226.46 349.667 2251.46 373ZM2282.19 250.5C2283.95 232.347 2288.87 218.18 2296.96 208C2307.29 194.667 2322.79 188 2343.46 188C2363.13 188 2377.63 194.333 2386.96 207C2394.74 217.188 2399.38 231.688 2400.91 250.5H2282.19ZM2583.09 143H2517.09V403H2586.59V283C2586.59 267 2591.59 252.5 2601.59 239.5C2611.59 226.167 2625.09 215.667 2642.09 208C2659.09 200.333 2677.93 196.5 2698.59 196.5V138C2683.59 138 2668.93 140.167 2654.59 144.5C2640.59 148.5 2627.59 154.5 2615.59 162.5C2603.93 170.167 2593.76 179.833 2585.09 191.5H2583.59L2583.09 143Z" fill="currentColor"></path><path d="M841.5 403H840.5V404H841.5V403ZM841.5 38V37H840.5V38H841.5ZM914.5 403V404H915.5V403H914.5ZM914.5 38H915.5V37H914.5V38ZM991.215 403H990.215V404H991.215V403ZM991.215 143V142H990.215V143H991.215ZM1060.21 403V404H1061.21V403H1060.21ZM1067.71 221.5L1066.87 220.961L1066.87 220.97L1067.71 221.5ZM1089.71 202L1090.16 202.894L1090.17 202.888L1090.19 202.881L1089.71 202ZM1156.71 209.5L1155.91 210.091L1155.91 210.098L1155.92 210.104L1156.71 209.5ZM1167.71 403H1166.71V404H1167.71V403ZM1236.21 403V404H1237.21V403H1236.21ZM1213.71 163.5L1212.96 164.153L1212.96 164.161L1212.97 164.169L1213.71 163.5ZM1095.21 147L1095.59 147.927L1095.6 147.922L1095.21 147ZM1058.21 173.5V174.5H1058.66L1058.96 174.164L1058.21 173.5ZM1057.21 173.5L1056.21 173.516L1056.23 174.5H1057.21V173.5ZM1056.71 143L1057.71 142.984L1057.7 142H1056.71V143ZM1341.52 389L1340.84 389.733L1340.85 389.742L1341.52 389ZM1441.52 405.5L1441.39 404.508L1441.38 404.51L1441.36 404.513L1441.52 405.5ZM1474.02 398.5L1474.3 399.459L1475.1 399.225L1475.01 398.4L1474.02 398.5ZM1468.52 344L1469.51 343.9L1469.39 342.637L1468.19 343.056L1468.52 344ZM1446.52 349.5L1446.36 348.514L1446.35 348.515L1446.52 349.5ZM1397.52 342.5L1396.73 343.12L1396.74 343.13L1396.75 343.14L1397.52 342.5ZM1390.02 196.5V195.5H1389.02V196.5H1390.02ZM1474.52 196.5V197.5H1475.52V196.5H1474.52ZM1474.52 143H1475.52V142H1474.52V143ZM1390.02 143H1389.02V144H1390.02V143ZM1390.02 58H1391.02V57H1390.02V58ZM1321.02 58V57H1320.02V58H1321.02ZM1321.02 143V144H1322.02V143H1321.02ZM1264.52 143V142H1263.52V143H1264.52ZM1264.52 196.5H1263.52V197.5H1264.52V196.5ZM1321.02 196.5H1322.02V195.5H1321.02V196.5ZM1536.71 403H1535.71V404H1536.71V403ZM1536.71 38V37H1535.71V38H1536.71ZM1606.71 403V404H1607.71V403H1606.71ZM1606.71 38H1607.71V37H1606.71V38ZM1681.19 386.5L1680.49 387.215L1680.5 387.223L1681.19 386.5ZM1830.69 373V372H1830.24L1829.94 372.341L1830.69 373ZM1831.19 373L1832.19 372.967L1832.16 372H1831.19V373ZM1832.19 403L1831.19 403.033L1831.22 404H1832.19V403ZM1897.69 403V404H1898.69V403H1897.69ZM1887.19 179.5L1886.29 179.923L1886.29 179.931L1887.19 179.5ZM1853.69 147.5L1854.07 146.576L1854.07 146.576L1853.69 147.5ZM1727.19 143.5L1727.35 144.488L1727.36 144.486L1727.19 143.5ZM1669.69 158L1669.35 157.061L1668.57 157.344L1668.7 158.158L1669.69 158ZM1678.19 211L1677.2 211.158L1677.4 212.388L1678.56 211.93L1678.19 211ZM1729.19 196.5L1729.37 197.483L1729.38 197.482L1729.39 197.48L1729.19 196.5ZM1810.19 195L1809.82 195.928L1809.85 195.939L1809.88 195.949L1810.19 195ZM1824.69 208L1823.77 208.388L1823.78 208.408L1823.79 208.428L1824.69 208ZM1829.19 235V236H1830.19V235H1829.19ZM1694.19 259.5L1693.62 258.677L1693.62 258.681L1694.19 259.5ZM1735.19 347L1734.56 347.774L1734.57 347.781L1734.58 347.788L1735.19 347ZM1744.19 290.5L1744.64 291.394L1744.65 291.39L1744.66 291.385L1744.19 290.5ZM1829.19 280H1830.19V279H1829.19V280ZM1820.69 333.5L1819.9 332.889L1819.9 332.894L1820.69 333.5ZM1982.11 508L1981.18 507.626L1980.62 509H1982.11V508ZM2025.11 401.5L2026.03 401.874L2026.18 401.503L2026.03 401.131L2025.11 401.5ZM2054.61 508V509H2055.29L2055.54 508.365L2054.61 508ZM2197.61 143L2198.54 143.365L2199.07 142H2197.61V143ZM2123.61 143V142H2122.88L2122.66 142.687L2123.61 143ZM2060.11 335.5V336.5H2060.83L2061.06 335.813L2060.11 335.5ZM2059.11 335.5L2058.16 335.811L2058.38 336.5H2059.11V335.5ZM1996.11 143L1997.06 142.689L1996.83 141.995L1996.1 142L1996.11 143ZM1922.61 143.5L1922.6 142.5L1921.14 142.51L1921.68 143.869L1922.61 143.5ZM2251.46 373L2250.78 373.731L2250.78 373.736L2251.46 373ZM2408.96 403.5L2408.8 402.513L2408.79 402.514L2408.78 402.516L2408.96 403.5ZM2452.46 392L2452.84 392.927L2453.57 392.63L2453.45 391.849L2452.46 392ZM2444.46 339.5L2445.45 339.349L2445.26 338.127L2444.11 338.565L2444.46 339.5ZM2299.96 338L2299.3 338.746L2299.3 338.746L2299.96 338ZM2282.01 298V297H2280.9L2281.01 298.1L2282.01 298ZM2464.46 298V299H2465.36L2465.45 298.11L2464.46 298ZM2464.96 284.5L2463.96 284.445L2463.96 284.472V284.5H2464.96ZM2433.46 172L2432.73 172.68L2432.73 172.685L2433.46 172ZM2296.96 208L2297.74 208.622L2297.75 208.613L2296.96 208ZM2282.19 250.5L2281.19 250.404L2281.09 251.5H2282.19V250.5ZM2386.96 207L2386.16 207.593L2386.16 207.6L2386.17 207.607L2386.96 207ZM2400.91 250.5V251.5H2401.99L2401.9 250.419L2400.91 250.5ZM2517.09 143V142H2516.09V143H2517.09ZM2583.09 143L2584.09 142.99L2584.08 142H2583.09V143ZM2517.09 403H2516.09V404H2517.09V403ZM2586.59 403V404H2587.59V403H2586.59ZM2601.59 239.5L2602.39 240.11L2602.39 240.1L2601.59 239.5ZM2642.09 208L2641.68 207.088L2641.68 207.088L2642.09 208ZM2698.59 196.5V197.5H2699.59V196.5H2698.59ZM2698.59 138H2699.59V137H2698.59V138ZM2654.59 144.5L2654.87 145.462L2654.88 145.459L2654.88 145.457L2654.59 144.5ZM2615.59 162.5L2616.14 163.336L2616.15 163.332L2615.59 162.5ZM2585.09 191.5V192.5H2585.6L2585.9 192.096L2585.09 191.5ZM2583.59 191.5L2582.59 191.51L2582.6 192.5H2583.59V191.5ZM50 0C24.5949 0 4 20.5949 4 46H6C6 21.6995 25.6995 2 50 2V0ZM295 0H50V2H295V0ZM341 46C341 20.5949 320.405 0 295 0V2C319.301 2 339 21.6995 339 46H341ZM295 92C320.405 92 341 71.4051 341 46H339C339 70.3005 319.301 90 295 90V92ZM50 92H295V90H50V92ZM4 46C4 71.4051 24.5949 92 50 92V90C25.6995 90 6 70.3005 6 46H4ZM6 221C6 196.699 25.6995 177 50 177V175C24.5949 175 4 195.595 4 221H6ZM50 265C25.6995 265 6 245.301 6 221H4C4 246.405 24.5949 267 50 267V265ZM430 265H50V267H430V265ZM474 221C474 245.301 454.301 265 430 265V267C455.405 267 476 246.405 476 221H474ZM430 177C454.301 177 474 196.699 474 221H476C476 195.595 455.405 175 430 175V177ZM50 177H430V175H50V177ZM6 394C6 369.699 25.6995 350 50 350V348C24.5949 348 4 368.595 4 394H6ZM50 438C25.6995 438 6 418.3 6 394H4C4 419.405 24.5949 440 50 440V438ZM230 438H50V440H230V438ZM274 394C274 418.3 254.301 438 230 438V440C255.405 440 276 419.405 276 394H274ZM230 350C254.301 350 274 369.699 274 394H276C276 368.595 255.405 348 230 348V350ZM50 350H230V348H50V350ZM842.5 403V38H840.5V403H842.5ZM914.5 402H841.5V404H914.5V402ZM913.5 38V403H915.5V38H913.5ZM841.5 39H914.5V37H841.5V39ZM992.215 403V143H990.215V403H992.215ZM1060.21 402H991.215V404H1060.21V402ZM1059.21 250V403H1061.21V250H1059.21ZM1066.87 220.97C1061.75 229.154 1059.21 238.844 1059.21 250H1061.21C1061.21 239.156 1063.68 229.846 1068.56 222.03L1066.87 220.97ZM1089.27 201.106C1079.78 205.848 1072.31 212.467 1066.87 220.961L1068.56 222.039C1073.79 213.866 1080.98 207.485 1090.16 202.894L1089.27 201.106ZM1121.71 193.5C1109.57 193.5 1098.74 196.031 1089.24 201.119L1090.19 202.881C1099.36 197.969 1109.86 195.5 1121.71 195.5V193.5ZM1157.52 208.909C1149.95 198.579 1137.93 193.5 1121.71 193.5V195.5C1137.5 195.5 1148.82 200.421 1155.91 210.091L1157.52 208.909ZM1168.71 256.5C1168.71 234.767 1165.05 218.827 1157.51 208.896L1155.92 210.104C1163.05 219.506 1166.71 234.9 1166.71 256.5H1168.71ZM1168.71 403V256.5H1166.71V403H1168.71ZM1236.21 402H1167.71V404H1236.21V402ZM1235.21 243V403H1237.21V243H1235.21ZM1212.97 164.169C1227.73 180.567 1235.21 206.769 1235.21 243H1237.21C1237.21 206.564 1229.7 179.766 1214.46 162.831L1212.97 164.169ZM1144.71 139C1175.88 139 1198.55 147.45 1212.96 164.153L1214.47 162.847C1199.55 145.55 1176.22 137 1144.71 137V139ZM1095.6 147.922C1109.79 141.983 1126.15 139 1144.71 139V137C1125.94 137 1109.31 140.017 1094.83 146.078L1095.6 147.922ZM1058.96 174.164C1069.53 162.272 1081.74 153.532 1095.59 147.927L1094.84 146.073C1080.69 151.801 1068.23 160.728 1057.47 172.836L1058.96 174.164ZM1057.21 174.5H1058.21V172.5H1057.21V174.5ZM1055.71 143.016L1056.21 173.516L1058.21 173.484L1057.71 142.984L1055.71 143.016ZM991.215 144H1056.71V142H991.215V144ZM1409.52 407C1378.28 407 1355.92 400.679 1342.19 388.258L1340.85 389.742C1355.12 402.654 1378.09 409 1409.52 409V407ZM1441.36 404.513C1431.08 406.171 1420.47 407 1409.52 407V409C1420.57 409 1431.29 408.163 1441.68 406.487L1441.36 404.513ZM1473.74 397.541C1462.45 400.861 1451.67 403.182 1441.39 404.508L1441.65 406.492C1452.04 405.151 1462.92 402.806 1474.3 399.459L1473.74 397.541ZM1467.52 344.1L1473.02 398.6L1475.01 398.4L1469.51 343.9L1467.52 344.1ZM1446.68 350.486C1454.73 349.145 1462.12 347.299 1468.85 344.944L1468.19 343.056C1461.58 345.368 1454.31 347.188 1446.36 348.514L1446.68 350.486ZM1424.52 352.5C1431.58 352.5 1438.97 351.827 1446.69 350.485L1446.35 348.515C1438.73 349.839 1431.46 350.5 1424.52 350.5V352.5ZM1396.75 343.14C1402.04 349.483 1411.41 352.5 1424.52 352.5V350.5C1411.62 350.5 1403 347.517 1398.29 341.86L1396.75 343.14ZM1389.02 309.5C1389.02 325.211 1391.51 336.507 1396.73 343.12L1398.3 341.88C1393.52 335.826 1391.02 325.123 1391.02 309.5H1389.02ZM1389.02 196.5V309.5H1391.02V196.5H1389.02ZM1474.52 195.5H1390.02V197.5H1474.52V195.5ZM1473.52 143V196.5H1475.52V143H1473.52ZM1390.02 144H1474.52V142H1390.02V144ZM1389.02 58V143H1391.02V58H1389.02ZM1321.02 59H1390.02V57H1321.02V59ZM1322.02 143V58H1320.02V143H1322.02ZM1264.52 144H1321.02V142H1264.52V144ZM1265.52 196.5V143H1263.52V196.5H1265.52ZM1321.02 195.5H1264.52V197.5H1321.02V195.5ZM1322.02 326.5V196.5H1320.02V326.5H1322.02ZM1342.2 388.267C1328.83 375.873 1322.02 355.374 1322.02 326.5H1320.02C1320.02 355.626 1326.88 376.794 1340.84 389.733L1342.2 388.267ZM1537.71 403V38H1535.71V403H1537.71ZM1606.71 402H1536.71V404H1606.71V402ZM1605.71 38V403H1607.71V38H1605.71ZM1536.71 39H1606.71V37H1536.71V39ZM1742.19 407C1716.72 407 1696.65 399.893 1681.88 385.777L1680.5 387.223C1695.73 401.774 1716.33 409 1742.19 409V407ZM1791.83 397.568C1775.61 403.858 1759.06 407 1742.19 407V409C1759.32 409 1776.11 405.809 1792.55 399.432L1791.83 397.568ZM1829.94 372.341C1820.73 382.861 1808.05 391.279 1791.83 397.568L1792.55 399.432C1809 393.054 1821.98 384.472 1831.44 373.659L1829.94 372.341ZM1831.19 372H1830.69V374H1831.19V372ZM1833.19 402.967L1832.19 372.967L1830.19 373.033L1831.19 403.033L1833.19 402.967ZM1897.69 402H1832.19V404H1897.69V402ZM1896.69 239V403H1898.69V239H1896.69ZM1886.29 179.931C1893.2 194.41 1896.69 214.077 1896.69 239H1898.69C1898.69 213.923 1895.18 193.923 1888.09 179.069L1886.29 179.931ZM1853.31 148.424C1868.41 154.662 1879.39 165.15 1886.29 179.923L1888.1 179.077C1880.99 163.85 1869.64 153.004 1854.07 146.576L1853.31 148.424ZM1790.69 139C1817.3 139 1838.15 142.162 1853.31 148.424L1854.07 146.576C1838.57 140.171 1817.42 137 1790.69 137V139ZM1727.36 144.486C1748.64 140.828 1769.75 139 1790.69 139V137C1769.63 137 1748.41 138.838 1727.02 142.514L1727.36 144.486ZM1670.03 158.939C1687.3 152.631 1706.4 147.812 1727.35 144.488L1727.03 142.512C1705.98 145.854 1686.75 150.702 1669.35 157.061L1670.03 158.939ZM1679.18 210.842L1670.68 157.842L1668.7 158.158L1677.2 211.158L1679.18 210.842ZM1729.01 195.517C1710.95 198.861 1693.89 203.712 1677.82 210.07L1678.56 211.93C1694.5 205.622 1711.43 200.806 1729.37 197.483L1729.01 195.517ZM1781.19 190C1764.45 190 1747.05 191.841 1728.99 195.52L1729.39 197.48C1747.33 193.825 1764.6 192 1781.19 192V190ZM1810.56 194.072C1803.72 191.334 1793.9 190 1781.19 190V192C1793.81 192 1803.33 193.332 1809.82 195.928L1810.56 194.072ZM1825.61 207.612C1822.83 200.992 1817.76 196.468 1810.51 194.051L1809.88 195.949C1816.62 198.199 1821.22 202.341 1823.77 208.388L1825.61 207.612ZM1830.19 235C1830.19 223.271 1828.69 214.1 1825.6 207.572L1823.79 208.428C1826.7 214.567 1828.19 223.395 1828.19 235H1830.19ZM1794.69 236H1829.19V234H1794.69V236ZM1694.76 260.323C1718.19 244.15 1751.46 236 1794.69 236V234C1751.25 234 1717.52 242.184 1693.62 258.677L1694.76 260.323ZM1660.19 329C1660.19 299.306 1671.72 276.454 1694.76 260.319L1693.62 258.681C1670 275.213 1658.19 298.694 1658.19 329H1660.19ZM1681.89 385.785C1667.45 371.672 1660.19 352.78 1660.19 329H1658.19C1658.19 353.22 1665.6 372.662 1680.49 387.215L1681.89 385.785ZM1767.19 357C1778.97 357 1789.61 354.98 1799.09 350.919L1798.3 349.081C1789.11 353.02 1778.74 355 1767.19 355V357ZM1734.58 347.788C1742.48 353.971 1753.39 357 1767.19 357V355C1753.66 355 1743.24 352.029 1735.81 346.212L1734.58 347.788ZM1723.19 322C1723.19 332.924 1726.96 341.559 1734.56 347.774L1735.82 346.226C1728.75 340.441 1725.19 332.409 1725.19 322H1723.19ZM1743.74 289.606C1736.95 293.004 1731.8 297.408 1728.35 302.839C1724.9 308.273 1723.19 314.673 1723.19 322H1725.19C1725.19 314.994 1726.82 308.977 1730.04 303.911C1733.25 298.842 1738.1 294.663 1744.64 291.394L1743.74 289.606ZM1804.69 279C1777.64 279 1757.28 282.501 1743.73 289.615L1744.66 291.385C1757.77 284.499 1777.74 281 1804.69 281V279ZM1829.19 279H1804.69V281H1829.19V279ZM1830.19 309.5V280H1828.19V309.5H1830.19ZM1821.48 334.111C1827.27 326.616 1830.19 318.404 1830.19 309.5H1828.19C1828.19 317.93 1825.44 325.717 1819.9 332.889L1821.48 334.111ZM1799.09 350.919C1808.55 346.862 1816.03 341.263 1821.49 334.106L1819.9 332.894C1814.68 339.737 1807.5 345.138 1798.3 349.081L1799.09 350.919ZM1983.03 508.374L2026.03 401.874L2024.18 401.126L1981.18 507.626L1983.03 508.374ZM2054.61 507H1982.11V509H2054.61V507ZM2196.67 142.635L2053.67 507.635L2055.54 508.365L2198.54 143.365L2196.67 142.635ZM2123.61 144H2197.61V142H2123.61V144ZM2061.06 335.813L2124.56 143.313L2122.66 142.687L2059.16 335.187L2061.06 335.813ZM2059.11 336.5H2060.11V334.5H2059.11V336.5ZM1995.16 143.311L2058.16 335.811L2060.06 335.189L1997.06 142.689L1995.16 143.311ZM1922.61 144.5L1996.11 144L1996.1 142L1922.6 142.5L1922.61 144.5ZM2026.03 401.131L1923.53 143.131L1921.68 143.869L2024.18 401.869L2026.03 401.131ZM2359.46 407C2312.95 407 2277.23 395.375 2252.14 372.264L2250.78 373.736C2276.36 397.292 2312.63 409 2359.46 409V407ZM2408.78 402.516C2392.51 405.505 2376.07 407 2359.46 407V409C2376.19 409 2392.75 407.495 2409.14 404.484L2408.78 402.516ZM2452.09 391.073C2439.84 396.038 2425.41 399.855 2408.8 402.513L2409.12 404.487C2425.84 401.812 2440.42 397.962 2452.84 392.927L2452.09 391.073ZM2443.47 339.651L2451.47 392.151L2453.45 391.849L2445.45 339.349L2443.47 339.651ZM2402.13 351.486C2418.18 348.811 2432.41 345.13 2444.81 340.435L2444.11 338.565C2431.85 343.204 2417.75 346.855 2401.8 349.514L2402.13 351.486ZM2356.46 355.5C2370.86 355.5 2386.08 354.161 2402.13 351.486L2401.8 349.514C2385.84 352.172 2370.73 353.5 2356.46 353.5V355.5ZM2299.3 338.746C2311.89 349.978 2331.01 355.5 2356.46 355.5V353.5C2331.25 353.5 2312.7 348.022 2300.63 337.254L2299.3 338.746ZM2281.01 298.1C2282.79 315.834 2288.85 329.429 2299.3 338.746L2300.63 337.254C2290.65 328.358 2284.74 315.286 2283 297.9L2281.01 298.1ZM2464.46 297H2282.01V299H2464.46V297ZM2463.96 284.5C2463.96 290.492 2463.79 294.947 2463.47 297.89L2465.45 298.11C2465.79 295.053 2465.96 290.508 2465.96 284.5H2463.96ZM2464.46 268.5C2464.46 273.144 2464.29 278.458 2463.96 284.445L2465.96 284.555C2466.29 278.542 2466.46 273.19 2466.46 268.5H2464.46ZM2432.73 172.685C2453.84 195.111 2464.46 227 2464.46 268.5H2466.46C2466.46 226.667 2455.75 194.222 2434.19 171.315L2432.73 172.685ZM2343.46 139C2382.26 139 2411.96 150.268 2432.73 172.68L2434.19 171.32C2412.96 148.399 2382.66 137 2343.46 137V139ZM2249.18 174.692C2271.96 150.93 2303.34 139 2343.46 139V137C2302.92 137 2270.97 149.07 2247.74 173.308L2249.18 174.692ZM2214.96 273C2214.96 231.187 2226.41 198.46 2249.18 174.692L2247.74 173.308C2224.52 197.54 2212.96 230.813 2212.96 273H2214.96ZM2252.14 372.269C2227.4 349.172 2214.96 316.135 2214.96 273H2212.96C2212.96 316.532 2225.52 350.161 2250.78 373.731L2252.14 372.269ZM2296.18 207.378C2287.93 217.759 2282.96 232.133 2281.19 250.404L2283.19 250.596C2284.93 232.561 2289.81 218.602 2297.74 208.622L2296.18 207.378ZM2343.46 187C2322.56 187 2306.74 193.754 2296.17 207.387L2297.75 208.613C2307.85 195.579 2323.03 189 2343.46 189V187ZM2387.77 206.407C2378.2 193.421 2363.36 187 2343.46 187V189C2362.9 189 2377.06 195.246 2386.16 207.593L2387.77 206.407ZM2401.9 250.419C2400.37 231.501 2395.69 216.789 2387.76 206.393L2386.17 207.607C2393.78 217.586 2398.4 231.874 2399.91 250.581L2401.9 250.419ZM2282.19 251.5H2400.91V249.5H2282.19V251.5ZM2517.09 144H2583.09V142H2517.09V144ZM2518.09 403V143H2516.09V403H2518.09ZM2586.59 402H2517.09V404H2586.59V402ZM2585.59 283V403H2587.59V283H2585.59ZM2600.8 238.89C2590.67 252.06 2585.59 266.774 2585.59 283H2587.59C2587.59 267.226 2592.52 252.94 2602.39 240.11L2600.8 238.89ZM2641.68 207.088C2624.55 214.816 2610.91 225.416 2600.79 238.9L2602.39 240.1C2612.28 226.917 2625.64 216.517 2642.5 208.912L2641.68 207.088ZM2698.59 195.5C2677.8 195.5 2658.83 199.357 2641.68 207.088L2642.5 208.912C2659.36 201.309 2678.05 197.5 2698.59 197.5V195.5ZM2697.59 138V196.5H2699.59V138H2697.59ZM2654.88 145.457C2669.12 141.152 2683.69 139 2698.59 139V137C2683.5 137 2668.73 139.181 2654.3 143.543L2654.88 145.457ZM2616.15 163.332C2628.06 155.39 2640.97 149.433 2654.87 145.462L2654.32 143.538C2640.22 147.567 2627.13 153.61 2615.04 161.668L2616.15 163.332ZM2585.9 192.096C2594.5 180.52 2604.58 170.935 2616.14 163.336L2615.04 161.664C2603.28 169.398 2593.02 179.147 2584.29 190.904L2585.9 192.096ZM2583.59 192.5H2585.09V190.5H2583.59V192.5ZM2582.09 143.01L2582.59 191.51L2584.59 191.49L2584.09 142.99L2582.09 143.01Z" fill="currentColor"></path></svg></a><div class="absolute z-100 min-w-full left-0 top-[calc(100%+0.5rem)]" role="region" aria-labelledby="dropdown-trigger-navbar-logo" id="dropdown-panel-navbar-logo"><div role="none" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] delay-0 group-hover/dropdown:delay-600"><div style="min-height:0px" class="overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] delay-0 group-hover/dropdown:delay-600"><div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 px-3 py-2 gap-3 border border-text/5"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-vector-square flex-none shrink-0 size-4 mr-3" aria-hidden="true"><path d="M19.5 7a24 24 0 0 1 0 10"></path><path d="M4.5 7a24 24 0 0 0 0 10"></path><path d="M7 19.5a24 24 0 0 0 10 0"></path><path d="M7 4.5a24 24 0 0 1 10 0"></path><rect x="17" y="17" width="5" height="5" rx="1"></rect><rect x="17" y="2" width="5" height="5" rx="1"></rect><rect x="2" y="17" width="5" height="5" rx="1"></rect><rect x="2" y="2" width="5" height="5" rx="1"></rect></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Descargar SVG</span></span></button><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-image flex-none shrink-0 size-4 mr-3" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Descargar PNG</span></span></button><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-vector-square flex-none shrink-0 size-4 mr-3" aria-hidden="true"><path d="M19.5 7a24 24 0 0 1 0 10"></path><path d="M4.5 7a24 24 0 0 0 0 10"></path><path d="M7 19.5a24 24 0 0 0 10 0"></path><path d="M7 4.5a24 24 0 0 1 10 0"></path><rect x="17" y="17" width="5" height="5" rx="1"></rect><rect x="17" y="2" width="5" height="5" rx="1"></rect><rect x="2" y="17" width="5" height="5" rx="1"></rect><rect x="2" y="2" width="5" height="5" rx="1"></rect></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Copiar como SVG</span></span></button><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-image flex-none shrink-0 size-4 mr-3" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Copiar como imagen</span></span></button></div></div></div></div></div><div class="relative z-0 flex size-full flex-row items-center border-text ml-[2vw] h-auto gap-3 overflow-x-auto text-neutral tracking-wide lg:ml-[5vw] lg:gap-3 xl:ml-[10vw] xl:gap-6" aria-orientation="horizontal" aria-multiselectable="false" role="tablist"><a aria-label="Ir a la página de inicio" aria-current="page" id="home" role="tab" aria-selected="false" data-active="false" tabindex="-1" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0 active" href="/es" target="_self" data-status="active">Inicio</a><a aria-label="Ir al Playground" id="playground" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="/es/playground" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Entorno de pruebas</a><a aria-label="Ver proyectos de Intlayer" id="showcase" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="https://showcase.intlayer.org/es" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Exhibición</a><a aria-label="Ir a la página de tablero" id="dashboard" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="https://app.intlayer.org/es" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">App</a><a aria-label="Ir a la página de documentation" aria-current="page" id="doc" role="tab" aria-selected="true" data-active="true" tabindex="0" href="/es/doc/get-started" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Doc</a><a aria-label="Ir al blog" id="blog" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="/es/blog" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Blog</a></div><div class="mr-4 flex items-center justify-end gap-2 md:gap-4"><div class="flex rounded-xl text-text transition-colors"><div class="group/dropdown relative flex" aria-label="DropDown locale-switcher" id="dropdown-container-locale-switcher"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-7 px-3 text-xs max-md:py-1 text-text ring-text/20 *:text-text-opposite rounded-[4rem] [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[5rem] rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current! hover:bg-current/20 focus-visible:bg-current/20 hover:ring-5 focus-visible:ring-5 aria-selected:ring-5 justify-center text-center w-full cursor-pointer group-focus-within/dropdown:bg-current/20 group-focus-within/dropdown:ring-4 p-0!" aria-label="Cambiar idioma" aria-haspopup="true" aria-busy="false" aria-disabled="false" aria-controls="dropdown-panel-locale-switcher" id="dropdown-trigger-locale-switcher"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><div class="flex w-full items-center justify-between"><div class="text-nowrap px-2 text-base">ES</div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-vertical w-5 self-center" aria-hidden="true"><path d="M12 2v20"></path><path d="m8 18 4 4 4-4"></path><path d="m8 6 4-4 4 4"></path></svg></div></span></button><div class="absolute z-100 min-w-full right-0 top-[calc(100%+0.5rem)]" role="region" aria-labelledby="dropdown-trigger-locale-switcher" id="dropdown-panel-locale-switcher"><div role="none" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] group-focus-within/dropdown:visible group-focus-within/dropdown:grid-rows-[1fr]"><div style="min-height:0px" class="overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] group-focus-within/dropdown:visible group-focus-within/dropdown:grid-rows-[1fr]"><div class="flex flex-col text-text backdrop-blur rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl bg-card/95 p-0 divide-y divide-dashed divide-text/20 gap-0 max-h-[80vh] min-w-28 border border-text/5"><div class="p-3"><input class="w-full select-text resize-none text-base shadow-none outline-none transition-all duration-300 md:text-sm ring-0 disabled:opacity-50 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text bg-neutral-50 dark:bg-neutral-950 ring-text/20 disabled:ring-0 hover:ring-3 focus-within:ring-4 focus-visible:outline-none focus-visible:ring-4 [box-shadow:none] focus:[box-shadow:none] aria-invalid:border-error px-2 py-3 md:py-2" type="search" aria-label="Búsqueda de idioma" placeholder="Buscar un idioma"/></div><ul class="divide-y divide-dashed divide-text/20 overflow-y-auto p-1" aria-label="Lista de idiomas"><li class="py-1 pr-3"><a aria-label="Cambiar a Inglés" href="/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="en">English</span><span class="text-neutral text-xs">Inglés</span></div><span class="text-nowrap text-neutral text-sm">EN</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Ruso" href="/ru/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="ru">Русский</span><span class="text-neutral text-xs">Ruso</span></div><span class="text-nowrap text-neutral text-sm">RU</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Japonés" href="/ja/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="ja">日本語</span><span class="text-neutral text-xs">Japonés</span></div><span class="text-nowrap text-neutral text-sm">JA</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Francés" href="/fr/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="fr">français</span><span class="text-neutral text-xs">Francés</span></div><span class="text-nowrap text-neutral text-sm">FR</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Coreano" href="/ko/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="ko">한국어</span><span class="text-neutral text-xs">Coreano</span></div><span class="text-nowrap text-neutral text-sm">KO</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Chino" href="/zh/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="zh">中文</span><span class="text-neutral text-xs">Chino</span></div><span class="text-nowrap text-neutral text-sm">ZH</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Español" aria-current="page" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text active" href="/es/doc/environment/vite-and-svelte" target="_self" data-status="active"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="es">Español</span><span class="text-neutral text-xs">Español</span></div><span class="text-nowrap text-neutral text-sm">ES</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Alemán" href="/de/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="de">Deutsch</span><span class="text-neutral text-xs">Alemán</span></div><span class="text-nowrap text-neutral text-sm">DE</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Árabe" href="/ar/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="rtl" lang="ar">العربية</span><span class="text-neutral text-xs">Árabe</span></div><span class="text-nowrap text-neutral text-sm">AR</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Italiano" href="/it/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="it">Italiano</span><span class="text-neutral text-xs">Italiano</span></div><span class="text-nowrap text-neutral text-sm">IT</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Inglés británico" href="/en-GB/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="en-GB">British English</span><span class="text-neutral text-xs">Inglés británico</span></div><span class="text-nowrap text-neutral text-sm">EN-GB</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Portugués" href="/pt/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="pt">Português</span><span class="text-neutral text-xs">Portugués</span></div><span class="text-nowrap text-neutral text-sm">PT</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Hindi" href="/hi/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="hi">हिन्दी</span><span class="text-neutral text-xs">Hindi</span></div><span class="text-nowrap text-neutral text-sm">HI</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Turco" href="/tr/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="tr">Türkçe</span><span class="text-neutral text-xs">Turco</span></div><span class="text-nowrap text-neutral text-sm">TR</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Polaco" href="/pl/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="pl">polski</span><span class="text-neutral text-xs">Polaco</span></div><span class="text-nowrap text-neutral text-sm">PL</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Indonesio" href="/id/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="id">Indonesia</span><span class="text-neutral text-xs">Indonesio</span></div><span class="text-nowrap text-neutral text-sm">ID</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Vietnamita" href="/vi/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="vi">Tiếng Việt</span><span class="text-neutral text-xs">Vietnamita</span></div><span class="text-nowrap text-neutral text-sm">VI</span></div></a></li><li class="py-1 pr-3"><a aria-label="Cambiar a Ucraniano" href="/uk/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="uk">Українська</span><span class="text-neutral text-xs">Ucraniano</span></div><span class="text-nowrap text-neutral text-sm">UK</span></div></a></li></ul></div></div></div></div></div></div><!--$--><!--/$--><a aria-label="Ir al servidor de discord" rel="noopener noreferrer nofollow" href="https://discord.gg/7uxamYVeCk" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative min-h-8 flex-row justify-center border-current text-center font-medium text-sm ring-0 *:text-text hover:bg-current/20 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 max-md:py-2 text-text ring-text/20 flex cursor-pointer items-center gap-2 rounded-full border-[1.3px] p-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="800px" viewBox="0 0 71 80" fill="none" role="img" aria-label="Discord logo" class="aspect-square h-auto"><path d="M60.1045 13.8978C55.5792 11.8214 50.7265 10.2916 45.6527 9.41542C45.5603 9.39851 45.468 9.44077 45.4204 9.52529C44.7963 10.6353 44.105 12.0834 43.6209 13.2216C38.1637 12.4046 32.7345 12.4046 27.3892 13.2216C26.905 12.0581 26.1886 10.6353 25.5617 9.52529C25.5141 9.44359 25.4218 9.40133 25.3294 9.41542C20.2584 10.2888 15.4057 11.8186 10.8776 13.8978C10.8384 13.9147 10.8048 13.9429 10.7825 13.9795C1.57795 27.7309 -0.943561 41.1443 0.293408 54.3914C0.299005 54.4562 0.335386 54.5182 0.385761 54.5576C6.45866 59.0174 12.3413 61.7249 18.1147 63.5195C18.2071 63.5477 18.305 63.5139 18.3638 63.4378C19.7295 61.5728 20.9469 59.6063 21.9907 57.5383C22.0523 57.4172 21.9935 57.2735 21.8676 57.2256C19.9366 56.4931 18.0979 55.6 16.3292 54.5858C16.1893 54.5041 16.1781 54.304 16.3068 54.2082C16.679 53.9293 17.0513 53.6391 17.4067 53.3461C17.471 53.2926 17.5606 53.2813 17.6362 53.3151C29.2558 58.6202 41.8354 58.6202 53.3179 53.3151C53.3935 53.2785 53.4831 53.2898 53.5502 53.3433C53.9057 53.6363 54.2779 53.9293 54.6529 54.2082C54.7816 54.304 54.7732 54.5041 54.6333 54.5858C52.8646 55.6197 51.0259 56.4931 49.0921 57.2228C48.9662 57.2707 48.9102 57.4172 48.9718 57.5383C50.038 59.6034 51.2554 61.5699 52.5959 63.435C52.6519 63.5139 52.7526 63.5477 52.845 63.5195C58.6464 61.7249 64.529 59.0174 70.6019 54.5576C70.6551 54.5182 70.6887 54.459 70.6943 54.3942C72.1747 39.0791 68.2147 25.7757 60.1968 13.9823C60.1772 13.9429 60.1437 13.9147 60.1045 13.8978ZM23.7259 46.3253C20.2276 46.3253 17.3451 43.1136 17.3451 39.1693C17.3451 35.225 20.1717 32.0133 23.7259 32.0133C27.308 32.0133 30.1626 35.2532 30.1066 39.1693C30.1066 43.1136 27.28 46.3253 23.7259 46.3253ZM47.3178 46.3253C43.8196 46.3253 40.9371 43.1136 40.9371 39.1693C40.9371 35.225 43.7636 32.0133 47.3178 32.0133C50.9 32.0133 53.7545 35.2532 53.6986 39.1693C53.6986 43.1136 50.9 46.3253 47.3178 46.3253Z" fill="currentColor"></path></svg></a><a aria-label="Ir al repositorio de github" rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative min-h-8 flex-row justify-center bg-current text-center font-medium text-sm ring-0 *:text-text-opposite hover:bg-current/90 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 max-md:py-2 rounded-full text-text ring-text/20 group/github flex cursor-pointer items-center gap-1 p-0.5"><svg role="img" aria-label="GitHub logo" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="25"><path d="M127.975 10C61.1744 10 7 64.167 7 130.99C7 184.444 41.663 229.787 89.7396 245.786C95.7928 246.9 97.9987 243.164 97.9987 239.955C97.9987 237.088 97.8947 229.475 97.8353 219.382C64.1824 226.69 57.082 203.161 57.082 203.161C51.5784 189.182 43.6461 185.461 43.6461 185.461C32.6612 177.96 44.4779 178.108 44.4779 178.108C56.6215 178.963 63.0089 190.579 63.0089 190.579C73.8007 209.065 91.329 203.725 98.2215 200.628C99.3208 192.814 102.448 187.482 105.901 184.459C79.0369 181.406 50.7911 171.023 50.7911 124.662C50.7911 111.456 55.5074 100.65 63.2466 92.1974C61.9988 89.1374 57.847 76.8304 64.435 60.1785C64.435 60.1785 74.588 56.9254 97.7016 72.582C107.35 69.8934 117.703 68.5565 127.99 68.5045C138.269 68.5565 148.615 69.8934 158.278 72.582C181.377 56.9254 191.515 60.1785 191.515 60.1785C198.118 76.8304 193.966 89.1374 192.726 92.1974C200.48 100.65 205.159 111.456 205.159 124.662C205.159 171.142 176.869 181.369 149.923 184.362C154.26 188.098 158.13 195.481 158.13 206.77C158.13 222.939 157.981 235.989 157.981 239.955C157.981 243.193 160.165 246.959 166.3 245.778C214.339 229.743 248.973 184.429 248.973 130.99C248.973 64.167 194.798 10 127.975 10Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="18" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star mr-1 group-hover/github:fill-text-opposite" aria-hidden="true"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"></path></svg></a></div></nav><main class="relative flex w-full flex-1 flex-col"><div class="flex w-full bg-card max-md:flex-col md:h-[calc(100dvh-3.5rem)]"><aside aria-label="Navegación de la documentación" class="z-40 flex-none"><div class="fixed top-18 left-2 z-50 flex-col gap-1 md:hidden hidden"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-search-trigger" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Haga clic para buscar" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search flex-none shrink-0 size-4" aria-hidden="true"><path d="m21 21-4.34-4.34"></path><circle cx="11" cy="11" r="8"></circle></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Haga clic para buscar</span></button><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 border-text gap-0 absolute z-60 min-w-full rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800" role="group" aria-labelledby="unrollable-panel-button-search-trigger" id="unrollable-panel-search-trigger"><kbd class="inline-flex items-center justify-center gap-0.5 p-0.5 rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl font-medium font-sans border-1 border-neutral/20 text-neutral text-xs"><span class="inline-flex items-center"><span class="min-w-4 px-0.5 text-center">/</span></span></kbd></div></div><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center rotate-180" aria-label="Colapsar" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="doc-nav-content"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left-to-line flex-none shrink-0 size-4" aria-hidden="true"><path d="M3 19V5"></path><path d="m13 6-6 6 6 6"></path><path d="M7 12h14"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Colapsar</span></button></div><div class="top-0 left-0 z-40 flex h-full justify-end max-md:fixed max-md:transition-transform max-md:duration-300 max-md:ease-in-out max-md:translate-x-0" role="region"><div class="flex flex-col text-text backdrop-blur rounded-none bg-card/95 p-0 border-text gap-0 h-full sticky top-15 rounded-br-2xl"><div class="relative h-full max-w-80"><div class="flex flex-col text-text backdrop-blur rounded-none bg-card/95 p-0 border-text gap-0 sticky top-[3.6rem] z-10 m-auto pt-4"><div class="relative m-auto flex w-full flex-row items-center justify-center gap-2 px-2"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-doc-nav-framework-filter" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Filtrar por framework" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-funnel flex-none shrink-0 size-4" aria-hidden="true"><path d="M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Filtrar por framework</span></button><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text gap-0 absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 min-w-50 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-doc-nav-framework-filter" id="unrollable-panel-doc-nav-framework-filter">Filtrar documentación por framework</div></div><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text w-full select-text resize-none rounded-2xl text-base shadow-none outline-none supports-[corner-shape:squircle]:rounded-4xl transition-shadow duration-100 md:text-sm ring-0 disabled:opacity-50 text-text bg-neutral-50 dark:bg-neutral-950 ring-neutral-100 dark:ring-neutral-700 hover:ring-3 aria-selected:ring-4 focus-visible:ring-3 disabled:ring-0 focus-visible:outline-none [box-shadow:none] focus:[box-shadow:none] aria-invalid:border-error justify-center text-center mb-1 pr-1.5" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search flex-none shrink-0 size-4 mr-3" aria-hidden="true"><path d="m21 21-4.34-4.34"></path><circle cx="11" cy="11" r="8"></circle></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="flex w-full items-center gap-2">Buscar<kbd class="inline-flex items-center justify-center gap-0.5 p-0.5 rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl font-medium font-sans border-1 border-neutral/20 text-neutral text-xs ml-auto"><span class="inline-flex items-center"><span class="min-w-4 px-0.5 text-center">/</span></span></kbd></span></span></button><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-doc-nav-collapse" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center transition-transform" aria-label="Colapsar" aria-expanded="true" aria-busy="false" aria-disabled="false" aria-controls="doc-nav-content"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left-to-line flex-none shrink-0 size-4" aria-hidden="true"><path d="M3 19V5"></path><path d="m13 6-6 6 6 6"></path><path d="M7 12h14"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Colapsar</span></button><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 border-text gap-0 absolute z-60 min-w-full rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800" role="group" aria-labelledby="unrollable-panel-button-doc-nav-collapse" id="unrollable-panel-doc-nav-collapse"><kbd class="inline-flex items-center justify-center gap-0.5 p-0.5 rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl font-medium font-sans border-1 border-neutral/20 text-neutral text-xs"><span class="inline-flex items-center"><span class="min-w-4 px-0.5 text-center">Alt</span></span><span class="inline-flex items-center"><span class="text-neutral/50">+</span><span class="min-w-4 px-0.5 text-center">←</span></span></kbd></div></div><div class="absolute bottom-0 left-0 h-8 w-full translate-y-full bg-linear-to-b from-card/90 backdrop-blur"></div></div></div><div id="doc-nav-content" class="sticky top-28 pt-0"><div class="relative grid h-full overflow-x-hidden overflow-y-hidden transition-all duration-500 ease-in-out grid-cols-[1fr]" aria-hidden="false"><div style="min-width:0px" class=""><div class="relative overflow-hidden"><nav aria-label="Secciones de documentación" class="m-auto flex max-h-[calc(100vh-8.2rem)] min-w-40 max-w-xl flex-col gap-5 overflow-auto px-3 pt-8 pb-20"><div><a aria-label="why" href="/es/doc/why" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">¿Por qué Intlayer?</span></a></div><div><a aria-label="get-started" href="/es/doc/get-started" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Empezar</span></a></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="concept"><span class="flex items-center gap-1.5 opacity-60">Concepto</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="how-works-intlayer" href="/es/doc/concept/how-works-intlayer" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Cómo funciona Intlayer</span></a></li><li><a aria-label="configuration" href="/es/doc/concept/configuration" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Configuración</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_e6qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="cli" href="/es/doc/concept/cli" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">CLI</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_e6qb9bcq_-accordion-content" aria-labelledby="_R_e6qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="test" href="/es/doc/concept/cli/test" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Test</span></a><a aria-label="fill" href="/es/doc/concept/cli/fill" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Fill</span></a><a aria-label="build" href="/es/doc/concept/cli/build" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Build</span></a><a aria-label="watch" href="/es/doc/concept/cli/watch" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Watch</span></a><a aria-label="extract" href="/es/doc/concept/cli/extract" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Extract</span></a><a aria-label="login" href="/es/doc/concept/cli/login" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Login</span></a><a aria-label="push" href="/es/doc/concept/cli/push" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Push</span></a><a aria-label="pull" href="/es/doc/concept/cli/pull" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Pull</span></a><a aria-label="configuration" href="/es/doc/concept/cli/configuration" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Configuration</span></a><a aria-label="list" href="/es/doc/concept/cli/list" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">List</span></a><a aria-label="version" href="/es/doc/concept/cli/version" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Version</span></a><a aria-label="editor" href="/es/doc/concept/cli/editor" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Editor</span></a><a aria-label="live" href="/es/doc/concept/cli/live" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Live</span></a><a aria-label="debug" href="/es/doc/concept/cli/debug" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Debug</span></a><a aria-label="doc-review" href="/es/doc/concept/cli/doc-review" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Doc Review</span></a><a aria-label="doc-translate" href="/es/doc/concept/cli/doc-translate" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Doc Translate</span></a><a aria-label="sdk" href="/es/doc/concept/cli/sdk" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">SDK</span></a><a aria-label="scan" href="/es/doc/concept/cli/scan" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Scan</span></a></div></div></div></div></div></li><li><a aria-label="editor" href="/es/doc/concept/editor" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Editor visual</span></a></li><li><a aria-label="cms" href="/es/doc/concept/cms" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">CMS</span></a></li><li><a aria-label="ci-cd" href="/es/doc/concept/ci-cd" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Integración CI/CD</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_u6qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="content" href="/es/doc/concept/content" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Declaración de contenido</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_u6qb9bcq_-accordion-content" aria-labelledby="_R_u6qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="translation" href="/es/doc/concept/content/translation" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Traducción</span></a><a aria-label="plural" href="/es/doc/concept/content/plural" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Plural</span></a><a aria-label="enumeration" href="/es/doc/concept/content/enumeration" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Enumeración</span></a><a aria-label="condition" href="/es/doc/concept/content/condition" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Condición</span></a><a aria-label="gender" href="/es/doc/concept/content/gender" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Género</span></a><a aria-label="insertion" href="/es/doc/concept/content/insertion" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Inserción</span></a><a aria-label="file" href="/es/doc/concept/content/file" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Archivo</span></a><a aria-label="nesting" href="/es/doc/concept/content/nesting" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Anidación</span></a><a aria-label="markdown" href="/es/doc/concept/content/markdown" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Markdown</span></a><a aria-label="html" href="/es/doc/concept/content/html" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">HTML</span></a><a aria-label="function-fetching" href="/es/doc/concept/content/function-fetching" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Obtención de función</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_126qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="dynamic-dyctionary" href="/es/doc/concept/dynamic-dictionaries" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Archivo por locale</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_126qb9bcq_-accordion-content" aria-labelledby="_R_126qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="collections" href="/es/doc/concept/collections" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Colecciones</span></a><a aria-label="variants" href="/es/doc/concept/variants" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Variantes</span></a><a aria-label="dynamic-content" href="/es/doc/concept/dynamic-records" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Registros dinámicos</span></a></div></div></div></div></div></li><li><a aria-label="per-locale-file" href="/es/doc/concept/per-locale-file" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Archivo por locale</span></a></li><li><a aria-label="compiler" href="/es/doc/compiler" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Compilador</span></a></li><li><a aria-label="auto-fill" href="/es/doc/concept/auto-fill" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Autocompletado</span></a></li><li><a aria-label="testing" href="/es/doc/testing" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Pruebas</span></a></li><li><a aria-label="bundle_optimization" href="/es/doc/concept/bundle-optimization" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Optimización de bundle</span></a></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="environment"><span class="flex items-center gap-1.5 opacity-60">Entornos</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_68qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="nextjs" href="/es/doc/environment/nextjs" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_68qb9bcq_-accordion-content" aria-labelledby="_R_68qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="14" href="/es/doc/environment/nextjs/14" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js 14 y App Router</span></a><a aria-label="15" href="/es/doc/environment/nextjs/15" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js 15</span></a><a aria-label="no-locale-path" href="/es/doc/environment/nextjs/no-locale-path" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js sin locale URL</span></a><a aria-label="next-with-Page-Router" href="/es/doc/environment/nextjs/next-with-page-router" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js y Page Router</span></a><a aria-label="next-with-compiler" href="/es/doc/environment/nextjs/compiler" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Compiler</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_a8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="tanstack-start" href="/es/doc/environment/tanstack-start" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg height="660" viewBox="0 0 663 660" width="663" xmlns="http://www.w3.org/2000/svg" fill="currentColor" role="img" aria-label="Tanstack logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m305.114318.62443771c8.717817-1.14462121 17.926803-.36545135 26.712694-.36545135 32.548987 0 64.505987 5.05339923 95.64868 14.63098274 39.74418 12.2236582 76.762804 31.7666864 109.435876 57.477568 40.046637 31.5132839 73.228974 72.8472109 94.520714 119.2362609 39.836383 86.790386 39.544267 191.973146-1.268422 278.398081-26.388695 55.880442-68.724007 102.650458-119.964986 136.75724-41.808813 27.828603-90.706831 44.862601-140.45707 50.89341-63.325458 7.677926-131.784923-3.541603-188.712259-32.729444-106.868873-54.795293-179.52309291-165.076271-180.9604082-285.932068-.27660564-23.300971.08616998-46.74071 4.69884909-69.814998 7.51316071-37.57857 20.61272131-73.903917 40.28618971-106.877282 21.2814003-35.670293 48.7704861-67.1473767 81.6882804-92.5255597 38.602429-29.7610135 83.467691-51.1674988 130.978372-62.05777669 11.473831-2.62966514 22.9946-4.0869914 34.57273-5.4964306l3.658171-.44480576c3.050084-.37153079 6.104217-.74794222 9.162589-1.14972654zm-110.555861 549.44131429c-14.716752 1.577863-30.238964 4.25635-42.869928 12.522173 2.84343.683658 6.102369.004954 9.068638 0 7.124652-.011559 14.317732-.279903 21.434964.032202 17.817402.781913 36.381729 3.63214 53.58741 8.350042 22.029372 6.040631 41.432961 17.928687 62.656049 25.945156 22.389644 8.456554 44.67706 11.084675 68.427 11.084675 11.96813 0 23.845573-.035504 35.450133-3.302696-6.056202-3.225083-14.72582-2.619864-21.434964-3.963236-14.556814-2.915455-28.868774-6.474936-42.869928-11.470264-10.304996-3.676672-20.230803-8.214291-30.11097-12.848661l-6.348531-2.985046c-9.1705-4.309263-18.363277-8.560752-27.845391-12.142608-24.932161-9.418465-52.560181-14.071964-79.144482-11.221737zm22.259385-62.614168c-29.163917 0-58.660076 5.137344-84.915434 18.369597-6.361238 3.206092-12.407546 7.02566-18.137277 11.258891-1.746125 1.290529-4.841829 2.948483-5.487351 5.191839-.654591 2.275558 1.685942 4.182039 3.014086 5.637703 6.562396-3.497556 12.797498-7.199878 19.78612-9.855246 45.19892-17.169893 99.992458-13.570779 145.098218 2.172348 22.494346 7.851335 43.219483 19.592421 65.129314 28.800338 24.503461 10.297807 49.53043 16.975034 75.846795 20.399104 31.04195 4.037546 66.433549.7654 94.808495-13.242161 9.970556-4.921843 23.814245-12.422267 28.030337-23.320339-5.207047.454947-9.892236 2.685918-14.83959 4.224149-7.866632 2.445646-15.827248 4.51974-23.908229 6.138887-27.388113 5.486604-56.512458 6.619429-84.091013 1.639788-25.991939-4.693152-50.142596-14.119246-74.179513-24.03502l-3.068058-1.268177c-2.045137-.846788-4.089983-1.695816-6.135603-2.544467l-3.069142-1.272366c-12.279956-5.085721-24.606928-10.110797-37.210937-14.51024-24.485325-8.546552-50.726667-13.784628-76.671218-13.784628zm51.114145-447.9909432c-34.959602 7.7225298-66.276908 22.7605319-96.457338 41.7180089-17.521434 11.0054099-34.281927 22.2799893-49.465301 36.4444283-22.5792616 21.065423-39.8360564 46.668751-54.8866988 73.411509-15.507372 27.55357-25.4498976 59.665686-30.2554517 90.824149-4.7140432 30.568106-5.4906485 62.70747-.0906864 93.301172 6.7503648 38.248526 19.5989769 74.140579 39.8896436 107.337631 6.8187918-3.184625 11.659796-10.445603 17.3128555-15.336896 11.4149428-9.875888 23.3995608-19.029311 36.2745548-26.928535 4.765981-2.923712 9.662222-5.194315 14.83959-7.275014 1.953055-.785216 5.14604-1.502727 6.06527-3.647828 1.460876-3.406732-1.240754-9.335897-1.704904-12.865654-1.324845-10.095517-2.124534-20.362774-1.874735-30.549941.725492-29.668947 6.269727-59.751557 16.825623-87.521453 7.954845-20.924233 20.10682-39.922168 34.502872-56.971512 4.884699-5.785498 10.077731-11.170545 15.437296-16.512656 3.167428-3.157378 7.098271-5.858983 9.068639-9.908915-10.336599.006606-20.674847 2.987289-30.503603 6.013385-21.174447 6.519522-41.801477 16.19312-59.358362 29.841512-8.008432 6.226409-13.873368 14.387371-21.44733 20.939921-2.32322 2.010516-6.484901 4.704691-9.695199 3.187928-4.8500728-2.29042-4.1014979-11.835213-4.6571581-16.222019-2.1369011-16.873476 4.2548401-38.216325 12.3778671-52.843142 13.039878-23.479694 37.150915-43.528712 65.467327-42.82854 12.228647.302197 22.934587 4.551115 34.625711 7.324555-2.964621-4.211764-6.939158-7.28162-10.717482-10.733763-9.257431-8.459031-19.382979-16.184864-30.503603-22.028985-4.474136-2.350694-9.291232-3.77911-14.015169-5.506421-2.375159-.867783-5.36616-2.062533-6.259834-4.702213-1.654614-4.888817 7.148561-9.416813 10.381943-11.478522 12.499882-7.969406 27.826705-14.525258 42.869928-14.894334 23.509209-.577147 46.479246 12.467678 56.162903 34.665926 3.404469 7.803171 4.411273 16.054969 5.079109 24.382907l.121749 1.56229.174325 2.345587c.01913.260708.038244.521433.057403.782164l.11601 1.56437.120128 1.563971c7.38352-6.019164 12.576553-14.876995 19.78612-21.323859 16.861073-15.07846 39.936636-21.7722 61.831627-14.984333 19.786945 6.133107 36.984382 19.788105 47.105807 37.959541 2.648042 4.754231 10.035685 16.373942 4.698379 21.109183-4.177345 3.707277-9.475079.818243-13.880788-.719162-3.33605-1.16376-6.782939-1.90214-10.241828-2.585698l-1.887262-.369639c-.629089-.122886-1.257979-.246187-1.886079-.372129-11.980496-2.401886-25.91652-2.152533-37.923398-.041284-7.762754 1.364839-15.349083 4.127545-23.083807 5.271929v1.651348c21.149714.175043 41.608563 12.240618 52.043268 30.549941 4.323267 7.585468 6.482428 16.267431 8.138691 24.770223 2.047864 10.50918.608423 21.958802-2.263037 32.201289-.962925 3.433979-2.710699 9.255807-6.817143 10.046802-2.902789.558982-5.36781-2.330878-7.024898-4.279468-4.343878-5.10762-8.475879-9.96341-13.573278-14.374161-12.895604-11.157333-26.530715-21.449361-40.396663-31.373138-7.362086-5.269452-15.425755-12.12007-23.908229-15.340199 2.385052 5.745041 4.721463 11.086326 5.532694 17.339156 2.385876 18.392716-5.314223 35.704625-16.87179 49.540445-3.526876 4.222498-7.29943 8.475545-11.744712 11.755948-1.843407 1.360711-4.156734 3.137561-6.595373 2.752797-7.645687-1.207961-8.555849-12.73272-9.728176-18.637115-3.970415-19.998652-2.375984-39.861068 3.132802-59.448534-4.901187 2.485279-8.443727 7.923994-11.521293 12.385111-6.770975 9.816439-12.645804 20.199291-16.858599 31.375615-16.777806 44.519521-16.616219 96.664142 5.118834 139.523233 2.427098 4.786433 6.110614 4.144058 10.894733 4.144058.720854 0 1.44257-.004515 2.164851-.010924l2.168232-.022283c4.338648-.045438 8.686803-.064635 12.979772.508795 2.227588.297243 5.320818.032202 7.084256 1.673642 2.111344 1.966755.986008 5.338808.4996 7.758859-1.358647 6.765574-1.812904 12.914369-1.812904 19.816178 9.02412-1.398692 11.525415-15.866153 14.724172-23.118874 3.624982-8.216283 7.313444-16.440823 10.667192-24.770223 1.648843-4.093692 3.854171-8.671229 3.275427-13.210785-.649644-5.10184-4.335633-10.510831-6.904531-14.862134-4.86244-8.234447-10.389363-16.70834-13.969002-25.595896-2.861567-7.104926-.197036-15.983399 7.871579-18.521521 4.450228-1.400344 9.198073 1.345848 12.094266 4.562675 6.07269 6.74328 9.992815 16.777697 14.401823 24.692609l34.394873 61.925556c2.920926 5.243856 5.848447 10.481933 8.836976 15.687808 1.165732 2.031158 2.352075 5.167068 4.740424 6.0332 2.127008.77118 5.033095-.325315 7.148561-.748886 5.492297-1.099798 10.97635-2.287117 16.488434-3.28288 6.605266-1.193099 16.673928-.969342 21.434964-6.129805-6.963066-2.205375-15.011895-2.074919-22.259386-1.577863-4.352947.298894-9.178287 1.856116-13.178381-.686135-5.953149-3.783239-9.910373-12.522173-13.552668-18.377854-8.980425-14.439388-17.441465-29.095929-26.041008-43.760726l-1.376261-2.335014-2.765943-4.665258c-1.380597-2.334387-2.750786-4.67476-4.079753-7.036188-1.02723-1.826391-2.549937-4.233231-1.078344-6.24705 1.545791-2.114476 4.91472-2.239146 7.956473-2.243117l.603351.000261c1.195428.001526 2.315572.002427 3.222811-.11692 12.27399-1.615019 24.718635-2.952611 37.098976-2.952611-.963749-3.352237-3.719791-7.141255-2.838484-10.73046 1.972017-8.030506 13.526287-10.543033 18.899867-4.780653 3.60767 3.868283 5.704174 9.192229 8.051303 13.859765 3.097352 6.162006 6.624228 12.118418 9.940876 18.16483 5.805578 10.585967 12.146205 20.881297 18.116667 31.375615.49237.865561.999687 1.726685 1.512269 2.587098l.771613 1.290552c2.577138 4.303168 5.164895 8.635123 6.553094 13.461506-20.735854-.9487-36.30176-25.018751-45.343193-41.283704-.721369 2.604176.450959 4.928448 1.388326 7.431066 1.948109 5.197619 4.276275 10.147535 7.20627 14.862134 4.184765 6.732546 8.982075 13.665732 15.313633 18.553722 11.236043 8.673707 26.05255 8.721596 39.572241 7.794364 8.669619-.595311 19.50252-4.542034 28.030338-1.864372 8.513803 2.673532 11.940924 12.063098 6.884745 19.276187-3.787393 5.403211-8.842747 7.443452-15.128962 8.257566 4.445282 9.53571 10.268996 18.385285 14.490036 28.072919 1.758491 4.035895 3.59118 10.22102 7.8048 12.350433 2.805507 1.416857 6.824562.09743 9.85761.034678-3.043765-8.053625-8.742992-14.887729-11.541904-23.118874 8.533589.390544 16.786875 4.843404 24.732651 7.685374 15.630376 5.590144 31.063836 11.701854 46.475333 17.86913l7.112077 2.848685c6.338978 2.538947 12.71588 5.052299 18.961699 7.812528 2.285297 1.009799 5.449427 3.370401 7.975455 1.917215 2.061054-1.186494 3.394144-4.015253 4.665403-5.931643 3.55573-5.361927 6.775921-10.928622 9.965609-16.513481 12.774414-22.36586 22.143967-46.872692 28.402976-71.833646 20.645168-82.323009 2.934117-173.156241-46.677107-241.922507-19.061454-26.420745-43.033164-49.262193-69.46165-68.1783861-66.13923-47.336721-152.911262-66.294198-232.486917-48.7172481zm135.205158 410.5292842c-17.532977 4.570931-35.601827 8.714164-53.58741 11.040088 2.365265 8.052799 8.145286 15.885969 12.376218 23.118874 1.635653 2.796558 3.3859 6.541816 6.618457 7.755557 3.651364 1.370619 8.063669-.853747 11.508927-1.975838-1.595256-4.364513-4.279573-8.292245-6.476657-12.385112-.905215-1.687677-2.305907-3.685809-1.559805-5.68972 1.410585-3.786541 7.266452-3.563609 10.509727-4.221671 8.54678-1.733916 17.004522-3.898008 25.557073-5.611281 3.150939-.631641 7.538512-2.342438 10.705115-1.285575 2.371037.791232 3.800147 2.744743 5.152304 4.781948l.606196.918752c.80912 1.222827 1.637246 2.41754 2.671212 3.351165 3.457625 3.121874 8.628398 3.60159 13.017619 4.453686-2.678546-6.027421-7.130424-11.301001-9.984571-17.339156-1.659561-3.511592-3.023155-8.677834-6.656381-10.707341-5.005064-2.795733-15.341663 2.461334-20.458024 3.795624zm-110.472507-40.151706c-.825246 10.467897-4.036369 18.984725-9.068639 28.072919 5.76683.729896 11.649079.989984 17.312856 2.39363 4.244947 1.051908 8.156828 3.058296 12.366325 4.211763-2.250671-6.157877-6.426367-11.651913-9.661398-17.339156-3.266358-5.740912-6.189758-12.717032-10.949144-17.339156z" transform="translate(.9778)"></path></svg><!--/$--></span>Tanstack Start</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_a8qb9bcq_-accordion-content" aria-labelledby="_R_a8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="tanstack-start-solid" href="/es/doc/environment/tanstack-start/solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Tanstack Start Solid</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_e8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="astro" href="/es/doc/environment/astro" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg viewBox="0 0 85 107" role="img" aria-label="Astro logo" xmlns="http://www.w3.org/2000/svg" fill="currentColor" style="z-index:0" class="shrink-0 size-3.5"><path d="M27.5894 91.1365C22.7555 86.7178 21.3444 77.4335 23.3583 70.7072C26.8503 74.948 31.6888 76.2914 36.7005 77.0497C44.4375 78.2199 52.0359 77.7822 59.2232 74.2459C60.0454 73.841 60.8052 73.3027 61.7036 72.7574C62.378 74.714 62.5535 76.6892 62.318 78.6996C61.7452 83.5957 59.3086 87.3778 55.4332 90.2448C53.8835 91.3916 52.2437 92.4167 50.6432 93.4979C45.7262 96.8213 44.3959 100.718 46.2435 106.386C46.2874 106.525 46.3267 106.663 46.426 107C43.9155 105.876 42.0817 104.24 40.6845 102.089C39.2087 99.8193 38.5066 97.3081 38.4696 94.5909C38.4511 93.2686 38.4511 91.9345 38.2733 90.6309C37.8391 87.4527 36.3471 86.0297 33.5364 85.9478C30.6518 85.8636 28.37 87.6469 27.7649 90.4554C27.7187 90.6707 27.6517 90.8837 27.5847 91.1341L27.5894 91.1365Z" fill="currentColor"></path><path d="M27.5894 91.1365C22.7555 86.7178 21.3444 77.4335 23.3583 70.7072C26.8503 74.948 31.6888 76.2914 36.7005 77.0497C44.4375 78.2199 52.0359 77.7822 59.2232 74.2459C60.0454 73.841 60.8052 73.3027 61.7036 72.7574C62.378 74.714 62.5535 76.6892 62.318 78.6996C61.7452 83.5957 59.3086 87.3778 55.4332 90.2448C53.8835 91.3916 52.2437 92.4167 50.6432 93.4979C45.7262 96.8213 44.3959 100.718 46.2435 106.386C46.2874 106.525 46.3267 106.663 46.426 107C43.9155 105.876 42.0817 104.24 40.6845 102.089C39.2087 99.8193 38.5066 97.3081 38.4696 94.5909C38.4511 93.2686 38.4511 91.9345 38.2733 90.6309C37.8391 87.4527 36.3471 86.0297 33.5364 85.9478C30.6518 85.8636 28.37 87.6469 27.7649 90.4554C27.7187 90.6707 27.6517 90.8837 27.5847 91.1341L27.5894 91.1365Z" fill="url(#paint0_linear_1_59)"></path><path d="M0 69.5866C0 69.5866 14.3139 62.6137 28.6678 62.6137L39.4901 29.1204C39.8953 27.5007 41.0783 26.3999 42.4139 26.3999C43.7495 26.3999 44.9325 27.5007 45.3377 29.1204L56.1601 62.6137C73.1601 62.6137 84.8278 69.5866 84.8278 69.5866C84.8278 69.5866 60.5145 3.35233 60.467 3.21944C59.7692 1.2612 58.5911 0 57.0029 0H27.8274C26.2392 0 25.1087 1.2612 24.3634 3.21944C24.3108 3.34983 0 69.5866 0 69.5866Z" fill="currentColor"></path><defs><linearGradient id="paint0_linear_1_59" x1="22.4702" y1="107" x2="69.1451" y2="84.9468" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"></stop><stop offset="1" stop-color="#F041FF"></stop></linearGradient></defs></svg><!--/$--></span>Astro</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_e8qb9bcq_-accordion-content" aria-labelledby="_R_e8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="astro-and-react" href="/es/doc/environment/astro/react" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>Astro y React</span></a><a aria-label="astro-and-svelte" href="/es/doc/environment/astro/svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>Astro y Svelte</span></a><a aria-label="astro-and-vue" href="/es/doc/environment/astro/vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 261.76 226.69" role="img" aria-label="Vuejs logo" style="z-index:0" class="shrink-0 size-3.5"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"></path></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"></path></g></g></svg><!--/$--></span>Astro y Vue</span></a><a aria-label="astro-and-solid" href="/es/doc/environment/astro/solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Astro y Solid</span></a><a aria-label="astro-and-preact" href="/es/doc/environment/astro/preact" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" aria-label="Preact" role="img" viewBox="0 0 512 512" style="z-index:0" class="shrink-0 size-3.5"><g transform="translate(256,256)"><path d="M0,-256 222,-128 222,128 0,256 -222,128 -222,-128z" fill="#673ab8"></path><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(52.5)"></ellipse><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(-52.5)"></ellipse><circle cx="0" cy="0" r="34" fill="#ffffff"></circle></g></svg><!--/$--></span>Astro y Preact</span></a><a aria-label="astro-and-lit" href="/es/doc/environment/astro/lit" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 256 320" preserveAspectRatio="xMidYMid" role="img" aria-label="Lit"><path fill="#00E8FF" d="m64 192 25.926-44.727 38.233-19.114 63.974 63.974 10.833 61.754L192 320l-64-64-38.074-25.615z"></path><path d="M128 256V128l64-64v128l-64 64ZM0 256l64 64 9.202-60.602L64 192l-37.542 23.71L0 256Z" fill="#283198"></path><path d="M64 192V64l64-64v128l-64 64Zm128 128V192l64-64v128l-64 64ZM0 256V128l64 64-64 64Z" fill="#324FFF"></path><path fill="#0FF" d="M64 320V192l64 64z"></path></svg><!--/$--></span>Astro y Lit</span></a><a aria-label="astro-and-vanilla-js" href="/es/doc/environment/astro/vanilla" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 1052 1052" role="img" aria-label="Vanilla JavaScript logo"><path fill="#f0db4f" d="M0 0h1052v1052H0z"></path><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"></path></svg><!--/$--></span>Astro y Vanilla JS</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_i8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-react" href="/es/doc/environment/vite-and-react" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>Vite y React</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_i8qb9bcq_-accordion-content" aria-labelledby="_R_i8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="react-router-v7" href="/es/doc/environment/vite-and-react/react-router-v7" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React Router v7</span></a><a aria-label="react-router-v7-fs-routes" href="/es/doc/environment/vite-and-react/react-router-v7-fs-routes" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React Router v7 (fs-routes)</span></a><a aria-label="compiler" href="/es/doc/environment/vite-and-react/compiler" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>Compiler</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_m8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-vue" href="/es/doc/environment/vite-and-vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 261.76 226.69" role="img" aria-label="Vuejs logo" style="z-index:0" class="shrink-0 size-3.5"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"></path></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"></path></g></g></svg><!--/$--></span>Vite y Vue</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_m8qb9bcq_-accordion-content" aria-labelledby="_R_m8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="nuxt-and-vue" href="/es/doc/environment/nuxt-and-vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 298" preserveAspectRatio="xMidYMid" role="img" aria-label="Nuxt logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="none" fill-rule="nonzero"><path fill="#00C58E" d="M227.92099 82.07407l-13.6889 23.7037-46.8148-81.08641L23.7037 273.58025h97.3037c0 13.0912 10.61252 23.7037 23.70371 23.7037H23.70371c-8.46771 0-16.29145-4.52017-20.5246-11.85382-4.23315-7.33366-4.23272-16.36849.00114-23.70174L146.89383 12.83951c4.23415-7.33433 12.0596-11.85252 20.5284-11.85252 8.46878 0 16.29423 4.51819 20.52839 11.85252l39.97037 69.23456z"></path><path fill="#2F495E" d="M331.6642 261.7284l-90.05432-155.95062-13.6889-23.7037-13.68888 23.7037-90.04445 155.95061c-4.23385 7.33325-4.23428 16.36808-.00113 23.70174 4.23314 7.33365 12.05689 11.85382 20.5246 11.85382h166.4c8.46946 0 16.29644-4.51525 20.532-11.84955 4.23555-7.3343 4.23606-16.37123.00132-23.706h.01976zM144.7111 273.58024L227.921 129.48148l83.19012 144.09877h-166.4z"></path><path fill="#108775" d="M396.04938 285.4321c-4.23344 7.33254-12.05656 11.85185-20.52345 11.85185H311.1111c13.0912 0 23.7037-10.6125 23.7037-23.7037h40.66173L260.09877 73.74815l-18.4889 32.02963-13.68888-23.7037L239.5753 61.8963c4.23416-7.33433 12.0596-11.85252 20.5284-11.85252 8.46879 0 16.29423 4.51819 20.52839 11.85252l115.41728 199.8321c4.23426 7.33395 4.23426 16.36975 0 23.7037z"></path></g></svg><!--/$--></span>Nuxt y Vue</span></a></div></div></div></div></div></li><li><a aria-label="vite-and-solid" href="/es/doc/environment/vite-and-solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Vite y Solid</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="true" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_u8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-svelte" aria-current="page" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text active" href="/es/doc/environment/vite-and-svelte" target="_self" data-status="active"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>Vite y Svelte</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out rotate-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div role="region" class="group/height-smoother relative grid w-full overflow-hidden transition-all duration-700 ease-in-out grid-rows-[1fr] overflow-x-auto" id="_R_u8qb9bcq_-accordion-content" aria-labelledby="_R_u8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="vite-and-svelte-kit" href="/es/doc/environment/sveltekit" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>SvelteKit</span></a></div></div></div></div></div></li><li><a aria-label="vite-and-preact" href="/es/doc/environment/vite-and-preact" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" aria-label="Preact" role="img" viewBox="0 0 512 512" style="z-index:0" class="shrink-0 size-3.5"><g transform="translate(256,256)"><path d="M0,-256 222,-128 222,128 0,256 -222,128 -222,-128z" fill="#673ab8"></path><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(52.5)"></ellipse><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(-52.5)"></ellipse><circle cx="0" cy="0" r="34" fill="#ffffff"></circle></g></svg><!--/$--></span>Vite y Preact</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_168qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-vanilla-js" href="/es/doc/environment/vite-and-vanilla" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 1052 1052" role="img" aria-label="Vanilla JavaScript logo"><path fill="#f0db4f" d="M0 0h1052v1052H0z"></path><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"></path></svg><!--/$--></span>Vite y Vanilla JS</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_168qb9bcq_-accordion-content" aria-labelledby="_R_168qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="vanilla-js" href="/es/doc/environment/vanilla" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 1052 1052" role="img" aria-label="Vanilla JavaScript logo"><path fill="#f0db4f" d="M0 0h1052v1052H0z"></path><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"></path></svg><!--/$--></span>Vanilla JS (sin bundler)</span></a></div></div></div></div></div></li><li><a aria-label="vite-and-lit" href="/es/doc/environment/vite-and-lit" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 256 320" preserveAspectRatio="xMidYMid" role="img" aria-label="Lit"><path fill="#00E8FF" d="m64 192 25.926-44.727 38.233-19.114 63.974 63.974 10.833 61.754L192 320l-64-64-38.074-25.615z"></path><path d="M128 256V128l64-64v128l-64 64ZM0 256l64 64 9.202-60.602L64 192l-37.542 23.71L0 256Z" fill="#283198"></path><path d="M64 192V64l64-64v128l-64 64Zm128 128V192l64-64v128l-64 64ZM0 256V128l64 64-64 64Z" fill="#324FFF"></path><path fill="#0FF" d="M64 320V192l64 64z"></path></svg><!--/$--></span>Vite y Lit</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1e8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="angular" href="/es/doc/environment/angular" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Angular logo" version="1.1" preserveAspectRatio="xMidYMid" viewBox="20 20 210 210" style="z-index:0" class="shrink-0 size-3.5"><g><polygon style="fill:#DD0031" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "></polygon><polygon style="fill:#C3002F" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "></polygon><path style="fill:#FFFFFF" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1 L125,52.1z M142,135.4H108l17-40.9L142,135.4z"></path></g></svg><!--/$--></span>Angular 21</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_1e8qb9bcq_-accordion-content" aria-labelledby="_R_1e8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="19" href="/es/doc/environment/angular/19" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Angular logo" version="1.1" preserveAspectRatio="xMidYMid" viewBox="20 20 210 210" style="z-index:0" class="shrink-0 size-3.5"><g><polygon style="fill:#DD0031" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "></polygon><polygon style="fill:#C3002F" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "></polygon><path style="fill:#FFFFFF" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1 L125,52.1z M142,135.4H108l17-40.9L142,135.4z"></path></g></svg><!--/$--></span>Angular 19 (Webpack)</span></a><a aria-label="analog" href="/es/doc/environment/analog" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Angular logo" version="1.1" preserveAspectRatio="xMidYMid" viewBox="20 20 210 210" style="z-index:0" class="shrink-0 size-3.5"><g><polygon style="fill:#DD0031" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "></polygon><polygon style="fill:#C3002F" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "></polygon><path style="fill:#FFFFFF" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1 L125,52.1z M142,135.4H108l17-40.9L142,135.4z"></path></g></svg><!--/$--></span>Analog</span></a></div></div></div></div></div></li><li><a aria-label="create-react-app" href="/es/doc/environment/create-react-app" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React CRA</span></a></li><li><a aria-label="react-native-and-expo" href="/es/doc/environment/react-native-and-expo" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React Native y Expo</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1q8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="truncate font-semibold text-neutral transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text" label="node"><span class="flex items-center gap-1.5 opacity-60">Node & Backend</span></span></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_1q8qb9bcq_-accordion-content" aria-labelledby="_R_1q8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="express" href="/es/doc/environment/express" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1333.33 773.55" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" role="img" aria-label="Express logo" fill="currentColor" style="z-index:0" class="shrink-0 size-3.5"><path d="M1333.33 753.49c-48.5 12.33-78.5.54-105.41-39.87L1036.5 448.79l-27.67-36.67L785.29 714.5c-25.54 36.38-52.33 52.2-100 39.33l286.25-384.25-266.5-347.09c45.83-8.91 77.5-4.38 105.62 36.67l198.54 268.13 200-266.67c25.62-36.38 53.17-50.2 99.17-36.8l-103.33 137-140 182.29c-16.67 20.83-14.38 35.09.96 55.2l267.33 355.18zM.34 363.16l23.41-115.17c63.75-227.92 325-322.63 505.17-181.8 105.29 82.83 131.46 200 126.25 331.25H61.67C52.76 633.69 222.8 776.27 439.58 703.53c76.04-25.54 120.83-85.09 143.25-159.58 11.38-37.33 30.2-43.17 65.29-32.5-17.91 93.17-58.33 171-143.75 219.71-127.62 72.91-309.8 49.33-405.62-52C41.66 620.36 18.08 545.87 7.5 466.2c-1.67-13.17-5-25.71-7.5-38.33.22-21.56.34-43.11.34-64.67v-.04zm62.41-15.83h536.33c-3.5-170.83-109.87-292.17-255.25-293.2-159.58-1.25-274.17 117.2-281.09 293.2h.01z" fill-rule="nonzero"></path></svg><!--/$--></span>Express.js</span></a><a aria-label="nest" href="/es/doc/environment/nest" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" height="966" viewBox="0 0 264.58333 255.58751" width="1000" role="img" aria-label="NestJS logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m153.33845 45.652481c-1.80934 0-3.48944.387729-5.04032.904673 3.29558 2.19706 5.10493 5.104961 6.00963 8.400551.0648.45233.19386.775444.25856 1.227759.0648.387729.12916.775444.12916 1.163171.2586 5.686509-1.48628 6.397323-2.71403 9.757543-1.87398 4.329529-1.35704 8.982133.90466 12.730079.19387.452318.45234.969275.77546 1.421618-2.45558-16.348759 11.17919-18.804304 13.69932-23.90924.19386-4.458761-3.48944-7.431263-6.39731-9.499092-2.77864-1.680104-5.29884-2.197062-7.62513-2.197062zm20.54903 3.683318c-.25858 1.486247-.0647 1.09853-.12913 1.873973-.0647.516945-.0647 1.163157-.12914 1.680102-.12914.516959-.2586 1.033904-.45236 1.550886-.12913.516945-.32309 1.033903-.51694 1.550847-.2586.516983-.45234.969301-.71082 1.486258-.19385.258585-.32309.516945-.51695.775443-.12914.193857-.25858.387715-.38771.581572-.32309.452355-.64621.904673-.96929 1.292387-.38774.387729-.71083.840046-1.16319 1.163171v.0647c-.38771.3231-.77543.710815-1.22775 1.033903-1.35702 1.033902-2.90787 1.809344-4.32952 2.778644-.45231.323088-.90468.581587-1.29238.9693-.45233.323088-.84006.646176-1.22776 1.033903-.45236.387715-.77545.775442-1.16318 1.227784-.32309.387728-.7108.840048-.96927 1.292402-.32312.452317-.6462.904661-.9047 1.35699-.25857.516944-.45233.969299-.71081 1.486245-.19385.516944-.38773.969301-.51695 1.486244-.19386.581586-.3231 1.098544-.45234 1.615514-.0647.258583-.0647.58156-.12914.840045-.0648.258584-.0648.516945-.12913.775443 0 .516944-.0647 1.09853-.0647 1.615475 0 .387727 0 .775441.0647 1.163169 0 .516946.0647 1.033892.19385 1.615476.0647.516944.19384 1.033902.32312 1.550885.19386.516944.3231 1.033902.51694 1.550847.12916.323126.32309.646213.45236.904673l-14.86252-5.75114c-2.52018-.710815-4.9757-1.35699-7.49588-1.938576-1.357-.323087-2.714-.646198-4.07102-.969299-3.87719-.77543-7.81895-1.356991-11.76076-1.744705-.12913 0-.19385-.06471-.32309-.06471-3.8772-.387714-7.68973-.581572-11.5669-.581572-2.84328 0-5.68656.129131-8.465201.323088-3.941798.258584-7.883602.775442-11.825373 1.421617-.969302.129144-1.938602.323125-2.907905.516984-2.003199.387689-3.941771.840044-5.815742 1.292386-.9693.258584-1.938602.516958-2.907903.775419-.96927.387713-1.87394.84007-2.778642 1.227784-.710811.323088-1.421619.646187-2.132431.9693-.129139.06471-.25858.06471-.32309.129144-.64621.323087-1.22779.581547-1.809341.904671-.193861.06471-.323122.129132-.452351.193859-.71081.323089-1.421618.710803-2.003201 1.033902-.45235.193858-.90467.452343-1.292389.646213-.193862.129131-.452353.258572-.581582.323088-.581579.323088-1.16316.646174-1.680111.9693-.581581.323087-1.098532.646175-1.550882.969263-.452318.323125-.904667.581585-1.29239.904672-.06474.06471-.129139.06471-.193861.129145-.387719.258583-.840039.581571-1.227758.904696 0 0-.06473.0647-.12914.129142-.32309.258584-.646212.516947-.969301.775407-.129138.06471-.258581.193857-.38772.258583-.32309.258586-.64618.581586-.969271.84007-.06473.129143-.193859.193858-.258581.258585-.38772.387715-.775441.710802-1.163161 1.09853-.06473 0-.06473.06471-.129139.129131-.38772.3231-.775439.710816-1.163159 1.098543-.06473.06471-.06473.12913-.12914.12913-.32309.323089-.64618.646213-.969301 1.033902-.129137.129143-.32309.258586-.452319.387715-.32309.387728-.710811.775443-1.09853 1.163171-.06473.129132-.19386.193858-.258582.323087-.516952.516983-.969302 1.033928-1.486252 1.550885-.06473.06471-.129138.129128-.193859.193858-1.033931 1.098529-2.132463 2.197059-3.295594 3.166352-1.163159 1.0339-2.390922 2.0032-3.618711 2.84325-1.292392.9047-2.520152 1.68011-3.877173 2.45555-1.292392.71079-2.649412 1.35701-4.071032 1.9386-1.357022.58157-2.778641 1.09854-4.200264 1.55085-2.714041.58157-5.492684 1.68011-7.883605 1.87397-.51695 0-1.098531.12915-1.615482.19385-.581578.12914-1.098529.25859-1.615479.38774-.516951.19384-1.033931.38771-1.550883.58156-.516951.19386-1.033901.45235-1.550852.71083-.45235.32308-.969299.58157-1.421651.90466-.452322.32309-.904672.7108-1.292393 1.09853-.452319.32312-.904669.77545-1.29239 1.16315-.387721.45237-.77544.84008-1.0985304 1.29239-.3230901.51695-.7108108.96931-.9693016 1.48627-.32309.45235-.6461799.96929-.9046707 1.48622-.2585815.58161-.5169498 1.09855-.7108107 1.68014-.1938599.51695-.3877199 1.09852-.5815799 1.68011-.1291382.51694-.2585813 1.0339-.3230898 1.55083 0 .0648-.064719.12916-.064719.19387-.1291392.58161-.1291392 1.35706-.1938608 1.74479-.064719.45232-.1291373.84002-.1291373 1.29238 0 .25858 0 .58155.064719.84003.064719.45236.1291371.84007.2585814 1.22782.1291382.38766.2585815.77539.4523201 1.16312v.0647c.1938599.38775.4523506.77545.7108108 1.16317.2585814.38772.5169804.77544.8400704 1.16317.3230899.32309.7108109.71078 1.0985304 1.03389.3877209.38772.7754421.71081 1.2277611 1.0339 1.550881 1.35703 1.938601 1.80938 3.941806 2.84327.323087.19387.64621.32311 1.03393.51697.06473 0 .129139.0647.193859.0647 0 .12913 0 .19387.06473.32313.06472.51696.193859 1.03389.32309 1.55086.129138.58158.323121 1.09855.516981 1.55087.19386.38773.32309.77543.516951 1.16317.06472.12915.12914.25858.19386.32309.258581.51694.51695.96932.77541 1.42162.323121.45233.64621.90466.969299 1.35703.323092.3877.710813.84004 1.098532 1.22775.387721.38773.775442.71083 1.227793 1.09852 0 0 .06473.0648.129137.0648.387722.32312.77544.64622 1.163162.90466.45232.32311.90467.58157 1.421619.84007.452351.25858.969302.51695 1.486252.71082.387721.19386.84004.32311 1.292392.45234.06473.0648.129138.0648.258582.12916.258581.0648.581548.12912.840039.19384-.193859 3.48945-.258582 6.78504.258583 7.94822.58155 1.29238 3.424821-2.64941 6.268094-7.17277-.387719 4.45875-.646211 9.6929 0 11.24381.710809 1.61545 4.587982-3.42487 7.948203-8.98215 45.815262-10.59757 87.62418 21.066 92.01829 65.78273-.84006-6.97892-9.43446-10.85608-13.37623-9.88677-1.93861 4.78183-5.2342 10.92068-10.53299 14.73324.45233-4.2649.25856-8.65901-.64619-12.92392-1.42165 5.94501-4.2003 11.50232-8.01287 16.28415-6.138857.45232-12.277729-2.52019-15.50872-6.97891-.258582-.19388-.323091-.58159-.516951-.84006-.193862-.45238-.387719-.90467-.516951-1.35703-.193859-.45232-.323089-.90467-.387719-1.35699-.06473-.45236-.06473-.90469-.06473-1.42163 0-.32312 0-.6462 0-.96928.06473-.45238.19386-.90471.323091-1.35705.129138-.45232.25858-.90467.45235-1.35701.258582-.45231.45232-.90466.775441-1.35698 1.09853-3.10178 1.09853-5.62192-.90467-7.10816-.387721-.25858-.775441-.45236-1.227791-.64622-.258584-.0647-.581582-.19386-.84004-.25857-.193861-.0647-.32309-.12916-.516951-.19387-.452351-.12914-.904702-.25859-1.357022-.32309-.45235-.12913-.90467-.19386-1.35702-.19386-.452321-.0648-.969303-.12914-1.421622-.12914-.323089 0-.64621.0647-.969301.0647-.516949 0-.969299.0648-1.421621.19386-.45235.0648-.904669.12913-1.357019.25856-.452322.12915-.904673.25859-1.357023.45238-.452319.19385-.840041.38771-1.292389.58157-.38769.19387-.775412.45232-1.227761.64618-15.056371 9.82217-6.074235 32.82674 4.200264 39.48256-3.877175.71081-7.818947 1.5509-8.917479 2.39092-.06473.0647-.129138.12915-.129138.12915 2.778642 1.68009 5.686516 3.10173 8.723616 4.32949 4.135665 1.35702 8.529786 2.58479 10.468387 3.10176v.0647c5.363424 1.09854 10.79148 1.48626 16.284139 1.16317 28.62649-2.00321 52.0834-23.78003 56.3483-52.47111.12914.58159.25858 1.09852.38772 1.68012.19387 1.16312.45232 2.3909.58155 3.61867v.0648c.12914.58158.19386 1.16315.25858 1.6801v.25859c.0648.58157.12915 1.16316.12915 1.6801.0647.71082.12914 1.42162.12914 2.13247v1.0339c0 .32312.0647.7108.0647 1.03392 0 .38773-.0647.77542-.0647 1.16314v.90467c0 .45236-.0648.84006-.0648 1.2924 0 .25856 0 .51696-.0647.84006 0 .45236-.0647.90466-.0647 1.42162-.0648.19386-.0648.38772-.0648.58159-.0647.51696-.12914.9693-.19387 1.48626 0 .19387 0 .38771-.0647.58159-.0648.64617-.19385 1.22777-.25855 1.87394v.0648.0647c-.12914.58157-.2586 1.22776-.38775 1.80933v.19387c-.12912.58156-.25858 1.16316-.3877 1.74471 0 .0648-.0647.19387-.0647.25856-.12916.5816-.2586 1.16317-.45232 1.74478v.19384c-.19386.64617-.38773 1.22776-.51698 1.80934-.0647.0647-.0647.12914-.0647.12914-.19387.64621-.38771 1.29239-.58155 1.93858-.25858.64621-.45234 1.22778-.71081 1.87398-.25857.6462-.45236 1.2924-.71083 1.87396-.25859.64622-.51697 1.2278-.77543 1.87397h-.0648c-.2586.58157-.51699 1.22779-.8401 1.80938-.0647.19383-.12912.32309-.19384.4523-.0647.0648-.0647.12914-.12914.19388-4.20026 8.46514-10.40377 15.89639-18.15809 21.71217-.51695.32309-1.03392.71082-1.55086 1.09852-.12915.12915-.32312.19388-.45235.32309-.45235.3231-.90468.64618-1.42161.96931l.19385.38772h.0647c.90466-.12913 1.80934-.25858 2.71402-.38772h.0647c1.68012-.25858 3.36023-.58158 5.04035-.90467.45231-.0648.9693-.19385 1.42161-.32312.32309-.0648.58158-.12913.90467-.19386.45235-.0648.90468-.19386 1.35704-.25857.3877-.12914.77543-.19388 1.16314-.3231 6.46195-1.55089 12.73007-3.68335 18.73965-6.20349-10.27448 14.02243-24.03847 25.33087-40.12874 32.76212 7.43127-.51696 14.86251-1.74472 22.03528-3.81254 26.0417-7.68977 47.94772-25.20165 61.06549-48.7878-2.6494 14.92714-8.5944 29.14344-17.38265 41.55041 6.26809-4.13569 12.01923-8.91753 17.25342-14.34557 14.47478-15.12097 23.97388-34.31296 27.20483-54.92665 2.19708 10.2099 2.84328 20.74293 1.87398 31.14666 46.65534-65.07192 3.87717-132.53476-14.02244-150.305141-.0648-.129133-.12914-.193858-.12914-.323089-.0648.0647-.0648.0647-.0648.129144 0-.06471 0-.06471-.0647-.129144 0 .775442-.0647 1.550848-.12914 2.326291-.19387 1.48625-.38771 2.907879-.64621 4.329529-.32308 1.42162-.71081 2.84322-1.09854 4.26488-.45232 1.35699-.96925 2.77862-1.55085 4.13565-.58158 1.29237-1.22778 2.64939-1.93859 3.9418-.71082 1.22778-1.48625 2.52016-2.32629 3.6833-.84006 1.2278-1.74474 2.39093-2.64943 3.48944-.96931 1.16318-2.00319 2.1971-3.03712 3.23101-.64618.58158-1.22775 1.09853-1.87398 1.61546-.51694.45236-.96927.84009-1.48625 1.29239-1.16314.90468-2.32629 1.74474-3.61867 2.52019-1.22778.77542-2.52014 1.55086-3.81254 2.19707-1.35702.64619-2.71404 1.22776-4.07104 1.80935-1.35702.51693-2.77864.96928-4.20031 1.35701-1.42161.3877-2.90785.71081-4.32949.96928-1.48623.25858-2.97249.38771-4.39412.51697-1.03392.0647-2.06782.12915-3.10175.12915-1.48626 0-2.97248-.12915-4.39412-.25858-1.48624-.12914-2.97251-.32314-4.39413-.64623-1.48625-.25858-2.9079-.64621-4.32953-1.09851h-.0647c1.42163-.12914 2.84327-.2586 4.26492-.51697 1.48622-.25858 2.90785-.58156 4.3295-.96931 1.42162-.38771 2.84325-.84006 4.20026-1.357 1.42162-.51696 2.77865-1.16313 4.07105-1.80936 1.357-.64621 2.58478-1.357 3.87716-2.13244 1.22776-.84005 2.45554-1.68009 3.61869-2.58479 1.16316-.90466 2.26167-1.87394 3.29562-2.90786 1.09853-.96932 2.06781-2.06784 3.03711-3.16638.96927-1.16312 1.87396-2.32628 2.71402-3.48944.12915-.19387.25859-.45232.38774-.64619.64617-1.03392 1.29235-2.06783 1.87392-3.10176.71083-1.29239 1.35704-2.58479 1.9386-3.94177.58159-1.35702 1.09855-2.71405 1.55089-4.13566.45232-1.35703.77542-2.77864 1.09853-4.200258.25859-1.486258.51694-2.90791.64619-4.329528.12914-1.486244.25857-2.972503.25857-4.394119 0-1.033928-.0648-2.06783-.12912-3.101733-.12915-1.486246-.32311-2.9079-.51696-4.329519-.25859-1.486257-.58157-2.907873-.96931-4.329529-.45231-1.356991-.90467-2.778634-1.42161-4.135623-.51699-1.357028-1.16315-2.714042-1.80938-4.006443-.71081-1.292388-1.42161-2.584776-2.19704-3.812536-.84005-1.22776-1.68013-2.390917-2.5848-3.554087-.96927-1.098531-1.93857-2.19706-2.97251-3.29559-.51694-.516947-1.09853-1.098532-1.6801-1.615476-2.90787-2.2617-5.945-4.394159-8.9821-6.332732-.45233-.258574-.84005-.452342-1.2924-.646212-2.13246-1.356992-4.13566-2.067831-6.13885-2.714007z" fill="#e0234e" fill-rule="evenodd" transform="translate(0 -41.412487)"></path></svg><!--/$--></span>NestJS</span></a><a aria-label="fastify" href="/es/doc/environment/fastify" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" preserveAspectRatio="xMidYMid" viewBox="0 0 256 167.509" role="img" aria-label="Fastify logo"><path fill="currentColor" d="M247.942 23.314 256 2.444l-.35-1.293-79.717 21.003C184.433 9.86 181.513 0 181.513 0s-25.457 16.257-44.709 15.832c-19.251-.426-25.457-5.564-54.977 3.853-29.52 9.41-37.86 38.295-46.419 44.5S0 90.603 0 90.603l.058.359 24.207-7.707S17.625 89.51 3.52 108.52l-.659-.609.025.134s11.336 17.324 22.463 14.121c1.118-.325 2.377-.859 3.753-1.56 4.48 2.495 10.327 4.947 16.783 5.622 0 0-4.37-5.08-8.016-10.86.984-.634 1.994-1.293 3.02-1.96l-.476.334 9.217 3.386-1.017-8.666c.033-.017.058-.042.091-.059l9.059 3.328-1.126-7.882a76.868 76.868 0 0 1 3.436-1.693l9.443-35.717 39.045-26.634-3.103 7.808c-7.916 19.468-22.78 24.064-22.78 24.064l-6.206 2.352c-4.612 5.455-6.556 6.798-8.14 25.107 3.72-.934 7.273-1.16 10.492-.292 16.683 4.496 22.463 24.599 17.967 30.162-1.126 1.393-3.803 3.77-7.181 6.565h-6.773l-.092 5.488c-.234.184-.467.359-.693.542h-6.89l-.083 5.355c-.609.468-1.218.918-1.801 1.36-6.473.133-14.673-5.514-14.673-5.514 0 5.139 4.28 13.046 4.28 13.046s.283-.133.758-.367c-.417.309-.65.476-.65.476s17.324 11.552 28.235 7.273c9.7-3.804 34.816-23.606 56.495-32.981l65.603-17.283 8.65-22.413-49.997 13.17V83.597l58.664-15.457 8.65-22.413-67.297 17.734V43.324z"></path></svg><!--/$--></span>Fastify</span></a><a aria-label="hono" href="/es/doc/environment/hono" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" preserveAspectRatio="xMidYMid" viewBox="0 0 256 330" role="img" aria-label="Hono logo"><path d="M134.129.029c.876-.113 1.65.108 2.319.662a1256.253 1256.253 0 0 1 69.573 93.427c16.094 24.231 29.788 49.851 41.082 76.862 18.037 48.108 8.65 89.963-28.16 125.564-32.209 27.22-69.314 37.822-111.318 31.805-50.208-10.237-84.332-39.28-102.373-87.133C.553 225.638-.993 209.736.614 193.51c2.676-27.93 9.302-54.877 19.878-80.838 4.407-10.592 10.15-20.31 17.228-29.154a381.88 381.88 0 0 1 16.565 21.203c2.44 2.55 4.98 4.98 7.62 7.289C82.06 72.01 106.135 34.685 134.13.029Z" fill="#FF5B11" opacity=".993"></path><path d="M129.49 53.7c24.314 28.2 46.29 58.238 65.93 90.114a187.318 187.318 0 0 1 15.24 33.13c8.338 32.804-.607 59.86-26.836 81.169-25.367 17.85-53.196 23.15-83.488 15.902-32.666-10.136-51.55-32.113-56.653-65.929-1.238-10.662-.133-21.043 3.314-31.142a225.41 225.41 0 0 1 17.89-35.78l19.878-29.155a5509.508 5509.508 0 0 0 44.726-58.31Z" fill="#FF9758"></path></svg><!--/$--></span>Hono</span></a><a aria-label="adonis" href="/es/doc/environment/adonisjs" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" role="img" aria-label="Adonis logo"><path d="M106.812 307.933l78.418-178.207c13.23-30.039 38.692-46.332 70.77-46.332 32.078 0 57.535 16.29 70.773 46.328l78.414 178.211c3.562 8.656 6.617 19.86 6.617 29.531 0 44.297-31.059 75.356-75.36 75.356-15.085 0-27.07-3.848-39.198-7.746-12.43-3.993-25.012-8.036-41.246-8.036-16.047 0-28.938 4.079-41.614 8.09-12.257 3.88-24.316 7.692-38.832 7.692-44.296 0-75.359-31.055-75.359-75.352 0-9.676 3.059-20.879 6.617-29.535z" fill="#fff"></path><path d="M6 256c0 201.628 48.371 250 250 250 201.628 0 250-48.372 250-250C506 54.37 457.627 6 256 6 54.37 6 6 54.371 6 256zm100.812 51.933l78.418-178.207c13.23-30.039 38.692-46.332 70.77-46.332 32.078 0 57.535 16.29 70.773 46.328l78.414 178.211c3.562 8.656 6.617 19.86 6.617 29.531 0 44.297-31.059 75.356-75.36 75.356-15.085 0-27.07-3.848-39.198-7.746-12.43-3.993-25.012-8.036-41.246-8.036-16.047 0-28.938 4.079-41.614 8.09-12.257 3.88-24.316 7.692-38.832 7.692-44.296 0-75.359-31.055-75.359-75.352 0-9.676 3.059-20.879 6.621-29.535h-.004zM256 160.785L178.605 335.94c22.914-10.695 49.39-15.785 77.395-15.785 26.988 0 54.48 5.09 76.374 15.781L256 160.789v-.004z" fill="#5a45ff"></path></svg><!--/$--></span>Adonis</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1u8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="truncate font-semibold text-neutral transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text" label="other"><span class="flex items-center gap-1.5 opacity-60">Otro</span></span></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_1u8qb9bcq_-accordion-content" aria-labelledby="_R_1u8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="lynx-and-react" href="/es/doc/environment/lynx-and-react" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="27" height="28" viewBox="0 0 27 28" fill="currentColor" role="img" aria-label="Lynx logo" xmlns="http://www.w3.org/2000/svg" style="z-index:0" class="shrink-0 size-3.5"><g style="opacity:0"></g><g><circle style="fill:#ffffff;stroke-width:0.2;stroke:#1a1a1a;stroke-dasharray:none" cx="13.533393" cy="-14.052804" r="13.173257" transform="scale(1,-1)"></circle><g transform="matrix(0.81399984,0,0,0.81399984,2.5290274,2.4955799)" style="fill:#000000"><path fill-rule="evenodd" clip-rule="evenodd" d="M 7.56542,6.19594 3.90642,8.7164 C 3.50877,8.99031 3.23346,9.40191 3.13675,9.86708 L 2.77902,11.5878 C 2.76005,11.679 2.71799,11.7642 2.65665,11.8355 l -1.660344,2.1766 c -0.223545,0.2601 -0.218154,0.9511 0.394134,1.3936 0.23479,0.2046 0.54871,0.6634 0.90578,1.1853 0.75602,1.1049 1.70547,2.4926 2.5069,2.3484 1.13408,-0.3984 2.52232,-0.5259 3.58816,0 2.07192,1.7888 1.56321,3.4381 0.83386,5.8027 -0.29349,0.9515 -0.62271,2.0188 -0.83386,3.2576 0.99515,-3.622 3.23292,-7.8286 7.26792,-9.256 -0.727,-0.5939 -2.2106,-1.1456 -3.5235,-1.2784 0,0 4.0334,-3.4532 9.0082,-5.0399 C 17.671,4.16205 11.9386,0.213095 11.9386,0.213095 11.6465,-0.148197 11.0566,-0.0296711 10.9349,0.414774 10.8371,1.72112 10.675,2.60942 10.4074,3.44676 L 8.39128,1.12029 C 8.18068,0.866399 7.75965,1.013 7.76176,1.33949 8.10312,3.23719 8.05521,4.30239 7.56542,6.19594 Z M 8.9846,6.02248 8.99663,6.02171 C 9.02298,6.02002 9.0489,6.01659 9.07424,6.01153 Z M 11.7123,1.7617 C 13.094,4.1491 13.7199,5.5054 13.9322,8.03659 12.4625,7.2017 11.8221,6.98923 10.7413,6.99451 11.3718,5.0773 11.5644,3.92284 11.7123,1.7617 Z" fill="white" style="fill:#000000"></path><path d="m 20.5926,19.4929 c -5.6277,1.2877 -8.8245,3.2269 -11.26936,8.5072 4.38876,-7.3634 17.67436,-6.0465 17.67436,-6.0465 -0.2482,-1.2028 -2.8897,-3.4965 -4.627,-4.9033 0,0 1.4016,-1.7231 4.5,-2.5953 0,0 -5.9571,0.3452 -9.4251,2.2177 1.1235,0.5929 2.5626,1.5936 3.1471,2.8202 z" fill="white" style="fill:#000000"></path></g></g></svg><!--/$--></span>Lynx y React</span></a></div></div></div></div></div></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="plugins"><span class="flex items-center gap-1.5 opacity-60">Plugins</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="syncJSON" href="/es/doc/plugin/sync-json" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">JSON</span></a></li><li><a aria-label="syncPO" href="/es/doc/plugin/sync-po" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">gettext (.po)</span></a></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="dev-tools"><span class="flex items-center gap-1.5 opacity-60">Herramientas de desarrollo</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="vs-code-extension" href="/es/doc/vs-code-extension" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Extensión VS Code</span></a></li><li><a aria-label="mcp-server" href="/es/doc/mcp-server" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Servidor MCP</span></a></li><li><a aria-label="agent-skills" href="/es/doc/agent_skills" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Habilidades del agente</span></a></li><li><a aria-label="lsp" href="/es/doc/lsp" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Language Server Protocol</span></a></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="releases"><span class="flex items-center gap-1.5 opacity-60">Versiones</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="v9" href="/es/doc/releases/v9" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v9</span></a></li><li><a aria-label="v8" href="/es/doc/lanzamientos/v8" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v8</span></a></li><li><a aria-label="v7" href="/es/doc/releases/v7" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v7</span></a></li><li><a aria-label="v6" href="/es/doc/releases/v6" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v6</span></a></li></ul></div><div><a aria-label="benchmark" href="/es/doc/benchmark" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Benchmark</span></a><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="nextjs" href="/es/doc/benchmark/nextjs" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js</span></a></li><li><a aria-label="tanstack" href="/es/doc/benchmark/tanstack" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg height="660" viewBox="0 0 663 660" width="663" xmlns="http://www.w3.org/2000/svg" fill="currentColor" role="img" aria-label="Tanstack logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m305.114318.62443771c8.717817-1.14462121 17.926803-.36545135 26.712694-.36545135 32.548987 0 64.505987 5.05339923 95.64868 14.63098274 39.74418 12.2236582 76.762804 31.7666864 109.435876 57.477568 40.046637 31.5132839 73.228974 72.8472109 94.520714 119.2362609 39.836383 86.790386 39.544267 191.973146-1.268422 278.398081-26.388695 55.880442-68.724007 102.650458-119.964986 136.75724-41.808813 27.828603-90.706831 44.862601-140.45707 50.89341-63.325458 7.677926-131.784923-3.541603-188.712259-32.729444-106.868873-54.795293-179.52309291-165.076271-180.9604082-285.932068-.27660564-23.300971.08616998-46.74071 4.69884909-69.814998 7.51316071-37.57857 20.61272131-73.903917 40.28618971-106.877282 21.2814003-35.670293 48.7704861-67.1473767 81.6882804-92.5255597 38.602429-29.7610135 83.467691-51.1674988 130.978372-62.05777669 11.473831-2.62966514 22.9946-4.0869914 34.57273-5.4964306l3.658171-.44480576c3.050084-.37153079 6.104217-.74794222 9.162589-1.14972654zm-110.555861 549.44131429c-14.716752 1.577863-30.238964 4.25635-42.869928 12.522173 2.84343.683658 6.102369.004954 9.068638 0 7.124652-.011559 14.317732-.279903 21.434964.032202 17.817402.781913 36.381729 3.63214 53.58741 8.350042 22.029372 6.040631 41.432961 17.928687 62.656049 25.945156 22.389644 8.456554 44.67706 11.084675 68.427 11.084675 11.96813 0 23.845573-.035504 35.450133-3.302696-6.056202-3.225083-14.72582-2.619864-21.434964-3.963236-14.556814-2.915455-28.868774-6.474936-42.869928-11.470264-10.304996-3.676672-20.230803-8.214291-30.11097-12.848661l-6.348531-2.985046c-9.1705-4.309263-18.363277-8.560752-27.845391-12.142608-24.932161-9.418465-52.560181-14.071964-79.144482-11.221737zm22.259385-62.614168c-29.163917 0-58.660076 5.137344-84.915434 18.369597-6.361238 3.206092-12.407546 7.02566-18.137277 11.258891-1.746125 1.290529-4.841829 2.948483-5.487351 5.191839-.654591 2.275558 1.685942 4.182039 3.014086 5.637703 6.562396-3.497556 12.797498-7.199878 19.78612-9.855246 45.19892-17.169893 99.992458-13.570779 145.098218 2.172348 22.494346 7.851335 43.219483 19.592421 65.129314 28.800338 24.503461 10.297807 49.53043 16.975034 75.846795 20.399104 31.04195 4.037546 66.433549.7654 94.808495-13.242161 9.970556-4.921843 23.814245-12.422267 28.030337-23.320339-5.207047.454947-9.892236 2.685918-14.83959 4.224149-7.866632 2.445646-15.827248 4.51974-23.908229 6.138887-27.388113 5.486604-56.512458 6.619429-84.091013 1.639788-25.991939-4.693152-50.142596-14.119246-74.179513-24.03502l-3.068058-1.268177c-2.045137-.846788-4.089983-1.695816-6.135603-2.544467l-3.069142-1.272366c-12.279956-5.085721-24.606928-10.110797-37.210937-14.51024-24.485325-8.546552-50.726667-13.784628-76.671218-13.784628zm51.114145-447.9909432c-34.959602 7.7225298-66.276908 22.7605319-96.457338 41.7180089-17.521434 11.0054099-34.281927 22.2799893-49.465301 36.4444283-22.5792616 21.065423-39.8360564 46.668751-54.8866988 73.411509-15.507372 27.55357-25.4498976 59.665686-30.2554517 90.824149-4.7140432 30.568106-5.4906485 62.70747-.0906864 93.301172 6.7503648 38.248526 19.5989769 74.140579 39.8896436 107.337631 6.8187918-3.184625 11.659796-10.445603 17.3128555-15.336896 11.4149428-9.875888 23.3995608-19.029311 36.2745548-26.928535 4.765981-2.923712 9.662222-5.194315 14.83959-7.275014 1.953055-.785216 5.14604-1.502727 6.06527-3.647828 1.460876-3.406732-1.240754-9.335897-1.704904-12.865654-1.324845-10.095517-2.124534-20.362774-1.874735-30.549941.725492-29.668947 6.269727-59.751557 16.825623-87.521453 7.954845-20.924233 20.10682-39.922168 34.502872-56.971512 4.884699-5.785498 10.077731-11.170545 15.437296-16.512656 3.167428-3.157378 7.098271-5.858983 9.068639-9.908915-10.336599.006606-20.674847 2.987289-30.503603 6.013385-21.174447 6.519522-41.801477 16.19312-59.358362 29.841512-8.008432 6.226409-13.873368 14.387371-21.44733 20.939921-2.32322 2.010516-6.484901 4.704691-9.695199 3.187928-4.8500728-2.29042-4.1014979-11.835213-4.6571581-16.222019-2.1369011-16.873476 4.2548401-38.216325 12.3778671-52.843142 13.039878-23.479694 37.150915-43.528712 65.467327-42.82854 12.228647.302197 22.934587 4.551115 34.625711 7.324555-2.964621-4.211764-6.939158-7.28162-10.717482-10.733763-9.257431-8.459031-19.382979-16.184864-30.503603-22.028985-4.474136-2.350694-9.291232-3.77911-14.015169-5.506421-2.375159-.867783-5.36616-2.062533-6.259834-4.702213-1.654614-4.888817 7.148561-9.416813 10.381943-11.478522 12.499882-7.969406 27.826705-14.525258 42.869928-14.894334 23.509209-.577147 46.479246 12.467678 56.162903 34.665926 3.404469 7.803171 4.411273 16.054969 5.079109 24.382907l.121749 1.56229.174325 2.345587c.01913.260708.038244.521433.057403.782164l.11601 1.56437.120128 1.563971c7.38352-6.019164 12.576553-14.876995 19.78612-21.323859 16.861073-15.07846 39.936636-21.7722 61.831627-14.984333 19.786945 6.133107 36.984382 19.788105 47.105807 37.959541 2.648042 4.754231 10.035685 16.373942 4.698379 21.109183-4.177345 3.707277-9.475079.818243-13.880788-.719162-3.33605-1.16376-6.782939-1.90214-10.241828-2.585698l-1.887262-.369639c-.629089-.122886-1.257979-.246187-1.886079-.372129-11.980496-2.401886-25.91652-2.152533-37.923398-.041284-7.762754 1.364839-15.349083 4.127545-23.083807 5.271929v1.651348c21.149714.175043 41.608563 12.240618 52.043268 30.549941 4.323267 7.585468 6.482428 16.267431 8.138691 24.770223 2.047864 10.50918.608423 21.958802-2.263037 32.201289-.962925 3.433979-2.710699 9.255807-6.817143 10.046802-2.902789.558982-5.36781-2.330878-7.024898-4.279468-4.343878-5.10762-8.475879-9.96341-13.573278-14.374161-12.895604-11.157333-26.530715-21.449361-40.396663-31.373138-7.362086-5.269452-15.425755-12.12007-23.908229-15.340199 2.385052 5.745041 4.721463 11.086326 5.532694 17.339156 2.385876 18.392716-5.314223 35.704625-16.87179 49.540445-3.526876 4.222498-7.29943 8.475545-11.744712 11.755948-1.843407 1.360711-4.156734 3.137561-6.595373 2.752797-7.645687-1.207961-8.555849-12.73272-9.728176-18.637115-3.970415-19.998652-2.375984-39.861068 3.132802-59.448534-4.901187 2.485279-8.443727 7.923994-11.521293 12.385111-6.770975 9.816439-12.645804 20.199291-16.858599 31.375615-16.777806 44.519521-16.616219 96.664142 5.118834 139.523233 2.427098 4.786433 6.110614 4.144058 10.894733 4.144058.720854 0 1.44257-.004515 2.164851-.010924l2.168232-.022283c4.338648-.045438 8.686803-.064635 12.979772.508795 2.227588.297243 5.320818.032202 7.084256 1.673642 2.111344 1.966755.986008 5.338808.4996 7.758859-1.358647 6.765574-1.812904 12.914369-1.812904 19.816178 9.02412-1.398692 11.525415-15.866153 14.724172-23.118874 3.624982-8.216283 7.313444-16.440823 10.667192-24.770223 1.648843-4.093692 3.854171-8.671229 3.275427-13.210785-.649644-5.10184-4.335633-10.510831-6.904531-14.862134-4.86244-8.234447-10.389363-16.70834-13.969002-25.595896-2.861567-7.104926-.197036-15.983399 7.871579-18.521521 4.450228-1.400344 9.198073 1.345848 12.094266 4.562675 6.07269 6.74328 9.992815 16.777697 14.401823 24.692609l34.394873 61.925556c2.920926 5.243856 5.848447 10.481933 8.836976 15.687808 1.165732 2.031158 2.352075 5.167068 4.740424 6.0332 2.127008.77118 5.033095-.325315 7.148561-.748886 5.492297-1.099798 10.97635-2.287117 16.488434-3.28288 6.605266-1.193099 16.673928-.969342 21.434964-6.129805-6.963066-2.205375-15.011895-2.074919-22.259386-1.577863-4.352947.298894-9.178287 1.856116-13.178381-.686135-5.953149-3.783239-9.910373-12.522173-13.552668-18.377854-8.980425-14.439388-17.441465-29.095929-26.041008-43.760726l-1.376261-2.335014-2.765943-4.665258c-1.380597-2.334387-2.750786-4.67476-4.079753-7.036188-1.02723-1.826391-2.549937-4.233231-1.078344-6.24705 1.545791-2.114476 4.91472-2.239146 7.956473-2.243117l.603351.000261c1.195428.001526 2.315572.002427 3.222811-.11692 12.27399-1.615019 24.718635-2.952611 37.098976-2.952611-.963749-3.352237-3.719791-7.141255-2.838484-10.73046 1.972017-8.030506 13.526287-10.543033 18.899867-4.780653 3.60767 3.868283 5.704174 9.192229 8.051303 13.859765 3.097352 6.162006 6.624228 12.118418 9.940876 18.16483 5.805578 10.585967 12.146205 20.881297 18.116667 31.375615.49237.865561.999687 1.726685 1.512269 2.587098l.771613 1.290552c2.577138 4.303168 5.164895 8.635123 6.553094 13.461506-20.735854-.9487-36.30176-25.018751-45.343193-41.283704-.721369 2.604176.450959 4.928448 1.388326 7.431066 1.948109 5.197619 4.276275 10.147535 7.20627 14.862134 4.184765 6.732546 8.982075 13.665732 15.313633 18.553722 11.236043 8.673707 26.05255 8.721596 39.572241 7.794364 8.669619-.595311 19.50252-4.542034 28.030338-1.864372 8.513803 2.673532 11.940924 12.063098 6.884745 19.276187-3.787393 5.403211-8.842747 7.443452-15.128962 8.257566 4.445282 9.53571 10.268996 18.385285 14.490036 28.072919 1.758491 4.035895 3.59118 10.22102 7.8048 12.350433 2.805507 1.416857 6.824562.09743 9.85761.034678-3.043765-8.053625-8.742992-14.887729-11.541904-23.118874 8.533589.390544 16.786875 4.843404 24.732651 7.685374 15.630376 5.590144 31.063836 11.701854 46.475333 17.86913l7.112077 2.848685c6.338978 2.538947 12.71588 5.052299 18.961699 7.812528 2.285297 1.009799 5.449427 3.370401 7.975455 1.917215 2.061054-1.186494 3.394144-4.015253 4.665403-5.931643 3.55573-5.361927 6.775921-10.928622 9.965609-16.513481 12.774414-22.36586 22.143967-46.872692 28.402976-71.833646 20.645168-82.323009 2.934117-173.156241-46.677107-241.922507-19.061454-26.420745-43.033164-49.262193-69.46165-68.1783861-66.13923-47.336721-152.911262-66.294198-232.486917-48.7172481zm135.205158 410.5292842c-17.532977 4.570931-35.601827 8.714164-53.58741 11.040088 2.365265 8.052799 8.145286 15.885969 12.376218 23.118874 1.635653 2.796558 3.3859 6.541816 6.618457 7.755557 3.651364 1.370619 8.063669-.853747 11.508927-1.975838-1.595256-4.364513-4.279573-8.292245-6.476657-12.385112-.905215-1.687677-2.305907-3.685809-1.559805-5.68972 1.410585-3.786541 7.266452-3.563609 10.509727-4.221671 8.54678-1.733916 17.004522-3.898008 25.557073-5.611281 3.150939-.631641 7.538512-2.342438 10.705115-1.285575 2.371037.791232 3.800147 2.744743 5.152304 4.781948l.606196.918752c.80912 1.222827 1.637246 2.41754 2.671212 3.351165 3.457625 3.121874 8.628398 3.60159 13.017619 4.453686-2.678546-6.027421-7.130424-11.301001-9.984571-17.339156-1.659561-3.511592-3.023155-8.677834-6.656381-10.707341-5.005064-2.795733-15.341663 2.461334-20.458024 3.795624zm-110.472507-40.151706c-.825246 10.467897-4.036369 18.984725-9.068639 28.072919 5.76683.729896 11.649079.989984 17.312856 2.39363 4.244947 1.051908 8.156828 3.058296 12.366325 4.211763-2.250671-6.157877-6.426367-11.651913-9.661398-17.339156-3.266358-5.740912-6.189758-12.717032-10.949144-17.339156z" transform="translate(.9778)"></path></svg><!--/$--></span>TanStack</span></a></li><li><a aria-label="vue" href="/es/doc/benchmark/vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 261.76 226.69" role="img" aria-label="Vuejs logo" style="z-index:0" class="shrink-0 size-3.5"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"></path></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"></path></g></g></svg><!--/$--></span>Vue</span></a></li><li><a aria-label="solid" href="/es/doc/benchmark/solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Solid</span></a></li><li><a aria-label="svelte" href="/es/doc/benchmark/svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>Svelte</span></a></li></ul></div><div><a aria-label="Ir a la blog" href="/es/blog" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Blog</span></a></div><div><a aria-label="Haga clic para acceder al chatbot inteligente de documentación inteligente" href="/es/doc/chat" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text w-full truncate text-nowrap p-2 text-left font-semibold transition-color flex items-center"><span class="flex items-center gap-1.5 opacity-60"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot" aria-hidden="true"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg>Preguntar una pregunta</span></a></div></nav></div></div></div></div></div></div></div></aside><div class="mx-1 mb-3 flex min-h-0 min-w-0 flex-1 flex-row rounded-2xl border border-neutral/40 bg-background md:mr-2"><article aria-label="Contenido de la documentación" class="no-scrollbar relative mb-3 h-full max-h-[calc(100vh-4.5rem)] w-auto flex-1 grow overflow-auto px-4 pb-24 max-md:pl-10 md:px-10" id="content"><div class="m-auto max-w-3xl"><nav aria-label="breadcrumb"><ol class="flex flex-row flex-wrap items-center gap-2 mt-12 ml-3 text-xs" itemScope="" itemType="http://schema.org/BreadcrumbList"><li itemProp="itemListElement" itemScope="" itemType="https://schema.org/ListItem" class="flex items-center"><a href="/es/doc/get-started" aria-label="Go to Documentation" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral" itemProp="item" itemScope="" itemType="https://schema.org/WebPage" itemID="/es/doc/get-started"><span itemProp="name">Documentation</span></a><meta itemProp="position" content="1"/></li><li aria-hidden="true" class="flex items-center"><span class="text-neutral"><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></span></li><li itemProp="itemListElement" itemScope="" itemType="https://schema.org/ListItem" class="flex items-center"><span itemProp="item" class="inline-flex items-center font-medium text-neutral-700 transition-colors duration-200"><span itemProp="name">Entornos</span><meta itemProp="position" content="2"/></span></li><li aria-hidden="true" class="flex items-center"><span class="text-neutral"><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></span></li><li itemProp="itemListElement" itemScope="" itemType="https://schema.org/ListItem" class="flex items-center"><a href="https://intlayer.org/es/doc/environment/vite-and-svelte" aria-label="Go to Vite y Svelte" target="_self" aria-current="page" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral" itemProp="item" itemScope="" itemType="https://schema.org/WebPage" itemID="https://intlayer.org/es/doc/environment/vite-and-svelte"><span itemProp="name">Vite y Svelte</span></a><meta itemProp="position" content="3"/></li></ol></nav><header class="z-10 mx-auto mt-5 flex flex-col gap-2 px-4 py-2 text-xs"><span class="flex items-center gap-2">Autor<!-- -->:<!-- --> <div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-author-social-medias" aria-haspopup="true"><a href="https://github.com/aymericzip" aria-label="Página de github de Aymeric PINEAU" rel="noopener noreferrer nofollow" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl flex items-center gap-2 text-neutral"><div class="rounded-full border-text ring-offset-0 transition-ring duration-200 size-7 border-[1px] p-0.25 scale-70" aria-label="Avatar de Aymeric PINEAU" role="img"><div class="relative flex aspect-square size-full flex-row items-center justify-center"><div class="absolute top-0 left-0 flex aspect-square size-full flex-col items-center justify-center rounded-full bg-text text-text-opposite"><img class="size-full rounded-full object-cover" src="https://avatars.githubusercontent.com/u/62554073?v=4&size=124" srcSet="https://avatars.githubusercontent.com/u/62554073?v=4&size=124" alt="Avatar de Aymeric PINEAU" width="59" height="59" loading="lazy" draggable="false"/></div></div></div>Aymeric PINEAU</a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 flex w-auto min-w-0 flex-row gap-2 p-2 delay-200 group-hover/popover:delay-100" role="group" aria-labelledby="unrollable-panel-button-author-social-medias" id="unrollable-panel-author-social-medias"><a href="https://www.linkedin.com/in/aymericpineau/" aria-label="Go to https://www.linkedin.com/in/aymericpineau/" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl max-h-5 max-w-5 shrink-0 transition-colors hover:text-primary"><svg role="img" aria-label="LinkedIn logo" xmlns="http://www.w3.org/2000/svg" width="72" height="72" viewBox="0 0 72 72" class="h-auto max-h-full max-w-full"><mask id="linkedin-mask"><rect width="72" height="72" fill="white"></rect><path d="M62,62 L51.315625,62 L51.315625,43.8021149 C51.315625,38.8127542 49.4197917,36.0245323 45.4707031,36.0245323 C41.1746094,36.0245323 38.9300781,38.9261103 38.9300781,43.8021149 L38.9300781,62 L28.6333333,62 L28.6333333,27.3333333 L38.9300781,27.3333333 L38.9300781,32.0029283 C38.9300781,32.0029283 42.0260417,26.2742151 49.3825521,26.2742151 C56.7356771,26.2742151 62,30.7644705 62,40.051212 L62,62 Z M16.349349,22.7940133 C12.8420573,22.7940133 10,19.9296567 10,16.3970067 C10,12.8643566 12.8420573,10 16.349349,10 C19.8566406,10 22.6970052,12.8643566 22.6970052,16.3970067 C22.6970052,19.9296567 19.8566406,22.7940133 16.349349,22.7940133 Z M11.0325521,62 L21.769401,62 L21.769401,27.3333333 L11.0325521,27.3333333 L11.0325521,62 Z" fill="black"></path></mask><rect width="72" height="72" rx="8" fill="currentColor" mask="url(#linkedin-mask)"></rect></svg></a><a href="https://x.com/aymericzip" aria-label="Go to https://x.com/aymericzip" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl max-h-5 max-w-5 shrink-0 transition-colors hover:text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 271" width="300" height="271" fill="currentColor" role="img" aria-label="X logo" class="h-auto max-h-full max-w-full"><path d="m236 0h46l-101 115 118 156h-92.6l-72.5-94.8-83 94.8h-46l107-123-113-148h94.9l65.5 86.6zm-16.1 244h25.5l-165-218h-27.4z"></path></svg></a><a href="https://github.com/aymericzip" aria-label="Go to https://github.com/aymericzip" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl max-h-5 max-w-5 shrink-0 transition-colors hover:text-primary"><svg role="img" aria-label="GitHub logo" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="h-auto max-h-full max-w-full"><path d="M127.975 10C61.1744 10 7 64.167 7 130.99C7 184.444 41.663 229.787 89.7396 245.786C95.7928 246.9 97.9987 243.164 97.9987 239.955C97.9987 237.088 97.8947 229.475 97.8353 219.382C64.1824 226.69 57.082 203.161 57.082 203.161C51.5784 189.182 43.6461 185.461 43.6461 185.461C32.6612 177.96 44.4779 178.108 44.4779 178.108C56.6215 178.963 63.0089 190.579 63.0089 190.579C73.8007 209.065 91.329 203.725 98.2215 200.628C99.3208 192.814 102.448 187.482 105.901 184.459C79.0369 181.406 50.7911 171.023 50.7911 124.662C50.7911 111.456 55.5074 100.65 63.2466 92.1974C61.9988 89.1374 57.847 76.8304 64.435 60.1785C64.435 60.1785 74.588 56.9254 97.7016 72.582C107.35 69.8934 117.703 68.5565 127.99 68.5045C138.269 68.5565 148.615 69.8934 158.278 72.582C181.377 56.9254 191.515 60.1785 191.515 60.1785C198.118 76.8304 193.966 89.1374 192.726 92.1974C200.48 100.65 205.159 111.456 205.159 124.662C205.159 171.142 176.869 181.369 149.923 184.362C154.26 188.098 158.13 195.481 158.13 206.77C158.13 222.939 157.981 235.989 157.981 239.955C157.981 243.193 160.165 246.959 166.3 245.778C214.339 229.743 248.973 184.429 248.973 130.99C248.973 64.167 194.798 10 127.975 10Z"></path></svg></a></div></div></span><div class="flex w-full flex-row justify-between gap-4 py-2"><span class="block">Creación<!-- -->:<span class="ml-2 text-neutral">2025-04-18</span></span><span class="block">Última actualización<!-- -->:<span class="ml-2 text-neutral">2026-05-31</span></span></div></header><div class="text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/70 p-0 border-text sticky top-10 z-10 mx-auto mt-5 flex max-w-3xl flex-col gap-2 px-4 py-2 max-md:overflow-x-auto"><div class="flex w-full flex-row justify-between gap-4"><div class="flex w-full shrink flex-row items-center justify-start gap-4"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-mcp" aria-haspopup="true"><a aria-label="Ver la plantilla de aplicación" rel="noopener noreferrer" href="https://github.dev/aymericzip/intlayer-vite-svelte-template" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><svg role="img" aria-label="GitHub logo" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="size-4"><path d="M127.975 10C61.1744 10 7 64.167 7 130.99C7 184.444 41.663 229.787 89.7396 245.786C95.7928 246.9 97.9987 243.164 97.9987 239.955C97.9987 237.088 97.8947 229.475 97.8353 219.382C64.1824 226.69 57.082 203.161 57.082 203.161C51.5784 189.182 43.6461 185.461 43.6461 185.461C32.6612 177.96 44.4779 178.108 44.4779 178.108C56.6215 178.963 63.0089 190.579 63.0089 190.579C73.8007 209.065 91.329 203.725 98.2215 200.628C99.3208 192.814 102.448 187.482 105.901 184.459C79.0369 181.406 50.7911 171.023 50.7911 124.662C50.7911 111.456 55.5074 100.65 63.2466 92.1974C61.9988 89.1374 57.847 76.8304 64.435 60.1785C64.435 60.1785 74.588 56.9254 97.7016 72.582C107.35 69.8934 117.703 68.5565 127.99 68.5045C138.269 68.5565 148.615 69.8934 158.278 72.582C181.377 56.9254 191.515 60.1785 191.515 60.1785C198.118 76.8304 193.966 89.1374 192.726 92.1974C200.48 100.65 205.159 111.456 205.159 124.662C205.159 171.142 176.869 181.369 149.923 184.362C154.26 188.098 158.13 195.481 158.13 206.77C158.13 222.939 157.981 235.989 157.981 239.955C157.981 243.193 160.165 246.959 166.3 245.778C214.339 229.743 248.973 184.429 248.973 130.99C248.973 64.167 194.798 10 127.975 10Z"></path></svg></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-mcp" id="unrollable-panel-mcp"><strong>Ver la plantilla de aplicación en GitHub</strong><p class="text-neutral">Esta página tiene una plantilla de aplicación disponible.</p></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-application-showcase" aria-haspopup="true"><a aria-label="Ver aplicación de demostración" rel="noopener noreferrer" href="https://intlayer-vite-svelte-template.vercel.app" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe size-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-application-showcase" id="unrollable-panel-application-showcase"><strong>Ver la aplicación de demostración</strong><p class="text-neutral">Esta página enlaza a una demo en vivo de la plantilla.</p></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-summarize" aria-haspopup="true"><a href="https://chatgpt.com/?q=Resumir el documento siguiente : https://intlayer.org/es/doc/environment/vite-and-svelte.md" aria-label="Resumir con ChatGPT" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><!--$--><svg role="img" aria-label="ChatGPT logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320" fill="currentColor" class="size-4"><path d="m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z"></path></svg><!--/$--></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-50 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-summarize" id="unrollable-panel-summarize"><strong>Referencia esta doc a tu asistente AI favorito</strong><a href="https://chatgpt.com/?q=Resumir el documento siguiente : https://intlayer.org/es/doc/environment/vite-and-svelte.md" aria-label="Resumir con ChatGPT" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="ChatGPT logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320" fill="currentColor" class="size-4"><path d="m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z"></path></svg><!--/$-->ChatGPT</a><a href="https://claude.ai/new?q=Resumir el documento siguiente : https://intlayer.org/es/doc/environment/vite-and-svelte.md" aria-label="Resumir con Claude" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Anthropic logo" fill="none" viewBox="0 0 24 24" height="24" width="24" class="size-4"><path fill="currentColor" d="m13.788825 3.932 6.43325 16.136075h3.5279L17.316725 3.932H13.788825Z" stroke-width="0.25"></path><path fill="currentColor" d="m6.325375 13.682775 2.20125 -5.67065 2.201275 5.67065H6.325375ZM6.68225 3.932 0.25 20.068075h3.596525l1.3155 -3.3886h6.729425l1.315275 3.3886h3.59655L10.371 3.932H6.68225Z" stroke-width="0.25"></path></svg><!--/$-->Claude</a><a href="https://chat.deepseek.com/?q=Resumir el documento siguiente : https://intlayer.org/es/doc/environment/vite-and-svelte.md" aria-label="Resumir con DeepSeek" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="DeepSeek logo" fill="currentColor" fill-rule="evenodd" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" class="size-4"><path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z"></path></svg><!--/$-->DeepSeek</a><a href="https://www.google.com/search?udm=50&aep=11&q=Resumir el documento siguiente : https://intlayer.org/es/doc/environment/vite-and-svelte.md" aria-label="Resumir con Google AI mode" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="Google AI logo" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="size-4"><path d="M915.2 448l-4.2-17.8H524V594h231.2c-24 114-135.4 174-226.4 174-66.2 0-136-27.8-182.2-72.6-47.4-46-77.6-113.8-77.6-183.6 0-69 31-138 76.2-183.4 45-45.2 113.2-70.8 181-70.8 77.6 0 133.2 41.2 154 60l116.4-115.8c-34.2-30-128-105.6-274.2-105.6-112.8 0-221 43.2-300 122C144.4 295.8 104 408 104 512s38.2 210.8 113.8 289c80.8 83.4 195.2 127 313 127 107.2 0 208.8-42 281.2-118.2 71.2-75 108-178.8 108-287.6 0-45.8-4.6-73-4.8-74.2z"></path></svg><!--/$-->Google AI mode</a><a href="https://gemini.google.com/?q=Resumir el documento siguiente : https://intlayer.org/es/doc/environment/vite-and-svelte.md" aria-label="Resumir con Gemini" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="Gemini logo" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="size-4"><path d="M16 8.016A8.522 8.522 0 008.016 16h-.032A8.521 8.521 0 000 8.016v-.032A8.521 8.521 0 007.984 0h.032A8.522 8.522 0 0016 7.984v.032z" fill="currentColor"></path></svg><!--/$-->Gemini</a><a href="https://www.perplexity.ai/search/new?q=Resumir el documento siguiente : https://intlayer.org/es/doc/environment/vite-and-svelte.md" aria-label="Resumir con Perplexity" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg width="400" role="img" aria-label="Perplexity logo" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg" class="size-4"><path fill-rule="evenodd" clip-rule="evenodd" d="M101.008 42L190.99 124.905L190.99 124.886L190.99 42.1913H208.506L208.506 125.276L298.891 42V136.524L336 136.524V272.866H299.005V357.035L208.506 277.525L208.506 357.948H190.99L190.99 278.836L101.11 358V272.866H64V136.524H101.008V42ZM177.785 153.826H81.5159V255.564H101.088V223.472L177.785 153.826ZM118.625 231.149V319.392L190.99 255.655L190.99 165.421L118.625 231.149ZM209.01 254.812V165.336L281.396 231.068V272.866H281.489V318.491L209.01 254.812ZM299.005 255.564H318.484V153.826L222.932 153.826L299.005 222.751V255.564ZM281.375 136.524V81.7983L221.977 136.524L281.375 136.524ZM177.921 136.524H118.524V81.7983L177.921 136.524Z" fill="currentColor"></path></svg><!--/$-->Perplexity</a><a href="https://chat.mistral.ai/chat/?q=Resumir el documento siguiente : https://intlayer.org/es/doc/environment/vite-and-svelte.md" aria-label="Resumir con Mistral" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg fill="currentColor" role="img" aria-label="Mistral logo" fill-rule="evenodd" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" class="size-4"><path clip-rule="evenodd" d="M3.428 3.4h3.429v3.428h3.429v3.429h-.002 3.431V6.828h3.427V3.4h3.43v13.714H24v3.429H13.714v-3.428h-3.428v-3.429h-3.43v3.428h3.43v3.429H0v-3.429h3.428V3.4zm10.286 13.715h3.428v-3.429h-3.427v3.429z"></path></svg><!--/$-->Mistral</a><a href=" https://x.com/i/grok?text=Resumir el documento siguiente : https://intlayer.org/es/doc/environment/vite-and-svelte.md" aria-label="Resumir con Grok" target="_self" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="Grok logo" fill="currentColor" fill-rule="evenodd" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" class="size-4"><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg><!--/$-->Grok</a><p class="text-neutral">Haz tu pregunta y obtén un resumen del documento referenciando esta página y el proveedor AI de tu elección</p></div></div><div class="flex size-5 h-8 flex-1 flex-row items-center justify-between gap-5 p-2"><svg role="progressbar" viewBox="0 0 10 10" aria-valuenow="0" aria-valuemin="0" aria-valuemax="1" class="block h-full shrink-0"><circle cx="5" cy="5" r="4" fill="none" stroke-width="1" class="stroke-current/25"></circle><circle cx="5" cy="5" r="4" fill="none" stroke-width="1" stroke="currentColor" stroke-dasharray="25.132741228718345" stroke-dashoffset="25.132741228718345" stroke-linecap="round" transform="rotate(-90 5 5)" class="transition-all"></circle></svg><span class="w-full flex-1 truncate text-neutral text-xs"></span></div></div><div class="flex shrink-0 flex-row items-center justify-end gap-4"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-outdated-translation" aria-haspopup="true"><div class="flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clock size-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6l4 2"></path></svg></div><div class="backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-1 flex-col gap-2 p-3 text-neutral text-sm" role="group" aria-labelledby="unrollable-panel-button-outdated-translation" id="unrollable-panel-outdated-translation"><div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 divide-y divide-dashed divide-text/20 border-text gap-0 mt-3 max-h-[60vh] min-w-64" role="list" aria-label="Document history"><h4 class="mb-2 pb-4 font-medium text-sm text-text">Historial de versiones</h4><ol class="divide-y divide-dashed divide-text/20 overflow-y-auto p-1"><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->8.9.0</span><span class="text-nowrap">4/5/2026</span></div></li><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Agregar comando init"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->7.5.9</span><span class="text-nowrap">30/12/2025</span></div></li><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Actualización de la documentación"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->5.5.11</span><span class="text-nowrap">19/11/2025</span></div></li><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Inicio del historial"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->5.5.10</span><span class="text-nowrap">29/6/2025</span></div></li></ol></div></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-language" aria-haspopup="true"><div class="flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages size-4" aria-hidden="true"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg></div><div class="backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-1 flex-col gap-2 p-3 text-neutral text-sm" role="group" aria-labelledby="unrollable-panel-button-language" id="unrollable-panel-language"><p>El contenido de esta página ha sido traducido con una IA.</p><a aria-label="Haga clic para cambiar el idioma a inglés" href="/doc/environment/vite-and-svelte" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text">Ver la última versión del contenido original en inglés</a></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-contribute" aria-haspopup="true"><a aria-label="Haga clic aquí para contribuir" rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer/edit/main/docs/docs/es/intlayer_with_vite+svelte.md" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-pen size-4" aria-hidden="true"><path d="M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"></path></svg></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-1 flex-col gap-2 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-contribute" id="unrollable-panel-contribute"><strong>Editar esta documentación</strong><p class="text-neutral">Si tienes una idea para mejorar esta documentación, no dudes en contribuir enviando una pull request en GitHub.</p><a aria-label="Haga clic aquí para contribuir" rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+svelte.md" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text">Enlace de GitHub a la documentación<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center p-2" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-4" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar</strong><p class="text-neutral">Copiar el Markdown del documento a la portapapeles</p></div></div></div></div></div><div class="m-auto flex max-w-2xl flex-col gap-8 p-4 text-text/90 max-md:px-0"><div class="flex flex-col gap-8 py-10"><h1 class="text-3xl mb-8 text-text" id="traduce-tu-sitio-web-vite-y-svelte-usando-intlayer--internacionalizacion-i18n">Traduce tu sitio web Vite y Svelte usando Intlayer | Internacionalización (i18n)</h1><div class="relative w-full rounded-xl border border-card"><div class="flex shrink-0 gap-3 p-3 sticky rounded-xl top-24 z-5 bg-background/70 backdrop-blur overflow-x-auto"><div class="relative z-0 flex size-full flex-row items-center gap-2 border-text text-text" aria-orientation="horizontal" aria-multiselectable="false" role="tablist"><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none" data-active="true" role="tab" aria-selected="true" aria-controls="tabpanel-code" id="tab-code" type="button" tabindex="0">Código</button><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none text-neutral/70" data-active="false" role="tab" aria-selected="false" aria-controls="tabpanel-demo" id="tab-demo" type="button" tabindex="-1">Demo</button></div></div><div class="relative w-full min-w-0 overflow-x-clip [-webkit-clip-path:inset(0)] [clip-path:inset(0)]" style="touch-action:pan-y"><div role="tablist" aria-orientation="horizontal" class="grid w-full min-w-0 transition-transform duration-300 ease-in-out" style="grid-template-columns:repeat(2, 100%);transform:translateX(-0%)"><div role="tabpanel" aria-labelledby="tab-code" id="tabpanel-code" aria-hidden="false" tabindex="0" data-active="true" class="w-full min-w-0 p-3 opacity-100 transition-opacity duration-300 ease-in-out"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 border-[1.3px] border-neutral/20 gap-0 overflow-hidden p-0"><iframe sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" loading="lazy" src="https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts" title="Demo CodeSandbox - Intlayer" class="block max-h-[80vh] min-h-[12rem] w-full m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"></iframe><div class="flex items-center justify-between gap-3 px-3 py-1"><a href="https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts" aria-label="" rel="noopener noreferrer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] hover:bg-current/0 hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-neutral text-xs underline-offset-2 hover:text-text hover:underline">ide.intlayer.org<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Open embedded page in fullscreen" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Open embedded page in fullscreen</span></button></div></div></div></div><div role="tabpanel" aria-labelledby="tab-demo" id="tabpanel-demo" aria-hidden="true" tabindex="-1" data-active="false" class="w-full min-w-0 p-3 transition-opacity duration-300 ease-in-out pointer-events-none opacity-0"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 border-[1.3px] border-neutral/20 gap-0 overflow-hidden p-0"><iframe sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" loading="lazy" src="https://intlayer-vite-svelte-template.vercel.app" title="Demo - intlayer-vite-svelte-template" class="block max-h-[80vh] min-h-[12rem] w-full m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"></iframe><div class="flex items-center justify-between gap-3 px-3 py-1"><a href="https://intlayer-vite-svelte-template.vercel.app/" aria-label="" rel="noopener noreferrer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] hover:bg-current/0 hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-neutral text-xs underline-offset-2 hover:text-text hover:underline">intlayer-vite-svelte-template.vercel.app<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Open embedded page in fullscreen" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Open embedded page in fullscreen</span></button></div></div></div></div></div></div></div><h2 class="mb-2 text-2xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-16 text-text" id="tabla-de-contenidos" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Tabla de Contenidos</h2><h2 class="mb-2 text-2xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-16 text-text" id="por-que-intlayer-en-lugar-de-alternativas" aria-label="Click to scroll to section undefined and copy the link to the clipboard">¿Por qué Intlayer en lugar de alternativas?</h2><p>En comparación con soluciones principales como <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-i18n</code> o <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">i18next</code>, Intlayer es una solución que viene con optimizaciones integradas como:</p> <div class="text-text rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl px-3 py-2 border-[1.3px] border-neutral/20 backdrop-blur-none bg-transparent flex flex-col gap-1 overflow-hidden"> <div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Cobertura completa Svelte</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_1259j9bcq_-accordion-content" aria-labelledby="_R_1259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Intlayer está optimizado para funcionar perfectamente con Svelte al ofrecer <strong class="text-text">alcance del contenido a nivel de componente</strong>, <strong class="text-text">traducciones reactivas</strong> y todas las funciones necesarias para escalar la internacionalización (i18n).</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1i59j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Tamaño del bundle</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_1i59j9bcq_-accordion-content" aria-labelledby="_R_1i59j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>En lugar de cargar archivos JSON masivos en sus páginas, cargue solo el contenido necesario. Intlayer ayuda a <strong class="text-text">reducir el tamaño de su bundle y de sus páginas hasta en un 50%</strong>.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_2259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Mantenibilidad</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_2259j9bcq_-accordion-content" aria-labelledby="_R_2259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Determinar el alcance del contenido de su aplicación <strong class="text-text">facilita el mantenimiento</strong> para aplicaciones a gran escala. Puede duplicar o eliminar una sola carpeta de funciones sin la carga mental de revisar todo el código base de contenido. Además, Intlayer está <strong class="text-text">completamente escrito</strong> para garantizar la precisión de su contenido.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_2i59j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Agente de IA</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_2i59j9bcq_-accordion-content" aria-labelledby="_R_2i59j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>La ubicación conjunta de contenido <strong class="text-text">reduce el contexto necesario</strong> para los modelos de lenguajes grandes (LLM). Intlayer también viene con un conjunto de herramientas, como una <strong class="text-text">CLI</strong> para comprobar si faltan traducciones,<strong class="text-text"><a href="/es/doc/lsp" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">LSP</a></strong>, <strong class="text-text"><a href="/es/doc/mcp-server" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">MCP</a></strong> y <strong class="text-text"><a href="/es/doc/agent_skills" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">agent skills</a></strong>, para que la experiencia del desarrollador (DX) sea aún más fluida para los agentes de IA.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_3259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Automatización</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_3259j9bcq_-accordion-content" aria-labelledby="_R_3259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Utilice la automatización para traducir su canal de CI/CD utilizando el LLM de su elección al costo de su proveedor de IA. Intlayer también ofrece un <strong class="text-text">compilador</strong> para automatizar la extracción de contenido, así como una <a href="/es/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">plataforma web</a> para ayudar a <strong class="text-text">traducir en segundo plano</strong>.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_3i59j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Actuación</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_3i59j9bcq_-accordion-content" aria-labelledby="_R_3i59j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>La conexión de archivos JSON masivos a componentes puede provocar problemas de rendimiento y reactividad. Intlayer optimiza la carga de su contenido en el momento de la compilación.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_4259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Escalando sin ningún desarrollador</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_4259j9bcq_-accordion-content" aria-labelledby="_R_4259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Más que una simple solución i18n, Intlayer proporciona un <strong class="text-text">[editor visual] autohospedado(/es/doc/concept/editor)<strong class="text-text"> y un </strong><a href="/es/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">CMS completo</a></strong> para ayudarle a administrar su contenido multilingüe en <strong class="text-text">tiempo real</strong>, lo que facilita la colaboración con traductores, redactores y otros miembros del equipo. El contenido se puede almacenar de forma local y/o remota.</p> </div></div></div></div></div><hr class="mx-6 mt-16 border-dashed text-neutral"/><h2 class="mb-2 text-2xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-16 text-text" id="guia-paso-a-paso-para-configurar-intlayer-en-una-aplicacion-vite-y-svelte" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Guía Paso a Paso para Configurar Intlayer en una Aplicación Vite y Svelte</h2><div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 border-[1.3px] border-neutral/20 gap-0 overflow-hidden p-0"><iframe sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" loading="lazy" src="https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts" title="Demo CodeSandbox - Cómo internacionalizar tu aplicación usando Intlayer" class="block max-h-[80vh] min-h-[12rem] w-full m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"></iframe><div class="flex items-center justify-between gap-3 px-3 py-1"><a href="https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts" aria-label="" rel="noopener noreferrer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] hover:bg-current/0 hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-neutral text-xs underline-offset-2 hover:text-text hover:underline">ide.intlayer.org<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Open embedded page in fullscreen" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Open embedded page in fullscreen</span></button></div></div><p>Consulta la <a rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer-vite-svelte-template" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">Plantilla de Aplicación<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a> en GitHub.</p> <ol class="list-none"> <li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">1</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-1-instalar-dependencias" aria-label="Paso 1: Instalar Dependencias">Instalar Dependencias</h3></div> <p>Instala los paquetes necesarios usando npm:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Seleccionar gestor de paquetes"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npm install intlayer svelte-intlayer</span><span class="line block w-full">npm install vite-intlayer --save-dev</span><span class="line block w-full">npx intlayer init</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> <ul class="mt-5 flex list-disc flex-col gap-3 pl-5 marker:text-neutral/80"><li><p><strong class="text-text">intlayer</strong></p> <p>El paquete principal que proporciona herramientas de internacionalización para la gestión de configuración, traducción, <a href="/es/doc/concept/content" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">declaración de contenido</a>, transpileación y <a href="/es/doc/concept/cli" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">comandos CLI</a>.</p> </li><li><p><strong class="text-text">svelte-intlayer</strong> El paquete que integra Intlayer con la aplicación Svelte. Proporciona proveedores de contexto y hooks para la internacionalización en Svelte.</p> </li><li><p><strong class="text-text">vite-intlayer</strong> Incluye el plugin de Vite para integrar Intlayer con el <a rel="noopener noreferrer" href="https://vite.dev/guide/why.html#why-bundle-for-production" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">bundler Vite<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a>, así como middleware para detectar la configuración regional preferida del usuario, gestionar cookies y manejar redirecciones de URL.</p> </li></ul></div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">2</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-2-configuracion-de-tu-proyecto" aria-label="Paso 2: Configuración de tu proyecto">Configuración de tu proyecto</h3></div> <p>Crea un archivo de configuración para configurar los idiomas de tu aplicación:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">intlayer.config.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { Locales, type IntlayerConfig } from "intlayer";</span><span class="line block w-full"></span><span class="line block w-full">const config: IntlayerConfig = {</span><span class="line block w-full"> internationalization: {</span><span class="line block w-full"> locales: [</span><span class="line block w-full"> Locales.ENGLISH,</span><span class="line block w-full"> Locales.FRENCH,</span><span class="line block w-full"> Locales.SPANISH,</span><span class="line block w-full"> // Tus otros locales</span><span class="line block w-full"> ],</span><span class="line block w-full"> defaultLocale: Locales.ENGLISH,</span><span class="line block w-full"> },</span><span class="line block w-full">};</span><span class="line block w-full"></span><span class="line block w-full">export default config;</span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">A través de este archivo de configuración, puedes configurar URLs localizadas, redirección mediante middleware, nombres de cookies, la ubicación y extensión de tus declaraciones de contenido, desactivar los logs de Intlayer en la consola y más. Para una lista completa de los parámetros disponibles, consulta la <a href="/es/doc/concept/configuration" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">documentación de configuración</a>.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">3</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-3-integra-intlayer-en-tu-configuracion-de-vite" aria-label="Paso 3: Integra Intlayer en tu configuración de Vite">Integra Intlayer en tu configuración de Vite</h3></div> <p>Agrega el plugin intlayer en tu configuración.</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">vite.config.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { defineConfig } from "vite";</span><span class="line block w-full">import { svelte } from "@sveltejs/vite-plugin-svelte";</span><span class="line block w-full">import { intlayer } from "vite-intlayer";</span><span class="line block w-full"></span><span class="line block w-full">// https://vitejs.dev/config/</span><span class="line block w-full">export default defineConfig({</span><span class="line block w-full"> plugins: [svelte(), intlayer()],</span><span class="line block w-full">});</span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">El plugin <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer()</code> para Vite se utiliza para integrar Intlayer con Vite. Asegura la construcción de los archivos de declaración de contenido y los supervisa en modo desarrollo. Define las variables de entorno de Intlayer dentro de la aplicación Vite. Además, proporciona alias para optimizar el rendimiento.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">4</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-4-declara-tu-contenido" aria-label="Paso 4: Declara tu contenido">Declara tu contenido</h3></div> <p>Crea y administra tus declaraciones de contenido para almacenar traducciones:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/app.content.tsx</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Seleccionar formato de diccionario"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><pre class="min-w-0 max-w-full overflow-x-auto"><code>import { t, type Dictionary } from "intlayer"; const appContent = { key: "app", content: { title: t({ en: "Hello World", fr: "Bonjour le monde", es: "Hola mundo", }), }, } satisfies Dictionary; export default appContent;</code></pre></div></div> <!-- --> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Tus declaraciones de contenido pueden definirse en cualquier parte de tu aplicación tan pronto como se incluyan en el directorio <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">contentDir</code> (por defecto, <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">./src</code>). Y coincidan con la extensión del archivo de declaración de contenido (por defecto, <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}</code>).</blockquote> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Para más detalles, consulta la <a href="/es/doc/concept/content" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">documentación de declaración de contenido</a>.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">5</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-5-utiliza-intlayer-en-tu-codigo" aria-label="Paso 5: Utiliza Intlayer en tu código">Utiliza Intlayer en tu código</h3></div> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script></span><span class="line block w-full"> import { useIntlayer } from "svelte-intlayer";</span><span class="line block w-full"></span><span class="line block w-full"> const content = useIntlayer("app");</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><div></span><span class="line block w-full"></span><span class="line block w-full"></span><span class="line block w-full"><!-- Renderizar contenido como contenido simple --></span><span class="line block w-full"><h1>{$content.title}</h1></span><span class="line block w-full"><!-- Para renderizar el contenido editable usando el editor --></span><span class="line block w-full"><h1>{@const Title = $content.title}<Title /></h1></span><span class="line block w-full"><!-- Para renderizar el contenido como una cadena --></span><span class="line block w-full"><div aria-label={$content.title.value}></div></span><span class="line block w-full"><div aria-label={$content.title.toString()}></div></span><span class="line block w-full"><div aria-label={String($content.title)}></div></span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Si su aplicación ya existe, puede utilizar el <a href="/es/doc/compiler" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">Compilador Intlayer</a>, así como el <a href="/es/doc/concept/cli/extract" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">comando de extracción</a>, para transformar miles de componentes en un segundo.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">6</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-6-cambiar-el-idioma-de-tu-contenido" aria-label="Paso 6: Cambiar el idioma de tu contenido">Cambiar el idioma de tu contenido</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opcional</span></div> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { getLocaleName } from 'intlayer';</span><span class="line block w-full">import { useLocale } from "svelte-intlayer";</span><span class="line block w-full"></span><span class="line block w-full">// Obtener información del locale y la función setLocale</span><span class="line block w-full">const { locale, availableLocales, setLocale } = useLocale();</span><span class="line block w-full"></span><span class="line block w-full">// Manejar el cambio de locale</span><span class="line block w-full">const changeLocale = (event: Event) => {</span><span class="line block w-full"> const target = event.target as HTMLSelectElement;</span><span class="line block w-full"> const newLocale = target.value;</span><span class="line block w-full"> setLocale(newLocale);</span><span class="line block w-full">};</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><div></span><span class="line block w-full"> <select value={$locale} on:change={changeLocale}></span><span class="line block w-full"> {#each availableLocales ?? [] as loc}</span><span class="line block w-full"> <option value={loc}></span><span class="line block w-full"> {getLocaleName(loc)}</span><span class="line block w-full"> </option></span><span class="line block w-full"> {/each}</span><span class="line block w-full"> </select></span><span class="line block w-full"></div></span></code></pre></div></div><!--/$--></div></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">7</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-7-renderizar-markdown" aria-label="Paso 7: Renderizar Markdown">Renderizar Markdown</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opcional</span></div> <p>Intlayer soporta renderizar contenido Markdown directamente en tu aplicación Svelte. Por defecto, Markdown se trata como texto plano. Para convertir Markdown en HTML enriquecido, puedes integrar <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">@humanspeak/svelte-markdown</code> u otro parser de markdown.</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Para ver cómo declarar contenido markdown usando el paquete <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code>, consulta la <a rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer/tree/main/docs/docs/es/dictionary/markdown.md" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">documentación de markdown<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a>.</blockquote> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script></span><span class="line block w-full"> import { setIntlayerMarkdown } from "svelte-intlayer";</span><span class="line block w-full"></span><span class="line block w-full"> setIntlayerMarkdown((markdown) =></span><span class="line block w-full"> // renderizar el contenido markdown como una cadena</span><span class="line block w-full"> return markdown;</span><span class="line block w-full"> );</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><h1>{$content.markdownContent}</h1></span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">También puedes acceder a los datos del front-matter de tu markdown usando la propiedad <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">content.markdownContent.metadata.xxx</code>.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">8</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-8-configurar-el-editor-/-cms-de-intlayer" aria-label="Paso 8: Configurar el editor / CMS de intlayer">Configurar el editor / CMS de intlayer</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opcional</span></div> <p>Para configurar el editor de intlayer, debes seguir la <a href="/es/doc/concept/editor" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">documentación del editor de intlayer</a>.</p> <p>Para configurar el CMS de intlayer, debes seguir la <a href="/es/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">documentación del CMS de intlayer</a>.</p> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">7</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-7-anadir-enrutamiento-por-localeizado-a-tu-aplicacion" aria-label="Paso 7: Añadir enrutamiento por localeizado a tu aplicación">Añadir enrutamiento por localeizado a tu aplicación</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opcional</span></div> <p>Para manejar el enrutamiento por localeizado en tu aplicación Svelte, puedes usar <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code> junto con <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">localeFlatMap</code> de Intlayer para generar rutas para cada locale.</p> <p>Primero, instala <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Seleccionar gestor de paquetes"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npm install svelte-spa-router</span><span class="line block w-full">npx intlayer init</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> <p>Luego, crea un archivo <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">Router.svelte</code> para definir tus rutas:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/Router.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { localeFlatMap } from "intlayer";</span><span class="line block w-full">import Router from "svelte-spa-router";</span><span class="line block w-full">import { wrap } from "svelte-spa-router/wrap";</span><span class="line block w-full">import App from "./App.svelte";</span><span class="line block w-full"></span><span class="line block w-full">const routes = Object.fromEntries(</span><span class="line block w-full"> localeFlatMap(({locale, urlPrefix}) => [</span><span class="line block w-full"> [</span><span class="line block w-full"> urlPrefix || '/',</span><span class="line block w-full"> wrap({</span><span class="line block w-full"> component: App as any,</span><span class="line block w-full"> props: {</span><span class="line block w-full"> locale,</span><span class="line block w-full"> },</span><span class="line block w-full"> }),</span><span class="line block w-full"> ],</span><span class="line block w-full"> ])</span><span class="line block w-full">);</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><Router {routes} /></span></code></pre></div></div><!--/$--></div></div></div> <p>Actualiza tu <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">main.ts</code> para montar el componente <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">Router</code> en lugar de <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">App</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/main.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { mount } from "svelte";</span><span class="line block w-full">import Router from "./Router.svelte";</span><span class="line block w-full"></span><span class="line block w-full">const app = mount(Router, {</span><span class="line block w-full"> target: document.getElementById("app")!,</span><span class="line block w-full">});</span><span class="line block w-full"></span><span class="line block w-full">export default app;</span></code></pre></div></div><!--/$--></div></div></div> <p>Finalmente, actualiza tu <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">App.svelte</code> para recibir la propiedad <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">locale</code> y usarla con <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">useIntlayer</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import type { Locale } from 'intlayer';</span><span class="line block w-full">import { useIntlayer } from "svelte-intlayer";</span><span class="line block w-full">import Counter from './lib/Counter.svelte';</span><span class="line block w-full">import LocaleSwitcher from './lib/LocaleSwitcher.svelte';</span><span class="line block w-full"></span><span class="line block w-full">export let locale: Locale;</span><span class="line block w-full"></span><span class="line block w-full">$: content = useIntlayer('app', locale);</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><main></span><span class="line block w-full"> <div class="locale-switcher-container"></span><span class="line block w-full"> <LocaleSwitcher currentLocale={locale} /></span><span class="line block w-full"> </div></span><span class="line block w-full"></span><span class="line block w-full"> <!-- ... resto de tu aplicación ... --></span><span class="line block w-full"></main></span></code></pre></div></div><!--/$--></div></div></div> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="configurar-el-enrutamiento-del-lado-del-servidor-opcional" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Configurar el enrutamiento del lado del servidor (Opcional)</h4><p>Paralelamente, también puedes usar <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayerProxy</code> para añadir enrutamiento del lado del servidor a tu aplicación. Este plugin detectará automáticamente la locale actual basada en la URL y establecerá la cookie de locale correspondiente. Si no se especifica ninguna locale, el plugin determinará la locale más adecuada según las preferencias de idioma del navegador del usuario. Si no se detecta ninguna locale, redirigirá a la locale por defecto.</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Ten en cuenta que para usar <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayerProxy</code> en producción, necesitas mover el paquete <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">vite-intlayer</code> de <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">devDependencies</code> a <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">dependencies</code>.</blockquote> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">vite.config.ts</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Seleccionar formato de código"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><pre class="min-w-0 max-w-full overflow-x-auto"><code>import { defineConfig } from "vite"; import { svelte } from "@sveltejs/vite-plugin-svelte"; import { intlayer, intlayerProxy } from "vite-intlayer"; plugins: [intlayerProxy(), // should be placed first svelte(), intlayer()], });</code></pre></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">8</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-8-cambiar-la-url-cuando-cambia-la-locale" aria-label="Paso 8: Cambiar la URL cuando cambia la locale">Cambiar la URL cuando cambia la locale</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opcional</span></div> <p>Para permitir que los usuarios cambien de idioma y actualicen la URL en consecuencia, puedes crear un componente <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">LocaleSwitcher</code>. Este componente usará <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getLocalizedUrl</code> de <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code> y <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">push</code> de <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code>.</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/lib/LocaleSwitcher.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { getLocaleName, getLocalizedUrl } from "intlayer";</span><span class="line block w-full">import { useLocale } from "svelte-intlayer";</span><span class="line block w-full">import { push } from "svelte-spa-router";</span><span class="line block w-full"></span><span class="line block w-full">export let currentLocale: string | undefined = undefined;</span><span class="line block w-full"></span><span class="line block w-full">// Obtener información de la locale</span><span class="line block w-full">const { locale, availableLocales } = useLocale();</span><span class="line block w-full"></span><span class="line block w-full">// Manejar el cambio de locale</span><span class="line block w-full">const changeLocale = (event: Event) => {</span><span class="line block w-full"> plugins: [intlayerProxy(), // should be placed first</span><span class="line block w-full"> svelte(), intlayer()],</span><span class="line block w-full">});</span></code></pre></div></div><!--/$--></div></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">8</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-8-cambiar-la-url-cuando-cambia-la-configuracion-regional" aria-label="Paso 8: Cambiar la URL cuando cambia la configuración regional">Cambiar la URL cuando cambia la configuración regional</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opcional</span></div> <p>Para permitir que los usuarios cambien de idioma y actualicen la URL en consecuencia, puedes crear un componente <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">LocaleSwitcher</code>. Este componente utilizará <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getLocalizedUrl</code> de <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code> y <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">push</code> de <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code>.</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/lib/LocaleSwitcher.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { getLocaleName, getLocalizedUrl } from "intlayer";</span><span class="line block w-full">import { useLocale } from "svelte-intlayer";</span><span class="line block w-full">import { push } from "svelte-spa-router";</span><span class="line block w-full"></span><span class="line block w-full">export let currentLocale: string | undefined = undefined;</span><span class="line block w-full"></span><span class="line block w-full">// Obtener información de la configuración regional</span><span class="line block w-full">const { locale, availableLocales } = useLocale();</span><span class="line block w-full"></span><span class="line block w-full">// Manejar el cambio de configuración regional</span><span class="line block w-full">const changeLocale = (event: Event) => {</span><span class="line block w-full"> const target = event.target as HTMLSelectElement;</span><span class="line block w-full"> const newLocale = target.value;</span><span class="line block w-full"> const currentUrl = window.location.pathname;</span><span class="line block w-full"> const url = getLocalizedUrl( currentUrl, newLocale);</span><span class="line block w-full"> push(url);</span><span class="line block w-full">};</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><div class="locale-switcher"></span><span class="line block w-full"> <select value={currentLocale ?? $locale} onchange={changeLocale}></span><span class="line block w-full"> {#each availableLocales ?? [] as loc}</span><span class="line block w-full"> <option value={loc}></span><span class="line block w-full"> {getLocaleName(loc)}</span><span class="line block w-full"> </option></span><span class="line block w-full"> {/each}</span><span class="line block w-full"> </select></span><span class="line block w-full"></div></span></code></pre></div></div><!--/$--></div></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">9</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-9-extraer-el-contenido-de-tus-componentes" aria-label="Paso 9: Extraer el contenido de tus componentes">Extraer el contenido de tus componentes</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opcional</span></div> <p>Si tienes una base de código existente, transformar miles de archivos puede llevar mucho tiempo.</p> <p>Para facilitar este proceso, Intlayer propone un <a href="/es/doc/compiler" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">compilador</a> / <a href="/es/doc/concept/cli/extract" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">extractor</a> para transformar tus componentes y extraer el contenido.</p> <p>Para configurarlo, puedes agregar una sección <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">compiler</code> en tu archivo <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer.config.ts</code> :</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">intlayer.config.ts</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Seleccionar formato de código"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><pre class="min-w-0 max-w-full overflow-x-auto"><code>import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... Resto de tu configuración compiler: { /** * Indica si el compilador debe estar habilitado. */ enabled: true, /** * Define la ruta de los archivos de salida */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * Indica si los componentes deben guardarse después de ser transformados. De esa manera, el compilador se puede ejecutar solo una vez para transformar la aplicación y luego se puede eliminar. */ saveComponents: false, /** * Prefijo de clave de diccionario */ dictionaryKeyPrefix: "", }, }; export default config;</code></pre></div></div> <div class="relative w-full rounded-xl border border-card"><div class="flex shrink-0 gap-3 p-3 sticky rounded-xl top-24 z-5 bg-background/70 backdrop-blur overflow-x-auto"><div class="relative z-0 flex size-full flex-row items-center gap-2 border-text text-text" aria-orientation="horizontal" aria-multiselectable="false" role="tablist"><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none" data-active="true" role="tab" aria-selected="true" aria-controls="tabpanel-Comando de extracción" id="tab-Comando de extracción" type="button" tabindex="0">Comando de extracción</button><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none text-neutral/70" data-active="false" role="tab" aria-selected="false" aria-controls="tabpanel-Compilador Babel" id="tab-Compilador Babel" type="button" tabindex="-1">Compilador Babel</button></div></div><div class="relative w-full min-w-0 overflow-x-clip [-webkit-clip-path:inset(0)] [clip-path:inset(0)]" style="touch-action:pan-y"><div role="tablist" aria-orientation="horizontal" class="grid w-full min-w-0 transition-transform duration-300 ease-in-out" style="grid-template-columns:repeat(2, 100%);transform:translateX(-0%)"><div role="tabpanel" aria-labelledby="tab-Comando de extracción" id="tabpanel-Comando de extracción" aria-hidden="false" tabindex="0" data-active="true" class="w-full min-w-0 p-3 opacity-100 transition-opacity duration-300 ease-in-out"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <p>Ejecuta el extractor para transformar tus componentes y extraer el contenido</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Seleccionar gestor de paquetes"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npx intlayer extract</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> </div></div><div role="tabpanel" aria-labelledby="tab-Compilador Babel" id="tabpanel-Compilador Babel" aria-hidden="true" tabindex="-1" data-active="false" class="w-full min-w-0 p-3 transition-opacity duration-300 ease-in-out pointer-events-none opacity-0"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <p>Actualiza tu archivo <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">vite.config.ts</code> para incluir el plugin <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayerCompiler</code> :</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">vite.config.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { defineConfig } from "vite";</span><span class="line block w-full">import { intlayer, intlayerCompiler } from "vite-intlayer";</span><span class="line block w-full"></span><span class="line block w-full">export default defineConfig({</span><span class="line block w-full"> plugins: [</span><span class="line block w-full"> intlayer(),</span><span class="line block w-full"> intlayerCompiler(), // Agrega el plugin del compilador</span><span class="line block w-full"> ],</span><span class="line block w-full">});</span></code></pre></div></div><!--/$--></div></div></div> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Seleccionar gestor de paquetes"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npm run build # O npm run dev</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> </div></div></div></div></div></div></li></ol><h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="opcional-sitemap-y-robotstxt-generacion-en-el-build" aria-label="Click to scroll to section undefined and copy the link to the clipboard">(Opcional) Sitemap y robots.txt (generación en el build)</h3><p>Intlayer ofrece utilidades - <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generateSitemap</code> y <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getMultilingualUrls</code> - para formatear un <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">sitemap.xml</code> multilingüe y un <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">robots.txt</code> listos para rastreadores y escribirlos automáticamente en <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">public/</code>. Lo habitual es ejecutar un script pequeño de Node <strong class="text-text">antes</strong> de Vite (por ejemplo hooks npm <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">predev</code> / <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">prebuild</code>) para que esos archivos existan al compilar o al levantar el servidor de desarrollo.</p> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="sitemap" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Sitemap</h4><p>El generador de sitemaps de Intlayer respeta tu configuración de idiomas y añade los metadatos habituales.</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">El sitemap admite el espacio de nombres <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">xhtml:link</code> (hreflang). En lugar de listar solo URLs sueltas, Intlayer enlaza de forma bidireccional todas las versiones localizadas de cada página (p. ej. <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">/about</code>, <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">/fr/about</code> o <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">/about?lang=fr</code> según el modo de rutas).</blockquote> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="robotstxt" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Robots.txt</h4><p>Usa <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getMultilingualUrls</code> para que las reglas <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">Disallow</code> cubran todas las variantes localizadas de rutas sensibles.</p> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="1-crear-generate-seomjs-en-la-raiz-del-proyecto" aria-label="Click to scroll to section undefined and copy the link to the clipboard">1. Crear <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generate-seo.mjs</code> en la raíz del proyecto</h4><div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">generate-seo.mjs</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import fs from "fs";</span><span class="line block w-full">import path from "path";</span><span class="line block w-full">import { fileURLToPath } from "url";</span><span class="line block w-full">import { generateSitemap, getMultilingualUrls } from "intlayer";</span><span class="line block w-full"></span><span class="line block w-full">const __dirname = path.dirname(fileURLToPath(import.meta.url));</span><span class="line block w-full"></span><span class="line block w-full">const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace(</span><span class="line block w-full"> /\/$/,</span><span class="line block w-full"> ""</span><span class="line block w-full">);</span><span class="line block w-full"></span><span class="line block w-full">const pathList = [</span><span class="line block w-full"> { path: "/", changefreq: "daily", priority: 1.0 },</span><span class="line block w-full"> { path: "/about", changefreq: "monthly", priority: 0.7 },</span><span class="line block w-full">];</span><span class="line block w-full"></span><span class="line block w-full">const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });</span><span class="line block w-full">fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);</span><span class="line block w-full"></span><span class="line block w-full">const getAllMultilingualUrls = (urls) =></span><span class="line block w-full"> urls.flatMap((url) => Object.values(getMultilingualUrls(url)));</span><span class="line block w-full"></span><span class="line block w-full">const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);</span><span class="line block w-full"></span><span class="line block w-full">const robotsTxt = [</span><span class="line block w-full"> "User-agent: *",</span><span class="line block w-full"> "Allow: /",</span><span class="line block w-full"> ...disallowedPaths.map((path) => `Disallow: ${path}`),</span><span class="line block w-full"> "",</span><span class="line block w-full"> `Sitemap: ${SITE_URL}/sitemap.xml`,</span><span class="line block w-full">].join("\n");</span><span class="line block w-full"></span><span class="line block w-full">fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);</span><span class="line block w-full"></span><span class="line block w-full">console.log("SEO files generated successfully.");</span></code></pre></div></div><!--/$--></div></div></div> <p>Debe estar instalado <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code> para poder importarlo. Define <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">SITE_URL</code> en el entorno en producción (por ejemplo en CI).</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Prefiere <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generate-seo.mjs</code> para ESM en Node. Si usas <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generate-seo.js</code>, asegúrate de tener <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">"type": "module"</code> en <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">package.json</code> o ejecuta Node con ESM.</blockquote> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="2-ejecutar-el-script-antes-de-vite" aria-label="Click to scroll to section undefined and copy the link to the clipboard">2. Ejecutar el script antes de Vite</h4><div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">package.json</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">{</span><span class="line block w-full"> "scripts": {</span><span class="line block w-full"> "dev": "vite",</span><span class="line block w-full"> "prebuild": "node generate-seo.mjs",</span><span class="line block w-full"> "build": "vite build",</span><span class="line block w-full"> "preview": "vite preview"</span><span class="line block w-full"> }</span><span class="line block w-full">}</span></code></pre></div></div><!--/$--></div></div></div> <p>Ajusta los comandos si usas pnpm o yarn. También puedes llamar al script desde CI u otro paso del pipeline.</p> <h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="configuracion-de-git" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Configuración de Git</h3><p>Se recomienda ignorar los archivos generados por Intlayer. Esto te permite evitar comprometerlos en tu repositorio Git.</p> <p>Para hacerlo, puedes agregar las siguientes instrucciones a tu archivo <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">.gitignore</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Copiar contenido" aria-busy="false" aria-disabled="false" tabindex="0" title="Copiar contenido"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Copiar contenido</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Copiar código</strong><p class="text-neutral">Copiar el código al portapapeles</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"># Ignorar los archivos generados por Intlayer</span><span class="line block w-full">.intlayer</span></code></pre></div></div><!--/$--></div></div></div> <h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="extension-para-vs-code" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Extensión para VS Code</h3><p>Para mejorar tu experiencia de desarrollo con Intlayer, puedes instalar la extensión oficial <strong class="text-text">Intlayer VS Code Extension</strong>.</p> <p><a rel="noopener noreferrer" href="https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">Instalar desde el VS Code Marketplace<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></p> <p>Esta extensión ofrece:</p> <ul class="mt-5 flex list-disc flex-col gap-3 pl-5 marker:text-neutral/80"><li><strong class="text-text">Autocompletado</strong> para las claves de traducción.</li><li><strong class="text-text">Detección de errores en tiempo real</strong> para traducciones faltantes.</li><li><strong class="text-text">Vistas previas en línea</strong> del contenido traducido.</li><li><strong class="text-text">Acciones rápidas</strong> para crear y actualizar traducciones fácilmente.</li></ul><p>Para más detalles sobre cómo usar la extensión, consulta la <a href="/es/doc/vs-code-extension" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">documentación de la extensión Intlayer para VS Code</a>.</p> <hr class="mx-6 mt-16 border-dashed text-neutral"/><h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="ir-mas-alla" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Ir Más Allá</h3><p>Para ir más allá, puedes implementar el <a href="/es/doc/concept/editor" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">editor visual</a> o externalizar tu contenido usando el <a href="/es/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">CMS</a>.</p></div></div><div class="my-3 flex flex-row flex-wrap justify-between gap-3 px-10 text-sm"><a aria-label="Ir a la sección anterior" target="_self" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative cursor-pointer border-[1.3px] border-current text-center font-medium ring-0 *:text-text hover:bg-current/20 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral min-h-8 text-sm max-md:py-2 ring-neutral/20 wrap-break-words ml-auto flex h-auto w-full max-w-1/2 flex-1 flex-row items-center justify-start gap-2 whitespace-normal text-nowrap rounded-lg px-2 py-5" to="/es/doc/environment/vite-and-solid"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left size-5" aria-hidden="true"><path d="m15 18-6-6 6-6"></path></svg><span class="text-text">Vite y Solid</span></a><a aria-label="Ir a la siguiente sección" target="_self" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative cursor-pointer border-[1.3px] border-current text-center font-medium ring-0 *:text-text hover:bg-current/20 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral min-h-8 text-sm max-md:py-2 ring-neutral/20 wrap-break-words ml-auto flex h-auto w-full max-w-1/2 flex-1 flex-row items-center justify-end gap-2 whitespace-normal text-nowrap rounded-lg px-2 py-5" to="/es/doc/environment/sveltekit"><span class="text-text">SvelteKit</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right size-5" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></a></div></div></article><aside aria-label="En esta página" class="flex flex-none flex-row max-lg:hidden"><div class="relative flex min-h-0 w-70 flex-1 flex-col"><div class="relative z-10 mt-10 flex w-full flex-row items-center pt-2"><h2 class="ml-3 text-nowrap text-neutral/80 text-sm uppercase">En esta página</h2><div class="absolute bottom-0 left-0 h-8 w-full translate-y-full bg-linear-to-b from-background/90 backdrop-blur"></div></div><div class="relative flex min-h-0 w-full flex-1 overflow-hidden rounded-2xl md:pt-0"><div class="mt-4 flex pl-3"><nav class="flex h-full min-h-0 flex-col"><ul class="flex min-h-0 flex-1 flex-col gap-3 overflow-auto pt-8 pr-3 pb-20"></ul></nav></div><div class="border-dashed transition max-h-[80%] cursor-ns-resize border-neutral-200 border-t-[1px] dark:border-neutral-950 before:absolute before:top-0 before:left-1/2 before:z-10 before:block before:h-1 before:w-10 before:-translate-x-1/2 before:-translate-y-1/2 before:transform before:cursor-ns-resize before:rounded-full before:bg-neutral-200 before:transition before:content-[""] dark:before:bg-neutral-950 active:border-neutral-400 active:before:bg-neutral-400 dark:active:border-neutral-600 active:dark:before:bg-neutral-600 absolute bottom-0 left-0 size-full bg-background/70 backdrop-blur" style="height:250px;min-height:0px" aria-valuemin="0" aria-valuenow="250" aria-label="Resizable component - drag the handle to adjust height" role="slider" tabindex="0"><div role="presentation" class="absolute top-0 left-0 size-full cursor-default overflow-hidden"><div class="justify-bottom size-full text-sm"><div class="flex size-full flex-col items-center justify-between overflow-auto"><div class="relative flex size-full flex-auto"><div class="absolute inset-0 size-full"><div data-testid="virtuoso-scroller" data-virtuoso-scroller="true" style="height:100%;outline:none;overflow-y:auto;position:relative;-webkit-overflow-scrolling:touch" tabindex="0"><div data-viewport-type="element" style="height:100%;position:absolute;top:0;width:100%"><div data-testid="virtuoso-item-list" style="box-sizing:border-box;margin-top:0;padding-bottom:0;padding-top:0"></div><div></div></div></div></div></div><div class="w-full flex-1"><form class="item-end flex h-auto flex-col items-end justify-center gap-3 px-4 py-3" autoComplete="off" noValidate=""><div class="flex w-full flex-col flex-wrap gap-2 px-1 py-2" id="_R_ukqj9bcq_"><textarea class="w-full select-text text-base shadow-none outline-none transition-all duration-300 md:text-sm ring-0 disabled:opacity-50 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text bg-neutral-50 dark:bg-neutral-950 ring-text/20 disabled:ring-0 hover:ring-3 focus-within:ring-4 focus-visible:outline-none focus-visible:ring-4 [box-shadow:none] focus:[box-shadow:none] aria-invalid:border-error px-2 py-3 md:py-2 overflow-y-auto resize-none" data-testid="question" id="question" name="question" rows="2" placeholder="Pregúntame cualquier cosa..." aria-label="Pregúntale a nuestra documentación inteligente" aria-describedby="_R_ukqj9bcq_-form-item-description" aria-invalid="false"></textarea></div><div class="ml-auto flex items-center justify-end gap-2 max-md:w-full"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-chat-info" aria-haspopup="true"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info z-50 mr-3 text-neutral" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4"></path><path d="M12 8h.01"></path></svg><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 border-text gap-0 absolute z-60 min-w-full rounded-md ring-1 ring-neutral left-1/2 -translate-x-1/2 bottom-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-1/2 before:-translate-x-1/2 before:-bottom-2.5 before:border-t-[10px] before:border-t-neutral before:border-r-[10px] before:border-r-transparent before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800" role="group" aria-labelledby="unrollable-panel-button-chat-info" id="unrollable-panel-chat-info"><p class="min-w-60 max-w-60 p-4 text-neutral text-xs">Las conversaciones son anónimas y se revisan regularmente para abordar problemas comunes. No dudes en compartir ideas de funcionalidades, comentarios sobre la documentación o cualquier cosa relacionada con Intlayer, usamos esta información para definir nuestra hoja de ruta y mejorar el producto.</p></div></div><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current! hover:bg-current/20 focus-visible:bg-current/20 hover:ring-5 focus-visible:ring-5 aria-selected:ring-5 justify-center text-center" aria-label="Haga clic para abrir el chatbot" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Haga clic para abrir el chatbot</span></button><button disabled="" role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current! hover:bg-current/20 focus-visible:bg-current/20 hover:ring-5 focus-visible:ring-5 aria-selected:ring-5 justify-center text-center opacity-0" aria-label="Haga clic para borrar" aria-busy="false" aria-disabled="true"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eraser flex-none shrink-0 size-4" aria-hidden="true"><path d="M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21"></path><path d="m5.082 11.09 8.828 8.828"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Haga clic para borrar</span></button><button role="button" type="submit" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl bg-current hover:bg-current/90 hover:ring-5 aria-selected:ring-5 justify-center text-center" aria-label="Haga clic para enviar la pregunta" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up flex-none shrink-0 size-4" aria-hidden="true"><path d="m5 12 7-7 7 7"></path><path d="M12 19V5"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Haga clic para enviar la pregunta</span></button></div></form></div></div></div></div></div></div></div></aside></div></div></main><div class="flex w-full flex-0 flex-col"></div><script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script><!--/$--><script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-Bw9yQaJj.js","/assets/chunk-Cyuzqnbw.js","/assets/preload-helper-B8fFrdxC.js","/assets/contributors-hwMJZD2h.js","/assets/frequent-questions-ColnmfP0.js","/assets/buildOrganizationJsonLd-CDgipqaX.js","/assets/_-XYNRneuJ.js","/assets/buildWebsiteJsonLd-C0N39csk.js","/assets/esm-3MTWDjoQ.js","/assets/package_mock-BDluuYi_.js","/assets/NotFoundComponent-Bgr-e0gL.js","/assets/_-C4167Raf.js","/assets/blog-BzPtT7kP.js","/assets/chat-D_eebsPv.js","/assets/search-CiZlrVdG.js","/assets/_-PkJ9jxsi.js","/assets/privacy-notice-gc0H7wqY.js","/assets/terms-of-service-B15yrD0Q.js","/assets/seo-6taQxeNF.js","/assets/dist-BB4NsXlo.js","/assets/dist-ClM9H4W8.js","/assets/scroll-restoration-Ds11_EjL.js","/assets/IsRestoringProvider-DPTyBt-E.js","/assets/mutation-Bsa9tKKh.js","/assets/Match-DiNoTNTM.js","/assets/useStore-DlCoWsDY.js","/assets/matchContext-IegwGVKo.js","/assets/defer-BLyZxUjE.js","/assets/createServerFn-CXa74b5t.js","/assets/dist-BlKQxgFq.js","/assets/cn-SXa2TCS8.js","/assets/features-animation-Du4JOzyU.js","/assets/Link-aa68EiCJ.js","/assets/x-DL_kax-t.js","/assets/react-dom-BJD-Lcob.js","/assets/compiler-runtime-CQOss3SY.js","/assets/jsx-runtime-CXk3X59i.js","/assets/react-Bi8cP4Js.js","/assets/getHTMLTextDir-C8-9aPEx.js","/assets/usePersistedStore-BzkChKRN.js","/assets/routes-Cre-4Fxz.js","/assets/esm-DRNfMHzC.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-Bw9yQaJj.js"}}]},"/{-$locale}":$R[8]={preloads:$R[9]=["/assets/route-CQW21vXM.js"]},"/{-$locale}/_docs":$R[10]={preloads:$R[11]=["/assets/route-DnecKG0E.js","/assets/PageLayout-U6A7rpHn.js"]},"/{-$locale}/_docs/doc/$":$R[12]={preloads:$R[13]=["/assets/_-BJyRGMQ_.js","/assets/DocPageNavigation-Cjem7A8P.js","/assets/DocumentationRender-BDCy3TqB.js","/assets/DocPageLayout-5Kt9kfLJ.js"]}}},matches:$R[14]=[$R[15]={i:"__root__�",u:1785032694944,s:"success",ssr:!0},$R[16]={i:"�{-$locale}�es",u:1785032694962,s:"success",ssr:!0},$R[17]={i:"�{-$locale}�_docs�es",u:1785032694962,s:"success",ssr:!0},$R[18]={i:"�{-$locale}�_docs�doc�$�es�doc�environment�vite-and-svelte",u:1785032695225,s:"success",l:$R[19]={locale:"es",slugs:$R[20]=["environment","vite-and-svelte"],docData:$R[21]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Svelte i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vite + Svelte multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[22]=["Internacionalización","Documentación","Intlayer","Vite","Svelte","JavaScript"],slugs:$R[23]=["doc","environment","vite-and-svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-svelte-template",applicationShowcase:"https://intlayer-vite-svelte-template.vercel.app",history:$R[24]=[$R[25]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[26]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[27]={version:"5.5.11",date:"2025-11-19",changes:"\"Actualización de la documentación\""},$R[28]={version:"5.5.10",date:"2025-06-29",changes:"\"Inicio del historial\""}],author:$R[29]={name:"Aymeric PINEAU",title:"Founder of Intlayer, open-source multilingual CMS for Next.js and React",url:"https://github.com/aymericzip",image:"https://avatars.githubusercontent.com/u/62554073?v=4&size=124",socialMedias:$R[30]=["https://www.linkedin.com/in/aymericpineau/","https://x.com/aymericzip","https://github.com/aymericzip"],knowsAbout:$R[31]=["Expert in technical internationalization","Senior software engineer","Multilingual SEO","AI translation automation"],github:"aymericzip"},docKey:"./docs/en/intlayer_with_vite+svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+svelte.md",relativeUrl:"/es/doc/environment/vite-and-svelte",url:"https://intlayer.org/es/doc/environment/vite-and-svelte"},defaultDocData:$R[32]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Svelte i18n - Complete guide to translate your app",description:"No more i18next. The 2026 guide to building a multilingual (i18n) Vite + Svelte app. Translate with AI agents and optimize bundle size, SEO and performances.",keywords:$R[33]=["Internationalization","Documentation","Intlayer","Vite","Svelte","JavaScript"],slugs:$R[34]=["doc","environment","vite-and-svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-svelte-template",applicationShowcase:"https://intlayer-vite-svelte-template.vercel.app",history:$R[35]=[$R[36]={version:"8.9.0",date:"2026-05-04",changes:"\"Update Solid useIntlayer API usage to direct property access\""},$R[37]={version:"7.5.9",date:"2025-12-30",changes:"\"Add init command\""},$R[38]={version:"5.5.11",date:"2025-11-19",changes:"\"Update documentation\""},$R[39]={version:"5.5.10",date:"2025-06-29",changes:"\"Initial history\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_with_vite+svelte.md",relativeUrl:"/doc/environment/vite-and-svelte",url:"https://intlayer.org/doc/environment/vite-and-svelte"},docContent:"---\ncreatedAt: 2025-04-18\nupdatedAt: 2026-05-31\ntitle: \"Vite + Svelte i18n - Guía completa para traducir tu aplicación\"\ndescription: \"Sin más i18next. La guía 2026 para crear una aplicación Vite + Svelte multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.\"\nkeywords:\n - Internacionalización\n - Documentación\n - Intlayer\n - Vite\n - Svelte\n - JavaScript\nslugs:\n - doc\n - environment\n - vite-and-svelte\napplicationTemplate: https://github.com/aymericzip/intlayer-vite-svelte-template\napplicationShowcase: https://intlayer-vite-svelte-template.vercel.app\nhistory:\n - version: 8.9.0\n date: 2026-05-04\n changes: \"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\"\n - version: 7.5.9\n date: 2025-12-30\n changes: \"Agregar comando init\"\n - version: 5.5.11\n date: 2025-11-19\n changes: \"Actualización de la documentación\"\n - version: 5.5.10\n date: 2025-06-29\n changes: \"Inicio del historial\"\nauthor: aymericzip\n---\n\n# Traduce tu sitio web Vite y Svelte usando Intlayer | Internacionalización (i18n)\n\n\x3CTabs defaultTab=\"code\">\n \x3CTab label=\"Código\" value=\"code\">\n\n\x3Ciframe\n src=\"https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts\"\n className=\"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full\"\n title=\"Demo CodeSandbox - Intlayer\"\n sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n loading=\"lazy\"\n/>\n\n \x3C/Tab>\n \x3CTab label=\"Demo\" value=\"demo\">\n\n\x3Ciframe\n src=\"https://intlayer-vite-svelte-template.vercel.app\"\n className=\"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full\"\n title=\"Demo - intlayer-vite-svelte-template\"\n sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n loading=\"lazy\"\n/>\n\n \x3C/Tab>\n\x3C/Tabs>\n\n## Tabla de Contenidos\n\n\x3CTOC/>\n\n## ¿Por qué Intlayer en lugar de alternativas?\n\nEn comparación con soluciones principales como `svelte-i18n` o `i18next`, Intlayer es una solución que viene con optimizaciones integradas como:\n\n\x3CAccordionGroup>\n\n\x3CAccordion header=\"Cobertura completa Svelte\">\n\nIntlayer está optimizado para funcionar perfectamente con Svelte al ofrecer **alcance del contenido a nivel de componente**, **traducciones reactivas** y todas las funciones necesarias para escalar la internacionalización (i18n).\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Tamaño del bundle\">\n\nEn lugar de cargar archivos JSON masivos en sus páginas, cargue solo el contenido necesario. Intlayer ayuda a **reducir el tamaño de su bundle y de sus páginas hasta en un 50%**.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Mantenibilidad\">\n\nDeterminar el alcance del contenido de su aplicación **facilita el mantenimiento** para aplicaciones a gran escala. Puede duplicar o eliminar una sola carpeta de funciones sin la carga mental de revisar todo el código base de contenido. Además, Intlayer está **completamente escrito** para garantizar la precisión de su contenido.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Agente de IA\">\n\nLa ubicación conjunta de contenido **reduce el contexto necesario** para los modelos de lenguajes grandes (LLM). Intlayer también viene con un conjunto de herramientas, como una **CLI** para comprobar si faltan traducciones,**[LSP](/es/doc/lsp)**, **[MCP](/es/doc/mcp-server)** y **[agent skills](/es/doc/agent_skills)**, para que la experiencia del desarrollador (DX) sea aún más fluida para los agentes de IA.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Automatización\">\n\nUtilice la automatización para traducir su canal de CI/CD utilizando el LLM de su elección al costo de su proveedor de IA. Intlayer también ofrece un **compilador** para automatizar la extracción de contenido, así como una [plataforma web](/es/doc/concept/cms) para ayudar a **traducir en segundo plano**.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Actuación\">\n\nLa conexión de archivos JSON masivos a componentes puede provocar problemas de rendimiento y reactividad. Intlayer optimiza la carga de su contenido en el momento de la compilación.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Escalando sin ningún desarrollador\">\n\nMás que una simple solución i18n, Intlayer proporciona un **[editor visual] autohospedado(/es/doc/concept/editor)** y un **[CMS completo](/es/doc/concept/cms)** para ayudarle a administrar su contenido multilingüe en **tiempo real**, lo que facilita la colaboración con traductores, redactores y otros miembros del equipo. El contenido se puede almacenar de forma local y/o remota.\n\n\x3C/Accordion>\n\x3C/AccordionGroup>\n\n---\n\n## Guía Paso a Paso para Configurar Intlayer en una Aplicación Vite y Svelte\n\n\x3Ciframe\n src=\"https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts\"\n className=\"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full\"\n title=\"Demo CodeSandbox - Cómo internacionalizar tu aplicación usando Intlayer\"\n sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n loading=\"lazy\"\n/>\n\nConsulta la [Plantilla de Aplicación](https://github.com/aymericzip/intlayer-vite-svelte-template) en GitHub.\n\n\x3CSteps>\n\n\x3CStep number={1} title=\"Instalar Dependencias\">\n\nInstala los paquetes necesarios usando npm:\n\n```bash packageManager=\"npm\"\nnpm install intlayer svelte-intlayer\nnpm install vite-intlayer --save-dev\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add intlayer svelte-intlayer\npnpm add vite-intlayer --save-dev\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add intlayer svelte-intlayer\nyarn add vite-intlayer --save-dev\nyarn intlayer init\n```\n\n```bash packageManager=\"bun\"\nbun add intlayer svelte-intlayer\nbun add vite-intlayer --save-dev\nbun x intlayer init\n```\n\n- **intlayer**\n\n El paquete principal que proporciona herramientas de internacionalización para la gestión de configuración, traducción, [declaración de contenido](/es/doc/concept/content), transpileación y [comandos CLI](/es/doc/concept/cli).\n\n- **svelte-intlayer**\n El paquete que integra Intlayer con la aplicación Svelte. Proporciona proveedores de contexto y hooks para la internacionalización en Svelte.\n\n- **vite-intlayer**\n Incluye el plugin de Vite para integrar Intlayer con el [bundler Vite](https://vite.dev/guide/why.html#why-bundle-for-production), así como middleware para detectar la configuración regional preferida del usuario, gestionar cookies y manejar redirecciones de URL.\n\n\x3C/Step>\n\n\x3CStep number={2} title=\"Configuración de tu proyecto\">\n\nCrea un archivo de configuración para configurar los idiomas de tu aplicación:\n\n```typescript fileName=\"intlayer.config.ts\"\nimport { Locales, type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n internationalization: {\n locales: [\n Locales.ENGLISH,\n Locales.FRENCH,\n Locales.SPANISH,\n // Tus otros locales\n ],\n defaultLocale: Locales.ENGLISH,\n },\n};\n\nexport default config;\n```\n\n> A través de este archivo de configuración, puedes configurar URLs localizadas, redirección mediante middleware, nombres de cookies, la ubicación y extensión de tus declaraciones de contenido, desactivar los logs de Intlayer en la consola y más. Para una lista completa de los parámetros disponibles, consulta la [documentación de configuración](/es/doc/concept/configuration).\n\n\x3C/Step>\n\n\x3CStep number={3} title=\"Integra Intlayer en tu configuración de Vite\">\n\nAgrega el plugin intlayer en tu configuración.\n\n```typescript fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [svelte(), intlayer()],\n});\n```\n\n> El plugin `intlayer()` para Vite se utiliza para integrar Intlayer con Vite. Asegura la construcción de los archivos de declaración de contenido y los supervisa en modo desarrollo. Define las variables de entorno de Intlayer dentro de la aplicación Vite. Además, proporciona alias para optimizar el rendimiento.\n\n\x3C/Step>\n\n\x3CStep number={4} title=\"Declara tu contenido\">\n\nCrea y administra tus declaraciones de contenido para almacenar traducciones:\n\n```tsx fileName=\"src/app.content.tsx\" contentDeclarationFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { t, type Dictionary } from \"intlayer\";\n\nconst appContent = {\n key: \"app\",\n content: {\n title: t({\n en: \"Hello World\",\n fr: \"Bonjour le monde\",\n es: \"Hola mundo\",\n }),\n },\n} satisfies Dictionary;\n\nexport default appContent;\n```\n\n```json fileName=\"src/app.content.json\" contentDeclarationFormat=\"json\"\n{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"app\",\n \"content\": {\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Hello World\",\n \"fr\": \"Bonjour le monde\",\n \"es\": \"Hola mundo\"\n }\n }\n }\n}\n```\n\n> Tus declaraciones de contenido pueden definirse en cualquier parte de tu aplicación tan pronto como se incluyan en el directorio `contentDir` (por defecto, `./src`). Y coincidan con la extensión del archivo de declaración de contenido (por defecto, `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`).\n\n> Para más detalles, consulta la [documentación de declaración de contenido](/es/doc/concept/content).\n\n\x3C/Step>\n\n\x3CStep number={5} title=\"Utiliza Intlayer en tu código\">\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript>\n import { useIntlayer } from \"svelte-intlayer\";\n\n const content = useIntlayer(\"app\");\n\x3C/script>\n\n\x3Cdiv>\n\n\n\x3C!-- Renderizar contenido como contenido simple -->\n\x3Ch1>{$content.title}\x3C/h1>\n\x3C!-- Para renderizar el contenido editable usando el editor -->\n\x3Ch1>{@const Title = $content.title}\x3CTitle />\x3C/h1>\n\x3C!-- Para renderizar el contenido como una cadena -->\n\x3Cdiv aria-label={$content.title.value}>\x3C/div>\n\x3Cdiv aria-label={$content.title.toString()}>\x3C/div>\n\x3Cdiv aria-label={String($content.title)}>\x3C/div>\n```\n\n> Si su aplicación ya existe, puede utilizar el [Compilador Intlayer](/es/doc/compiler), así como el [comando de extracción](/es/doc/concept/cli/extract), para transformar miles de componentes en un segundo.\n\n\x3C/Step>\n\n\x3CStep number={6} title=\"Cambiar el idioma de tu contenido\" isOptional={true}>\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript lang=\"ts\">\nimport { getLocaleName } from 'intlayer';\nimport { useLocale } from \"svelte-intlayer\";\n\n// Obtener información del locale y la función setLocale\nconst { locale, availableLocales, setLocale } = useLocale();\n\n// Manejar el cambio de locale\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n setLocale(newLocale);\n};\n\x3C/script>\n\n\x3Cdiv>\n \x3Cselect value={$locale} on:change={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n```\n\n\x3C/Step>\n\n\x3CStep number={7} title=\"Renderizar Markdown\" isOptional={true}>\n\nIntlayer soporta renderizar contenido Markdown directamente en tu aplicación Svelte. Por defecto, Markdown se trata como texto plano. Para convertir Markdown en HTML enriquecido, puedes integrar `@humanspeak/svelte-markdown` u otro parser de markdown.\n\n> Para ver cómo declarar contenido markdown usando el paquete `intlayer`, consulta la [documentación de markdown](https://github.com/aymericzip/intlayer/tree/main/docs/docs/es/dictionary/markdown.md).\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript>\n import { setIntlayerMarkdown } from \"svelte-intlayer\";\n\n setIntlayerMarkdown((markdown) =>\n // renderizar el contenido markdown como una cadena\n return markdown;\n );\n\x3C/script>\n\n\x3Ch1>{$content.markdownContent}\x3C/h1>\n```\n\n> También puedes acceder a los datos del front-matter de tu markdown usando la propiedad `content.markdownContent.metadata.xxx`.\n\n\x3C/Step>\n\n\x3CStep number={8} title=\"Configurar el editor / CMS de intlayer\" isOptional={true}>\n\nPara configurar el editor de intlayer, debes seguir la [documentación del editor de intlayer](/es/doc/concept/editor).\n\nPara configurar el CMS de intlayer, debes seguir la [documentación del CMS de intlayer](/es/doc/concept/cms).\n\n\x3C/Step>\n\n\x3CStep number={7} title=\"Añadir enrutamiento por localeizado a tu aplicación\" isOptional={true}>\n\nPara manejar el enrutamiento por localeizado en tu aplicación Svelte, puedes usar `svelte-spa-router` junto con `localeFlatMap` de Intlayer para generar rutas para cada locale.\n\nPrimero, instala `svelte-spa-router`:\n\n```bash packageManager=\"npm\"\nnpm install svelte-spa-router\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add svelte-spa-router\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add svelte-spa-router\nyarn intlayer init\n```\n\n```bash packageManager=\"bun\"\nbun add svelte-spa-router\n```\n\nLuego, crea un archivo `Router.svelte` para definir tus rutas:\n\n```svelte fileName=\"src/Router.svelte\"\n\x3Cscript lang=\"ts\">\nimport { localeFlatMap } from \"intlayer\";\nimport Router from \"svelte-spa-router\";\nimport { wrap } from \"svelte-spa-router/wrap\";\nimport App from \"./App.svelte\";\n\nconst routes = Object.fromEntries(\n localeFlatMap(({locale, urlPrefix}) => [\n [\n urlPrefix || '/',\n wrap({\n component: App as any,\n props: {\n locale,\n },\n }),\n ],\n ])\n);\n\x3C/script>\n\n\x3CRouter {routes} />\n```\n\nActualiza tu `main.ts` para montar el componente `Router` en lugar de `App`:\n\n```typescript fileName=\"src/main.ts\"\nimport { mount } from \"svelte\";\nimport Router from \"./Router.svelte\";\n\nconst app = mount(Router, {\n target: document.getElementById(\"app\")!,\n});\n\nexport default app;\n```\n\nFinalmente, actualiza tu `App.svelte` para recibir la propiedad `locale` y usarla con `useIntlayer`:\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript lang=\"ts\">\nimport type { Locale } from 'intlayer';\nimport { useIntlayer } from \"svelte-intlayer\";\nimport Counter from './lib/Counter.svelte';\nimport LocaleSwitcher from './lib/LocaleSwitcher.svelte';\n\nexport let locale: Locale;\n\n$: content = useIntlayer('app', locale);\n\x3C/script>\n\n\x3Cmain>\n \x3Cdiv class=\"locale-switcher-container\">\n \x3CLocaleSwitcher currentLocale={locale} />\n \x3C/div>\n\n \x3C!-- ... resto de tu aplicación ... -->\n\x3C/main>\n```\n\n#### Configurar el enrutamiento del lado del servidor (Opcional)\n\nParalelamente, también puedes usar `intlayerProxy` para añadir enrutamiento del lado del servidor a tu aplicación. Este plugin detectará automáticamente la locale actual basada en la URL y establecerá la cookie de locale correspondiente. Si no se especifica ninguna locale, el plugin determinará la locale más adecuada según las preferencias de idioma del navegador del usuario. Si no se detecta ninguna locale, redirigirá a la locale por defecto.\n\n> Ten en cuenta que para usar `intlayerProxy` en producción, necesitas mover el paquete `vite-intlayer` de `devDependencies` a `dependencies`.\n\n```typescript {3,7} fileName=\"vite.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n```\n\n\x3C/Step>\n\n\x3CStep number={8} title=\"Cambiar la URL cuando cambia la locale\" isOptional={true}>\n\nPara permitir que los usuarios cambien de idioma y actualicen la URL en consecuencia, puedes crear un componente `LocaleSwitcher`. Este componente usará `getLocalizedUrl` de `intlayer` y `push` de `svelte-spa-router`.\n\n```svelte fileName=\"src/lib/LocaleSwitcher.svelte\"\n\x3Cscript lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Obtener información de la locale\nconst { locale, availableLocales } = useLocale();\n\n// Manejar el cambio de locale\nconst changeLocale = (event: Event) => {\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n```\n\n\x3C/Step>\n\n\x3CStep number={8} title=\"Cambiar la URL cuando cambia la configuración regional\" isOptional={true}>\n\nPara permitir que los usuarios cambien de idioma y actualicen la URL en consecuencia, puedes crear un componente `LocaleSwitcher`. Este componente utilizará `getLocalizedUrl` de `intlayer` y `push` de `svelte-spa-router`.\n\n```svelte fileName=\"src/lib/LocaleSwitcher.svelte\"\n\x3Cscript lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Obtener información de la configuración regional\nconst { locale, availableLocales } = useLocale();\n\n// Manejar el cambio de configuración regional\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n const currentUrl = window.location.pathname;\n const url = getLocalizedUrl( currentUrl, newLocale);\n push(url);\n};\n\x3C/script>\n\n\x3Cdiv class=\"locale-switcher\">\n \x3Cselect value={currentLocale ?? $locale} onchange={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n```\n\n\x3C/Step>\n\n\x3CStep number={9} title=\"Extraer el contenido de tus componentes\" isOptional={true}>\n\nSi tienes una base de código existente, transformar miles de archivos puede llevar mucho tiempo.\n\nPara facilitar este proceso, Intlayer propone un [compilador](/es/doc/compiler) / [extractor](/es/doc/concept/cli/extract) para transformar tus componentes y extraer el contenido.\n\nPara configurarlo, puedes agregar una sección `compiler` en tu archivo `intlayer.config.ts` :\n\n```typescript fileName=\"intlayer.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Resto de tu configuración\n compiler: {\n /**\n * Indica si el compilador debe estar habilitado.\n */\n enabled: true,\n\n /**\n * Define la ruta de los archivos de salida\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Indica si los componentes deben guardarse después de ser transformados. De esa manera, el compilador se puede ejecutar solo una vez para transformar la aplicación y luego se puede eliminar.\n */\n saveComponents: false,\n\n /**\n * Prefijo de clave de diccionario\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n```\n\n\x3CTabs>\n \x3CTab value='Comando de extracción'>\n\nEjecuta el extractor para transformar tus componentes y extraer el contenido\n\n```bash packageManager=\"npm\"\nnpx intlayer extract\n```\n\n```bash packageManager=\"pnpm\"\npnpm intlayer extract\n```\n\n```bash packageManager=\"yarn\"\nyarn intlayer extract\n```\n\n```bash packageManager=\"bun\"\nbun x intlayer extract\n```\n\n \x3C/Tab>\n \x3CTab value='Compilador Babel'>\n\nActualiza tu archivo `vite.config.ts` para incluir el plugin `intlayerCompiler` :\n\n```ts fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Agrega el plugin del compilador\n ],\n});\n```\n\n```bash packageManager=\"npm\"\nnpm run build # O npm run dev\n```\n\n```bash packageManager=\"pnpm\"\npnpm run build # O pnpm run dev\n```\n\n```bash packageManager=\"yarn\"\nyarn build # O yarn dev\n```\n\n```bash packageManager=\"bun\"\nbun run build # Or bun run dev\n```\n\n \x3C/Tab>\n\x3C/Tabs>\n\x3C/Step>\n\n\x3C/Steps>\n\n### (Opcional) Sitemap y robots.txt (generación en el build)\n\nIntlayer ofrece utilidades - `generateSitemap` y `getMultilingualUrls` - para formatear un `sitemap.xml` multilingüe y un `robots.txt` listos para rastreadores y escribirlos automáticamente en `public/`. Lo habitual es ejecutar un script pequeño de Node **antes** de Vite (por ejemplo hooks npm `predev` / `prebuild`) para que esos archivos existan al compilar o al levantar el servidor de desarrollo.\n\n#### Sitemap\n\nEl generador de sitemaps de Intlayer respeta tu configuración de idiomas y añade los metadatos habituales.\n\n> El sitemap admite el espacio de nombres `xhtml:link` (hreflang). En lugar de listar solo URLs sueltas, Intlayer enlaza de forma bidireccional todas las versiones localizadas de cada página (p. ej. `/about`, `/fr/about` o `/about?lang=fr` según el modo de rutas).\n\n#### Robots.txt\n\nUsa `getMultilingualUrls` para que las reglas `Disallow` cubran todas las variantes localizadas de rutas sensibles.\n\n#### 1. Crear `generate-seo.mjs` en la raíz del proyecto\n\n```javascript fileName=\"generate-seo.mjs\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n```\n\nDebe estar instalado `intlayer` para poder importarlo. Define `SITE_URL` en el entorno en producción (por ejemplo en CI).\n\n> Prefiere `generate-seo.mjs` para ESM en Node. Si usas `generate-seo.js`, asegúrate de tener `\"type\": \"module\"` en `package.json` o ejecuta Node con ESM.\n\n#### 2. Ejecutar el script antes de Vite\n\n```json fileName=\"package.json\"\n{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n```\n\nAjusta los comandos si usas pnpm o yarn. También puedes llamar al script desde CI u otro paso del pipeline.\n\n### Configuración de Git\n\nSe recomienda ignorar los archivos generados por Intlayer. Esto te permite evitar comprometerlos en tu repositorio Git.\n\nPara hacerlo, puedes agregar las siguientes instrucciones a tu archivo `.gitignore`:\n\n```bash\n# Ignorar los archivos generados por Intlayer\n.intlayer\n```\n\n### Extensión para VS Code\n\nPara mejorar tu experiencia de desarrollo con Intlayer, puedes instalar la extensión oficial **Intlayer VS Code Extension**.\n\n[Instalar desde el VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nEsta extensión ofrece:\n\n- **Autocompletado** para las claves de traducción.\n- **Detección de errores en tiempo real** para traducciones faltantes.\n- **Vistas previas en línea** del contenido traducido.\n- **Acciones rápidas** para crear y actualizar traducciones fácilmente.\n\nPara más detalles sobre cómo usar la extensión, consulta la [documentación de la extensión Intlayer para VS Code](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### Ir Más Allá\n\nPara ir más allá, puedes implementar el [editor visual](/es/doc/concept/editor) o externalizar tu contenido usando el [CMS](/es/doc/concept/cms).\n",docParsed:$R[40]={ast:$R[41]=[$R[42]={children:$R[43]=[$R[44]={text:"Traduce tu sitio web Vite y Svelte usando Intlayer | Internacionalización (i18n)",type:"27"}],id:"traduce-tu-sitio-web-vite-y-svelte-usando-intlayer--internacionalizacion-i18n",level:1,type:"9"},$R[45]={attrs:$R[46]={defaultTab:"code"},noInnerParse:!1,tag:"Tabs",children:$R[47]=[$R[48]={attrs:$R[49]={label:"Código",value:"code"},noInnerParse:!1,tag:"Tab",children:$R[50]=[$R[51]={type:"19"},$R[52]={attrs:$R[53]={src:"https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts",className:"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full",title:"Demo CodeSandbox - Intlayer",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts",loading:"lazy"},tag:"iframe",type:"13"}],type:"34"},$R[54]={attrs:$R[55]={label:"Demo",value:"demo"},noInnerParse:!1,tag:"Tab",children:$R[56]=[$R[57]={type:"19"},$R[58]={attrs:$R[59]={src:"https://intlayer-vite-svelte-template.vercel.app",className:"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full",title:"Demo - intlayer-vite-svelte-template",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts",loading:"lazy"},tag:"iframe",type:"13"}],type:"34"}],type:"34"},$R[60]={children:$R[61]=[$R[62]={text:"Tabla de Contenidos",type:"27"}],id:"tabla-de-contenidos",level:2,type:"9"},$R[63]={attrs:null,tag:"TOC",type:"13"},$R[64]={children:$R[65]=[$R[66]={text:"¿Por qué Intlayer en lugar de alternativas?",type:"27"}],id:"por-que-intlayer-en-lugar-de-alternativas",level:2,type:"9"},$R[67]={children:$R[68]=[$R[69]={text:"En comparación con soluciones principales como ",type:"27"},$R[70]={text:"svelte-i18n",type:"5"},$R[71]={text:" o ",type:"27"},$R[72]={text:"i18next",type:"5"},$R[73]={text:", Intlayer es una solución que viene con optimizaciones integradas como",type:"27"},$R[74]={text:":",type:"27"}],type:"21"},$R[75]={type:"19"},$R[76]={attrs:null,noInnerParse:!1,tag:"AccordionGroup",children:$R[77]=[$R[78]={type:"19"},$R[79]={attrs:$R[80]={header:"Cobertura completa Svelte"},noInnerParse:!1,tag:"Accordion",children:$R[81]=[$R[82]={type:"19"},$R[83]={children:$R[84]=[$R[85]={text:"Intlayer está optimizado para funcionar perfectamente con Svelte al ofrecer ",type:"27"},$R[86]={children:$R[87]=[$R[88]={text:"alcance del contenido a nivel de componente",type:"27"}],type:"28"},$R[89]={text:", ",type:"27"},$R[90]={children:$R[91]=[$R[92]={text:"traducciones reactivas",type:"27"}],type:"28"},$R[93]={text:" y todas las funciones necesarias para escalar la internacionalización (i18n).",type:"27"}],type:"21"},$R[94]={type:"19"}],type:"34"},$R[95]={attrs:$R[96]={header:"Tamaño del bundle"},noInnerParse:!1,tag:"Accordion",children:$R[97]=[$R[98]={type:"19"},$R[99]={children:$R[100]=[$R[101]={text:"En lugar de cargar archivos JSON masivos en sus páginas, cargue solo el contenido necesario. Intlayer ayuda a ",type:"27"},$R[102]={children:$R[103]=[$R[104]={text:"reducir el tamaño de su bundle y de sus páginas hasta en un 50%",type:"27"}],type:"28"},$R[105]={text:".",type:"27"}],type:"21"},$R[106]={type:"19"}],type:"34"},$R[107]={attrs:$R[108]={header:"Mantenibilidad"},noInnerParse:!1,tag:"Accordion",children:$R[109]=[$R[110]={type:"19"},$R[111]={children:$R[112]=[$R[113]={text:"Determinar el alcance del contenido de su aplicación ",type:"27"},$R[114]={children:$R[115]=[$R[116]={text:"facilita el mantenimiento",type:"27"}],type:"28"},$R[117]={text:" para aplicaciones a gran escala. Puede duplicar o eliminar una sola carpeta de funciones sin la carga mental de revisar todo el código base de contenido. Además, Intlayer está ",type:"27"},$R[118]={children:$R[119]=[$R[120]={text:"completamente escrito",type:"27"}],type:"28"},$R[121]={text:" para garantizar la precisión de su contenido.",type:"27"}],type:"21"},$R[122]={type:"19"}],type:"34"},$R[123]={attrs:$R[124]={header:"Agente de IA"},noInnerParse:!1,tag:"Accordion",children:$R[125]=[$R[126]={type:"19"},$R[127]={children:$R[128]=[$R[129]={text:"La ubicación conjunta de contenido ",type:"27"},$R[130]={children:$R[131]=[$R[132]={text:"reduce el contexto necesario",type:"27"}],type:"28"},$R[133]={text:" para los modelos de lenguajes grandes (LLM). Intlayer también viene con un conjunto de herramientas, como una ",type:"27"},$R[134]={children:$R[135]=[$R[136]={text:"CLI",type:"27"}],type:"28"},$R[137]={text:" para comprobar si faltan traducciones,",type:"27"},$R[138]={children:$R[139]=[$R[140]={children:$R[141]=[$R[142]={text:"LSP",type:"27"}],target:"/es/doc/lsp",title:void 0,type:"15"}],type:"28"},$R[143]={text:", ",type:"27"},$R[144]={children:$R[145]=[$R[146]={children:$R[147]=[$R[148]={text:"MCP",type:"27"}],target:"/es/doc/mcp-server",title:void 0,type:"15"}],type:"28"},$R[149]={text:" y ",type:"27"},$R[150]={children:$R[151]=[$R[152]={children:$R[153]=[$R[154]={text:"agent skills",type:"27"}],target:"/es/doc/agent_skills",title:void 0,type:"15"}],type:"28"},$R[155]={text:", para que la experiencia del desarrollador (DX) sea aún más fluida para los agentes de IA.",type:"27"}],type:"21"},$R[156]={type:"19"}],type:"34"},$R[157]={attrs:$R[158]={header:"Automatización"},noInnerParse:!1,tag:"Accordion",children:$R[159]=[$R[160]={type:"19"},$R[161]={children:$R[162]=[$R[163]={text:"Utilice la automatización para traducir su canal de CI/CD utilizando el LLM de su elección al costo de su proveedor de IA. Intlayer también ofrece un ",type:"27"},$R[164]={children:$R[165]=[$R[166]={text:"compilador",type:"27"}],type:"28"},$R[167]={text:" para automatizar la extracción de contenido, así como una ",type:"27"},$R[168]={children:$R[169]=[$R[170]={text:"plataforma web",type:"27"}],target:"/es/doc/concept/cms",title:void 0,type:"15"},$R[171]={text:" para ayudar a ",type:"27"},$R[172]={children:$R[173]=[$R[174]={text:"traducir en segundo plano",type:"27"}],type:"28"},$R[175]={text:".",type:"27"}],type:"21"},$R[176]={type:"19"}],type:"34"},$R[177]={attrs:$R[178]={header:"Actuación"},noInnerParse:!1,tag:"Accordion",children:$R[179]=[$R[180]={type:"19"},$R[181]={children:$R[182]=[$R[183]={text:"La conexión de archivos JSON masivos a componentes puede provocar problemas de rendimiento y reactividad. Intlayer optimiza la carga de su contenido en el momento de la compilación.",type:"27"}],type:"21"},$R[184]={type:"19"}],type:"34"},$R[185]={attrs:$R[186]={header:"Escalando sin ningún desarrollador"},noInnerParse:!1,tag:"Accordion",children:$R[187]=[$R[188]={type:"19"},$R[189]={children:$R[190]=[$R[191]={text:"Más que una simple solución i18n, Intlayer proporciona un ",type:"27"},$R[192]={children:$R[193]=[$R[194]={text:"[editor visual] autohospedado(/es/doc/concept/editor)",type:"27"},$R[195]={children:$R[196]=[$R[197]={text:" y un ",type:"27"}],type:"28"},$R[198]={children:$R[199]=[$R[200]={text:"CMS completo",type:"27"}],target:"/es/doc/concept/cms",title:void 0,type:"15"}],type:"28"},$R[201]={text:" para ayudarle a administrar su contenido multilingüe en ",type:"27"},$R[202]={children:$R[203]=[$R[204]={text:"tiempo real",type:"27"}],type:"28"},$R[205]={text:", lo que facilita la colaboración con traductores, redactores y otros miembros del equipo. El contenido se puede almacenar de forma local y/o remota.",type:"27"}],type:"21"},$R[206]={type:"19"}],type:"34"}],type:"34"},$R[207]={type:"2"},$R[208]={children:$R[209]=[$R[210]={text:"Guía Paso a Paso para Configurar Intlayer en una Aplicación Vite y Svelte",type:"27"}],id:"guia-paso-a-paso-para-configurar-intlayer-en-una-aplicacion-vite-y-svelte",level:2,type:"9"},$R[211]={attrs:$R[212]={src:"https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts",className:"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full",title:"Demo CodeSandbox - Cómo internacionalizar tu aplicación usando Intlayer",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts",loading:"lazy"},tag:"iframe",type:"13"},$R[213]={children:$R[214]=[$R[215]={text:"Consulta la ",type:"27"},$R[216]={children:$R[217]=[$R[218]={text:"Plantilla de Aplicación",type:"27"}],target:"https://github.com/aymericzip/intlayer-vite-svelte-template",title:void 0,type:"15"},$R[219]={text:" en GitHub.",type:"27"}],type:"21"},$R[220]={type:"19"},$R[221]={attrs:null,noInnerParse:!1,tag:"Steps",children:$R[222]=[$R[223]={type:"19"},$R[224]={attrs:$R[225]={number:"1",title:"Instalar Dependencias"},noInnerParse:!1,tag:"Step",children:$R[226]=[$R[227]={type:"19"},$R[228]={children:$R[229]=[$R[230]={text:"Instala los paquetes necesarios usando npm",type:"27"},$R[231]={text:":",type:"27"}],type:"21"},$R[232]={type:"19"},$R[233]={attrs:$R[234]={packageManager:"npm"},lang:"bash",text:"npm install intlayer svelte-intlayer\nnpm install vite-intlayer --save-dev\nnpx intlayer init\n",type:"3"},$R[235]={type:"19"},$R[236]={attrs:$R[237]={packageManager:"pnpm"},lang:"bash",text:"pnpm add intlayer svelte-intlayer\npnpm add vite-intlayer --save-dev\npnpm intlayer init\n",type:"3"},$R[238]={type:"19"},$R[239]={attrs:$R[240]={packageManager:"yarn"},lang:"bash",text:"yarn add intlayer svelte-intlayer\nyarn add vite-intlayer --save-dev\nyarn intlayer init\n",type:"3"},$R[241]={type:"19"},$R[242]={attrs:$R[243]={packageManager:"bun"},lang:"bash",text:"bun add intlayer svelte-intlayer\nbun add vite-intlayer --save-dev\nbun x intlayer init\n",type:"3"},$R[244]={type:"19"},$R[245]={items:$R[246]=[$R[247]=[$R[248]={children:$R[249]=[$R[250]={children:$R[251]=[$R[252]={text:"intlayer",type:"27"}],type:"28"}],type:"21"},$R[253]={type:"19"},$R[254]={children:$R[255]=[$R[256]={text:"El paquete principal que proporciona herramientas de internacionalización para la gestión de configuración, traducción, ",type:"27"},$R[257]={children:$R[258]=[$R[259]={text:"declaración de contenido",type:"27"}],target:"/es/doc/concept/content",title:void 0,type:"15"},$R[260]={text:", transpileación y ",type:"27"},$R[261]={children:$R[262]=[$R[263]={text:"comandos CLI",type:"27"}],target:"/es/doc/concept/cli",title:void 0,type:"15"},$R[264]={text:".",type:"27"}],type:"21"},$R[265]={type:"19"}],$R[266]=[$R[267]={children:$R[268]=[$R[269]={children:$R[270]=[$R[271]={text:"svelte",type:"27"},$R[272]={text:"-intlayer",type:"27"}],type:"28"},$R[273]={text:"\nEl paquete que integra Intlayer con la aplicación Svelte. Proporciona proveedores de contexto y hooks para la internacionalización en Svelte.",type:"27"}],type:"21"},$R[274]={type:"19"}],$R[275]=[$R[276]={children:$R[277]=[$R[278]={children:$R[279]=[$R[280]={text:"vite",type:"27"},$R[281]={text:"-intlayer",type:"27"}],type:"28"},$R[282]={text:"\nIncluye el plugin de Vite para integrar Intlayer con el ",type:"27"},$R[283]={children:$R[284]=[$R[285]={text:"bundler Vite",type:"27"}],target:"https://vite.dev/guide/why.html#why-bundle-for-production",title:void 0,type:"15"},$R[286]={text:", así como middleware para detectar la configuración regional preferida del usuario, gestionar cookies y manejar redirecciones de URL.",type:"27"}],type:"21"},$R[287]={type:"19"}]],ordered:!1,start:void 0,type:"33"}],type:"34"},$R[288]={attrs:$R[289]={number:"2",title:"Configuración de tu proyecto"},noInnerParse:!1,tag:"Step",children:$R[290]=[$R[291]={type:"19"},$R[292]={children:$R[293]=[$R[294]={text:"Crea un archivo de configuración para configurar los idiomas de tu aplicación",type:"27"},$R[295]={text:":",type:"27"}],type:"21"},$R[296]={type:"19"},$R[297]={attrs:$R[298]={fileName:"intlayer.config.ts"},lang:"typescript",text:"import { Locales, type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n internationalization: {\n locales: [\n Locales.ENGLISH,\n Locales.FRENCH,\n Locales.SPANISH,\n // Tus otros locales\n ],\n defaultLocale: Locales.ENGLISH,\n },\n};\n\nexport default config;\n",type:"3"},$R[299]={type:"19"},$R[300]={alert:void 0,children:$R[301]=[$R[302]={text:"A través de este archivo de configuración, puedes configurar URLs localizadas, redirección mediante middleware, nombres de cookies, la ubicación y extensión de tus declaraciones de contenido, desactivar los logs de Intlayer en la consola y más. Para una lista completa de los parámetros disponibles, consulta la ",type:"27"},$R[303]={children:$R[304]=[$R[305]={text:"documentación de configuración",type:"27"}],target:"/es/doc/concept/configuration",title:void 0,type:"15"},$R[306]={text:".",type:"27"}],type:"0"},$R[307]={type:"19"}],type:"34"},$R[308]={attrs:$R[309]={number:"3",title:"Integra Intlayer en tu configuración de Vite"},noInnerParse:!1,tag:"Step",children:$R[310]=[$R[311]={type:"19"},$R[312]={children:$R[313]=[$R[314]={text:"Agrega el plugin intlayer en tu configuración.",type:"27"}],type:"21"},$R[315]={type:"19"},$R[316]={attrs:$R[317]={fileName:"vite.config.ts"},lang:"typescript",text:"import { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [svelte(), intlayer()],\n});\n",type:"3"},$R[318]={type:"19"},$R[319]={alert:void 0,children:$R[320]=[$R[321]={text:"El plugin ",type:"27"},$R[322]={text:"intlayer()",type:"5"},$R[323]={text:" para Vite se utiliza para integrar Intlayer con Vite. Asegura la construcción de los archivos de declaración de contenido y los supervisa en modo desarrollo. Define las variables de entorno de Intlayer dentro de la aplicación Vite. Además, proporciona alias para optimizar el rendimiento.",type:"27"}],type:"0"},$R[324]={type:"19"}],type:"34"},$R[325]={attrs:$R[326]={number:"4",title:"Declara tu contenido"},noInnerParse:!1,tag:"Step",children:$R[327]=[$R[328]={type:"19"},$R[329]={children:$R[330]=[$R[331]={text:"Crea y administra tus declaraciones de contenido para almacenar traducciones",type:"27"},$R[332]={text:":",type:"27"}],type:"21"},$R[333]={type:"19"},$R[334]={attrs:$R[335]={fileName:"src/app.content.tsx",contentDeclarationFormat:"[\"typescript\", \"esm\", \"commonjs\"]"},lang:"tsx",text:"import { t, type Dictionary } from \"intlayer\";\n\nconst appContent = {\n key: \"app\",\n content: {\n title: t({\n en: \"Hello World\",\n fr: \"Bonjour le monde\",\n es: \"Hola mundo\",\n }),\n },\n} satisfies Dictionary;\n\nexport default appContent;\n",type:"3"},$R[336]={type:"19"},$R[337]={attrs:$R[338]={fileName:"src/app.content.json",contentDeclarationFormat:"json"},lang:"json",text:"{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"app\",\n \"content\": {\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Hello World\",\n \"fr\": \"Bonjour le monde\",\n \"es\": \"Hola mundo\"\n }\n }\n }\n}\n",type:"3"},$R[339]={type:"19"},$R[340]={alert:void 0,children:$R[341]=[$R[342]={text:"Tus declaraciones de contenido pueden definirse en cualquier parte de tu aplicación tan pronto como se incluyan en el directorio ",type:"27"},$R[343]={text:"contentDir",type:"5"},$R[344]={text:" (por defecto, ",type:"27"},$R[345]={text:"./src",type:"5"},$R[346]={text:"). Y coincidan con la extensión del archivo de declaración de contenido (por defecto, ",type:"27"},$R[347]={text:".content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}",type:"5"},$R[348]={text:").",type:"27"}],type:"0"},$R[349]={type:"19"},$R[350]={alert:void 0,children:$R[351]=[$R[352]={text:"Para más detalles, consulta la ",type:"27"},$R[353]={children:$R[354]=[$R[355]={text:"documentación de declaración de contenido",type:"27"}],target:"/es/doc/concept/content",title:void 0,type:"15"},$R[356]={text:".",type:"27"}],type:"0"},$R[357]={type:"19"}],type:"34"},$R[358]={attrs:$R[359]={number:"5",title:"Utiliza Intlayer en tu código"},noInnerParse:!1,tag:"Step",children:$R[360]=[$R[361]={type:"19"},$R[362]={attrs:$R[363]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript>\n import { useIntlayer } from \"svelte-intlayer\";\n\n const content = useIntlayer(\"app\");\n\x3C/script>\n\n\x3Cdiv>\n\n\n\x3C!-- Renderizar contenido como contenido simple -->\n\x3Ch1>{$content.title}\x3C/h1>\n\x3C!-- Para renderizar el contenido editable usando el editor -->\n\x3Ch1>{@const Title = $content.title}\x3CTitle />\x3C/h1>\n\x3C!-- Para renderizar el contenido como una cadena -->\n\x3Cdiv aria-label={$content.title.value}>\x3C/div>\n\x3Cdiv aria-label={$content.title.toString()}>\x3C/div>\n\x3Cdiv aria-label={String($content.title)}>\x3C/div>\n",type:"3"},$R[364]={type:"19"},$R[365]={alert:void 0,children:$R[366]=[$R[367]={text:"Si su aplicación ya existe, puede utilizar el ",type:"27"},$R[368]={children:$R[369]=[$R[370]={text:"Compilador Intlayer",type:"27"}],target:"/es/doc/compiler",title:void 0,type:"15"},$R[371]={text:", así como el ",type:"27"},$R[372]={children:$R[373]=[$R[374]={text:"comando de extracción",type:"27"}],target:"/es/doc/concept/cli/extract",title:void 0,type:"15"},$R[375]={text:", para transformar miles de componentes en un segundo.",type:"27"}],type:"0"},$R[376]={type:"19"}],type:"34"},$R[377]={attrs:$R[378]={number:"6",title:"Cambiar el idioma de tu contenido",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[379]=[$R[380]={type:"19"},$R[381]={attrs:$R[382]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { getLocaleName } from 'intlayer';\nimport { useLocale } from \"svelte-intlayer\";\n\n// Obtener información del locale y la función setLocale\nconst { locale, availableLocales, setLocale } = useLocale();\n\n// Manejar el cambio de locale\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n setLocale(newLocale);\n};\n\x3C/script>\n\n\x3Cdiv>\n \x3Cselect value={$locale} on:change={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n",type:"3"},$R[383]={type:"19"}],type:"34"},$R[384]={attrs:$R[385]={number:"7",title:"Renderizar Markdown",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[386]=[$R[387]={type:"19"},$R[388]={children:$R[389]=[$R[390]={text:"Intlayer soporta renderizar contenido Markdown directamente en tu aplicación Svelte. Por defecto, Markdown se trata como texto plano. Para convertir Markdown en HTML enriquecido, puedes integrar ",type:"27"},$R[391]={text:"@humanspeak/svelte-markdown",type:"5"},$R[392]={text:" u otro parser de markdown.",type:"27"}],type:"21"},$R[393]={type:"19"},$R[394]={alert:void 0,children:$R[395]=[$R[396]={text:"Para ver cómo declarar contenido markdown usando el paquete ",type:"27"},$R[397]={text:"intlayer",type:"5"},$R[398]={text:", consulta la ",type:"27"},$R[399]={children:$R[400]=[$R[401]={text:"documentación de markdown",type:"27"}],target:"https://github.com/aymericzip/intlayer/tree/main/docs/docs/es/dictionary/markdown.md",title:void 0,type:"15"},$R[402]={text:".",type:"27"}],type:"0"},$R[403]={type:"19"},$R[404]={attrs:$R[405]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript>\n import { setIntlayerMarkdown } from \"svelte-intlayer\";\n\n setIntlayerMarkdown((markdown) =>\n // renderizar el contenido markdown como una cadena\n return markdown;\n );\n\x3C/script>\n\n\x3Ch1>{$content.markdownContent}\x3C/h1>\n",type:"3"},$R[406]={type:"19"},$R[407]={alert:void 0,children:$R[408]=[$R[409]={text:"También puedes acceder a los datos del front",type:"27"},$R[410]={text:"-matter de tu markdown usando la propiedad ",type:"27"},$R[411]={text:"content.markdownContent.metadata.xxx",type:"5"},$R[412]={text:".",type:"27"}],type:"0"},$R[413]={type:"19"}],type:"34"},$R[414]={attrs:$R[415]={number:"8",title:"Configurar el editor / CMS de intlayer",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[416]=[$R[417]={type:"19"},$R[418]={children:$R[419]=[$R[420]={text:"Para configurar el editor de intlayer, debes seguir la ",type:"27"},$R[421]={children:$R[422]=[$R[423]={text:"documentación del editor de intlayer",type:"27"}],target:"/es/doc/concept/editor",title:void 0,type:"15"},$R[424]={text:".",type:"27"}],type:"21"},$R[425]={type:"19"},$R[426]={children:$R[427]=[$R[428]={text:"Para configurar el CMS de intlayer, debes seguir la ",type:"27"},$R[429]={children:$R[430]=[$R[431]={text:"documentación del CMS de intlayer",type:"27"}],target:"/es/doc/concept/cms",title:void 0,type:"15"},$R[432]={text:".",type:"27"}],type:"21"},$R[433]={type:"19"}],type:"34"},$R[434]={attrs:$R[435]={number:"7",title:"Añadir enrutamiento por localeizado a tu aplicación",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[436]=[$R[437]={type:"19"},$R[438]={children:$R[439]=[$R[440]={text:"Para manejar el enrutamiento por localeizado en tu aplicación Svelte, puedes usar ",type:"27"},$R[441]={text:"svelte-spa-router",type:"5"},$R[442]={text:" junto con ",type:"27"},$R[443]={text:"localeFlatMap",type:"5"},$R[444]={text:" de Intlayer para generar rutas para cada locale.",type:"27"}],type:"21"},$R[445]={type:"19"},$R[446]={children:$R[447]=[$R[448]={text:"Primero, instala ",type:"27"},$R[449]={text:"svelte-spa-router",type:"5"},$R[450]={text:":",type:"27"}],type:"21"},$R[451]={type:"19"},$R[452]={attrs:$R[453]={packageManager:"npm"},lang:"bash",text:"npm install svelte-spa-router\nnpx intlayer init\n",type:"3"},$R[454]={type:"19"},$R[455]={attrs:$R[456]={packageManager:"pnpm"},lang:"bash",text:"pnpm add svelte-spa-router\npnpm intlayer init\n",type:"3"},$R[457]={type:"19"},$R[458]={attrs:$R[459]={packageManager:"yarn"},lang:"bash",text:"yarn add svelte-spa-router\nyarn intlayer init\n",type:"3"},$R[460]={type:"19"},$R[461]={attrs:$R[462]={packageManager:"bun"},lang:"bash",text:"bun add svelte-spa-router\n",type:"3"},$R[463]={type:"19"},$R[464]={children:$R[465]=[$R[466]={text:"Luego, crea un archivo ",type:"27"},$R[467]={text:"Router.svelte",type:"5"},$R[468]={text:" para definir tus rutas",type:"27"},$R[469]={text:":",type:"27"}],type:"21"},$R[470]={type:"19"},$R[471]={attrs:$R[472]={fileName:"src/Router.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { localeFlatMap } from \"intlayer\";\nimport Router from \"svelte-spa-router\";\nimport { wrap } from \"svelte-spa-router/wrap\";\nimport App from \"./App.svelte\";\n\nconst routes = Object.fromEntries(\n localeFlatMap(({locale, urlPrefix}) => [\n [\n urlPrefix || '/',\n wrap({\n component: App as any,\n props: {\n locale,\n },\n }),\n ],\n ])\n);\n\x3C/script>\n\n\x3CRouter {routes} />\n",type:"3"},$R[473]={type:"19"},$R[474]={children:$R[475]=[$R[476]={text:"Actualiza tu ",type:"27"},$R[477]={text:"main.ts",type:"5"},$R[478]={text:" para montar el componente ",type:"27"},$R[479]={text:"Router",type:"5"},$R[480]={text:" en lugar de ",type:"27"},$R[481]={text:"App",type:"5"},$R[482]={text:":",type:"27"}],type:"21"},$R[483]={type:"19"},$R[484]={attrs:$R[485]={fileName:"src/main.ts"},lang:"typescript",text:"import { mount } from \"svelte\";\nimport Router from \"./Router.svelte\";\n\nconst app = mount(Router, {\n target: document.getElementById(\"app\")!,\n});\n\nexport default app;\n",type:"3"},$R[486]={type:"19"},$R[487]={children:$R[488]=[$R[489]={text:"Finalmente, actualiza tu ",type:"27"},$R[490]={text:"App.svelte",type:"5"},$R[491]={text:" para recibir la propiedad ",type:"27"},$R[492]={text:"locale",type:"5"},$R[493]={text:" y usarla con ",type:"27"},$R[494]={text:"useIntlayer",type:"5"},$R[495]={text:":",type:"27"}],type:"21"},$R[496]={type:"19"},$R[497]={attrs:$R[498]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport type { Locale } from 'intlayer';\nimport { useIntlayer } from \"svelte-intlayer\";\nimport Counter from './lib/Counter.svelte';\nimport LocaleSwitcher from './lib/LocaleSwitcher.svelte';\n\nexport let locale: Locale;\n\n$: content = useIntlayer('app', locale);\n\x3C/script>\n\n\x3Cmain>\n \x3Cdiv class=\"locale-switcher-container\">\n \x3CLocaleSwitcher currentLocale={locale} />\n \x3C/div>\n\n \x3C!-- ... resto de tu aplicación ... -->\n\x3C/main>\n",type:"3"},$R[499]={type:"19"},$R[500]={children:$R[501]=[$R[502]={text:"Configurar el enrutamiento del lado del servidor (Opcional)",type:"27"}],id:"configurar-el-enrutamiento-del-lado-del-servidor-opcional",level:4,type:"9"},$R[503]={children:$R[504]=[$R[505]={text:"Paralelamente, también puedes usar ",type:"27"},$R[506]={text:"intlayerProxy",type:"5"},$R[507]={text:" para añadir enrutamiento del lado del servidor a tu aplicación. Este plugin detectará automáticamente la locale actual basada en la URL y establecerá la cookie de locale correspondiente. Si no se especifica ninguna locale, el plugin determinará la locale más adecuada según las preferencias de idioma del navegador del usuario. Si no se detecta ninguna locale, redirigirá a la locale por defecto.",type:"27"}],type:"21"},$R[508]={type:"19"},$R[509]={alert:void 0,children:$R[510]=[$R[511]={text:"Ten en cuenta que para usar ",type:"27"},$R[512]={text:"intlayerProxy",type:"5"},$R[513]={text:" en producción, necesitas mover el paquete ",type:"27"},$R[514]={text:"vite-intlayer",type:"5"},$R[515]={text:" de ",type:"27"},$R[516]={text:"devDependencies",type:"5"},$R[517]={text:" a ",type:"27"},$R[518]={text:"dependencies",type:"5"},$R[519]={text:".",type:"27"}],type:"0"},$R[520]={type:"19"},$R[521]={attrs:$R[522]={3:!0,7:!0,fileName:"vite.config.ts",codeFormat:"[\"typescript\", \"esm\", \"commonjs\"]"},lang:"typescript",text:"import { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n",type:"3"},$R[523]={type:"19"}],type:"34"},$R[524]={attrs:$R[525]={number:"8",title:"Cambiar la URL cuando cambia la locale",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[526]=[$R[527]={type:"19"},$R[528]={children:$R[529]=[$R[530]={text:"Para permitir que los usuarios cambien de idioma y actualicen la URL en consecuencia, puedes crear un componente ",type:"27"},$R[531]={text:"LocaleSwitcher",type:"5"},$R[532]={text:". Este componente usará ",type:"27"},$R[533]={text:"getLocalizedUrl",type:"5"},$R[534]={text:" de ",type:"27"},$R[535]={text:"intlayer",type:"5"},$R[536]={text:" y ",type:"27"},$R[537]={text:"push",type:"5"},$R[538]={text:" de ",type:"27"},$R[539]={text:"svelte-spa-router",type:"5"},$R[540]={text:".",type:"27"}],type:"21"},$R[541]={type:"19"},$R[542]={attrs:$R[543]={fileName:"src/lib/LocaleSwitcher.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Obtener información de la locale\nconst { locale, availableLocales } = useLocale();\n\n// Manejar el cambio de locale\nconst changeLocale = (event: Event) => {\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n",type:"3"},$R[544]={type:"19"}],type:"34"},$R[545]={attrs:$R[546]={number:"8",title:"Cambiar la URL cuando cambia la configuración regional",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[547]=[$R[548]={type:"19"},$R[549]={children:$R[550]=[$R[551]={text:"Para permitir que los usuarios cambien de idioma y actualicen la URL en consecuencia, puedes crear un componente ",type:"27"},$R[552]={text:"LocaleSwitcher",type:"5"},$R[553]={text:". Este componente utilizará ",type:"27"},$R[554]={text:"getLocalizedUrl",type:"5"},$R[555]={text:" de ",type:"27"},$R[556]={text:"intlayer",type:"5"},$R[557]={text:" y ",type:"27"},$R[558]={text:"push",type:"5"},$R[559]={text:" de ",type:"27"},$R[560]={text:"svelte-spa-router",type:"5"},$R[561]={text:".",type:"27"}],type:"21"},$R[562]={type:"19"},$R[563]={attrs:$R[564]={fileName:"src/lib/LocaleSwitcher.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Obtener información de la configuración regional\nconst { locale, availableLocales } = useLocale();\n\n// Manejar el cambio de configuración regional\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n const currentUrl = window.location.pathname;\n const url = getLocalizedUrl( currentUrl, newLocale);\n push(url);\n};\n\x3C/script>\n\n\x3Cdiv class=\"locale-switcher\">\n \x3Cselect value={currentLocale ?? $locale} onchange={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n",type:"3"},$R[565]={type:"19"}],type:"34"},$R[566]={attrs:$R[567]={number:"9",title:"Extraer el contenido de tus componentes",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[568]=[$R[569]={type:"19"},$R[570]={children:$R[571]=[$R[572]={text:"Si tienes una base de código existente, transformar miles de archivos puede llevar mucho tiempo.",type:"27"}],type:"21"},$R[573]={type:"19"},$R[574]={children:$R[575]=[$R[576]={text:"Para facilitar este proceso, Intlayer propone un ",type:"27"},$R[577]={children:$R[578]=[$R[579]={text:"compilador",type:"27"}],target:"/es/doc/compiler",title:void 0,type:"15"},$R[580]={text:" / ",type:"27"},$R[581]={children:$R[582]=[$R[583]={text:"extractor",type:"27"}],target:"/es/doc/concept/cli/extract",title:void 0,type:"15"},$R[584]={text:" para transformar tus componentes y extraer el contenido.",type:"27"}],type:"21"},$R[585]={type:"19"},$R[586]={children:$R[587]=[$R[588]={text:"Para configurarlo, puedes agregar una sección ",type:"27"},$R[589]={text:"compiler",type:"5"},$R[590]={text:" en tu archivo ",type:"27"},$R[591]={text:"intlayer.config.ts",type:"5"},$R[592]={text:" ",type:"27"},$R[593]={text:":",type:"27"}],type:"21"},$R[594]={type:"19"},$R[595]={attrs:$R[596]={fileName:"intlayer.config.ts",codeFormat:"[\"typescript\", \"esm\", \"commonjs\"]"},lang:"typescript",text:"import { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Resto de tu configuración\n compiler: {\n /**\n * Indica si el compilador debe estar habilitado.\n */\n enabled: true,\n\n /**\n * Define la ruta de los archivos de salida\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Indica si los componentes deben guardarse después de ser transformados. De esa manera, el compilador se puede ejecutar solo una vez para transformar la aplicación y luego se puede eliminar.\n */\n saveComponents: false,\n\n /**\n * Prefijo de clave de diccionario\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n",type:"3"},$R[597]={type:"19"},$R[598]={attrs:null,noInnerParse:!1,tag:"Tabs",children:$R[599]=[$R[600]={attrs:$R[601]={value:"Comando de extracción"},noInnerParse:!1,tag:"Tab",children:$R[602]=[$R[603]={type:"19"},$R[604]={children:$R[605]=[$R[606]={text:"Ejecuta el extractor para transformar tus componentes y extraer el contenido",type:"27"}],type:"21"},$R[607]={type:"19"},$R[608]={attrs:$R[609]={packageManager:"npm"},lang:"bash",text:"npx intlayer extract\n",type:"3"},$R[610]={type:"19"},$R[611]={attrs:$R[612]={packageManager:"pnpm"},lang:"bash",text:"pnpm intlayer extract\n",type:"3"},$R[613]={type:"19"},$R[614]={attrs:$R[615]={packageManager:"yarn"},lang:"bash",text:"yarn intlayer extract\n",type:"3"},$R[616]={type:"19"},$R[617]={attrs:$R[618]={packageManager:"bun"},lang:"bash",text:"bun x intlayer extract\n",type:"3"},$R[619]={type:"19"}],type:"34"},$R[620]={attrs:$R[621]={value:"Compilador Babel"},noInnerParse:!1,tag:"Tab",children:$R[622]=[$R[623]={type:"19"},$R[624]={children:$R[625]=[$R[626]={text:"Actualiza tu archivo ",type:"27"},$R[627]={text:"vite.config.ts",type:"5"},$R[628]={text:" para incluir el plugin ",type:"27"},$R[629]={text:"intlayerCompiler",type:"5"},$R[630]={text:" ",type:"27"},$R[631]={text:":",type:"27"}],type:"21"},$R[632]={type:"19"},$R[633]={attrs:$R[634]={fileName:"vite.config.ts"},lang:"ts",text:"import { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Agrega el plugin del compilador\n ],\n});\n",type:"3"},$R[635]={type:"19"},$R[636]={attrs:$R[637]={packageManager:"npm"},lang:"bash",text:"npm run build # O npm run dev\n",type:"3"},$R[638]={type:"19"},$R[639]={attrs:$R[640]={packageManager:"pnpm"},lang:"bash",text:"pnpm run build # O pnpm run dev\n",type:"3"},$R[641]={type:"19"},$R[642]={attrs:$R[643]={packageManager:"yarn"},lang:"bash",text:"yarn build # O yarn dev\n",type:"3"},$R[644]={type:"19"},$R[645]={attrs:$R[646]={packageManager:"bun"},lang:"bash",text:"bun run build # Or bun run dev\n",type:"3"},$R[647]={type:"19"}],type:"34"}],type:"34"}],type:"34"}],type:"34"},$R[648]={children:$R[649]=[$R[650]={text:"(Opcional) Sitemap y robots.txt (generación en el build)",type:"27"}],id:"opcional-sitemap-y-robotstxt-generacion-en-el-build",level:3,type:"9"},$R[651]={children:$R[652]=[$R[653]={text:"Intlayer ofrece utilidades ",type:"27"},$R[654]={text:"- ",type:"27"},$R[655]={text:"generateSitemap",type:"5"},$R[656]={text:" y ",type:"27"},$R[657]={text:"getMultilingualUrls",type:"5"},$R[658]={text:" ",type:"27"},$R[659]={text:"- para formatear un ",type:"27"},$R[660]={text:"sitemap.xml",type:"5"},$R[661]={text:" multilingüe y un ",type:"27"},$R[662]={text:"robots.txt",type:"5"},$R[663]={text:" listos para rastreadores y escribirlos automáticamente en ",type:"27"},$R[664]={text:"public/",type:"5"},$R[665]={text:". Lo habitual es ejecutar un script pequeño de Node ",type:"27"},$R[666]={children:$R[667]=[$R[668]={text:"antes",type:"27"}],type:"28"},$R[669]={text:" de Vite (por ejemplo hooks npm ",type:"27"},$R[670]={text:"predev",type:"5"},$R[671]={text:" / ",type:"27"},$R[672]={text:"prebuild",type:"5"},$R[673]={text:") para que esos archivos existan al compilar o al levantar el servidor de desarrollo.",type:"27"}],type:"21"},$R[674]={type:"19"},$R[675]={children:$R[676]=[$R[677]={text:"Sitemap",type:"27"}],id:"sitemap",level:4,type:"9"},$R[678]={children:$R[679]=[$R[680]={text:"El generador de sitemaps de Intlayer respeta tu configuración de idiomas y añade los metadatos habituales.",type:"27"}],type:"21"},$R[681]={type:"19"},$R[682]={alert:void 0,children:$R[683]=[$R[684]={text:"El sitemap admite el espacio de nombres ",type:"27"},$R[685]={text:"xhtml:link",type:"5"},$R[686]={text:" (hreflang). En lugar de listar solo URLs sueltas, Intlayer enlaza de forma bidireccional todas las versiones localizadas de cada página (p. ej. ",type:"27"},$R[687]={text:"/about",type:"5"},$R[688]={text:", ",type:"27"},$R[689]={text:"/fr/about",type:"5"},$R[690]={text:" o ",type:"27"},$R[691]={text:"/about?lang=fr",type:"5"},$R[692]={text:" según el modo de rutas).",type:"27"}],type:"0"},$R[693]={type:"19"},$R[694]={children:$R[695]=[$R[696]={text:"Robots.txt",type:"27"}],id:"robotstxt",level:4,type:"9"},$R[697]={children:$R[698]=[$R[699]={text:"Usa ",type:"27"},$R[700]={text:"getMultilingualUrls",type:"5"},$R[701]={text:" para que las reglas ",type:"27"},$R[702]={text:"Disallow",type:"5"},$R[703]={text:" cubran todas las variantes localizadas de rutas sensibles.",type:"27"}],type:"21"},$R[704]={type:"19"},$R[705]={children:$R[706]=[$R[707]={text:"1. Crear ",type:"27"},$R[708]={text:"generate-seo.mjs",type:"5"},$R[709]={text:" en la raíz del proyecto",type:"27"}],id:"1-crear-generate-seomjs-en-la-raiz-del-proyecto",level:4,type:"9"},$R[710]={attrs:$R[711]={fileName:"generate-seo.mjs"},lang:"javascript",text:"import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n",type:"3"},$R[712]={type:"19"},$R[713]={children:$R[714]=[$R[715]={text:"Debe estar instalado ",type:"27"},$R[716]={text:"intlayer",type:"5"},$R[717]={text:" para poder importarlo. Define ",type:"27"},$R[718]={text:"SITE_URL",type:"5"},$R[719]={text:" en el entorno en producción (por ejemplo en CI).",type:"27"}],type:"21"},$R[720]={type:"19"},$R[721]={alert:void 0,children:$R[722]=[$R[723]={text:"Prefiere ",type:"27"},$R[724]={text:"generate-seo.mjs",type:"5"},$R[725]={text:" para ESM en Node. Si usas ",type:"27"},$R[726]={text:"generate-seo.js",type:"5"},$R[727]={text:", asegúrate de tener ",type:"27"},$R[728]={text:"\"type\": \"module\"",type:"5"},$R[729]={text:" en ",type:"27"},$R[730]={text:"package.json",type:"5"},$R[731]={text:" o ejecuta Node con ESM.",type:"27"}],type:"0"},$R[732]={type:"19"},$R[733]={children:$R[734]=[$R[735]={text:"2. Ejecutar el script antes de Vite",type:"27"}],id:"2-ejecutar-el-script-antes-de-vite",level:4,type:"9"},$R[736]={attrs:$R[737]={fileName:"package.json"},lang:"json",text:"{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n",type:"3"},$R[738]={type:"19"},$R[739]={children:$R[740]=[$R[741]={text:"Ajusta los comandos si usas pnpm o yarn. También puedes llamar al script desde CI u otro paso del pipeline.",type:"27"}],type:"21"},$R[742]={type:"19"},$R[743]={children:$R[744]=[$R[745]={text:"Configuración de Git",type:"27"}],id:"configuracion-de-git",level:3,type:"9"},$R[746]={children:$R[747]=[$R[748]={text:"Se recomienda ignorar los archivos generados por Intlayer. Esto te permite evitar comprometerlos en tu repositorio Git.",type:"27"}],type:"21"},$R[749]={type:"19"},$R[750]={children:$R[751]=[$R[752]={text:"Para hacerlo, puedes agregar las siguientes instrucciones a tu archivo ",type:"27"},$R[753]={text:".gitignore",type:"5"},$R[754]={text:":",type:"27"}],type:"21"},$R[755]={type:"19"},$R[756]={attrs:null,lang:"bash",text:"# Ignorar los archivos generados por Intlayer\n.intlayer\n",type:"3"},$R[757]={type:"19"},$R[758]={children:$R[759]=[$R[760]={text:"Extensión para VS Code",type:"27"}],id:"extension-para-vs-code",level:3,type:"9"},$R[761]={children:$R[762]=[$R[763]={text:"Para mejorar tu experiencia de desarrollo con Intlayer, puedes instalar la extensión oficial ",type:"27"},$R[764]={children:$R[765]=[$R[766]={text:"Intlayer VS Code Extension",type:"27"}],type:"28"},$R[767]={text:".",type:"27"}],type:"21"},$R[768]={type:"19"},$R[769]={children:$R[770]=[$R[771]={children:$R[772]=[$R[773]={text:"Instalar desde el VS Code Marketplace",type:"27"}],target:"https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension",title:void 0,type:"15"}],type:"21"},$R[774]={type:"19"},$R[775]={children:$R[776]=[$R[777]={text:"Esta extensión ofrece",type:"27"},$R[778]={text:":",type:"27"}],type:"21"},$R[779]={type:"19"},$R[780]={items:$R[781]=[$R[782]=[$R[783]={children:$R[784]=[$R[785]={text:"Autocompletado",type:"27"}],type:"28"},$R[786]={text:" para las claves de traducción.",type:"27"}],$R[787]=[$R[788]={children:$R[789]=[$R[790]={text:"Detección de errores en tiempo real",type:"27"}],type:"28"},$R[791]={text:" para traducciones faltantes.",type:"27"}],$R[792]=[$R[793]={children:$R[794]=[$R[795]={text:"Vistas previas en línea",type:"27"}],type:"28"},$R[796]={text:" del contenido traducido.",type:"27"}],$R[797]=[$R[798]={children:$R[799]=[$R[800]={text:"Acciones rápidas",type:"27"}],type:"28"},$R[801]={text:" para crear y actualizar traducciones fácilmente.",type:"27"}]],ordered:!1,start:void 0,type:"33"},$R[802]={children:$R[803]=[$R[804]={text:"Para más detalles sobre cómo usar la extensión, consulta la ",type:"27"},$R[805]={children:$R[806]=[$R[807]={text:"documentación de la extensión Intlayer para VS Code",type:"27"}],target:"https://intlayer.org/doc/vs-code-extension",title:void 0,type:"15"},$R[808]={text:".",type:"27"}],type:"21"},$R[809]={type:"19"},$R[810]={type:"2"},$R[811]={children:$R[812]=[$R[813]={text:"Ir Más Allá",type:"27"}],id:"ir-mas-alla",level:3,type:"9"},$R[814]={children:$R[815]=[$R[816]={text:"Para ir más allá, puedes implementar el ",type:"27"},$R[817]={children:$R[818]=[$R[819]={text:"editor visual",type:"27"}],target:"/es/doc/concept/editor",title:void 0,type:"15"},$R[820]={text:" o externalizar tu contenido usando el ",type:"27"},$R[821]={children:$R[822]=[$R[823]={text:"CMS",type:"27"}],target:"/es/doc/concept/cms",title:void 0,type:"15"},$R[824]={text:".",type:"27"}],type:"21"},$R[825]={type:"19"}],footnotes:$R[826]=[],inline:!1},nextDoc:$R[827]={title:"SvelteKit",url:"/es/doc/environment/sveltekit"},prevDoc:$R[828]={title:"Vite y Solid",url:"/es/doc/environment/vite-and-solid"},navData:$R[829]={why:$R[830]={title:"¿Por qué Intlayer?",default:$R[831]={createdAt:"2024-08-14",updatedAt:"2026-05-31",title:"Interés de Intlayer",description:"Descubre los beneficios y ventajas de usar Intlayer en tus proyectos. Comprende por qué Intlayer se destaca entre otros frameworks.",keywords:$R[832]=["Beneficios","Ventajas","Intlayer","Framework","Comparación"],slugs:$R[833]=["doc","why"],history:$R[834]=[$R[835]={version:"8.11.2",date:"2026-05-31",changes:"\"Agregar la sección de por qué Intlayer sobre alternativas\""},$R[836]={version:"7.3.1",date:"2025-11-27",changes:"\"Lanzamiento del Compilador\""},$R[837]={version:"5.8.0",date:"2025-08-19",changes:"\"Actualizar tabla comparativa\""},$R[838]={version:"5.5.10",date:"2025-06-29",changes:"\"Inicializar historial\""}],author:"aymericzip",docKey:"./docs/en/interest_of_intlayer.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/interest_of_intlayer.md",relativeUrl:"/es/doc/why",url:"https://intlayer.org/es/doc/why"}},"get-started":$R[839]={title:"Empezar",default:$R[840]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Introducción",description:"Descubre cómo funciona Intlayer. Conoce los pasos que utiliza Intlayer en tu aplicación. Descubre qué hacen los diferentes paquetes.",keywords:$R[841]=["Introducción","Comenzar","Intlayer","Aplicación","Paquetes"],slugs:$R[842]=["doc","get-started"],history:$R[843]=[$R[844]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/introduction.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/introduction.md",relativeUrl:"/es/doc/get-started",url:"https://intlayer.org/es/doc/get-started"}},concept:$R[845]={title:"Concepto",subSections:$R[846]={"how-works-intlayer":$R[847]={title:"Cómo funciona Intlayer",default:$R[848]={createdAt:"2024-08-12",updatedAt:"2025-06-29",title:"Cómo funciona Intlayer",description:"Aprenda cómo funciona Intlayer internamente. Comprenda la arquitectura y los componentes que hacen que Intlayer sea potente.",keywords:$R[849]=["Intlayer","Cómo funciona","Arquitectura","Componentes","Funcionamiento interno"],slugs:$R[850]=["doc","concept","how-works-intlayer"],history:$R[851]=[$R[852]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/how_works_intlayer.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/how_works_intlayer.md",relativeUrl:"/es/doc/concept/how-works-intlayer",url:"https://intlayer.org/es/doc/concept/how-works-intlayer"}},configuration:$R[853]={title:"Configuración",default:$R[854]={createdAt:"2024-08-13",updatedAt:"2026-05-12",title:"Configuración (Configuration)",description:"Aprenda a configure Intlayer para su aplicación. Entienda los diversos ajustes y opciones disponibles para personalizar Intlayer según sus necesidades.",keywords:$R[855]=["Configuración","Ajustes","Personalización","Intlayer","Opciones"],slugs:$R[856]=["doc","concept","configuration"],history:$R[857]=[$R[858]={version:"8.9.4",date:"2026-05-12",changes:"\"Añadir soporte para el proveedor LM Studio\""},$R[859]={version:"8.7.0",date:"2026-04-08",changes:"\"Se añadieron las opciones `prune` y `minify` a la configuración de compilación\""},$R[860]={version:"8.7.0",date:"2026-04-03",changes:"\"Se añadió la opción `currentDomain`\""},$R[861]={version:"8.4.0",date:"2026-03-20",changes:"\"Se añadió la notación de objeto por localidad para 'compiler.output' y 'dictionary.fill'\""},$R[862]={version:"8.3.0",date:"2026-03-11",changes:"\"Se movió 'baseDir' de la configuración 'content' a la configuración 'system'\""},$R[863]={version:"8.2.0",date:"2026-03-09",changes:"\"Se actualizaron las opciones del compilador (compiler), se añadió soporte para 'output' y 'noMetadata'\""},$R[864]={version:"8.1.7",date:"2026-02-25",changes:"\"Se actualizaron las opciones del compilador\""},$R[865]={version:"8.1.5",date:"2026-02-23",changes:"\"Se añadió la opción del compilador 'build-only' y el prefijo del diccionario\""},$R[866]={version:"8.0.6",date:"2026-02-12",changes:"\"Se añadió soporte para los proveedores Open Router, Alibaba, Amazon, Google Vertex Bedrock, Fireworks, Groq, Hugging Face y Together.ai\""},$R[867]={version:"8.0.5",date:"2026-02-06",changes:"\"Se añadió `dataSerialization` a la configuración de IA\""},$R[868]={version:"8.0.0",date:"2026-01-24",changes:"\"Se renombró el modo de importación `live` a `fetch` para describir mejor el mecanismo subyacente.\""},$R[869]={version:"8.0.0",date:"2026-01-22",changes:"\"Se movió la configuración de compilación `importMode` a la configuración `dictionary`.\""},$R[870]={version:"8.0.0",date:"2026-01-22",changes:"\"Se añadió la opción `rewrite` a la configuración de enrutamiento\""},$R[871]={version:"8.0.0",date:"2026-01-18",changes:"\"Se separó la configuración del sistema de la configuración de contenido. Se movieron las rutas internas a la propiedad `system`. Se añadió `codeDir` para separar los archivos de contenido y la transformación de código.\""},$R[872]={version:"8.0.0",date:"2026-01-18",changes:"\"Se añadieron las opciones de diccionario `location` y `schema`\""},$R[873]={version:"7.5.1",date:"2026-01-10",changes:"\"Se añadió soporte para los formatos de archivo JSON5 y JSONC\""},$R[874]={version:"7.5.0",date:"2025-12-17",changes:"\"Se añadió la opción `buildMode`\""},$R[875]={version:"7.0.0",date:"2025-10-25",changes:"\"Se añadió la configuración `dictionary`\""},$R[876]={version:"7.0.0",date:"2025-10-21",changes:"\"Se reemplazó `middleware` por la configuración de enrutamiento `routing`\""},$R[877]={version:"7.0.0",date:"2025-10-12",changes:"\"Se añadió la opción `formatCommand`\""},$R[878]={version:"6.2.0",date:"2025-10-12",changes:"\"Se actualizó la opción `excludedPath`\""},$R[879]={version:"6.0.2",date:"2025-09-23",changes:"\"Se añadió la opción `outputFormat`\""},$R[880]={version:"6.0.0",date:"2025-09-21",changes:"\"Se eliminó el campo `dictionaryOutput` y el campo `i18nextResourcesDir`\""},$R[881]={version:"6.0.0",date:"2025-09-16",changes:"\"Se añadió el modo de importación `live`\""},$R[882]={version:"6.0.0",date:"2025-09-04",changes:"\"Se reemplazó el campo `hotReload` por `liveSync`, y se añadieron los campos `liveSyncPort` y `liveSyncURL`\""},$R[883]={version:"5.6.1",date:"2025-07-25",changes:"\"Se reemplazó `activateDynamicImport` por la opción `importMode`\""},$R[884]={version:"5.6.0",date:"2025-07-13",changes:"\"Se cambió el contentDir predeterminado de `['src']` a `['.']`\""},$R[885]={version:"5.5.11",date:"2025-06-29",changes:"\"Se añadieron los comandos `docs`\""}],author:"aymericzip",docKey:"./docs/en/configuration.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/configuration.md",relativeUrl:"/es/doc/concept/configuration",url:"https://intlayer.org/es/doc/concept/configuration"}},cli:$R[886]={title:"CLI",default:$R[887]={createdAt:"2024-08-11",updatedAt:"2026-03-31",title:"CLI - Todas las comandos de Intlayer CLI para su sitio web multilingüe",description:"Descubra cómo usar Intlayer CLI para gestionar su sitio web multilingüe. Siga los pasos de esta documentación en línea para configurar su proyecto en pocos minutos.",keywords:$R[888]=["CLI","Interfaz de línea de comandos","Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[889]=["doc","concept","cli"],history:$R[890]=[$R[891]={version:"9.0.0",date:"2026-06-11",changes:"\"Agregar comando scan\""},$R[892]={version:"8.6.4",date:"2026-03-31",changes:"\"Agregar comando standalone\""},$R[893]={version:"7.5.11",date:"2026-01-06",changes:"\"Agregar comando CI\""},$R[894]={version:"7.5.11",date:"2026-01-06",changes:"\"Agregar comando list projects\""},$R[895]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[896]={version:"7.2.3",date:"2025-11-22",changes:"\"Agregar comando extract\""},$R[897]={version:"7.1.0",date:"2025-11-05",changes:"\"Agregar opción skipIfExists al comando translate\""},$R[898]={version:"6.1.4",date:"2025-01-27",changes:"\"Agregar alias para argumentos y comandos de CLI\""},$R[899]={version:"6.1.3",date:"2025-10-05",changes:"\"Agregar opción build a los comandos\""},$R[900]={version:"6.1.2",date:"2025-09-26",changes:"\"Agregar comando version\""},$R[901]={version:"6.1.0",date:"2025-09-26",changes:"\"Establecer opción verbose por defecto en true usando CLI\""},$R[902]={version:"6.1.0",date:"2025-09-23",changes:"\"Agregar comando watch y opción with\""},$R[903]={version:"6.0.1",date:"2025-09-23",changes:"\"Agregar comando editor\""},$R[904]={version:"6.0.0",date:"2025-09-17",changes:"\"Agregar comandos content test y list\""},$R[905]={version:"5.5.11",date:"2025-07-11",changes:"\"Actualizar documentación de parámetros de comandos CLI\""},$R[906]={version:"5.5.10",date:"2025-06-29",changes:"\"Inicialización del historial\""}],author:"aymericzip",docKey:"./docs/en/cli/index.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/index.md",relativeUrl:"/es/doc/concept/cli",url:"https://intlayer.org/es/doc/concept/cli"},subSections:$R[907]={test:$R[908]={title:"Test",default:$R[909]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Testear traducciones faltantes",description:"Aprende cómo probar e identificar traducciones faltantes en tus diccionarios.",keywords:$R[910]=["Prueba","Traducciones faltantes","CLI","Intlayer"],slugs:$R[911]=["doc","concept","cli","test"],author:"aymericzip",docKey:"./docs/en/cli/test.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/test.md",relativeUrl:"/es/doc/concept/cli/test",url:"https://intlayer.org/es/doc/concept/cli/test"}},fill:$R[912]={title:"Fill",default:$R[913]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Rellenar Diccionarios",description:"Aprende cómo rellenar, auditar y traducir tus diccionarios usando IA.",keywords:$R[914]=["Rellenar","Auditar","Traducir","Diccionarios","CLI","Intlayer","IA"],slugs:$R[915]=["doc","concept","cli","fill"],author:"aymericzip",docKey:"./docs/en/cli/fill.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/fill.md",relativeUrl:"/es/doc/concept/cli/fill",url:"https://intlayer.org/es/doc/concept/cli/fill"}},build:$R[916]={title:"Build",default:$R[917]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Construir Diccionarios",description:"Aprende cómo construir tus diccionarios de Intlayer a partir de archivos de declaración de contenido.",keywords:$R[918]=["Construir","Diccionarios","CLI","Intlayer"],slugs:$R[919]=["doc","concept","cli","build"],history:$R[920]=[$R[921]={version:"8.1.5",date:"2026-02-23",changes:"\"Añadir opción checkTypes\""}],author:"aymericzip",docKey:"./docs/en/cli/build.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/build.md",relativeUrl:"/es/doc/concept/cli/build",url:"https://intlayer.org/es/doc/concept/cli/build"}},watch:$R[922]={title:"Watch",default:$R[923]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Observar Diccionarios",description:"Aprende cómo observar cambios en tus archivos de declaración de contenido y construir diccionarios automáticamente.",keywords:$R[924]=["Observar","Diccionarios","CLI","Intlayer"],slugs:$R[925]=["doc","concept","cli","watch"],author:"aymericzip",docKey:"./docs/en/cli/watch.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/watch.md",relativeUrl:"/es/doc/concept/cli/watch",url:"https://intlayer.org/es/doc/concept/cli/watch"}},extract:$R[926]={title:"Extract",default:$R[927]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Extraer cadenas",description:"Aprende cómo extraer cadenas de tus componentes a un archivo .content ubicado cerca del componente.",keywords:$R[928]=["Extraer","Componentes","Migración","CLI","Intlayer"],slugs:$R[929]=["doc","concept","cli","extract"],author:"aymericzip",docKey:"./docs/en/cli/extract.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/extract.md",relativeUrl:"/es/doc/concept/cli/extract",url:"https://intlayer.org/es/doc/concept/cli/extract"}},login:$R[930]={title:"Login",default:$R[931]={createdAt:"2025-12-16",updatedAt:"2025-12-16",title:"CLI - Inicio de sesión",description:"Aprende a usar el comando login del CLI de Intlayer para autenticarte con el CMS de Intlayer y obtener credenciales de acceso.",keywords:$R[932]=["CLI","Login","Authentication","CMS","Intlayer","Credentials"],slugs:$R[933]=["doc","concept","cli","login"],author:"aymericzip",docKey:"./docs/en/cli/login.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/login.md",relativeUrl:"/es/doc/concept/cli/login",url:"https://intlayer.org/es/doc/concept/cli/login"}},push:$R[934]={title:"Push",default:$R[935]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Empujar Diccionarios",description:"Aprende cómo empujar tus diccionarios al editor y CMS de Intlayer.",keywords:$R[936]=["Empujar","Diccionarios","CLI","Intlayer","Editor","CMS"],slugs:$R[937]=["doc","concept","cli","push"],author:"aymericzip",docKey:"./docs/en/cli/push.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/push.md",relativeUrl:"/es/doc/concept/cli/push",url:"https://intlayer.org/es/doc/concept/cli/push"}},pull:$R[938]={title:"Pull",default:$R[939]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Extraer Diccionarios",description:"Aprende cómo extraer diccionarios desde el editor y CMS de Intlayer.",keywords:$R[940]=["Extraer","Diccionarios","CLI","Intlayer","Editor","CMS"],slugs:$R[941]=["doc","concept","cli","pull"],author:"aymericzip",docKey:"./docs/en/cli/pull.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/pull.md",relativeUrl:"/es/doc/concept/cli/pull",url:"https://intlayer.org/es/doc/concept/cli/pull"}},configuration:$R[942]={title:"Configuration",default:$R[943]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Gestionar Configuración",description:"Aprende cómo obtener y enviar tu configuración de Intlayer al CMS.",keywords:$R[944]=["Configuración","Config","CLI","Intlayer","CMS"],slugs:$R[945]=["doc","concept","cli","configuration"],author:"aymericzip",docKey:"./docs/en/cli/configuration.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/configuration.md",relativeUrl:"/es/doc/concept/cli/configuration",url:"https://intlayer.org/es/doc/concept/cli/configuration"}},list:$R[946]={title:"List",default:$R[947]={createdAt:"2024-08-11",updatedAt:"2026-01-06",title:"Listar archivos de declaración de contenido",description:"Aprende cómo listar todos los archivos de declaración de contenido en tu proyecto.",keywords:$R[948]=["Listar","Declaración de Contenido","CLI","Intlayer"],slugs:$R[949]=["doc","concept","cli","list"],history:$R[950]=[$R[951]={version:"7.5.12",date:"2026-01-06",changes:"\"Agregar opción de salida absoluta al comando list\""},$R[952]={version:"7.5.11",date:"2026-01-06",changes:"\"Agregar opción de salida JSON al comando list\""}],author:"aymericzip",docKey:"./docs/en/cli/list.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/list.md",relativeUrl:"/es/doc/concept/cli/list",url:"https://intlayer.org/es/doc/concept/cli/list"}},version:$R[953]={title:"Version",default:$R[954]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Comprobar la versión de la CLI",description:"Aprende cómo comprobar la versión instalada de la CLI de Intlayer.",keywords:$R[955]=["Versión","CLI","Intlayer"],slugs:$R[956]=["doc","concept","cli","version"],author:"aymericzip",docKey:"./docs/en/cli/version.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/version.md",relativeUrl:"/es/doc/concept/cli/version",url:"https://intlayer.org/es/doc/concept/cli/version"}},editor:$R[957]={title:"Editor",default:$R[958]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Comandos del Editor",description:"Aprende a usar los comandos del editor de Intlayer.",keywords:$R[959]=["Editor","Editor Visual","CLI","Intlayer"],slugs:$R[960]=["doc","concept","cli","editor"],author:"aymericzip",docKey:"./docs/en/cli/editor.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/editor.md",relativeUrl:"/es/doc/concept/cli/editor",url:"https://intlayer.org/es/doc/concept/cli/editor"}},live:$R[961]={title:"Live",default:$R[962]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Comandos de Live Sync",description:"Aprende a usar Live Sync para reflejar cambios en el contenido del CMS en runtime.",keywords:$R[963]=["Live Sync","CMS","Tiempo de ejecución","CLI","Intlayer"],slugs:$R[964]=["doc","concept","cli","live"],author:"aymericzip",docKey:"./docs/en/cli/live.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/live.md",relativeUrl:"/es/doc/concept/cli/live",url:"https://intlayer.org/es/doc/concept/cli/live"}},debug:$R[965]={title:"Debug",default:$R[966]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Depurar comando Intlayer",description:"Aprende cómo depurar y solucionar problemas del CLI de Intlayer.",keywords:$R[967]=["Depurar","Solucionar problemas","CLI","Intlayer"],slugs:$R[968]=["doc","concept","cli","debug"],author:"aymericzip",docKey:"./docs/en/cli/debug.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/debug.md",relativeUrl:"/es/doc/concept/cli/debug",url:"https://intlayer.org/es/doc/concept/cli/debug"}},"doc-review":$R[969]={title:"Doc Review",default:$R[970]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Revisar Documento",description:"Aprende cómo revisar archivos de documentación para calidad, consistencia y completitud en diferentes locales.",keywords:$R[971]=["Revisión","Documento","Documentación","IA","CLI","Intlayer"],slugs:$R[972]=["doc","concept","cli","doc-review"],author:"aymericzip",docKey:"./docs/en/cli/doc-review.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/doc-review.md",relativeUrl:"/es/doc/concept/cli/doc-review",url:"https://intlayer.org/es/doc/concept/cli/doc-review"}},"doc-translate":$R[973]={title:"Doc Translate",default:$R[974]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Traducir Documento",description:"Aprende cómo traducir automáticamente archivos de documentación usando servicios de traducción AI.",keywords:$R[975]=["Traducir","Documento","Documentación","AI","CLI","Intlayer"],slugs:$R[976]=["doc","concept","cli","doc-translate"],author:"aymericzip",docKey:"./docs/en/cli/doc-translate.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/doc-translate.md",relativeUrl:"/es/doc/concept/cli/doc-translate",url:"https://intlayer.org/es/doc/concept/cli/doc-translate"}},sdk:$R[977]={title:"SDK",default:$R[978]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"SDK CLI",description:"Aprende cómo usar el SDK CLI de Intlayer en tu propio código.",keywords:$R[979]=["SDK","CLI","Intlayer","Programático"],slugs:$R[980]=["doc","concept","cli","sdk"],author:"aymericzip",docKey:"./docs/en/cli/sdk.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/sdk.md",relativeUrl:"/es/doc/concept/cli/sdk",url:"https://intlayer.org/es/doc/concept/cli/sdk"}},scan:$R[981]={title:"Scan",default:$R[982]={createdAt:"2026-06-11",updatedAt:"2026-06-11",title:"Escanear sitio web",description:"Aprenda a usar el comando scan de Intlayer CLI para medir el tamaño de la página y auditar la salud de i18n/SEO de cualquier sitio web.",keywords:$R[983]=["Scan","SEO","i18n","Auditoría","CLI","Intlayer","Tamaño de página","Bundle"],slugs:$R[984]=["doc","concept","cli","scan"],history:$R[985]=[$R[986]={version:"9.0.0",date:"2026-06-11",changes:"\"Agregar comando scan\""}],author:"aymericzip",docKey:"./docs/en/cli/scan.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/cli/scan.md",relativeUrl:"/es/doc/concept/cli/scan",url:"https://intlayer.org/es/doc/concept/cli/scan"}}}},editor:$R[987]={title:"Editor visual",default:$R[988]={createdAt:"2024-08-11",updatedAt:"2025-06-29",title:"Editor Visual Intlayer | Edita tu contenido utilizando un editor visual",description:"Descubre cómo usar el Editor Intlayer para gestionar tu sitio web multilingüe. Sigue los pasos en esta documentación en línea para configurar tu proyecto en pocos minutos.",keywords:$R[989]=["Editor","Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[990]=["doc","concept","editor"],youtubeVideo:"https://www.youtube.com/watch?v=UDDTnirwi_4",history:$R[991]=[$R[992]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_visual_editor.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_visual_editor.md",relativeUrl:"/es/doc/concept/editor",url:"https://intlayer.org/es/doc/concept/editor"}},cms:$R[993]={title:"CMS",default:$R[994]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Intlayer CMS | Externaliza tu contenido en el Intlayer CMS",description:"Externaliza tu contenido en el Intlayer CMS para delegar la gestión de tu contenido a tu equipo.",keywords:$R[995]=["CMS","Editor Visual","Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[996]=["doc","concept","cms"],youtubeVideo:"https://www.youtube.com/watch?v=UDDTnirwi_4",history:$R[997]=[$R[998]={version:"6.0.1",date:"2025-09-22",changes:"\"Añadida documentación de sincronización en vivo\""},$R[999]={version:"6.0.0",date:"2025-09-04",changes:"\"Reemplazado el campo `hotReload` por `liveSync`\""},$R[1000]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_CMS.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_CMS.md",relativeUrl:"/es/doc/concept/cms",url:"https://intlayer.org/es/doc/concept/cms"}},"ci-cd":$R[1001]={title:"Integración CI/CD",default:$R[1002]={createdAt:"2025-05-20",updatedAt:"2025-08-13",title:"Integración CI/CD",description:"Aprende cómo integrar Intlayer en tu pipeline CI/CD para la gestión y despliegue automatizado de contenido.",keywords:$R[1003]=["CI/CD","Integración Continua","Despliegue Continuo","Automatización","Internacionalización","Documentación","Intlayer"],slugs:$R[1004]=["doc","concept","ci-cd"],history:$R[1005]=[$R[1006]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/CI_CD.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/CI_CD.md",relativeUrl:"/es/doc/concept/ci-cd",url:"https://intlayer.org/es/doc/concept/ci-cd"}},content:$R[1007]={title:"Declaración de contenido",default:$R[1008]={createdAt:"2025-02-07",updatedAt:"2026-05-12",title:"Archivo de Contenido",description:"Aprende a personalizar las extensiones para tus archivos de declaración de contenido. Sigue esta documentación para implementar condiciones de manera eficiente en tu proyecto.",keywords:$R[1009]=["Archivo de Contenido","Documentación","Intlayer"],slugs:$R[1010]=["doc","concept","content"],history:$R[1011]=[$R[1012]={version:"8.10.0",date:"2026-05-19",changes:"\"Añadir soporte para formatos de archivo YAML y Markdown\""},$R[1013]={version:"8.9.0",date:"2026-05-12",changes:"\"Añadir tipo de nodo de contenido `plural`\""},$R[1014]={version:"8.0.0",date:"2026-01-28",changes:"\"Añadir tipo de nodo de contenido `html`\""},$R[1015]={version:"8.0.0",date:"2026-01-24",changes:"\"Rename `live` import mode to `fetch` to better describe the underlying mechanism.\""},$R[1016]={version:"8.0.0",date:"2026-01-18",changes:"\"Añadir opciones de diccionario `location` y `schema`\""},$R[1017]={version:"7.5.13",date:"2026-01-10",changes:"\"Añadir soporte para formatos de archivo JSON5 y JSONC\""},$R[1018]={version:"7.5.0",date:"2025-12-13",changes:"\"Añadido soporte para formatos ICU e i18next\""},$R[1019]={version:"6.0.0",date:"2025-09-20",changes:"\"Añadida documentación de campos\""},$R[1020]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/dictionary/content_file.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/content_file.md",relativeUrl:"/es/doc/concept/content",url:"https://intlayer.org/es/doc/concept/content"},subSections:$R[1021]={translation:$R[1022]={title:"Traducción",default:$R[1023]={createdAt:"2024-08-11",updatedAt:"2025-06-29",title:"Traducción",description:"Descubre cómo declarar y usar traducción en tu sitio web multilingüe. Sigue los pasos en esta documentación en línea para configurar tu proyecto en pocos minutos.",keywords:$R[1024]=["Traducción","Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[1025]=["doc","concept","content","translation"],history:$R[1026]=[$R[1027]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/dictionary/translation.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/translation.md",relativeUrl:"/es/doc/concept/content/translation",url:"https://intlayer.org/es/doc/concept/content/translation"}},plural:$R[1028]={title:"Plural",default:$R[1029]={createdAt:"2026-05-04",updatedAt:"2026-05-04",title:"Plural",description:"Descubre cómo declarar y utilizar contenido en plural adaptado a la configuración regional (basado en CLDR) en tu sitio web multilingüe. Sigue los pasos de esta documentación en línea para configurar tu proyecto en unos minutos.",keywords:$R[1030]=["Plural","Pluralización","CLDR","Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[1031]=["doc","concept","content","plural"],history:$R[1032]=[$R[1033]={version:"8.8.0",date:"2026-05-04",changes:"\"Init history\""}],author:"aymericzip",docKey:"./docs/en/dictionary/plurial.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/plurial.md",relativeUrl:"/es/doc/concept/content/plural",url:"https://intlayer.org/es/doc/concept/content/plural"}},enumeration:$R[1034]={title:"Enumeración",default:$R[1035]={createdAt:"2024-08-11",updatedAt:"2025-06-29",title:"Enumeración",description:"Descubre cómo declarar y usar enumeraciones en tu sitio web multilingüe. Sigue los pasos en esta documentación en línea para configurar tu proyecto en pocos minutos.",keywords:$R[1036]=["Enumeración","Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[1037]=["doc","concept","content","enumeration"],history:$R[1038]=[$R[1039]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/dictionary/enumeration.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/enumeration.md",relativeUrl:"/es/doc/concept/content/enumeration",url:"https://intlayer.org/es/doc/concept/content/enumeration"}},condition:$R[1040]={title:"Condición",default:$R[1041]={createdAt:"2025-02-07",updatedAt:"2025-06-29",title:"Contenido condicional",description:"Descubre cómo usar contenido condicional en Intlayer para mostrar contenido dinámico basado en condiciones específicas. Sigue esta documentación para implementar condiciones de manera eficiente en tu proyecto.",keywords:$R[1042]=["Contenido condicional","Renderizado dinámico","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[1043]=["doc","concept","content","condition"],author:"aymericzip",docKey:"./docs/en/dictionary/condition.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/condition.md",relativeUrl:"/es/doc/concept/content/condition",url:"https://intlayer.org/es/doc/concept/content/condition",history:$R[1044]=[$R[1045]={version:"5.5.10",date:"2025-06-29",changes:"\"Init history\""}]}},gender:$R[1046]={title:"Género",default:$R[1047]={createdAt:"2025-07-27",updatedAt:"2025-07-27",title:"Contenido Basado en Género",description:"Aprende cómo usar contenido basado en género en Intlayer para mostrar contenido dinámicamente según el género. Sigue esta documentación para implementar contenido específico por género de manera eficiente en tu proyecto.",keywords:$R[1048]=["Contenido Basado en Género","Renderizado Dinámico","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[1049]=["doc","concept","content","gender"],history:$R[1050]=[$R[1051]={version:"5.7.2",date:"2025-07-27",changes:"\"Introducción de contenido basado en género\""}],author:"aymericzip",docKey:"./docs/en/dictionary/gender.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/gender.md",relativeUrl:"/es/doc/concept/content/gender",url:"https://intlayer.org/es/doc/concept/content/gender"}},insertion:$R[1052]={title:"Inserción",default:$R[1053]={createdAt:"2025-03-13",updatedAt:"2025-06-29",title:"Inserción",description:"Aprende cómo declarar y usar marcadores de posición de inserción en tu contenido. Esta documentación te guía a través de los pasos para insertar valores dinámicamente dentro de estructuras de contenido predefinidas.",keywords:$R[1054]=["Inserción","Contenido Dinámico","Marcadores de Posición","Intlayer","Next.js","JavaScript","React"],slugs:$R[1055]=["doc","concept","content","insertion"],history:$R[1056]=[$R[1057]={version:"8.0.0",date:"2026-01-18",changes:"\"Decoración automática del contenido de inserción\""},$R[1058]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/dictionary/insertion.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/insertion.md",relativeUrl:"/es/doc/concept/content/insertion",url:"https://intlayer.org/es/doc/concept/content/insertion"}},file:$R[1059]={title:"Archivo",default:$R[1060]={createdAt:"2025-03-13",updatedAt:"2025-06-29",title:"Archivo",description:"Aprende cómo incrustar archivos externos en tu diccionario de contenido usando la función `file`. Esta documentación explica cómo Intlayer enlaza y gestiona el contenido de archivos dinámicamente.",keywords:$R[1061]=["Archivo","Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[1062]=["doc","concept","content","file"],history:$R[1063]=[$R[1064]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/dictionary/file.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/file.md",relativeUrl:"/es/doc/concept/content/file",url:"https://intlayer.org/es/doc/concept/content/file"}},nesting:$R[1065]={title:"Anidación",default:$R[1066]={createdAt:"2025-02-07",updatedAt:"2025-06-29",title:"Anidación del diccionario",description:"Descubre cómo usar la anidación de contenido en Intlayer para reutilizar y estructurar tu contenido multilingüe de manera eficiente. Sigue esta documentación para implementar la anidación sin problemas en tu proyecto.",keywords:$R[1067]=["Nesting","Reutilización de contenido","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[1068]=["doc","concept","content","nesting"],author:"aymericzip",docKey:"./docs/en/dictionary/nesting.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/nesting.md",relativeUrl:"/es/doc/concept/content/nesting",url:"https://intlayer.org/es/doc/concept/content/nesting",history:$R[1069]=[$R[1070]={version:"5.5.10",date:"2025-06-29",changes:"\"Init history\""}]}},markdown:$R[1071]={title:"Markdown",default:$R[1072]={createdAt:"2025-02-07",updatedAt:"2026-05-19",title:"Markdown",description:"Aprenda cómo declarar y usar contenido Markdown en su sitio web multilingüe con Intlayer. Siga los pasos de esta documentación en línea para integrar Markdown sin problemas en su proyecto.",keywords:$R[1073]=["Markdown","Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[1074]=["doc","concept","content","markdown"],history:$R[1075]=[$R[1076]={version:"8.11.0",date:"2026-05-28",changes:"\"Permitir el preanálisis del AST de Markdown para SSR / hidratación\""},$R[1077]={version:"8.10.0",date:"2026-05-19",changes:"\"Se agregó soporte para archivos `.content.md`\""},$R[1078]={version:"8.5.0",date:"2026-03-24",changes:"\"Se agregó el objeto plugin `intlayerMarkdown`; use `app.use(intlayerMarkdown)` en lugar de `app.use(installIntlayerMarkdown)`\""},$R[1079]={version:"8.5.0",date:"2026-03-24",changes:"\"Se movió la importación de `{{framework}}-intlayer` a `{{framework}}-intlayer/markdown`\""},$R[1080]={version:"8.0.0",date:"2026-01-22",changes:"\"Se agregó la utilidad MarkdownRenderer / useMarkdownRenderer / renderMarkdown y la opción forceInline\""},$R[1081]={version:"8.0.0",date:"2026-01-18",changes:"\"Decoración automática de contenido markdown, soporte para MDX y SSR\""},$R[1082]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicializado\""}],author:"aymericzip",docKey:"./docs/en/dictionary/markdown.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/markdown.md",relativeUrl:"/es/doc/concept/content/markdown",url:"https://intlayer.org/es/doc/concept/content/markdown"}},html:$R[1083]={title:"HTML",default:$R[1084]={createdAt:"2026-01-20",updatedAt:"2026-03-24",title:"Contenido HTML",description:"Aprende a declarar y utilizar contenido HTML con componentes personalizados en Intlayer. Sigue esta documentación para incrustar contenido enriquecido tipo HTML con reemplazo dinámico de componentes en tu proyecto internacionalizado.",keywords:$R[1085]=["HTML","Componentes Personalizados","Contenido Enriquecido","Intlayer","Next.js","JavaScript","React","Vue","Svelte"],slugs:$R[1086]=["doc","concept","content","html"],history:$R[1087]=[$R[1088]={version:"8.5.0",date:"2026-03-24",changes:"\"Add `intlayerHTML` plugin object; use `app.use(intlayerHTML)` instead of `app.use(installIntlayerHTML)`\""},$R[1089]={version:"8.5.0",date:"2026-03-24",changes:"\"mover la importación de {{framework}}-intlayer a {{framework}}-intlayer/html\""},$R[1090]={version:"8.0.0",date:"2026-01-22",changes:"\"Agregar HTMLRenderer / useHTMLRenderer / utilidad renderHTML\""},$R[1091]={version:"8.0.0",date:"2026-01-20",changes:"\"Agregar soporte para parsing HTML\""}],author:"aymericzip",docKey:"./docs/en/dictionary/html.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/html.md",relativeUrl:"/es/doc/concept/content/html",url:"https://intlayer.org/es/doc/concept/content/html"}},"function-fetching":$R[1092]={title:"Obtención de función",default:$R[1093]={createdAt:"2024-08-11",updatedAt:"2025-06-29",title:"Obtención de Funciones",description:"Descubre cómo declarar y usar la obtención de funciones en tu sitio web multilingüe. Sigue los pasos en esta documentación en línea para configurar tu proyecto en pocos minutos.",keywords:$R[1094]=["Obtención de Funciones","Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React"],slugs:$R[1095]=["doc","concept","content","function-fetching"],history:$R[1096]=[$R[1097]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/dictionary/function_fetching.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/function_fetching.md",relativeUrl:"/es/doc/concept/content/function-fetching",url:"https://intlayer.org/es/doc/concept/content/function-fetching"}}}},"dynamic-dyctionary":$R[1098]={title:"Archivo por locale",default:$R[1099]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Diccionarios Dinámicos",description:"Descripción general de las tres funciones de diccionario dinámico de Intlayer — colecciones, variantes y registros dinámicos — para crear contenido i18n flexible y controlado en tiempo de ejecución.",keywords:$R[1100]=["Diccionarios Dinámicos","Colecciones","Variantes","Registros Dinámicos","Intlayer","Internacionalización"],slugs:$R[1101]=["doc","concept","dynamic-dictionaries"],history:$R[1102]=[$R[1103]={version:"9.0.0",date:"2026-06-12",changes:"\"Lanzamiento de la función de diccionarios dinámicos\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/index.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dynamic_dictionaries/index.md",relativeUrl:"/es/doc/concept/dynamic-dictionaries",url:"https://intlayer.org/es/doc/concept/dynamic-dictionaries"},subSections:$R[1104]={collections:$R[1105]={title:"Colecciones",default:$R[1106]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Colecciones",description:"Utilice el campo de metadatos item en los archivos de contenido de Intlayer para crear colecciones ordenadas de elementos localizados seleccionables por índice en tiempo de ejecución.",keywords:$R[1107]=["Colecciones","Lista de Contenido","Contenido Dinámico","Intlayer","Internacionalización"],slugs:$R[1108]=["doc","concept","collections"],history:$R[1109]=[$R[1110]={version:"9.0.0",date:"2026-06-12",changes:"\"Lanzamiento de la función de colecciones de diccionarios\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/collections.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dynamic_dictionaries/collections.md",relativeUrl:"/es/doc/concept/collections",url:"https://intlayer.org/es/doc/concept/collections"}},variants:$R[1111]={title:"Variantes",default:$R[1112]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Variantes",description:"Utilice el campo de metadatos de variante en los archivos de contenido de Intlayer para declarar alternativas de contenido nombradas (pruebas A/B, banners de temporada, copia con indicadores de función) y cambie entre ellas en tiempo de ejecución sin cambios de código.",keywords:$R[1113]=["Variantes","Pruebas A/B","Indicadores de Funciones","Contenido Dinámico","Intlayer","Internacionalización"],slugs:$R[1114]=["doc","concept","variants"],history:$R[1115]=[$R[1116]={version:"9.0.0",date:"2026-06-12",changes:"\"Lanzamiento de la función de variantes de diccionarios\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/variants.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dynamic_dictionaries/variants.md",relativeUrl:"/es/doc/concept/variants",url:"https://intlayer.org/es/doc/concept/variants"}},"dynamic-content":$R[1117]={title:"Registros dinámicos",default:$R[1118]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Registros Dinámicos",description:"Utilice el campo meta en los archivos de contenido de Intlayer para declarar registros administrados por CMS obtenidos en tiempo de ejecución mediante un ID opaco, lo que permite contenido dinámico fuertemente tipado sin enumeración en tiempo de compilación.",keywords:$R[1119]=["Registros Dinámicos","Contenido Dinámico","CMS","Contenido en Tiempo de Ejecución","Intlayer","Internacionalización"],slugs:$R[1120]=["doc","concept","dynamic-records"],history:$R[1121]=[$R[1122]={version:"9.0.0",date:"2026-06-12",changes:"\"Lanzamiento de la función de contenido dinámico\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/dynamic_content.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dynamic_dictionaries/dynamic_content.md",relativeUrl:"/es/doc/concept/dynamic-records",url:"https://intlayer.org/es/doc/concept/dynamic-records"}}}},"per-locale-file":$R[1123]={title:"Archivo por locale",default:$R[1124]={createdAt:"2025-04-18",updatedAt:"2025-06-29",title:"Declaración de contenido `Por-Locale` en Intlayer",description:"Descubre cómo declarar contenido por locale en Intlayer. Sigue la documentación para entender los diferentes formatos y casos de uso.",keywords:$R[1125]=["Internacionalización","Documentación","Intlayer","Por-Locale","TypeScript","JavaScript"],slugs:$R[1126]=["doc","concept","per-locale-file"],history:$R[1127]=[$R[1128]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/per_locale_file.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/per_locale_file.md",relativeUrl:"/es/doc/concept/per-locale-file",url:"https://intlayer.org/es/doc/concept/per-locale-file"}},compiler:$R[1129]={title:"Compilador",default:$R[1130]={createdAt:"2025-09-09",updatedAt:"2026-03-12",title:"Intlayer Compiler | Extracción Automática de Contenido para i18n",description:"Automatiza tu proceso de internacionalización con el Intlayer Compiler. Extrae contenido directamente de tus componentes para una i18n más rápida y eficiente en Vite, Next.js y más.",keywords:$R[1131]=["Intlayer","Compiler","Internacionalización","i18n","Automatización","Extracción","Velocidad","Vite","Next.js","React","Vue","Svelte"],slugs:$R[1132]=["doc","compiler"],history:$R[1133]=[$R[1134]={version:"8.2.0",date:"2026-03-10",changes:"\"Update compiler options, add FilePathPattern support\""},$R[1135]={version:"8.1.7",date:"2026-02-25",changes:"\"Actualizar opciones del compilador\""},$R[1136]={version:"7.3.1",date:"2025-11-27",changes:"\"Lanzamiento del Compiler\""}],author:"aymericzip",docKey:"./docs/en/compiler.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/compiler.md",relativeUrl:"/es/doc/compiler",url:"https://intlayer.org/es/doc/compiler"}},"auto-fill":$R[1137]={title:"Autocompletado",default:$R[1138]={createdAt:"2025-03-13",updatedAt:"2025-09-20",title:"Relleno Automático",description:"Aprende a usar la funcionalidad de relleno automático en Intlayer para poblar contenido automáticamente basado en patrones predefinidos. Sigue esta documentación para implementar funciones de relleno automático de manera eficiente en tu proyecto.",keywords:$R[1139]=["Relleno Automático","Automatización de Contenido","Contenido Dinámico","Intlayer","Next.js","JavaScript","React"],slugs:$R[1140]=["doc","concept","auto-fill"],history:$R[1141]=[$R[1142]={version:"6.0.0",date:"2025-09-20",changes:"\"Añadir configuración global\""},$R[1143]={version:"6.0.0",date:"2025-09-17",changes:"\"Añadir variable `{{fileName}}`\""},$R[1144]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/autoFill.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/autoFill.md",relativeUrl:"/es/doc/concept/auto-fill",url:"https://intlayer.org/es/doc/concept/auto-fill"}},testing:$R[1145]={title:"Pruebas",default:$R[1146]={createdAt:"2025-03-01",updatedAt:"2025-09-20",title:"Probando tu contenido",description:"Descubre cómo probar tu contenido con Intlayer.",keywords:$R[1147]=["Pruebas","Intlayer","Internacionalización","CMS","Sistema de Gestión de Contenidos","Editor Visual"],slugs:$R[1148]=["doc","testing"],history:$R[1149]=[$R[1150]={version:"6.0.0",date:"2025-09-20",changes:"\"Introducción de pruebas\""}],author:"aymericzip",docKey:"./docs/en/testing.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/testing.md",relativeUrl:"/es/doc/testing",url:"https://intlayer.org/es/doc/testing"}},bundle_optimization:$R[1151]={title:"Optimización de bundle",default:$R[1152]={createdAt:"2025-11-25",updatedAt:"2026-06-07",title:"Optimización del tamaño y rendimiento del paquete i18n",description:"Reduce el tamaño del paquete de tu aplicación optimizando el contenido de internacionalización (i18n). Aprende cómo aprovechar el tree shaking y el lazy loading para diccionarios con Intlayer.",keywords:$R[1153]=["Optimización de paquete","Automatización de contenido","Contenido dinámico","Intlayer","Next.js","JavaScript","React"],slugs:$R[1154]=["doc","concept","bundle-optimization"],history:$R[1155]=[$R[1156]={version:"8.12.0",date:"2026-06-07",changes:"\"Añadidos `intlayerPurgeBabelPlugin` y `intlayerMinifyBabelPlugin` para Babel/Webpack; aclaración del flujo de plugins\""},$R[1157]={version:"8.7.0",date:"2026-04-08",changes:"\"Añadidas las opciones `minify` y `purge` a la configuración de compilación\""}],author:"aymericzip",docKey:"./docs/en/bundle_optimization.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/bundle_optimization.md",relativeUrl:"/es/doc/concept/bundle-optimization",url:"https://intlayer.org/es/doc/concept/bundle-optimization"}}},routing:$R[1158]={title:"Enrutamiento",subSections:$R[1159]={custom_url_rewrites:$R[1160]={title:"Reescrituras de URL personalizadas",default:$R[1161]={createdAt:"2024-08-13",updatedAt:"2026-01-26",title:"Reescrituras de URL personalizadas",description:"Aprende cómo configurar y usar reescrituras de URL personalizadas en Intlayer para definir rutas específicas por locale.",keywords:$R[1162]=["Reescrituras de URL personalizadas","Enrutamiento","Internacionalización","i18n"],slugs:$R[1163]=["doc","concept","custom_url_rewrites"],history:$R[1164]=[$R[1165]={version:"8.0.0",date:"2026-01-25",changes:"\"Implementar reescrituras de URL centralizadas con formateadores específicos por framework y el hook useRewriteURL.\""}],author:"aymericzip",docKey:"./docs/en/custom_url_rewrites.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/custom_url_rewrites.md",relativeUrl:"/es/doc/concept/custom_url_rewrites",url:"https://intlayer.org/es/doc/concept/custom_url_rewrites"}},"domains-i18n":$R[1166]={title:"Dominios i18n",default:$R[1167]={createdAt:"2026-04-02",updatedAt:"2026-04-02",title:"Dominios personalizados",description:"Aprenda a configurar el enrutamiento por locales basado en dominios en Intlayer para servir diferentes locales desde nombres de host dedicados.",keywords:$R[1168]=["Dominios personalizados","Enrutamiento por dominio","Enrutamiento","Internacionalización","i18n"],slugs:$R[1169]=["doc","concept","custom_domains"],history:$R[1170]=[$R[1171]={version:"8.5.0",date:"2026-04-02",changes:"\"Se agregó el enrutamiento por locales basado en dominios a través de la configuración routing.domains.\""}],author:"aymericzip",docKey:"./docs/en/custom_domains.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/custom_domains.md",relativeUrl:"/es/doc/concept/custom_domains",url:"https://intlayer.org/es/doc/concept/custom_domains"}}}}},environment:$R[1172]={title:"Entornos",subSections:$R[1173]={nextjs:$R[1174]={title:"Next.js",default:$R[1175]={createdAt:"2024-12-06",updatedAt:"2026-05-31",title:"Next.js 16 i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Next.js 16 multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1176]=["Internacionalización","Documentación","Intlayer","Next.js 16","JavaScript","React"],slugs:$R[1177]=["doc","environment","nextjs"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-16-template",applicationShowcase:"https://intlayer-next-16-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1178]=[$R[1179]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1180]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1181]={version:"7.0.6",date:"2025-11-01",changes:"\"Se agregó la mención de `x-default` en el objeto `alternates`\""},$R[1182]={version:"7.0.0",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_16.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_nextjs_16.md",relativeUrl:"/es/doc/environment/nextjs",url:"https://intlayer.org/es/doc/environment/nextjs"},subSections:$R[1183]={14:$R[1184]={title:"Next.js 14 y App Router",default:$R[1185]={createdAt:"2024-12-06",updatedAt:"2026-05-31",title:"Next.js 14 i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Next.js 14 multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1186]=["Internacionalización","Documentación","Intlayer","Next.js 14","JavaScript","React"],slugs:$R[1187]=["doc","environment","nextjs","14"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-14-template",applicationShowcase:"https://intlayer-next-14-template.vercel.app",history:$R[1188]=[$R[1189]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1190]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1191]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_14.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_nextjs_14.md",relativeUrl:"/es/doc/environment/nextjs/14",url:"https://intlayer.org/es/doc/environment/nextjs/14"},frameworks:$R[1192]=["nextjs","react"]},15:$R[1193]={title:"Next.js 15",default:$R[1194]={createdAt:"2024-12-06",updatedAt:"2026-05-31",title:"Next.js 15 i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Next.js 15 multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1195]=["Internacionalización","Documentación","Intlayer","Next.js 15","JavaScript","React"],slugs:$R[1196]=["doc","environment","nextjs","15"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-15-template",applicationShowcase:"https://next-15-intlayer-template-xt83.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1197]=[$R[1198]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1199]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1200]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_15.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_nextjs_15.md",relativeUrl:"/es/doc/environment/nextjs/15",url:"https://intlayer.org/es/doc/environment/nextjs/15"},frameworks:$R[1201]=["nextjs","react"]},"no-locale-path":$R[1202]={title:"Next.js sin locale URL",default:$R[1203]={createdAt:"2026-01-10",updatedAt:"2026-05-31",title:"Next.js 16 i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Next.js 16 multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1204]=["Internacionalización","Documentación","Intlayer","Next.js 16","JavaScript","React"],slugs:$R[1205]=["doc","environment","nextjs","no-locale-path"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-no-lolale-path-template",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1206]=[$R[1207]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1208]={version:"8.0.0",date:"2026-01-10",changes:"\"Lanzamiento inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_no_locale_path.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_nextjs_no_locale_path.md",relativeUrl:"/es/doc/environment/nextjs/no-locale-path",url:"https://intlayer.org/es/doc/environment/nextjs/no-locale-path"},frameworks:$R[1209]=["nextjs","react"]},"next-with-Page-Router":$R[1210]={title:"Next.js y Page Router",default:$R[1211]={createdAt:"2024-12-07",updatedAt:"2026-05-31",title:"Next.js Page Router i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Next.js Page Router multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1212]=["Internacionalización","Documentación","Intlayer","Page Router","Next.js","JavaScript","React"],slugs:$R[1213]=["doc","environment","nextjs","next-with-page-router"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-14-template",applicationShowcase:"https://intlayer-next-14-template.vercel.app",history:$R[1214]=[$R[1215]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1216]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1217]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_page_router.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_nextjs_page_router.md",relativeUrl:"/es/doc/environment/nextjs/next-with-page-router",url:"https://intlayer.org/es/doc/environment/nextjs/next-with-page-router"},frameworks:$R[1218]=["nextjs","react"]},"next-with-compiler":$R[1219]={title:"Compiler",default:$R[1220]={createdAt:"2026-01-10",updatedAt:"2026-05-31",title:"Next.js i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Next.js multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1221]=["Internacionalización","Documentación","Intlayer","Next.js","JavaScript","React","Compilador","IA"],slugs:$R[1222]=["doc","environment","nextjs","compiler"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-no-lolale-path-template",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1223]=[$R[1224]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1225]={version:"8.2.0",date:"2026-03-09",changes:"\"Update compiler options, add FilePathPattern support\""},$R[1226]={version:"8.1.6",date:"2026-02-23",changes:"\"Versión inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_compiler.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_nextjs_compiler.md",relativeUrl:"/es/doc/environment/nextjs/compiler",url:"https://intlayer.org/es/doc/environment/nextjs/compiler"},frameworks:$R[1227]=["nextjs","react"]}},frameworks:$R[1228]=["nextjs","react"]},"tanstack-start":$R[1229]={title:"Tanstack Start",default:$R[1230]={createdAt:"2025-09-09",updatedAt:"2026-05-31",title:"TanStack Start i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación TanStack Start multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1231]=["Internacionalización","Documentación","Intlayer","Tanstack Start","React","i18n","TypeScript","Enrutamiento por configuración regional","Sitemap"],slugs:$R[1232]=["doc","environment","tanstack-start"],applicationTemplate:"https://github.com/aymericzip/intlayer-tanstack-start-template",applicationShowcase:"https://intlayer-tanstack-start-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=_XTdKVWaeqg",history:$R[1233]=[$R[1234]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1235]={version:"7.5.9",date:"2025-12-30",changes:"\"Añadir comando init\""},$R[1236]={version:"7.4.0",date:"2025-12-11",changes:"\"Introducir validatePrefix y añadir el paso 14: Gestión de páginas 404 con rutas localizadas.\""},$R[1237]={version:"7.3.9",date:"2025-12-05",changes:"\"Añadir el paso 13: Obtener la configuración regional en tus acciones del servidor (Opcional)\""},$R[1238]={version:"7.2.3",date:"2025-11-18",changes:"\"Añadir el paso 13: Adaptar Nitro\""},$R[1239]={version:"7.1.0",date:"2025-11-17",changes:"\"Corregir prefijo por defecto añadiendo la función getPrefix, useLocalizedNavigate, LocaleSwitcher y LocalizedLink.\""},$R[1240]={version:"6.5.2",date:"2025-10-03",changes:"\"Actualizar documento\""},$R[1241]={version:"5.8.1",date:"2025-09-09",changes:"\"Añadido para Tanstack Start\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_tanstack.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_tanstack.md",relativeUrl:"/es/doc/environment/tanstack-start",url:"https://intlayer.org/es/doc/environment/tanstack-start"},frameworks:$R[1242]=["tanstack","react","vite"],subSections:$R[1243]={"tanstack-start-solid":$R[1244]={title:"Tanstack Start Solid",default:$R[1245]={createdAt:"2025-03-25",updatedAt:"2026-05-31",title:"TanStack Start + Solid i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación TanStack Start + Solid multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1246]=["Internacionalización","Documentación","Intlayer","Tanstack Start","Solid","i18n","TypeScript","Enrutamiento de localización","Sitemap"],slugs:$R[1247]=["doc","environment","tanstack-start","solid"],applicationTemplate:"https://github.com/aymericzip/intlayer-tanstack-start-solid-template",applicationShowcase:"https://intlayer-tanstack-start-solid.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=_XTdKVWaeqg",history:$R[1248]=[$R[1249]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1250]={version:"8.5.1",date:"2026-03-25",changes:"\"Añadido para Tanstack Start Solid.js\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_tanstack+solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_tanstack+solid.md",relativeUrl:"/es/doc/environment/tanstack-start/solid",url:"https://intlayer.org/es/doc/environment/tanstack-start/solid"},frameworks:$R[1251]=["solid","tanstack","vite"]}}},astro:$R[1252]={title:"Astro",default:$R[1253]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Astro i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Astro multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1254]=["internacionalización","documentación","Intlayer","Vite","React","i18n","JavaScript"],slugs:$R[1255]=["doc","environment","astro"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1256]=[$R[1257]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1258]={version:"7.5.9",date:"2025-12-30",changes:"\"Añadir comando init\""},$R[1259]={version:"6.2.0",date:"2025-10-03",changes:"\"Actualización de la integración, configuración y uso de Astro\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_astro.md",relativeUrl:"/es/doc/environment/astro",url:"https://intlayer.org/es/doc/environment/astro"},frameworks:$R[1260]=["astro","vite"],subSections:$R[1261]={"astro-and-react":$R[1262]={title:"Astro y React",default:$R[1263]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Astro + React i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Astro + React multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1264]=["internacionalización","documentación","Intlayer","Astro","React","i18n","JavaScript"],slugs:$R[1265]=["doc","environment","astro","react"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1266]=[$R[1267]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1268]={version:"7.5.9",date:"2025-12-30",changes:"\"Añadir comando init\""},$R[1269]={version:"6.2.0",date:"2025-10-03",changes:"\"Actualización de la integración, configuración y uso de Astro\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_react.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_astro_react.md",relativeUrl:"/es/doc/environment/astro/react",url:"https://intlayer.org/es/doc/environment/astro/react"},frameworks:$R[1270]=["react","astro","vite"]},"astro-and-svelte":$R[1271]={title:"Astro y Svelte",default:$R[1272]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Svelte i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Astro + Svelte multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1273]=["internacionalización","documentación","Intlayer","Astro","Svelte","i18n","JavaScript"],slugs:$R[1274]=["doc","environment","astro","svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1275]=[$R[1276]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1277]={version:"8.7.7",date:"2026-04-24",changes:"\"Documentación inicial para Astro + Svelte\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_astro_svelte.md",relativeUrl:"/es/doc/environment/astro/svelte",url:"https://intlayer.org/es/doc/environment/astro/svelte"},frameworks:$R[1278]=["svelte","astro","vite"]},"astro-and-vue":$R[1279]={title:"Astro y Vue",default:$R[1280]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Vue i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Astro + Vue multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1281]=["internacionalización","documentación","Intlayer","Astro","Vue","i18n","JavaScript"],slugs:$R[1282]=["doc","environment","astro","vue"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1283]=[$R[1284]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1285]={version:"8.7.7",date:"2026-04-24",changes:"\"Documentación inicial para Astro + Vue\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_vue.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_astro_vue.md",relativeUrl:"/es/doc/environment/astro/vue",url:"https://intlayer.org/es/doc/environment/astro/vue"},frameworks:$R[1286]=["vue","astro","vite"]},"astro-and-solid":$R[1287]={title:"Astro y Solid",default:$R[1288]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Solid i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Astro + Solid multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1289]=["internacionalización","documentación","Intlayer","Astro","Solid","i18n","JavaScript"],slugs:$R[1290]=["doc","environment","astro","solid"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1291]=[$R[1292]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1293]={version:"8.7.7",date:"2026-04-24",changes:"\"Documentación inicial para Astro + Solid\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_astro_solid.md",relativeUrl:"/es/doc/environment/astro/solid",url:"https://intlayer.org/es/doc/environment/astro/solid"},frameworks:$R[1294]=["solid","astro","vite"]},"astro-and-preact":$R[1295]={title:"Astro y Preact",default:$R[1296]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Preact i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Astro + Preact multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1297]=["internacionalización","documentación","Intlayer","Astro","Preact","i18n","JavaScript"],slugs:$R[1298]=["doc","environment","astro","preact"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1299]=[$R[1300]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1301]={version:"8.7.7",date:"2026-04-24",changes:"\"Documentación inicial para Astro + Preact\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_preact.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_astro_preact.md",relativeUrl:"/es/doc/environment/astro/preact",url:"https://intlayer.org/es/doc/environment/astro/preact"},frameworks:$R[1302]=["preact","astro","vite"]},"astro-and-lit":$R[1303]={title:"Astro y Lit",default:$R[1304]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Lit i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Astro + Lit multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1305]=["internacionalización","documentación","Intlayer","Astro","Lit","Web Components","i18n","JavaScript"],slugs:$R[1306]=["doc","environment","astro","lit"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1307]=[$R[1308]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1309]={version:"8.7.7",date:"2026-04-24",changes:"\"Documentación inicial para Astro + Lit\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_lit.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_astro_lit.md",relativeUrl:"/es/doc/environment/astro/lit",url:"https://intlayer.org/es/doc/environment/astro/lit"},frameworks:$R[1310]=["lit","astro","vite"]},"astro-and-vanilla-js":$R[1311]={title:"Astro y Vanilla JS",default:$R[1312]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Vanilla JS i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Astro + Vanilla JS multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1313]=["internacionalización","documentación","Intlayer","Astro","Vanilla JS","JavaScript","TypeScript"],slugs:$R[1314]=["doc","environment","astro","vanilla"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1315]=[$R[1316]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1317]={version:"8.7.7",date:"2026-04-24",changes:"\"Documentación inicial para Astro + Vanilla JS\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_vanilla.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_astro_vanilla.md",relativeUrl:"/es/doc/environment/astro/vanilla",url:"https://intlayer.org/es/doc/environment/astro/vanilla"},frameworks:$R[1318]=["vanilla","astro","vite"]}}},"vite-and-react":$R[1319]={title:"Vite y React",default:$R[1320]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Vite + React i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vite + React multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1321]=["Internacionalización","Documentación","Intlayer","Vite","React","i18n","JavaScript"],slugs:$R[1322]=["doc","environment","vite-and-react"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-react-template",applicationShowcase:"https://intlayer-vite-react-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1323]=[$R[1324]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1325]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1326]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+react.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+react.md",relativeUrl:"/es/doc/environment/vite-and-react",url:"https://intlayer.org/es/doc/environment/vite-and-react"},subSections:$R[1327]={"react-router-v7":$R[1328]={title:"React Router v7",default:$R[1329]={createdAt:"2025-09-04",updatedAt:"2026-05-31",title:"React Router v7 i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación React Router v7 multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1330]=["Internacionalización","Documentación","Intlayer","React Router v7","React","i18n","TypeScript","Enrutamiento por Locale"],slugs:$R[1331]=["doc","environment","vite-and-react","react-router-v7"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-router-v7-template",applicationShowcase:"https://intlayer-react-router-v7.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1332]=[$R[1333]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1334]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1335]={version:"7.5.6",date:"2025-12-27",changes:"\"Actualizar Layout y manejar 404\""},$R[1336]={version:"6.1.5",date:"2025-10-03",changes:"\"Documento actualizado\""},$R[1337]={version:"5.8.2",date:"2025-09-04",changes:"\"Añadido para React Router v7\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_react_router_v7.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_react_router_v7.md",relativeUrl:"/es/doc/environment/vite-and-react/react-router-v7",url:"https://intlayer.org/es/doc/environment/vite-and-react/react-router-v7"},frameworks:$R[1338]=["react","vite"]},"react-router-v7-fs-routes":$R[1339]={title:"React Router v7 (fs-routes)",default:$R[1340]={createdAt:"2025-12-07",updatedAt:"2026-05-31",title:"React Router v7 i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación React Router v7 multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1341]=["Internacionalización","Documentación","Intlayer","React Router v7","fs-routes","Rutas basadas en el sistema de archivos","React","i18n","TypeScript","Enrutamiento por Locale"],slugs:$R[1342]=["doc","environment","vite-and-react","react-router-v7-fs-routes"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-router-v7-fs-routes-template",applicationShowcase:"https://intlayer-react-router-v7-fs-routes.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1343]=[$R[1344]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1345]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1346]={version:"7.3.4",date:"2025-12-08",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_react_router_v7_fs_routes.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_react_router_v7_fs_routes.md",relativeUrl:"/es/doc/environment/vite-and-react/react-router-v7-fs-routes",url:"https://intlayer.org/es/doc/environment/vite-and-react/react-router-v7-fs-routes"},frameworks:$R[1347]=["react","vite"]},compiler:$R[1348]={title:"Compiler",default:$R[1349]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Vite + React i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vite + React multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1350]=["Internacionalización","Documentación","Intlayer","Vite","React","Compilador","IA"],slugs:$R[1351]=["doc","environment","vite-and-react","compiler"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-react-template",applicationShowcase:"https://intlayer-vite-react-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1352]=[$R[1353]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1354]={version:"8.2.0",date:"2026-03-09",changes:"\"Update compiler options, add FilePathPattern support\""},$R[1355]={version:"8.1.6",date:"2026-02-23",changes:"\"Lanzamiento inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+react_compiler.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+react_compiler.md",relativeUrl:"/es/doc/environment/vite-and-react/compiler",url:"https://intlayer.org/es/doc/environment/vite-and-react/compiler"},frameworks:$R[1356]=["react","vite"]}},frameworks:$R[1357]=["react","vite"]},"vite-and-vue":$R[1358]={title:"Vite y Vue",default:$R[1359]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Vue i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vite + Vue multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1360]=["Internacionalización","Documentación","Intlayer","Vite","Vue","JavaScript"],slugs:$R[1361]=["doc","environment","vite-and-vue"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-vue-template",applicationShowcase:"https://intlayer-vite-vue-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=IE3XWkZ6a5U",history:$R[1362]=[$R[1363]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1364]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1365]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+vue.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+vue.md",relativeUrl:"/es/doc/environment/vite-and-vue",url:"https://intlayer.org/es/doc/environment/vite-and-vue"},frameworks:$R[1366]=["vue","vite"],subSections:$R[1367]={"nuxt-and-vue":$R[1368]={title:"Nuxt y Vue",default:$R[1369]={createdAt:"2025-06-18",updatedAt:"2026-05-31",title:"Nuxt i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Nuxt multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1370]=["Internacionalización","Documentación","Intlayer","Nuxt","Vue","JavaScript"],slugs:$R[1371]=["doc","environment","nuxt-and-vue"],applicationTemplate:"https://github.com/aymericzip/intlayer-nuxt-4-template",applicationShowcase:"https://intlayer-nuxt-4-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=nhUcUAVQ6eQ",history:$R[1372]=[$R[1373]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1374]={version:"7.3.11",date:"2025-12-07",changes:"\"Actualización de LocaleSwitcher, SEO, metadatos\""},$R[1375]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nuxt.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_nuxt.md",relativeUrl:"/es/doc/environment/nuxt-and-vue",url:"https://intlayer.org/es/doc/environment/nuxt-and-vue"},frameworks:$R[1376]=["nuxt","vue","vite"]}}},"vite-and-solid":$R[1377]={title:"Vite y Solid",default:$R[1378]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Solid i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vite + Solid multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1379]=["Internacionalización","Documentación","Intlayer","Vite","Solid","JavaScript"],slugs:$R[1380]=["doc","environment","vite-and-solid"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-solid-template",history:$R[1381]=[$R[1382]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1383]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1384]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+solid.md",relativeUrl:"/es/doc/environment/vite-and-solid",url:"https://intlayer.org/es/doc/environment/vite-and-solid"},frameworks:$R[1385]=["solid","vite"]},"vite-and-svelte":$R[1386]={title:"Vite y Svelte",default:$R[1387]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Svelte i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vite + Svelte multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1388]=["Internacionalización","Documentación","Intlayer","Vite","Svelte","JavaScript"],slugs:$R[1389]=["doc","environment","vite-and-svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-svelte-template",applicationShowcase:"https://intlayer-vite-svelte-template.vercel.app",history:$R[1390]=[$R[1391]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1392]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1393]={version:"5.5.11",date:"2025-11-19",changes:"\"Actualización de la documentación\""},$R[1394]={version:"5.5.10",date:"2025-06-29",changes:"\"Inicio del historial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+svelte.md",relativeUrl:"/es/doc/environment/vite-and-svelte",url:"https://intlayer.org/es/doc/environment/vite-and-svelte"},subSections:$R[1395]={"vite-and-svelte-kit":$R[1396]={title:"SvelteKit",default:$R[1397]={createdAt:"2025-11-20",updatedAt:"2026-05-31",title:"SvelteKit i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación SvelteKit multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1398]=["Internacionalización","Documentación","Intlayer","SvelteKit","JavaScript","SSR"],slugs:$R[1399]=["doc","environment","sveltekit"],applicationTemplate:"https://github.com/aymericzip/intlayer-sveltekit-template",applicationShowcase:"https://intlayer-sveltekit-template.vercel.app",history:$R[1400]=[$R[1401]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1402]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1403]={version:"7.1.10",date:"2025-11-20",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_svelte_kit.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_svelte_kit.md",relativeUrl:"/es/doc/environment/sveltekit",url:"https://intlayer.org/es/doc/environment/sveltekit"},frameworks:$R[1404]=["svelte","vite"]}},frameworks:$R[1405]=["svelte","vite"]},"vite-and-preact":$R[1406]={title:"Vite y Preact",default:$R[1407]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Preact i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vite + Preact multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1408]=["Internacionalización","Documentación","Intlayer","Vite","Preact","JavaScript"],slugs:$R[1409]=["doc","environment","vite-and-preact"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-preact-template",applicationShowcase:"https://intlayer-vite-preact-template.vercel.app",history:$R[1410]=[$R[1411]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1412]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1413]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+preact.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+preact.md",relativeUrl:"/es/doc/environment/vite-and-preact",url:"https://intlayer.org/es/doc/environment/vite-and-preact"},frameworks:$R[1414]=["preact","vite"]},"vite-and-vanilla-js":$R[1415]={title:"Vite y Vanilla JS",default:$R[1416]={createdAt:"2026-03-23",updatedAt:"2026-05-31",title:"Vite + Vanilla JS i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vite + Vanilla JS multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1417]=["Internacionalización","Documentación","Intlayer","Vite","Vanilla JS","JavaScript","TypeScript","HTML"],slugs:$R[1418]=["doc","environment","vite-and-vanilla"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-vanilla-template",applicationShowcase:"https://intlayer-vite-vanilla.vercel.app",history:$R[1419]=[$R[1420]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1421]={version:"8.4.10",date:"2026-03-23",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+vanilla.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+vanilla.md",relativeUrl:"/es/doc/environment/vite-and-vanilla",url:"https://intlayer.org/es/doc/environment/vite-and-vanilla"},frameworks:$R[1422]=["vanilla","vite"],subSections:$R[1423]={"vanilla-js":$R[1424]={title:"Vanilla JS (sin bundler)",default:$R[1425]={createdAt:"2026-03-31",updatedAt:"2026-05-31",title:"Vanilla JS i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vanilla JS multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1426]=["Internacionalización","Documentación","Intlayer","Vanilla JS","JavaScript","TypeScript","HTML"],slugs:$R[1427]=["doc","environment","vanilla"],applicationTemplate:"https://github.com/aymericzip/intlayer-vanilla-template",applicationShowcase:"https://intlayer-vanilla-template.vercel.app",history:$R[1428]=[$R[1429]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1430]={version:"8.4.10",date:"2026-03-31",changes:"\"Inicio del historial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vanilla.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vanilla.md",relativeUrl:"/es/doc/environment/vanilla",url:"https://intlayer.org/es/doc/environment/vanilla"},frameworks:$R[1431]=["vanilla"]}}},"vite-and-lit":$R[1432]={title:"Vite y Lit",default:$R[1433]={createdAt:"2026-03-23",updatedAt:"2026-05-31",title:"Vite + Lit i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Vite + Lit multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1434]=["Internacionalización","Documentación","Intlayer","Vite","Lit","Web Components","JavaScript"],slugs:$R[1435]=["doc","environment","vite-and-lit"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-lit-template",applicationShowcase:"https://intlayer-vite-lit-template.vercel.app",history:$R[1436]=[$R[1437]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1438]={version:"8.4.10",date:"2026-03-23",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+lit.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_vite+lit.md",relativeUrl:"/es/doc/environment/vite-and-lit",url:"https://intlayer.org/es/doc/environment/vite-and-lit"},frameworks:$R[1439]=["lit","vite"]},angular:$R[1440]={title:"Angular 21",default:$R[1441]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Angular 21 i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Angular 21 multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1442]=["Internacionalización","Documentación","Intlayer","Angular","JavaScript"],slugs:$R[1443]=["doc","environment","angular"],applicationTemplate:"https://github.com/aymericzip/intlayer-angular-21-template",applicationShowcase:"https://intlayer-angular-21-template.vercel.app/",history:$R[1444]=[$R[1445]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid al acceso directo a propiedades\""},$R[1446]={version:"8.0.0",date:"2026-01-26",changes:"\"Lanzamiento de versión estable\""},$R[1447]={version:"8.0.0",date:"2025-12-30",changes:"\"Añadir comando init\""},$R[1448]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_angular_21.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_angular_21.md",relativeUrl:"/es/doc/environment/angular",url:"https://intlayer.org/es/doc/environment/angular"},subSections:$R[1449]={19:$R[1450]={title:"Angular 19 (Webpack)",default:$R[1451]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Angular 19 i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Angular 19 multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1452]=["Internacionalización","Documentación","Intlayer","Angular","JavaScript"],slugs:$R[1453]=["doc","environment","angular","19"],applicationTemplate:"https://github.com/aymericzip/intlayer-angular-19-template",applicationShowcase:"https://intlayer-angular-19-template.vercel.app",history:$R[1454]=[$R[1455]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1456]={version:"8.0.0",date:"2025-12-30",changes:"\"Añadir comando init\""},$R[1457]={version:"5.5.10",date:"2025-06-29",changes:"\"Inicializar historial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_angular_19.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_angular_19.md",relativeUrl:"/es/doc/environment/angular/19",url:"https://intlayer.org/es/doc/environment/angular/19"},frameworks:$R[1458]=["angular","webpack"]},analog:$R[1459]={title:"Analog",default:$R[1460]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Analog i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Analog multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1461]=["Internacionalización","Documentación","Intlayer","Analog","Angular","JavaScript"],slugs:$R[1462]=["doc","environment","analog"],applicationTemplate:"https://github.com/aymericzip/intlayer-analog-template",applicationShowcase:"https://intlayer-analog-template.vercel.app",history:$R[1463]=[$R[1464]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1465]={version:"8.0.4",date:"2026-01-26",changes:"\"Inicio del historial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_analog.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_analog.md",relativeUrl:"/es/doc/environment/analog",url:"https://intlayer.org/es/doc/environment/analog"},frameworks:$R[1466]=["angular","vite"]}},frameworks:$R[1467]=["angular","vite"]},"create-react-app":$R[1468]={title:"React CRA",default:$R[1469]={createdAt:"2024-08-11",updatedAt:"2026-05-31",title:"Create React App i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Create React App multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1470]=["Internacionalización","Documentación","Intlayer","Create React App","CRA","JavaScript","React"],slugs:$R[1471]=["doc","environment","create-react-app"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-cra-template",history:$R[1472]=[$R[1473]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1474]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1475]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_create_react_app.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_create_react_app.md",relativeUrl:"/es/doc/environment/create-react-app",url:"https://intlayer.org/es/doc/environment/create-react-app"},frameworks:$R[1476]=["react","vite"]},"react-native-and-expo":$R[1477]={title:"React Native y Expo",default:$R[1478]={createdAt:"2025-06-18",updatedAt:"2026-05-31",title:"Expo + React Native i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Expo + React Native multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1479]=["Internacionalización","Documentación","Intlayer","React Native","Expo","JavaScript"],slugs:$R[1480]=["doc","environment","react-native-and-expo"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-native-template",applicationShowcase:"https://intlayer-react-native.vercel.app",history:$R[1481]=[$R[1482]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1483]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1484]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_react_native+expo.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_react_native+expo.md",relativeUrl:"/es/doc/environment/react-native-and-expo",url:"https://intlayer.org/es/doc/environment/react-native-and-expo"},frameworks:$R[1485]=["react","react-native","expo"]},node:$R[1486]={title:"Node & Backend",subSections:$R[1487]={express:$R[1488]={title:"Express.js",default:$R[1489]={createdAt:"2024-08-11",updatedAt:"2026-05-31",title:"Express i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Express multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1490]=["Internacionalización","Documentación","Intlayer","Express","JavaScript","Backend"],slugs:$R[1491]=["doc","environment","express"],applicationTemplate:"https://github.com/aymericzip/intlayer-express-template",history:$R[1492]=[$R[1493]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1494]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1495]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_express.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_express.md",relativeUrl:"/es/doc/environment/express",url:"https://intlayer.org/es/doc/environment/express"},frameworks:$R[1496]=["express","node"]},nest:$R[1497]={title:"NestJS",default:$R[1498]={createdAt:"2025-09-09",updatedAt:"2026-05-31",title:"NestJS i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación NestJS multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1499]=["Internacionalización","Documentación","Intlayer","NestJS","JavaScript","Backend"],slugs:$R[1500]=["doc","environment","nest"],author:"AydinTheFirst",history:$R[1501]=[$R[1502]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1503]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1504]={version:"5.8.0",date:"2025-09-09",changes:"\"Documento inicial\""}],docKey:"./docs/en/intlayer_with_nestjs.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_nestjs.md",relativeUrl:"/es/doc/environment/nest",url:"https://intlayer.org/es/doc/environment/nest"},frameworks:$R[1505]=["nest","node"]},fastify:$R[1506]={title:"Fastify",default:$R[1507]={createdAt:"2025-12-30",updatedAt:"2026-05-31",title:"Fastify i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Fastify multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1508]=["Internacionalización","Documentación","Intlayer","Fastify","JavaScript","Backend"],slugs:$R[1509]=["doc","environment","fastify"],applicationTemplate:"https://github.com/aymericzip/intlayer-fastify-template",history:$R[1510]=[$R[1511]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1512]={version:"7.6.0",date:"2025-12-31",changes:"\"Agregar comando init\""},$R[1513]={version:"7.6.0",date:"2025-12-31",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_fastify.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_fastify.md",relativeUrl:"/es/doc/environment/fastify",url:"https://intlayer.org/es/doc/environment/fastify"},frameworks:$R[1514]=["fastify","node"]},hono:$R[1515]={title:"Hono",default:$R[1516]={createdAt:"2025-08-23",updatedAt:"2026-05-31",title:"Hono i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Hono multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1517]=["Internacionalización","Documentación","Intlayer","Hono","JavaScript","Backend"],slugs:$R[1518]=["doc","environment","hono"],applicationTemplate:"https://github.com/aymericzip/intlayer-hono-template",history:$R[1519]=[$R[1520]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1521]={version:"7.5.9",date:"2025-12-30",changes:"\"Añadir comando init\""},$R[1522]={version:"5.5.10",date:"2025-06-29",changes:"\"Inicio del historial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_hono.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_hono.md",relativeUrl:"/es/doc/environment/hono",url:"https://intlayer.org/es/doc/environment/hono"},frameworks:$R[1523]=["hono","node"]},adonis:$R[1524]={title:"Adonis",default:$R[1525]={createdAt:"2025-08-23",updatedAt:"2026-05-31",title:"AdonisJS i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación AdonisJS multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1526]=["Internacionalización","Documentación","Intlayer","AdonisJS","JavaScript","Backend"],slugs:$R[1527]=["doc","environment","adonisjs"],applicationTemplate:"https://github.com/aymericzip/intlayer-adonis-template",history:$R[1528]=[$R[1529]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1530]={version:"8.0.0",date:"2025-12-30",changes:"\"Inicializar historial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_adonisjs.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_adonisjs.md",relativeUrl:"/es/doc/environment/adonisjs",url:"https://intlayer.org/es/doc/environment/adonisjs"},frameworks:$R[1531]=["adonis","node"]}}},other:$R[1532]={title:"Otro",subSections:$R[1533]={"lynx-and-react":$R[1534]={title:"Lynx y React",default:$R[1535]={createdAt:"2025-03-09",updatedAt:"2026-05-31",title:"Lynx + React i18n - Guía completa para traducir tu aplicación",description:"Sin más i18next. La guía 2026 para crear una aplicación Lynx + React multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento.",keywords:$R[1536]=["Internacionalización","Documentación","Intlayer","Vite","React","Lynx","JavaScript"],slugs:$R[1537]=["doc","environment","lynx-and-react"],applicationTemplate:"https://github.com/aymericzip/intlayer-lynx-template",history:$R[1538]=[$R[1539]={version:"8.9.0",date:"2026-05-04",changes:"\"Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades\""},$R[1540]={version:"7.5.9",date:"2025-12-30",changes:"\"Agregar comando init\""},$R[1541]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_lynx+react.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_with_lynx+react.md",relativeUrl:"/es/doc/environment/lynx-and-react",url:"https://intlayer.org/es/doc/environment/lynx-and-react"},frameworks:$R[1542]=["lynx","react"]}}}}},plugins:$R[1543]={title:"Plugins",subSections:$R[1544]={syncJSON:$R[1545]={title:"JSON",default:$R[1546]={createdAt:"2025-03-13",updatedAt:"2025-12-13",title:"Plugin de sincronización JSON",description:"Sincroniza los diccionarios de Intlayer con archivos JSON i18n de terceros (i18next, next-intl, react-intl, vue-i18n y más). Mantén tu i18n existente mientras usas Intlayer para gestionar, traducir y probar tus mensajes.",keywords:$R[1547]=["Intlayer","Sincronización JSON","i18next","next-intl","react-intl","vue-i18n","next-translate","nuxt-i18n","LinguiJS","Polyglot.js","Solid-i18next","svelte-i18n","i18n","traducciones"],slugs:$R[1548]=["doc","plugin","sync-json"],youtubeVideo:"https://www.youtube.com/watch?v=MpGMxniDHNg",history:$R[1549]=[$R[1550]={version:"7.5.0",date:"2025-12-13",changes:"\"Añadido soporte para formatos ICU e i18next\""},$R[1551]={version:"6.1.6",date:"2025-10-05",changes:"\"Documentación inicial del plugin de sincronización JSON\""}],author:"aymericzip",docKey:"./docs/en/plugins/sync-json.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/plugins/sync-json.md",relativeUrl:"/es/doc/plugin/sync-json",url:"https://intlayer.org/es/doc/plugin/sync-json"}},syncPO:$R[1552]={title:"gettext (.po)",default:$R[1553]={createdAt:"2026-05-10",updatedAt:"2026-05-10",title:"Plugin Sync PO",description:"Sincroniza diccionarios Intlayer con archivos Gettext PO. Mantén tu i18n existente mientras usas Intlayer para gestionar, traducir y probar tus mensajes.",keywords:$R[1554]=["Intlayer","Sync PO","Gettext","i18n","traducciones"],slugs:$R[1555]=["doc","plugin","sync-po"],youtubeVideo:"https://www.youtube.com/watch?v=MpGMxniDHNg",history:$R[1556]=[$R[1557]={version:"8.9.4",date:"2026-05-10",changes:"\"Documentación inicial del plugin Sync PO\""}],author:"aymericzip",docKey:"./docs/en/plugins/sync-po.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/plugins/sync-po.md",relativeUrl:"/es/doc/plugin/sync-po",url:"https://intlayer.org/es/doc/plugin/sync-po"}}}},"dev-tools":$R[1558]={title:"Herramientas de desarrollo",subSections:$R[1559]={"vs-code-extension":$R[1560]={title:"Extensión VS Code",default:$R[1561]={createdAt:"2025-03-17",updatedAt:"2025-09-30",title:"Extensión Oficial para VS Code",description:"Aprende a usar la extensión Intlayer en VS Code para mejorar tu flujo de trabajo de desarrollo. Navega rápidamente entre contenido localizado y gestiona tus diccionarios de manera eficiente.",keywords:$R[1562]=["Extensión VS Code","Intlayer","Localización","Herramientas de Desarrollo","React","Next.js","JavaScript","TypeScript"],slugs:$R[1563]=["doc","vs-code-extension"],history:$R[1564]=[$R[1565]={version:"6.1.5",date:"2025-09-30",changes:"\"Añadido gif de demostración\""},$R[1566]={version:"6.1.0",date:"2025-09-24",changes:"\"Añadida sección de selección de entorno\""},$R[1567]={version:"6.0.0",date:"2025-09-22",changes:"\"Pestaña Intlayer / Comandos Rellenar y Probar\""},$R[1568]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/vs_code_extension.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/vs_code_extension.md",relativeUrl:"/es/doc/vs-code-extension",url:"https://intlayer.org/es/doc/vs-code-extension"}},"mcp-server":$R[1569]={title:"Servidor MCP",default:$R[1570]={createdAt:"2025-06-07",updatedAt:"2026-03-03",title:"Documentación del Servidor MCP",description:"Explora las características y configuración del Servidor MCP para optimizar la gestión y operaciones de tu servidor.",keywords:$R[1571]=["Servidor MCP","Gestión de Servidor","Optimización","Intlayer","Documentación","Configuración","Características"],slugs:$R[1572]=["doc","mcp-server"],history:$R[1573]=[$R[1574]={version:"5.5.12",date:"2025-07-11",changes:"\"Añadida configuración de ChatGPT\""},$R[1575]={version:"5.5.12",date:"2025-07-10",changes:"\"Añadida configuración de Claude Desktop\""},$R[1576]={version:"5.5.12",date:"2025-07-10",changes:"\"Añadido transporte Streamable HTTP y servidor remoto\""},$R[1577]={version:"5.5.10",date:"2025-06-29",changes:"\"Historial inicial\""}],author:"aymericzip",docKey:"./docs/en/mcp_server.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/mcp_server.md",relativeUrl:"/es/doc/mcp-server",url:"https://intlayer.org/es/doc/mcp-server"}},"agent-skills":$R[1578]={title:"Habilidades del agente",default:$R[1579]={createdAt:"2026-02-09",updatedAt:"2026-03-03",title:"Habilidades del Agente",description:"Aprenda a usar las Habilidades del Agente de Intlayer para mejorar la comprensión de su proyecto por parte de su agente de IA, incluyendo guías de configuración completas para Metadatos, Sitemaps y Acciones del Servidor.",keywords:$R[1580]=["Intlayer","Habilidades del Agente","Agente de IA","Internacionalización","Documentación"],slugs:$R[1581]=["doc","agent_skills"],history:$R[1582]=[$R[1583]={version:"8.1.0",date:"2026-02-09",changes:"\"Init history\""}],author:"aymericzip",docKey:"./docs/en/agent_skills.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/agent_skills.md",relativeUrl:"/es/doc/agent_skills",url:"https://intlayer.org/es/doc/agent_skills"}},lsp:$R[1584]={title:"Language Server Protocol",default:$R[1585]={createdAt:"2025-06-07",updatedAt:"2026-05-31",title:"Servidor LSP de Intlayer",description:"Aprenda cómo el servidor de lenguaje de Intlayer proporciona la función Ir a la definición y otras características de IDE para useIntlayer, getIntlayer y llamadas relacionadas en todos los editores compatibles.",keywords:$R[1586]=["LSP","Servidor de Lenguaje","Ir a la definición","IDE","Intlayer","VS Code","Neovim","TypeScript"],slugs:$R[1587]=["doc","lsp"],history:$R[1588]=[$R[1589]={version:"8.12.0",date:"2026-06-01",changes:"\"Release LSP\""}],author:"aymericzip",docKey:"./docs/en/lsp.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/lsp.md",relativeUrl:"/es/doc/lsp",url:"https://intlayer.org/es/doc/lsp"}}}},releases:$R[1590]={title:"Versiones",subSections:$R[1591]={v9:$R[1592]={title:"v9",default:$R[1593]={createdAt:"2026-06-14",updatedAt:"2026-06-14",title:"Nuevo Intlayer v9 - ¿Qué hay de nuevo?",description:"Descubre las novedades de Intlayer v9. Presentamos paquetes de compatibilidad directos para librerías i18n populares y soporte para Colecciones, Variantes y Registros Dinámicos.",keywords:$R[1594]=["Intlayer","Compatibility","Migration","Collections","Variants","Dynamic Records","i18next","next-intl","vue-i18n"],slugs:$R[1595]=["doc","releases","v9"],author:"aymericzip",docKey:"./docs/en/releases/v9.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/releases/v9.md",relativeUrl:"/es/doc/releases/v9",url:"https://intlayer.org/es/doc/releases/v9"}},v8:$R[1596]={title:"v8",default:$R[1597]={createdAt:"2025-09-22",updatedAt:"2026-06-14",title:"Nuevo Intlayer v8 - ¿Qué hay de nuevo?",description:"Descubre qué hay de nuevo en Intlayer v8. Mejoras importantes en la experiencia del desarrollador, validación de contenido y gestión de diccionarios.",keywords:$R[1598]=["Intlayer","CMS","Experiencia del Desarrollador","Características","React","Next.js","JavaScript","TypeScript"],youtubeVideo:"https://www.youtube.com/watch?v=ia6JmVf-kkU",slugs:$R[1599]=["doc","releases","v8"],author:"aymericzip",docKey:"./docs/en/releases/v8.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/releases/v8.md",relativeUrl:"/es/doc/lanzamientos/v8",url:"https://intlayer.org/es/doc/lanzamientos/v8"}},v7:$R[1600]={title:"v7",default:$R[1601]={createdAt:"2025-09-22",updatedAt:"2025-09-23",title:"Nueva Intlayer v7 - ¿Qué hay de nuevo?",description:"Descubre las novedades de Intlayer v7. Grandes mejoras en rendimiento, experiencia del desarrollador y nuevas funcionalidades para mejorar tu flujo de trabajo de internacionalización.",keywords:$R[1602]=["Intlayer","Localización","Desarrollo","Rendimiento","Experiencia del desarrollador","Funcionalidades","React","Next.js","JavaScript","TypeScript"],slugs:$R[1603]=["doc","releases","v7"],author:"aymericzip",docKey:"./docs/en/releases/v7.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/releases/v7.md",relativeUrl:"/es/doc/releases/v7",url:"https://intlayer.org/es/doc/releases/v7"}},v6:$R[1604]={title:"v6",default:$R[1605]={createdAt:"2025-09-22",updatedAt:"2025-09-22",title:"Nueva versión Intlayer v6 - ¿Qué hay de nuevo?",description:"Descubre las novedades de Intlayer v6. Grandes mejoras en rendimiento, experiencia del desarrollador y nuevas funcionalidades para mejorar tu flujo de trabajo de internacionalización.",keywords:$R[1606]=["Intlayer","Localización","Desarrollo","Rendimiento","Experiencia del desarrollador","Funcionalidades","React","Next.js","JavaScript","TypeScript"],slugs:$R[1607]=["doc","releases","v6"],author:"aymericzip",docKey:"./docs/en/releases/v6.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/releases/v6.md",relativeUrl:"/es/doc/releases/v6",url:"https://intlayer.org/es/doc/releases/v6"}}}},benchmark:$R[1608]={title:"Benchmark",default:$R[1609]={createdAt:"2026-04-20",updatedAt:"2026-04-20",title:"Comparativa de librerías i18n",description:"Descubre cómo se compara Intlayer con otras librerías i18n en términos de rendimiento y tamaño del bundle.",keywords:$R[1610]=["benchmark","i18n","intl","nextjs","tanstack","intlayer"],slugs:$R[1611]=["doc","benchmark"],history:$R[1612]=[$R[1613]={version:"8.7.5",date:"2026-01-06",changes:"\"Inicio del benchmark\""}],author:"aymericzip",docKey:"./docs/en/benchmark/index.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/benchmark/index.md",relativeUrl:"/es/doc/benchmark",url:"https://intlayer.org/es/doc/benchmark"},subSections:$R[1614]={nextjs:$R[1615]={title:"Next.js",default:$R[1616]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"La mejor solución i18n para Next.js en 2026 - Informe de Benchmark",description:"Compara librerías de internacionalización (i18n) para Next.js como next-intl, next-i18next e Intlayer. Informe detallado de rendimiento sobre tamaño del bundle, fugas y reactividad.",keywords:$R[1617]=["benchmark","i18n","intl","nextjs","rendimiento","intlayer"],slugs:$R[1618]=["doc","benchmark","nextjs"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n",history:$R[1619]=[$R[1620]={version:"8.9.8",date:"2026-05-18",changes:"\"Añadir comparativa de estrellas de GitHub\""},$R[1621]={version:"8.7.5",date:"2026-01-06",changes:"\"Inicio del benchmark\""}],docKey:"./docs/en/benchmark/nextjs.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/benchmark/nextjs.md",relativeUrl:"/es/doc/benchmark/nextjs",url:"https://intlayer.org/es/doc/benchmark/nextjs"},frameworks:$R[1622]=["nextjs","react"]},tanstack:$R[1623]={title:"TanStack",default:$R[1624]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"La mejor solución i18n para TanStack Start en 2026 - Informe de Benchmark",description:"Compara librerías de internacionalización para TanStack Start como react-i18next, use-intl e Intlayer. Informe detallado de rendimiento sobre tamaño del bundle, fugas y reactividad.",keywords:$R[1625]=["benchmark","i18n","intl","tanstack","rendimiento","intlayer"],slugs:$R[1626]=["doc","benchmark","tanstack"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-tanstack-start-template",history:$R[1627]=[$R[1628]={version:"8.9.8",date:"2026-05-18",changes:"\"Añadir comparativa de estrellas de GitHub\""},$R[1629]={version:"8.7.5",date:"2026-01-06",changes:"\"Inicio del benchmark\""}],docKey:"./docs/en/benchmark/tanstack.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/benchmark/tanstack.md",relativeUrl:"/es/doc/benchmark/tanstack",url:"https://intlayer.org/es/doc/benchmark/tanstack"},frameworks:$R[1630]=["tanstack","react"]},vue:$R[1631]={title:"Vue",default:$R[1632]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"La mejor solución i18n para Vue en 2026 - Informe de Benchmark",description:"Compara bibliotecas de internacionalización (i18n) para Vue como vue-i18n, fluent-vue e Intlayer. Informe de rendimiento detallado sobre el tamaño del bundle, fugas y reactividad.",keywords:$R[1633]=["benchmark","i18n","intl","vue","rendimiento","intlayer"],slugs:$R[1634]=["doc","benchmark","vue"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-vue-template",history:$R[1635]=[$R[1636]={version:"8.9.8",date:"2026-05-18",changes:"\"Añadir comparativa de estrellas de GitHub\""},$R[1637]={version:"8.7.12",date:"2026-01-06",changes:"\"Inicialización del benchmark\""}],docKey:"./docs/en/benchmark/vue.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/benchmark/vue.md",relativeUrl:"/es/doc/benchmark/vue",url:"https://intlayer.org/es/doc/benchmark/vue"},frameworks:$R[1638]=["vue"]},solid:$R[1639]={title:"Solid",default:$R[1640]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"La mejor solución i18n para Solid en 2026 - Informe de Benchmark",description:"Compara bibliotecas de internacionalización (i18n) para Solid como solid-primitives, solid-i18next e Intlayer. Informe de rendimiento detallado sobre el tamaño del bundle, fugas y reactividad.",keywords:$R[1641]=["benchmark","i18n","intl","solid","rendimiento","intlayer"],slugs:$R[1642]=["doc","benchmark","solid"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-solid-template",history:$R[1643]=[$R[1644]={version:"8.9.8",date:"2026-05-18",changes:"\"Añadir comparativa de estrellas de GitHub\""},$R[1645]={version:"8.7.12",date:"2026-01-06",changes:"\"Inicialización del benchmark\""}],docKey:"./docs/en/benchmark/solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/benchmark/solid.md",relativeUrl:"/es/doc/benchmark/solid",url:"https://intlayer.org/es/doc/benchmark/solid"},frameworks:$R[1646]=["solid"]},svelte:$R[1647]={title:"Svelte",default:$R[1648]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"La mejor solución i18n para Svelte en 2026 - Informe de Benchmark",description:"Compara bibliotecas de internacionalización (i18n) para Svelte como svelte-i18n, Paraglide e Intlayer. Informe de rendimiento detallado sobre el tamaño del bundle, fugas y reactividad.",keywords:$R[1649]=["benchmark","i18n","intl","svelte","rendimiento","intlayer"],slugs:$R[1650]=["doc","benchmark","svelte"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-svelte-template",history:$R[1651]=[$R[1652]={version:"8.9.8",date:"2026-05-18",changes:"\"Añadir comparativa de estrellas de GitHub\""},$R[1653]={version:"8.7.12",date:"2026-01-06",changes:"\"Inicialización del benchmark\""}],docKey:"./docs/en/benchmark/svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/benchmark/svelte.md",relativeUrl:"/es/doc/benchmark/svelte",url:"https://intlayer.org/es/doc/benchmark/svelte"},frameworks:$R[1654]=["svelte"]}}}}},ssr:!0}],lastMatchId:"�{-$locale}�_docs�doc�$�es�doc�environment�vite-and-svelte"})($R["tsr"]);$_TSR.e();document.currentScript.remove()</script><script type="module" async="" src="/assets/index-Bw9yQaJj.js"></script></body></html>