private void Run(IReadOnlyCollection <SystemFileInfo> importFiles, Language language)
        {
            var projectHelper         = new ProjectService(_projectsController, _studioVersionService);
            var analysisBands         = projectHelper.GetAnalysisBands(_projectsController.CurrentProject ?? _projectsController.SelectedProjects.FirstOrDefault());
            var filterItemService     = new FilterItemService(analysisBands);
            var commonService         = new ProjectFileService();
            var segmentVisitor        = new SegmentVisitor();
            var segmentBuilder        = new SegmentBuilder();
            var paragraphUnitProvider = new ParagraphUnitProvider(segmentVisitor, filterItemService, segmentBuilder);
            var sdlxliffImporter      = new SdlxliffImporter(commonService, filterItemService, paragraphUnitProvider, segmentBuilder);
            var sdlXliffReader        = new SdlxliffReader();

            _window = new StudioViewsFilesImportView();
            var model = new StudioViewsFilesImportViewModel(_window, _filesController, language, commonService, filterItemService, sdlxliffImporter, sdlXliffReader);

            _window.DataContext = model;
            if (importFiles != null)
            {
                model.AddFiles(importFiles);
            }

            _window.ShowDialog();

            if (model.DialogResult != DialogResult.OK)
            {
                return;
            }

            OpenMessageWindow(model);
        }
        public StudioViewsEditorViewModel(EditorController editorController,
                                          FilterItemService filterItemService, ProjectService projectService, ProjectFileService projectFileService,
                                          SdlxliffMerger sdlxliffMerger, SdlxliffExporter sdlxliffExporter, SdlxliffReader sdlxliffReader)
        {
            _filterItemService  = filterItemService;
            _projectService     = projectService;
            _projectFileService = projectFileService;
            _sdlxliffMerger     = sdlxliffMerger;
            _sdlxliffExporter   = sdlxliffExporter;
            _sdlxliffReader     = sdlxliffReader;

            _editorController = editorController;
            _editorController.ActiveDocumentChanged += EditorController_ActiveDocumentChanged;

            ActivateDocument(_editorController.ActiveDocument);

            // Default values
            ExportSelectedSegments     = true;
            FilterItems                = new List <FilterItem>(_filterItemService.GetFilterItems());
            SelectedExcludeFilterItems = new ObservableCollection <FilterItem>(
                _filterItemService.GetFilterItems(FilterItems, new List <string> {
                "Locked"
            }));
            SelectedTabItem = 0;
        }
Пример #3
0
        protected override void Initialize()
        {
            _editorController     = SdlTradosStudio.Application.GetController <EditorController>();
            _projectsController   = SdlTradosStudio.Application.GetController <ProjectsController>();
            _studioVersionService = new StudioVersionService();

            var commonService         = new ProjectFileService();
            var projectHelper         = new ProjectService(_projectsController, _studioVersionService);
            var analysisBands         = projectHelper.GetAnalysisBands(_projectsController.CurrentProject ?? _projectsController.SelectedProjects.FirstOrDefault());
            var filterItemService     = new FilterItemService(analysisBands);
            var sdlxliffMerger        = new SdlxliffMerger();
            var segmentBuilder        = new SegmentBuilder();
            var segmentVisitor        = new SegmentVisitor();
            var paragraphUnitProvider = new ParagraphUnitProvider(segmentVisitor, filterItemService);
            var sdlxliffExporter      = new SdlxliffExporter(segmentBuilder);
            var sdlXliffReader        = new SdlxliffReader();
            var displayFilter         = new DisplayFilter();

            var model = new StudioViewsEditorViewModel(_editorController, filterItemService,
                                                       commonService, sdlxliffMerger, sdlxliffExporter, sdlXliffReader, paragraphUnitProvider, displayFilter);

            _control = new StudioViewsEditorView {
                DataContext = model
            };
        }
        public StudioViewsFilesImportViewModel(Window window, List <ProjectFile> selectedProjectFiles, ProjectFileService projectFileService,
                                               FilterItemService filterItemService, SdlxliffImporter sdlxliffImporter, SdlxliffReader sdlxliffReader)
        {
            _window               = window;
            _filterItemService    = filterItemService;
            _selectedProjectFiles = selectedProjectFiles;
            _sdlxliffImporter     = sdlxliffImporter;
            _sdlxliffReader       = sdlxliffReader;
            _projectFileService   = projectFileService;

            WindowTitle  = PluginResources.WindowTitle_Import;
            DialogResult = DialogResult.None;

            Reset(null);
        }
Пример #5
0
        public StudioViewsFilesSplitViewModel(Window window, List <ProjectFile> selectedFiles, ProjectFileService projectFileService,
                                              SdlxliffMerger sdlxliffMerger, SdlxliffExporter sdlxliffExporter, SdlxliffReader sdlxliffReader)
        {
            _window             = window;
            _selectedFiles      = selectedFiles;
            _projectFileService = projectFileService;
            _sdlxliffMerger     = sdlxliffMerger;
            _sdlxliffExporter   = sdlxliffExporter;
            _sdlxliffReader     = sdlxliffReader;

            WindowTitle = PluginResources.StudioViews_SplitSelectedFiles_Name;

            DialogResult = DialogResult.None;
            Reset(null);
        }
Пример #6
0
        public StudioViewsFilesImportViewModel(Window window, FilesController filesController, Language language, ProjectFileService projectFileService,
                                               FilterItemService filterItemService, SdlxliffImporter sdlxliffImporter, SdlxliffReader sdlxliffReader)
        {
            _window             = window;
            _filterItemService  = filterItemService;
            _filesController    = filesController;
            _language           = language;
            _sdlxliffImporter   = sdlxliffImporter;
            _sdlxliffReader     = sdlxliffReader;
            _projectFileService = projectFileService;

            WindowTitle  = PluginResources.WindowTitle_Import;
            DialogResult = DialogResult.None;

            Reset(null);
        }
Пример #7
0
        protected override void Execute()
        {
            var selectedFiles = _filesController.SelectedFiles.Where(projectFile => projectFile.Role == FileRole.Translatable).ToList();

            if (selectedFiles.Count == 0)
            {
                MessageBox.Show(PluginResources.Message_No_files_selected, PluginResources.Plugin_Name, MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }

            var missingFiles = selectedFiles.Any(file => file.LocalFileState == LocalFileState.Missing);

            if (missingFiles)
            {
                MessageBox.Show(PluginResources.Message_Missing_Project_Files_Download_From_Server, PluginResources.Plugin_Name, MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }

            var project            = _projectsController.CurrentProject ?? _projectsController.SelectedProjects.FirstOrDefault();
            var projectFileService = new ProjectFileService();
            var sdlxliffMerger     = new SdlxliffMerger();
            var segmentBuilder     = new SegmentBuilder();
            var sdlxliffExporter   = new SdlxliffExporter(segmentBuilder);
            var sdlXliffReader     = new SdlxliffReader();


            var projectHelper     = new ProjectService(_projectsController, _studioVersionService);
            var analysisBands     = projectHelper.GetAnalysisBands(_projectsController.CurrentProject ?? _projectsController.SelectedProjects.FirstOrDefault());
            var filterItemService = new FilterItemService(analysisBands);

            _window = new StudioViewsFilesSplitView();
            var model = new StudioViewsFilesSplitViewModel(_window, project, selectedFiles, projectFileService, filterItemService,
                                                           sdlxliffMerger, sdlxliffExporter, sdlXliffReader);

            _window.DataContext = model;
            _window.ShowDialog();

            if (model.DialogResult != DialogResult.OK)
            {
                return;
            }


            OpenMessageWindow(model);
        }
Пример #8
0
        protected override void Initialize()
        {
            _editorController   = SdlTradosStudio.Application.GetController <EditorController>();
            _projectsController = SdlTradosStudio.Application.GetController <ProjectsController>();

            var commonService    = new ProjectFileService();
            var filterItemHelper = new FilterItemService();
            var projectHelper    = new ProjectService(_projectsController);
            var sdlxliffMerger   = new SdlxliffMerger();
            var sdlxliffExporter = new SdlxliffExporter();
            var sdlXliffReader   = new SdlxliffReader();

            var model = new StudioViewsEditorViewModel(_editorController, filterItemHelper, projectHelper,
                                                       commonService, sdlxliffMerger, sdlxliffExporter, sdlXliffReader);

            _control = new StudioViewsEditorView {
                DataContext = model
            };
        }
Пример #9
0
        protected override void Execute()
        {
            var selectedFiles = _filesController.SelectedFiles.Where(projectFile => projectFile.Role == FileRole.Translatable).ToList();

            if (selectedFiles.Count == 0)
            {
                MessageBox.Show(PluginResources.Message_No_files_selected, PluginResources.Plugin_Name, MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }

            var missingFiles = selectedFiles.Any(file => file.LocalFileState == LocalFileState.Missing);

            if (missingFiles)
            {
                MessageBox.Show(PluginResources.Message_Missing_Project_Files_Download_From_Server, PluginResources.Plugin_Name, MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }

            var commonService    = new ProjectFileService();
            var sdlxliffMerger   = new SdlxliffMerger();
            var segmentBuilder   = new SegmentBuilder();
            var sdlxliffExporter = new SdlxliffExporter(segmentBuilder);
            var sdlXliffReader   = new SdlxliffReader();

            _window = new StudioViewsFilesSplitView();
            var model = new StudioViewsFilesSplitViewModel(_window, selectedFiles, commonService,
                                                           sdlxliffMerger, sdlxliffExporter, sdlXliffReader);

            _window.DataContext = model;
            _window.ShowDialog();

            if (model.DialogResult != DialogResult.OK)
            {
                return;
            }


            OpenMessageWindow(model);
        }
Пример #10
0
        protected override void ConfigureConverter(ProjectFile projectFile, IMultiFileConverter multiFileConverter)
        {
            var languageName = projectFile.Language.CultureInfo.Name;

            var targetFile = _wizardContext.ProjectFiles.FirstOrDefault(a =>
                                                                        a.FileId == projectFile.Id.ToString() && a.TargetLanguage == languageName);

            if (targetFile != null)
            {
                if (!targetFile.Selected)
                {
                    return;
                }

                targetFile.Location = Path.Combine(targetFile.Project.Path, targetFile.Location.Trim('\\'));

                if (string.IsNullOrEmpty(_currentLanguage) || languageName != _currentLanguage)
                {
                    _logReport.AppendLine();
                    _logReport.AppendLine(string.Format(PluginResources.Label_Language, languageName));
                    _currentLanguage = languageName;
                }

                var sdlxliffReader = new SdlxliffReader(_segmentBuilder,
                                                        _exportSettings.ExportOptions,
                                                        GetAnalysisBands(Project as FileBasedProject));

                var xliffWriter = new XliffWriter(_exportSettings.ExportOptions.XliffSupport);

                var dateTimeStampToString = GetDateTimeStampToString(_exportSettings.DateTimeStamp);
                var workingFolder         = Path.Combine(_exportSettings.TransactionFolder, dateTimeStampToString);
                var languageFolder        = Path.Combine(workingFolder, languageName);

                var xliffFolder   = GetXliffFolder(languageFolder, targetFile);
                var xliffFilePath = Path.Combine(xliffFolder, targetFile.Name + ".xliff");

                _logReport.AppendLine(string.Format(PluginResources.label_SdlXliffFile, targetFile.Location));
                _logReport.AppendLine(string.Format(PluginResources.label_XliffFile, xliffFilePath));

                try
                {
                    var xliffData = sdlxliffReader.ReadFile(_projectInfo.Id.ToString(), targetFile.Location);
                    var exported  = xliffWriter.WriteFile(xliffData, xliffFilePath, _exportSettings.ExportOptions.IncludeTranslations);

                    if (exported)
                    {
                        targetFile.Date                        = new DateTime(_exportSettings.DateTimeStamp.Ticks, DateTimeKind.Utc);
                        targetFile.Action                      = Enumerators.Action.Export;
                        targetFile.Status                      = Enumerators.Status.Success;
                        targetFile.XliffFilePath               = xliffFilePath;
                        targetFile.ConfirmationStatistics      = sdlxliffReader.ConfirmationStatistics;
                        targetFile.TranslationOriginStatistics = sdlxliffReader.TranslationOriginStatistics;
                    }

                    var activityFile = new ProjectFileActivity
                    {
                        ProjectFileId               = targetFile.FileId,
                        ProjectFile                 = targetFile,
                        ActivityId                  = Guid.NewGuid().ToString(),
                        Action                      = Enumerators.Action.Export,
                        Status                      = exported ? Enumerators.Status.Success : Enumerators.Status.Error,
                        Date                        = targetFile.Date,
                        Name                        = Path.GetFileName(targetFile.XliffFilePath),
                        Path                        = Path.GetDirectoryName(targetFile.XliffFilePath),
                        ConfirmationStatistics      = targetFile.ConfirmationStatistics,
                        TranslationOriginStatistics = targetFile.TranslationOriginStatistics
                    };

                    targetFile.ProjectFileActivities.Add(activityFile);

                    if (!exported)
                    {
                        _isError = true;
                    }

                    _logReport.AppendLine(string.Format(PluginResources.Label_Success, exported));
                    _logReport.AppendLine();
                }
                catch (Exception ex)
                {
                    _logReport.AppendLine();
                    _logReport.AppendLine(string.Format(PluginResources.label_ExceptionMessage, ex.Message));

                    throw;
                }
            }
        }
Пример #11
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);
        }
Пример #12
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);
        }
Пример #13
0
        private Dictionary <string, List <string> > GetParagraphMap(SdlxliffReader sdlxliffReader, string projectId, string fileId, string path, string targetLanguage)
        {
            var xliffData = sdlxliffReader.ReadFile(projectId, fileId, path, targetLanguage);

            return(GetParagraphMap(xliffData));
        }
Пример #14
0
        protected override void Execute()
        {
            var projects = _controllers.TranscreateController.GetSelectedProjects();

            if (projects?.Count != 1)
            {
                Enabled = false;
                return;
            }

            var project = projects[0];

            if (project is BackTranslationProject)
            {
                return;
            }

            var studioProject = _controllers.ProjectsController.GetProjects()
                                .FirstOrDefault(a => a.GetProjectInfo().Id.ToString() == project.Id);

            if (studioProject == null)
            {
                return;
            }

            var studioProjectInfo = studioProject.GetProjectInfo();


            var backTranslationsFolder = Path.Combine(studioProjectInfo.LocalProjectFolder, "BackProjects");

            if (Directory.Exists(backTranslationsFolder))
            {
                var message01 = "The Back-Translations folder is not empty."
                                + Environment.NewLine + Environment.NewLine
                                + "'" + backTranslationsFolder + "'"
                                + Environment.NewLine + Environment.NewLine;
                var message02 = "Do you want to proceed and delete this folder?";

                var response = MessageBox.Show(message01 + message02, PluginResources.Plugin_Name,
                                               MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (response != DialogResult.Yes)
                {
                    return;
                }

                TryDeleteDirectory(backTranslationsFolder);
            }


            var taskContexts = new List <TaskContext>();

            var progressSettings = new ProgressDialogSettings(ApplicationInstance.GetActiveForm(), true, true, true);
            var result           = ProgressDialog.Execute("Create Back-Translation Projects", () =>
            {
                ProgressDialog.Current.Report(0, "Reading language files...");

                var dateTimeStamp         = DateTime.UtcNow;
                var dataTimeStampToString = DateTimeStampToString(dateTimeStamp);
                var workFlowPath          = GetPath(studioProjectInfo.LocalProjectFolder, "WorkFlow");
                var workingActionPath     = GetPath(workFlowPath, "Convert");
                var workingFolder         = GetPath(workingActionPath, dataTimeStampToString);

                var exportOptions = new ExportOptions();
                exportOptions.IncludeBackTranslations = true;
                exportOptions.IncludeTranslations     = true;
                exportOptions.CopySourceToTarget      = false;

                var importOptions = new ImportOptions();
                importOptions.OverwriteTranslations      = true;
                importOptions.OriginSystem               = "Transcreate Automation";
                importOptions.StatusTranslationUpdatedId = string.Empty;

                var analysisBands = _projectAutomationService.GetAnalysisBands(studioProject);

                var sdlxliffReader = new SdlxliffReader(_segmentBuilder, exportOptions, analysisBands);
                var sdlxliffWriter = new SdlxliffWriter(_segmentBuilder, importOptions, analysisBands);
                var xliffWriter    = new XliffWriter(Enumerators.XLIFFSupport.xliff12sdl);

                // Read the SDLXLIFF data
                var fileDataList = GetFileDataList(project, studioProjectInfo, sdlxliffReader);
                var filesWithEmptyTranslations = fileDataList.Count(a => a.HasEmptyTranslations);
                if (filesWithEmptyTranslations > 0)
                {
                    var message01 = string.Format(PluginResources.Found_empty_translations_in_0_files,
                                                  filesWithEmptyTranslations)
                                    + Environment.NewLine + Environment.NewLine;
                    var message02 = PluginResources.Proceed_and_copy_source_to_target_for_empty_translations;

                    var response = MessageBox.Show(message01 + message02, PluginResources.Plugin_Name,
                                                   MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (response != DialogResult.Yes)
                    {
                        return;
                    }
                }

                ProgressDialog.Current.ProgressBarIsIndeterminate = false;
                decimal maximum = project.TargetLanguages.Count;
                decimal current = 0;

                foreach (var targetLanguage in project.TargetLanguages)
                {
                    if (ProgressDialog.Current.CheckCancellationPending())
                    {
                        ProgressDialog.Current.ThrowIfCancellationPending();
                    }

                    current++;
                    var progress = current / maximum * 100;
                    ProgressDialog.Current.Report((int)progress, "Language: " + targetLanguage.CultureInfo.DisplayName);


                    var sourceFiles    = new List <string>();
                    var languageFolder = GetPath(workingFolder, targetLanguage.CultureInfo.Name);

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

                    var languageFileData = new List <FileData>();
                    foreach (var projectFile in targetFiles)
                    {
                        var fileData =
                            fileDataList.FirstOrDefault(a => a.Data.DocInfo.DocumentId == projectFile.FileId);
                        if (fileData == null)
                        {
                            continue;
                        }

                        SwitchSourceWithTargetSegments(fileData);

                        var xliffFolder   = GetPath(languageFolder, projectFile.Path);
                        var xliffFilePath = Path.Combine(xliffFolder,
                                                         projectFile.Name.Substring(0, projectFile.Name.Length - ".sdlxliff".Length));

                        // Write the XLIFF file
                        var success = xliffWriter.WriteFile(fileData.Data, xliffFilePath, true);
                        if (!success)
                        {
                            throw new Exception(string.Format(
                                                    PluginResources.Unexpected_error_while_converting_the_file, xliffFilePath));
                        }

                        sourceFiles.Add(xliffFilePath);
                        languageFileData.Add(fileData);
                    }

                    var iconPath = GetBackTranslationIconPath();

                    var newStudioProject = _projectAutomationService.CreateBackTranslationProject(
                        studioProject, targetLanguage.CultureInfo.Name, iconPath, sourceFiles, "BT");

                    _projectAutomationService.RunPretranslationWithoutTm(newStudioProject);

                    var taskContext = CreateBackTranslationTaskContext(newStudioProject, languageFileData,
                                                                       studioProjectInfo.LocalProjectFolder, sdlxliffReader, sdlxliffWriter, xliffWriter);

                    taskContext.Completed = true;
                    taskContexts.Add(taskContext);
                }
            }, progressSettings);

            if (result.Cancelled || result.OperationFailed)
            {
                TryDeleteDirectory(backTranslationsFolder);

                var message = result.Cancelled ? "Process cancelled by user." : result.Error?.Message;
                MessageBox.Show(message, PluginResources.Plugin_Name);
                return;
            }

            foreach (var taskContext in taskContexts)
            {
                CleanupProjectSettings(taskContext.FileBasedProject);

                ActivateProject(taskContext.FileBasedProject);
                _projectAutomationService.RemoveLastReportOfType("Translate");

                var reports = _controllers.TranscreateController.CreateHtmlReports(taskContext, taskContext.FileBasedProject, taskContext.Project);
                _controllers.TranscreateController.ReportsController.AddReports(_controllers.TranscreateController.ClientId, reports);

                _controllers.TranscreateController.UpdateBackTranslationProjectData(project, taskContext);
            }

            _controllers.TranscreateController.InvalidateProjectsContainer();

            Enabled = false;
        }
Пример #15
0
        private TaskContext CreateBackTranslationTaskContext(FileBasedProject newStudioProject,
                                                             IReadOnlyCollection <FileData> languageFileData, string localProjectFolder,
                                                             SdlxliffReader sdlxliffReader, SdlxliffWriter sdlxliffWriter, XliffWriter xliffWriter)
        {
            var newStudioProjectInfo = newStudioProject.GetProjectInfo();

            var action    = Enumerators.Action.CreateBackTranslation;
            var workFlow  = Enumerators.WorkFlow.Internal;
            var setttings = GetSettings();

            var taskContext = new TaskContext(action, workFlow, setttings);

            taskContext.AnalysisBands = _projectAutomationService.GetAnalysisBands(newStudioProject);
            taskContext.ExportOptions.IncludeBackTranslations = true;
            taskContext.ExportOptions.IncludeTranslations     = true;
            taskContext.ExportOptions.CopySourceToTarget      = false;


            taskContext.LocalProjectFolder = newStudioProjectInfo.LocalProjectFolder;
            taskContext.WorkflowFolder     = taskContext.GetWorkflowPath();

            var workingProject = _projectAutomationService.GetProject(newStudioProject, null);

            workingProject.ProjectFiles.RemoveAll(a => a.TargetLanguage == workingProject.SourceLanguage.CultureInfo.Name);
            taskContext.Project          = workingProject;
            taskContext.FileBasedProject = newStudioProject;
            taskContext.ProjectFiles     = workingProject.ProjectFiles;

            foreach (var projectFile in taskContext.ProjectFiles)
            {
                projectFile.Selected = true;
                var fileData = GetFileData(languageFileData, localProjectFolder, projectFile);

                var tmpInputFile = Path.GetTempFileName();
                File.Move(tmpInputFile, tmpInputFile + ".sdlxliff");
                tmpInputFile = tmpInputFile + ".sdlxliff";

                var paragraphMap = GetParagraphMap(sdlxliffReader, projectFile.ProjectId, projectFile.FileId,
                                                   projectFile.Location, projectFile.TargetLanguage);
                AlignParagraphIds(fileData.Data, paragraphMap.Keys.ToList());

                var filePath = Path.Combine(taskContext.WorkingFolder, projectFile.Path.Trim('\\'));

                var externalFilePath = Path.Combine(filePath, projectFile.Name + ".xliff");
                if (!Directory.Exists(filePath))
                {
                    Directory.CreateDirectory(filePath);
                }

                xliffWriter.WriteFile(fileData.Data, externalFilePath, true);

                var success = sdlxliffWriter.UpdateFile(fileData.Data, projectFile.Location, tmpInputFile, true);
                if (success)
                {
                    projectFile.Date                        = taskContext.DateTimeStamp;
                    projectFile.Action                      = action;
                    projectFile.WorkFlow                    = workFlow;
                    projectFile.Status                      = Enumerators.Status.Success;
                    projectFile.Report                      = string.Empty;
                    projectFile.ExternalFilePath            = externalFilePath;
                    projectFile.ConfirmationStatistics      = sdlxliffWriter.ConfirmationStatistics;
                    projectFile.TranslationOriginStatistics = sdlxliffWriter.TranslationOriginStatistics;
                }

                var activityFile = new ProjectFileActivity
                {
                    ProjectFileId               = projectFile.FileId,
                    ActivityId                  = Guid.NewGuid().ToString(),
                    Action                      = action,
                    WorkFlow                    = workFlow,
                    Status                      = success ? Enumerators.Status.Success : Enumerators.Status.Error,
                    Date                        = projectFile.Date,
                    Name                        = Path.GetFileName(projectFile.ExternalFilePath),
                    Path                        = Path.GetDirectoryName(projectFile.ExternalFilePath),
                    Report                      = string.Empty,
                    ProjectFile                 = projectFile,
                    ConfirmationStatistics      = projectFile.ConfirmationStatistics,
                    TranslationOriginStatistics = projectFile.TranslationOriginStatistics
                };

                projectFile.ProjectFileActivities.Add(activityFile);

                File.Copy(projectFile.Location, Path.Combine(filePath, projectFile.Name));
                File.Delete(projectFile.Location);

                File.Copy(tmpInputFile, projectFile.Location, true);
                File.Delete(tmpInputFile);
            }

            return(taskContext);
        }
Пример #16
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);
        }