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
- "Actualizar el uso de la API useIntlayer de Solid para el acceso directo a las propiedades"v8.9.04/5/2026
- "Agregar comando init"v7.6.031/12/2025
- "Historial inicial"v7.6.031/12/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 backend de Fastify usando Intlayer | Internacionalización (i18n)
fastify-intlayer es un potente plugin de internacionalización (i18n) para aplicaciones Fastify, diseñado para hacer que tus servicios backend sean accesibles globalmente proporcionando respuestas localizadas basadas en las preferencias del cliente.
Ver la implementación del paquete en GitHub: https://github.com/aymericzip/intlayer/tree/main/packages/fastify-intlayer
Casos de uso prácticos
- Mostrar errores del backend en el idioma del usuario: Cuando ocurre un error, mostrar mensajes en la lengua nativa del usuario mejora la comprensión y reduce la frustración. Esto es especialmente útil para mensajes de error dinámicos que podrían mostrarse en componentes frontend como toasts o modales.
- Recuperar contenido multilingüe: Para aplicaciones que obtienen contenido de una base de datos, la internacionalización garantiza que puedas servir ese contenido en varios idiomas. Esto es crucial para plataformas como sitios de comercio electrónico o sistemas de gestión de contenido que necesitan mostrar descripciones de productos, artículos y otros contenidos en el idioma preferido por el usuario.
- Enviar correos electrónicos multilingües: Ya sean correos transaccionales, campañas de marketing o notificaciones, enviar correos en el idioma del destinatario puede aumentar significativamente el compromiso y la efectividad.
- Notificaciones push multilingües: Para aplicaciones móviles, enviar notificaciones push en el idioma preferido del usuario puede mejorar la interacción y la retención. Este toque personal puede hacer que las notificaciones se sientan más relevantes y accionables.
- Otras comunicaciones: Cualquier forma de comunicación desde el backend, como mensajes SMS, alertas del sistema o actualizaciones de la interfaz de usuario, se beneficia de estar en el idioma del usuario, garantizando claridad y mejorando la experiencia de usuario en general.
Al internacionalizar el backend, tu aplicación no solo respeta las diferencias culturales, sino que también se alinea mejor con las necesidades del mercado global, convirtiéndolo en un paso clave para escalar tus servicios a nivel mundial.
Primeros pasos
Ver la Plantilla de la Aplicación en GitHub.
Instalación
Para comenzar a usar fastify-intlayer, instala el paquete usando npm:
Copiar el código al portapapeles
la bandera--interactivees opcional. Usaintlayer-cli initsi eres un agente de IA.
Este comando detectará su entorno e instalará los paquetes necesarios. Por ejemplo:
Copiar el código al portapapeles
Configuración
Configura los ajustes de internacionalización creando un archivo intlayer.config.ts en la raíz de tu proyecto:
Copiar el código al portapapeles
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [
Locales.ENGLISH,
Locales.FRENCH,
Locales.SPANISH_MEXICO,
Locales.SPANISH_SPAIN,
],
defaultLocale: Locales.ENGLISH,
},
};
export default config;
Declara tu contenido
Crea y gestiona tus declaraciones de contenido para almacenar traducciones:
Copiar el código al portapapeles
import { t, type Dictionary } from "intlayer";
const indexContent = {
key: "index",
content: {
exampleOfContent: t({
en: "Example of returned content in English",
fr: "Exemple de contenu renvoyé en français",
"es-ES": "Ejemplo de contenido devuelto en español (España)",
"es-MX": "Ejemplo de contenido devuelto en español (México)",
}),
},
} satisfies Dictionary;
export default indexContent;
Tus declaraciones de contenido pueden definirse en cualquier parte de tu aplicación siempre que se incluyan en el directoriocontentDir(por defecto,./src). Y que coincidan con la extensión de archivo de declaración de contenido (por defecto,.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
Para más detalles, consulta la documentación de declaración de contenido.
Configuración de la aplicación Fastify
Configura tu aplicación Fastify para usar fastify-intlayer:
Copiar el código al portapapeles
import Fastify from "fastify";
import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
import dictionaryExample from "./index.content";
const fastify = Fastify({ logger: true });
// Cargar el plugin de internacionalización
await fastify.register(intlayer);
// Rutas
fastify.get("/t_example", async (_req, reply) => {
return t({
en: "Example of returned content in English",
fr: "Exemple de contenido renvoyé en français",
"es-ES": "Ejemplo de contenido devuelto en español (España)",
"es-MX": "Ejemplo de contenido devuelto en español (México)",
});
});
fastify.get("/getIntlayer_example", async (_req, reply) => {
return getIntlayer("index").exampleOfContent;
});
fastify.get("/getDictionary_example", async (_req, reply) => {
return getDictionary(dictionaryExample).exampleOfContent;
});
// Iniciar servidor
const start = async () => {
try {
await fastify.listen({ port: 3000 });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
Compatibilidad
fastify-intlayer es completamente compatible con:
react-intlayerpara aplicaciones Reactnext-intlayerpara aplicaciones Next.jsvite-intlayerpara aplicaciones Vite
También funciona sin problemas con cualquier solución de internacionalización en diversos entornos, incluidos navegadores y solicitudes API. Puedes personalizar el middleware para detectar la locale a través de headers o cookies:
Copiar el código al portapapeles
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
// ... Otras opciones de configuración
routing: {
storage: [
{ type: "header", name: "my-locale-header" },
{ type: "cookie", name: "my-locale-cookie" },
],
},
};
export default config;
Por defecto, fastify-intlayer interpretará la cabecera Accept-Language para determinar el idioma preferido del cliente.
Para más información sobre la configuración y temas avanzados, visita nuestra documentación.
Configurar TypeScript
fastify-intlayer aprovecha las robustas capacidades de TypeScript para mejorar el proceso de internacionalización. El tipado estático de TypeScript garantiza que cada clave de traducción esté incluida, reduciendo el riesgo de traducciones faltantes y mejorando la mantenibilidad.
Asegúrate de que los tipos autogenerados (por defecto en ./types/intlayer.d.ts) estén incluidos en tu archivo tsconfig.json.
Copiar el código al portapapeles
Extensión de VS Code
Para mejorar tu experiencia de desarrollo con Intlayer, puedes instalar la extensión oficial Intlayer VS Code Extension.
Instalar desde el Marketplace de VS Code
Esta extensión proporciona:
- Autocompletado para las claves de traducción.
- Detección de errores en tiempo real para traducciones faltantes.
- Vistas previas 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 VS Code de Intlayer.
Configuración de Git
Se recomienda ignorar los archivos generados por Intlayer. Esto te permite evitar confirmarlos en tu repositorio Git.
Para ello, puedes agregar las siguientes instrucciones a tu archivo .gitignore:
Copiar el código al portapapeles
Preguntas frecuentes
La opción genérica es i18next con fastify-i18next o un hook escrito a mano, que carga catálogos JSON por espacio de nombres y almacena el idioma en la solicitud. La alternativa es Intlayer mediante fastify-intlayer, que registra el plugin por ti, resuelve el idioma por solicitud y comparte el mismo contenido tipado que tu frontend.
El motivo para internacionalizar el backend en primer lugar es que una gran parte del texto que lee un usuario nunca pasa por el frontend: mensajes de error de la API, correos transaccionales, notificaciones push, SMS y exportaciones a PDF. Estos necesitan el idioma del destinatario, resuelto por solicitud y no por sesión.
Consulta por qué Intlayer.
Muy poco. Los diccionarios se compilan con antelación y solo se incluyen los idiomas que declaras, así que no hay carga de catálogos al arrancar ni lecturas de archivos en la ruta de la solicitud. Eso importa sobre todo en despliegues serverless y edge, donde el tamaño del bundle determina el tiempo de arranque en frío. Consulta la optimización del bundle.
Sí, y hay dos caminos. Puedes migrar el contenido de forma progresiva con la guía de migración de i18next. O puedes mantener tu API actual por completo: los adaptadores de compatibilidad exponen exactamente la misma API que i18next, pero servida por diccionarios de Intlayer, así que cambian los imports y el código de los manejadores no.
Sí. El plugin de sincronización JSON mantiene tus archivos /messages/{locale}/{namespace}.json como fuente de verdad y genera diccionarios de Intlayer a partir de ellos, en ambas direcciones. Un plugin de sincronización PO hace lo mismo para los catálogos gettext, y los archivos por idioma te permiten dividir el contenido por idioma en lugar de agrupar los idiomas en un solo archivo.
No. Ejecuta npx intlayer extract e Intlayer lee tus archivos fuente, extrae las cadenas visibles para el usuario y escribe un archivo .content junto a cada uno, así que revisas un diff en lugar de copiar cadenas a un catálogo una por una. Consulta el comando extract.
En el lado del frontend del mismo proyecto, el compilador de Intlayer va más allá y genera los diccionarios en tiempo de compilación a partir de tu código JSX, TSX, Vue o Svelte, de modo que las dos mitades de la aplicación comparten una única capa de contenido sin claves mantenidas a mano.
Cinco piezas, todas opcionales:
- Extensión de VS Code: salta de una clave
useIntlayeral archivo de contenido que la declara, extrae contenido de un componente y ejecuta build, fill, test, push y pull desde la paleta de comandos o desde una pestaña de Intlayer dedicada. - Servidor LSP: el mismo conocimiento en cualquier editor que hable LSP, con ir a la definición, buscar todas las referencias, vistas previas al pasar el cursor de un valor traducido, autocompletado de claves y campos, y un aviso cuando una clave no está declarada en ninguna parte. También resuelve las llamadas a
i18next,react-i18next,next-intlyuse-intl, lo que ayuda durante la migración. - Servidor MCP: expone la documentación y la CLI de Intlayer a Cursor, VS Code, Claude Desktop, Claude Code y ChatGPT, para que un asistente responda a partir de la documentación actual en lugar de adivinar, y pueda ejecutar comandos como
intlayer fillpor sí mismo. - Habilidades para agentes: habilidades específicas como
intlayer-config,intlayer-clieintlayer-content, además de una por framework, que enseñan a un agente tu configuración de enrutamiento y los tipos de nodo de contenido. - Plugin de ESLint:
no-raw-textmarca las cadenas codificadas de forma fija, con reglas adicionales para claves de diccionario estáticas y contenido sin usar.
