declare var messages: any; export class LanguageManager { public currentLang: string; constructor() { this.currentLang = "ru_RU"; } public setLang(lang: string): void { this.currentLang = lang; } public getProvider() { return messages; } public setProvider(provider: any) { messages = provider; } public getMessage(message: string, parameters = null): string { if (message == null) { return ""; } const parts: string[] = message.split("."); let currentProvider = this.getProvider(); for (let i = 0; i < parts.length; i++) { const propertyName = parts[i]; currentProvider = currentProvider[propertyName]; if (currentProvider == null) { break; } } if (currentProvider == null) { return this.bind(message, parameters); } return this.bind(currentProvider, parameters); } private bind(template: string, parameters: any) { if (parameters == null) { return template; } let result = template; for (const propName in parameters) { if (parameters.hasOwnProperty(propName)) { let value = parameters[propName]; if (value === null || value === undefined) { value = ""; } else { value = value.toString(); } result = result.replace("#" + propName + "#", value); // Bind using old syntax. result = result.replace("#" + propName, value); } } return result; } } export const l = new LanguageManager(); export function _(message: string, parameters = null) { return l.getMessage(message, parameters); }