Трудности перевода: используем Bing API

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

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

Для начала вам будет необходимо получить свой AppID, который позволяет взаимодействовать с веб-сервисами Bing. Он используется API сервиса для проверки того, что запрос исходит от зарегистрированного в Bing разработчика приложений. Эта процедура абсолютна бесплатна и не займет много времеи. Отправляйтесь на bing.com/developers/createapp.aspx для регистрации. После успешной регистрации вы получите длинную строчку из букв и цифр - ваш новый AppID.

Теперь, когда у вас есть AppID, вы готовы приступить к работе над мобильным приложением-переводчиком. Наша цель - обеспечить перевод с английского на русский. Создайте новый проект «Windows Phone Application» под именем BingTranslator. Отредактируйте название приложения и заголовок страницы на более подходящие названия. Далее добавьте элементы TextBox (TranslateTextBox), в который вы будете помещать слова для перевода, и TextBlock (TranslatedTextBlock), где будет показываться перевод. Наконец, добавьте кнопку (TranslateButton), с помощью которой и будет осуществляться перевод.

Дизайн приложения

Давайте поменяем значок к приложению. Щелкните дважды на файле ApplicationIcon.png в правой части проекта. Это приводит к открытию графического редактора, например, MSPaint. Меняем значок с шестеренкой на значок с заглавной буквой П, и заодно заменим черный фон на другой любой цвет.

Значок для приложения

Запустите приложение в эмуляторе, чтобы убедиться, что все изменения работают. Чтобы посмотреть на созданный значок, нужно закрыть программу и перейти в основной экран эмулятора.

Значок приложения определяется в файле WMAppManifest.xml, который находится в папке Properties вашего проекта. Чтобы переименовать значок приложения, измените имя файла ApplicationIcon.png в своем проекте, а потом не забудьте отразить это изменение здесь, в элементе IconPath:

<IconPath IsRelative="true" IsResource="false">myicon.png</IconPath>

Если ваше приложение не cможет найти свой значок, то в период выполнения ему будет присвоен значок по умолчанию, который выглядит примерно как белый кружок на черном фоне.

Microsoft Translator API

Microsoft Translator предоставляет три вида API: SOAP (обеспечивает строгую типизацию и простоту использования), AJAX (полезен в основном разработчикам веб-страниц, желающим встроить в свои UI средства перевода) и HTTP (полезен в тех случаях, когда не годятся ни SOAP, ни AJAX API). Мы задействуем интерфейс SOAP, потому что с ним легче всего работать. Переключитесь в Solution Explorer и щелкните правой кнопкой мыши References. Затем выберите Add a Service Reference и укажите конечную точку для интерфейса SOAP в Translator API, вставив в текстовом поле Address строчку http://api.microsofttranslator.com/V2/Soap.svc. Щелкните кнопку Go.

В текстовом поле Namespace присвойте конечной точке сервиса имя TranslatorService и щелкните OK.

SOAP

Об остальном позаботится Visual Studio, самостоятельно сгенерировав клиентский код для интерфейса SOAP. Теперь добавьте код в приложение. Вставьте полученный AppID и ссылку на клиент TranslatorService в объявление класса MainPage вашего приложения:

string appID = <ваш appID>;

TranslatorService.LanguageServiceClient translateclient = 
    new TranslatorService.LanguageServiceClient();

IntelliSense показывает нам, что у сервиса перевода есть ряд интересных методов. Первое, на что стоит обратить внимание, — все методы асинхронные. Это имеет смысл, поскольку веских причин блокировать клиентское приложение на время выполнения сетевой операции нет. А значит, вам понадобиться зарегистрировать делегат для каждой конкретной операции. В данном случае нас интересуют лишь метод TranslateAsync и событие TranslateAsyncComplete, предоставляемые LanguageServiceClient. Обратите внимание на методы GetLanguagesForTranslateAsync и GetLanguageNamesAsync. Первый метод возвращает список языковых кодов, поддерживаемых сервисом Translator. Вызвав этот метод, вы можете увидеть, что языковый код для испанского — «es». Метод GetLanguageNamesAsync возвращает список названий языков для данного набора языковых кодов, локализованных для данного региона (локализующего идентификатора) (locale). Например, если вы передаете «es» в этот метод как локализующий идентификатор и языковой код, то получаете строку «Español». Это пригодилось бы нам для создания многоязыкового переводчика. Другой интересный метод — SpeakAsync. Он принимает строку и локализующий идентификатор, а возвращает URL на WAV-файл, благодаря которому вы можете услышать произношение этого слова носителем языка. Это потрясающая функция. Например, я мог бы ввести строку, получить перевод, затем передать эту строку в метод SpeakAsync, получить WAV-файл и таким способом общаться с другими на испанском. Или, если бы я не был уверен в произношении конкретного слова, я мог бы использовать метод SpeakAsync, чтобы послушать, как произносится это слово.

Но вернемся к переводчику. Сначала мы регистрируем делегаты для события TranslateCompleted:

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
{
    translateclient.TranslateCompleted += new EventHandler   
	    <TranslatorService.TranslateCompletedEventArgs>
        (translateclient_TranslateCompleted);
}

Затем реализуем обработчик события TranslateCompleted, который записывает в TextBlock переведенный текст:

void translateclient_TranslateCompleted(object sender, 
    TranslatorService.TranslateCompletedEventArgs e)
{
    TranslatedTextBlock.Text = e.Result;
}

И добавляем код для кнопки, чтобы начать перевод.

string fromLanguage = "en";
string toLanguage = "ru";

private void TranslateButton_Click(object sender, RoutedEventArgs e)
{
    translateclient.TranslateAsync(appID, TranslateTextBox.Text, fromLanguage, toLanguage);

}

Теперь у нас есть полностью работающее приложение-переводчик, потребовавшее написать десяток-другой строк кода и чуть больше часа времени. Запустите проект, введите любое слово на английском и получите русскоязычный перевод.

Переводчик

Написано на основе статьи: Windows Phone и облако – введение

Реклама