См.также
Пример online-переводчика, который использует класс WebRequest для обращения к API Яндекс.Переводчика.
См.также
Для удобства в программе используется простой GUI интерфейс.
Онлайн переводчик, в первую очередь, это программа, позволяющая переводить текст с иностранного языка и наоборот, в режиме онлайн. Перевод может быть абсолютно разным, будь-то это фраза, словосочетание, либо большой и длинный литературный текст. Также онлайн переводчик может служить помощником в переписке с зарубежными друзьями или коллегами, в переводе каких-либо иностранных статей. В конце концов, переводчик может быть полезен в том случае, когда Вы пытаетесь что-то кому-то сказать на иностранном языке.
Для создания программы-переводчика использовалось приложение Visual Studio 2013, а также дополнительный фреймворк Json.NET.
Приложение написано на WindowsForms, на языке C#. Для создания дизайна приложения была использована программа Adobe Photoshop CS5.
С помощью данного приложения можно перевести текст на 9 различных языков: Английский, Русский, Иврит, Испанский, Итальянский, Китайский, Немецкий, Французский, Японский. Перевод осуществляется с помощью веб-запросов к API Яндекс.Переводчика.
Для перевода текста достаточно ввести исходный текст в первое окно, указать начальный язык, а также требуемый язык перевода во всплывающих боксах. Для быстрой смены выбранных языков между собой можно воспользоваться центральной кнопкой в виде двух стрелок. Как только Вы выбрали нужные языки и ввели необходимый текст, нажмите кнопку «Перевод». Переведенный текст отобразится во втором окне.
Чтобы работать с API Яндекс Переводчика, потребовалось получить API-ключ(OAuth токен доступа).
OAuth-токен ― это специальный код, разрешающий доступ к данным конкретного пользователя. Для каждого пользователя (логина в Яндекс.Директе, от имени которого осуществляются запросы к API) необходимо получить отдельный токен, который следует указывать при вызове методов.
Ключ был получен на сайте Яндекс https://tech.yandex.ru/translate/
Расположение объектов приложения было произведено при помощи WindowsForms, а затем оформлено при помощи изображений, созданных в Adobe Photoshop CS5. Код приложения написан на языке программирования C#.
Приложение состоит из трех классов: Form1, Translate и Translation.
В классе Form1 описаны объекты приложения и действия над ними. Приложение состоит из двух кнопок, реализованных через pictureBox; Двух текстбоксов, а также трех комбобоксов (всплывающие списки). В двух комбобоксах пользователь осуществляет выбор необходимого языка для перевода. Еще один комбобокс не отображается на экране, а служит лишь для осуществления быстрой смены двух выбранных языков между собой.
При нажатии на кнопку «Перевод» (pictureBox1) происходит вызов функции TranslateText, которая посылает веб-запрос. Однако, при отправлении запроса, требуется указать коды языков для перевода, например(“ru-en” или “it-ru”). Для этого была написана структура switch-case, которая, исходя из выбранных языков в комбобоксах, составляет необходимую нам строку с кодами языков.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TranslatorForWeb
{
public partial class Form1 : Form
{
ComboBox forSwap;//Для свапа выбранных языков
Translate YandexAPI;
public Form1()
{
InitializeComponent();
//---Первоначальные языки в боксах---
comboBox1.SelectedItem = "Английский";
comboBox2.SelectedItem = "Русский";
//---
//---Для свапа выбранных языков---
forSwap = new ComboBox();
forSwap.Items.AddRange(new object[] {
#region Бокс для свапа
"Английский",
"Иврит",
"Испанский",
"Итальянский",
"Китайский",
"Немецкий",
"Русский",
"Французский",
"Японский"});
#endregion
//---
YandexAPI = new Translate();
}
private void Form1_Load(object sender, EventArgs e)
{
}
//===================Кнопка свапа языков========================
private void pictureBox2_Click(object sender, EventArgs e)
{
forSwap.SelectedItem = comboBox2.SelectedItem;
comboBox2.SelectedItem = comboBox1.SelectedItem;
comboBox1.SelectedItem = forSwap.SelectedItem;
}
//==============================================================
private void pictureBox1_Click(object sender, EventArgs e)
{
#region Преобразование языка в код
string inputlang;//Начальный язык
inputlang = (String)Convert.ChangeType(comboBox1.SelectedItem, typeof(String));//Значение из первого бокса
string outputlang;//Язык перевода
outputlang = (String)Convert.ChangeType(comboBox2.SelectedItem, typeof(String));//Значение из второго бокса
//===Преобразование названия языка в его кодовое значение===
//---Для начального языка
switch (inputlang)
{
case "Английский": inputlang = "en"; break;
case "Русский": inputlang = "ru"; break;
case "Иврит": inputlang = "he"; break;
case "Испанский": inputlang = "es"; break;
case "Итальянский": inputlang = "it"; break;
case "Китайский": inputlang = "zh"; break;
case "Немецкий": inputlang = "de"; break;
case "Французский": inputlang = "fr"; break;
case "Японский": inputlang = "ja"; break;
}
//---
//---Для языка перевода
switch (outputlang)
{
case "Английский": outputlang = "en"; break;
case "Русский": outputlang = "ru"; break;
case "Иврит": outputlang = "he"; break;
case "Испанский": outputlang = "es"; break;
case "Итальянский": outputlang = "it"; break;
case "Китайский": outputlang = "zh"; break;
case "Немецкий": outputlang = "de"; break;
case "Французский": outputlang = "fr"; break;
case "Японский": outputlang = "ja"; break;
}
//---
//==========================================================
#endregion
string language = string.Format("{0}-{1}", inputlang, outputlang);//Итоговая строка языков с кодами
richTextBox2.Text = YandexAPI.TranslateText(richTextBox1.Text, language);
}
}
} |
Класс Translate описывает веб-запрос к серверам Яндекс.Переводчика и десериализацию JSON полученного ответа. Запрос к API переводчика содержит ряд обязательных параметров – это:
Необязательные параметры, такие как формат и опции перевода, в приложении не используются.
Так как ответ приходит в виде структуры данных JSON, требуется его
распарсить. Для этого был установлен дополнительный фреймворк
Json.NET
и подключена библиотека Newtonsoft.Json
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;//Пакет JSON
namespace TranslatorForWeb
{
class Translate
{
public string TranslateText(string s, string language)
{
if (s.Length > 0)//Проверка на непустую строку
{
//---Запрос---
WebRequest request = WebRequest.Create("https://translate.yandex.net/api/v1.5/tr.json/translate?"
+ "key=trnsl.1.1.20170125T084253Z.cc366274cc3474e9.68d49c802348b39b5d677c856e0805c433b7618c"//Ключ
+ "&text=" + s//Текст
+ "&lang=" + language);//Язык
WebResponse response = request.GetResponse();
//--------------------
//---Распарсить JSON ответ. Я скачал фреймворк Json.NET
using (StreamReader stream = new StreamReader(response.GetResponseStream()))
{
string line;
if ((line = stream.ReadLine()) != null)
{
Translation translation = JsonConvert.DeserializeObject<Translation>(line);
s = "";
foreach (string str in translation.text)
{
s += str;
}
}
}
//------------------
return s;
}
else
return "";
}
}
class Translation
{
public string code { get; set; }
public string lang { get; set; }
public string[] text { get; set; }
}
} |
Данных класс описывает структуру JSON-ответа на запрос к API переводчика.