My code is also 100% Xojo (except for the HTTP socket where I use MBS CURL... because Xojo HTTPS leak like a sieve.)
Here is what I had to do to get it to work:
"content_type: application/x-amz-json-1.1" // not 1.0 and it does not need to be part of the signed header.
Add header "x-amz-target: AWSShineFrontendService_20170701.TranslateText" // this does need to be part of the signed header... and I did not find this documented... if you find it please let me know where.
So my signed headers are "host;x-amz-date;x-amz-target"
The entire list of headers is:
My query string is empty and I put the entire json request in the socket payload.
I did not have any problems accessing S3 like I did with Translate. If I had not looked at the Translate PHP SDK I still would not have it working.