using System;
using System.Collections.Generic;
using System.Web;
using System.Text;
using System.Net;
using System.Text.RegularExpressions;
namespace Web
{
public class GoogleTranslate
{
private string UrlTemplate = "http://translate.google.com.hk/"; //google翻译URL模板:POST方式请求
private string[] Languages = { "en", "zh-CN", "fr", "ja", "ko" ,"ru"};
#region 常用语言编码
private string AutoDetectLanguage = "auto"; //google自动判断来源语系
#endregion
private static GoogleTranslate translate;
private GoogleTranslate()
{ }
public GoogleTranslate Instance()
{
if (translate == null)
translate = new GoogleTranslate();
return translate;
}
/// <summary>
/// 翻译文本[自动检测源语言类型]
/// </summary>
/// <param name="sourceText">源文本</param>
/// <param name="targetLanguageCode">目标语言类型代码,0英语1汉语2法语3日语4韩语5俄语</param>
/// <returns>翻译结果</returns>
public string Translate(string sourceText, int targetLanguageCode)
{
return Translate(sourceText, AutoDetectLanguage, Languages[targetLanguageCode]);
}
/// <summary>
/// 翻译文本
/// </summary>
/// <param name="sourceText">源文本</param>
/// <param name="sourceLanguageCode">源语言类型代码,如:en、zh-CN、zh-TW、ru等</param>
/// <param name="targetLanguageCode">目标语言类型代码,如:en、zh-CN、zh-TW、ru等</param>
/// <returns>翻译结果</returns>
private string Translate(string sourceText, string sourceLanguageCode, string targetLanguageCode)
{
if (string.IsNullOrEmpty(sourceText) || Regex.IsMatch(sourceText, @"^\s*$"))
{
return sourceText;
}
string strReturn = string.Empty;
#region POST方式实现,无长度限制
string url = UrlTemplate;
//组织请求的数据
string postData = string.Format("langpair={0}&text={1}", HttpUtility.UrlEncode(sourceLanguageCode + "|" + targetLanguageCode), HttpUtility.UrlEncode(sourceText));
byte[] bytes = Encoding.UTF8.GetBytes(postData);
WebClient client = new WebClient();
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
client.Headers.Add("ContentLength", postData.Length.ToString());
byte[] responseData = client.UploadData(url, "POST", bytes);
string strResult = Encoding.UTF8.GetString(responseData); //响应结果
#endregion
#region 获取result_box中的结果
int index = strResult.IndexOf("result_box");
if (index > 0)
{
strResult = strResult.Substring(index);
index = strResult.IndexOf("<span");
strResult = strResult.Substring(index);
index = strResult.IndexOf(">");
strResult = strResult.Substring(index);
index = strResult.IndexOf("</span>");
strResult = strResult.Substring(1, index - 1);
}
#endregion
else strResult = "";
return strResult;
}
}
}