package Ġcommon Ċ Ċ import Ġio . ktor . application . Application Call Ċ import Ġio . ktor . http . HttpHeaders Ċ import Ġio . ktor . http . parse And Sort Header Ċ import Ġio . ktor . request . header Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util .* Ċ Ċ private Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger (" Localization ") Ċ Ċ /** Ċ Ġ* ĠList Ġof Ġsupported Ġlocales Ġfor ĠActive Anno . Ċ Ġ*/ Ċ private Ġval Ġsupported Locales Ġ= ĠlistOf ( ĊĠĠĠ ĠLocale . GER MAN , ĊĠĠĠ ĠLocale . EN GL ISH Ċ ) Ċ Ċ /** Ċ Ġ* ĠGet ĠLoc ales Ġfrom ĠAccept Language Ġheader Ċ Ġ*/ Ċ fun ĠApplication Call . accepted Locales OrDefault (): ĠList < Locale > Ġ{ ĊĠĠĠ Ġval Ġaccept Language Header Ġ= Ġrequest . header ( HttpHeaders . Accept Language ) ĊĠĠĠ Ġreturn Ġaccept Language Header ?. let Ġ{ Ġparse And Sort Header ( it ) Ġ} ?. map Ġ{ ĠLocale . for Language Tag ( it . value ) Ġ} Ġ?: ĠlistOf ( Locale . EN GL ISH ) Ċ } Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġfirst Ġmatching Ġsupporting Ġlocale Ġor Ġthe Ġdefault Ġlocale Ġfrom Ġan Ġapplication Ġcall Ċ Ġ*/ Ċ fun ĠApplication Call . preferred Supported Locale OrDefault (): ĠLocale Ġ{ ĊĠĠĠ Ġreturn Ġaccepted Locales OrDefault (). let Ġ{ Ġlocales Ġ-> ĊĠĠĠĠĠĠĠ Ġlocales . first OrNull Ġ{ Ġit Ġin Ġsupported Locales Ġ} Ġ Ġ// ĠExact Ġlocale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġlocales . first OrNull Ġ{ Ġit . language Ġin Ġsupported Locales . map Ġ{ Ġit . language Ġ} Ġ} Ġ Ġ// ĠAt Ġleast Ġlanguage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠLocale . EN GL ISH Ġ Ġ// Ġdefault ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠGiven Ġa Ġmessage Ġ[ key ] Ġand Ġoptionally Ġa Ġ[ locale ], Ġreturn Ġthe Ġmessage Ġstring . ĠIf Ġthe Ġlocale Ġis Ġmissing , Ġuse Ġthe Ġdefault Ġlocale Ġ( english ) Ċ Ġ*/ Ċ fun ĠgetMessage String ( key : ĠString , Ġlocale : ĠLocale ? Ġ= Ġnull ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠResource Bundle . get Bundle (" messages ", Ġlocale Ġ?: ĠLocale . EN GL ISH ). getString ( key ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Missing Ġlocalization ĠString Ġfor Ġkey Ġ$ key ", Ġe ) ĊĠĠĠĠĠĠĠ Ġkey ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ ĠGiven Ġa Ġmessage Ġ[ key ] Ġand Ġoptionally Ġa Ġ[ locale ], Ġreturn Ġthe Ġmessage Ġstring . ĠIf Ġthe Ġlocale Ġis Ġmissing , Ġuse Ġthe Ġapplication Ġcall Ġto Ġtry Ġto Ġget Ġthe Ċ Ġ* Ġ Ġpreferred Ġlocale Ċ Ġ*/ Ċ fun ĠApplication Call . getMessage String ( key : ĠString , Ġlocale : ĠLocale ? Ġ= Ġnull ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠResource Bundle . get Bundle (" messages ", Ġlocale Ġ?: Ġpreferred Supported Locale OrDefault ()). getString ( key ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Missing Ġlocalization ĠString Ġfor Ġkey Ġ$ key ", Ġe ) ĊĠĠĠĠĠĠĠ Ġkey ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ ĠGiven Ġa Ġmessage Ġ[ key ] Ġand Ġoptionally Ġa Ġ[ locale ], Ġreturn Ġa Ġmessage Ġobject . ĠIf Ġthe Ġlocale Ġis Ġmissing , Ġuse Ġthe Ġapplication Ġcall Ġto Ġtry Ġto Ġget Ġthe Ċ Ġ* Ġ Ġpreferred Ġlocale Ċ Ġ*/ Ċ fun ĠApplication Call . getMessage Object ( key : ĠString , Ġlocale : ĠLocale ? Ġ= Ġnull ): ĠAny Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠResource Bundle . get Bundle (" messages ", Ġlocale Ġ?: Ġpreferred Supported Locale OrDefault ()). getObject ( key ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Missing Ġlocalization ĠObject Ġfor Ġkey Ġ$ key ", Ġe ) ĊĠĠĠĠĠĠĠ Ġkey ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ ĠGiven Ġa Ġmessage Ġ[ key ] Ġand Ġoptionally Ġa Ġ[ locale ], Ġreturn Ġthe Ġmessage Ġstring Ġarray . ĠIf Ġthe Ġlocale Ġis Ġmissing , Ġuse Ġthe Ġapplication Ġcall Ġto Ġtry Ġto Ġget Ċ Ġ* Ġ Ġthe Ġpreferred Ġlocale Ċ Ġ*/ Ċ fun ĠApplication Call . getMessage String Array ( key : ĠString , Ġlocale : ĠLocale ? Ġ= Ġnull ): ĠArray < String > Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠResource Bundle . get Bundle (" messages ", Ġlocale Ġ?: Ġpreferred Supported Locale OrDefault ()). getString Array ( key ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Missing Ġlocalization ĠString Array Ġfor Ġkey Ġ$ key ", Ġe ) ĊĠĠĠĠĠĠĠ ĠarrayOf ( key ) ĊĠĠĠ Ġ} Ċ }