ch = $ch; $this->apikey = $apikey; } function translateText($sourceText, $fromLanguage ,$toLanguage){ preg_match_all ( '{\[\d*\]}', $sourceText, $all_protected_matchs ); $all_protected_matchs = $all_protected_matchs [0]; $string_raw = preg_replace ( '{\[\d*\]}', '(*)', $sourceText ); curl_setopt($this->ch, CURLOPT_URL, "https://www.googleapis.com/language/translate/v2?key=" . $this->apikey); curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($this->ch, CURLOPT_POST, true ); curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($this->ch, CURLOPT_TIMEOUT, 60); $post = [ 'q' => $string_raw, 'target' => $toLanguage, ]; if($fromLanguage != 'auto') { $post['source'] = $fromLanguage; } curl_setopt ( $this->ch, CURLOPT_POSTFIELDS, $post ); $headers = array(); $headers[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; $headers[] = "Accept-Language: en-US,en;q=0.5"; $headers[] = "Referer: https://translate.google.com/?tr=f&hl=en"; $headers[] = "Connection: keep-alive"; $headers[] = "Upgrade-Insecure-Requests: 1"; curl_setopt($this->ch, CURLOPT_HTTPHEADER, $headers); $exec = curl_exec($this->ch); $httpcode = curl_getinfo($this->ch, CURLINFO_HTTP_CODE); if($httpcode != '200') { throw new Exception('Failed to translate string, incorrect response ' . $httpcode . ' - ' . $exec); } if($exec === FALSE || trim($exec) == ''){ throw new Exception('Empty translator reply with possible curl error'); } if(strstr($exec, 'Error 400 (Bad Request)!!1') !== false){ throw new Exception('Failed to translate string!'); } $jsonx = json_decode($exec); if(isset($jsonx->data->translations) && is_array($jsonx->data->translations)) { $retex = ''; foreach($jsonx->data->translations as $trx) { $retex .= $trx->translatedText; } $exec = $retex; } else { throw new Exception('Failed to decode translation response: ' . $exec); } foreach ( $all_protected_matchs as $protected_term ) { $exec = preg_replace ( '{\(\*\)}', $protected_term, $exec, 1 ); } return $exec ; } } ?>