【教程】教你找到免費的Google Translate API(谷歌翻譯介面)+C#版的Google翻譯函式
今日,在想要在C#中,利用google翻譯,實現把中文翻譯為英文。
然後就去找,對應翻譯的url和引數是如何使用的。
參考之前自己的的BlogsToWordpress中的Python版本的crifanLib:crifanLib.py中的translateString,然後去寫程式碼,結果竟然發現,無法成功獲得對應的返回的html,因此也就無法找到翻譯後的結果了。
所以,就打算手動自己去找當前可用的google翻譯。
1.找到網頁版的google翻譯,首地址是:
然後使用之前在:
中所介紹的IE9的F12,去除錯。
然後設定好
源語言:中文(簡體)
目標語言:英文
然後再隨便輸入一串漢字,比如:
他們是這樣說的
然後可以看到結果為:
其中,此處是自動實時翻譯,所以沒有點選翻譯按鈕,就可以看到翻譯的結果:
They say
了。
2. 然後接下來去找,到底此翻譯的請求,是哪個地址。
而對於IE9的F12中,抓到很多url,內容繁多,也不容易找到到底哪個是我們想要的。
但是我們現在已經知道了翻譯結果為:
They say
所以,就可以通過F12自帶的搜尋功能,去找到對應的url了:
如上,再點選Back to summary view,就可以看到是這個地址了:
對應的地址,在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)
關於我的庫函式程式碼如何使用,可以去看我的配套教程:
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
感興趣的話,你也可以看看