Делаем простой онлайн-переводчик (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

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

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

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

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

Вы не поняли: в данном примере php-скрипт получает из флеш-приложения исходный текст и обращается к серверу Яндекса; сервер Яндекса делает перевод и возвращает результат в php-скрипт, а php-скрипт пересылает полученный перевод обратно в флеш-приложение. Никто не мешает в самом php-скрипте сделать "перевод", но сделать более-менее качественный перевод - это задача сложная. Да, конечно, можно написать скрипт, который будет заменять одни слова на другие, но это будет очень корявым переводом. Очень корявым...
Комментатор
Комментарий добавил(а): marik
Дата добавления: 2015-03-25
edapskov, не поможете написать php код ? в долгу не останусь
мне нужно что бы был просто мой перевод слов и предложений, носок-босок и т.д.)
Комментатор
Комментарий добавил(а): marik
Дата добавления: 2015-03-25
edapskov, про какой именно файл PHP идет речь? файл с словами и переводом я не нашел
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-03-25
marko, написание хорошего переводчика - это очень непростая задача :-) Но никто вам не мешает изменить PHP-файл таким образом, чтобы слова из исходного текста менялись на установленные вами значения.
Комментатор
Комментарий добавил(а): marko
Дата добавления: 2015-03-25
Здравствуйте, а не подскажите можно ли как-то сделать только с моим языком которого на яндексе нет ?
Комментатор
Комментарий добавил(а): gorniy
Дата добавления: 2014-01-08
Сорри, недоглядел)
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2014-01-08
А тот факт, что приложение обращается к НЕСУЩЕСТВУЮЩЕМУ скрипту, вас не смущает?
Комментатор
Комментарий добавил(а): gorniy
Дата добавления: 2014-01-08
А что значит ошибка Error #2032
Выдает при
переводе
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-08-28
Ничего точно сказать не могу, но, в принципе, если в XML встраивают фрагмент HTML, то используют CDATA (пример есть в посте http://edapskov.ru/pages.php?id=216).
Добавить комментарий:







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

Идиот-тест

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

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