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

这是我发到《电脑编程技巧与维护》杂志的一篇文章,一直都没有收到回复,可能是技术含量太低了吧,现在发到博客上。转载请保留出处,谢谢!

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

李健富
(河北理工大学 机械工程学院,河北 唐山 063009)
摘  要:在开发应用软件和网站的过程中,越来越多的地方需要用到翻译功能。利用Google AJAX Language API,我们就可以开发出支持全球30多种语言的全文翻译Web Service
关键词:Google AJAX Language APIWeb服务;JSON;全文翻译
 
The Realization of Web Service of Full Text Translations Based on Google AJAX Language API
Li Jianfu
(Hebei Polytechnic University, Tangshan Hebei 063009)
Abstract: In the process of developing application software and website, the translation function will be used in more conditions. Taking advantage of Google AJAX Language API, we will be able to develop the Web Service supporting full text translations in more than 30 languages.
Key Words: Google AJAX Language API, Web Services, JSON, Full Text Translation.
 
一、引言
 
    随着我国互联网迅猛发展,网络与我们生活结合得越来越紧密,多语言交流越来越频繁,也越来越多地需要用到机器翻译。
作为程序员,在开发软件时需要给用户提供全文翻译的地方也越来越多, Google AJAX Language API是一个非常成熟、易用的API,通过它我们可以实现全球30多种语言全文翻译。
 
二、Google AJAX Language API及相关技术介绍
 
1. Google AJAX Language API
    使用Google AJAX Language API可以实现对用户给定的一段文字进行翻译和检测工作。
2.Web Service
    Web Services是建立可互操作的分布式应用程序的新平台。Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web Service ,我们就可以通过Web Service标准对这些服务进行查询和访问。Web Service是一种应用程序,它可以使用标准的互联网协议,像超文本传输协议(HTTP)和XML,将功能纲领性地体现在互联网和企业内部网上。
Web Service建立在一些通用协议的基础上,如HTTP,SOAP,XML,WSDL,UDDI等。这些协议在涉及到操作系统、对象模型和编程语言的选择时,没有任何倾向,因此Web Service有很强的生命力。
3. JSON
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
    Google AJAX Language API有支持非JavaScript环境的接口,它是以JSON进行数据交互的。
    在.NET Framework 2.0环境下,不能直接反系列化JSON数据。在这里,我们使用开源的Json.NET类库进行JSON反系列化。Json.NET可以在http://www.codeplex.com/Json下载,我们使用Json.NET 1.3.1。
 
三、 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");
}

 

这个Web Service在浏览器中运行的效果如图

 

参考文献

[1]林弘之.Web Services原理与开发实务.北京:电子工业出版社,2003.11

相关下载:http://www.box.net/shared/plpnnrlf8l

 

posted @ 2008-11-07 19:10 木子博客 阅读(...) 评论(...) 编辑 收藏