/// <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; GoogleTranslator.EnsureInitialized(); GoogleTranslator._languageModeMap.TryGetValue(language, out mode); return(mode); }
/// <summary> /// Translates the specified source text. /// </summary> /// <param name="sourceText">The source text.</param> /// <param name="sourceLanguage">The source language.</param> /// <param name="targetLanguage">The target language.</param> /// <returns>The translation.</returns> public async Task <string> Translate (string sourceText, string sourceLanguage, string targetLanguage) { // Initialize DateTime tmStart = DateTime.Now; string text = string.Empty; // Download translation string url = string.Format("https://translate.googleapis.com/translate_a/single?client=gtx&sl={0}&tl={1}&dt=t&q={2}", GoogleTranslator.LanguageEnumToIdentifier(sourceLanguage), GoogleTranslator.LanguageEnumToIdentifier(targetLanguage), HttpUtility.UrlEncode(sourceText)); using (HttpClient http = new HttpClient()) { http.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"); text = await http.GetStringAsync(url).ConfigureAwait(false); } return(string.Concat(JArray.Parse(text)[0].Select(x => x[0]))); }
/// <summary> /// Translates the specified source text. /// </summary> /// <param name="sourceText">The source text.</param> /// <param name="sourceLanguage">The source language.</param> /// <param name="targetLanguage">The target language.</param> /// <returns>The translation.</returns> public string Translate (string sourceText, string sourceLanguage, string targetLanguage) { // 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}", GoogleTranslator.LanguageEnumToIdentifier(sourceLanguage), GoogleTranslator.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}\"", GoogleTranslator.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), GoogleTranslator.LanguageEnumToIdentifier(targetLanguage), translation.Length); } } catch (Exception ex) { this.Error = ex; } // Return result this.TranslationTime = DateTime.Now - tmStart; return(translation); }