Haz tu pregunta y obtén un resumen del documento referenciando esta página y el proveedor AI de tu elección
Al integrar el servidor MCP Intlayer a tu asistente de IA, puedes recuperar todos los documentos directamente desde ChatGPT, DeepSeek, Cursor, VSCode, etc.
Ver la documentación del servidor MCPHistorial de versiones
- Actualización de LocaleSwitcher, SEO, metadatosv7.3.117/12/2025
- Historial inicialv5.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ésSi tienes una idea para mejorar esta documentación, no dudes en contribuir enviando una pull request en GitHub.
Enlace de GitHub a la documentaciónCopiar 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
Consulta la Plantilla de Aplicación en GitHub.
Paso 1: Instalar Dependencias
Instala los paquetes necesarios usando npm:
npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayerintlayer
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:
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:
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:
Copiar el código al portapapeles
import { type Dictionary, t } from "intlayer";const content = { key: "home-page", content: { title: t({ en: "Hello world", fr: "Bonjour le monde", es: "Hola mundo", }), metaTitle: t({ en: "Welcome | My Application", fr: "Bienvenue | Mon Application", es: "Bienvenido | Mi Aplicación", }), metaDescription: t({ en: "Discover your multilingual Nuxt app homepage powered by Intlayer.", fr: "Découvrez la page d'accueil multilingue de votre application Nuxt propulsée par Intlayer.", es: "Descubre la página de inicio multilingüe de tu aplicación Nuxt impulsada por Intlayer.", }), },} satisfies Dictionary;export default content;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,mjx,cjs,cjx}).
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:
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:
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:
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:
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:
pages/├── index.vue → /, /fr, /es├── about.vue → /about, /fr/about, /es/about└── contact/ └── index.vue → /contact, /fr/contact, /es/contactPara 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):
Copiar el código al portapapeles
<script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({ title: content.metaTitle.value, meta: [ { name: "description", content: content.metaDescription.value, }, ],});</script><template> <h1><content.title /></h1></template>Página Acerca de (pages/about.vue):
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.
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:
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:
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:
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:
Copiar el código al portapapeles
# Ignorar los archivos generados por Intlayer.intlayerExtensió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.