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

テストで「hi」という単語をドイツ語に翻訳したかったのですが、メッセージボックスに表示される結果は非常に長いテキストで、すべてのgoogleWebサイトが含まれています。

私は手動で文字列のURLアドレスのWebサイトにアクセスしようとしましたが、その機能はgoogletranslateWebサイトにアクセスしました。

なぜそれが機能しないのか理解できません。後で、代わりにテキストファイルのテキストを「こんにちは」と表示したいと思います。

ブレークポイントを使用してみましたが、この部分は常に成功であり、falseが返されることがわかりました。理由はわかりません。

if (m.Success)
    result = m.Value;
4

2 に答える 2

1

私はあなたがあなたのコードとグーグルからあなたのhtml結果の翻訳されたテキストまたは価値を得ていないと思います。

理由:

ブラウザからこれを実行すると、期待する言語に翻訳されません。例:

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

使用したlangpair=delangpair=German、機能しません。最初のテキストとして常に「hi」が表示され、「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;

次に、次のようにコードを実行します。

// 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から翻訳されたテキストを取得すると、アプリで取得されます。

推奨事項:

  • コンソールアプリケーションを使用し、Windowsフォームを使用しないでください。高速になります。

警告:

  • 「グーグルは無料の翻訳ツールではありません。あなたがしていることは用語違反です」。

お役に立てれば :-)

于 2012-04-25T01:18:28.347 に答える
0

正規表現以外のものを使用してhtmlを解析する方が簡単で、より堅牢です。次に、解析されたHTMLツリーで結果を検索し、そこから抽出できます。

C#でHTMLを解析するための最良の方法は何ですか?を参照してください。

于 2012-04-25T00:28:37.877 に答える