import React from 'react'; import type { TranslationProviderProps, TranslationLookup, TranslationArg, Language } from '../types'; /** * Interfaz del contexto interno de traducción */ interface TranslationContextType { /** * Traduce una llave y, si se pasan `params`, sustituye sus marcadores `{{nombre}}`. * * `params` es OPCIONAL y el parámetro se añadió sin cambiar la forma de un solo argumento, * así que todas las llamadas existentes siguen valiendo. Antes de esto el kit no tenía forma de * interpolar: una clave del catálogo con marcadores llegaba a la pantalla con el marcador crudo * («Detalle — {{number}}»), y cada consumidor lo rodeaba con `t(...).replace('{{x}}', v)` — un * `replace` por marcador, que es exactamente donde se olvida el segundo. */ translate: (key: string, arg?: TranslationArg) => string; t: (key: string, arg?: TranslationArg) => string; /** * Resolución con procedencia: devuelve el valor y el idioma en el que se * encontró, o `null` si la clave no está registrada. Permite a un consumidor * con diccionarios propios distinguir una traducción del idioma activo de un * fallback al idioma base. Ver `TranslationEngine.resolve`. * * Es opcional: un motor de terceros puede no implementarlo. */ resolve?: (key: string) => TranslationLookup | null; setLanguage: (lang: string) => Promise; currentLanguage: string; languages: Language[]; isReady: boolean; error: string | null; /** * Invalidación explícita: borra la caché del idioma activo (y del idioma por * defecto, que se usa como fallback) y vuelve a pedir el catálogo al backend. */ refreshTranslations: () => Promise; /** * Contador que se incrementa cada vez que el motor recibe recursos nuevos. * * El motor de traducción es un objeto mutable, así que cargarle recursos NO * re-renderiza a los consumidores. Este contador viaja en el `value` del * contexto para invalidarlos cuando llega un catálogo fresco. */ resourceVersion: number; } /** * Provider principal para la internacionalización de Siesa * * ## Política de caché: stale-while-revalidate * * El catálogo cacheado en `localStorage` se sirve al instante (para no bloquear * el primer render) y *además* se revalida contra el backend. Cuando llegan los * datos frescos se mergean en el motor, se reescribe la caché y se re-renderiza * a los consumidores. Así las claves nuevas añadidas en el backend aparecen en * la siguiente carga de la app sin limpiar la caché a mano. * * La revalidación automática ocurre una vez por idioma y carga de la app. * Para forzarla en caliente existe `refreshTranslations()`, y un evento de * cambio de sesión (`sessionChangeEventName`) limpia la caché completa. * * En modo `mfe` se mantiene la optimización de red: si el microfrontend ya tiene * catálogo (caché o memoria) no llama al API; solo el Shell revalida y difunde * el resultado por `broadcastEventName`. */ export declare const TranslationProvider: React.FC; /** * Hook para acceder al contexto de traducción * Implementa una política de "Fallo Amistoso" (Graceful Fallback): * Si no hay un TranslationProvider en la raíz, no rompe la aplicación, * sino que devuelve un estado seguro por defecto. */ export declare const useTranslationInternal: () => TranslationContextType; export {}; //# sourceMappingURL=TranslationProvider.d.ts.map