Saltearse al contenido

Resolvedor de Slugs

function createSlugResolver(
slugMaps: Record<string, SlugMap>,
defaultLocale: string
): {
getLocalizedSlug: (category: string, canonicalSlug: string, locale: string) => string;
getCanonicalSlug: (category: string, localizedSlug: string, locale: string) => string | undefined;
getAllSlugPairs: (category: string, locale: string) => Array<{ canonical: string; localized: string }>;
}

Devuelve funciones para resolver slugs entre formas canónicas (idioma predeterminado) y localizadas. Al usar createI18n, las primeras dos funciones están disponibles desde virtual:i18n.

getLocalizedSlug(category, canonicalSlug, locale)

Traduce un slug canónico a un slug específico del idioma.

Parámetros:

ParámetroTipoDescripción
categorystringCategoría del mapa de slugs (ej., 'pages', 'saunas')
canonicalSlugstringEl slug del idioma predeterminado
localestringIdioma objetivo

Devuelve: string — el slug localizado, o el slug canónico si no existe traducción

Ejemplos:

getLocalizedSlug('saunas', 'model-165', 'es'); // "modelo-165"
getLocalizedSlug('saunas', 'model-165', 'en'); // "model-165"
getLocalizedSlug('pages', 'about', 'es'); // "sobre"

getCanonicalSlug(category, localizedSlug, locale)

Búsqueda inversa — encuentra el slug canónico a partir de uno localizado.

Parámetros:

ParámetroTipoDescripción
categorystringCategoría del mapa de slugs
localizedSlugstringEl slug específico del idioma
localestringIdioma origen

Devuelve: string | undefined — el slug canónico, o undefined si no se encuentra

Ejemplos:

getCanonicalSlug('saunas', 'modelo-165', 'es'); // "model-165"
getCanonicalSlug('saunas', 'model-165', 'en'); // "model-165"
getCanonicalSlug('saunas', 'unknown', 'es'); // undefined

getAllSlugPairs(category, locale)

Devuelve todos los pares de slugs canónicos/localizados para una categoría e idioma.

Parámetros:

ParámetroTipoDescripción
categorystringCategoría del mapa de slugs
localestringIdioma objetivo

Devuelve: Array<{ canonical: string; localized: string }>

Ejemplo:

getAllSlugPairs('saunas', 'es');
// [
// { canonical: 'model-165', localized: 'modelo-165' },
// { canonical: 'model-200', localized: 'modelo-200' },
// ]