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
- "Añadida documentación del mapeador de locales"v5.7.227/7/2025
El contenido de esta página ha sido traducido con una IA.
Ver la última versión del contenido original en inglésIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Mapeador de Locales
El Mapeador de Locales es una utilidad poderosa que te ayuda a trabajar con datos de internacionalización en tu aplicación Intlayer. Proporciona tres funciones principales para transformar y organizar datos específicos de cada locale: localeMap, localeFlatMap y localeRecord.
Cómo Funciona el Mapeador de Locales
El Mapeador de Locales opera sobre un objeto LocaleData que contiene toda la información necesaria sobre un locale:
Copiar el código al portapapeles
type LocaleData = { locale: LocalesValues; // Código del locale actual (por ejemplo, 'en', 'fr') defaultLocale: LocalesValues; // Código del locale por defecto isDefault: boolean; // Indica si este es el locale por defecto locales: LocalesValues[]; // Array de todos los locales disponibles urlPrefix: string; // Prefijo de URL para este locale (por ejemplo, '/fr' o '')};Las funciones del mapeador generan automáticamente estos datos para cada locale en tu configuración, teniendo en cuenta:
- La lista de locales configurados
- La configuración del locale por defecto
- Si el locale por defecto debe tener prefijo en las URLs
Funciones Principales
localeMap
Transforma cada locale en un único objeto usando una función mapeadora.
Copiar el código al portapapeles
localeMap<T>( mapper: (locale: LocaleData) => T, locales?: LocalesValues[], defaultLocale?: LocalesValues, prefixDefault?: boolean): T[]Ejemplo: Creando objetos de rutas
Copiar el código al portapapeles
import { localeMap } from "intlayer";const routes = localeMap((localizedData) => ({ path: localizedData.urlPrefix, name: localizedData.locale, isDefault: localizedData.isDefault, locales: localizedData.locales, defaultLocale: localizedData.defaultLocale,}));// Resultado:// [// { path: '/', name: 'en', isDefault: true, locales: ['en', 'fr', 'es'], defaultLocale: 'en' },// { path: '/fr', name: 'fr', isDefault: false, locales: ['en', 'fr', 'es'], defaultLocale: 'en' },// { path: '/es', name: 'es', isDefault: false, locales: ['en', 'fr', 'es'], defaultLocale: 'en' }// ]localeFlatMap
Similar a localeMap, pero la función mapper devuelve un arreglo de objetos que se aplanan en un solo arreglo.
Copiar el código al portapapeles
localeFlatMap<T>( mapper: (locale: LocaleData) => T[], locales?: LocalesValues[], defaultLocale?: LocalesValues, prefixDefault?: boolean): T[]Ejemplo: Creando múltiples rutas por cada locale
Copiar el código al portapapeles
import { localeFlatMap } from "intlayer";const routes = localeFlatMap((localizedData) => [ { path: localizedData.urlPrefix, name: localizedData.locale, isDefault: localizedData.isDefault, }, { path: `${localizedData.urlPrefix}/about`, name: `${localizedData.locale}-about`, isDefault: localizedData.isDefault, },]);// Resultado:// [// { path: '/', name: 'en', isDefault: true },// { path: '/about', name: 'en-about', isDefault: true },// { path: '/fr', name: 'fr', isDefault: false },// { path: '/fr/about', name: 'fr-about', isDefault: false },// { path: '/es', name: 'es', isDefault: false },// { path: '/es/about', name: 'es-about', isDefault: false }// ]localeRecord
Crea un objeto tipo registro donde cada locale es una clave que mapea a un valor transformado por la función mapper.
Copiar el código al portapapeles
localeRecord<T>( mapper: (locale: LocaleData) => T, locales?: Locales[], defaultLocale?: Locales, prefixDefault?: boolean): Record<Locales, T>Ejemplo: Cargando archivos de traducción
Copiar el código al portapapeles
import { localeRecord } from "intlayer";const translations = localeRecord(({ locale }) => require(`./translations/${locale}.json`));/// Resultado:// {// en: { welcome: 'Welcome', hello: 'Hello' },// fr: { welcome: 'Bienvenue', hello: 'Bonjour' },// es: { welcome: 'Bienvenido', hello: 'Hola' }// }Configuración del Locale Mapper
El Locale Mapper utiliza automáticamente la configuración de Intlayer, pero puedes sobrescribir los valores predeterminados pasando parámetros:
Usando la Configuración Predeterminada
Copiar el código al portapapeles
import { localeMap } from "intlayer";// Usa la configuración de intlayer.config.tsconst routes = localeMap((data) => ({ path: data.urlPrefix, locale: data.locale,}));Sobrescribiendo la Configuración
Copiar el código al portapapeles
import { localeMap } from "intlayer";// Sobrescribe locales y locale predeterminadoconst customRoutes = localeMap( (data) => ({ path: data.urlPrefix, locale: data.locale }), ["en", "fr", "de"], // Locales personalizadas "en", // Locale predeterminada personalizada true // Prefijar locale predeterminada en las URLs);Ejemplos de Uso Avanzado
Creación de Menús de Navegación
Copiar el código al portapapeles
import { localeMap } from "intlayer";const navigationItems = localeMap((data) => ({ label: data.locale.toUpperCase(), href: data.urlPrefix || "/", isActive: data.isDefault, flag: `/flags/${data.locale}.svg`,}));Generación de Datos para Sitemap
Copiar el código al portapapeles
import { localeFlatMap } from "intlayer";const sitemapUrls = localeFlatMap((data) => [ { url: `${data.urlPrefix}/`, lastmod: new Date().toISOString(), changefreq: "daily", priority: data.isDefault ? 1.0 : 0.8, }, { url: `${data.urlPrefix}/about`, lastmod: new Date().toISOString(), changefreq: "monthly", priority: data.isDefault ? 0.8 : 0.6, },]);Carga Dinámica de Traducciones
Copiar el código al portapapeles
import { localeRecord } from "intlayer";const translationModules = localeRecord(({ locale }) => ({ messages: import(`./locales/${locale}/messages.json`), validation: import(`./locales/${locale}/validation.json`), metadata: { locale, direction: ["ar", "he", "fa"].includes(locale) ? "rtl" : "ltr", },}));Integración de Configuración
El Locale Mapper se integra perfectamente con la configuración de Intlayer:
- Locales: Utiliza automáticamente
configuration.internationalization.locales - Locale Predeterminada: Usa
configuration.internationalization.defaultLocale - Prefijo en URL: Respeta
configuration.middleware.prefixDefault
Esto garantiza la coherencia en toda su aplicación y reduce la duplicación de configuraciones.