/// <summary> /// Translate to the specified single language /// </summary> /// <param name="request">Translation Request</param> /// <returns>Translation Entry</returns> public TranslationEntry Translate(TranslationRequest request) { string procName = "usp_TranslateUsingCache"; SqlParameter[] cmdParms = new SqlParameter[]{ new SqlParameter("@EntryText", SqlDbType.NVarChar), new SqlParameter("@LangFromID", SqlDbType.Int), new SqlParameter("@LangToID", SqlDbType.Int) }; cmdParms[0].Value = request.TransText; cmdParms[1].Value = request.LangFromID; cmdParms[2].Value = request.LangToID; try { SqlDataReader sdr = SQLHelper.ExecuteDataReader(connnectionString, CommandType.StoredProcedure, procName, cmdParms); TranslationEntry entry = null; if (sdr.Read() && !String.IsNullOrEmpty(sdr["TranslationText"].ToString().Trim())) { entry = new TranslationEntry(); entry.EntryID = Convert.ToInt32(sdr["EntryID"]); entry.LangFromID = Convert.ToInt32(sdr["LangFromID"]); entry.LangToID = Convert.ToInt32(sdr["LangToID"]); entry.TranslationText = sdr["TranslationText"].ToString(); if (entry.EntryID > 0) { entry.SourceID = Convert.ToInt32(sdr["SourceID"]); entry.DateCreated = Convert.ToDateTime(sdr["DateCreated"]); } } return entry; } catch (SqlException ex) { throw ex; } }
/// <summary> /// The Main Translate Function, First translate from DataBase, if result is null then translate from Bing /// </summary> /// <param name="translationRequest">Translation Request</param> /// <returns>Translation Result</returns> public TranslationResult Translate(TranslationRequest translationRequest) { if (String.IsNullOrEmpty(translationRequest.TransText)) throw new ArgumentNullException(); try { TranslationResult transResult = null; if (IsAccessDB && !ConfigSetting.OnlyTranslateFromBing) { //TranslationSource.ProcessSourceList //do later. transResult = TranslateUsingDataBase(translationRequest); if (transResult == null) { if (translationRequest.LangFrom == "psps") { translationRequest.DetectLanguage = Detect(translationRequest.TransText); translationRequest.LangFrom = translationRequest.DetectLanguage; } transResult = TranslateUsingBing(translationRequest); } } else { transResult = TranslateUsingBing(translationRequest); } return transResult; } catch (SqlException sqlex) { throw sqlex; } catch (Exception ex) { throw ex; } }
/// <summary> /// Translate to Multi languages /// </summary> /// <param name="request">Translation Request</param> /// <returns>The DateSet with multi languages</returns> public DataSet TranslateMulti(TranslationRequest request) { string procName = "usp_TranslateMultipleLanguages"; SqlParameter[] cmdParms = new SqlParameter[]{ new SqlParameter("@InputString", SqlDbType.NVarChar), new SqlParameter("@FromLangID", SqlDbType.Int) }; cmdParms[0].Value = request.TransText; cmdParms[1].Value = request.LangFromID; try { return SQLHelper.ExecuteDataSet(connnectionString, CommandType.StoredProcedure, procName, cmdParms); } catch (SqlException ex) { throw ex; } }
private TranslationResult TranslateFromBing(TranslationRequest translationRequest) { string fromLang = translationRequest.LangFrom; string toLang = translationRequest.LangTo; //As to match with SCCM (SCCM contains "PTB" and "PTG", but Bing only contains "PTG") , so "ptb" is manual added in DataBae Languages table. //Only translate with "pt" by Bing, no matter what user choose "ptb" or "pt". If translate Using DataBase, the language will be base on user choosed. fromLang = fromLang == "ptb" ? "pt" : fromLang; toLang = toLang == "ptb" ? "pt" : toLang; string translation = _transClient.Translate(appId, translationRequest.TransText, fromLang, toLang, contentType, category); TranslationResult transResult = new TranslationResult() { SourceTransText = translationRequest.SourceTransText, TranslationText = translation, DetectLanguage = translationRequest.DetectLanguage, LangFromID = translationRequest.LangFromID, LangToID = translationRequest.LangToID, AccountID = TranslatorServiceClient.Account.AccountID, WhereFrom = TranslationSourceEnum.BingWeb.ToString() }; if (IsAccessDB == true && !ConfigSetting.OnlyTranslateFromBing && fromLang != toLang && transResult.SourceTransText != transResult.TranslationText && translationRequest.TransText.Length <= 256) // 256 match with 'TranslationEntries' table's 'EntryText' column's size { int entryId = trans.AddResult(transResult);//Add Result to DataBase AddLog(entryId, false); } return transResult; }
/// <summary> /// The Main Multi Languages Translate Function /// </summary> /// <param name="translationRequest">Translation Request</param> /// <returns>The DataTable with multi languages</returns> public DataTable TranslateMulti(TranslationRequest translationRequest) { try { return trans.TranslateMulti(translationRequest).Tables[0]; } catch (Exception ex) { throw ex; } }
private TranslationResult TranslateText(TranslationRequest translationRequest) { try { return TranslateFromBing(translationRequest); } catch (SqlException sqlex) { throw sqlex; } catch (Exception ex) { string msg = FilterExceptionMessage(ex.Message); if (msg != "") { throw new ArgumentException(msg); } else { CheckTranslatorServiceClient(); return TranslateFromBing(translationRequest); } } }
private TranslationResult TranslateUsingBing(TranslationRequest translationRequest) { string transText = FilterHotKeyChar(translationRequest.TransText); translationRequest.TransText = transText; if (String.IsNullOrEmpty(transText)) throw new ArgumentNullException(); if (transText.Length > maxStringLength) throw new ArgumentException("'Translate From' must be less than '" + maxStringLength + "' characters."); try { CheckTranslatorServiceClient(); return TranslateText(translationRequest); } catch (InvalidOperationException ioex) { throw ioex; } catch (SqlException sqlex) { throw sqlex; } catch (Exception ex) { throw ex; } }
private TranslationResult TranslateUsingDataBase(TranslationRequest translationRequest) { TranslationResult transResult = null; try { TranslationEntry entry = trans.Translate(translationRequest); if (entry != null && !String.IsNullOrEmpty(entry.TranslationText.Trim())) { AddLog(entry.EntryID, true); transResult = new TranslationResult() { SourceTransText = translationRequest.SourceTransText.Replace("]A;", "\n"), TranslationText = entry.TranslationText, DetectLanguage = translationRequest.DetectLanguage, LangFromID = translationRequest.LangFromID, LangToID = translationRequest.LangToID, AccountID = TranslatorServiceClient.Account.AccountID, WhereFrom = entry.EntryID > 0 ? Enum.Parse(typeof(TranslationSourceEnum), entry.SourceID.ToString()).ToString() : TranslationSourceEnum.BingWeb.ToString() }; } } catch (Exception ex) { throw ex; } return transResult; }
/// <summary> /// Translate for Multi Languages /// </summary> private void tabLanguages_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.OriginalSource is TabControl) { if (tabLanguages.SelectedIndex == 1 && transManage.IsAccessDB == true) { string transText = txtTransTextFrom.Text; if (transText.Trim().Length > 0) { string fromLanguage = GetFromLanguage(); string toLanguage = GetToLanguage(); string detectLanguage = ""; BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (o, ea) => { try { if (String.IsNullOrEmpty(fromLanguage)) { detectLanguage = transManage.Detect(transText); fromLanguage = detectLanguage; } TranslationRequest request = new TranslationRequest( fromLanguage, toLanguage, TranslationManage.languages[fromLanguage].LanguageID, TranslationManage.languages[toLanguage].LanguageID, transText, transText, detectLanguage); Dispatcher.Invoke(new Action(() => gvList.ItemsSource = transManage.TranslateMulti(request).DefaultView)); SetAutoDetectedLanguageName(cboFrom, fromLanguage); } catch (KeyNotFoundException) { ea.Result = "Language name is not supported, please check if 'Language From' is right."; } catch (Exception ex) { ea.Result = ex; } }; worker.RunWorkerCompleted += (o, ea) => { pBar.Visibility = Visibility.Hidden; if (ea.Result != null) { SetStatusLabelValue(tsslblException, "Warning : " + ea.Result); } }; SetStatusLabelValue(tsslblException, ""); pBar.Visibility = Visibility.Visible; worker.RunWorkerAsync(); } else { gvList.ItemsSource = null; } } else if (tabLanguages.SelectedIndex == 0 || tabLanguages.SelectedIndex == 2) { SetStatusLabelValue(tsslblException, ""); } } }
private void DoTranslation(string transText) { string fromLanguage = GetFromLanguage(); string toLanguage = GetToLanguage(); string detectLanguage = ""; try { if (String.IsNullOrEmpty(fromLanguage)) { detectLanguage = transManage.Detect(transText); fromLanguage = detectLanguage; } TranslationRequest request; if (transManage.IsAccessDB) { request = new TranslationRequest( fromLanguage, toLanguage, TranslationManage.languages[fromLanguage].LanguageID, TranslationManage.languages[toLanguage].LanguageID, transText, transText, detectLanguage); } else { request = new TranslationRequest( fromLanguage, toLanguage, transText, transText, detectLanguage); } TranslationResult result = transManage.Translate(request); TranslationComplete(result); } catch (ArgumentNullException) { SetValueFrom(""); SetValueTo(""); SetStatusLabelValue(tsslblWhere, ""); SetStatusLabelValue(tsslblException, ""); } catch (ArgumentException agex) { SetValueFrom(""); SetValueTo(""); string msg = agex.Message; if (agex.Message.Contains("There was no endpoint listening")) { msg = "Please check your proxy."; } SetStatusLabelValue(tsslblException, "Warning : " + msg); if (ConfigSetting.Mini) { floatBox.FontColor = Brushes.Red; floatBox.Translation = "Warning : " + msg; floatBox.Visible = true; } } catch (InvalidOperationException) { SetStatusLabelValue(tsslblException, "Warning : Please check your proxy."); } catch (KeyNotFoundException) { SetValueTo(""); SetStatusLabelValue(tsslblWhere, ""); SetStatusLabelValue(tsslblException, "Language name is not supported, please check if 'Language From' is right."); } catch (Exception ex) { SetValueFrom(""); SetValueTo(""); string msg = ex.Message; if (ex.Message.Contains("There was no endpoint listening")) { msg = "Please check your proxy."; } SetStatusLabelValue(tsslblException, "Warning : " + msg); if (ConfigSetting.Mini) { floatBox.FontColor = Brushes.Red; floatBox.Translation = "Warning : " + msg; floatBox.Visible = true; } } }