@jupri-lab/i18n-core
Version:
Speak Easy. Effortless Internationalization for Your JavaScript Apps
51 lines (48 loc) • 1.69 kB
TypeScript
interface Ii18nConfigs<TLanguage extends string, TResources extends object> {
/**
* Flag to enable adding query params for current language
*/
enableQueryParams?: boolean;
/**
* An array of languages that wants to be supported
*/
languages: TLanguage[];
/**
* To read current language through query param
*/
queryParam?: string;
resources: Record<TLanguage, TResources> | undefined;
}
type TNestedKeyOf<T extends object> = {
[Key in keyof T]: T[Key] extends object ? TNestedKeyOf<T[Key]> : Key;
};
type ILooseObject = Record<string, any>;
interface IEventListener<T extends any[]> {
(...args: T): void;
}
interface ITranslateOptions extends ILooseObject {
escapeHTML?: boolean;
/**
* To add interpolation to you translation.
*
* @example
* en: {
* greeting: "Good [time]"
* }
*
* translate("greeting", { interpolation: { time: "Morning" } }) // Good Morning
*/
interpolation?: ILooseObject;
}
type TEvents = "language_changed";
declare class i18n<TLanguage extends string, TResources extends object, TPredefinedEvents extends string = TEvents> {
private languageManager;
private eventManager;
private translationManager;
constructor(configs: Ii18nConfigs<TLanguage, TResources>);
getCurrentLanguage(): TLanguage;
getChangeLanguageHandler(language?: TLanguage): void;
translate(identifier: string, data?: ITranslateOptions): any;
on(eventName: TPredefinedEvents, callback: () => any): void;
}
export { type IEventListener, type ILooseObject, type ITranslateOptions, type Ii18nConfigs, type TEvents, type TNestedKeyOf, i18n as default };