|
In diesem Tutorial verwenden wir einen Übersetzungsdienst.
Der zu übersetzende Text wird als API-Request übermittelt.
Das Ergebnis der Übersetzung wird im JSON-Format zurückgegeben,
anschließend als String geparst und wieder an GuiXT übergeben.
Für die Eingabe verwenden wir
eine TextBox und greifen später auf den Inhalt über eine
Langtextvariable zu. Der Pushbutton ruft per InputScript eine .NET (VB/C#)
Funktion auf, die später das Ergebnis der Übersetzung in die
Langtextvariable der zweiten Textbox stellt:
Inputscript "translate_text.txt":
|
Implementierung
der .NET (VB/C#) Funktion:
Ändern Projekt Sie den Typ des Projekts zu Klassenbibliothek (DLL):

Fügen Sie zudem noch eine Referenz auf System.Text.Json und System.Memory hinzu.

Kopieren Sie bitte
anschließend alle erstellten DLLs in
das Verzeichnis, das sie im GuiXT Profile angegeben haben.
Das .NET (VB/C#) Coding sieht folgendermaßen aus:
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
public class DeepLClient
{
private readonly HttpClient _httpClient;
private string _apiKey;
private bool apiKeySet = false;
public DeepLClient()
{
_httpClient = new HttpClient();
}
public void SetAPIKey(string apiKey)
{
_apiKey = apiKey;
}
public async Task<string> TranslateAsync(
string text,
string targetLang,
string sourceLang = null)
{
System.Net.ServicePointManager.SecurityProtocol =
System.Net.SecurityProtocolType.Tls12;
var url = "https://api-free.deepl.com/v2/translate";
var content = new StringContent(
BuildRequestBody(text, targetLang, sourceLang),
Encoding.UTF8,
"application/x-www-form-urlencoded"
);
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Headers.Add("Authorization",
$"DeepL-Auth-Key {_apiKey}");
request.Content = content;
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
using (var doc = JsonDocument.Parse(json))
{
return doc.RootElement
.GetProperty("translations")[0]
.GetProperty("text")
.GetString();
}
}
public string Translate(
string text,
string targetLang,
string sourceLang = null)
{
return TranslateAsync(text, targetLang, sourceLang)
.GetAwaiter()
.GetResult();
}
private string BuildRequestBody(
string text,
string targetLang,
string sourceLang)
{
var sb = new StringBuilder();
sb.Append($"text={Uri.EscapeDataString(text)}");
sb.Append($"⌖_lang={targetLang}");
if (!string.IsNullOrEmpty(sourceLang))
{
sb.Append($"&source_lang={sourceLang}");
}
return sb.ToString();
}
}