1. 程式人生 > >【教程】教你找到免費的Google Translate API(谷歌翻譯介面)+C#版的Google翻譯函式

【教程】教你找到免費的Google Translate API(谷歌翻譯介面)+C#版的Google翻譯函式

今日,在想要在C#中,利用google翻譯,實現把中文翻譯為英文。

然後就去找,對應翻譯的url和引數是如何使用的。

參考之前自己的的BlogsToWordpress中的Python版本的crifanLibcrifanLib.py中的translateString,然後去寫程式碼,結果竟然發現,無法成功獲得對應的返回的html,因此也就無法找到翻譯後的結果了。

所以,就打算手動自己去找當前可用的google翻譯。

1.找到網頁版的google翻譯,首地址是:    

然後使用之前在:

中所介紹的IE9的F12,去除錯。

然後設定好

源語言:中文(簡體)

目標語言:英文

然後再隨便輸入一串漢字,比如:

他們是這樣說的

然後可以看到結果為:

tamenshizheyangshuode

其中,此處是自動實時翻譯,所以沒有點選翻譯按鈕,就可以看到翻譯的結果:

They say

了。

2. 然後接下來去找,到底此翻譯的請求,是哪個地址。

而對於IE9的F12中,抓到很多url,內容繁多,也不容易找到到底哪個是我們想要的。

但是我們現在已經知道了翻譯結果為:

They say

所以,就可以通過F12自帶的搜尋功能,去找到對應的url了:

click back to summary view

如上,再點選Back to summary view,就可以看到是這個地址了:

find this url

對應的地址,在Detail view中,拷貝出來就是:

然後將其分解為:

http://translate.google.cn/translate_a/t?

   
client=t&    
text=%E4%BB%96%E4%BB%AC%E6%98%AF%E8%BF%99%E6%A0%B7%E8%AF%B4%E7%9A%84&    
hl=zh-CN&    
sl=zh-CN&    
tl=en&    
ie=UTF-8&    
oe=UTF-8&    
multires=1&    
otf=1&    
pc=1&    
it=srcd_gms.1378&    
ssel=4&    
tsel=6&    
sc=1

3. 由此資訊,便可以去寫程式碼了。

經過一番程式碼除錯,最後搞定:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 //----------------------------------------------------------------------------- //translate strToTranslate from fromLanguage to toLanguage //return the translated string //return empty string if error //some frequently used language abbrv: //Chinese Simplified:   zh-CN //Chinese Traditional:  zh-TW //English:              en //German:               de //Japanese:             ja //Korean:               ko //French:               fr    //more can be found at: public string translateString(string strToTranslate, string fromLanguage, string toLanguage) { string translatedStr = ""; string transRetHtml = ""; //Dictionary<string, string> postDict = new Dictionary<string, string>(); //postDict.Add("hl", "zh-CN"); //postDict.Add("ie", "UTF-8"); //postDict.Add("text", strToTranslate); //postDict.Add("langpair", fromLanguage + "|" + toLanguage); //const string googleTransHtmlCharset = "UTF-8"; //string transRetHtml = getUrlRespHtml(googleTranslateUrl, null,googleTransHtmlCharset, postDict); ////http://translate.google.cn/#zh-CN/en/%E4%BB%96%E4%BB%AC%E6%98%AF%E8%BF%99%E6%A0%B7%E8%AF%B4%E7%9A%84 //strToTranslate = "他們是這樣說的"; //string encodedStr = HttpUtility.UrlEncode(strToTranslate); //string googleTransUrl = googleTransBaseUrl + fromLanguage + "/" + toLanguage + "/" + encodedStr; //string transRetHtml = getUrlRespHtml(googleTransUrl); //strToTranslate = "他們是這樣說的"; string encodedStr = HttpUtility.UrlEncode(strToTranslate); string googleTransUrl = googleTransBaseUrl; googleTransUrl  += "&client=" + "t"; googleTransUrl += "&text=" + encodedStr; googleTransUrl += "&hl=" + "zh-CN"; googleTransUrl += "&sl=" + fromLanguage;// source   language googleTransUrl += "&tl=" + toLanguage;  // to       language googleTransUrl += "&ie=" + "UTF-8";     // input    encode googleTransUrl += "&oe=" + "UTF-8";     // output   encode try { transRetHtml = getUrlRespHtml(googleTransUrl); //[[["They say","他們是這樣說的","","Tāmen shì zhèyàng shuō de"]],,"zh-CN",,[["They",[5],0,0,1000,0,1,0],["say",[6],1,0,1000,1,2,0]],[["他們 是",5,[["They",1000,0,0],["they are",0,0,0],["they were",0,0,0],["that they are",0,0,0],["they are the",0,0,0]],[[0,3]],"他們是這樣說的"],["這樣 說",6,[["say",1000,1,0],["said",0,1,0],["say so",0,1,0],["says",0,1,0],["say this",0,1,0]],[[3,6]],""]],,,[["zh-CN"]],1] if (extractSingleStr(@"\[\[\[""(.+?)"","".+?"",", transRetHtml, out translatedStr)) { //extrac out:They say } } catch { // if pass some special string, such as "彭德懷", then will occur 500 error // here tmp not process the error, just omit it here } return translatedStr; } public string transZhcnToEn(string strToTranslate) { return translateString(strToTranslate, "zh-CN", "en"); }

【總結】

此處通過自己除錯,找到的google翻譯的api為:

基地址:

一些固定引數:

client=t

hl=zh-CN:表示本地語言是zh-CN

需要自己設定的引數:

text=%E4%BB%96%E4%BB%AC%E6%98%AF%E8%BF%99%E6%A0%B7%E8%AF%B4%E7%9A%84: 需要翻譯的文字,被encode後的值,%E4%BB%96%E4%BB%AC%E6%98%AF%E8%BF%99%E6%A0%B7%E8%AF%B4%E7%9A%84對應的原文字是:他們是這樣說的。

sl=zh-CN:source language為zh-CN,即需要翻譯的文字是中文簡體  
tl=en:to language,目標語言為en,即要翻譯為英語

ie=UTF-8:input encoding,輸入的文字的編碼為UTF-8  
oe=UTF-8:output encoding,輸出,翻譯後,的文字的編碼為UTF-8

其他可有可無的引數:

multires=1  
otf=1  
pc=1  
it=srcd_gms.1378  
ssel=4  
tsel=6  
sc=1

其中,最最核心的很明顯是sl和tl,相對次要的是ie和oe。

自己根據自己的需要,設定text,sl,tl,(和ie和oe),提交對應的請求,即可獲得如下的返回內容:

[[["They say","他們是這樣說的","","Tāmen shì zhèyàng shuō de"]],,"zh-CN",,[["They",[5],0,0,1000,0,1,0],["say",[6],1,0,1000,1,2,0]],[["他們 是",5,[["They",1000,0,0],["they are",0,0,0],["they were",0,0,0],["that they are",0,0,0],["they are the",0,0,0]],[[0,3]],"他們是這樣說的"],["這樣 說",6,[["say",1000,1,0],["said",0,1,0],["say so",0,1,0],["says",0,1,0],["say this",0,1,0]],[[3,6]],""]],,,[["zh-CN"]],1]

提取其中的最開始的They say,即可實現翻譯的目的了。

【後記 2014-05-19】

1.後來遇到別人問我要相關的完整原始碼,所以在此一併回答:

注:
(1)
關於我的庫函式程式碼如何使用,可以去看我的配套教程:

(2)
https://code.google.com/p/crifanlib/source/browse/#svn%2Ftrunk%2Fcsharp
中,還有其他更多相關的,比如:
crifanLibGoogle.cs
https://code.google.com/p/crifanlib/source/browse/trunk/csharp/crifanLibGoogle.cs
感興趣的話,你也可以看看