【问题标题】:C# translator with babel fish translator带有 babel 鱼翻译器的 C# 翻译器
【发布时间】: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


【解决方案1】:

这就是我最终做的

string fromCulture = from.Name;
            string toCulture = to.Name;
            string translationMode = string.Concat(fromCulture, "_", toCulture);

            string url = String.Format("http://babelfish.yahoo.com/translate_txt?lp={0}&tt=urltext&intl=1&doit=done&urltext={1}", translationMode, HttpUtility.UrlEncode(resource));
            WebClient webClient = new WebClient();
            webClient.Encoding = System.Text.Encoding.Default;
            string page = webClient.DownloadString(url);

            int start = page.IndexOf("<div style=\"padding:0.6em;\">") + "<div style=\"padding:0.6em;\">".Length;
            int finish = page.IndexOf("</div>", start);
            string retVal = page.Substring(start, finish - start);

【讨论】:

    【解决方案2】:

    之前的答案可能会有所帮助:Using c# to call google translator。它引用了这个 codeplex 项目:http://languagetranslator.codeplex.com/,它使用了 Google Translation API。

    可能需要一些时间才能找到完成所需工作的代码,但我通常发现这是最好的学习方式(至少对我而言!)

    【讨论】:

    • 我需要用通天鱼翻译器翻译 :(
    • 你确定你需要的是babelfish.com吗?旧的 Alta Vista Babelfish 现在在 Yahoo,babelfish.yahoo.com。如果是,您可以尝试询问 babelfish.com 的人员是否有您可以使用的 API?我认为这样的网络抓取是不允许的。
    【解决方案3】:

    您的正则表达式失败,因为在下载的文本中没有您正在搜索的实例。

    <div style=padding
    

    不存在。也许是一些引号?

    <div style="padding //etc
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2013-10-25
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      相关资源
      最近更新 更多