Configuración
La función createI18n() acepta un único objeto de configuración de tipo I18nConfig.
Campos requeridos
defaultLocale
Tipo: string
El código de idioma predeterminado. Las páginas en este idioma se sirven sin prefijo de URL.
defaultLocale: 'en'locales
Tipo: string[]
Array de todos los códigos de idioma soportados, incluyendo el predeterminado.
locales: ['en', 'es', 'fr']localeLabels
Tipo: Record<string, string>
Nombres legibles para cada idioma. Usados en selectores de idioma.
localeLabels: { en: 'English', es: 'Español', fr: 'Français' }localeHtmlLang
Tipo: Record<string, string>
Valores del atributo HTML lang para cada idioma.
localeHtmlLang: { en: 'en', es: 'es', fr: 'fr' }translations
Tipo: Record<string, Record<string, unknown>>
Objetos clave-valor de traducción para cada idioma. Típicamente importados desde archivos JSON.
import en from './src/i18n/en.json' with { type: 'json' };import es from './src/i18n/es.json' with { type: 'json' };
// ...translations: { en, es }Campos opcionales
pagesDir
Tipo: string | undefined
Ruta relativa desde la raíz del proyecto al directorio de páginas. Cuando se establece, la integración escanea archivos .astro en busca de declaraciones export const slugs para construir el mapa de slugs de páginas.
pagesDir: 'src/pages'contentDirs
Tipo: Record<string, string> | undefined
Mapa de nombres de colección a rutas de directorio relativas. Cada directorio se escanea en busca de archivos markdown con slugs en su frontmatter YAML.
contentDirs: { saunas: 'src/content/saunas', products: 'src/content/products',}slugMaps
Tipo: Record<string, SlugMap> | undefined
Mapas de slugs definidos manualmente. Se fusionan con los auto-descubiertos (los manuales tienen prioridad).
slugMaps: { pages: { about: { en: 'about', es: 'sobre' }, },}i18next
Tipo: I18nextOptions | undefined
Plugins y opciones de inicialización de i18next personalizados.
i18next: { plugins: [ICU], options: { supportedLngs: ['en', 'es'], },}Consulta la guía de Plugins de i18next para más detalles.
Ejemplo completo
import { defineConfig } from 'astro/config';import { createI18n } from '@otrodigital/astro-i18n-next';import en from './src/i18n/en.json' with { type: 'json' };import es from './src/i18n/es.json' with { type: 'json' };
export default defineConfig({ integrations: [createI18n({ defaultLocale: 'en', locales: ['en', 'es'], localeLabels: { en: 'English', es: 'Español' }, localeHtmlLang: { en: 'en', es: 'es' }, translations: { en, es }, pagesDir: 'src/pages', contentDirs: { saunas: 'src/content/saunas' }, })],});