示例#1
0
        private List <FileData> GetFileDataList(Interfaces.IProject project, ProjectInfo studioProjectInfo, SdlxliffReader sdlxliffReader)
        {
            var fileDataList = new List <FileData>();

            foreach (var targetLanguage in project.TargetLanguages)
            {
                var targetFiles = project.ProjectFiles.Where(a =>
                                                             string.Compare(a.TargetLanguage, targetLanguage.CultureInfo.Name,
                                                                            StringComparison.CurrentCultureIgnoreCase) == 0);

                foreach (var projectFile in targetFiles)
                {
                    var inputPath            = Path.Combine(studioProjectInfo.LocalProjectFolder, projectFile.Location);
                    var data                 = sdlxliffReader.ReadFile(project.Id, projectFile.FileId, inputPath, projectFile.TargetLanguage);
                    var hasEmptyTranslations = ContainsEmptyTranslations(data);
                    fileDataList.Add(new FileData
                    {
                        Data = data,
                        HasEmptyTranslations = hasEmptyTranslations
                    });
                }
            }

            return(fileDataList);
        }
示例#2
0
        private void AssignProjectFileXliffData(Interfaces.IProject project, IEnumerable <ProjectFile> projectfiles)
        {
            if (projectfiles == null)
            {
                return;
            }

            foreach (var projectFile in projectfiles)
            {
                if (projectFile.XliffData == null)
                {
                    continue;
                }

                var projectFileName = projectFile.Name.Substring(0, projectFile.Name.Length - ".sdlxliff".Length) + ".xliff.sdlxliff";

                var targetFile = project.ProjectFiles?.FirstOrDefault(a =>
                                                                      string.Compare(a.Name, projectFileName, StringComparison.CurrentCultureIgnoreCase) == 0 &&
                                                                      string.Compare(a.Path, projectFile.Path, StringComparison.CurrentCultureIgnoreCase) == 0 &&
                                                                      string.Compare(a.TargetLanguage, projectFile.TargetLanguage, StringComparison.CurrentCultureIgnoreCase) == 0);

                if (targetFile != null)
                {
                    targetFile.XliffData                   = projectFile.XliffData;
                    targetFile.ExternalFilePath            = projectFile.ExternalFilePath;
                    targetFile.ConfirmationStatistics      = projectFile.ConfirmationStatistics;
                    targetFile.TranslationOriginStatistics = projectFile.TranslationOriginStatistics;
                    targetFile.Selected = true;
                }
            }
        }
示例#3
0
        private void WriteReportProject(XmlWriter writer, string elementName, Interfaces.IProject project)
        {
            if (project == null)
            {
                return;
            }

            writer.WriteStartElement(elementName);
            writer.WriteAttributeString("name", project.Name);
            writer.WriteAttributeString("number", project.Id);

            var minValue = DateTime.MinValue.ToString(CultureInfo.InvariantCulture);
            var maxValue = DateTime.MaxValue.ToString(CultureInfo.InvariantCulture);

            var utcMinValue = DateTime.MinValue.ToUniversalTime().ToString(CultureInfo.InvariantCulture);
            var utcMaxValue = DateTime.MaxValue.ToUniversalTime().ToString(CultureInfo.InvariantCulture);

            var dueDateValue = project.DueDate.ToString(CultureInfo.InvariantCulture);

            if (dueDateValue != minValue && dueDateValue != maxValue &&
                dueDateValue != utcMinValue && dueDateValue != utcMaxValue)
            {
                writer.WriteAttributeString("dueDate", GetDisplayDateTime(project.DueDate));
            }

            writer.WriteEndElement();             //project
        }
示例#4
0
        public Interfaces.IProject GetProject(FileBasedProject selectedProject, IReadOnlyCollection <string> selectedFileIds, List <ProjectFile> projectFiles = null)
        {
            if (selectedProject == null)
            {
                return(null);
            }

            var projectInfo = selectedProject.GetProjectInfo();

            Interfaces.IProject project = IsBackTranslationProject(projectInfo.ProjectOrigin)
                                ? new BackTranslationProject()
                                : new Project();


            project.Id              = projectInfo.Id.ToString();
            project.Name            = projectInfo.Name;
            project.Customer        = _customerProvider.GetProjectCustomer(selectedProject);
            project.Created         = projectInfo.CreatedAt.ToUniversalTime();
            project.DueDate         = projectInfo.DueDate?.ToUniversalTime() ?? DateTime.MaxValue;
            project.Path            = projectInfo.LocalProjectFolder;
            project.SourceLanguage  = GetLanguageInfo(projectInfo.SourceLanguage.CultureInfo);
            project.TargetLanguages = GetLanguageInfos(projectInfo.TargetLanguages);
            project.ProjectType     = GetProjectType(selectedProject);

            var existingProject = IsBackTranslationProject(projectInfo.ProjectOrigin)
                                ? GetBackTranslationProjectProject(projectInfo.Id.ToString(), out _)
                                : _controller.GetProjects().FirstOrDefault(a => a.Id == projectInfo.Id.ToString());

            if (existingProject != null)
            {
                foreach (var projectFile in existingProject.ProjectFiles)
                {
                    if (projectFile.Clone() is ProjectFile clonedProjectFile)
                    {
                        clonedProjectFile.Project          = project;
                        clonedProjectFile.Location         = GeFullPath(project.Path, clonedProjectFile.Location);
                        clonedProjectFile.Report           = GeFullPath(project.Path, clonedProjectFile.Report);
                        clonedProjectFile.ExternalFilePath = GeFullPath(project.Path, clonedProjectFile.ExternalFilePath);
                        clonedProjectFile.Selected         = selectedFileIds != null && selectedFileIds.Any(a => a == projectFile.FileId.ToString());
                        project.ProjectFiles.Add(clonedProjectFile);
                    }
                }

                foreach (var existingProjectBackTranslationProject in existingProject.BackTranslationProjects)
                {
                    project.BackTranslationProjects.Add(existingProjectBackTranslationProject.Clone() as BackTranslationProject);
                }
            }
            else
            {
                project.ProjectFiles = GetProjectFiles(selectedProject, project, selectedFileIds);
            }

            AssignProjectFileXliffData(project, projectFiles);

            return(project);
        }
示例#5
0
 private static void WriteReportCustomer(XmlWriter writer, Interfaces.IProject project)
 {
     if (!string.IsNullOrEmpty(project.Customer?.Name))
     {
         writer.WriteStartElement("customer");
         writer.WriteAttributeString("name", project.Customer.Name);
         writer.WriteAttributeString("email", project.Customer.Email);
         writer.WriteEndElement();                 //customer
     }
 }
示例#6
0
 private void SetEnabled(Interfaces.IProject selectedProject)
 {
     if (selectedProject == null ||
         selectedProject is BackTranslationProject)
     {
         Enabled = false;
     }
     else
     {
         Enabled = true;
     }
 }
示例#7
0
        private Interfaces.IProject GetBackTranslationProject(Interfaces.IProject project, string targetLanguage)
        {
            foreach (var backTranslationProject in project.BackTranslationProjects)
            {
                if (string.Compare(backTranslationProject.SourceLanguage.CultureInfo.Name,
                                   targetLanguage, StringComparison.CurrentCultureIgnoreCase) == 0)
                {
                    return(backTranslationProject);
                }
            }

            return(null);
        }
示例#8
0
        private Xliff GetBackTranslationXliffData(Interfaces.IProject project, ProjectFile projectFile, SdlxliffReader sdlxliffReader)
        {
            if (project != null && projectFile != null)
            {
                var backTranslationFilePath =
                    Path.Combine(project.Path, projectFile.Location);

                if (System.IO.File.Exists(backTranslationFilePath))
                {
                    return(sdlxliffReader.ReadFile(project.Id, projectFile.FileId,
                                                   backTranslationFilePath,
                                                   projectFile.TargetLanguage));
                }
            }

            return(null);
        }
示例#9
0
        public Interfaces.IProject GetBackTranslationProject(string projectId, out Interfaces.IProject parentProject)
        {
            parentProject = null;
            var projects = _controller.GetProjects();

            foreach (var project in projects)
            {
                var backTranslationProject =
                    project.BackTranslationProjects.FirstOrDefault(a => a.Id == projectId);
                if (backTranslationProject != null)
                {
                    parentProject = project;
                    return(backTranslationProject);
                }
            }

            return(null);
        }
示例#10
0
        private static ProjectFile GetBackTranslationProjectFile(Interfaces.IProject backTranslationProject, ProjectFile projectFile)
        {
            if (backTranslationProject == null)
            {
                return(null);
            }

            foreach (var translationProjectFile in backTranslationProject.ProjectFiles)
            {
                if (string.Compare(projectFile.Name, translationProjectFile.Name,
                                   StringComparison.CurrentCultureIgnoreCase) == 0 &&
                    string.Compare(projectFile.Path, translationProjectFile.Path,
                                   StringComparison.CurrentCultureIgnoreCase) == 0)
                {
                    return(translationProjectFile);
                }
            }

            return(null);
        }
示例#11
0
        private ProjectFile GetProjectFile(Interfaces.IProject project, ProjectAutomation.Core.ProjectFile projectFile,
                                           IReadOnlyCollection <string> selectedFileIds)
        {
            var projectFileModel = new ProjectFile
            {
                ProjectId      = project.Id,
                FileId         = projectFile.Id.ToString(),
                Name           = projectFile.Name,
                Path           = projectFile.Folder,
                Location       = projectFile.LocalFilePath,
                Action         = Enumerators.Action.None,
                WorkFlow       = Enumerators.WorkFlow.None,
                Status         = Enumerators.Status.Ready,
                Date           = DateTime.MinValue,
                TargetLanguage = projectFile.Language.CultureInfo.Name,
                Selected       = selectedFileIds != null && selectedFileIds.Any(a => a == projectFile.Id.ToString()),
                FileType       = projectFile.FileTypeId,
                Project        = project
            };

            return(projectFileModel);
        }
示例#12
0
        private List <ProjectFile> GetProjectFiles(IProject project, Interfaces.IProject projectModel, IReadOnlyCollection <string> selectedFileIds)
        {
            var projectInfo  = project.GetProjectInfo();
            var projectFiles = new List <ProjectFile>();


            var sourceLanguageFiles = project.GetSourceLanguageFiles();

            foreach (var projectFile in sourceLanguageFiles)
            {
                if (projectFile.Role != FileRole.Translatable)
                {
                    continue;
                }

                var projectFileModel = GetProjectFile(projectModel, projectFile, null);
                projectFiles.Add(projectFileModel);
            }

            foreach (var targetLanguage in projectInfo.TargetLanguages)
            {
                var languageFiles = project.GetTargetLanguageFiles(targetLanguage);
                foreach (var projectFile in languageFiles)
                {
                    if (projectFile.Role != FileRole.Translatable)
                    {
                        continue;
                    }

                    var projectFileModel = GetProjectFile(projectModel, projectFile, selectedFileIds);
                    projectFiles.Add(projectFileModel);
                }
            }

            return(projectFiles);
        }
示例#13
0
 public ProjectPropertiesViewModel(Interfaces.IProject project)
 {
     SelectedProject = project;
 }
示例#14
0
        public List <Report> CreateFinalReport(Interfaces.IProject project, FileBasedProject studioProject, List <ProjectFile> selectedFiles, out string workingPathOut)
        {
            var reports  = new List <Report>();
            var settings = new XmlWriterSettings
            {
                OmitXmlDeclaration = true,
                Indent             = false
            };
            var reportName = "Trados Transcreate Report";

            var studioProjectInfo     = studioProject.GetProjectInfo();
            var dateTimeStamp         = DateTime.UtcNow;
            var dataTimeStampToString = DateTimeStampToString(dateTimeStamp);
            var workflowPath          = GetPath(studioProjectInfo.LocalProjectFolder, "Workflow");
            var actionPath            = GetPath(workflowPath, "Report");
            var workingPath           = GetPath(actionPath, dataTimeStampToString);

            var exportOptions = new ExportOptions();

            exportOptions.IncludeBackTranslations = true;
            exportOptions.IncludeTranslations     = true;
            exportOptions.CopySourceToTarget      = false;

            var analysisBands = _projectAutomationService.GetAnalysisBands(studioProject);

            var progressSettings = new ProgressDialogSettings(ApplicationInstance.GetActiveForm(), true, true, false);
            var result           = ProgressDialog.ProgressDialog.Execute("Create Transcreate Reports", () =>
            {
                var sdlxliffReader = new SdlxliffReader(_segmentBuilder, exportOptions, analysisBands);
                decimal maximum    = project.ProjectFiles.Count;
                decimal current    = 0;
                foreach (var targetLanguage in project.TargetLanguages)
                {
                    var projectFiles = project.ProjectFiles.Where(a =>
                                                                  string.Compare(a.TargetLanguage, targetLanguage.CultureInfo.Name, StringComparison.CurrentCultureIgnoreCase) == 0).ToList();

                    var hasProjectFiles = HasProjectFiles(selectedFiles, projectFiles);
                    if (!hasProjectFiles)
                    {
                        current     += projectFiles.Count;
                        var progress = current / maximum * 100;

                        ProgressDialog.ProgressDialog.Current.Report((int)progress,
                                                                     string.Format("Language: {0}\r\nFile: {1}", targetLanguage.CultureInfo.DisplayName, projectFiles.FirstOrDefault().Name));

                        continue;
                    }

                    var workingLanguageFolder = GetPath(workingPath, targetLanguage.CultureInfo.Name);
                    foreach (var projectFile in projectFiles)
                    {
                        if (ProgressDialog.ProgressDialog.Current.CheckCancellationPending())
                        {
                            ProgressDialog.ProgressDialog.Current.ThrowIfCancellationPending();
                        }

                        current++;
                        var progress = current / maximum * 100;
                        ProgressDialog.ProgressDialog.Current.Report((int)progress, string.Format("Language: {0}\r\nFile: {1}", targetLanguage.CultureInfo.DisplayName, projectFile.Name));

                        if (selectedFiles != null && !selectedFiles.Exists(a => a.FileId == projectFile.FileId))
                        {
                            continue;
                        }

                        var projectFilePath = Path.Combine(project.Path, projectFile.Location);
                        var xliffData       = sdlxliffReader.ReadFile(project.Id, projectFile.FileId, projectFilePath,
                                                                      targetLanguage.CultureInfo.Name);

                        var backTranslationProject   = GetBackTranslationProject(project, targetLanguage.CultureInfo.Name);
                        var backTranslationFile      = GetBackTranslationProjectFile(backTranslationProject, projectFile);
                        var xliffDataBackTranslation = GetBackTranslationXliffData(backTranslationProject, backTranslationFile, sdlxliffReader);

                        var fileName   = projectFile.Name.Substring(0, projectFile.Name.LastIndexOf(".", StringComparison.Ordinal));
                        var reportFile = Path.Combine(workingLanguageFolder, fileName + ".xml");

                        using (var writer = XmlWriter.Create(reportFile, settings))
                        {
                            writer.WriteStartElement("task");
                            writer.WriteAttributeString("name", reportName);
                            writer.WriteAttributeString("created", dataTimeStampToString);

                            writer.WriteStartElement("taskInfo");
                            writer.WriteAttributeString("action", "Trados Transcreate Report");
                            writer.WriteAttributeString("file", projectFile.Path + projectFile.Name);
                            writer.WriteAttributeString("taskId", Guid.NewGuid().ToString());
                            writer.WriteAttributeString("runAt", GetDisplayDateTime(dateTimeStamp));


                            WriteReportProject(writer, "project", project);
                            WriteReportProject(writer, "backProject", backTranslationProject);

                            WriteReportLanguage(writer, "source", project.SourceLanguage.CultureInfo.Name);
                            WriteReportLanguage(writer, "target", targetLanguage.CultureInfo.Name);

                            WriteReportCustomer(writer, project);

                            WriteReportTranslationProviders(writer, studioProject);

                            writer.WriteEndElement();                             //taskInfo


                            writer.WriteStartElement("translations");
                            foreach (var dataFile in xliffData.Files)
                            {
                                writer.WriteStartElement("version");
                                writer.WriteAttributeString("type", dataFile.Original);

                                var backTranslationDataFile =
                                    xliffDataBackTranslation?.Files.FirstOrDefault(a => a.Original == dataFile.Original);

                                writer.WriteStartElement("segments");
                                foreach (var transUnit in dataFile.Body.TransUnits)
                                {
                                    var textFunction = transUnit.Contexts.FirstOrDefault(
                                        a => string.Compare(a.DisplayName, "Text Function", StringComparison.CurrentCultureIgnoreCase) == 0);

                                    foreach (var segmentPair in transUnit.SegmentPairs)
                                    {
                                        writer.WriteStartElement("segment");

                                        var backTranslationSegmentPair = GetBackTranslationSegmentPair(backTranslationDataFile, segmentPair);

                                        writer.WriteAttributeString("id", segmentPair.Id);
                                        writer.WriteAttributeString("textFunction", textFunction?.Description ?? string.Empty);

                                        writer.WriteStartElement("source");
                                        writer.WriteString(segmentPair.Source.ToString());
                                        writer.WriteEndElement();                                         //source

                                        writer.WriteStartElement("target");
                                        writer.WriteString(segmentPair.Target.ToString());
                                        writer.WriteEndElement();                                         //source

                                        writer.WriteStartElement("back");
                                        writer.WriteString(backTranslationSegmentPair?.Target?.ToString() ?? string.Empty);
                                        writer.WriteEndElement();                                         //backTranslation

                                        writer.WriteStartElement("comments");
                                        var comments = GetSegmentComments(segmentPair.Target, xliffData.DocInfo);
                                        if (comments != null)
                                        {
                                            foreach (var comment in comments)
                                            {
                                                writer.WriteStartElement("comment");
                                                writer.WriteAttributeString("version", comment.Version);
                                                writer.WriteAttributeString("author", comment.Author);
                                                writer.WriteAttributeString("severity", comment.Severity.ToString());
                                                writer.WriteAttributeString("date", GetDisplayDateTime(comment.Date));
                                                writer.WriteString(comment.Text ?? string.Empty);
                                                writer.WriteEndElement();                                                 //comment
                                            }
                                        }

                                        writer.WriteEndElement();                                         //comments

                                        writer.WriteEndElement();                                         //segment
                                    }
                                }
                                writer.WriteEndElement();                         //segments

                                writer.WriteEndElement();                         //version
                            }
                            writer.WriteEndElement();                             //translations
                        }

                        // transform the file against an xslt
                        var templatePath   = GetReportTemplatePath("TranscreateFinalReport.xsl");
                        var reportFilePath = CreateHtmlReportFile(reportFile, templatePath);


                        var report = new Report
                        {
                            Name        = fileName,
                            Date        = dateTimeStamp,
                            Description = "Transcreate Report",
                            Group       = "Transcreate Report",
                            Language    = targetLanguage.CultureInfo.Name,
                            Path        = reportFilePath
                        };
                        reports.Add(report);
                    }
                }
            }, progressSettings);

            workingPathOut = workingPath;

            if (result.Cancelled)
            {
                System.Windows.Forms.MessageBox.Show("Process cancelled by user.", PluginResources.Plugin_Name);
                return(new List <Report>());
            }

            return(reports);
        }