export interface Bundle { key: K; data?: D; } export interface StringBuilder { (data?: D): string; } export interface StringBuilders { constant(str: string): StringBuilder; callback(callback: (data?: D) => string): StringBuilder; messageFormat(formatString: string): StringBuilder; } export declare type Definition = { [P in keyof T]: StringBuilder; }; export interface Locale { locale: string; definition: (builders: StringBuilders) => Definition; } export declare function buildLocale(locale: string, definition: (stringBuilders: StringBuilders) => Definition): Locale; export declare type Keys = { [P in keyof T]: P; }; export interface Bundler { (key: K, data?: T[K]): Bundle; } export interface Formatter { (key: K, data?: T[K]): string; (bundle: Bundle): string; } export interface Internationalization { keys: Keys; bundle: Bundler; buildFormatter(locale: string): Formatter; } export declare function internationalize(main: Locale, ...alts: Locale>[]): Internationalization;