@infomaximum/localization
Version:
Localization for js applications
46 lines (45 loc) • 1.8 kB
TypeScript
export declare enum ELanguages {
ru = "ru",
en = "en"
}
interface ICommonLocParams {
capitalized?: boolean;
lang?: ELanguages;
}
interface ITemplateLocParams<T> extends ICommonLocParams {
templateData?: T;
}
interface IPluralLocParams extends ICommonLocParams {
count: number;
}
export type TExtractLocalizationParams<T extends TLocalizationDescription> = T extends {
[K in ELanguages]: (...args: infer P) => string;
} ? ITemplateLocParams<P[0]> : T extends {
[K in ELanguages]: TLocalizationPluralDescription;
} ? IPluralLocParams : ICommonLocParams;
export type TLocalizationFunctionalDescription = (...args: any[]) => string | TLocalizationPluralDescription;
type TLocalizationPluralDescription = {
s: string;
p1: string;
p2?: string;
};
export type TLocalizationDescription = Record<ELanguages, string | TLocalizationFunctionalDescription | TLocalizationPluralDescription>;
export type TLocalizationParams = {
language: ELanguages;
};
export interface ILocalizationProps extends Partial<ITemplateLocParams<unknown>>, Partial<IPluralLocParams> {
}
export declare class Localization {
static Language: typeof ELanguages;
private static PluralType;
private static GetPlurableEn;
private static GetPlurableRu;
private language;
constructor(params: TLocalizationParams);
static getLocalizedTextSafe: <L extends TLocalizationDescription, P extends ILocalizationProps = TExtractLocalizationParams<L>>(language: ELanguages, locObj: L, props?: P | undefined) => string;
getLanguage(): ELanguages;
getBrowserLanguage(): ELanguages;
getLocalized<L extends TLocalizationDescription, P extends ILocalizationProps = TExtractLocalizationParams<L>>(loc: L, props?: P): string;
private getMaybeCapitalized;
}
export {};