Пропаганда

15.03.2011
aragorn

Автоперевод текста

Довольно часто, в ходе разработки сайта, необходимо обеспечить поддержку мультиязычности - т.е. возможности перевода содержимого сайта на разные языки. Реализовать поставленную задачу на Drupal довольно просто, при том что в этом нам помогут такие модули как Internationalization, Content translation, Locale.

Но что делать, если необходимо реализовать не мультиязычность, а автоматический перевод содержимого сайта с одного языка на другой? Тогда нам поможет сервис Google, в наличии у которого есть довольно таки неплохой онлайн переводчик. В добавок, в нашем случае плюсом его есть хорошая интегрируемость в Drupal. Для осуществления перевода содержимого сайта можно воспользоваться модулями Google Translate или Google Translate Filter.

Первый модуль предлагает возможность перевести страницу на любой из поддерживаемых Google языков, через вывод блока выбора необходимого языка. Недостатком такого модуля можно считать то, что он осуществляет лишь визуальный перевод страницы без сохранения изменений в базе. Второй модуль дает возможность добавить в форматах ввода фильтр автоперевод текста, который будет срабатывать при сохранении содержимого и осуществлять перевод на указанный язык. К сожалению, на данный момент существует только dev версия модуля, поэтому некоторые проблемы в роботе не исключаются. Основным недостатком этого модуля есть его неспособность обрабатывать текст, содержащий более 2000 символов.

При детальном анализе возможных методов реализации автопереводов заметно, что все они, в той или иной степени, требуют участия редактора. Но как сделать так, чтобы автоперевод происходил самостоятельно?
Например нужно реализовать ленту новостей с англоязычного сайта посредством rss, но с условием, что эти новости автоматически переводились бы на выбранный нами язык и только после этого сохранялись в БД. Как быть в такой ситуации? Решить данную задачу нам поможет один из интерфейсов прикладного программирования сервиса Google -Google Translate API.
Google Translate API является инструментом, который автоматически переводит текст с одного языка на другой. Собираясь использовать данный инструмента необходимо учитывать 3 основные параметра:
  • исходный текст (q) - текст, для которого необходимо сделать перевод;

  • исходный язык (source) - язык, на котором написан исходный текст;

  • конечный язык (target) - язык, на котором должен быть текст после перевода.

  Есть несколько способов для вызова API:

  •  использование REST непосредственно;

  •  использование REST из JavaScript (не требуется серверного кода).

При реализации этих методов возникает необходимость в использовании еще одного параметра - API ключа для проекта, который можно получить в Google APIs console. Рассмотрим детальнее, как используются указанные способы.

REST, или Representational State Transfer, в Google Translate API обеспечивает доступ к службе, но не к ресурсам. Как результат, API обеспечивает единый URI, который действует как конечный элемент службы. В запросе нужно указать подробную информацию по обслуживанию, как параметры запроса.

Формат для Google Translate API URI имеет следующий вид:

php
https://www.googleapis.com/language/translate/v2?parameters 
Если подставить необходимые параметры в запрос на обработку, то обработчик будет выглядеть так:
php
GET https://www.googleapis.com/language/translate/v2?key=API-KEY&q=Hello,%20world!&source=en&target=ru 
REST из JavaScript позволяет вызвать Google Translate API  с использованием обратного параметра запроса и функции обратного вызова. Это позволяет писать богатые приложения, которые будут в состоянии отображать переведенный текст без написания серверного кода.
Вот пример того, как этот подход используется:
php
   
  
   Google Translate API 
  
  
   
Hello,world!

JSON. Такой вариант решения реализуется программно, и не требует ввода API ключа  проекта. Запрос принимает 3 необходимых параметра:

  • исходный текст (q);
  • версия протокола (v) ;
  • исходная и конечная языка (langpair), разделенные символом "|".

Синтаксис запроса имеет следующий вид 

php
https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=Hello,%20world!&langpair=en%7ru 

Кроме необходимы параметров запрос может принимать и второстепенные:

  • обратный аргумент (callback);
  • дополнительный аргумент для обратного(context);
  • формат результата (format);
  • ключ для определения сайта (key);
  • ІР-адрес конечого пользователя, от имени которого делается запрос (userip).

После использования запроса, мы имеем такую структуру результата:

php
* error? 
   Присутствует, если произошла ошибка в переводе текста: 
    * code 
       HTTP код ошибки . 
    * message 
       Описание ошибки. 
  *  translation 
       Переведенный текст. 
  *  detectedSourceLanguage? 
       Если язык источника был определен автоматически, то он будет возвращен здесь.

Програмно, этот способ можна реализировать на РНР так:

php
/** 
* Translate text with Google API service 
*/ 
function _google_translate($text, $lang_from='en', $lang_to='ru') {
  $url_prefix         = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0'; 
  $text                = urlencode($text); 
  $lang_from        = urlencode($lang_from); 
  $lang_to            = urlencode($lang_to); 
  $langpair           = $lang_from . '|' . $lang_to; 
  $service_url        = $url_prefix . '&q=' . $text . '&langpair=' . $langpair;
  $translated_text  = @file_get_contents($service_url); 
  $json                 = json_decode($translated_text, true); 
  if ($json['responseStatus'] != 200){ 
    return false; 
  } 
  return $json['responseData']['translatedText']; 
}

На мой взгляд этот вариант несколько проще и практичнее, ведь в нем достаточно легко контролировать и устранять имеющиеся ошибки, делать Автоперевод текста без участия редактора, там отсутствует необходимость обязательной регистрации сайта на Google API, и есть набор дополнительных параметров запроса, которые могут гарантировать безопасность его выполнения.

JavaScript
автоперевод
Tweet