package Ġcom . ki wi . translate Ċ Ċ import Ġjava . io . IOException Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . builtins . List Serializer Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġokhttp 3 . Http Url Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType OrNull Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ Ċ @ Opt In ( Experimental Serialization Api :: class ) Ċ private Ġval Ġjson Ġ= ĠJson Ġ{ ĊĠĠĠ Ġignore Unknown Keys Ġ= Ġtrue ĊĠĠĠ Ġexplicit Null s Ġ= Ġfalse Ċ } Ċ Ċ class ĠAzure Translator ( ĊĠĠĠ Ġprivate Ġval Ġkey : ĠString Ġ= ĠBuild Config . AZURE _ TRANSL ATE _ API _ KEY , Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġclient : ĠOk HttpClient Ġ= ĠOk HttpClient () ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġtranslate ( ĊĠĠĠĠĠĠĠ Ġtext : ĠString , ĊĠĠĠĠĠĠĠ Ġbuilder : ĠTranslation Options Builder . () Ġ-> ĠUnit , ĊĠĠĠ Ġ): ĠList < Azure Translation Data > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġtranslation Options Ġ= ĠTranslation Options Builder (). apply ( builder ). build () ĊĊĠĠĠĠĠĠĠ Ġval Ġtranslate Url Ġ= ĠHttp Url . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scheme (" https ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. host ( BASE _ HOST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Path Segment ( TRANSL ATE _ PATH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParameter (" api - version ", Ġ" 3 . 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Options . from ?. let Ġ{ Ġadd QueryParameter (" from ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Options . to . forEach Ġ{ Ġadd QueryParameter (" to ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġmedia Type Ġ= Ġ" application / json ". to MediaType OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġ"[ {\" Text \": Ġ\"$ text \" }] ". to RequestBody ( media Type ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" O cp - Ap im - Subscription - Key ", Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( translate Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġclient . new Call ( request ). execute (). use Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġthrow ĠIOException (" Unexpected Ġcode Ġ$ response ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . decode FromString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList Serializer ( Azure Translation Data . serializer ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body !!. string () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBASE _ HOST Ġ= Ġ" api . cognitive . microsoft translator . com " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTRAN SL ATE _ PATH Ġ= Ġ" translate " ĊĠĠĠ Ġ} Ċ } Ċ