Данный пример позволит вам создать сервис перевода на сайте, используя технологию api перевода от yandex. Используйте пример для маркетинговых задач, т.е. для продвижения сайта путем создания виджетов и других частей сайта.
Пример использования данной технологии на сайте можно посмотреть в этом разделе: http://www.leadersoft.ru/Rus/Help/Job/Default.aspx?go=product&pid=938
О переводчике
Компания yandex разработала api интерфейс для перевода текстов. Ссылка на интерфейс https://tech.yandex.ru/translate/. Он имеет некоторые ограничения, но позволяет на сайте создать раздел для перевода информации, например, новостей. Попробовать перевод текста от сервиса yandex можно по этой ссылке: https://translate.yandex.ru/
Описание файлов
Сам проект ASP.NET «Переводчик» состоит из нескольких файлов.
- Yandex.vb – этот класс содержит основные функции для работы с сервисом перевода и базой данных
- Yandex.css – это пример для настройки стилей страницы примера
- Freelace_job.accdb – база данных Microsoft Access с текстом для перевода
- Default.aspx – страница примера
- Web.config – содержит настройка для подключения базы данных
- SiteJob.xsd – это набор данных для работы с базой данных
Microsoft ASP.NET. Проект «Переводчик»
Описание интерфейса
Интерфейс страницы перевода Default.aspx состоит из 2 кнопок.
- «Перевести текст. Всего строк=». При нажатии на эту кнопку текст будет переведен, т.е. из базы данных будет считано столько строк, сколько указано с кнопкой (по умолчанию 1)
- «Посмотреть LOG перевода». При нажатии на эту кнопку будет отображен лог перевода. Лог нужен для того, чтобы «увидеть» как прошел перевод. На сайт мы не посылаем сообщения об ошибках перевода, т.к. это нарушит его структуру.
Запуск примера на сайте
Если открыть файл Default.vb страницы Default.aspx, то можно увидеть следующую информацию. При нажатии кнопки ButtonTranslate срабатывают команды translate и translate-log. Первая переводит текст, а вторая отображает лог перевода
Protected Sub ButtonTranslate_Command(sender As Object, e As CommandEventArgs) Handles ButtonTranslate.Command, ButtonLog.Command
' Переводим текст
If e.CommandName = "translate" Then
Dim ya As New Yandex
ya.TranslateDatabase(True, Me.MaxRecords.Text)
End If
' Отображаем последние строки лога перевода
If e.CommandName = "translate-log" Then
Dim FileFull As String = HttpContext.Current.Request.MapPath("~/App_Data/freelancer/Yandex_Log.txt")
Dim Lines() As String = IO.File.ReadAllLines(FileFull)
Dim Buffer As String = ""
For i As Integer = Lines.Length - 1 To Lines.Length - Me.MaxRecords.Text Step -1
If i >= 0 Then
Buffer = Buffer & (Lines(i) & "<br />")
End If
Next
Dim html As New Literal
html.Text = Buffer
Me.PlaceLog.Controls.Add(html)
End If
End Sub
Алгоритм перевода в Yandex.vb
Получаем api ключ от yandex сервиса и записываем его в класс в виде свойства только для чтения
Private ReadOnly Property ApiKey() As String
Get
Return "trnsl.1.1.?.?.?"
End Get
End Property
Создаем функцию, которая будет писать данные перевода в лог файла. Она нужна для сохранения ошибок и результата перевода.
Private Sub LogWrite(txt As String)
Dim FileFull As String = HttpContext.Current.Request.MapPath("~/App_Data/freelancer/Yandex_Log.txt")
IO.File.AppendAllText(FileFull, Now() & " " & txt & vbNewLine)
End Sub
Создаем главную функцию перевода всех строк текста из базы данных. Параметр MaxRecords управляет числом переводимых записей. ButtobClick – определяет информацией, что надо сделать. Если True, то была нажата кнопка на сайте, если False, то перевод ведется автоматически с шагом 10 минут.
' Перевести текст. Максимально 100 записей из базы данных
Public Sub TranslateDatabase(Optional ButtonClick As Boolean = False, Optional MaxRecords As Integer = 100)
' Загружаем записи
Dim adp As New SiteJobTableAdapters.JOB_TranslateTableAdapter
Dim tbl As New SiteJob.JOB_TranslateDataTable
adp.Fill(tbl)
' Переводим текст
Dim MaxRow As Integer = 0
For Each row As SiteJob.JOB_TranslateRow In tbl
TranslateStringAsync({row.Name & "||" & row.ShortDescr}, row.ProjectID)
MaxRow += 1
If MaxRow >= MaxRecords Then
Exit For
End If
Next
' Освобождаем ресурсы
tbl.Dispose()
adp.Dispose()
End Sub
Для перевода текста используем асинхронную функцию загрузки из Интернета, т.к. нам важно, чтобы наш сайт не зависал при переводе.
Public Sub TranslateStringAsync(TextEnglish() As String, ProjectID As String)
Try
' Загружаем файл
Dim client As WebClient = New WebClient()
' Определяем функцию завершения загрузки
AddHandler client.DownloadStringCompleted, AddressOf DownloadStringCompleted
' Определяем функцию отображения загрузки
AddHandler client.DownloadProgressChanged, AddressOf DownloadProgressCallback
' Определяем страницу загрузки с параметрами
Dim uri As Uri = New Uri("https://translate.yandex.net/api/v1.5/tr.json/translate")
' Запускаем асинхронную загрузку данных и передаем в поток код проекта
client.DownloadStringAsync(uri, ProjectID)
Catch ex As Exception
ResponseWrite("DownloadFileAsync ... <br />" & ex.Message.ToString)
End Try
End Sub
После перевода получаем результат e.result в формате json, обрабатываем его, и сохраняем перевод в базе данных. При ошибке отправляем информацию о ней лог в базы данных.
' Завершена загрузка
Private Sub DownloadStringCompleted(sender As Object, e As DownloadStringCompletedEventArgs)
Try
If e.Cancelled = False AndAlso e.Error Is Nothing Then
' Разбор текста перевода
GetTextJson(e.Result, ProjectID)
Catch ex As Exception
End Try
End If
If e.Error IsNot Nothing Then
End If
Catch ex As Exception
End Try
End Sub
Для обработки результата перевода нужна функция разбора текста json. Алгоритм указан ниже.
Public Function GetTextJson(json As String, ProjectID As String) As String
Dim ser As New JavaScriptSerializer()
Dim qry As Dictionary(Of String, Object) = TryCast(ser.DeserializeObject(json), Dictionary(Of String, Object))
If qry Is Nothing Then
' Ошибка разбора файла. Он не имеет формат json
Return ""
End If
End Function
При переводе возможны ошибки, которые выдает yandex сервис.
'401: Неправильный ключ API
'402: Ключ API заблокирован
'403: Превышено суточное ограничение на количество запросов
'404: Превышено суточное ограничение на объем переведенного текста
'413: Превышен максимально допустимый размер текста
'422: Текст не может быть переведен
'501: Заданное направление перевода не поддерживается
ЗАКЛЮЧЕНИЕ
Исходный код, включая другие примеры, можно купить по этой ссылке: Купить альбом решений ASP.NET с примерами задач
Комментариев нет:
Отправить комментарий