Using Google Translate/pt
From Lazarus wiki
Jump to navigationJump to search
│
English (en) │
français (fr) │
português (pt) │
Introdução
Existem pelo menos duas maneiras de acessar o Google Translate:
- Uma forma gratuita, mas controlada.
- Usando a API autenticada com OAuth2.
Este é um exemplo de uso do primeiro.
Para obter informações sobre o último, é favor consultar: Google Translate Getting Started
Informações sobre os parâmetros
De acordo com uma resposta no Stack Overflow (What is the meaning of Google Translate query params?) aqui está uma lista dos parâmetros para a chamada HTTP GET:
- sl - código do idioma de origem (auto para detecção automática)
- tl - linguagem de tradução
- q - texto / palavra fonte
- ie - codificação de entrada (um palpite)
- oe - codificação de saída (um palpite)
- dt - pode ser incluído mais de uma vez e especifica o que retornar na resposta
- dj - resposta JSON com nomes em vez de apenas matrizes (dj=1)
Aqui estão alguns valores para dt:
- t - tradução do texto fonte
- at - traduções alternativas
- rm - transcrição / transliteração de textos fonte e traduzidos
- bd - dicionário, caso o texto de origem seja uma palavra (você obtém traduções com artigos, traduções reversas, etc.)
- md - definições de texto de origem, se for uma palavra
- ss - sinônimos de texto fonte, se for uma palavra
- ex - exemplos
- rw - Veja também a lista
Contactando o Google
Esta função retornará a resposta em JSON.
uses
{...}, fpjson, fphttpclient, opensslsockets, {...}
function CallGoogleTranslate(AURL: String): TJSONStringType;
var
client: TFPHTTPClient;
doc: TStringList;
begin
Result:= EmptyStr;
doc:=TStringList.Create;
client:=TFPHTTPClient.Create(nil);
try
client.Get(AURL,doc);
Result:=doc.Text;
finally
doc.Free;
client.Free;
end;
end;
Analisando a resposta baseada em matriz JSON
uses
{...}, fpjson, jsonparser, HTTPDefs, {...}
const
cArrayShortLanguages: Array [0..7] of String = (
'auto',
'en',
'pt',
'pl',
'fr',
'es',
'it',
'ru'
);
procedure ParseArraysTranslate;
var
URL: String;
Index: integer;
strResponse: TJSONStringType;
jdResponse, jdTranslation, jdTranslationArray: TJSONData;
jaTranslation, jaTranslationArray: TJSONArray;
begin
URL:='https://translate.googleapis.com/translate_a/single?client=gtx'
+'&q='+HTTPEncode({** COLOQUE O TEXTO PARA TRADUZIR AQUI **})
+'&sl='+cArrayShortLanguages[0] // Deteção automática
+'&tl='+cArrayShortLanguages[1] // Inglês
+'&dt=t'
+'&ie=UTF-8&oe=UTF-8'
;
strResponse:= CallGoogleTranslate(URL);
try
jdResponse:= GetJSON(strResponse);
jdTranslation:= jdResponse.FindPath('[0]');
if (jdTranslation <> nil) and (jdTranslation.JSONType = jtArray) then
begin
jaTranslation:= TJSONArray(jdTranslation);
for index:= 0 to Pred(jaTranslation.Count) do
begin
jdTranslationArray:= jaTranslation[Index];
if (jdTranslationArray <> nil) and (jdTranslationArray.JSONType = jtArray) then
begin
jaTranslationArray:= TJSONArray(jdTranslationArray);
WriteLN(Trim(jaTranslationArray[0].AsString));
end;
end;
end;
finally
jdResponse.Free;
end;
end;
Analisando a resposta baseada em objeto JSON
uses
{...}, fpjson, jsonparser, HTTPDefs, {...}
const
cArrayShortLanguages: Array [0..7] of String = (
'auto',
'en',
'pt',
'pl',
'fr',
'es',
'it',
'ru'
);
cJSONSentences = 'sentences';
cJSONTranslation = 'trans';
cJSONSource = 'src';
procedure ParseObjectTranslate;
var
URL: String;
Index: integer;
strResponse: TJSONStringType;
jdResponse: TJSONData;
joTranslation, joSentence: TJSONObject;
jaSentencesArray: TJSONArray;
begin
Application.ProcessMessages;
URL:='https://translate.googleapis.com/translate_a/single?client=gtx'
+'&q='+HTTPEncode({** COLOQUE O TEXTO PARA TRADUZIR AQUI **})
+'&sl='+cArrayShortLanguages[0] // Deteção automática
+'&tl='+cArrayShortLanguages[1] // Inglês
+'&dt=t&dj=1' // dj=1 faz com que a resposta seja um objeto JSON
+'&ie=UTF-8&oe=UTF-8'
;
strResponse:= CallGoogleTranslate(URL);
try
jdResponse:= GetJSON(strResponse);
if (jdResponse <> nil) and (jdResponse.JSONType = jtObject) then
begin
joTranslation:= TJSONObject(jdResponse);
jaSentencesArray:= TJSONArray(joTranslation.FindPath(cJSONSentences));
for Index:=0 to Pred(jaSentencesArray.Count) do
begin
joSentence:= TJSONObject(jaSentencesArray[Index]);
WriteLN(Trim(joSentence.Get(cJSONTranslation,'')));
end;
end;
finally
jdResponse.Free;
end;
end;
Links externos
Test Google Translate - Um repositório GitHub que demonstra este exemplo.