Esempio n. 1
0
    /// <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);
            }
        }
    }
Esempio n. 3
0
    /// <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;";
        }
    }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
    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);";
                }
            }
        }
    }
    /// <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;";
        }
    }