package Ġcom . mi qu ido . string str ans lator . parsing . strings Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . stream . Json Reader Ċ import Ġcom . mi qu ido . string str ans lator . model . configuration . Web Ċ import Ġcom . mi qu ido . string str ans lator . model . parsing .* Ċ import Ġcom . mi qu ido . string str ans lator . model . parsing . strings . Strings FilePath Ċ import Ġcom . mi qu ido . string str ans lator . model . parsing . strings . Strings FilePath Factory Ċ import Ġcom . mi qu ido . string str ans lator . model . translations . Pl ural Qualifier Ċ import Ġcom . mi qu ido . string str ans lator . model . translations . Pl ural Translation Model Ċ import Ġcom . mi qu ido . string str ans lator . model . translations . Web Translation Model Ċ import Ġorg . k oin . standalone . K oin Component Ċ import Ġorg . k oin . standalone . inject Ċ import Ġorg . slf 4 j . Logger Ċ import Ġjava . io . File Ċ import Ġjava . nio . charset . Charset Ċ Ċ class ĠWeb String Parser Ġ: ĠString Parser , ĠK oin Component Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgson : ĠGson Ġby Ġinject () ĊĠĠĠ Ġprivate Ġval Ġstrings FilePath Factory : ĠStrings FilePath Factory Ġby Ġinject () ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ġby Ġinject () ĊĊĠĠĠ Ġoverride Ġfun Ġparse Strings File ( input String Path : ĠString , Ġbase Language Code : ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠParsed String Translation Model Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠParsed String Translation Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate String Model ( input String Path , Ġbase Language Code ). single String Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate String Model ( input String Path , Ġbase Language Code ). plural String Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate String Model ( input : ĠString , Ġbase Lang Code : ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠParsed String Translation Model Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠParsed String Translation Model () ĊĠĠĠĠĠĠĠ ĠFile ( input ). walk Top Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . in variant Separ ators Path Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . matches ( Regex ( STRING _ FILE _ PATTERN )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstrings FilePath Ġ= Ġstrings FilePath Factory . getString s FilePath ( Web (), Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguage Code Ġ= Ġstrings FilePath . get Language Code From Path ( base Lang Code ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( strings FilePath . is Pl ural Strings FilePath ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . plural String Set . plural String [ language Code ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtake Pl ural Strings FromFile ( strings FilePath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . single String Set . single String [ language Code ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtake Single Strings FromFile ( strings FilePath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtake Pl ural Strings FromFile ( path : ĠStrings FilePath ): ĠPl ural String Values Model Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplural String Model Ġ= ĠLinkedHashMap < String , ĠPl ural Translation Model >() ĊĊĠĠĠĠĠĠĠ Ġparse Pl ural String Resources ( path . value ). forEach Ġ{ Ġstring Web Model Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpl urals Qualifier Map : ĠHashMap < Pl ural Qualifier , ĠString > Ġ= Ġhash Map Of () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Web Model . plurals Map . keys . forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplural Qualifier Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPl ural Qualifier . valueOf ( key . toUpperCase ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġfind Ġquantity Ġconstant Ġfor : Ġ$ key " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Possible Ġvalues Ġinclude : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPl ural Qualifier . values (). join ToString ( separator Ġ= Ġ", "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plural Qualifier Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpl urals Qualifier Map [ plural Qualifier ] Ġ= Ġstring Web Model ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plurals Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getValue ( plural Qualifier . name . toLowerCase ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( string Web Model . key . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural String Model [ string Web Model . key ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPl ural Translation Model ( string Web Model . key , Ġpl urals Qualifier Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPl ural String Values Model ( plural String Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtake Single Strings FromFile ( path : ĠStrings FilePath ): ĠSingle String Values Model Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstring Model Ġ= ĠSingle String Values Model () ĊĠĠĠĠĠĠĠ Ġparse Single String Resources ( path . value ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . key . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Model . single StringValue [ it . key ] Ġ= ĠWeb Translation Model ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstring Model ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Pl ural String Resources ( input : ĠString ): ĠList < Pl ural String Json Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Reader Ġ= Ġcreate Json Reader ( input ) ĊĠĠĠĠĠĠĠ Ġreturn Ġjson Reader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson < Array < Pl ural String Json Model >>( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĠArray < Pl ural String Json Model >:: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Single String Resources ( input : ĠString ): ĠList < Single String Json Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Reader Ġ= Ġcreate Json Reader ( input ) ĊĠĠĠĠĠĠĠ Ġreturn Ġjson Reader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson < Array < Single String Json Model >>( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĠArray < Single String Json Model >:: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Json Reader ( path : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJson Reader ( File ( path ). reader ( Charset . forName ( CHARSET _ NAME ))) ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTRING _ FILE _ PATTERN Ġ= Ġ". */ lang -. */ strings .* \\. json " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCHARSET _ NAME Ġ= Ġ" UTF - 8 " ĊĠĠĠ Ġ} Ċ }