Using Google Translate/fr

From Free Pascal wiki
Revision as of 23:30, 1 May 2020 by E-ric (talk | contribs) (Total translation.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

English (en) français (fr) português (pt)

Vue d'ensemble

Google Translate a plusieurs frontaux (front ends). Si vous voulez traduire des textes, vous devez payer et obtenir une clé.

https://developers.google.com/translate/v2/getting_started

Exemple simple Simple pour des traductions occasionnelles

Cet example démontre comment interroger le traducteur via le TFPHTTPClient et analyser le premier tableau du JSON retourné. Même si cet exemple est écrit en utilisant Lazarus, il peut être facilement adapté pour une utilisation avec FPC.

uses
  lazlogger, fpjson, fphttpclient, HTTPDefs;

function DownloadText(const URL: string): TStrings;
var
  client: TFPHTTPClient;
  doc: TStringList;
begin
  Result:=nil;
  doc:=TStringList.Create;
  client:=TFPHTTPClient.Create(nil);
  try
    client.Get(URL,doc);
    Result:=doc;
    doc:=nil;
  finally
    doc.Free;
    client.Free;
  end;
end;

function AskGoogleTranslate(OriginalText, SourceLang, TargetLang: string;
  out TranslatedText, ErrorMessage: string): boolean;
var
  doc: TStrings;
  URL: String;
  JSON: String;
  p: PChar;
  i: Integer;
  StartPos: PChar;
  Line: TJSONStringType;
  Level: Integer;
begin
  Result:=false;
  ErrorMessage:='';
  TranslatedText:='';
  if (SourceLang='') or (TargetLang='') then begin
    ErrorMessage:='missing language parameter';
    exit;
  end;
  if OriginalText='' then exit;

  // download JSON
  URL:='http://translate.google.com/translate_a/t?client=t'
    +'&text='+HTTPEncode(OriginalText)
    +'&sl='+SourceLang
    +'&tl='+TargetLang
    +'&sc=1'
    +'&ssel=0&tsel=0'
    +'&ie=UTF-8&oe=UTF-8'
    ;
  try
    doc:=DownloadText(URL);
  except
    on E: Exception do begin
      debugln(['AskGoogleTranslate failed URL=',URL,' Error=',E.Message]);
      ErrorMessage:='query failed: '+E.Message;
      exit;
    end;
  end;
  try
    // parse JSON
    // For example:
    //  [[["Erster Satz . ","First sentence.","",""],["Zweiter Satz . ","Second sentence.","",""]],
    JSON:=doc.Text;
    p:=PChar(JSON);
    Level:=0;
    i:=0;
    repeat
      case p^ of
      #0: break;
      '[':
        begin
          inc(Level);
          i:=0;
        end;
      ']':
        begin
          dec(Level);
          if Level=1 then break;
        end;
      ',':
        inc(i);
      '"':
        begin
          inc(p);
          StartPos:=p;
          repeat
            case p^ of
            #0,'"': break;
            '\':
              begin
                inc(p);
                if p^=#0 then break;
              end;
            end;
            inc(p);
          until false;
          if i=0 then begin
            Line:=JSONStringToString(copy(JSON,StartPos-PChar(JSON)+1,p-StartPos));
            TranslatedText:=TranslatedText+Line;
          end;
          if p^=#0 then break;
        end;
      end;
      inc(p);
    until false;
  finally
    doc.Free;
  end;
  Result:=true;
end;

// here is an example how to translate English(en) to German(de)
procedure TForm1.Button1Click(Sender: TObject);
var
  ErrorMessage: string;
  TranslatedText: string;
begin
  if not AskGoogleTranslate('First sentence. Second sentence.','en','de',TranslatedText,ErrorMessage)
  then begin
    debugln(['AskGoogleTranslate failed: ',ErrorMessage]);
  end else begin
    debugln(['TForm1.FormCreate Translation: ',TranslatedText]);
  end;
end;