为什么这个谷歌翻译代码不起作用?

时间:2012-04-25 00:21:38

标签: c# google-translate

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Text.RegularExpressions;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            TranslateText("hi", "German");
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }


         public static string TranslateText(string input, string languagePair)
        {
            return TranslateText(input, languagePair, System.Text.Encoding.UTF7);
        }

        /// <summary>
        /// Translate Text using Google Translate
        /// </summary>
        /// <param name="input">The string you want translated</param>
        /// <param name="languagePair">2 letter Language Pair, delimited by "|". 
        /// e.g. "en|da" language pair means to translate from English to Danish</param>
        /// <param name="encoding">The encoding.</param>
        /// <returns>Translated to String</returns>
        public static string TranslateText(string input, string languagePair, Encoding encoding)
        {
            string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);

            string result = String.Empty;

            using (WebClient webClient = new WebClient())
            {
                webClient.Encoding = encoding;
                result = webClient.DownloadString(url);
            }

            Match m = Regex.Match(result, "(?<=<div id=result_box dir=\"ltr\">)(.*?)(?=</div>)");

            if (m.Success)
                result = m.Value;
            MessageBox.Show(result);

            return result;
        }

    }
}

我在构造函数中添加了一行:

TranslateText("hi", "German");

在底部,我补充道:

MessageBox.Show(result);

我想测试将“hi”这个词翻译成德语 但是,我在消息框中获得的结果是一个包含所有谷歌网站的非常长的文本。

我试图通过字符串网址及其工作方式进入谷歌翻译网站。

我不明白为什么它起作用。 我想稍后在文本文件中输入“hi”一些文本。

我试过使用断点并发现这部分成功是一直返回false不知道原因:

if (m.Success)
    result = m.Value;

2 个答案:

答案 0 :(得分:1)

我认为您没有从代码和Google中获取html结果中的翻译文本或值。

<强>原因:

如果您通过浏览器执行此操作,则不会转换为您期望的语言,例如:

http://www.google.com/translate_t?hl=en&ie=UTF8&text=hi&langpair=de

我使用langpair=delangpair=German并且不起作用,它显示我总是“喜欢”作为我的初始文本而不是“hallo”(德语文本)。

好吧,只是回答你的问题以获取文本,请执行以下操作:

将此方法添加到您的课程中:

public static string getBetween(string strSource, string strStart, string strEnd)
{
    int Start, End;
    if (strSource.Contains(strStart) && strSource.Contains(strEnd))
    {
        Start = strSource.IndexOf(strStart, 0) + strStart.Length;
        End = strSource.IndexOf(strEnd, Start);
        return strSource.Substring(Start, End - Start);
    }
    else
    {
        return "";
    }
}

在“TranslateText”方法中更改以下内容:

    //Match m = Regex.Match(result, "(?<=<div id=result_box dir=\"ltr\">)(.*?)(?=</div>)");
    string text = getBetween(result, "<span id=result_box class=\"short_text\">", "</span>");

    //if (m.Success)
    //    result = m.Value;
    return text;

现在执行您的代码:

// this will return empty ("") if no text found.
// or any problem happens (like lose your internet connection)
string translatedText = TranslateText("hi", "German");
Console.Write(translatedText);

此时,如果您从谷歌获得翻译文本,它将在您的应用程序中检索。

<强>建议:

  • 使用控制台应用程序而不使用Windows窗体,它会更快。

警告:

  • “Google不是免费的翻译工具。您所做的是违反条款”。

希望这会有所帮助: - )

答案 1 :(得分:0)

使用正则表达式之外的其他东西解析html会更容易,也更健壮。然后,您可以在解析的HTML树中搜索结果并从中提取它。

请参阅What is the best way to parse html in C#?