最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【教程】教你找到免费的Google Translate API(谷歌翻译接口)+C#版的Google翻译函数

Web crifan 26749浏览 0评论

今日,在想要在C#中,利用google翻译,实现把中文翻译为英文。

然后就去找,对应翻译的url和参数是如何使用的。

参考之前自己的的BlogsToWordpress中的Python版本的crifanLibcrifanLib.py中的translateString,然后去写代码,结果竟然发现,无法成功获得对应的返回的html,因此也就无法找到翻译后的结果了。

所以,就打算手动自己去找当前可用的google翻译。


1.找到网页版的google翻译,首地址是:    

http://translate.google.cn/

然后使用之前在:

【总结】浏览器中的开发人员工具(IE9的F12和Chrome的Ctrl+Shift+I)-网页分析的利器

中所介绍的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

然后将其分解为:

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. 由此信息,便可以去写代码了。

经过一番代码调试,最后搞定:

//-----------------------------------------------------------------------------
//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: 
//http://code.google.com/intl/ru/apis/language/translate/v2/using_rest.html#language-params
public string translateString(string strToTranslate, string fromLanguage, string toLanguage)
{
    string translatedStr = "";
    string transRetHtml = "";
  
    ////following refer: http://python.u85.us/viewnews-335.html
    //string googleTranslateUrl = "http://translate.google.cn/translate_t";
    //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
    //string googleTransBaseUrl = "http://translate.google.cn/#";
    //strToTranslate = "他们是这样说的";
    //string encodedStr = HttpUtility.UrlEncode(strToTranslate);
    //string googleTransUrl = googleTransBaseUrl + fromLanguage + "/" + toLanguage + "/" + encodedStr;
    //string transRetHtml = getUrlRespHtml(googleTransUrl);
  
  
    //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&ssel=0&tsel=0&sc=1
    //strToTranslate = "他们是这样说的";
    string encodedStr = HttpUtility.UrlEncode(strToTranslate);
    string googleTransBaseUrl = "http://translate.google.cn/translate_a/t?";
    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为:

基地址:

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

一些固定参数:

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.后来遇到别人问我要相关的完整源码,所以在此一并回答:

直接去:
https://code.google.com/p/crifanlib/
->
https://code.google.com/p/crifanlib/source/checkout
->
浏览Browser
或者下载checkout
对应的:

crifanLib.cs
https://code.google.com/p/crifanlib/source/browse/trunk/csharp/crifanLib.cs
其中就有你要的translateString的源码

注:
(1)
关于我的库函数代码如何使用,可以去看我的配套教程:

9.9. (谷歌)翻译一段话:translateString
9.10. 将中文翻译为英文:transzhcntoen

(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
感兴趣的话,你也可以看看。

转载请注明:在路上 » 【教程】教你找到免费的Google Translate API(谷歌翻译接口)+C#版的Google翻译函数

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (10)

  1. 推荐参考开源翻译接口:https://github.com/hujingshuang/MTrans
    开发者7年前 (2018-05-09)回复
  2. 现在在做翻译,有幸翻到了作者五年前的文章,敬佩! 有机会交个朋友,做个友链!
    SaFly.ORG7年前 (2018-03-05)回复
    • 推荐参考开源翻译接口:https://github.com/hujingshuang/MTrans :mrgreen:
      开发者7年前 (2018-05-09)回复
  3. 貌似已经不可以了 Your client does not have permission to get URL /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 from this server. That’s all we know.
    貌似7年前 (2017-09-07)回复
  4. 唉,现在参数不一样,还加了tk。。。
    红红火火恍恍惚惚8年前 (2017-03-29)回复
  5. This is a Example, Google Translator on C# for you: https://www.youtube.com/watch?v=TTLav5ohOYQ
    Kaitokid14128年前 (2016-07-27)回复
  6. 楼主你好,,我按你的方法试了一下,发现服务器的URL已经发生了变化,而且参数格式也不一样了,楼主能否帮忙看下如何解决?
    DreamLive08159年前 (2016-02-22)回复
  7. 用google浏览器不就得了吗,用ie干什么
    苦咖啡12年前 (2013-07-10)回复
  8. 斑竹,你好!最近在做毕业论文,题目跟你的看到你这个类似。可否发一份完整的源码给我。感激不尽
    tou198112年前 (2013-01-06)回复
    • 等我有空回去找找,看看能否找到这个代码了。 等找到了,再发给你。
      crifan12年前 (2013-01-06)回复
86 queries in 0.187 seconds, using 22.10MB memory