2012-04-25 69 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; 
     } 

    } 
} 

我在構造函數中添加一行:爲什麼谷歌翻譯代碼不起作用?

TranslateText("hi", "German"); 

而且在底部我說:

MessageBox.Show(result); 

我想爲測試這個詞翻譯「喜」德國 但結果即時消息和消息框中是一個非常長的文本,其中包含所有的谷歌網站。

我試圖去網站中的字符串url地址和它的工作即時通訊到谷歌翻譯網站。

我不明白爲什麼它劑量的工作。 我希望以後可以將文本文件中的某些文本「嗨」改爲「嗨」。

我試着OT使用斷點,發現這部分的成功是所有的時間返回false不知道爲什麼:

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

谷歌是不是免費的翻譯工具。你所做的是違反條款 – zerkms 2012-04-25 00:28:50

回答

1

我想你是不是從你的代碼從谷歌獲得在你的HTML結果所轉換的文本或值和也。

原因:

如果您通過瀏覽器執行此,它沒有翻譯的語言,你期望的那樣,例如:

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

我用langpair=delangpair=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; 

現在執行代碼LIK 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); 

在這一點上,如果你從谷歌獲得的翻譯文本,它會在你的應用程序中檢索。

建議:

  • 使用控制檯應用程序,沒有窗戶的形式,它會更快。

警告:

  • 「谷歌不是一個免費的翻譯工具,你要做的就是術語違規。」

希望這有助於:-)