Машинный перевод в нашем скрипте используется при клике на кнопку "Перевести"
При этом с помощью cUrl отправляется запрос в Google Translate и возвращается строка c переводом. Вопрос качества такого перевода рассматривать не будем.
С недавних пор такая функция перестала работать.
Дело в том, что официально Google Translate API был закрыт ещё в 2011 году. Однако, при помощи библиотеки GoogleTranslate перевод работал ещё несколько лет.
Даже, если не брать в расчёт тот факт, что использование Google Translate API небесплатно (https://cloud.google.com/translate/v2/pricing), чтобы настроить использование переводчика Google придётся сделать несколько шагов по настройке. Для неопытных пользователей эта процедура будет несколько сложна, а то и вовсе невыполнима.
Поэтому мы решили отказаться от использования Google Translate API в пользу MyMemory API
В запросе на перевод можно отправить до 500 байт информации (http://mymemory.translated.net/doc/spec.php). Это означает, что длина строки может составлять от 80 до 500 символов (в зависимости от языка и некоторых параметров).
Для бесплатного использования не требуется регистрироваться и получать ключ, что в реалиях пользования продукта является большим плюсом.
Однако, при бесплатном использовании сервиса существует ограничение: не более 1000 слов в сутки (http://mymemory.translated.net/doc/usagelimits.php)
Чтобы начать использовать новый переводчик нужно выполнить следующие действия:
<?php /* * ******************************************************************************************** * Open Real Estate * ---------------- * version : %TAG% * copyright : (c) %YEAR% Monoray * https://monoray.net * https://monoray.ru * * website : https://open-real-estate.info/en * * contact us : https://open-real-estate.info/en/contact-us * * license: : https://open-real-estate.info/en/license * https://open-real-estate.info/ru/license * * This file is part of Open Real Estate * * ********************************************************************************************* */ class MainController extends ModuleUserController { public $modelName = 'Lang'; public function actionAjaxTranslate(){ if(!Yii::app()->request->isAjaxRequest) throw404(); $fromLang = Yii::app()->request->getPost('fromLang'); $fields = Yii::app()->request->getPost('fields'); $errors = false; $translateField = array(); if(!$fromLang || !$fields) throw new CException('Lang no req data'); $translate = new MyMemoryTranslated(); $fromVal = $fields[$fromLang]; foreach($fields as $lang=>$val){ if($lang == $fromLang) continue; if ($answer = $translate->translateText($fromVal, $fromLang, $lang)) $translateField[$lang] = $answer; else $errors = true; } if ($errors) { echo json_encode(array( 'result' => 'no', 'fields' => '' )); } else { echo json_encode(array( 'result' => 'ok', 'fields' => $translateField )); } Yii::app()->end(); } }
Для версий < 1.15.0 ( 1.14.x, 1.12.x, 1.11.x и т.д ) необходимо в конец файла protected\helpers\common.php вставить следующий код:
function getRemoteDataInfo($apiURL, $returnWithRes = false){ $rawData = ''; if( function_exists('curl_version') ){ $ch = curl_init(); if(strtolower(substr($apiURL, 0, 5))=="https"){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); } curl_setopt($ch, CURLOPT_URL, $apiURL); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); $rawData = curl_exec($ch); if (!$returnWithRes) curl_close($ch); } else { $ctx = stream_context_create(array('http'=> array( 'timeout' => 10, // 10 Seconds ) )); $rawData = @file_get_contents($apiURL, false, $ctx); } if ($returnWithRes && isset($ch) && $ch) { $answer = curl_getinfo($ch, $returnWithRes); curl_close($ch); return compact("rawData", "answer"); } return $rawData; }
Перед заменой файлов рекомендуется сделать бэкап (сохранить резервные копии старых файлов).