Сервис Google Translate предлагает REST API, который позволяет вам получать переводы прямо из вашего приложения. В этом руководстве вы узнаете, как создать одностраничный сайт, который отображает мнения пользователей на разных языках и позволяет посетителям отправлять новые. Этот учебник является продолжением статьи Введение в Google Translate API и PHP .
Вступление
В нашем приложении нам нужно будет реализовать следующие функции:
— добавление нового мнения с помощью веб-формы,
— сохранение мнения в базе данных,
— извлекать переводы и сохранять их в базе данных,
— отображение существующих мнений вместе с их переводами.
Технологии, которые мы будем использовать, включают в себя:
— база данных SQLite для хранения мнений и переводов пользователей,
— библиотека cURL для подключения к Google Translate API,
— Twitter Bootstrap, чтобы получить приятный внешний вид.
Запросы на нашем сайте будут отправляться через AJAX-звонки, чтобы сохранить и получить мнения только на одной странице.
Финальное приложение доступно в репозитории GitHub . Вы можете открыть живую демонстрацию, чтобы увидеть, чего мы достигнем после прохождения урока.
База данных
Ядро базы данных
Поскольку мы будем хранить данные в базе данных SQLite, не нужно много настраивать. SQLite описывает себя как базу данных с нулевой конфигурацией и без сервера, что полностью верно. Вся база данных — это всего лишь один файл на сервере. Важно отметить, что, хотя SQLite помогает нам быстрее разрабатывать наше приложение и идеально подходит для такого быстрого прототипирования, вы должны использовать в производстве что-то более безопасное и надежное, например MariaDB . Для соединения с базой данных с помощью расширения PHP PDO нам понадобится одна строка кода:
<?php $db = new PDO('sqlite:opinions.db'); ?>
Затем мы можем просто выполнить некоторые запросы, используя переменную $db
в качестве обработчика соединения с базой данных.
Схема базы данных
Наша база данных будет содержать две таблицы — одну для хранения общей информации о мнении и вторую со всеми текстами и переводами:
В поле opinion_translations.machine
будет opinion_translations.machine
представляет ли определенная строка opinion_translations.machine
пользователем текст ( machine = 0
) или машинный перевод ( machine = 1
).
Для хранения языковых кодов в поле opinion_translations.language
мы будем использовать те же значения, которые использует Google Translate в своем API (полный список приведен в документации ).
Сохранение мнений
Мы позволим нашим посетителям добавить мнение, используя простую форму:
Чтобы узнать, каков исходный язык мнения, форма содержит скрытое поле, определяющее его:
<input type="hidden" name="language" id="inputLanguage" value="en">
Если наш сайт позволит пользователю переключаться между версиями на разных языках, нам просто нужно изменить значение inputLanguage
на код языка, который отображается в данный момент.
Когда пользователь отправляет форму, наше приложение сохраняет мнение в базе данных, а затем выбирает необходимые переводы. Весь код, отвечающий за обработку мнений, написан в классе Opinion
нашего приложения:
<?php class Opinion { private $_languages = array('en', 'fr', 'es'); public function getAll() { ... } public function addOpinion($nick, $text, $language) { ... } public function addTranslation($opinion_id, $language, $text, $machine) { ... } ... } ?>
Как видите, существует глобальный список всех языков, используемых на сайте, который хранится в свойстве _languages
. Мы будем использовать его, чтобы проверить, какие переводы выбрать при добавлении мнения.
Получение переводов
Для соединения с Google Translate API мы будем использовать простой класс GoogleTranslator
который служит оболочкой для методов, предлагаемых API. Он предлагает 3 статических метода, имена которых совпадают с именами, доступными в API:
<?php class GoogleTranslator { static function translate($targetLanguage, $text, $sourceLanguage = null, $prettyprint = 'true', $format = 'html') { ... } static function detect($text) { ... } static function languages() { ... } } ?>
Каждый из методов создает правильный URL-адрес запроса на основе значений переданных аргументов. Затем он отправляет запрос в API с помощью cURL, как описано в статье об основах API Google Translate .
Таким образом, получение перевода с использованием класса GoogleTranslate
выглядит следующим образом:
<?php $translation = GoogleTranslator::translate($targetLanguage, $text, $sourceLanguage); ?>
Затем мы можем сохранить перевод, полученный от API Google, просто вызвав Opinion->addTranslation()
. Мы можем добавить столько переводов, сколько захотим, при условии, что каждое мнение содержит не более одного текста, отправленного пользователем ( opinion_translations.machine = 0
), и не более одного перевода на язык.
Отображение мнений
После того, как мнение будет успешно сохранено, мы сможем отобразить его оригинальный контент, а также его переводы. Opinion->getAll()
предоставит нам список всех мнений. Мы можем показать их красиво, отображая одно мнение подряд вместе с кнопками, которые позволяют посетителю переключаться
между разными языками:
Когда мы используем API перевода Google, мы должны придерживаться определенных правил: требования к атрибуции и требования к разметке HTML .
Первый документ гласит, что мы должны разместить логотип Google Translate рядом с машинно переведенным текстом, который мы показываем на сайте. Вот почему translated by Google
изображение отображается при отображении переведенного контента в нашем списке мнений. Мы также должны добавить заявление об отказе от ответственности, которое отображается внизу нашей страницы.
Существуют также требования, касающиеся разметки HTML. При отображении переведенного текста нам нужно добавить атрибут lang
к элементу, который содержит текст ( div
, span
или любой другой элемент). Значение атрибута состоит из исходного и целевого языков перевода:
<language code of the language to which the text was translated>-x-mtfrom-<language code of original language>
Таким образом, примерное мнение, переведенное с английского на французский, может быть вставлено на страницу, используя такой код:
<div lang="fr-x-mtfrom-en"> J'aime vraiment vos produits. </div>
Как объясняет Google, добавление таких атрибутов HTML позволяет поисковым системам различать оригинальный и переведенный текст.
Связывая все это вместе
Чтобы соединить все части нашего приложения, мы создадим одностраничный сайт, который сохраняет новое мнение и отображает существующие с помощью вызовов AJAX. После отправки отзыва пользователь будет уведомлен о результате и список мнений будет перезагружен. Когда что-то пойдет не так, появится хорошее сообщение об ошибке.
Посмотрите демо, чтобы проверить, как это работает. Поскольку Google Translate API является платной услугой, наше демонстрационное приложение не будет получать реальные переводы. Чтобы изменить его после загрузки кода, просто введите свой ключ API в классе GoogleTranslator
и измените тестовый режим на false
:
<?php class GoogleTranslator { private static $_apiKey = '<your API key>'; private static $_testMode = false; ... } ?>
Тогда ваше приложение будет подключаться к Google Translate API каждый раз, когда добавляется новое мнение.
Резюме
В статье рассказывается, как сделать одностраничный сайт, который выбирает и отображает мнения на разных языках. Как вы могли видеть, сочетание таких технологий, как SQLite, Google Translate REST API, Twitter Bootstrap и AJAX, позволяет быстро настроить сайт, готовый обслуживать ваших клиентов.
Вы можете расширить данный код и добавить дополнительные функции, такие как утверждение мнений администратором сайта или связывание мнений с продуктами в вашей базе данных.
Если у вас есть какие-либо вопросы или комментарии относительно статьи, не стесняйтесь оставлять комментарии ниже или свяжитесь со мной через Google+ .