import Ġjava . util .* Ċ Ċ // ĠTop - level Ġbuild Ġfile Ġwhere Ġyou Ġcan Ġadd Ġconfiguration Ġoptions Ġcommon Ġto Ġall Ġsub - projects / modules . Ċ build script Ġ{ ĊĠĠĠ Ġval Ġkotlin Version Ġ= Ġ" 1 . 4 . 2 1 " ĊĠĠĠ Ġrepositories Ġ{ ĊĠĠĠĠĠĠĠ Ġgoogle () ĊĠĠĠĠĠĠĠ Ġj center () ĊĠĠĠ Ġ} ĊĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠ Ġclasspath (" com . android . tools . build : gradle : 4 . 1 . 2 ") ĊĠĠĠĠĠĠĠ Ġclasspath (" org . jetbrains . kotlin : kotlin - gradle - plugin :$ kotlin Version ") ĊĠĠĠĠĠĠĠ Ġclasspath (" android x . navigation : navigation - safe - args - gradle - plugin : 2 . 3 . 2 ") ĊĠĠĠĠĠĠĠ Ġclasspath (" com . google . d agger : h ilt - android - gradle - plugin : 2 . 2 8 - alpha ") ĊĠĠĠĠĠĠĠ Ġclasspath (" com . google . android . gms : oss - licenses - plugin : 0 . 1 0 . 2 ") ĊĠĠĠĠĠĠĠ Ġ// ĠNOTE : ĠDo Ġnot Ġplace Ġyour Ġapplication Ġdependencies Ġhere ; Ġthey Ġbelong ĊĠĠĠĠĠĠĠ Ġ// Ġin Ġthe Ġindividual Ġmodule Ġbuild . gradle Ġfiles ĊĠĠĠ Ġ} Ċ } Ċ Ċ all projects Ġ{ ĊĠĠĠ Ġrepositories Ġ{ ĊĠĠĠĠĠĠĠ Ġgoogle () ĊĠĠĠĠĠĠĠ Ġj center () ĊĠĠĠĠĠĠĠ Ġmaven (" https :// jit pack . io ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ tasks . register (" update Translations ") Ġ{ ĊĠĠĠ Ġval Ġres Path Ġ= Ġ" app / src / main / res " ĊĠĠĠ Ġval Ġbytes Ġ= Ġjava . io . FileInputStream ( File ("$ res Path / values / strings . xml ")). read Bytes () ĊĠĠĠ Ġval Ġen Lines Ġ= ĠString ( bytes ). split ("\ n ") ĊĊĠĠĠ Ġvar Ġen Strings Ġ= Ġ 0 ĊĊĠĠĠ Ġfor Ġ( line Ġin Ġen Lines ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( line . contains ("< string ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen Strings ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbad ges Ġ= Ġarray ListOf < String >() ĊĠĠĠ ĠFile ( res Path ). walk (). forEach Ġ{ Ġdir Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( dir . isDirectory Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir . name . contains (" values ") Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir . name Ġ!= Ġ" values " ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir . walk (). forEach Ġ{ Ġstrings File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( strings File . name Ġ== Ġ" strings . xml ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstrings Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġauthor Ġ= Ġ" UNKNOWN " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlines Ġ= ĠString ( java . io . FileInputStream ( strings File ). read Bytes ()). split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġlines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . contains ("< string ") Ġ&& Ġ! line . contains (" TODO ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrings ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( line . contains (" MA INT AIN ED ĠBY ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġline . substring ( line . indexOf (" (" ) Ġ+ Ġ 1 , Ġline . indexOf (" ) ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Name Ġ= Ġdir . name . replace (" values -", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= Ġ( strings . toDouble () Ġ/ Ġen Strings . toDouble ()) Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ![ { alt - locale } ]( https :// img . shields . io / badge /{ locale }-{ percentage }{ color })\ n Maint ained Ġby Ġ{ author }\ n \ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage Ġ> Ġ 9 9 Ġ-> Ġ" 2 5 - bright green " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage Ġ> Ġ 7 5 Ġ-> Ġ" 2 5 - yellow " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage Ġ> Ġ 5 0 Ġ-> Ġ" 2 5 - orange " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage Ġ> Ġ 0 Ġ-> Ġ" 2 5 - red " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" light grey " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Display Ġ= ĠLocale . for Language Tag ( locale Name . replace ("- r ", Ġ"- ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get DisplayName ( Locale . US ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbadge Ġ= Ġtemplate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("{ locale }", Ġlocale Display . replace (" Ġ", Ġ"% 2 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("{ alt - locale }", Ġlocale Display ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("{ percentage }", Ġ"${ percentage . toInt ()} % ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("{ color }", Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("{ author }", Ġauthor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbad ges . add ( badge ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġ// ĠREAD Ġstrings . xml ĊĊĠĠĠ Ġif Ġ( badges . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreadme String Ġ= ĠString ( java . io . FileInputStream ( File (" README . md ")). read Bytes ()) ĊĠĠĠĠĠĠĠ Ġval Ġreadme Lines Ġ= Ġreadme String . split ("\ n ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġbegin Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġend Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġreadme Lines . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( readme Lines [ i ]. contains (" BEGIN - TRANSL ATIONS ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Index Ġ= Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( readme Lines [ i ]. contains (" END - TRANSL ATIONS ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Index Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprefix Strings Ġ= Ġreadme Lines . sub List ( 0 , Ġbegin Index ) ĊĠĠĠĠĠĠĠ Ġval Ġsuffix Strings Ġ= Ġreadme Lines . sub List ( end Index , Ġreadme Lines . size Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġbadge String Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġbadge String Ġ+= Ġ" ![ English ]( https :// img . shields . io / badge / English - 1 0 0 % 2 5 - bright green )\ n Maint ained Ġby Ġ@ leon l ats ch \ n \ n " Ġ// ĠHard Ġcode Ġadd Ġenglish ĊĠĠĠĠĠĠĠ Ġbad ges . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbadge String Ġ+= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġnew Read me String Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġprefix Strings . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Read me String Ġ+= Ġ"$ it \ n " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnew Read me String Ġ+= Ġbadge String ĊĊĠĠĠĠĠĠĠ Ġsuffix Strings . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Read me String Ġ+= Ġ"$ it \ n " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( new Read me String . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile (" README . md "). write Text ( new Read me String ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }