2012-04-25 12 views
-2
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; 
     } 

    } 
} 

私はコンストラクタで行を追加:なぜこのGoogle翻訳コードは動作していませんか?

TranslateText("hi", "German"); 

を、下に私が追加:

MessageBox.Show(result); 

が、私はドイツ語 に「こんにちは」の単語を翻訳するために、テストのために望んでいた。しかしメッセージボックスに入ると結果は、すべてのGoogleのウェブサイトを含んでいる非常に長いテキストです。

私は、ウェブサイトの文字列URLアドレスとその働いているIMをgoogle translateウェブサイトに近づけようとしました。

なぜ私はそれがdosent仕事を理解していません。 後でテキストファイルのテキストを "hi"の代わりに置きたいと思います。

if (m.Success) 
    result = m.Value; 
+2

Googleが無料の翻訳ツールではありません:-)に役立ちます。あなたがしているのは用語違反です – zerkms

答えて

1

を参照してください。

理由:あなたは、ブラウザを介してこれを実行すると

、それはあなたが期待する言語に翻訳されていない、例:

http://www.google.com/translate_t?hl=en&ie=UTF8&text=hi&langpair=de

私はlangpair=delangpair=Germanを使用していません私の最初のテキストではなく、 "hallo"(ドイツ語のテキスト)ではなく常に "hi"と表示されます。

まあ、ちょうど次の操作を行い、テキストを取得するには、あなたの質問に答えるために:

は、あなたのクラスにこのメソッドを追加します。

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; 

は、今すぐあなたのコードのリクを実行しますEこの:この時点で

// 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); 

は、Googleから翻訳されたテキストを取得する場合、それはあなたのアプリケーションに取得されます。

推奨事項:

  • は、コンソールアプリケーションや窓のないフォームを使用して、それが速くなります。

警告:

  • "Googleが無料の翻訳ツールではありません何をする条件違反です。"。

希望これは

0

は正規表現以外のものを使用してHTMLを解析しやすく、そしてより堅牢になります:私はotの使用ブレークポイントを試してみましたが、この部分の成功は、すべての時間が偽いけない理由がわから返しであることがわかっ

。解析されたHTMLツリーを検索してそこから抽出することができます。

は、私はあなたのコードからあなたのhtmlの結果に翻訳されたテキストまたは値を取得し、また、Googleからされていないと思いますWhat is the best way to parse html in C#?

関連する問題