What is it?
GoogleTranslator is an object that allows you to translate text using the power of Google's online language tools. The demo app also allows you to easily perform a reverse translation. The app can be used as a poor man's resource translator for simple phrases, but you'd be wise to confirm the translation with a native speaker before using the results. |
How do I use it?
You use
GoogleTranslator
by constructing it and calling its Translate()
method.
Hide Copy Code
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);
How it works
GoogleTranslator works by directly invoking Google's translation API called by its online translation form and parsing the results.
Hide Shrink Copy Code
// 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;
As you can see, the logic used to parse the JSON result is very simple!
Speaking the translation
The
Translator
object retrieves the URL that will stream the spoken version of the translation. The demo app speaks this content by navigating to this URL in a hidden browser control. As mentioned in the preamble, because Google limits the speech to common words in a few languages, don't be surprised if the demo plays dumb when you try to speak your translated text!Revision History
- 18 Mar 2016
Switched to Google Translate plugin APIs. Fix identified by User-12366202. Thank you! - 6 Aug 2015
Corrected parsing logic. Fix identified by Member 11019371. Thank you! - 6 May 2015
Corrected parsing logic to fix translation of single words. - 5 May 2015
Corrected Google URL.
Removed all external dependencies. - 9 Mar 2014
Switched to using Google's JSON translation APIs.
AddedTranslationTime
andTranslationSpeakUrl
properties.
Tweaked demo app UI to assist in reverse translation and resetting an English source and target. - 13 Jan 2013
Added support for current full language set.
Refixed bug that limited translation to first sentence.
Fixed a bug that caused reverse translation to fail when accented characters were present. - 10 Mar 2010
Added support for current full language set.
Fixed bug that limited translation to first sentence. - 15 Feb 2010
Even more parsing tweakage. - 28 Mar 2009
More parsing tweakage. - 20 Mar 2007
Tweaked parsing logic to conform to changes at Google's website. - 15 Jan 2006
Initial version.