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"这个词翻译成德语但是我得到的结果和消息框中是一个很长的文本,其中包含所有谷歌网站。
我试图手动访问字符串网址地址中的网站,并且它的工作正在访问谷歌翻译网站。
我不明白为什么它会起作用。我想稍后从文本文件中放置"嗨"一些文本。
我尝试使用断点,发现这部分成功总是返回错误不知道为什么:
if (m.Success)
result = m.Value;
我认为您没有从代码和Google获得html结果中的翻译文本或值。
原因:
如果您通过浏览器执行此操作,它不会转换为您期望的语言,例如:
http://www.google.com/translate_t?hl=en&ie=UTF8&text=hi&langpair=de
我用了langpair=de
或langpair=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 "";
}
}
在"翻译文本"方法中更改以下内容:
//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);
此时,如果您从谷歌获得翻译后的文本,则会在您的应用中检索该文本。
建议:
- 使用控制台应用程序,没有窗口窗体,它会更快。
警告:
- "谷歌不是一个免费的翻译工具。你所做的是违反条款"。
希望这有帮助:-)
使用正则表达式以外的其他东西解析 html 会更容易、更健壮。然后,您可以在解析的 HTML 树中搜索结果并从那里提取它。
请参阅在 C# 中解析 html 的最佳方法是什么?