在C#中使用谷歌翻译

57
我需要使用谷歌翻译服务翻译一些文本,但我找到的所有代码都无法正常工作。我认为这是因为他们已经更改了他们的服务。如果有人有可用的代码,我将非常高兴。
8个回答


23

第一个代码示例不起作用的原因是页面的布局已经改变。根据该页面上的警告:“翻译字符串是由接近底部的正则表达式获取的。这可能会改变,您必须保持它的最新状态。”

我认为这应该可以暂时解决问题,至少在他们再次更改页面之前。


public string TranslateText(string input, string languagePair)
{
    string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
    WebClient webClient = new WebClient();
    webClient.Encoding = System.Text.Encoding.UTF8;
    string result = webClient.DownloadString(url);
    result = result.Substring(result.IndexOf("<span title=\"") + "<span title=\"".Length);
    result = result.Substring(result.IndexOf(">") + 1);
    result = result.Substring(0, result.IndexOf("</span>"));
    return result.Trim();
}


我应该如何传递 languagePair?请给我一个例子。 - Learner
2
@Naresh:将其作为 en|hi 传递。en 表示英语,hi 表示印地语。 - Naresh Ravlani
2
更新:这个技巧不再起作用了。 - AISAC

20

我发现这段代码适用于我:

public String Translate(String word)
{
    var toLanguage = "en";//English
    var fromLanguage = "de";//Deutsch
    var url = $"https://translate.googleapis.com/translate_a/single?client=gtx&sl={fromLanguage}&tl={toLanguage}&dt=t&q={HttpUtility.UrlEncode(word)}";
    var webClient = new WebClient
    {
        Encoding = System.Text.Encoding.UTF8
    };
    var result = webClient.DownloadString(url);
    try
    {
        result = result.Substring(4, result.IndexOf("\"", 4, StringComparison.Ordinal) - 4);
        return result;
    }
    catch
    {
        return "Error";
    }
}

1
这段代码运行得很完美,但是对于阿拉伯文本,你只需要添加以下内容: webClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); - ASalameh
2
虽然不完美,但在使用较多后,API会出现503错误。 - BigBang1112

4
谷歌翻译工具包是一个开源库,可以在http://ggltranslate.codeplex.com/上获取。
Translator gt = new Translator();
/*using cache*/
DemoWriter dw = new DemoWriter();
gt.KeyGen = new SimpleKeyGen();
gt.CacheManager = new SimleCacheManager();
gt.Writer = dw;
Translator.TranslatedPost post = gt.GetTranslatedPost("Hello world", LanguageConst.ENGLISH, LanguageConst.CHINESE);
Translator.TranslatedPost post2 = gt.GetTranslatedPost("I'm Jeff", LanguageConst.ENGLISH, LanguageConst.CHINESE);
this.result.InnerHtml = "<p>" + post.text +post2.text+ "</p>";
dw.WriteToFile();

2
当我使用上述代码时,它显示的翻译文本是问号(???????)。然后我将WebClient转换为HttpClient,然后得到了准确的结果。因此,您可以使用以下代码。
public static string TranslateText( string input, string languagePair)       
{
    string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
    HttpClient httpClient = new HttpClient();
    string result = httpClient.GetStringAsync(url).Result;
    result = result.Substring(result.IndexOf("<span title=\"") + "<span title=\"".Length);
    result = result.Substring(result.IndexOf(">") + 1);
    result = result.Substring(0, result.IndexOf("</span>"));
    return result.Trim();
}

您需要调用一个函数。您需要输入任何语言对的前两个字母。
从英语(en)到乌尔都语(ur)。
TranslateText(line, "en|ur")

2
这是最好的工作解决方案。 - Amir Hajiha
您好,这个解决方案还有效吗?在我的情况下,它没有在返回的HTML字符串中找到"<span title..."。谢谢。 - Robert Smith
1
这个现在可以使用:https://www.codeproject.com/Tips/5247661/Google-Translate-API-Usage-in-Csharp - Robert Smith

1

这是我略微不同的代码,也解决了编码问题:

public string TranslateText(string input, string languagePair)
{
    string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
    WebClient webClient = new WebClient();
    webClient.Encoding = System.Text.Encoding.Default;
    string result = webClient.DownloadString(url);
    result = result.Substring(result.IndexOf("TRANSLATED_TEXT"));
    result = result.Substring(result.IndexOf("'")+1);
    result = result.Substring(0, result.IndexOf("'"));
    return result;
}

函数调用的示例:

var input_language = "en";
var output_language = "es";
var result = TranslateText("Hello", input_language + "|" + output_language);

结果将会是“Hola”。

不起作用。显示 System.Net.WebException: 远程服务器返回错误:(404)未找到。 - Gray Programmerz

0

0

Google将于2011年底关闭翻译API,因此您应该寻找替代方案!


6
有一个付费的v2版本,该版本尚未停用。 - Christopher Edwards

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接