export type I18nTemplate = (...args: T) => string; export type I18nMessage = { [N in T]: I18nTemplate; }; export interface I18nMessages { [lang: string]: Record>; } export type I18nPath, Lang extends Extract, N extends keyof Messages = keyof Messages> = N extends infer N extends string ? `${N}.${Extract}` : never; export type I18nTemplateFn> = Path extends `${infer N}.${infer K}` ? Messages[N][Lang][K] : never; export type I18nLangs> = Extract; export declare class I18n, Messages extends Record> { private defaultLang; private messages; constructor(defaultLang: DefaultLang, messages: Messages); localize>(localizer: F, value: T): string; get

>(path: P, args: Parameters>): string; get

, L extends I18nLangs>(path: P, args: Parameters>, lang: L): string; } export type I18nLocalizer> = (value: T) => I18nLocalizerResult; export type I18nLocalizerResult> = _I18nLocalizerResult>>; type _I18nLocalizerResult, P extends I18nPath>> = P extends infer P extends string ? [path: P, args: Parameters, M>>] : never; export {};