Wertes VB-Paradise,
so oft saugte ich gefiltertes Ultrawissen hier aus dem Board und auch wenn es manchmal nur um die fachlich Korrekte Umsetzung gewisser Prozeduren geht.
Da ich leider im Netz nicht wirklich was gefunden habe wo ich keine Nugets oder Libaries in meine Anwendung einbinden muss, möchte ich mich dem Thema Deepl Übersetzung mal annehmen.
Wie der Titel bereits verrät wollte ich eine Lösung die ohne Zusätze auskommt, da meine Anwendung letztlich nur eine Executable umfassen soll.
Genauso wie ich werden vielleicht auch viele über diesen Thread stolpern, die nicht beruflich programmieren und eine einfache Lösung suchen, daher möchte die Vorgehensweise etwas detaillierter erklären auch wenn der überwiegende Teil von euch dies sicherlich nicht braucht.
so oft saugte ich gefiltertes Ultrawissen hier aus dem Board und auch wenn es manchmal nur um die fachlich Korrekte Umsetzung gewisser Prozeduren geht.
Da ich leider im Netz nicht wirklich was gefunden habe wo ich keine Nugets oder Libaries in meine Anwendung einbinden muss, möchte ich mich dem Thema Deepl Übersetzung mal annehmen.
Wie der Titel bereits verrät wollte ich eine Lösung die ohne Zusätze auskommt, da meine Anwendung letztlich nur eine Executable umfassen soll.
Genauso wie ich werden vielleicht auch viele über diesen Thread stolpern, die nicht beruflich programmieren und eine einfache Lösung suchen, daher möchte die Vorgehensweise etwas detaillierter erklären auch wenn der überwiegende Teil von euch dies sicherlich nicht braucht.
- Module erstellen
Erstelle in deinem Projekt ein neues Modul (in meinem Fall "mDeeplModule") - Kopiere den Code in dein neu erstelltes Modul
VB.NET-Quellcode
- Imports System.IO
- Imports System.Net
- Imports System.Text
- Imports System.Text.RegularExpressions
- Module mDeeplModule
- Private Const TranslateUrl As String = "https://api-free.deepl.com/v2/translate"
- Private Const UsageUrl As String = "https://api-free.deepl.com/v2/usage?"
- Private Const apiKey As String = "12345678-1234-1234-123456789012:fx"
- Public Function TranslateText(text As String, sourceLang As String, targetLang As String) As String
- Dim request As HttpWebRequest = CType(WebRequest.Create(TranslateUrl), HttpWebRequest)
- request.Method = "POST"
- request.ContentType = "application/x-www-form-urlencoded"
- Dim postData As String = $"auth_key={apiKey}&text={Uri.EscapeDataString(text)}&source_lang={sourceLang}&target_lang={targetLang}"
- Dim dataBytes As Byte() = Encoding.UTF8.GetBytes(postData)
- request.ContentLength = dataBytes.Length
- Using requestStream As Stream = request.GetRequestStream()
- requestStream.Write(dataBytes, 0, dataBytes.Length)
- End Using
- Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
- Using streamReader As New StreamReader(response.GetResponseStream())
- Dim responseJson As String = streamReader.ReadToEnd()
- Dim translatedText As String = ExtractTranslatedText(responseJson)
- Return translatedText
- End Using
- End Function
- Private Function ExtractTranslatedText(jsonString As String) As String
- Dim pattern As String = """text"":""(.*?)"""
- Dim match As Match = Regex.Match(jsonString, pattern)
- If match.Success Then
- Dim translatedText As String = match.Groups(1).Value
- Return translatedText
- End If
- Return String.Empty
- End Function
- Public Function GetUsedCharacterCount() As String
- Dim request As HttpWebRequest = CType(WebRequest.Create(UsageUrl), HttpWebRequest)
- request.Method = "POST"
- request.ContentType = "application/x-www-form-urlencoded"
- Dim postData As String = $"auth_key={apiKey}"
- Dim dataBytes As Byte() = Encoding.UTF8.GetBytes(postData)
- request.ContentLength = dataBytes.Length
- Using requestStream As Stream = request.GetRequestStream()
- requestStream.Write(dataBytes, 0, dataBytes.Length)
- End Using
- Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
- Using streamReader As New StreamReader(response.GetResponseStream())
- Dim responseJson As String = streamReader.ReadToEnd()
- Debug.Print("GetUsageCharacterJSON: " & responseJson)
- Dim UsageValue As String = ExtractUsedCharacterCount(responseJson)
- Return UsageValue
- End Using
- End Function
- Private Function ExtractUsedCharacterCount(jsonString As String) As String
- Dim pattern As String = """character_count"":(\d+)"
- Dim match As Match = Regex.Match(jsonString, pattern)
- If match.Success Then
- Dim UsageValue As String = match.Groups(1).Value
- Return UsageValue
- End If
- Return String.Empty
- End Function
- Public Function GetTotalCharacterLimit() As String
- Dim request As HttpWebRequest = CType(WebRequest.Create(UsageUrl), HttpWebRequest)
- request.Method = "POST"
- request.ContentType = "application/x-www-form-urlencoded"
- Dim postData As String = $"auth_key={apiKey}"
- Dim dataBytes As Byte() = Encoding.UTF8.GetBytes(postData)
- request.ContentLength = dataBytes.Length
- Using requestStream As Stream = request.GetRequestStream()
- requestStream.Write(dataBytes, 0, dataBytes.Length)
- End Using
- Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
- Using streamReader As New StreamReader(response.GetResponseStream())
- Dim responseJson As String = streamReader.ReadToEnd()
- Debug.Print("GetUsageCharacterJSON: " & responseJson)
- Dim UsageValue As String = ExtractTotalCharacterLimit(responseJson)
- Return UsageValue
- End Using
- End Function
- Private Function ExtractTotalCharacterLimit(jsonString As String) As String
- Dim pattern As String = """character_limit"":(\d+)"
- Dim match As Match = Regex.Match(jsonString, pattern)
- If match.Success Then
- Dim UsageValue As String = match.Groups(1).Value
- Return UsageValue
- End If
- Return String.Empty
- End Function
- End Module
- Passe den API-Key oben im Modul an
Falls du noch keine API-Key hast, kannst du dir kostenlos einen Free-Account erstellen
deepl.com/pro-api?cta=header-pro-api/
Für die Registrierung wird eine Kreditkarte benötigt, diese dient lediglich zur Authentifizierung und werden in der Free-Version keine Buchungen erfolgen.
Beim Umstieg auf eine Pro Version wird diese als Zahlungsmittel verwendet. - Nutzung
Die benötigten Funktionen sind "Public" gesetzt und können aus jedem anderen Modul und jeder Form angesprochen werden
Übersetzen von Text
In der Funktion sind die Kürzel der Quell- und Zielsprache anzugeben, die möglichen Sprachen und deren Kürzel sind in der Doku der DeepL API zu finden.
https://www.deepl.com/docs-api/general/get-languages/
Anzahl der bereits Übersetzten Characters
Anzahl der maximal möglichen Characters in der aktuellen Zahlungsperiode (Free = 500000 Characters / Monat)
Beste Grüße
Kevin
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()