C # переводчик с переводчиком Babel Fish - PullRequest
0 голосов
/ 09 мая 2011

Мне нужен перевод в моем коде на C #, переводчик babel fish.Пока у меня есть этот код ... но я всегда получаю строку "error", что-то не так с частью регулярного выражения, может кто-нибудь помочь мне с этим один плз ??большое спасибо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;



        }

Ответы [ 3 ]

3 голосов
/ 10 мая 2011

Вот что я в итоге сделал

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);
1 голос
/ 09 мая 2011

Этот предыдущий ответ может помочь: Использование c # для вызова гугл переводчика . Он ссылается на этот проект codeplex: http://languagetranslator.codeplex.com/, который использует API перевода Google.

Может потребоваться несколько минут, чтобы найти код, который выполняет ту работу, которую вы хотите, но я обычно нахожу, что это лучший способ научиться (по крайней мере, для меня!)

0 голосов
/ 09 мая 2011

Ваше регулярное выражение не выполнено, поскольку в загруженном тексте нет примеров того, что вы ищете.

<div style=padding

не существует.Возможно, некоторые цитаты?

<div style="padding //etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...