12.4 在线翻译
Google的在线翻译功能强大,本节的目标就是利用Google的翻译引擎构造自己的翻译系统。要实现的翻译页面的运行效果如图12.4所示。

图12.4 在线翻译的页面效果图
12.4.1 在线翻译的显示页面Google.aspx
在图12.4中可以看出,整个页面的翻译功能有两种:网页翻译和文字翻译。其中网页翻译的实现比较简单,直接传递给Google合适的参数,然后打开google的翻译页面即可。而文字翻译则需要服务器端进行处理。Google.aspx的页面代码如下:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>在线翻译</title>
<script type="text/javascript" src="xmlhttp.js"></script>
<script language="javascript" type="text/javascript">
function Button2_onclick() //网页翻译
{
//post的数据,完全按google的要求
var postdata="u="+$("text1").value+"&langpair="+$ ("langpair1"). value+"&hl ="+$("hl"). value+"&ie="+$("ie").value+"&oe="+$("ie").value;
window.open("http://translate.google.com/translate_p?"+postdata);
}
function Button1_onclick() //文字翻译
{
//post的数据
var postdata=" text="+$("text"). value+"&langpair="+$ ("langpair"). value+"&hl=" +$("hl").value+" &ie="+$("ie").value;
//显示提示文字
$("q").value="正在翻译中,请稍候............";
Request.sendPOST("google.ashx?type=strTo",postdata,rec,null,fal);//发送请求
}
function rec(req,data) //服务器回调函数
{
if(req.responseText=="")
$("q").value = "没有数据,请重新查询!";
else
$("q").value = req.responseText; //显示数据
}
function fal(req,dat) //失败后的回调函数
{
alert('查询失败,请重试!!');
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<div>
<div style="width: 530px">
<table border="0" cellpadding="0"
cellspacing="0" height="90"
width="70%">
<tr>
<td>
<h3>
翻译网页:</h3>
</td>
</tr>
<tr>
<td>
<br />
<input id="text1"
size="45" type="text" value=
"http://"
/></td>
</tr>
<tr>
<td>
<span>从 <select id="langpair1">
<option value="en|de">英语 翻译成 德语</option>
<option value="en|es">英语 翻译成 西班牙语</option>
<option value="en|fr">英语 翻译成 法语</option>
<option value="en|it">英语 翻译成 意大利语</option>
<option value="en|pt">英语 翻译成 葡萄牙语</option>
<option value="en|ar">英语 翻译成 阿拉伯文BETA </option>
<option value="en|ja">英语 翻译成 日语 BETA</option>
<op tion value="en|ko">英语 翻译成 朝鲜语 BETA </option>
<option value="en|zh-CN">英语 翻译成 中文(简体) BETA
</option>
<option value="de|en">德语 翻译成 英语</option>
<option value="de|fr">德语 翻译成 法语</option>
<option value="es|en">西班牙语 翻译成 英语</option>
<option value="fr|en">法语 翻译成 英语</option>
<option value="fr|de">法语 翻译成 德语</option>
<option value="it|en">意大利语 翻译成 英语</option>
<option value="pt|en">葡萄牙语 翻译成 英语</option>
<option
value="ar|en">阿拉伯文 翻译成 英语 BETA
</option>
<option value="ja|en">日语 翻译成 英语 BETA</option>
<option value="ko|en">朝鲜语 翻译成 英语 BETA
</option>
<option
selected="selected" value="zh-CN|en">
中文(简体) 翻译成 英语 BETA</option>
</select></span>
<input name="Submit2"
onclick="Button2_onclick()"
type="button"value="翻 译" /></td>
</tr>
</table>
<br />
<table border="0" cellpadding="0" cellspacing="0" class="tb" width="70%">
<tr>
<td height="30">
<h3>
翻译下列文字:</h3>
</td>
</tr>
<tr>
<td>
<br />
<textarea id="text" cols="40" rows="6"></textarea></td>
</tr>
<tr>
<td height="30">
<span>从 </span>
<select id="langpair">
<option value="en|de">英语 翻译成 德语</option>
<option value="en|es">英语 翻译成 西班牙语</option>
<option value="en|fr">英语 翻译成 法语</option>
<option value="en|it">英语 翻译成 意大利语</option>
<option value="en|pt">英语 翻译成 葡萄牙语</option>
<option
value="en|ar">英语 翻译成 阿拉伯文 BETA
</option>
<option
value="en|ja">英语 翻译成 日语 BETA
</option>
<option
value="en|ko">英语 翻译成 朝鲜语 BETA
</option>
<option
value="en|zh-CN">英语 翻译成 中文(简体) BETA
</option>
<option value="de|en">德语 翻译成 英语</option>
<option value="de|fr">德语 翻译成 法语</option>
<option value="es|en">西班牙语 翻译成 英语</option>
<option value="fr|en">法语 翻译成 英语</option>
<option value="fr|de">法语 翻译成 德语</option>
<option value="it|en">意大利语 翻译成 英语</option>
<option value="pt|en">葡萄牙语 翻译成 英语</option>
<option value="ar|en">阿拉伯文 翻译成 英语 BETA
</option>
<option value="ja|en">日语 翻译成 英语 BETA</option>
<option
value="ko|en">朝鲜语 翻译成 英语 BETA
</option>
<option
selected="selected" value="zh-CN|en">
中文(简体) 翻译成 英语 BETA</option>
</select>
<input
name="Submit" onclick="Button1_onclick()"
type="button"
value="翻 译" /></td>
</tr>
<tr>
<td>
<textarea id="q" cols="40" rows="6"></textarea></td>
</tr>
</table>
<input id="hl" type="hidden" value="zh-CN" /><input id="ie" type="hidden" value="UTF8" /> <br />
<br />
</div>
</div>
</div>
</form>
</body>
</html>
12.4.2 在线翻译的处理类Google
文字翻译的服务器端处理页面是Google.ashx。它的处理逻辑比较简单:首先接收客户端传递过来的参数,按照Google的特定格式把这些参数传递到Google页面。然后对Google返回的结果进行一系列过滤操作,并把其结果返回客户端显示。Google.ashx的实现代码如下:
<%@ WebHandler Language="C#" Class="Google" %>
using System;
using System.Web;
using System.Text.RegularExpressions;
using System.Xml;
using System.Text;
//在线翻译的handler
public class Google : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string[] postname = context.Request.Params.AllKeys; //所有请求的参数
StringBuilder topost = new StringBuilder();
for (int i = 0; i < postname.Length; i++) //遍历各参数,构造post字符串
{
topost.AppendFormat("{0}={1}&",
postname[i], context.Server.UrlEncode
(context.Request.Params[postname[i]]));
}
//获得翻译结果
string result = Thief.Post("http://translate.google.com/translate_t", topost.ToString());
//删除不需要的部分
result =
Regex.Match(result, "<div id=result_box dir=ltr>[\\s\\S]*?</div>").
Value;
result = result.Substring(27);
result = result.Substring(0, result.Length - 6);
context.Response.Write(result); //输出结果
}
public bool IsReusable //不重用
{
get
{
return false;
}
}
}







