实例介绍
【实例简介】
实现在线汉译英
【实例截图】
【核心代码】
/// <summary>
/// Translates text using Google's online language tools.
/// </summary>
public class Translator : RavSoft.WebResourceProvider
{
#region Constructor
/// <summary>
/// Initializes a new instance of the <see cref="Translator"/> class.
/// </summary>
public Translator()
{
this.SourceLanguage = "English";
this.TargetLanguage = "French";
this.Referer = "http://www.google.com";
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the source "
/// </summary>
/// <value>The source "</value>
public string SourceLanguage
{
get;
set;
}
/// <summary>
/// Gets or sets the target "
/// </summary>
/// <value>The target "</value>
public string TargetLanguage
{
get;
set;
}
/// <summary>
/// Gets or sets the source text.
/// </summary>
/// <value>The source text.</value>
public string SourceText
{
get;
set;
}
/// <summary>
/// Gets the translation.
/// </summary>
/// <value>The translated text.</value>
public string Translation
{
get;
private set;
}
/// <summary>
/// Gets the reverse translation.
/// </summary>
/// <value>The reverse translated text.</value>
public string ReverseTranslation
{
get;
private set;
}
/// <summary>
/// Gets the supported languages.
/// </summary>
public static IEnumerable<string> Languages
{
get
{
Translator.EnsureInitialized();
return Translator._languageModeMap.Keys.OrderBy(p => p);
}
}
#endregion
#region Public methods
/// <summary>
/// Attempts to translate the text.
/// </summary>
public void Translate()
{
// Validate source and target languages
if (string.IsNullOrEmpty(this.SourceLanguage) ||
string.IsNullOrEmpty(this.TargetLanguage) ||
this.SourceLanguage.Trim().Equals(this.TargetLanguage.Trim()))
{
throw new Exception("An invalid source or target language was specified.");
}
// Delegate to base class
this.fetchResource();
}
#endregion
#region WebResourceProvider implementation
/// <summary>
/// Returns the url to be fetched.
/// </summary>
/// <returns>The url to be fetched.</returns>
protected override string getFetchUrl()
{
return "http://translate.google.com/translate_t";
}
/// <summary>
/// Retrieves the POST data (if any) to be sent to the url to be fetched.
/// The data is returned as a string of the form "arg=val[&arg=val]...".
/// </summary>
/// <returns>A string containing the POST data or null if none.</returns>
protected override string getPostData()
{
// Set translation mode
string strPostData = string.Format("hl=en&ie=UTF8&oe=UTF8submit=Translate&langpair={0}|{1}",
Translator.LanguageEnumToIdentifier(this.SourceLanguage),
Translator.LanguageEnumToIdentifier(this.TargetLanguage));
// Set text to be translated
strPostData = "&text=" HttpUtility.UrlEncode(this.SourceText);
return strPostData;
}
/// <summary>
/// Parses the fetched content.
/// </summary>
protected override void parseContent()
{
// Initialize the scraper
this.Translation = string.Empty;
string strContent = this.Content;
RavSoft.StringParser parser = new RavSoft.StringParser(strContent);
// Scrape the translation
string strTranslation = string.Empty;
if (parser.skipToEndOf("<span id=result_box"))
{
while (parser.skipToEndOf("onmouseout=\"this.style.backgroundColor='#fff'\">"))
{
string translatedSegment = string.Empty;
if (parser.extractTo("</span>", ref translatedSegment))
{
strTranslation = " " StringParser.removeHtml(translatedSegment);
}
}
}
#region Fix up the translation
int startClean = 0;
int endClean = 0;
int i = 0;
while (i < strTranslation.Length)
{
if (Char.IsLetterOrDigit(strTranslation[i]))
{
startClean = i;
break;
}
i ;
}
i = strTranslation.Length - 1;
while (i > 0)
{
char ch = strTranslation[i];
if (Char.IsLetterOrDigit(ch) ||
(Char.IsPunctuation(ch) && (ch != '\"')))
{
endClean = i;
break;
}
i--;
}
this.Translation = strTranslation.Substring(startClean, endClean - startClean 1).Replace("\"", "");
#endregion
}
#endregion
#region Private methods
/// <summary>
/// Converts a language to its identifier.
/// </summary>
/// <param name="language">The language."</param>
/// <returns>The identifier or <see cref="string.Empty"/> if none.</returns>
private static string LanguageEnumToIdentifier
(string language)
{
string mode = string.Empty;
Translator.EnsureInitialized();
Translator._languageModeMap.TryGetValue(language, out mode);
return mode;
}
/// <summary>
/// Ensures the translator has been initialized.
/// </summary>
private static void EnsureInitialized()
{
if (Translator._languageModeMap == null)
{
Translator._languageModeMap = new Dictionary<string, string>();
Translator._languageModeMap.Add("Afrikaans", "af");
Translator._languageModeMap.Add("Albanian", "sq");
Translator._languageModeMap.Add("Arabic", "ar");
Translator._languageModeMap.Add("Armenian", "hy");
Translator._languageModeMap.Add("Azerbaijani", "az");
Translator._languageModeMap.Add("Basque", "eu");
Translator._languageModeMap.Add("Belarusian", "be");
Translator._languageModeMap.Add("Bengali", "bn");
Translator._languageModeMap.Add("Bulgarian", "bg");
Translator._languageModeMap.Add("Catalan", "ca");
Translator._languageModeMap.Add("Chinese", "zh-CN");
Translator._languageModeMap.Add("Croatian", "hr");
Translator._languageModeMap.Add("Czech", "cs");
Translator._languageModeMap.Add("Danish", "da");
Translator._languageModeMap.Add("Dutch", "nl");
Translator._languageModeMap.Add("English", "en");
Translator._languageModeMap.Add("Esperanto", "eo");
Translator._languageModeMap.Add("Estonian", "et");
Translator._languageModeMap.Add("Filipino", "tl");
Translator._languageModeMap.Add("Finnish", "fi");
Translator._languageModeMap.Add("French", "fr");
Translator._languageModeMap.Add("Galician", "gl");
Translator._languageModeMap.Add("German", "de");
Translator._languageModeMap.Add("Georgian", "ka");
Translator._languageModeMap.Add("Greek", "el");
Translator._languageModeMap.Add("Haitian Creole", "ht");
Translator._languageModeMap.Add("Hebrew", "iw");
Translator._languageModeMap.Add("Hindi", "hi");
Translator._languageModeMap.Add("Hungarian", "hu");
Translator._languageModeMap.Add("Icelandic", "is");
Translator._languageModeMap.Add("Indonesian", "id");
Translator._languageModeMap.Add("Irish", "ga");
Translator._languageModeMap.Add("Italian", "it");
Translator._languageModeMap.Add("Japanese", "ja");
Translator._languageModeMap.Add("Korean", "ko");
Translator._languageModeMap.Add("Lao", "lo");
Translator._languageModeMap.Add("Latin", "la");
Translator._languageModeMap.Add("Latvian", "lv");
Translator._languageModeMap.Add("Lithuanian", "lt");
Translator._languageModeMap.Add("Macedonian", "mk");
Translator._languageModeMap.Add("Malay", "ms");
Translator._languageModeMap.Add("Maltese", "mt");
Translator._languageModeMap.Add("Norwegian", "no");
Translator._languageModeMap.Add("Persian", "fa");
Translator._languageModeMap.Add("Polish", "pl");
Translator._languageModeMap.Add("Portuguese", "pt");
Translator._languageModeMap.Add("Romanian", "ro");
Translator._languageModeMap.Add("Russian", "ru");
Translator._languageModeMap.Add("Serbian", "sr");
Translator._languageModeMap.Add("Slovak", "sk");
Translator._languageModeMap.Add("Slovenian", "sl");
Translator._languageModeMap.Add("Spanish", "es");
Translator._languageModeMap.Add("Swahili", "sw");
Translator._languageModeMap.Add("Swedish", "sv");
Translator._languageModeMap.Add("Tamil", "ta");
Translator._languageModeMap.Add("Telugu", "te");
Translator._languageModeMap.Add("Thai", "th");
Translator._languageModeMap.Add("Turkish", "tr");
Translator._languageModeMap.Add("Ukrainian", "uk");
Translator._languageModeMap.Add("Urdu", "ur");
Translator._languageModeMap.Add("Vietnamese", "vi");
Translator._languageModeMap.Add("Welsh", "cy");
Translator._languageModeMap.Add("Yiddish", "yi");
}
}
#endregion
#region Fields
/// <summary>
/// The language to translation mode map.
/// </summary>
private static Dictionary<string, string> _languageModeMap;
#endregion
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论