Nun habe ich doch kurz libretranslate in einer meiner Linux-VMs installiert. Es stimmt, die Variante mit TStrings funktioniert nicht so wie erwartet. Das bekommt man zwar hin, aber einfacher ist es so:
Delphi-Quellcode:
function Translate(const AText, ASourceLang, ADestLang, AApiKey: string): string;
var
Http: TIdHTTP;
Data: TStream;
begin
Http := TIdHTTP.Create(nil);
try
Data := TStringStream.Create(UTF8Encode(
Format('{"q": "%s","source": "%s", "target": "%s", "api_key": "%s"}', [AText, ASourceLang, ADestLang, AApiKey])));
try
Http.Request.ContentType := 'application/json';
Result := UTF8Decode(Http.Post('http://192.168.119.53:5000/translate', Data));
finally
Data.Free;
end;
finally
Http.Free;
end;
end;
ShowMessage(Translate('Länge 8,5 cm', 'de', 'en', ''));
ShowMessage(Translate('Length 8,5 cm', 'en', 'de', ''));
Das funktioniert unter Delphi 2007 und z.B. Delphi 11 analog. Genauso klappt es auch mit ICS. Manuell in den Stream schreiben ist auch dort nicht notwendig.
Wenn du Streams verwendest, funktioniert es mit
Indy und ICS identisch.