Aufrufen von Google Translate von ASP.NET
If you want to run through this walkthrough, please follow the guide on setting up our test environment.
Experience Level - Intermediate
Einführung
Während das Dokument sehr gut erklärt, was passiert, wenn Sie Java Script verwenden, das etwa 500 Zeichen übersetzen kann, gibt es sehr wenig, wenn Sie größere Dokumente übersetzen müssen.
Wenn Sie POST verwenden, können Sie dies auf 5000 Zeichen erhöhen, daher haben wir unseren eigenen Code entwickelt, um eine Post-Anfrage an die Google-API zu senden und dann die Übersetzung zu erhalten.
Im ersten Schritt müssen wir unserem App_Code-Ordner eine Klasse hinzufügen und sie Translate nennen. Denken Sie bei der exemplarischen Vorgehensweise daran, die Build-Aktion auf Compile zu setzen.
VB
Imports System.IOImports System.NetImports System.Web.Script.SerializationPublic Class Translate Shared Function GetTranslation(ByVal key As String, ByVal source As String, ByVal target As String, ByVal Text As String) As String ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Dim TranslatedString As String = "" 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 ReqStr As Stream = Req.GetRequestStream() Dim encoding As New UTF8Encoding() Dim bytes As Byte() = encoding.GetBytes(Text) ReqStr.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 FunctionEnd Class
Add a page
Within the Pages Section, Add a new page called GoogleTranslate, and then the HTML and code below.
HTML
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> <script> function UpdateHiddenField(el, id) { nextElSibling(el).value = el.innerHTML; } function nextElSibling(el) { if (el.nextSibling) do { el = el.nextSibling } while (el && el.nodeType !== 1); return el; } </script></head><body> <form id="form1" runat="server"> <div style="max-width:1000px;margin:auto;"> <div style="clear:both;"> <asp:Label ID="KeyLabel" runat="server" AssociatedControlID="LgTo" Text="API Key"></asp:Label> <asp:TextBox ID="KeyValue" runat="server"></asp:TextBox> </div> <div style="float:left;width:50%;background-color:#ddd;"> <div> <asp:Label ID="LgFromLabel" runat="server" AssociatedControlID="LgFrom" Text="From"></asp:Label> <asp:DropDownList runat="server" ID="LgFrom"> <asp:ListItem Text="English" Value="en"></asp:ListItem> <asp:ListItem Text="Français" Value="fr"></asp:ListItem> <asp:ListItem Text="Deutsch" Value="de"></asp:ListItem> </asp:DropDownList> </div> <div style="min-height:400px;border:1px solid #ccc;" contenteditable="true" onkeyup="UpdateHiddenField(this)" id="ContentTextInput" runat="server"></div> <asp:HiddenField ID="ContentText" runat="server"/> </div> <div style="float:left;width:50%;background-color:#ccc;"> <div> <asp:Label ID="LgToLabel" runat="server" AssociatedControlID="LgTo" Text="To"></asp:Label> <asp:DropDownList runat="server" ID="LgTo"> <asp:ListItem Text="English" Value="en"></asp:ListItem> <asp:ListItem Text="Français" Value="fr"></asp:ListItem> <asp:ListItem Text="Deutsch" Value="de" Selected="True"></asp:ListItem> </asp:DropDownList> </div> <div style="min-height:400px;border:1px solid #bbb;" runat="server" id="ContentTrans"></div> </div> <div style="clear:both;text-align:center;"> <asp:Button runat="server" ID="Translation" Text="Translate"/> </div> </div> </form></body></html>
VB
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load End Sub Protected Sub GetTranslation_Click(sender As Object, e As EventArgs) Handles Translation.Click Dim Key As String = "Your Key" Dim source As String = LgTo.SelectedItem.Text.ToString Dim target As String = LgFrom.SelectedItem.Text.ToString Dim PageText As String = HttpUtility.HtmlDecode(ContentText.InnerHtml) Try ContentTrans.InnerHtml = HttpUtility.HtmlDecode(Translate.GetTranslation(Key, source, target, PageText)) Catch End Try End Sub
Was es macht
Die Funktion erfordert vier Eingaben, dies sind Ihr Schlüssel, Sprache von, Sprache bis und der Text, den Sie übersetzen möchten.
Dann legen wir den Anforderungstyp und den Inhaltstyp fest und fügen vor allem einen Header hinzu, um die get-Methode zu überschreiben .
Anschließend senden wir die Daten als Stream an Google (ReqStr).Jetzt deklarieren wir einen Rückgabe-String (ReturnStr), um den zurückgegebenen JSON von Google zu enthalten, und lesen den Antwort-String hinein.
Der nächste Schritt ist das Erstellen eines JavaScriptSerializers, dieser Teil war wahrscheinlich der verwirrendste, da dies zu dieser Zeit der schwächste Bereich meiner Entwicklungsfähigkeiten war. Dieser letzte Abschnitt zieht jeden Textabschnitt heraus, bis er den gewünschten Bereich erreicht, und legt unseren Rückgabetext als den von Google zurückgegebenen Wert fest. Dies ist vielleicht nicht der aufwändigste Code der Welt, also lassen Sie es mich wissen, wenn Sie einen Weg finden, ihn aufzuräumen.
Das Beispiel füllt DIV-Inhalte ineinander. Bitte beachten Sie die doppelte Dekodierung (vom Editor und Google) und hat zwei Textfelder, die die Sprache von und nach angeben.