InicioEntorno de pruebasExhibiciónAppDocBlog
    • Englishinglés
      EN
    • русскийruso
      RU
    • 日本語japonés
      JA
    • françaisfrancés
      FR
    • 한국어coreano
      KO
    • 中文chino
      ZH
    • españolespañol
      ES
    • Deutschalemán
      DE
    • العربيةárabe
      AR
    • italianoitaliano
      IT
    • British Englishinglés británico
      EN-GB
    • portuguêsportugués
      PT
    • हिन्दीhindi
      HI
    • Türkçeturco
      TR
    • polskipolaco
      PL
    • Indonesiaindonesio
      ID
    • Tiếng Việtvietnamita
      VI
    • українськаucraniano
      UK
    /
    Filtrar documentación por framework
    Alt+←
    ¿Por qué Intlayer?
    Empezar
    Concepto
    • Cómo funciona Intlayer
    • Configuración
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Editor visual
    • CMS
    • Integración CI/CD
    • TraducciónPluralEnumeraciónCondiciónGéneroInserciónArchivoAnidaciónMarkdownHTMLObtención de función
    • Archivo por locale
    • Compilador
    • Autocompletado
    • Pruebas
    • Optimización de bundle
    Entornos
    • Next.js 14 y App Router
      Next.js 15
      Next.js sin locale URL
      Next.js y Page Router
      Compiler
    • Tanstack Start Solid
    • Astro y React
      Astro y Svelte
      Astro y Vue
      Astro y Solid
      Astro y Preact
      Astro y Lit
      Astro y Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt y Vue
    • Vite y Solid
    • SvelteKit
    • Vite y Preact
    • Vite y Vanilla JS
    • Vite y Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native y Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx y React
    Plugins
    • JSON
    • gettext (.po)
    Extensión VS Code
    Agente
    • Servidor MCP
    • Habilidades del agente
    Versiones
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Preguntar una pregunta
    1. Documentation
    2. Entornos
    3. Nuxt and vue
    \n\n\n```\n\n#### Accediendo al Contenido en Intlayer\n\nIntlayer ofrece diferentes APIs para acceder a tu contenido:\n\n- **Sintaxis basada en componentes** (recomendada):\n Usa la sintaxis ``, o `` para renderizar contenido como un Nodo de Intlayer. Esto se integra perfectamente con el [Editor Visual](/es/doc/concept/editor) y el [CMS](/es/doc/concept/cms).\n\n- **Sintaxis basada en cadenas**:\n Usa `{{ myContent }}` para renderizar el contenido como texto plano, sin soporte para el Editor Visual.\n\n- **Sintaxis HTML sin procesar**:\n Usa `
    ` para renderizar el contenido como HTML sin procesar, sin soporte para el Editor Visual.\n\n- **Sintaxis de desestructuración**:\n El composable `useIntlayer` devuelve un Proxy con el contenido. Este proxy puede ser desestructurado para acceder al contenido manteniendo la reactividad.\n - Usa `const content = useIntlayer(\"myContent\");` y `{{ content.myContent }}` / ``.\n - O usa `const { myContent } = useIntlayer(\"myContent\");` y `{{ myContent}}` / `` para desestructurar el contenido.\n\n### (Opcional) Paso 6: Cambiar el idioma de tu contenido\n\nPara cambiar el idioma de tu contenido, puedes usar la función `setLocale` proporcionada por el composable `useLocale`. Esta función te permite establecer la configuración regional de la aplicación y actualizar el contenido en consecuencia.\n\nCrea un componente para cambiar entre idiomas usando `NuxtLink`. **Usar enlaces en lugar de botones para cambiar de idioma es una buena práctica para SEO y la descubribilidad de la página**, ya que permite a los motores de búsqueda rastrear e indexar todas las versiones localizadas de tus páginas:\n\n```vue fileName=\"components/LocaleSwitcher.vue\"\n\n\n\n```\n\n> Usar `NuxtLink` con atributos `href` adecuados (a través de `getLocalizedUrl`) asegura que los motores de búsqueda puedan descubrir todas las variantes de idioma de tus páginas. Esto es preferible a cambiar el idioma solo con JavaScript, ya que los rastreadores de motores de búsqueda pueden no seguirlo.\n\nLuego, configura tu `app.vue` para usar layouts:\n\n```vue fileName=\"app.vue\"\n\n```\n\n### (Opcional) Paso 6b: Crear un Layout con Navegación\n\nLos layouts de Nuxt te permiten definir una estructura común para tus páginas. Crea un layout por defecto que incluya el selector de idioma y la navegación:\n\n```vue fileName=\"layouts/default.vue\"\n\n\n\n```\n\nEl componente `Links` (mostrado a continuación) asegura que los enlaces de navegación interna se localicen automáticamente.\n\n### (Opcional) Paso 7: Añadir enrutamiento localizado a tu aplicación\n\nNuxt maneja automáticamente el enrutamiento localizado cuando se usa el módulo `nuxt-intlayer`. Esto crea rutas para cada idioma automáticamente basándose en la estructura del directorio de tus páginas.\n\nEjemplo:\n\n```plaintext\npages/\n├── index.vue → /, /fr, /es\n├── about.vue → /about, /fr/about, /es/about\n└── contact/\n └── index.vue → /contact, /fr/contact, /es/contact\n```\n\nPara crear páginas localizadas, simplemente crea tus archivos Vue en el directorio `pages/`. Aquí tienes dos ejemplos de páginas:\n\n**Página de inicio (`pages/index.vue`):**\n\n```vue fileName=\"pages/index.vue\"\n\n\n\n```\n\n**Página Acerca de (`pages/about.vue`):**\n\n```vue fileName=\"pages/about.vue\"\n\n\n\n```\n\n> Nota: `useHead` se importa automáticamente en Nuxt. Puedes acceder a los valores del contenido usando `.value` (reactivo) o `.raw` (cadena primitiva) según tus necesidades.\n\nEl módulo `nuxt-intlayer` hará automáticamente:\n\n- Detectar la configuración regional preferida del usuario\n- Gestionar el cambio de idioma vía URL\n- Establecer el atributo `` apropiado\n- Manejar las cookies de idioma\n- Redirigir a los usuarios a la URL localizada correspondiente\n\n### (Opcional) Paso 8: Crear un Componente de Enlace Localizado\n\nPara asegurar que la navegación de tu aplicación respete la configuración regional actual, puedes crear un componente personalizado `Links`. Este componente antepone automáticamente a las URLs internas el idioma actual, lo cual es esencial para el **SEO y la descubribilidad de las páginas**.\n\n```vue fileName=\"components/Links.vue\"\n\n\n\n```\n\nLuego usa este componente en toda tu aplicación:\n\n```vue fileName=\"layouts/default.vue\"\n\n\n\n```\n\n> Al usar `NuxtLink` con rutas localizadas, aseguras que:\n>\n> - Los motores de búsqueda puedan rastrear e indexar todas las versiones de idioma de tus páginas\n> - Los usuarios puedan compartir URLs localizadas directamente\n> - El historial del navegador funcione correctamente con URLs que tienen prefijos de locale\n\n### (Opcional) Paso 9: Manejar Metadatos y SEO\n\nNuxt proporciona excelentes capacidades SEO a través del composable `useHead` (auto-importado). Puedes usar Intlayer para manejar metadatos localizados usando el accesor `.raw` o `.value` para obtener el valor primitivo de cadena:\n\n```vue fileName=\"pages/about.vue\"\n\n\n\n```\n\n> Alternativamente, puedes usar la función `import { getIntlayer } from \"intlayer\"` para obtener el contenido sin reactividad de Vue.\n\n> **Accediendo a los valores del contenido:**\n>\n> - Usa `.raw` para obtener el valor primitivo de cadena (no reactivo)\n> - Usa `.value` para obtener el valor reactivo\n> - Usa la sintaxis de componente `` para soporte del Editor Visual\n\nCrea la declaración de contenido correspondiente:\n\n```ts fileName=\"pages/about-page.content.ts\" contentDeclarationFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { t, type Dictionary } from \"intlayer\";\n\nconst aboutPageContent = {\n key: \"about-page\",\n content: {\n metaTitle: t({\n en: \"About Us - My Company\",\n fr: \"À Propos - Ma Société\",\n es: \"Acerca de Nosotros - Mi Empresa\",\n }),\n metaDescription: t({\n en: \"Learn more about our company and our mission\",\n fr: \"En savoir plus sur notre société et notre mission\",\n es: \"Conozca más sobre nuestra empresa y nuestra misión\",\n }),\n title: t({\n en: \"About Us\",\n fr: \"À Propos\",\n es: \"Acerca de Nosotros\",\n }),\n },\n} satisfies Dictionary;\n\nexport default aboutPageContent;\n```\n\n```json fileName=\"pages/about-page.content.json\" contentDeclarationFormat=\"json\"\n{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"about-page\",\n \"content\": {\n \"metaTitle\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"About Us - My Company\",\n \"fr\": \"À Propos - Ma Société\",\n \"es\": \"Acerca de Nosotros - Mi Empresa\"\n }\n },\n \"metaDescription\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Learn more about our company and our mission\",\n \"fr\": \"En savoir plus sur notre société et notre mission\",\n \"es\": \"Conozca más sobre nuestra empresa y nuestra misión\"\n }\n },\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"About Us\",\n \"fr\": \"À Propos\",\n \"es\": \"Acerca de Nosotros\"\n }\n }\n }\n}\n```\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```plaintext fileName=\".gitignore\"\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 de Intlayer para VS Code**.\n\n[Instalar desde el Marketplace de VS Code](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- **Previsualizaciones 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 de 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","about":"Descubre cómo hacer tu sitio web Nuxt y Vue multilingüe. Sigue la documentación para internacionalizar (i18n) y traducirlo.","url":"https://intlayer.org/es/doc/environment/nuxt-and-vue","datePublished":"18-06-2025","dateModified":"06-05-2026","keywords":"Internacionalización, Documentación, Intlayer, Nuxt, Vue, JavaScript","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"Desarrolladores, Gestores de Contenido"}}
    Creación:2025-06-18Última actualización:2026-05-06
    Ver la plantilla de aplicación en GitHub

    Esta página tiene una plantilla de aplicación disponible.

    Ver la aplicación de demostración

    Esta página enlaza a una demo en vivo de la plantilla.

    Ver el video tutorial

    Esta página tiene un video tutorial disponible.

    Referencia esta doc a tu asistente AI favorito
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Haz tu pregunta y obtén un resumen del documento referenciando esta página y el proveedor AI de tu elección

    Historial de versiones

    1. "Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades"
      v8.9.04/5/2026
    2. "Actualización de LocaleSwitcher, SEO, metadatos"
      v7.3.117/12/2025
    3. "Historial inicial"
      v5.5.1029/6/2025

    El contenido de esta página ha sido traducido con una IA.

    Ver la última versión del contenido original en inglés
    Editar esta documentación

    Si tienes una idea para mejorar esta documentación, no dudes en contribuir enviando una pull request en GitHub.

    Enlace de GitHub a la documentación
    Copiar

    Copiar el Markdown del documento a la portapapeles

    Traduce tu sitio web Nuxt y Vue usando Intlayer | Internacionalización (i18n)

    Tabla de Contenidos

    ¿Qué es Intlayer?

    Intlayer es una biblioteca innovadora y de código abierto para internacionalización (i18n) diseñada para simplificar el soporte multilingüe en aplicaciones web modernas.

    Con Intlayer, puedes:

    • Gestionar traducciones fácilmente usando diccionarios declarativos a nivel de componente.
    • Localizar dinámicamente metadatos, rutas y contenido.
    • Asegurar soporte para TypeScript con tipos autogenerados, mejorando la autocompletación y detección de errores.
    • Beneficiarte de funciones avanzadas, como la detección y cambio dinámico de locales.

    Guía paso a paso para configurar Intlayer en una aplicación Nuxt

    www.youtube.com
    ide.intlayer.org
    intlayer-nuxt-4-template.vercel.app

    Consulta la Plantilla de Aplicación en GitHub.

    Paso 1: Instalar Dependencias

    Instala los paquetes necesarios usando npm:

    bash
    Copiar código

    Copiar el código al portapapeles

    npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayernpx intlayer init
    • intlayer

      El paquete principal que proporciona herramientas de internacionalización para la gestión de configuración, traducción, declaración de contenido, transpilación y comandos CLI.

    • vue-intlayer El paquete que integra Intlayer con aplicaciones Vue. Proporciona los composables para los componentes Vue.

    • nuxt-intlayer El módulo de Nuxt que integra Intlayer con aplicaciones Nuxt. Proporciona configuración automática, middleware para la detección de locale, gestión de cookies y redirección de URL.

    Paso 2: Configuración de tu proyecto

    Crea un archivo de configuración para configurar los idiomas de tu aplicación:

    intlayer.config.ts
    Copiar código

    Copiar el código al portapapeles

    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.FRENCH,
          Locales.SPANISH,
          // Tus otros locales
        ],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;
    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.

    Paso 3: Integra Intlayer en tu Configuración de Nuxt

    Agrega el módulo intlayer a tu configuración de Nuxt:

    nuxt.config.ts
    Copiar código

    Copiar el código al portapapeles

    import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({  // ... Tu configuración existente de Nuxt  modules: ["nuxt-intlayer"],});
    El módulo nuxt-intlayer maneja automáticamente la integración de Intlayer con Nuxt. Configura la construcción de las declaraciones de contenido, monitorea los archivos en modo desarrollo, proporciona middleware para la detección de la locale y gestiona el enrutamiento localizado.

    Paso 4: Declara tu Contenido

    Crea y gestiona tus declaraciones de contenido para almacenar traducciones:

    Tus declaraciones de contenido pueden definirse en cualquier parte de tu aplicación siempre que estén incluidas en el directorio contentDir (por defecto, ./src). Y coincidan con la extensión de archivo de declaración de contenido (por defecto, .content.{json,ts,tsx,js,jsx,mjs,cjs}).
    Para más detalles, consulta la documentación de declaración de contenido.

    Paso 5: Utiliza Intlayer en tu Código

    Accede a tus diccionarios de contenido en toda tu aplicación Nuxt usando el composable useIntlayer:

    components/HelloWorld.vue
    Copiar código

    Copiar el código al portapapeles

    <script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({  msg: String,});const {  count,  edit,  checkOut,  nuxtIntlayer,  learnMore,  nuxtDocs,  readTheDocs,} = useIntlayer("helloworld");const countRef = ref(0);</script><template>  <h1>{{ msg }}</h1>  <div class="card">    <button type="button" @click="countRef++">      <count />      {{ countRef }}    </button>    <p v-html="edit"></p>  </div>  <p>    <checkOut />    <a href="https://nuxt.com/docs/getting-started/introduction" target="_blank"      >Nuxt</a    >, <nuxtIntlayer />  </p>  <p>    <learnMore />    <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>

    Accediendo al Contenido en Intlayer

    Intlayer ofrece diferentes APIs para acceder a tu contenido:

    • Sintaxis basada en componentes (recomendada): Usa la sintaxis <myContent />, o <Component :is="myContent" /> para renderizar contenido como un Nodo de Intlayer. Esto se integra perfectamente con el Editor Visual y el CMS.

    • Sintaxis basada en cadenas: Usa {{ myContent }} para renderizar el contenido como texto plano, sin soporte para el Editor Visual.

    • Sintaxis HTML sin procesar: Usa <div v-html="myContent" /> para renderizar el contenido como HTML sin procesar, sin soporte para el Editor Visual.

    • Sintaxis de desestructuración: El composable useIntlayer devuelve un Proxy con el contenido. Este proxy puede ser desestructurado para acceder al contenido manteniendo la reactividad.

      • Usa const content = useIntlayer("myContent"); y {{ content.myContent }} / <content.myContent />.
      • O usa const { myContent } = useIntlayer("myContent"); y {{ myContent}} / <myContent/> para desestructurar el contenido.

    (Opcional) Paso 6: Cambiar el idioma de tu contenido

    Para cambiar el idioma de tu contenido, puedes usar la función setLocale proporcionada por el composable useLocale. Esta función te permite establecer la configuración regional de la aplicación y actualizar el contenido en consecuencia.

    Crea un componente para cambiar entre idiomas usando NuxtLink. Usar enlaces en lugar de botones para cambiar de idioma es una buena práctica para SEO y la descubribilidad de la página, ya que permite a los motores de búsqueda rastrear e indexar todas las versiones localizadas de tus páginas:

    components/LocaleSwitcher.vue
    Copiar código

    Copiar el código al portapapeles

    <script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt importa automáticamente useRouteconst route = useRoute();const { locale, availableLocales, setLocale } = useLocale();</script><template>  <nav class="locale-switcher">    <NuxtLink      v-for="localeEl in availableLocales"      :key="localeEl"      :to="getLocalizedUrl(route.fullPath, localeEl)"      class="locale-link"      :class="{ 'active-locale': localeEl === locale }"      @click="setLocale(localeEl)"    >      {{ getLocaleName(localeEl) }}    </NuxtLink>  </nav></template>
    Usar NuxtLink con atributos href adecuados (a través de getLocalizedUrl) asegura que los motores de búsqueda puedan descubrir todas las variantes de idioma de tus páginas. Esto es preferible a cambiar el idioma solo con JavaScript, ya que los rastreadores de motores de búsqueda pueden no seguirlo.

    Luego, configura tu app.vue para usar layouts:

    app.vue
    Copiar código

    Copiar el código al portapapeles

    <template>  <NuxtLayout>    <NuxtPage />  </NuxtLayout></template>

    (Opcional) Paso 6b: Crear un Layout con Navegación

    Los layouts de Nuxt te permiten definir una estructura común para tus páginas. Crea un layout por defecto que incluya el selector de idioma y la navegación:

    layouts/default.vue
    Copiar código

    Copiar el código al portapapeles

    <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Inicio</Links>    <Links href="/about">Acerca de</Links>  </div></template>

    El componente Links (mostrado a continuación) asegura que los enlaces de navegación interna se localicen automáticamente.

    (Opcional) Paso 7: Añadir enrutamiento localizado a tu aplicación

    Nuxt maneja automáticamente el enrutamiento localizado cuando se usa el módulo nuxt-intlayer. Esto crea rutas para cada idioma automáticamente basándose en la estructura del directorio de tus páginas.

    Ejemplo:

    plaintext
    Copiar código

    Copiar el código al portapapeles

    pages/├── index.vue          → /, /fr, /es├── about.vue          → /about, /fr/about, /es/about└── contact/    └── index.vue      → /contact, /fr/contact, /es/contact

    Para crear páginas localizadas, simplemente crea tus archivos Vue en el directorio pages/. Aquí tienes dos ejemplos de páginas:

    Página de inicio (pages/index.vue):

    pages/index.vue
    Copiar código

    Copiar el código al portapapeles

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({  title: content.metaTitle.raw,  meta: [    {      name: "description",      content: content.metaDescription.raw,    },  ],});</script><template>  <h1><content.title /></h1></template>

    Página Acerca de (pages/about.vue):

    pages/about.vue
    Copiar código

    Copiar el código al portapapeles

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Usa .raw para acceso a cadena primitiva  meta: [    {      name: "description",      content: content.metaDescription.raw, // Usa .raw para acceder a la cadena primitiva    },  ],});</script><template>  <h1><content.title /></h1></template>
    Nota: useHead se importa automáticamente en Nuxt. Puedes acceder a los valores del contenido usando .value (reactivo) o .raw (cadena primitiva) según tus necesidades.

    El módulo nuxt-intlayer hará automáticamente:

    • Detectar la configuración regional preferida del usuario
    • Gestionar el cambio de idioma vía URL
    • Establecer el atributo <html lang=""> apropiado
    • Manejar las cookies de idioma
    • Redirigir a los usuarios a la URL localizada correspondiente

    (Opcional) Paso 8: Crear un Componente de Enlace Localizado

    Para asegurar que la navegación de tu aplicación respete la configuración regional actual, puedes crear un componente personalizado Links. Este componente antepone automáticamente a las URLs internas el idioma actual, lo cual es esencial para el SEO y la descubribilidad de las páginas.

    components/Links.vue
    Copiar código

    Copiar el código al portapapeles

    <script setup lang="ts">import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";interface Props {  href: string;  locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// Calcular la ruta finalconst finalPath = computed(() => {  // 1. Verificar si el enlace es externo  const isExternal = /^https?:\/\//.test(props.href || "");  // 2. Si es externo, devolver tal cual (NuxtLink maneja la generación de la etiqueta <a>)  if (isExternal) return props.href;  // 3. Si es interno, localiza la URL  const targetLocale = props.locale || currentLocale.value;  return getLocalizedUrl(props.href, targetLocale);});</script><template>  <NuxtLink :to="finalPath" v-bind="$attrs">    <slot />  </NuxtLink></template>

    Luego usa este componente en toda tu aplicación:

    layouts/default.vue
    Copiar código

    Copiar el código al portapapeles

    <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Inicio</Links>    <Links href="/about">Acerca de</Links>  </div></template>

    Al usar NuxtLink con rutas localizadas, aseguras que:

    • Los motores de búsqueda puedan rastrear e indexar todas las versiones de idioma de tus páginas
    • Los usuarios puedan compartir URLs localizadas directamente
    • El historial del navegador funcione correctamente con URLs que tienen prefijos de locale

    (Opcional) Paso 9: Manejar Metadatos y SEO

    Nuxt proporciona excelentes capacidades SEO a través del composable useHead (auto-importado). Puedes usar Intlayer para manejar metadatos localizados usando el accesor .raw o .value para obtener el valor primitivo de cadena:

    pages/about.vue
    Copiar código

    Copiar el código al portapapeles

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";// useHead se auto-importa en Nuxtconst content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Usa .raw para acceso a cadena primitiva  meta: [    {      name: "description",      content: content.metaDescription.raw, // Usar .raw para acceder al valor primitivo de cadena    },  ],});</script><template>  <h1><content.title /></h1></template>
    Alternativamente, puedes usar la función import { getIntlayer } from "intlayer" para obtener el contenido sin reactividad de Vue.

    Accediendo a los valores del contenido:

    • Usa .raw para obtener el valor primitivo de cadena (no reactivo)
    • Usa .value para obtener el valor reactivo
    • Usa la sintaxis de componente <content.key /> para soporte del Editor Visual

    Crea la declaración de contenido correspondiente:

    pages/about-page.content.ts
    Copiar código

    Copiar el código al portapapeles

    import { t, type Dictionary } from "intlayer";
    
    const aboutPageContent = {
      key: "about-page",
      content: {
        metaTitle: t({
          en: "About Us - My Company",
          fr: "À Propos - Ma Société",
          es: "Acerca de Nosotros - Mi Empresa",
        }),
        metaDescription: t({
          en: "Learn more about our company and our mission",
          fr: "En savoir plus sur notre société et notre mission",
          es: "Conozca más sobre nuestra empresa y nuestra misión",
        }),
        title: t({
          en: "About Us",
          fr: "À Propos",
          es: "Acerca de Nosotros",
        }),
      },
    } satisfies Dictionary;
    
    export default aboutPageContent;

    Configuración de Git

    Se recomienda ignorar los archivos generados por Intlayer. Esto te permite evitar comprometerlos en tu repositorio Git.

    Para hacerlo, puedes agregar las siguientes instrucciones a tu archivo .gitignore:

    .gitignore
    Copiar código

    Copiar el código al portapapeles

    # Ignorar los archivos generados por Intlayer.intlayer

    Extensión para VS Code

    Para mejorar tu experiencia de desarrollo con Intlayer, puedes instalar la Extensión oficial de Intlayer para VS Code.

    Instalar desde el Marketplace de VS Code

    Esta extensión ofrece:

    • Autocompletado para las claves de traducción.
    • Detección de errores en tiempo real para traducciones faltantes.
    • Previsualizaciones en línea del contenido traducido.
    • Acciones rápidas para crear y actualizar traducciones fácilmente.

    Para más detalles sobre cómo usar la extensión, consulta la documentación de la Extensión de Intlayer para VS Code.


    Ir más allá

    Para ir más allá, puedes implementar el editor visual o externalizar tu contenido usando el CMS.

    Vite y Vue
    Vite y Solid
    Alt+→

    En esta página

      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.

      npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayernpx intlayer init
      import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({  // ... Tu configuración existente de Nuxt  modules: ["nuxt-intlayer"],});
      <script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({  msg: String,});const {  count,  edit,  checkOut,  nuxtIntlayer,  learnMore,  nuxtDocs,  readTheDocs,} = useIntlayer("helloworld");const countRef = ref(0);</script><template>  <h1>{{ msg }}</h1>  <div class="card">    <button type="button" @click="countRef++">      <count />      {{ countRef }}    </button>    <p v-html="edit"></p>  </div>  <p>    <checkOut />    <a href="https://nuxt.com/docs/getting-started/introduction" target="_blank"      >Nuxt</a    >, <nuxtIntlayer />  </p>  <p>    <learnMore />    <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>
      <script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt importa automáticamente useRouteconst route = useRoute();const { locale, availableLocales, setLocale } = useLocale();</script><template>  <nav class="locale-switcher">    <NuxtLink      v-for="localeEl in availableLocales"      :key="localeEl"      :to="getLocalizedUrl(route.fullPath, localeEl)"      class="locale-link"      :class="{ 'active-locale': localeEl === locale }"      @click="setLocale(localeEl)"    >      {{ getLocaleName(localeEl) }}    </NuxtLink>  </nav></template>
      <template>  <NuxtLayout>    <NuxtPage />  </NuxtLayout></template>
      <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Inicio</Links>    <Links href="/about">Acerca de</Links>  </div></template>
      pages/├── index.vue          → /, /fr, /es├── about.vue          → /about, /fr/about, /es/about└── contact/    └── index.vue      → /contact, /fr/contact, /es/contact
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({  title: content.metaTitle.raw,  meta: [    {      name: "description",      content: content.metaDescription.raw,    },  ],});</script><template>  <h1><content.title /></h1></template>
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Usa .raw para acceso a cadena primitiva  meta: [    {      name: "description",      content: content.metaDescription.raw, // Usa .raw para acceder a la cadena primitiva    },  ],});</script><template>  <h1><content.title /></h1></template>
      <script setup lang="ts">import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";interface Props {  href: string;  locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// Calcular la ruta finalconst finalPath = computed(() => {  // 1. Verificar si el enlace es externo  const isExternal = /^https?:\/\//.test(props.href || "");  // 2. Si es externo, devolver tal cual (NuxtLink maneja la generación de la etiqueta <a>)  if (isExternal) return props.href;  // 3. Si es interno, localiza la URL  const targetLocale = props.locale || currentLocale.value;  return getLocalizedUrl(props.href, targetLocale);});</script><template>  <NuxtLink :to="finalPath" v-bind="$attrs">    <slot />  </NuxtLink></template>
      <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Inicio</Links>    <Links href="/about">Acerca de</Links>  </div></template>
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";// useHead se auto-importa en Nuxtconst content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Usa .raw para acceso a cadena primitiva  meta: [    {      name: "description",      content: content.metaDescription.raw, // Usar .raw para acceder al valor primitivo de cadena    },  ],});</script><template>  <h1><content.title /></h1></template>
      # Ignorar los archivos generados por Intlayer.intlayer