/// <summary> /// Get translation of an original text. /// </summary> /// <param name="serviceName">Name of translation service to use</param> /// <param name="textToTranslate">Text to be translated</param> /// <returns>Translation of an original text</returns> private string GetTranslatedText(string serviceName, string textToTranslate) { TranslationServiceInfo info = TranslationServiceInfo.Provider.Get(serviceName); if (info != null) { if (info.TranslationServiceIsMachine) { AbstractMachineTranslationService service = AbstractMachineTranslationService.GetTranslationService(info, SiteContext.CurrentSiteName); if (service != null) { if (string.IsNullOrEmpty(textToTranslate)) { textToTranslate = TranslationSourceText ?? String.Empty; } string sourceLang = TranslationSourceLanguage ?? CultureHelper.DefaultUICultureCode; string targetLang = TranslationTargetLanguage ?? CultureHelper.PreferredUICultureCode; string translation = service.Translate(textToTranslate, sourceLang, targetLang) ?? String.Empty; // Translators may add a dot to the translation - remove it if it was not a part of the original text if (!textToTranslate.EndsWithCSafe(".")) { translation = translation.TrimEnd('.'); } return(translation); } } } return(null); }
private void ShowWarning() { TranslationServiceInfo info = (TranslationServiceInfo)EditForm.EditedObject; if ((info != null) && info.TranslationServiceEnabled) { if (!TranslationServiceHelper.IsServiceAvailable(info.TranslationServiceName, SiteContext.CurrentSiteName)) { ShowWarning(GetString("translationservice.notavailable"), null, null); } } }
/// <summary> /// Add translation control to the list of action buttons /// </summary> /// <param name="tsi">Translation service object used to initialize the control</param> /// <param name="siteName">Site name to check for service availability</param> private void AddTranslationControl(TranslationServiceInfo tsi, string siteName) { string arg = "'##SERVICE##|' + document.getElementById('" + (TranslationElementClientID ?? InputClientID) + @"').value"; if (TranslationServiceHelper.IsServiceAvailable(tsi.TranslationServiceName, siteName)) { var ctrl = new CMSAccessibleButton(); cntElem.ActionsContainer.Controls.Add(ctrl); ctrl.IconCssClass = "icon-" + tsi.TranslationServiceName.ToLowerCSafe(); ctrl.ToolTip = string.Format("{0} {1}", ResHelper.GetString("translations.translateusing"), tsi.TranslationServiceDisplayName); // Get callback reference for translation string cbRef = Page.ClientScript.GetCallbackEventReference(this, arg.Replace("##SERVICE##", tsi.TranslationServiceName), "SetValueToTextBox", "'" + InputClientID + ";" + ctrl.ClientID + "_icon;" + ctrl.IconCssClass + "'", true); ctrl.OnClientClick = "StartProgress('" + ctrl.ClientID + "_icon'); " + cbRef + ";return false;"; } }
protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "resubmitaction": case "processaction": case "cancelaction": CMSGridActionButton img = sender as CMSGridActionButton; if (img != null) { img.Enabled = modifyAllowed; GridViewRow gvr = parameter as GridViewRow; if (gvr == null) { return(img); } DataRowView drv = gvr.DataItem as DataRowView; if (drv == null) { return(img); } TranslationStatusEnum status = (TranslationStatusEnum)ValidationHelper.GetInteger(drv["SubmissionStatus"], 0); switch (sourceName.ToLowerCSafe()) { case "resubmitaction": img.Enabled = modifyAllowed && ((status == TranslationStatusEnum.WaitingForTranslation) || (status == TranslationStatusEnum.SubmissionError)); break; case "processaction": img.Enabled = modifyAllowed && ((status == TranslationStatusEnum.TranslationReady) || (status == TranslationStatusEnum.TranslationCompleted) || (status == TranslationStatusEnum.ProcessingError)); break; case "cancelaction": TranslationServiceInfo service = TranslationServiceInfoProvider.GetTranslationServiceInfo(ValidationHelper.GetInteger(drv["SubmissionServiceID"], 0)); if (service != null) { bool serviceSupportsCancel = service.TranslationServiceSupportsCancel; img.Enabled = modifyAllowed && (status == TranslationStatusEnum.WaitingForTranslation) && serviceSupportsCancel; if (!serviceSupportsCancel) { // Display tooltip for disabled cancel img.ToolTip = String.Format(GetString("translationservice.cancelnotsupported"), service.TranslationServiceDisplayName); } } break; } } return(img); case "submissionstatus": TranslationStatusEnum submissionstatus = (TranslationStatusEnum)ValidationHelper.GetInteger(parameter, 0); return(TranslationServiceHelper.GetFormattedStatusString(submissionstatus)); case "submissionprice": string price = GetString("general.notavailable"); double priceVal = ValidationHelper.GetDouble(parameter, -1); if (priceVal >= 0) { price = priceVal.ToString(); } return(price); } return(parameter); }
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (SubmissionInfo == null) { return; } bool allowed = CheckModifyPermissions(false); HeaderAction processAction = new HeaderAction { OnClientClick = "if (confirm(" + ScriptHelper.GetString(GetString("translationservice.confirmprocesstranslations")) + ")) { " + ControlsHelper.GetPostBackEventReference(btnImportTranslations) + " }", Tooltip = GetString("translationservice.importtranslationstooltip"), Text = GetString("translationservice.importtranslations"), Enabled = allowed && ((SubmissionInfo.SubmissionStatus == TranslationStatusEnum.TranslationReady) || (SubmissionInfo.SubmissionStatus == TranslationStatusEnum.TranslationCompleted) || (SubmissionInfo.SubmissionStatus == TranslationStatusEnum.ProcessingError)) }; HeaderAction resubmitAction = new HeaderAction { CommandName = "resubmit", Tooltip = GetString("translationservice.resubmittooltip"), Text = GetString("translationservice.resubmit"), Enabled = allowed && ((SubmissionInfo.SubmissionStatus == TranslationStatusEnum.WaitingForTranslation) || (SubmissionInfo.SubmissionStatus == TranslationStatusEnum.SubmissionError)) }; HeaderAction updateAction = new HeaderAction { CommandName = "update", Tooltip = GetString("translationservice.updateandresubmittooltip"), Text = GetString("translationservice.updateandresubmit"), Enabled = allowed && ((SubmissionInfo.SubmissionStatus == TranslationStatusEnum.WaitingForTranslation) || (SubmissionInfo.SubmissionStatus == TranslationStatusEnum.SubmissionError)) }; HeaderAction saveAction = new SaveAction(Page); saveAction.Enabled = allowed; List <HeaderAction> actions = CurrentMaster.HeaderActions.ActionsList; actions.Add(saveAction); actions.Add(updateAction); actions.Add(resubmitAction); actions.Add(processAction); // Check if current service supports canceling TranslationServiceInfo service = TranslationServiceInfoProvider.GetTranslationServiceInfo(SubmissionInfo.SubmissionServiceID); if (service != null) { bool serviceSupportsCancel = service.TranslationServiceSupportsCancel; HeaderAction cancelAction = new HeaderAction { CommandName = "cancel", Tooltip = serviceSupportsCancel ? GetString("translationservice.cancelsubmissiontooltip") : String.Format(GetString("translationservice.cancelnotsupported"), service.TranslationServiceDisplayName), Text = GetString("translationservice.cancelsubmission"), Enabled = allowed && (SubmissionInfo.SubmissionStatus == TranslationStatusEnum.WaitingForTranslation) && serviceSupportsCancel }; actions.Add(cancelAction); } CurrentMaster.HeaderActions.ReloadData(); ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "ShowUploadSuccess", "function ShowUploadSuccess() { " + ControlsHelper.GetPostBackEventReference(btnShowMessage) + " }", true); }
/// <summary> /// Translates document(s). /// </summary> private void Translate(object parameter) { if (parameter == null || nodeIds.Count < 1) { return; } int refreshId = 0; TreeProvider tree = new TreeProvider(currentUser); tree.AllowAsyncActions = false; try { // Begin log AddLog(ResHelper.GetString("contentrequest.starttranslate", currentCulture)); bool oneSubmission = chkSeparateSubmissions.Checked; // Prepare translation settings TranslationSettings settings = new TranslationSettings(); settings.TargetLanguage = targetCulture; settings.TranslateWebpartProperties = SettingsKeyProvider.GetBoolValue(CMSContext.CurrentSiteName + ".CMSTranslateWebpartProperties"); settings.SourceLanguage = translationElem.FromLanguage; settings.Instructions = translationElem.Instructions; settings.Priority = translationElem.Priority; settings.TranslateAttachments = translationElem.ProcessBinary; settings.ProcessBinary = translationElem.ProcessBinary; settings.TranslationDeadline = translationElem.Deadline; settings.TranslationServiceName = translationElem.SelectedService; using (CMSTransactionScope tr = new CMSTransactionScope()) { // Get the translation provider AbstractMachineTranslationService machineService = null; AbstractHumanTranslationService humanService = null; TranslationSubmissionInfo submission = null; TranslationServiceInfo ti = TranslationServiceInfoProvider.GetTranslationServiceInfo(translationElem.SelectedService); if (ti != null) { if (oneSubmission) { if (ti.TranslationServiceIsMachine) { machineService = AbstractMachineTranslationService.GetTranslationService(ti, CurrentSiteName); } else { humanService = AbstractHumanTranslationService.GetTranslationService(ti, CurrentSiteName); if (oneSubmission) { submission = TranslationServiceHelper.CreateSubmissionInfo(settings, ti, CMSContext.CurrentUser.UserID, CMSContext.CurrentSiteID, "Document submission " + DateTime.Now); } } } bool langSupported = true; if (humanService != null) { if (!humanService.IsLanguageSupported(settings.TargetLanguage)) { AddError(ResHelper.GetString("translationservice.targetlanguagenotsupported")); langSupported = false; } } if (langSupported) { if (!oneSubmission || (machineService != null) || (humanService != null)) { // Prepare the where condition string where = SqlHelperClass.GetWhereCondition("NodeID", (int[])nodeIds.ToArray(typeof(int))); string columns = "NodeID, NodeAliasPath, DocumentCulture, NodeParentID"; string submissionFileName = ""; string submissionName = ""; int charCount = 0; int wordCount = 0; int docCount = 0; // Get the documents in target culture to be able to check if "Skip already translated" option is on // Combine both, source and target culture (at least one hit has to be found - to find the source of translation) where = SqlHelperClass.AddWhereCondition(where, "DocumentCulture = N'" + settings.SourceLanguage + "' OR DocumentCulture = N'" + settings.TargetLanguage + "'"); DataSet ds = tree.SelectNodes(CMSContext.CurrentSiteName, "/%", TreeProvider.ALL_CULTURES, true, null, where, "NodeAliasPath DESC", TreeProvider.ALL_LEVELS, false, 0, columns); if (!DataHelper.DataSourceIsEmpty(ds)) { List <int> processedNodes = new List <int>(); // Translate the documents foreach (DataRow dr in ds.Tables[0].Rows) { refreshId = ValidationHelper.GetInteger(dr["NodeParentID"], 0); int nodeId = ValidationHelper.GetInteger(dr["NodeID"], 0); if (!processedNodes.Contains(nodeId)) { processedNodes.Add(nodeId); string aliasPath = ValidationHelper.GetString(dr["NodeAliasPath"], ""); string culture = ValidationHelper.GetString(dr["DocumentCulture"], ""); if (chkSkipTranslated.Checked) { if (culture == settings.TargetLanguage) { // Document already exists in requested culture, skip it AddLog(string.Format(ResHelper.GetString("content.translatedalready"), HTMLHelper.HTMLEncode(aliasPath + " (" + culture + ")"))); continue; } } AddLog(string.Format(ResHelper.GetString("content.translating"), HTMLHelper.HTMLEncode(aliasPath + " (" + culture + ")"))); TreeNode node = DocumentHelper.GetDocument(nodeId, settings.SourceLanguage, true, null); // Save the first document as a base for submission name if (string.IsNullOrEmpty(submissionName)) { submissionName = node.GetDocumentName(); } if (string.IsNullOrEmpty(submissionFileName)) { submissionFileName = node.NodeAlias; } docCount++; // Submit the document if (machineService != null) { TranslationServiceHelper.Translate(machineService, settings, node); } else { if (oneSubmission && (humanService != null)) { TreeNode targetNode = TranslationServiceHelper.CreateTargetCultureNode(node, settings.TargetLanguage, true, false); TranslationSubmissionItemInfo submissionItem = TranslationServiceHelper.CreateSubmissionItemInfo(settings, submission, node, targetNode.DocumentID); charCount += submissionItem.SubmissionItemCharCount; wordCount += submissionItem.SubmissionItemWordCount; } else { TranslationServiceHelper.SubmitToTranslation(settings, node, out submission); } } } } if (docCount > 0) { if (oneSubmission && (humanService != null)) { AddLog(ResHelper.GetString("content.submitingtranslation")); // Set submission name int itemCount = processedNodes.Count; if (itemCount > 1) { submissionName += " " + string.Format(GetString("translationservices.submissionnamesuffix"), itemCount - 1); } submission.SubmissionName = submissionName; submission.SubmissionCharCount = charCount; submission.SubmissionWordCount = wordCount; submission.SubmissionItemCount = itemCount; submission.SubmissionParameter = submissionFileName; string err = humanService.CreateSubmission(submission); if (!string.IsNullOrEmpty(err)) { AddError(err); } // Save submission with ticket TranslationSubmissionInfoProvider.SetTranslationSubmissionInfo(submission); } } else { TranslationSubmissionInfoProvider.DeleteTranslationSubmissionInfo(submission); AddError(ResHelper.GetString("TranslateDocument.DocumentsAlreadyTranslated", currentCulture)); } } } else { AddError(ResHelper.GetString("TranslateDocument.TranslationServiceNotFound", currentCulture)); } } } tr.Commit(); } } catch (ThreadAbortException ex) { string state = ValidationHelper.GetString(ex.ExceptionState, string.Empty); if (state == CMSThread.ABORT_REASON_STOP) { // When canceled AddError(ResHelper.GetString("TranslateDocument.TranslationCanceled", currentCulture)); } else { // Log error LogExceptionToEventLog(ex); } } catch (Exception ex) { // Log error LogExceptionToEventLog(ex); } finally { if (isModal) { ctlAsync.Parameter = "wopener.location.replace(wopener.location); CloseDialog();"; } else { if (string.IsNullOrEmpty(CurrentError)) { // Refresh tree ctlAsync.Parameter = "RefreshTree(" + refreshId + ", " + refreshId + "); \n" + "SelectNode(" + refreshId + ");"; } else { ctlAsync.Parameter = "RefreshTree(null, null);"; } } } }