Делаем простой онлайн-переводчик (ActionScript + PHP)

Я, конечно, не собираюсь делать онлайн-переводчик с нуля. Да и зачем, если есть замечательный сервис от Яндекса (так называемый «API Яндекс.Перевод»), который возьмёт на себя самую сложную часть работы - сам перевод. Нам лишь надо предоставить Яше два параметра:

- слово/словосочетание, которые надо перевести (но учтите, что щедрость Яндекса не безгранична и существуют ограничения на количество обращений к сервису и на объём переводимого текста);

- направление перевода (например, "ru-en" или "en-ru").

Кстати, одним из явных преимуществ переводчика от Яндекса является то, что он умеет полноценно работать с русским языком. Дело в том, что в сети хватает сервисов (в том числе и бесплатных), которые предоставляют возможности онлайн-перевода, но далеко не все они умеют переводить на русский / с русского (иногда они умеют переводить на русский, но с русского - нет).

Итак, начнём...

Пользовательский интерфейс нашего будущего онлайн-переводчика будет создан во Flash, на языке ActionScript 3.0 (хотя можно реализовать и на старом-добром ActionScript 2.0). Кроме этого, нам понадобится написать небольшой php-скрипт, который будет выполнять роль посредника между flash-приложением и API Яндекс.Перевод. Скрипт довольно простой...

Код PHP:

<?php /* проверяем наличие всех необходимых параметров, полученных с помощью Get-метода: - str - строка, которую будем переводить; - flag - направление перевода. */ if(isset($_GET["str"]) && isset($_GET["flag"])){ /* Если все необходимые данные получены, то отправляем запрос API Яндекс.Перевод. */ $xml = simplexml_load_file('http://translate.yandex.net/api/v1/tr/translate?lang='.$_GET["flag"].'&text='.iconv("cp1251", "utf-8", $_GET["str"])); /* Разбираем полученный от Яндекса ответ и выводим результат. */ $code = $xml["code"]; if($code==200){ echo $xml->text; }else if($code==413){ echo 'Превышен максимальный размер текста.'; }else if($code==422){ echo 'Текст не может быть переведен.'; }else if($code==501){ echo 'Заданное направление перевода не поддерживается.'; }else{ echo 'Неизвестная ошибка.'; } }else{ echo 'Недостаточно параметров!'; }

PHP-файл обязательно сохраняем в кодировке UTF-8 под именем translation.php (попутно замечу, что у меня данный скрипт помещён в папку applications, и, следовательно, при обращении к нему я буду использовать относительный адрес /applications/translation.php).

А теперь переходим к пользовательскому интерфейсу. Как я уже сказал, он будет реализован в виде flash-приложения (я воспользуюсь программой Adobe Flash CS 5.5, но можно взять и другую версию, поддерживающую ActionScript 3.0). Чтобы облегчить себе работу, я воспользуюсь компонентами из библиотеки MiniUI. Просто помещаем библиотеку MiniUI в одну папку с нашим flash-проектом и на главной временной шкале проекта пишем код...

Код ActionScript 3.0:

/* импортируем классы */ import flash.events.*; import flash.net.*; /* подключаем компоненты */ import sliz.miniui.Button; import sliz.miniui.Input; import sliz.miniui.RadioGroup; import sliz.miniui.Radio; /* переменная, в которой хранится направление перевода */ var flag:String = "ru-en"; /* функция перевода текста */ function translate() { if (inputText.text.length < 3) { inputTranslate.text = "Слишком короткий текст!"; } else if (inputText.text.length > 100) { inputTranslate.text = "Слишком длинный текст!"; } else { inputTranslate.text = "Обмен данными с сервером... Ждите..."; var urlRequest:URLRequest = new URLRequest("/applications/translation.php?flag=" + flag + "&str=" + inputText.text); var urlLoader:URLLoader = new URLLoader(); urlLoader.addEventListener(Event.COMPLETE, onComplete); urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError); urlLoader.load(urlRequest); } } /* функция, которая сработает при удачной загрузке данных с сервера */ function onComplete(event:Event):void { inputTranslate.text = event.target.data; } /* функции, которые сработают при возникновении ошибок */ function onSecurityError(event:SecurityErrorEvent):void { inputTranslate.text = event.text; } function onIOError(event:IOErrorEvent):void { inputTranslate.text = event.text; } /* поле ввода текста */ var inputText:Input = new Input(""," В это поле вводим текст... ",this,funcInput,50,50,450,110,true); function funcInput():void { translate(); } /* кнопка перевода */ var btnTranslate:Button = new Button(" Перевести текст: ",50,170,this,funcBtn); function funcBtn(event:Event):void { translate(); } /* радиокнопки для изменения направления перевода */ var radioRuToEn:Radio = new Radio(" RU >> EN ",200,170,this,funcRuToEn); function funcRuToEn(event:Event):void { flag = "ru-en"; } var radioEnToRu:Radio = new Radio(" EN >> RU ",300,170,this,funcEnToRu); function funcEnToRu(event:Event):void { flag = "en-ru"; } var radioGroup:RadioGroup = new RadioGroup([radioRuToEn,radioEnToRu]); radioRuToEn.setToggle(true); /* поле вывода перевода или ошибок, возникших при попытке перевести текст */ var inputTranslate:Input = new Input(""," В этом поле выводится результат перевода или ошибка... ",this,null,50,200,450,110,true); /* кнопка для помещения текста в буфер обмена */ var btnClipboard:Button = new Button(" Поместить в буфер обмена ",50,320,this,funcClipboard); function funcClipboard(event:Event):void { System.setClipboard(inputTranslate.text); } /* кнопка для очистки текстовых полей */ var btnClear:Button = new Button(" Очистить ",250,320,this,funcClear); function funcClear(event:Event):void { inputText.text = ""; inputTranslate.text = ""; }

Результат:

Вот и всё. Конечно, здесь представлен самый простой вариант реализации онлайнового переводчика на связке PHP и AS. Можно (и надо) внести некоторые дополнения и улучшения (например, я бы добавил в php-скрипт проверку входных данных на корректность и безопасность), но это уже дело личного вкуса и целесообразности. А у меня на сегодня всё.

Ознакомиться с Пользовательским соглашением сервиса API Яндекс.Перевод можно по этой ссылке.

Скачать все исходники к данному посту можно здесь - скачать исходники (под Adobe Flash CS 5.5).

Важное дополнение!

Недавно заметил, что приведённый выше пример переводчика перестал работать. Оказалось, что с «1 июля 2013 года версия API 1.0 прекратила работу. Начиная с версии 1.5 доступ ко всем методам API будет осуществляться по ключу. Получите ваш бесплатный API-ключ, заполнив простую форму.» О, да! Яндекс обожает делать сюрпризы! Правда, как правило, неприятные...

Ладно, делать нечего. Идём на страницу Яндекс-переводчика (http://translate.yandex.ru/) и находим на этой страничке ссылку «Разработчикам». Переходим по этой ссылке и получаем так нужный нам ключ.

Допустим, ключ мы получили. Но этого мало. Теперь нам потребуется внести некоторые изменения в PHP-файл...

Код PHP:

<?php $key = 'ВАШ_КЛЮЧ'; if(isset($_GET["str"]) && isset($_GET["flag"])){ $xml = simplexml_load_file('https://translate.yandex.net/api/v1.5/tr/translate?key='.$key.'&lang='.$_GET["flag"].'&text='.iconv("cp1251", "utf-8", $_GET["str"])); $code = $xml["code"]; if($code==200){ echo $xml->text; }else if($code==401){ echo 'Ключ API невалиден.'; }else if($code==402){ echo 'Ключ API заблокирован.'; }else if($code==403){ echo 'Превышено суточное ограничение на количество запросов.'; }else if($code==404){ echo 'Превышено суточное ограничение на объем переведенного текста.'; }else if($code==413){ echo 'Превышен максимальный размер текста.'; }else if($code==422){ echo 'Текст не может быть переведен.'; }else if($code==501){ echo 'Заданное направление перевода не поддерживается.'; }else{ echo 'Неизвестная ошибка.'; } }else{ echo 'Недостаточно параметров!'; }

В flash-приложении мы ничего менять не будем. Теперь, скорее всего, ваш переводчик заработает. Оговорочка не случайна. Некоторые проблемы могут быть вызваны использованием HTTPS, но это уже относится к настройкам сервера и выходит за рамки данного поста.

Автор: admin

Дата добавления: 2012-09-25

Просмотров: 19510

Рейтинг поста: +23-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-03-26
Он такой же, как ник и название этого сайта, но сейчас я иду спать. А писать лучше на почту: edapskov@yandex.ru
Комментатор
Комментарий добавил(а): marik
Дата добавления: 2015-03-26
можно узнать твой скайп для быстрой переписки. есть предложение
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-03-26
myjino не использовал и его возможностей не знаю. Но крайне желательно настроить UTF-8.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-03-26
а как и где поменять кодировку можно ?
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-03-26
Работает, но проблема в кодировке. Замените в примере все слова на английские и проверьте ещё раз.
Комментатор
Комментарий добавил(а): marik
Дата добавления: 2015-03-26
edapskov, спасибо большое
http://marikkk82.myjino.ru/ но почему-то не работает(
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-03-25
Самый простой способ: edapskov.ru/applications/mytranslation/mytranslation.rar

> edapskov, и не подскажите ли как сделать такой же алгоритм как в яндексе или гугле?

Шутите? :-) Это далеко не так просто, как кажется... Да и необходимость сомнительна: есть огромное количество сервисов-переводчиков (как платных, так и бесплатных). Гораздо разумнее использовать их, чем изобретать велосипед.
Комментатор
Комментарий добавил(а): marik
Дата добавления: 2015-03-25
edapskov, хорошо, я буду ждать
Комментатор
Комментарий добавил(а): marik
Дата добавления: 2015-03-25
edapskov, и не подскажите ли как сделать такой же алгоритм как в яндексе или гугле?
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-03-25
> edapskov, я так и думал
какие функции вписывать не подскажите ?

Давайте так: чуть позднее я напишу простенький пример. Но это будет чуть позднее - сейчас немного занят.
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Страница 1 из 4: 1234
Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика