Deepl Übersetzung mit Boardmitteln (ohne Newtonsoft.json / ohne .Net Core)

    • VB.NET

      Deepl Übersetzung mit Boardmitteln (ohne Newtonsoft.json / ohne .Net Core)

      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.
      1. Module erstellen
        Erstelle in deinem Projekt ein neues Modul (in meinem Fall "mDeeplModule")
      2. Kopiere den Code in dein neu erstelltes Modul

        VB.NET-Quellcode

        1. Imports System.IO
        2. Imports System.Net
        3. Imports System.Text
        4. Imports System.Text.RegularExpressions
        5. Module mDeeplModule
        6. Private Const TranslateUrl As String = "https://api-free.deepl.com/v2/translate"
        7. Private Const UsageUrl As String = "https://api-free.deepl.com/v2/usage?"
        8. Private Const apiKey As String = "12345678-1234-1234-123456789012:fx"
        9. Public Function TranslateText(text As String, sourceLang As String, targetLang As String) As String
        10. Dim request As HttpWebRequest = CType(WebRequest.Create(TranslateUrl), HttpWebRequest)
        11. request.Method = "POST"
        12. request.ContentType = "application/x-www-form-urlencoded"
        13. Dim postData As String = $"auth_key={apiKey}&text={Uri.EscapeDataString(text)}&source_lang={sourceLang}&target_lang={targetLang}"
        14. Dim dataBytes As Byte() = Encoding.UTF8.GetBytes(postData)
        15. request.ContentLength = dataBytes.Length
        16. Using requestStream As Stream = request.GetRequestStream()
        17. requestStream.Write(dataBytes, 0, dataBytes.Length)
        18. End Using
        19. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
        20. Using streamReader As New StreamReader(response.GetResponseStream())
        21. Dim responseJson As String = streamReader.ReadToEnd()
        22. Dim translatedText As String = ExtractTranslatedText(responseJson)
        23. Return translatedText
        24. End Using
        25. End Function
        26. Private Function ExtractTranslatedText(jsonString As String) As String
        27. Dim pattern As String = """text"":""(.*?)"""
        28. Dim match As Match = Regex.Match(jsonString, pattern)
        29. If match.Success Then
        30. Dim translatedText As String = match.Groups(1).Value
        31. Return translatedText
        32. End If
        33. Return String.Empty
        34. End Function
        35. Public Function GetUsedCharacterCount() As String
        36. Dim request As HttpWebRequest = CType(WebRequest.Create(UsageUrl), HttpWebRequest)
        37. request.Method = "POST"
        38. request.ContentType = "application/x-www-form-urlencoded"
        39. Dim postData As String = $"auth_key={apiKey}"
        40. Dim dataBytes As Byte() = Encoding.UTF8.GetBytes(postData)
        41. request.ContentLength = dataBytes.Length
        42. Using requestStream As Stream = request.GetRequestStream()
        43. requestStream.Write(dataBytes, 0, dataBytes.Length)
        44. End Using
        45. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
        46. Using streamReader As New StreamReader(response.GetResponseStream())
        47. Dim responseJson As String = streamReader.ReadToEnd()
        48. Debug.Print("GetUsageCharacterJSON: " & responseJson)
        49. Dim UsageValue As String = ExtractUsedCharacterCount(responseJson)
        50. Return UsageValue
        51. End Using
        52. End Function
        53. Private Function ExtractUsedCharacterCount(jsonString As String) As String
        54. Dim pattern As String = """character_count"":(\d+)"
        55. Dim match As Match = Regex.Match(jsonString, pattern)
        56. If match.Success Then
        57. Dim UsageValue As String = match.Groups(1).Value
        58. Return UsageValue
        59. End If
        60. Return String.Empty
        61. End Function
        62. Public Function GetTotalCharacterLimit() As String
        63. Dim request As HttpWebRequest = CType(WebRequest.Create(UsageUrl), HttpWebRequest)
        64. request.Method = "POST"
        65. request.ContentType = "application/x-www-form-urlencoded"
        66. Dim postData As String = $"auth_key={apiKey}"
        67. Dim dataBytes As Byte() = Encoding.UTF8.GetBytes(postData)
        68. request.ContentLength = dataBytes.Length
        69. Using requestStream As Stream = request.GetRequestStream()
        70. requestStream.Write(dataBytes, 0, dataBytes.Length)
        71. End Using
        72. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
        73. Using streamReader As New StreamReader(response.GetResponseStream())
        74. Dim responseJson As String = streamReader.ReadToEnd()
        75. Debug.Print("GetUsageCharacterJSON: " & responseJson)
        76. Dim UsageValue As String = ExtractTotalCharacterLimit(responseJson)
        77. Return UsageValue
        78. End Using
        79. End Function
        80. Private Function ExtractTotalCharacterLimit(jsonString As String) As String
        81. Dim pattern As String = """character_limit"":(\d+)"
        82. Dim match As Match = Regex.Match(jsonString, pattern)
        83. If match.Success Then
        84. Dim UsageValue As String = match.Groups(1).Value
        85. Return UsageValue
        86. End If
        87. Return String.Empty
        88. End Function
        89. End Module

      3. 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.

      4. Nutzung

        Die benötigten Funktionen sind "Public" gesetzt und können aus jedem anderen Modul und jeder Form angesprochen werden

        Übersetzen von Text

        VB.NET-Quellcode

        1. Dim sMyTranslatedText as String = TranslateText("Hallo Welt!", "DE", "EN")


        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

        VB.NET-Quellcode

        1. Dim sMyUsedCharacterCount as String = GetUsedCharacterCount()


        Anzahl der maximal möglichen Characters in der aktuellen Zahlungsperiode (Free = 500000 Characters / Monat)

        VB.NET-Quellcode

        1. Dim sMyCharacterLimit as String = GetTotalCharacterLimit()



        Beste Grüße
        Kevin
        :thumbsup:
      Ich finde das durchaus allgemein nützlich, daher verschoben nach T&T. ~Thunderbolt

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()