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: Alles auswählen
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]
Code: Alles auswählen
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
\\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.