Plugins de i18next
astro-i18n-next usa i18next internamente para las traducciones. Puedes extenderlo con plugins y configuración personalizados.
Agregando un plugin
Pasa los plugins a través del campo de configuración i18next:
import ICU from 'i18next-icu';
export default defineConfig({ integrations: [createI18n({ defaultLocale: 'en', locales: ['en', 'es'], localeLabels: { en: 'English', es: 'Español' }, localeHtmlLang: { en: 'en', es: 'es' }, translations: { en, es }, i18next: { plugins: [ICU], options: { supportedLngs: ['en', 'es'], }, }, })],});Ejemplo de formato de mensajes ICU
Con i18next-icu, puedes usar sintaxis ICU en tus archivos de traducción:
{ "items": "{count, plural, =0 {No hay elementos} one {# elemento} other {# elementos}}", "greeting": "¡Hola, {name}!"}---import { t } from 'virtual:i18n';const locale = Astro.locals.locale;---
<p>{t(locale, 'items', { count: 5 })}</p><p>{t(locale, 'greeting', { name: 'Mundo' })}</p>Opciones personalizadas de i18next
El campo i18next.options se pasa directamente a i18next.init(). Puedes usarlo para configurar cualquier comportamiento de i18next:
i18next: { options: { supportedLngs: ['en', 'es'], interpolation: { prefix: '{{', suffix: '}}', }, },}Comportamiento predeterminado de i18next
El traductor integrado está configurado con:
interpolation.escapeValue: false— HTML no se escapa (seguro paraset:htmlde Astro)returnNull: false— las claves faltantes devuelven el string de la clave, nuncanull- Fallback al
defaultLocalepara cualquier clave de traducción faltante - Instancia de i18next aislada (seguro llamar a
createTranslatormúltiples veces)