【发布时间】:2011-05-09 12:40:04
【问题描述】:
我需要在我的 C# 代码中进行翻译,babel fish 翻译器。到目前为止,我有这段代码..但我总是得到“错误”字符串,正则表达式部分有问题,有人可以帮我解决这个问题吗?多谢
PS:如果有任何其他编码方式都可以
public string Translate(string resource, System.Globalization.CultureInfo from, System.Globalization.CultureInfo to)
{
string[] VALIDTRANSLATIONMODES = new string[]
{"en_zh", "en_fr", "en_de", "en_it", "en_ja", "en_ko", "en_pt", "en_es",
"zh_en", "fr_en", "fr_de", "de_en", "de_fr", "it_en", "ja_en", "ko_en",
"pt_en", "ru_en", "es_en"};
Uri uri = new Uri("http://www.babelfish.com");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
//request.Referer = BABELFISHREFERER;
string postsourcedata;
string translationmode = "en_fr";
postsourcedata = "lp=" + translationmode +
"&tt=urltext&intl=1&doit=done&urltext=" +
HttpUtility.UrlEncode(resource);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postsourcedata.Length;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
Stream writeStream = request.GetRequestStream();
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(postsourcedata);
writeStream.Write(bytes, 0, bytes.Length);
writeStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8);
string page = readStream.ReadToEnd();
Regex reg = new Regex(@"<div style=padding:10px; lang=..>(.*?)</div>");
MatchCollection matches = reg.Matches(page);
if (matches.Count != 1 || matches[0].Groups.Count != 2)
{
return "erro";
}
return matches[0].Groups[1].Value;
}
【问题讨论】:
-
我的代码中有一部分返回“erro”,这意味着 matchecollection 为空...
-
您正在使用 2004 年发布的教程 (codeproject.com/KB/cpp/translation.aspx) 中的代码,babelfish 很可能更改了它们发送的 html 标记,因此您的正则表达式失败。在那里手动翻译文本,检查 html 源代码并更改您的正则表达式以捕获您需要的内容。
-
是的,我正在使用该教程,因为我没有找到任何其他教程。否则我不知道该怎么做。谢谢直到
-
此外,altavista babelfish 已被雅虎收购,现在可以在 babelfish.yahoo.com 找到。今天在 www.babelfish.com 上运行的站点似乎对自动化不太友好,因为它们要求您在一些 ajax 弹出窗口中提供姓名和电子邮件地址才能获得翻译。可能并非不可能,但也没有您希望的那么容易。
标签: c# .net translation