Guten Morgen,
ich bin mit Deepl.com sehr zufrieden.
Meine WinAPI Library wird in vier Sprachen angeboten und die Texte wurden mit Google Translator automatisiert übersetzt. Aufgrund der vielen Beispielcodes (1138 Codes) ist das manuelle Übersetzen sehr zeitaufwendig.
Da ich Deepl.com sehr gut finde, würde ich die Texte mit Deepl.com erneut übersetzen lassen.
Um das Übersetzen automatisieren zu können, brauche ich eine Schnittstelle (HTTP-Request oder JSON-API), damit ich die Texte nicht einzeln manuell einfügen muss.
Auf der folgenden Seite gibt es eine Lösung mit PowerShell, um die Texte per JSON an die Website zu senden:
https://psvmware.wordpress.com/2017/09/ ... owershell/Den Code der Funktion kann man in einer PowerShell-Datei (*.ps1) speichern und diese mit der CMD-Konsole aufrufen.
Ich habe den Code leicht modifiziert, damit man Parameter an die Funktion übergeben kann (Man kann es bestimmt besser lösen, aber so gut bin ich noch nicht in PowerShell.):
Code:
function get-DeepLtranslation ($sentence, $fromLang, $toLang)
{
#Languages available: PL,EN,NL,ES,IT,FR
$url = "https://www.deepl.com/jsonrpc"
$call = '{"jsonrpc":"2.0","method":"LMT_handle_jobs","params":{"jobs":[{"kind":"default","raw_en_sentence":"'+$sentence+'"}],"lang":{"user_preferred_langs":["EN","PL","NL"],"source_lang_user_selected":"'+$fromLang+'","target_lang":"'+$toLang+'"},"priority":-1},"id":15}'
$bytes = [System.Text.Encoding]::ASCII.GetBytes($call)
$web = [System.Net.WebRequest]::Create($url)
$web.Method = "POST"
$web.ContentLength = $bytes.Length
$web.ContentType = "application/x-www-form-urlencoded"
$stream = $web.GetRequestStream()
$stream.Write($bytes,0,$bytes.Length)
$stream.close()
$reader = New-Object System.IO.Streamreader -ArgumentList $web.GetResponse().GetResponseStream()
$answer = ($reader.ReadToEnd()|ConvertFrom-Json).result.translations.beams | select -ExpandProperty 'postprocessed_sentence'
$reader.Close()
return $answer
}
get-DeepLtranslation -sentence $args[0] -fromLang $args[1] -toLang $args[2]
Und jetzt der PB-Code zum Aufrufen dieser ps1-Datei zum Übersetzen:
Code:
EnableExplicit
Define Program
Define PSFile$ = "C:\...\File.ps1"
Define Sentence$ = "Hallo Welt"
Define FromLang$ = "DE"
Define ToLang$ = "EN"
Program = RunProgram("cmd.exe", "/c PowerShell.exe -Command " + Chr(34) + PSFile$ + Chr(34) + " '" + Sentence$ + "' '" + FromLang$ + "' '" + ToLang$ + "'", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If Program
While ProgramRunning(Program)
If AvailableProgramOutput(Program)
Debug ReadProgramString(Program)
;Break;Falls man nur die erste Zeile auslesen möchte
EndIf
Wend
CloseProgram(Program)
EndIf
Ich hoffe, es ist für euch nützlich. Den Code könnt ihr gerne verbessern und hier posten.
\\Edit:Man könnte es wahrscheinlich auch komplett in PB machen, aber das fiel mir erst später ein und bin jetzt zu faul dafür, den Code nach PB zu übersetzen. Aber wenn jemand einen kompletten PB-Code schreiben möchte, dann wäre der Code noch besser.