Llamada a Google Translate desde ASP.NET mediante publicación
Introducción
La API de Google Translate es buena para realizar traducciones bastante complejas y, si bien no es perfecta, al menos le dará a sus lectores una comprensión básica de lo que intenta transmitir.
Si bien el documento es muy bueno para explicar lo que sucede cuando se utiliza Java Script que puede traducir unos 500 caracteres, hay muy poco para cuando se necesita para traducir documentos más grandes.
Al usar POST, puede aumentar este número a 5000 caracteres, por lo que desarrollamos nuestro propio código para enviar una solicitud de publicación a la API de Google y luego recibir la traducción.
Primero el código, para aquellos que sólo quieren eso.
VB
Text = "q=" + Text
Dim TranslateRequest As New Uri(String.Format("https://www.googleapis.com/language/translate/v2?key={0}&source={1}&target={2}&format=html", key, source, target))
Dim Req As WebRequest = WebRequest.Create(TranslateRequest)
Req.Method = "POST"
Req.Headers.Add("X-https-Method-Override", "GET")
Req.ContentType = "application/x-www-form-urlencoded"
Using wriream As Stream = Req.GetRequestStream()
Dim encoding As New UTF8Encoding()
Dim bytes As Byte() = encoding.GetBytes(Text)
wriream.Write(bytes, 0, bytes.Length)
End Using
Dim ReturnStr As String
Using sr = New StreamReader(Req.GetResponse.GetResponseStream)
ReturnStr = sr.ReadToEnd()
End Using
Dim Reader As New JavaScriptSerializer
Dim TranslateJSON As Dictionary(Of String, Object) = Reader.DeserializeObject(ReturnStr)
Dim TranslateData As Dictionary(Of String, Object)
If TranslateJSON.ContainsKey("data") Then
TranslateData = TranslateJSON("data")
If TranslateData.ContainsKey("translations") Then
For Each pair In TranslateData.Item("translations")(0)
TranslatedString = pair.Value.ToString()
Next
End If
End If
Return TranslatedString
End Function
Introducción
Y ahora para una breve explicación. La función requiere cuatro entradas, éstas son la clave, el idioma, el idioma y el texto que desea traducir.
A continuación, establecemos el tipo de solicitud, el tipo de contenido y lo más importante agregar un encabezado para anular el método get .
Una vez hecho esto, enviamos los datos como un flujo a Google (wriream).Ahora declaramos una cadena de retorno (ReturnStr) para contener el JSON devuelto de Google, y leemos la cadena de respuesta en él.
El siguiente paso es crear un JavaScriptSerializer, este bit fue probablemente el más confuso, ya que este es el área más débil de mis habilidades de desarrollo. Lo que hace esta última sección es extraer cada sección de texto hasta que llegue al área que deseamos, y establece nuestro texto de retorno como el valor devuelto por Google. Este no puede ser el código más elaborado del mundo, así que si trabajas en una forma de ordenarlo, déjame saber.
Usted podría muy fácilmente poner este código en una clase compartida y volver a usarlo, sin embargo, sólo había una sección del sitio que necesitábamos esto, por lo que fue construido en la página.
El ejemplo siguiente rellena un editor de texto AJAX Toolkit con el contenido de otro. Tenga en cuenta la doble descodificación (desde el editor y Google), y tiene dos cuadros de texto que denotan el idioma hacia y desde.
VB
Dim key As String = "Your Key"
Dim source As String = LanguageBase.SelectedItem.Text.ToString
Dim target As String = LanguageTrans.SelectedItem.Text.ToString
Dim PageText As String = httpsUtility.HtmlDecode(ContentText.Content)
Try
ContentTextTran.Content = httpsUtility.HtmlDecode(GetTranslation(key, source, target, PageText))
Str.Text = "Translated"
Catch
Str.Text = key + "," + source + "," + target + ""
End Try
End Sub