-2
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”这个词翻译成德语但我得​​到的结果是在消息框中是一个很长的文本,其中包含所有谷歌网站。

我试图手动访问字符串 url 地址中的网站,并且它的工作即时到谷歌翻译网站。

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

我尝试过使用断点,发现这部分成功总是返回 false 不知道为什么:

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

2 回答 2

1

我认为你没有从你的代码和谷歌获得你的 html 结果中的翻译文本或值。

原因:

如果您通过浏览器执行此操作,它不会翻译成您期望的语言,例如:

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

我使用langpair=deorlangpair=German并且不起作用,它总是显示“hi”作为我的初始文本,而不是“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);

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

建议:

  • 使用控制台应用程序并且没有 Windows 窗体,它会更快。

警告:

  • “谷歌不是免费的翻译工具。你所做的是违反条款”。

希望这可以帮助 :-)

于 2012-04-25T01:18:28.347 回答
0

使用正则表达式以外的东西解析 html 会更容易,更健壮。然后,您可以在解析后的 H​​TML 树中搜索结果并从那里提取它。

请参阅在 C# 中解析 html 的最佳方法是什么?

于 2012-04-25T00:28:37.877 回答