Технология онлайн перевода через Google

Вашему вниманию предлагается технология онлайн-перевода через сервис Гугла на javascript.

Чтобы получить перевод, нужно сформировать соответствующим образом URL, который возращает результат перевода в виде json массива. Например перевод слова "программирование" дает следующий результат. К сожалению из-за ограничений безопасности мы не можем напрямую из javascript направить запрос на сайт гугла, поэтому нам приходится пользоваться прокси-скриптом на нашем сервере (см. текст файла googletranslate.php)

Php прокси-скрипт googletranslate.php:

<?php
if(!isset($_POST['ajax'])) return;
while(ob_get_level()) ob_end_clean();
switch($_POST['ajax']){
case 'translate':
	$text = get_magic_quotes_gpc() ?
		stripslashes($_POST['text']) :
		$_POST['text'];
	if($text == '') return '[[["","",""]]]';
	exit(getGoogleTranslate($text));
break;
}
exit();

function getGoogleTranslate($str){
	$host = 'translate.google.com';
	$path = '/translate_a/t';
	$headers = array(
		'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0',
		'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
		'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
		'Referer: http://translate.google.com/'
	);

	$get = array(
		'client' => 't',
		'text' => urlencode($str),
		'hl' => 'ru',
		'sl' => 'ru',
		'tl' => 'en',
		'ie' => 'UTF-8',
		'oe' => 'UTF-8',
		'multires' => '1',
		'ssel' => '0',
		'tsel' => '0',
		'sc' => '1'
	);
	$p = array();
	foreach($get as $key=>$value) $p[] = $key.'='.$value;
	$query_string = '?'.implode('&', $p);
	$ch = curl_init();
	if(!$ch) return false;
	$url = 'http://'.$host.$path.$query_string;
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, false);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
	curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
	curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
	$response = curl_exec($ch);
	if(curl_errno($ch)) return false;
	curl_close($ch);
	return $response;
}
?>

Функцией перевода тут является функция getGoogleTranslate с одним входящим параметром — строкой для перевода. Функция использует библиотеку cURL для работы с сетью, поэтому cURL должна быть установлена с PHP (практически все хостеры включают ее в инсталляцию PHP).

Предваряющий функцию код подготавливает параметры для функции перевода и возвращает результат, который возращает Гугл без изменение в вызывающий скрипт на javascript.

Для онлайн перевода нам нужно связать два поля: поле ввода переводимого текста и поле перевода. Используем для этого такую html-структуру:

<script src="/googletranslate.js"></script>
<p> Русский текст <input id="rus" /> <a href="#" class="translate" rev="rus" rel="eng">google перевод</a> <input id="eng" />
</p>

Для связки двух input полей будем использовать тег ссылки <a> с классом translate и аттрибутами rev и rel. Аттрибут rev должен содержать id элемента с переводимым текстом, rel — id элемента с переводом.

На саму ссылку вешаем обработчик, задаваемый в файле googletranslate.js (для упрощения записи кода используем библиотеку jQuery, поэтому файл библиотеки тоже должен быть подключен).

if(typeof $ == 'undefined') throw 'Не включен jquery';

$(document).ready(function(){
	$('.translate[rel][rev]').click(function(){
		var input = $('#'+this.rev);
		if(input.length == 0) return false;
		var output = $('#'+this.rel);
		if(output.length == 0) return false;
		var ru_text = encodeURIComponent(input.val());
		$.ajax('/googletranslate.php', {
			type : 'POST',
			data : 'ajax=translate&text='+ru_text,
			success : function(data, textStatus, jqXHR){
				try{
					eval('var theData = '+data);
				}
				catch(e) {
					if(typeof theData != 'undefined')
						delete theData;
				}
				if(typeof theData == 'undefined' || 
					!(theData instanceof Array) || 
					!theData[0] || !theData[0][0] ||
					!theData[0][0][0]) {
					alert('Ошибка при при переводе');
					return;
				}
				output.val(theData[0][0][0]);
			},
			error : function(data, textStatus, jqXHR){
				alert(textStatus);
			}
		});
		return false;
	});
});

Файлы googletranslate.js и googletranslate.php в нашем примере должны лежать в корне сайта.

Теперь по при клике по ссылке "google перевод" идет запрос на сервис перевода Гугла и результат выводиться в поле перевода.

Пробуем!

Русский текст google перевод