import {__resourcepath} from "../config/ApplicationEnvironment"; import fs from "fs"; import {logger} from "../logger/Logger"; import * as glob from "glob"; import Bean from "../decorators/Bean"; import Singleton from "../patterns/Singleton"; interface MESSAGE_INFO{ [key:string]:string } interface LANG_PACK{ [kr_message:string]:string } interface LANG_PACKS{ [lang:string]:LANG_PACK } @Bean() export default class MessageSource extends Singleton{ private messagePath: string = `${__resourcepath}/messages/message.properties`; private message:MESSAGE_INFO = {}; private langPack:LANG_PACKS = {}; constructor() { super(); this.load(); } public load(){ this.message = this.getMessageMap(this.messagePath); let allMessages:string[] = glob.sync(`${__resourcepath}/messages/*`).filter((file:string)=> { return (file.lastIndexOf(".properties") > -1 && file.lastIndexOf("message.properties") == -1); }); if (allMessages != null && allMessages.length > 0) { allMessages.forEach(f=>{ const nationCd = f.substring(f.indexOf("message_")+"message_".length, f.lastIndexOf(".")); let nationMessage:MESSAGE_INFO = this.getMessageMap(f); let pack:LANG_PACK = {}; Object.keys(this.message).map(key=>{ const krMsg:string = this.message[key]; const ntMsg:string = nationMessage[key]; pack[krMsg] = ntMsg; }); this.langPack[nationCd] = pack; }) } } public getMessageMap(filePath: string) { let message:MESSAGE_INFO = {}; try{ let content_kr = fs.readFileSync(filePath, "utf-8") const messageArray = content_kr.split("\n"); if (messageArray != null && messageArray.length > 0) { messageArray.forEach(msg=>{ if (msg != null && msg != "") { const msgMap = msg.split("="); message[msgMap[0]] = msgMap[1]; } }) } }catch(e){ logger.info(`[${filePath}] 로부터 메시지를 로드할 수 없습니다.`); } return message; } public getMessage(code?: string, lang?:string) { let msg:string = ""; if (code != null && code != undefined) { msg = this.message[code]; if (lang && this.langPack[lang] != null) { let langMsg = this.langPack[lang][msg]; if (langMsg && langMsg != "") { msg = langMsg; } } } return msg; } }