This is a mirror of official site: http://jasper-net.blogspot.com/

C#. Пишем google-переводчик

| Monday, February 28, 2011
Сегодня мы с тобой напишем свой собственный переводчик. Сам функционал перевода мы, конечно же, реализовывать не будем, а обратимся к всемогущему Google, в частности, к Google API Translate. Также немного поковыряем связывание данных в WPF и немного коснемся библиотеки Json.NET, в результате чего у нас получиться свой собственный переводчик. Вперед!

Схема работы
Итак, прежде чем приступать к самому интересному (написанию кода, конечно же  ) надо сначала набросать небольшой план работ. Предлагаю разбить весь процесс на следующие этапы:
1. Разобраться с взаимодействием Google API Translate.
2. Спроектировать WPF приложение.
3. Написать код на C# для взаимодействия с Google.
4. Реализовать связь интерфейса WPF приложения с кодом на C#.


Google API Translate
Итак, сначала нам надо разобраться с тем, как мы будем взаимодействовать с переводчиком от google, так как именно его услугами мы будем пользоваться для непосредственного перевода текста. Небольшие поиски в самом же google подскажут, что для перевода строки текста нам надо послать запрос по такому адресу.

<a href="http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" >http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=</a>[текст для перевода]&langpair=[направление перевода]

Это так называемый REST-запрос, самый просто способ для работы с разного рода API различных веб-сервисов. Например, с теми же вконтакте, твитером можно работать с помощью REST.

В результате Google вернет нам следующий ответ:

{"responseData": {"translatedText":"[Переведенный текст]"}, "responseDetails": null, "responseStatus": [статус перевода]}

Это строка в формате JSON (произносится “джейсан”, насколько я знаю). Нам в нашей программе надо будет только отпарсить этот ответ и выдать результат перевода пользователю. Для того чтобы приложение могло разбирать ответы в виде JSON-строки, нам понадобится библиотека Json.NET. Слить ее можно отсюда: http://json.codeplex.com. Есть и другие библиотеки, но я остановился на этой. В принципе, в нашем случае можно было бы обойтись и регулярными выражениями, но для расширения кругозора я предлагаю попробовать Json.NET.


ПРОЕКТИРОВАНИЕ WPF-ПРИЛОЖЕНИЯ
Теперь разберемся, как будет выглядеть и работать наше WPF-приложение. Я предлагаю особо не заморачиваться и сделать простой интерфейс с двумя TextBlock’ами, TextBox’ами и одной кнопкой. Мой вариант на рисунке 1.

Но хочу тебе напомнить, чтобы мы имеем дело с WPF, а потому, ты можешь сделать по-настоящему красивый дизинг, все ограничивается твоей фантазией. Моей, как видишь, хватило не намного

Основной функционал, а именно перевод текста предлагаю возложить на отдельный класс. Это нам позволит максимально разделить движок и интерфейс, а также облегчит нам процедуру связывания данных, о которой мы поговорим чуть позже.

Класс будет содержать три закрытых метода:
• Stream GetHttpStream(string url).Получаем поток данных с сайта с адресом url.
• String ConvertStreamTostring(Stream stmSource).Преобразуем полученный поток stmSource в строку.
• void GetTranslateDirection ().Определяем направление перевода, т.е. язык, с которого будем переводить. Делать это будет элементарным анализов первых нескольких символов.

Кстати, первые два метода из примеров программ на C# под названием “101 C# Samples”. Поковыряй на досуге, много интересного .

Затем нам понадобятся 4 закрытых объекта:
• объект типа HttpWebResponse, который будет содержать ответ от сервера google для его последующего анализа;
• логическая переменная, определяющая направление перевода bEnRus. Наш переводчик будет переводить только в 2-х направлениях: с английского на русский и обратно. Поэтому хватит одной переменной для определения направления перевода. Значение данной переменной, кстати, мы и будем устанавливать в описанном выше методе GetTranslateDirection().
• Оригинальный текст для перевода strOriginal;
• переведенный текст strResult;


Read more: Virtual Reality online

Posted via email from Jasper-net

0 comments: