基于Google API的全文翻译Web Service实现

首先使用Visual Studio 2008新建一个“ASP.NET Web服务应用程序”

由于Google AJAX Language API返回的是JSON格式的数据。所以我们先将下载后的“Newtonsoft.Json.dll”引用到项目,并添加新项“Web服务”将文件命名为“WebService.asmx”。

    Services.asmx的功能流程图如下:

我们需要获得从Google返回的JSON数据,实现方法如下:

/// <summary> 
/// 使用WebRequest获取Google翻译后的内容 
/// </summary> 
/// <param name="strTranslateString">需要翻译的内容</param> 
/// <param name="strRequestLanguage">原文语种</param> 
/// <param name="strResultLanguage">译文语种</param> 
/// <returns></returns> 

private   string  GetGoogleTranslateJSONString( string  strTranslateString, 
string  strRequestLanguage,  string  strResultLanguage) 
{
    WebRequest request 
= HttpWebRequest.Create( 
"http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + strTranslateString + "&langpair=" + strRequestLanguage + "%7C" + strResultLanguage); 
    request.Credentials 
= CredentialCache.DefaultCredentials; 
    HttpWebResponse response 
= 
   (HttpWebResponse)request.GetResponse(); 
   Stream dataStream 
= response.GetResponseStream(); 
   StreamReader reader 
= new StreamReader(dataStream); 
    
string responseFromServer = reader.ReadToEnd(); 
    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 
    
return responseFromServer; 
}

 

实现原理:利用WebRequest把需要翻译的内容提交到Google服务器“http://ajax.googleapis.com/ajax/services/language/translate”,v=1.0是Google AJAX Language API的版本,q参数传递的是需要进行翻译的内容,langpair传递的是需要翻译的内容的语种,“%7C”后面的是译文语种。再使用HttpWebResponse获取Google返回的数据。

    语种必须使用简写格式,如简体中文(zh-CN)、繁体中文(zh-TW)、英语(en)、日语(ja)等。Google AJAX Language API支持的所有语言较多,这里不再一一列出,详情请查阅Google AJAX Language API官方网站的“翻译API类参考”。( http://code.google.com/apis/ajaxlanguage/documentation/reference.html#LangNameArray)

    Google返回的JSON数据格式为:

{"responseData"
    
"translatedText":"Ciao mondo" 
    }

    
"responseDetails"null
    
"responseStatus"200 
}
;

按照Google返回的JSON数据格式,声明反系列化类。

/// <summary> 
/// 译文的反系列化类 
/// </summary> 

public   class  TranslateString 

    
private TranslatedText responsedata; 
    
public TranslatedText responseData 
    

        
get return responsedata; } 
        
set { responsedata = value; } 
    }

    
private string responsedetails; 
    
public string responseDetails 
    

        
get return responsedetails; } 
        
set { responsedetails = value; } 
    }
 
    
private int responsestatus; 
    
public int responseStatus 
    

        
get return responsestatus; } 
        
set { responsestatus = value; } 
    }
 
 
    
/**//// <summary> 
    
/// 译文内容 
    
/// </summary> 

    public class TranslatedText 
   

        
private string translatedtext; 
        
public string translatedText 
        

            
get return translatedtext; } 
            
set { translatedtext = value; } 
        }
 
    }
 
}

对Google返回的数据进行反系列化后,就可以把反系列化后获得的译文返回显现给用户了。

/// <summary>
/// 翻译
/// </summary>
/// <param name="strTranslateString">需要翻译的内容</param>
/// <param name="strRequestLanguage">原文语种</param>
/// <param name="strResultLanguage">译文语种</param>
/// <returns></returns>

[WebMethod(Description = " Multi Language Translate. " )]
public   string  MultiLanguageTranslate( string  strTranslateString,  string  
    strRequestLanguage, 
string  strResultLanguage)
{
    
try
    
{
        
if (!string.IsNullOrEmpty(strTranslateString))
       
{
            TranslateString transtring 
= 
(TranslateString)
Newtonsoft.Json.JavaScriptConvert.DeserializeObject(
GetGoogleTranslateJSONString(strTranslateString, 
    strRequestLanguage, strResultLanguage),
                   
typeof(TranslateString));
            
if (transtring.responseStatus == 200)
                
return transtring.responseData.translatedText;
            
else
                
return "There was an error.";
        }

        
else
        
{
            
return strTranslateString;
        }

    }

    
catch (Exception e)
    
{
        
return e.Message;
    }

}

 

这句“(TranslateString)Newtonsoft.Json.JavaScriptConvert.DeserializeObject(GetGoogleTranslateJSONString(strTranslateString, strRequestLanguage, strResultLanguage), typeof(TranslateString));的作用是将GetGoogleTranslateJSONString(…)方法返回的字符串调用Json.NET的静态方法Newtonsoft.Json.JavaScriptConvert.DeserializeObject实现反系列化,并将其转化为TranslateString类型。

到这里这个Web Service基本上已经完成了。为方便使用,我们再内置两个中英文互译的方法。

/// <summary>
/// 翻译
/// 默认地将英文翻译成简体中文
/// </summary>
/// <param name="TranslateString">需要翻译的内容</param>
/// <returns></returns>

[WebMethod(Description  =   " Translate English to Chinese. " )]
public   string  TranslateEnglishToChinese( string  strTranslateString)
{
    
return MultiLanguageTranslate(strTranslateString, "en""zh-CN");
}


/// <summary>
/// 翻译
/// 默认地将简体中文翻译成英文
/// </summary>
/// <param name="TranslateString">需要翻译的内容</param>
/// <returns></returns>

[WebMethod(Description  =   " Translate Chinese to English. " )]
public   string  TranslateChineseToEnglish( string  strTranslateString)
{
    
return MultiLanguageTranslate(strTranslateString, "zh-CN""en");
}
实现谷歌在线翻译! //load方法 加载语言版本 当前版本号为1 google.load("language", "1"); //版本为1 function initialize() { //得到要翻译的内容 var text = document.getElementById("text").value; //要翻译成哪国语言 默认为中文 var toLanguage = document.getElementById("language").value; //调用google对象的检测要翻译的对象 arg1:要翻译的文本,arg2:回调函数 google.language.detect(text, function(result) { //如果返回值未出现错误(detect该函数用语检测,估计也有过滤的意思) if (!result.error && result.language) { //调用google语言api翻译函数 //arg1:要翻译的内容,arg2:通过过滤后对象所属的语言格式,arg3:要转成的类型,arg4:回调函数 google.language.translate(text, result.language, toLanguage, function(result) { //获得要显示翻译结果textarea对象 var translated = document.getElementById("translation"); //如果对象被翻译成功 类似于java的jdbc结果集对象的 .next()方法 if (result.translation) { //设置要显示翻译结果textarea对象的html值 translated.innerHTML = result.translation; } }); } }); } // setOnLoadCallback 该函数 绑定页面加载完毕 调用initialize函数 类似于jQuery的 $(docuemnt).ready(function(){}) google.setOnLoadCallback(initialize); //选择由哪国语言翻译成另外一国语言 function to_language(str){ document.getElementById("language").value = str; if(str == "zh"){ document.getElementById("show").innerText = "英译汉"; }else if(str == "en"){ document.getElementById("show").innerText = "汉译英"; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值