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;
答案 0 :(得分:1)
我认为您没有从代码和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 "";
}
}
在“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);
此时,如果您从谷歌获得翻译文本,它将在您的应用程序中检索。
<强>建议:强>
警告:强>
希望这会有所帮助: - )
答案 1 :(得分:0)
使用正则表达式之外的其他东西解析html会更容易,也更健壮。然后,您可以在解析的HTML树中搜索结果并从中提取它。