コード例 #1
0
        private void AddMasterTM(FileBasedProject createdProject, string pathToTM)
        {
            TranslationProviderConfiguration config = createdProject.GetTranslationProviderConfiguration();

            config.Entries.Add(this.GetTranslationProviderCascadeEntry(pathToTM));
            createdProject.UpdateTranslationProviderConfiguration(config);
        }
コード例 #2
0
        private IProject PrepareStudioProject(PackageModel transitPackage)
        {
            var target = _fileService.GetStudioTargetLanguages(transitPackage.LanguagePairs);

            Directory.CreateDirectory(transitPackage.Location);             //if the location is set using project template feature this folder does not exist
            var projectInfo = new ProjectInfo
            {
                Name = transitPackage.Name,
                LocalProjectFolder = transitPackage.Location,
                SourceLanguage     = new Language(transitPackage.LanguagePairs[0].SourceLanguage),
                TargetLanguages    = target,
                DueDate            = transitPackage.DueDate,
                ProjectOrigin      = Resources.ProjectOrigin,
                IconPath           = _iconPath
            };
            var newProject = CreateNewProject(projectInfo, new ProjectTemplateReference(transitPackage.ProjectTemplate.Uri));

            if (transitPackage.Customer != null)
            {
                ((FileBasedProject)newProject).SetCustomer(transitPackage.Customer);
            }

            //Add StarTransit package source files. The same on all language pairs
            newProject.AddFiles(transitPackage.LanguagePairs[0].SourceFile.ToArray());

            //set the file role(user to display project details in Studio view)
            var sourceFilesIds = newProject.GetSourceLanguageFiles().GetIds();

            newProject.SetFileRole(sourceFilesIds, FileRole.Translatable);
            _tmConfig = newProject.GetTranslationProviderConfiguration();

            return(newProject);
        }
コード例 #3
0
        /// <summary>
        /// Add a server TM to be used for anaysis. The project languages are
        /// set according to the TM.
        /// </summary>
        private void AddServerTm(FileBasedProject project, string serverAddress, string organizationPath, string tmName, bool useWindowsSecurity, string username, string password)
        #endregion
        {
            #region "TranslationProviderConfiguration"
            Uri tmAddress = new Uri(String.Format("sdltm.{1}{2}/{3}", serverAddress, organizationPath, tmName));
            TranslationProviderConfiguration config = project.GetTranslationProviderConfiguration();
            #endregion

            #region "TranslationProviderCascadeEntryForServerTM"
            TranslationProviderCascadeEntry tm = new TranslationProviderCascadeEntry
                                                 (
                new TranslationProviderReference(tmAddress),
                true,
                false,
                false
                                                 );
            config.Entries.Add(tm);
            project.UpdateTranslationProviderConfiguration(config);
            #endregion

            #region "CredentialsForServerTm"
            project.Credentials.AddCredential(new Uri(serverAddress), String.Format("user={0};password={1};type=CustomUser", username, password, useWindowsSecurity ? "WindowsUser" : "CustomUser"));
            project.UpdateTranslationProviderConfiguration(config);
            #endregion
        }
コード例 #4
0
        public MessageModel CreateProject(PackageModel package)
        {
            _messageModel = new MessageModel();

            try
            {
                _penaltiesTmsList = new List <StarTranslationMemoryMetadata>();
                _machineTransList = new List <StarTranslationMemoryMetadata>();
                _tmConfig         = new TranslationProviderConfiguration();

                var target = GetTargetLanguages(package.LanguagePairs);

                var projectInfo = new ProjectInfo
                {
                    Name = package.Name,
                    LocalProjectFolder = package.Location,
                    SourceLanguage     = new Language(package.LanguagePairs[0].SourceLanguage),
                    TargetLanguages    = target,
                    DueDate            = package.DueDate
                };

                var newProject = new FileBasedProject(projectInfo, new ProjectTemplateReference(package.ProjectTemplate.Uri));
                if (package.Customer != null)
                {
                    newProject.SetCustomer(package.Customer);
                }

                //Add StarTransit package source files. The same on all language pairs
                var sourceProjectFiles = newProject.AddFiles(package.LanguagePairs[0].SourceFile.ToArray());

                //set the file role(user to display project details in Studio view)
                var sourceFilesIds = newProject.GetSourceLanguageFiles().GetIds();
                newProject.SetFileRole(sourceFilesIds, FileRole.Translatable);

                _tmConfig        = newProject.GetTranslationProviderConfiguration();
                _fileTypeManager = DefaultFileTypeManager.CreateInstance(true);

                var targetProjectFiles = new List <ProjectFile>();

                _messageModel = SetLanguagePairInformation(newProject, package, targetProjectFiles);

                if (_messageModel is null || !_messageModel.IsProjectCreated)
                {
                    if (Directory.Exists(Path.GetDirectoryName(newProject.FilePath)))
                    {
                        CreateMetadataFolder(package.Location, package.PathToPrjFile);
                        Controller.RefreshProjects();
                    }
                    _messageModel.IsProjectCreated = true;
                    _messageModel.Message          = "Project was successfully created!";
                    _messageModel.Title            = "Informative message";
                }
            }
            catch (Exception ex)
            {
                Log.Logger.Error($"CreateModel method: {ex.Message}\n {ex.StackTrace}");
                return(null);
            }
            return(_messageModel);
        }
コード例 #5
0
        public MessageModel CreateProject(PackageModel package)
        {
            try
            {
                var target = GetTargetLanguages(package.LanguagePairs);

                var projectInfo = new ProjectInfo
                {
                    Name = package.Name,
                    LocalProjectFolder = package.Location,
                    SourceLanguage     = new Language(package.LanguagePairs[0].SourceLanguage),
                    TargetLanguages    = target,
                    DueDate            = package.DueDate,
                    ProjectOrigin      = "Star Transit project",
                    IconPath           = _iconPath
                };

                var newProject = CreateNewProject(projectInfo, new ProjectTemplateReference(package.ProjectTemplate.Uri));

                if (package.Customer != null)
                {
                    ((FileBasedProject)newProject).SetCustomer(package.Customer);
                }

                //Add StarTransit package source files. The same on all language pairs
                newProject.AddFiles(package.LanguagePairs[0].SourceFile.ToArray());

                //set the file role(user to display project details in Studio view)
                var sourceFilesIds = newProject.GetSourceLanguageFiles().GetIds();
                newProject.SetFileRole(sourceFilesIds, FileRole.Translatable);

                _tmConfig = newProject.GetTranslationProviderConfiguration();

                _messageModel = SetLanguagePairInformation(newProject, package);

                if (_messageModel is null || _messageModel.Message is null)
                {
                    if (Directory.Exists(newProject?.GetProjectInfo()?.LocalProjectFolder))
                    {
                        CreateMetadataFolder(package.Location, package.PathToPrjFile);
                        _projectsController?.RefreshProjects();
                    }

                    if (_messageModel != null)
                    {
                        _messageModel.IsProjectCreated = true;
                        _messageModel.Message          = "Project was successfully created!";
                        _messageModel.Title            = "Informative message";
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Logger.Error($"CreateModel method: {ex.Message}\n {ex.StackTrace}");
                return(null);
            }
            return(_messageModel);
        }
コード例 #6
0
 public ProjectService()
 {
     _fileService        = new FileService();
     _messageModel       = new MessageModel();
     _penaltiesTmsList   = new List <StarTranslationMemoryMetadata>();
     _machineTransList   = new List <StarTranslationMemoryMetadata>();
     _tmConfig           = new TranslationProviderConfiguration();
     _targetProjectFiles = new List <ProjectFile>();
 }
コード例 #7
0
        public ProjectService()
        {
            _fileService  = new FileService();
            _messageModel = new MessageModel();
            _tmConfig     = new TranslationProviderConfiguration();
            var studioVersion = new StudioVersionService().GetStudioVersion();

            _initialFolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), studioVersion.StudioDocumentsFolderName, "Translation Memories");
        }
コード例 #8
0
 /// <summary>
 /// Validates the translation provider configuration.
 /// </summary>
 /// <param name="providerConfig">The provider configuration.</param>
 private void ValidateTranslationProviderConfiguration(TranslationProviderConfiguration providerConfig)
 {
     foreach (TranslationProviderCascadeEntry entry in providerConfig.Entries)
     {
         if (entry.PerformUpdate && !entry.PerformNormalSearch)
         {
             entry.PerformNormalSearch = true;
         }
     }
 }
コード例 #9
0
ファイル: Project.cs プロジェクト: KamilChlodek/Sdl-Community
        public void Execute()
        {
            var projectInfo = new ProjectInfo
            {
                Name            = "TestProject",
                SourceLanguage  = new Language(CultureInfo.GetCultureInfo("en-US")),                //import Sdl.core.globalization.dll
                TargetLanguages = new[] { new Language(CultureInfo.GetCultureInfo("de-DE")), },
                //file path where you want to save the project
                LocalProjectFolder = $@""
            };

            //import Sdl.ProjectAutomation.FileBased
            var fileBasedProject = new FileBasedProject(projectInfo);

            //HERE YOU NEED TO ADD THE PATH FOR FILES YOU WANT TO INCLUDE IN YOUR PROJECT
            var filesPath = new[] { @"C" };

            //add files to project
            var projectFiles = fileBasedProject.AddFiles(filesPath);
            //Translation provider configuration
            var translationProviderConfig = new TranslationProviderConfiguration();
            var entry = new TranslationProviderCascadeEntry(
                @"En-DeTM.sdltm", true, true, true);

            translationProviderConfig.Entries.Add(entry);
            fileBasedProject.UpdateTranslationProviderConfiguration(translationProviderConfig);
            //we need to run automatic task to create the project in studio
            fileBasedProject.RunAutomaticTask(projectFiles.GetIds(), AutomaticTaskTemplateIds.Scan);
            var taskSequence = fileBasedProject.RunAutomaticTasks(projectFiles.GetIds(),
                                                                  new[]
            {
                AutomaticTaskTemplateIds.ConvertToTranslatableFormat,
                AutomaticTaskTemplateIds.CopyToTargetLanguages, AutomaticTaskTemplateIds.PerfectMatch,
                AutomaticTaskTemplateIds.PreTranslateFiles,
            });

            if (taskSequence.Status == TaskStatus.Completed)
            {
                //project was created succesfully
            }
            else
            {
                if (taskSequence.Status.Equals(TaskStatus.Failed))
                {
                    foreach (var subTask in taskSequence.SubTasks)
                    {
                    }
                }
            }
            fileBasedProject.Save();
        }
コード例 #10
0
        public ProjectService(IFileTypeManager fileTypeManager, Helpers helpers)
        {
            _fileTypeManager = fileTypeManager;
            if (helpers != null)
            {
                _projectsController = helpers.GetProjectsController();
                _iconPath           = string.IsNullOrEmpty(_iconPath) ? helpers.GetIconPath() : _iconPath;
            }

            _messageModel       = new MessageModel();
            _penaltiesTmsList   = new List <StarTranslationMemoryMetadata>();
            _machineTransList   = new List <StarTranslationMemoryMetadata>();
            _tmConfig           = new TranslationProviderConfiguration();
            _targetProjectFiles = new List <ProjectFile>();
        }
コード例 #11
0
        public void AddBeglobalEnterpriseMT(FileBasedProject project, string host, string port, string accountid, string apiKey, string touchpointId, string userId)
        {
            Uri uri = new Uri(String.Format(@"languageweavermt.https://{0}-{1}@{2}:{3}/aspmodel=REST&touchpointId={4}", accountid, userId, host, port, touchpointId));

            TranslationProviderConfiguration tmConfig = project.GetTranslationProviderConfiguration();

            tmConfig.Entries.Add
            (
                new TranslationProviderCascadeEntry
                (
                    new TranslationProviderReference(uri), false, true, true, 0
                )
            );

            project.Credentials.AddCredential(uri, apiKey);
            project.UpdateTranslationProviderConfiguration(tmConfig);
        }
コード例 #12
0
        public void AddFileBasedTMWithPassword(FileBasedProject project, string pathIncludingFileName, string password)
        {
            Uri uri = new Uri(String.Concat("sdltm.file://", pathIncludingFileName));

            TranslationProviderConfiguration tmConfig = project.GetTranslationProviderConfiguration();

            tmConfig.Entries.Add
            (
                new TranslationProviderCascadeEntry
                (
                    new TranslationProviderReference(uri), true, true, true, 0
                )
            );

            project.Credentials.AddCredential(uri, password);
            project.UpdateTranslationProviderConfiguration(tmConfig);
        }
コード例 #13
0
        public void AddBeglobalCommunityMT(FileBasedProject project)
        {
            TranslationProviderConfiguration tmConfig = project.GetTranslationProviderConfiguration();

            Uri BeGlobalCommunityUri = new Uri("beglobalcommunity://");

            tmConfig.Entries.Add
            (
                new TranslationProviderCascadeEntry
                (
                    new TranslationProviderReference(BeGlobalCommunityUri), false, true, true, 0
                )

            );

            project.UpdateTranslationProviderConfiguration(tmConfig);
        }
コード例 #14
0
        /// <summary>
        /// Merges the translation providers.
        /// </summary>
        /// <param name="sourceProviderConfig">The source provider configuration.</param>
        /// <param name="targetProviderConfig">The target provider configuration.</param>
        private void MergeTranslationProviders(TranslationProviderConfiguration sourceProviderConfig, TranslationProviderConfiguration targetProviderConfig)
        {
            // Remember where we're going to insert the translation providers
            int indexToInsert = 0;

            // Look at each translation provider in the source project
            foreach (TranslationProviderCascadeEntry sourceCascadeEntry in sourceProviderConfig.Entries)
            {
                // See if we can match the translation provider to one already there
                bool foundEntry = targetProviderConfig.Entries.Any(targetCascadeEntry => sourceCascadeEntry.MainTranslationProvider.Uri == targetCascadeEntry.MainTranslationProvider.Uri);

                // If we didn't find the translation provider then add a new one to the target project
                if (!foundEntry)
                {
                    targetProviderConfig.Entries.Insert(indexToInsert++, sourceCascadeEntry);
                }
            }
        }
コード例 #15
0
        /// <summary>
        /// Adds the TM that should be used for the analysis. The project languages are
        /// set according to the TM.
        /// </summary>
        #region "AddTmFunction"
        private void AddTm(FileBasedProject project, string tmFilePath)
        #endregion
        {
            #region "TranslationProviderConfiguration"
            TranslationProviderConfiguration config = project.GetTranslationProviderConfiguration();
            #endregion

            #region "TranslationProviderCascadeEntry"
            TranslationProviderCascadeEntry tm = new TranslationProviderCascadeEntry(
                tmFilePath,
                true,
                true,
                false);
            config.Entries.Add(tm);

            project.UpdateTranslationProviderConfiguration(config);
            #endregion
        }
コード例 #16
0
        private void AddServerBasedTM(FileBasedProject project, Uri uri, string path, string tmname)
        {
            TranslationProviderConfiguration tmConfig = project.GetTranslationProviderConfiguration();

            tmConfig.Entries.Add
            (
                new TranslationProviderCascadeEntry
                (
                    new TranslationProviderReference(new Uri(String.Format("{0}{1}/{2}", uri, path, tmname))),
                    true,
                    true,
                    true,
                    0
                )
            );

            //The credentials for a server based TM are keyed to the server address without path or tm name
            project.Credentials.AddCredential(uri, "user=myuser;password=mypassword;type=CustomUser");
            project.UpdateTranslationProviderConfiguration(tmConfig);
        }
コード例 #17
0
        public void AddGoogleMT(FileBasedProject project, string apiKey)
        {
            Uri GoogleUri = new Uri("googlemt://");

            TranslationProviderConfiguration tmConfig = project.GetTranslationProviderConfiguration();

            tmConfig.Entries.Add
            (
                new TranslationProviderCascadeEntry
                (
                    new TranslationProviderReference(GoogleUri), false, true, true, 0
                )
            );

            //Add the Google Api key. To get an Api Key you will need to sign up with Google for the
            //Google Translate API V2 service.
            project.Credentials.AddCredential(GoogleUri, apiKey);

            project.UpdateTranslationProviderConfiguration(tmConfig);
        }
コード例 #18
0
        public void AddMasterTMs(FileBasedProject project, string path)
        {
            #region "TranslationProviderConfiguration"
            Language trgLangDe = new Language(CultureInfo.GetCultureInfo("de-DE"));
            Language trgLangFr = new Language(CultureInfo.GetCultureInfo("fr-FR"));

            TranslationProviderConfiguration tmConfigEnDe = project.GetTranslationProviderConfiguration(trgLangDe);
            TranslationProviderConfiguration tmConfigEnFr = project.GetTranslationProviderConfiguration(trgLangFr);
            #endregion

            #region "ConfigureTms"
            TranslationProviderCascadeEntry[] tmEntriesEnDe =
            {
                new TranslationProviderCascadeEntry(path + "Software En-De.sdltm", true, true, true, 0),
                new TranslationProviderCascadeEntry(path + "General En-De.sdltm",  true, true, true, 2),
            };

            TranslationProviderCascadeEntry[] tmEntriesEnFr =
            {
                new TranslationProviderCascadeEntry(path + "Software En-Fr.sdltm", true, true, true, 0),
                new TranslationProviderCascadeEntry(path + "General En-Fr.sdltm",  true, true, true, 2)
            };
            #endregion

            #region "AddTmsAndUpdate"
            for (int i = 0; i < tmEntriesEnDe.Length; i++)
            {
                tmConfigEnDe.Entries.Add(tmEntriesEnDe[i]);
            }

            for (int i = 0; i < tmEntriesEnFr.Length; i++)
            {
                tmConfigEnDe.Entries.Add(tmEntriesEnFr[i]);
            }

            project.UpdateTranslationProviderConfiguration(trgLangDe, tmConfigEnDe);
            project.UpdateTranslationProviderConfiguration(trgLangFr, tmConfigEnFr);
            #endregion
        }
コード例 #19
0
ファイル: Program.cs プロジェクト: av1611/OPUS-CAT
        private static FileBasedProject CreateProject(string tmPath, FileInfo sourceFile, Language sourceLang, Language targetLang)
        {
            ProjectInfo info = new ProjectInfo();

            info.SourceLanguage     = sourceLang;
            info.TargetLanguages    = new Language[] { targetLang };
            info.LocalProjectFolder = Path.Combine(
                sourceFile.DirectoryName,
                Path.GetFileNameWithoutExtension(sourceFile.FullName));
            info.Name = Path.GetFileNameWithoutExtension(sourceFile.FullName);

            FileBasedProject newProject = new FileBasedProject(info);

            TranslationProviderConfiguration tmConfig = newProject.GetTranslationProviderConfiguration();

            tmConfig.Entries.Add(new TranslationProviderCascadeEntry(tmPath, false, true, true));
            newProject.UpdateTranslationProviderConfiguration(tmConfig);

            newProject.AddFiles(new string[] { sourceFile.FullName });

            AutomaticTask scanFiles = newProject.RunAutomaticTask(
                newProject.GetSourceLanguageFiles().GetIds(),
                AutomaticTaskTemplateIds.Scan);

            AutomaticTask convertFiles = newProject.RunAutomaticTask(
                newProject.GetSourceLanguageFiles().GetIds(),
                AutomaticTaskTemplateIds.ConvertToTranslatableFormat);

            AutomaticTask copyFiles = newProject.RunAutomaticTask(
                newProject.GetSourceLanguageFiles().GetIds(),
                AutomaticTaskTemplateIds.CopyToTargetLanguages);

            newProject.Save();

            return(newProject);
        }
コード例 #20
0
        void ServerPuttingItAllTogether()
        {
            const string tmServerPrefix = "sdltm.";

            string localcopylocation = @"C:\Projects\";
            string serverName        = "http://myServerAddress:80";
            Uri    serverAddress     = new Uri(serverName);
            string organizationPath  = "/MyOrganizationPath";

            ProjectServer     server      = new ProjectServer(serverAddress, false, "MyUser", "MyPassword");
            ServerProjectInfo projectInfo = server.GetServerProject("/MyOrganization/MyProject");

            FileBasedProject project;

            if (projectInfo != null)
            {
                project = server.OpenProject(projectInfo.ProjectId, localcopylocation + projectInfo.Name);

                ProjectFile[] sourceFiles = project.GetSourceLanguageFiles();
                project.UndoCheckoutFiles(sourceFiles.GetIds());

                //Add a server based translation provider
                Uri tmAddress = new Uri(String.Format("{0}{1}{2}/{3}", tmServerPrefix, serverAddress, organizationPath, "UnitTestTm"));
                TranslationProviderConfiguration tmConfig = project.GetTranslationProviderConfiguration();
                tmConfig.Entries.Add
                (
                    new TranslationProviderCascadeEntry
                    (
                        new TranslationProviderReference(tmAddress),
                        true,
                        true,
                        true,
                        0
                    )
                );

                //The credentials for a server based TM are keyed to the server address without path or tm name
                project.Credentials.AddCredential(serverAddress, "user=sa;password=sa;type=CustomUser");
                project.UpdateTranslationProviderConfiguration(tmConfig);

                List <TaskStatusEventArgs> taskStatusEventArgsList = new List <TaskStatusEventArgs>();
                List <MessageEventArgs>    messageEventArgsList    = new List <MessageEventArgs>();

                // Run tasks for source files to create target files
                AutomaticTask scanTask = project.RunAutomaticTask(
                    sourceFiles.GetIds(),
                    AutomaticTaskTemplateIds.Scan,
                    (sender, taskStatusArgs) => taskStatusEventArgsList.Add(taskStatusArgs),
                    (sender, messageArgs) => messageEventArgsList.Add(messageArgs));

                AutomaticTask convertTask = project.RunAutomaticTask(
                    sourceFiles.GetIds(),
                    AutomaticTaskTemplateIds.ConvertToTranslatableFormat,
                    (sender, taskStatusArgs) => taskStatusEventArgsList.Add(taskStatusArgs),
                    (sender, messageArgs) => messageEventArgsList.Add(messageArgs));

                AutomaticTask copyToTargetTask = project.RunAutomaticTask(
                    sourceFiles.GetIds(),
                    AutomaticTaskTemplateIds.CopyToTargetLanguages,
                    (sender, taskStatusArgs) => taskStatusEventArgsList.Add(taskStatusArgs),
                    (sender, messageArgs) => messageEventArgsList.Add(messageArgs));

                // Run tasks for target files
                ProjectFile[] targetFiles = project.GetTargetLanguageFiles();

                AutomaticTask perfectMatchTask = project.RunAutomaticTask(
                    targetFiles.GetIds(),
                    AutomaticTaskTemplateIds.PerfectMatch,
                    (sender, taskStatusArgs) => taskStatusEventArgsList.Add(taskStatusArgs),
                    (sender, messageArgs) => messageEventArgsList.Add(messageArgs));

                AutomaticTask analyseTask = project.RunAutomaticTask(
                    targetFiles.GetIds(),
                    AutomaticTaskTemplateIds.AnalyzeFiles,
                    (sender, taskStatusArgs) => taskStatusEventArgsList.Add(taskStatusArgs),
                    (sender, messageArgs) => messageEventArgsList.Add(messageArgs));

                AutomaticTask preTranslateTask = project.RunAutomaticTask(
                    targetFiles.GetIds(),
                    AutomaticTaskTemplateIds.PreTranslateFiles,
                    (sender, taskStatusArgs) => taskStatusEventArgsList.Add(taskStatusArgs),
                    (sender, messageArgs) => messageEventArgsList.Add(messageArgs));

                AutomaticTask populateProjTmTask = project.RunAutomaticTask(
                    targetFiles.GetIds(),
                    AutomaticTaskTemplateIds.PopulateProjectTranslationMemories,
                    (sender, taskStatusArgs) => taskStatusEventArgsList.Add(taskStatusArgs),
                    (sender, messageArgs) => messageEventArgsList.Add(messageArgs));

                //Check in the new target files
                targetFiles = project.GetTargetLanguageFiles();
                project.CheckinFiles(targetFiles.GetIds(), "Target Files Created and Pre-translated", null);

                //Save the project back to disk
                project.Save();
            }
        }
コード例 #21
0
        /// <summary>
        /// Executes this instance.
        /// </summary>
        protected override void Execute()
        {
            string          grammarCheckerSettingsId      = "GrammarCheckerSettings";
            string          numberVerifierSettingsId      = "NumberVerifierSettings";
            IExtensionPoint globalVerifiersExtensionPoint = PluginManager.DefaultPluginRegistry.GetExtensionPoint <GlobalVerifierAttribute>();

            foreach (IExtension extension in globalVerifiersExtensionPoint.Extensions)
            {
                IGlobalVerifier globalVerifier  = (IGlobalVerifier)extension.CreateInstance();
                string          settingsGroupId = globalVerifier.SettingsId;
                if (settingsGroupId.Contains("Grammar"))
                {
                    grammarCheckerSettingsId = settingsGroupId;
                }

                if (settingsGroupId.Contains("Number"))
                {
                    numberVerifierSettingsId = settingsGroupId;
                }
            }

            // Show the dialog
            ApplyTemplateForm applyTemplateForm = new ApplyTemplateForm(Controller);

            if (applyTemplateForm.ShowDialog() == DialogResult.OK)
            {
                // This is the template that the user selected
                ApplyTemplate selectedTemplate = applyTemplateForm.ActiveTemplate;

                // Create list of projects
                List <FileBasedProject> selectedProjects = new List <FileBasedProject>();
                if (applyTemplateForm.ApplyToSelected)
                {
                    selectedProjects.AddRange(Controller.SelectedProjects);
                }
                else
                {
                    if (Controller.CurrentProject != null)
                    {
                        selectedProjects.Add(Controller.CurrentProject);
                    }
                }

                // Check if we have any projects
                if (selectedProjects.Count == 0)
                {
                    MessageBox.Show(applyTemplateForm.ApplyToSelected ? PluginResources.No_Projects_Selected : PluginResources.No_Current_Project, PluginResources.Plugin_Name, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                // Work through all projects
                StringBuilder projectsList = new StringBuilder();
                projectsList.AppendLine(PluginResources.Settings_Applied);
                foreach (FileBasedProject targetProject in selectedProjects)
                {
                    // Temporary folder path
                    string tempFolder = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));

                    // This is the current project and it's related information
                    ProjectInfo targetProjectInfo = targetProject.GetProjectInfo();
                    projectsList.AppendLine(targetProjectInfo.Name);
                    ISettingsBundle targetSettingsBundle = targetProject.GetSettings();

                    // This is the source project - check if it's a loaded one
                    FileBasedProject sourceProject = Controller.GetAllProjects().FirstOrDefault(loadedProject => String.Compare(loadedProject.FilePath, selectedTemplate.FileLocation, StringComparison.OrdinalIgnoreCase) == 0);

                    // Not found so load it from the filing system
                    if (sourceProject == null)
                    {
                        if (string.IsNullOrEmpty(selectedTemplate.FileLocation))
                        {
                            if (selectedTemplate.Id != Guid.Empty)
                            {
                                // Create a new project based on a template configured in Studio
                                ProjectTemplateReference projectTemplate = new ProjectTemplateReference(selectedTemplate.Uri);
                                string savedFolder = targetProjectInfo.LocalProjectFolder;
                                targetProjectInfo.LocalProjectFolder = tempFolder;
                                sourceProject = new FileBasedProject(targetProjectInfo, projectTemplate);
                                targetProjectInfo.LocalProjectFolder = savedFolder;
                            }
                        }
                        else
                        {
                            if (Path.GetExtension(selectedTemplate.FileLocation).ToLowerInvariant() == ".sdltpl")
                            {
                                // Create a new project based on a file-based template
                                ProjectTemplateReference projectTemplate = new ProjectTemplateReference(selectedTemplate.FileLocation);
                                string savedFolder = targetProjectInfo.LocalProjectFolder;
                                targetProjectInfo.LocalProjectFolder = tempFolder;
                                sourceProject = new FileBasedProject(targetProjectInfo, projectTemplate);
                                targetProjectInfo.LocalProjectFolder = savedFolder;
                            }
                            else
                            {
                                // Load a project from the filing system
                                sourceProject = new FileBasedProject(selectedTemplate.FileLocation);
                            }
                        }
                    }

                    // Get the information from the source project
                    ProjectInfo     sourceProjectInfo    = sourceProject.GetProjectInfo();
                    ISettingsBundle sourceSettingsBundle = sourceProject.GetSettings();

                    // Copy all languages translation providers
                    if (selectedTemplate.TranslationProvidersAllLanguages != ApplyTemplateOptions.Keep)
                    {
                        try
                        {
                            // Update the "all languages" node
                            TranslationProviderConfiguration sourceProviderConfig = sourceProject.GetTranslationProviderConfiguration();
                            if (selectedTemplate.TranslationProvidersAllLanguages == ApplyTemplateOptions.Merge)
                            {
                                TranslationProviderConfiguration targetProviderConfig = targetProject.GetTranslationProviderConfiguration();
                                MergeTranslationProviders(sourceProviderConfig, targetProviderConfig);
                                ValidateTranslationProviderConfiguration(targetProviderConfig);
                                targetProject.UpdateTranslationProviderConfiguration(targetProviderConfig);
                            }
                            else
                            {
                                ValidateTranslationProviderConfiguration(sourceProviderConfig);
                                targetProject.UpdateTranslationProviderConfiguration(sourceProviderConfig);
                            }
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, PluginResources.TPAL_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }

                    // Copy language-specific translation providers
                    if (selectedTemplate.TranslationProvidersSpecificLanguages != ApplyTemplateOptions.Keep)
                    {
                        if (sourceProjectInfo.SourceLanguage.Equals(targetProjectInfo.SourceLanguage))
                        {
                            foreach (Language sourceTargetLanguage in sourceProjectInfo.TargetLanguages)
                            {
                                foreach (Language targetTargetLanguage in targetProjectInfo.TargetLanguages)
                                {
                                    if (sourceTargetLanguage.Equals(targetTargetLanguage))
                                    {
                                        try
                                        {
                                            // Copy translation providers
                                            TranslationProviderConfiguration sourceProviderConfig = sourceProject.GetTranslationProviderConfiguration(sourceTargetLanguage);
                                            if (selectedTemplate.TranslationProvidersSpecificLanguages == ApplyTemplateOptions.Merge)
                                            {
                                                TranslationProviderConfiguration targetProviderConfig = targetProject.GetTranslationProviderConfiguration(targetTargetLanguage);
                                                MergeTranslationProviders(sourceProviderConfig, targetProviderConfig);
                                                ValidateTranslationProviderConfiguration(targetProviderConfig);
                                                targetProject.UpdateTranslationProviderConfiguration(targetTargetLanguage, targetProviderConfig);
                                            }
                                            else
                                            {
                                                ValidateTranslationProviderConfiguration(sourceProviderConfig);
                                                targetProject.UpdateTranslationProviderConfiguration(targetTargetLanguage, sourceProviderConfig);
                                            }
                                        }
                                        catch (Exception e)
                                        {
                                            MessageBox.Show(e.Message, string.Format(PluginResources.TPSL_Failed, targetTargetLanguage.DisplayName), MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    // Copy TM settings for all languages
                    if (selectedTemplate.TranslationMemoriesAllLanguages == ApplyTemplateOptions.Overwrite)
                    {
                        try
                        {
                            // Update the translation memory filter settings
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "TranslationMemorySettings", targetProject, null);
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, PluginResources.TMAL_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }

                    // Copy TM settings for specific languages
                    if (selectedTemplate.TranslationMemoriesSpecificLanguages == ApplyTemplateOptions.Overwrite)
                    {
                        if (sourceProjectInfo.SourceLanguage.Equals(targetProjectInfo.SourceLanguage))
                        {
                            foreach (Language sourceTargetLanguage in sourceProjectInfo.TargetLanguages)
                            {
                                foreach (Language targetTargetLanguage in targetProjectInfo.TargetLanguages)
                                {
                                    if (sourceTargetLanguage.Equals(targetTargetLanguage))
                                    {
                                        try
                                        {
                                            // Now copy translation memory settings - different section
                                            ISettingsBundle sourceTmSettings = sourceProject.GetSettings(sourceTargetLanguage);
                                            ISettingsBundle targetTmSettings = targetProject.GetSettings(targetTargetLanguage);
                                            CopySettingsGroup(sourceTmSettings, targetTmSettings, "TranslationMemorySettings", targetProject, targetTargetLanguage);
                                        }
                                        catch (Exception e)
                                        {
                                            MessageBox.Show(e.Message, string.Format(PluginResources.TMSL_Failed, targetTargetLanguage.DisplayName), MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    // Copy terminology termbases
                    if (selectedTemplate.TerminologyTermbases != ApplyTemplateOptions.Keep)
                    {
                        TermbaseConfiguration sourceTermbaseConfig = sourceProject.GetTermbaseConfiguration();
                        TermbaseConfiguration targetTermbaseConfig = targetProject.GetTermbaseConfiguration();

                        if (selectedTemplate.TerminologyTermbases == ApplyTemplateOptions.Merge)
                        {
                            MergeTermbases(sourceTermbaseConfig, targetTermbaseConfig);
                        }
                        else
                        {
                            targetTermbaseConfig.TermbaseServerUri = sourceTermbaseConfig.TermbaseServerUri;
                            targetTermbaseConfig.Termbases.Clear();
                            targetTermbaseConfig.LanguageIndexes.Clear();
                            MergeTermbases(sourceTermbaseConfig, targetTermbaseConfig);
                        }

                        // Updating with zero termbases throws an exception
                        if (targetTermbaseConfig.Termbases.Count > 0)
                        {
                            try
                            {
                                targetProject.UpdateTermbaseConfiguration(targetTermbaseConfig);
                            }
                            catch (Exception e)
                            {
                                MessageBox.Show(e.Message, PluginResources.TBTB_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            }
                        }
                    }

                    // Copy terminology settings
                    if (selectedTemplate.TerminologySearchSettings == ApplyTemplateOptions.Overwrite)
                    {
                        TermbaseConfiguration sourceTermbaseConfig = sourceProject.GetTermbaseConfiguration();
                        TermbaseConfiguration targetTermbaseConfig = targetProject.GetTermbaseConfiguration();
                        targetTermbaseConfig.TermRecognitionOptions = sourceTermbaseConfig.TermRecognitionOptions;

                        // Updating with zero termbases throws an exception
                        if (targetTermbaseConfig.Termbases.Count > 0)
                        {
                            try
                            {
                                targetProject.UpdateTermbaseConfiguration(targetTermbaseConfig);
                            }
                            catch (Exception e)
                            {
                                MessageBox.Show(e.Message, PluginResources.TBSS_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            }
                        }
                    }

                    // Copy QA verification settings where applicable
                    if (selectedTemplate.VerificationQaChecker30 == ApplyTemplateOptions.Overwrite)
                    {
                        try
                        {
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "QAVerificationSettings", targetProject, null);
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, PluginResources.QAQA_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }

                    // Copy tag verification settings where applicable
                    if (selectedTemplate.VerificationTagVerifier == ApplyTemplateOptions.Overwrite)
                    {
                        try
                        {
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "SettingsTagVerifier", targetProject, null);
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, PluginResources.QATG_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }

                    // Copy term verification settings where applicable
                    if (selectedTemplate.VerificationTerminologyVerifier == ApplyTemplateOptions.Overwrite)
                    {
                        try
                        {
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "SettingsTermVerifier", targetProject, null);
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, PluginResources.QATV_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }

                    // Copy number verification settings where applicable
                    if (selectedTemplate.VerificationNumberVerifier == ApplyTemplateOptions.Overwrite)
                    {
                        try
                        {
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, numberVerifierSettingsId, targetProject, null);
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, PluginResources.QANV_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }

                    // Copy grammar checking settings where applicable
                    if (selectedTemplate.VerificationGrammarChecker == ApplyTemplateOptions.Overwrite)
                    {
                        try
                        {
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, grammarCheckerSettingsId, targetProject, null);
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, PluginResources.QAGC_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }

                    // Copy file type settings where applicable
                    if (selectedTemplate.FileTypes == ApplyTemplateOptions.Overwrite)
                    {
                        try
                        {
                            var copiedTypes = new List <string>();
                            foreach (ProjectFile projectFile in targetProject.GetTargetLanguageFiles())
                            {
                                if (!copiedTypes.Contains(projectFile.FileTypeId))
                                {
                                    copiedTypes.Add(projectFile.FileTypeId);
                                    CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, projectFile.FileTypeId, targetProject, null);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, PluginResources.FTTS_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }

                    // Copy batch tasks settings where applicable
                    if (selectedTemplate.BatchTasksAllLanguages == ApplyTemplateOptions.Overwrite)
                    {
                        try
                        {
                            // Update the translation memory filter settings
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "PseudoTranslateSettings", targetProject, null);
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "AnalysisTaskSettings", targetProject, null);
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "VerificationSettings", targetProject, null);
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "TranslateTaskSettings", targetProject, null);
                            CopySettingsGroup(sourceSettingsBundle, targetSettingsBundle, "TranslationMemoryUpdateTaskSettings", targetProject, null);
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, PluginResources.BTAL_Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }

                    if (selectedTemplate.BatchTasksSpecificLanguages == ApplyTemplateOptions.Overwrite)
                    {
                        // Update specific language pairs where possible
                        if (sourceProjectInfo.SourceLanguage.Equals(targetProjectInfo.SourceLanguage))
                        {
                            foreach (Language sourceTargetLanguage in sourceProjectInfo.TargetLanguages)
                            {
                                foreach (Language targetTargetLanguage in targetProjectInfo.TargetLanguages)
                                {
                                    if (sourceTargetLanguage.Equals(targetTargetLanguage))
                                    {
                                        try
                                        {
                                            // Now copy translation memory settings - different section
                                            ISettingsBundle sourceTmSettings = sourceProject.GetSettings(sourceTargetLanguage);
                                            ISettingsBundle targetTmSettings = targetProject.GetSettings(targetTargetLanguage);
                                            CopySettingsGroup(sourceTmSettings, targetTmSettings, "PseudoTranslateSettings", targetProject, targetTargetLanguage);
                                            CopySettingsGroup(sourceTmSettings, targetTmSettings, "AnalysisTaskSettings", targetProject, targetTargetLanguage);
                                            CopySettingsGroup(sourceTmSettings, targetTmSettings, "VerificationSettings", targetProject, targetTargetLanguage);
                                            CopySettingsGroup(sourceTmSettings, targetTmSettings, "TranslateTaskSettings", targetProject, targetTargetLanguage);
                                            CopySettingsGroup(sourceTmSettings, targetTmSettings, "TranslationMemoryUpdateTaskSettings", targetProject, targetTargetLanguage);
                                        }
                                        catch (Exception e)
                                        {
                                            MessageBox.Show(e.Message, string.Format(PluginResources.BTSL_Failed, targetTargetLanguage.DisplayName), MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    // Remove the temporary folder if it exists
                    if (Directory.Exists(tempFolder))
                    {
                        Directory.Delete(tempFolder, true);
                    }

                    // Use reflection to synch the project to the server
                    try
                    {
                        var project = typeof(FileBasedProject).GetField("_project", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(targetProject);
                        project.GetType().GetMethod("UpdateServerProjectSettings").Invoke(project, null);
                    }
                    catch
                    {
                    }
                }

                // Tell the user we're done
                MessageBox.Show(projectsList.ToString(), PluginResources.Plugin_Name, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            // Save the project templates anyway
            applyTemplateForm.SaveProjectTemplates();
        }