JSON 之 SuperObject(17): 实例 - 借用 Google 实现全文翻译

调用 Google 翻译的地址格式:

http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + 原始文本 + "&langpair=" + 原语言 + "%7C" + 目标语言



返回的数据格式如下, 可以用 responseData.translatedText 简单获取:

{
  "responseData" : {"translatedText" : "返回的文本"}, 
  "responseDetails" : null, 
  "responseStatus" : 200
}


本例效果图:



代码文件:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses MsXML, SuperObject;

//字符串到 UTF8 编码的函数, 用于 Google 地址
function ToUTF8Encode(str: string): string;
var
  b: Byte;
begin
  for b in BytesOf(UTF8Encode(str)) do
    Result := Format('%s%s%.2x', [Result, '%', b]);
end;

//翻译函数
function Translate(str, RequestLanguage, ResultLanguage: string): string;
const
  BaseUrl = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=';
var
  Url: string;
  jo: ISuperObject;
  req: IXMLHTTPRequest;
begin
  Url := BaseUrl + ToUTF8Encode(str) + '&langpair=' + RequestLanguage + '%7C' + ResultLanguage;
  req := CoXMLHTTP.Create;
  req.open('Get', Url, False, EmptyParam, EmptyParam);
  req.send(EmptyParam);
  jo := SO(req.responseText);
  Result := jo.Format('%responseData.translatedText%');
end;

//英译汉
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo2.Text := Translate(Memo1.Text, 'en', 'zh-cn');
end;

//汉译英
procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Text := Translate(Memo2.Text, 'zh-cn', 'en');
end;

end.


窗体文件:


object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 139
  ClientWidth = 459
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Memo1: TMemo
    Left = 0
    Top = 0
    Width = 185
    Height = 139
    Align = alLeft
    Lines.Strings = (
      'Memo1')
    TabOrder = 0
    ExplicitHeight = 202
  end
  object Button1: TButton
    Left = 191
    Top = 24
    Width = 75
    Height = 25
    Caption = #33521#25991' -> '#20013#25991
    TabOrder = 1
    OnClick = Button1Click
  end
  object Memo2: TMemo
    Left = 274
    Top = 0
    Width = 185
    Height = 139
    Align = alRight
    Lines.Strings = (
      'Memo2')
    TabOrder = 2
    ExplicitLeft = 312
    ExplicitTop = -8
    ExplicitHeight = 202
  end
  object Button2: TButton
    Left = 191
    Top = 72
    Width = 75
    Height = 25
    Caption = #33521#25991' <- '#20013#25991
    TabOrder = 3
    OnClick = Button2Click
  end
end
posted @ 2015-09-07 09:21  皮皮鲁PPL  阅读(223)  评论(0编辑  收藏  举报