package Ġto ky o . a ie uo . mine flow . utils Ċ Ċ import Ġto ky o . a ie uo . mine flow . Main Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . util .* Ċ Ċ object ĠLanguage Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmessages : ĠMutable Map < String , ĠMutable Map < String , ĠString >> Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠ Ġ" j pn " Ġto Ġmutable Map Of (), ĊĠĠĠĠĠĠĠ Ġ" eng " Ġto Ġmutable Map Of () ĊĠĠĠ Ġ) ĊĠĠĠ Ġvar Ġlanguage Ġ= Ġ" eng " ĊĠĠĠ Ġvar Ġfallback Language Ġ= Ġ" eng " ĊĊĠĠĠ Ġfun Ġis Available Language ( language Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlanguage Name Ġin Ġget Available Languages () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Available Languages (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessages . keys . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Base Message ( language : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! messages . containsKey ( language )) Ġmessages [ language ] Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠ Ġval Ġowner Ġ= ĠMain . instance ĊĊĠĠĠĠĠĠĠ Ġval Ġresource Ġ= Ġowner . getResource (" language /$ language . ini ") Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġmessages Ġ= ĠProperties () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessages . load ( InputStream Reader ( resource , Ġ" UTF - 8 ")) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġmessages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ! is ĠString Ġ|| Ġvalue Ġ! is ĠString ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . messages [ language ]?. put ( key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . replace ("\\ n ", Ġ"\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("\\ q ", Ġ"' ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("\\ dq ", Ġ"\" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . startsWith ("\" ") Ġ&& Ġit . endsWith ("\ "" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . substring ( 1 , Ġit . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . startsWith ("\ '") Ġ&& Ġit . endsWith ("\ ' ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . substring ( 1 , Ġit . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( messages : ĠMap < String , ĠString >, Ġlanguage : ĠString Ġ= Ġthis . language ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . messages . containsKey ( language )) Ġthis . messages [ language ] Ġ= Ġmutable Map Of () ĊĊĠĠĠĠĠĠĠ Ġthis . messages [ language ]?. put All ( messages ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ( key : ĠString , Ġreplaces : ĠList < String > Ġ= ĠlistOf (), Ġlanguage : ĠString Ġ= Ġthis . language ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( exists ( key , Ġlanguage )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmessage Ġ= Ġmessages [ language ]?. get ( key ) Ġ?: Ġreturn Ġkey ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplaces . with Index () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( cnt , Ġvalue ) Ġ-> Ġmessage Ġ= Ġmessage . replace (" {% $ cnt }", Ġvalue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage . replace ("\\ n ", Ġ"\ n "). replace ("\\ q ", Ġ"' "). replace ("\\ dq ", Ġ"\" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmessage ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( language Ġ!== Ġfallback Language ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget ( key , Ġreplaces , Ġfallback Language ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkey ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexists ( key : ĠString , Ġlanguage : ĠString Ġ= Ġthis . language ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessages [ language ]?. containsKey ( key ) Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreplace ( text : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregex Ġ= ĠRegex ("@ ([ a - zA - Z . 0 - 9 ]+ )") ĊĠĠĠĠĠĠĠ Ġreturn Ġtext . replace ( regex ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . groups [ 1 ]?. let Ġ{ Ġget ( it . value ) Ġ} Ġ?: Ġresult . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Load ErrorMessage ( language : ĠString ): ĠArray < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( language ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" j pn " Ġ-> ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" è¨Ģ èªŀ ãĥķãĤ¡ãĤ¤ãĥ« ãģ® èªŃãģ¿ è¾¼ ãģ¿ ãģ« å¤± æķ Ĺ ãģĹãģ¾ãģĹãģŁ ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ ${ get Available Languages (). join ToString (", Ġ" )} ] ãģĮ ä½¿çĶ¨ ãģ§ãģįãģ¾ãģĻ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Failed Ġto Ġload Ġlanguage Ġfile .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Available Ġlanguages Ġare : Ġ[ ${ get Available Languages (). join ToString (", Ġ" )} ]" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }