Google 翻译






4.94/5 (134投票s)
一个利用 Google 在线自然语言翻译工具威力的对象。
注意
GoogleTranslator
最初是在屏幕抓取是访问 Google 在线翻译工具的唯一方法时编写的。正如本文的论坛中正确指出的那样,更现代的方法是使用 Google 的 AJAX API。有关更多信息,请参见 此 链接。应 CP 读者的要求,GoogleTranslator
的这个屏幕抓取版本将继续维护。
此最新版本的 GoogleTranslator
利用 Google Translate 的 AJAX API 来翻译文本,并通过解析返回的 JSON 内容来检索翻译结果。感谢 CPians @Airstriker82、@Member 9899010 和 @bgsjust 指示我使用这些 API。该代码的最新版本还包括从演示应用程序朗读翻译结果的功能。由于 Google 将语音限制为少数语言中的常见词语,因此当您尝试朗读翻译后的文本时,如果演示程序变得愚蠢,请不要感到惊讶!
这是什么?
![]() |
GoogleTranslator 是一个允许您使用 Google 在线语言工具的力量来翻译文本的对象。该演示应用程序还允许您轻松地执行反向翻译。该应用程序可用作简单短语的简陋资源翻译器,但您最好在确认翻译结果之前先与母语人士确认。 |
我该如何使用它?
您可以通过构建 GoogleTranslator
并调用其 Translate()
方法来使用它。
using RavSoft.GoogleTranslator;
Translator t = new GoogleTranslator();
string translation = t.Translate ("Hello, how are you?", "English", "French");
Console.WriteLine (translation);
Console.WriteLine ("Translated in " + t.TranslationTime.TotalMilliseconds + " mSec");
Console.WriteLine ("Translated speech = " + t.TranslationSpeechUrl);
工作原理
GoogleTranslator 的工作原理是直接调用 Google 的翻译 API,该 API 由其 在线翻译表单 调用并解析结果。
// Initialize
this.Error = null;
this.TranslationSpeechUrl = null;
this.TranslationTime = TimeSpan.Zero;
DateTime tmStart = DateTime.Now;
string translation = string.Empty;
try {
// Download translation
string url = string.Format ("https://translate.googleapis.com/translate_a/single?client=gtx&sl={0}&tl={1}&dt=t&q={2}",
Translator.LanguageEnumToIdentifier (sourceLanguage),
Translator.LanguageEnumToIdentifier (targetLanguage),
HttpUtility.UrlEncode (sourceText));
string outputFile = Path.GetTempFileName();
using (WebClient wc = new WebClient ()) {
wc.Headers.Add ("user-agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 " +
"(KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
wc.DownloadFile(url, outputFile);
}
// Get translated text
if (File.Exists (outputFile)) {
// Get phrase collection
string text = File.ReadAllText(outputFile);
int index = text.IndexOf (string.Format(",,\"{0}\"", Translator.LanguageEnumToIdentifier (sourceLanguage)));
if (index == -1) {
// Translation of single word
int startQuote = text.IndexOf('\"');
if (startQuote != -1) {
int endQuote = text.IndexOf('\"', startQuote + 1);
if (endQuote != -1) {
translation = text.Substring(startQuote + 1, endQuote - startQuote - 1);
}
}
}
else {
// Translation of phrase
text = text.Substring(0, index);
text = text.Replace("],[", ",");
text = text.Replace("]", string.Empty);
text = text.Replace("[", string.Empty);
text = text.Replace("\",\"", "\"");
}
// Get translated phrases
string[] phrases = text.Split (new[] { '\"' }, StringSplitOptions.RemoveEmptyEntries);
for (int i=0; (i < phrases.Count()); i += 2) {
string translatedPhrase = phrases[i];
if (translatedPhrase.StartsWith(",,")) {
i--;
continue;
}
translation += translatedPhrase + " ";
}
// Fix up translation
translation = translation.Trim();
translation = translation.Replace(" ?", "?");
translation = translation.Replace(" !", "!");
translation = translation.Replace(" ,", ",");
translation = translation.Replace(" .", ".");
translation = translation.Replace(" ;", ";");
// And translation speech URL
this.TranslationSpeechUrl = string.Format ("https://translate.googleapis.com/translate_tts?ie=UTF-8&q={0}&tl={1}&total=1&idx=0&textlen={2}&client=gtx",
HttpUtility.UrlEncode (translation),
Translator.LanguageEnumToIdentifier (targetLanguage),
translation.Length);
}
}
catch (Exception ex) {
this.Error = ex;
}
// Return result
this.TranslationTime = DateTime.Now - tmStart;
return translation;
正如您所看到的,用于解析 JSON 结果的逻辑非常简单!
朗读翻译结果
Translator
对象检索将流式传输翻译语音版本的 URL。演示应用程序通过在隐藏的浏览器控件中导航到此 URL 来朗读此内容。如前言中所述,由于 Google 将语音限制为少数语言中的常见词语,因此当您尝试朗读翻译后的文本时,如果演示程序变得愚蠢,请不要感到惊讶!
修订历史
- 2016年3月18日
切换到 Google Translate 插件 API。 由 User-12366202 发现并修复。 谢谢! - 2015年8月6日
更正解析逻辑。 由 Member 11019371 发现并修复。 谢谢! - 2015年5月6日
更正解析逻辑以修复单个单词的翻译。 - 2015年5月5日
更正 Google URL。
删除了所有外部依赖项。 - 2014年3月9日
切换到使用 Google 的 JSON 翻译 API。
添加了TranslationTime
和TranslationSpeakUrl
属性。
调整了演示应用程序 UI,以协助反向翻译和重置英语源和目标。 - 2013年1月13日
增加了对当前完整语言集的支持。
重新修复了将翻译限制为第一句话的错误。
修复了一个在存在重音字符时导致反向翻译失败的错误。 - 2010年3月10日
增加了对当前完整语言集的支持。
修复了将翻译限制为第一句话的错误。 - 2010年2月15日
更多解析调整。 - 2009年3月28日
更多解析调整。 - 2007年3月20日
调整了解析逻辑以符合 Google 网站上的更改。 - 2006年1月15日
初始版本。