Usando o tradutor do Google no delphi

Domingo, 25 dUTC Maio dUTC 2008

Para fazer o teste eu montei uma tela básica com 2 TComboBox( cbxIdiomaOrigem, cbxIdiomaDestino), 2 TMemo( mmoOerigem, mmoDestino), e um botão.

Não se esqueça de declarar as seguintes units IdHTTP, HTTPApp, StrUtils;
Tradutor Delphi( usando o Google transtate)

Ao clicar no botão traduzir o seguinte código será executado


//Associar evento ao ao botão
procedure TForm1.TraduzirClick(Sender: TObject);
 //função para traduzir
 function translate(ss,lng1, lng2:string):string;
 var s:widestring;
 a,b:integer;
 http:TIdHTTP;
 begin
 //cria um componente TIdHttp(usando o Indy)
 http:= TIdHTTP.Create;
 try
 //Efetua um get passando como parametros
 //o texto e o par de idiomas
 s:=http.Get('http://translate.google.com/translate_t?text='
 +httpencode(ss)+'&sl='+lng1+'&tl='+lng2);
 //pega o texto traduzido na resposta "s"(html com a resposta)
 a:=posex('>',s,pos('id=result_box',s));
 b:=posex('</div>',s,a);
 //e retorna
 result:=copy(s,a+1,b-a-1);
 finally
 http.Free;
 end;
 end;
var lng1, lng2: String;
begin
 //verifica se os 2 idiomas estão selecionados
 if (cbxIdiomaDestino.ItemIndex =-1) or
 (cbxIdiomaOrigem.ItemIndex = -1) then
 raise Exception.Create('Escolha o Idioma de origem e Destino');

 //pega os idiomas dos Combos
 lng1 := PCHAR(Integer(cbxIdiomaOrigem.Items.Objects[cbxIdiomaOrigem.ItemIndex]));
 lng2 := PCHAR(Integer(cbxIdiomaDestino.Items.Objects[cbxIdiomaDestino.ItemIndex]));

 //chama a tradução
 mmoDestino.Text := translate(mmoOrigem.Text, lng1, lng2);
end;

Para carregar a lista de idiomas declare uma constante


const LANGUAGE : array[ 1..23, 1..2] of String = (('de','Alemão'),
                                                  ('ar','Árabe'),
                                                  ('bg','Búlgaro'),
                                                  ('zh-CN','Chinês'),
                                                  ('ko','Coreano'),
                                                  ('hr','Croata'),
                                                  ('da','Dinamarquês'),
                                                  ('es','Espanhol'),
                                                  ('fi','Finlandês'),
                                                  ('fr','Francês'),
                                                  ('el','Grego'),
                                                  ('hi','Hindi'),
                                                  ('nl','Holandês'),
                                                  ('en','Inglês'),
                                                  ('it','Italiano'),
                                                  ('ja','Japonês'),
                                                  ('no','Norueguês'),
                                                  ('pl','Polonês'),
                                                  ('pt','Português'),
                                                  ('ro','Romeno'),
                                                  ('ru','Russo'),
                                                  ('sv','Sueco'),
                                                  ('cs','Tcheco'));

E no Evento onCreate do Form execute


//associa ao OnCreate do Form
procedure TForm1.FormCreate(Sender: TObject);
var i, j: Integer;
    idioma: PCHAR;
begin
  //preenche os combos com os idiomas
  cbxIdiomaOrigem.Items.Clear;
  for i := Low(LANGUAGE) to High(LANGUAGE) do
  begin
    GetMem(idioma, 1 + Length(LANGUAGE[i,1]));
    StrPCopy(idioma, LANGUAGE[i,1]);
    cbxIdiomaOrigem.Items.AddObject(LANGUAGE[i,2], TObject(Integer(idioma)));
  end;
  cbxIdiomaDestino.Items.Assign(cbxIdiomaOrigem.Items);
end;

2 Respostas a “Usando o tradutor do Google no delphi”

  1. ericsuporte Diz:

    show!
    maneiro este código!

    você sabe pegar informações de uma página e jogar num combobox?
    to tentando desenvolver um chat cliente!
    delphi => php
    delphi <= php

    contato no eric.suporte@gmail.com

  2. Fernando Carvalho Diz:

    Um otimo exemplo da utilização do TidHTTP.
    Parabens!


Deixe uma resposta