pretur.i18n
Version:
Internationalization using MessageFormat
38 lines (37 loc) • 1.39 kB
TypeScript
export interface Bundle<K extends string = string, D = any> {
key: K;
data?: D;
}
export interface StringBuilder<D = any> {
(data?: D): string;
}
export interface StringBuilders {
constant(str: string): StringBuilder<undefined>;
callback<D>(callback: (data?: D) => string): StringBuilder<D>;
messageFormat<D>(formatString: string): StringBuilder<D>;
}
export declare type Definition<T> = {
[P in keyof T]: StringBuilder<T[P]>;
};
export interface Locale<T> {
locale: string;
definition: (builders: StringBuilders) => Definition<T>;
}
export declare function buildLocale<T>(locale: string, definition: (stringBuilders: StringBuilders) => Definition<T>): Locale<T>;
export declare type Keys<T> = {
[P in keyof T]: P;
};
export interface Bundler<T> {
<K extends keyof T>(key: K, data?: T[K]): Bundle<K, T[K]>;
}
export interface Formatter<T> {
<K extends keyof T>(key: K, data?: T[K]): string;
<K extends keyof T>(bundle: Bundle<K, T[K]>): string;
}
export interface Internationalization<T> {
keys: Keys<T>;
bundle: Bundler<T>;
buildFormatter(locale: string): Formatter<T>;
}
export declare function internationalize<T>(main: Locale<T>, ...alts: Locale<Partial<T>>[]): Internationalization<T>;
export declare function combine<T1, T2>(i18n1: Internationalization<T1>, i18n2: Internationalization<T2>): Internationalization<T1 & T2>;