diff --git a/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyStudioProjectTemplateAction.cs b/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyStudioProjectTemplateAction.cs index 3eff445431..b5ec6a378a 100644 --- a/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyStudioProjectTemplateAction.cs +++ b/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyStudioProjectTemplateAction.cs @@ -164,10 +164,10 @@ protected override void Execute() { // Update the "all languages" node TranslationProviderConfiguration sourceProviderConfig = sourceProject.GetTranslationProviderConfiguration(); - if (selectedTemplate.TranslationProvidersAllLanguages == ApplyTemplateOptions.Merge) + if (selectedTemplate.TranslationProvidersAllLanguages != ApplyTemplateOptions.Overwrite) { TranslationProviderConfiguration targetProviderConfig = targetProject.GetTranslationProviderConfiguration(); - MergeTranslationProviders(sourceProviderConfig, targetProviderConfig); + MergeTranslationProviders(sourceProviderConfig, targetProviderConfig, selectedTemplate.TranslationProvidersAllLanguages); ValidateTranslationProviderConfiguration(targetProviderConfig); targetProject.UpdateTranslationProviderConfiguration(targetProviderConfig); } @@ -198,10 +198,10 @@ protected override void Execute() { // Copy translation providers TranslationProviderConfiguration sourceProviderConfig = sourceProject.GetTranslationProviderConfiguration(sourceTargetLanguage); - if (selectedTemplate.TranslationProvidersSpecificLanguages == ApplyTemplateOptions.Merge) + if (selectedTemplate.TranslationProvidersSpecificLanguages != ApplyTemplateOptions.Overwrite) { TranslationProviderConfiguration targetProviderConfig = targetProject.GetTranslationProviderConfiguration(targetTargetLanguage); - MergeTranslationProviders(sourceProviderConfig, targetProviderConfig); + MergeTranslationProviders(sourceProviderConfig, targetProviderConfig, selectedTemplate.TranslationProvidersSpecificLanguages); ValidateTranslationProviderConfiguration(targetProviderConfig); targetProject.UpdateTranslationProviderConfiguration(targetTargetLanguage, targetProviderConfig); } @@ -269,7 +269,7 @@ protected override void Execute() var sourceTermbaseConfig = sourceProject.GetTermbaseConfiguration(); var targetTermbaseConfig = targetProject.GetTermbaseConfiguration(); - if (selectedTemplate.TerminologyTermbases == ApplyTemplateOptions.Merge) + if (selectedTemplate.TerminologyTermbases != ApplyTemplateOptions.Overwrite) { if (targetTermbaseConfig.TermbaseServerUri is null) { @@ -279,14 +279,14 @@ protected override void Execute() { targetTermbaseConfig.Termbases?.AddRange(sourceTermbaseConfig.Termbases); } - MergeTermbases(sourceTermbaseConfig, targetTermbaseConfig); + MergeTermbases(sourceTermbaseConfig, targetTermbaseConfig, selectedTemplate.TerminologyTermbases); } else { targetTermbaseConfig.TermbaseServerUri = sourceTermbaseConfig.TermbaseServerUri; targetTermbaseConfig.Termbases.Clear(); targetTermbaseConfig.LanguageIndexes.Clear(); - MergeTermbases(sourceTermbaseConfig, targetTermbaseConfig); + MergeTermbases(sourceTermbaseConfig, targetTermbaseConfig, ApplyTemplateOptions.Merge); } // Updating with zero termbases throws an exception @@ -677,10 +677,10 @@ private bool CopySettingsGroup(ISettingsBundle sourceSettings, ISettingsBundle t /// /// The source provider configuration. /// The target provider configuration. - private void MergeTranslationProviders(TranslationProviderConfiguration sourceProviderConfig, TranslationProviderConfiguration targetProviderConfig) + private void MergeTranslationProviders(TranslationProviderConfiguration sourceProviderConfig, TranslationProviderConfiguration targetProviderConfig, ApplyTemplateOptions mergeType) { // Remember where we're going to insert the translation providers - var indexToInsert = 0; + var indexToInsert = mergeType == ApplyTemplateOptions.Merge ? 0 : targetProviderConfig.Entries.Count; // Look at each translation provider in the source project foreach (var sourceCascadeEntry in sourceProviderConfig.Entries) @@ -701,8 +701,10 @@ private void MergeTranslationProviders(TranslationProviderConfiguration sourcePr /// /// The source terminology database configuration. /// The target terminology database configuration. - private void MergeTermbases(TermbaseConfiguration sourceTermbaseConfig, TermbaseConfiguration targetTermbaseConfig) + private void MergeTermbases(TermbaseConfiguration sourceTermbaseConfig, TermbaseConfiguration targetTermbaseConfig, ApplyTemplateOptions mergeType) { + var indexToInsert = mergeType == ApplyTemplateOptions.Merge ? targetTermbaseConfig.Termbases.Count : 0; + // Look at each termbase in the source project foreach (var sourceTermbase in sourceTermbaseConfig.Termbases) { @@ -759,7 +761,7 @@ private void MergeTermbases(TermbaseConfiguration sourceTermbaseConfig, Termbase // If we didn't find the current termbase then add it to the target project if (!foundEntry) { - targetTermbaseConfig.Termbases.Add(sourceTermbase); + targetTermbaseConfig.Termbases.Insert(indexToInsert, sourceTermbase); } } diff --git a/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateForm.Designer.cs b/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateForm.Designer.cs index 0a73d1c422..da7280f001 100644 --- a/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateForm.Designer.cs +++ b/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateForm.Designer.cs @@ -104,7 +104,7 @@ private void InitializeComponent() this.TranslationProvidersGroup.Size = new System.Drawing.Size(285, 84); this.TranslationProvidersGroup.TabIndex = 1; this.TranslationProvidersGroup.TabStop = false; - this.TranslationProvidersGroup.Text = "Translation Memory and Automated Translation"; + this.TranslationProvidersGroup.Text = "Translation Providers (TMs, MTs ...)"; // // TranslationProviderSpecificLanguagesLabel // @@ -124,16 +124,17 @@ private void InitializeComponent() this.TranslationProvidersSpecificLanguages.FormattingEnabled = true; this.TranslationProvidersSpecificLanguages.Items.AddRange(new object[] { "Keep", - "Merge", - "Overwrite"}); + "Prepend", + "Overwrite", + "Append"}); this.TranslationProvidersSpecificLanguages.Location = new System.Drawing.Point(194, 55); this.TranslationProvidersSpecificLanguages.Margin = new System.Windows.Forms.Padding(8, 4, 8, 4); this.TranslationProvidersSpecificLanguages.Name = "TranslationProvidersSpecificLanguages"; this.TranslationProvidersSpecificLanguages.Size = new System.Drawing.Size(80, 21); this.TranslationProvidersSpecificLanguages.TabIndex = 3; this.TranslationProvidersSpecificLanguages.Tag = "Translation Providers Specific Languages"; - this.FormToolTip.SetToolTip(this.TranslationProvidersSpecificLanguages, "Select the behaviour for applying the Translation Provider settings to specific l" + - "anguage pairs\r\n\r\n"); + this.FormToolTip.SetToolTip(this.TranslationProvidersSpecificLanguages, "Select how the template's Translation Providers are applied to specific l" + + "anguage pairs Translation Providers' list"); this.TranslationProvidersSpecificLanguages.SelectedIndexChanged += new System.EventHandler(this.TranslationProvidersSpecificLanguages_SelectedIndexChanged); this.TranslationProvidersSpecificLanguages.MouseEnter += new System.EventHandler(this.ControlMouseEnter); // @@ -155,16 +156,17 @@ private void InitializeComponent() this.TranslationProvidersAllLanguages.FormattingEnabled = true; this.TranslationProvidersAllLanguages.Items.AddRange(new object[] { "Keep", - "Merge", - "Overwrite"}); + "Prepend", + "Overwrite", + "Append"}); this.TranslationProvidersAllLanguages.Location = new System.Drawing.Point(194, 26); this.TranslationProvidersAllLanguages.Margin = new System.Windows.Forms.Padding(8, 4, 8, 4); this.TranslationProvidersAllLanguages.Name = "TranslationProvidersAllLanguages"; this.TranslationProvidersAllLanguages.Size = new System.Drawing.Size(80, 21); this.TranslationProvidersAllLanguages.TabIndex = 1; this.TranslationProvidersAllLanguages.Tag = "Translation Providers All Languages"; - this.FormToolTip.SetToolTip(this.TranslationProvidersAllLanguages, "Select the behaviour for applying the Translation Provider settings to all langua" + - "ge pairs"); + this.FormToolTip.SetToolTip(this.TranslationProvidersAllLanguages, "Select how the template's Translation Providers should be applied to all langua" + + "ge pairs Translation Providers' list"); this.TranslationProvidersAllLanguages.SelectedIndexChanged += new System.EventHandler(this.TranslationProvidersAllLanguages_SelectedIndexChanged); this.TranslationProvidersAllLanguages.MouseEnter += new System.EventHandler(this.ControlMouseEnter); // @@ -181,6 +183,10 @@ private void InitializeComponent() this.TranslationMemoriesGroup.TabIndex = 2; this.TranslationMemoriesGroup.TabStop = false; this.TranslationMemoriesGroup.Text = "Translation Memory settings"; + this.TranslationMemoriesGroup.Tag = "Translation Memory settings (ie. search, penalties, filters...) "; + this.FormToolTip.SetToolTip(this.TranslationMemoriesGroup, "Select how the template's Translation Memory settings should be applied to the project."); + this.TranslationMemoriesGroup.MouseEnter += new System.EventHandler(this.ControlMouseEnter); this.EditTemplatesButton.MouseEnter += new System.EventHandler(this.ControlMouseEnter); + // // TranslationMemoriesSpecificLanguagesLabel // @@ -208,7 +214,7 @@ private void InitializeComponent() this.TranslationMemoriesSpecificLanguages.TabIndex = 3; this.TranslationMemoriesSpecificLanguages.Tag = "Translation Memories Specific Languages"; this.FormToolTip.SetToolTip(this.TranslationMemoriesSpecificLanguages, "Select the behaviour for applying the Translation Memory settings to specific lan" + - "guage pairs\r\n"); + "guage pairs (ie. search, penalties, filters...)"); this.TranslationMemoriesSpecificLanguages.SelectedIndexChanged += new System.EventHandler(this.TranslationMemoriesSpecificLanguages_SelectedIndexChanged); this.TranslationMemoriesSpecificLanguages.MouseEnter += new System.EventHandler(this.ControlMouseEnter); // @@ -238,7 +244,7 @@ private void InitializeComponent() this.TranslationMemoriesAllLanguages.TabIndex = 1; this.TranslationMemoriesAllLanguages.Tag = "Translation Memories All Languages"; this.FormToolTip.SetToolTip(this.TranslationMemoriesAllLanguages, "Select the behaviour for applying the Translation Memory settings to all language" + - " pairs\r\n"); + " pairs (ie. search, penalties, filters...)"); this.TranslationMemoriesAllLanguages.SelectedIndexChanged += new System.EventHandler(this.TranslationMemoriesAllLanguages_SelectedIndexChanged); this.TranslationMemoriesAllLanguages.MouseEnter += new System.EventHandler(this.ControlMouseEnter); // @@ -303,15 +309,16 @@ private void InitializeComponent() this.TerminologyTermbases.FormattingEnabled = true; this.TerminologyTermbases.Items.AddRange(new object[] { "Keep", - "Merge", - "Overwrite"}); + "Append", + "Overwrite", + "Prepend"}); this.TerminologyTermbases.Location = new System.Drawing.Point(194, 26); this.TerminologyTermbases.Margin = new System.Windows.Forms.Padding(8, 4, 8, 4); this.TerminologyTermbases.Name = "TerminologyTermbases"; this.TerminologyTermbases.Size = new System.Drawing.Size(80, 21); this.TerminologyTermbases.TabIndex = 1; this.TerminologyTermbases.Tag = "Terminology Termbases"; - this.FormToolTip.SetToolTip(this.TerminologyTermbases, "Select the behaviour for applying the Terminology Termbases"); + this.FormToolTip.SetToolTip(this.TerminologyTermbases, "Select how the template's Terminology Termbases should be applied to the project"); this.TerminologyTermbases.SelectedIndexChanged += new System.EventHandler(this.TerminologyTermbases_SelectedIndexChanged); this.TerminologyTermbases.MouseEnter += new System.EventHandler(this.ControlMouseEnter); // diff --git a/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateForm.cs b/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateForm.cs index b95d36591c..98fc080afd 100644 --- a/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateForm.cs +++ b/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateForm.cs @@ -226,11 +226,14 @@ private void SelectedTemplate_SelectedIndexChanged(object sender, EventArgs e) if (selectedTemplate != null) { - TranslationProvidersAllLanguages.SelectedItem = selectedTemplate.TranslationProvidersAllLanguages.ToString(); - TranslationProvidersSpecificLanguages.SelectedItem = selectedTemplate.TranslationProvidersSpecificLanguages.ToString(); + TranslationProvidersAllLanguages.SelectedIndex = (int)selectedTemplate.TranslationProvidersAllLanguages; + TranslationProvidersSpecificLanguages.SelectedIndex = (int)selectedTemplate.TranslationProvidersSpecificLanguages; + //TranslationProvidersAllLanguages.SelectedItem = selectedTemplate.TranslationProvidersAllLanguages.ToString(); + //TranslationProvidersSpecificLanguages.SelectedItem = selectedTemplate.TranslationProvidersSpecificLanguages.ToString(); TranslationMemoriesAllLanguages.SelectedItem = selectedTemplate.TranslationMemoriesAllLanguages.ToString(); TranslationMemoriesSpecificLanguages.SelectedItem = selectedTemplate.TranslationMemoriesSpecificLanguages.ToString(); - TerminologyTermbases.SelectedItem = selectedTemplate.TerminologyTermbases.ToString(); + TerminologyTermbases.SelectedIndex = (int)selectedTemplate.TerminologyTermbases; + //TerminologyTermbases.SelectedItem = selectedTemplate.TerminologyTermbases.ToString(); TerminologySearchSettings.SelectedItem = selectedTemplate.TerminologySearchSettings.ToString(); TranslationQualityAssessment.SelectedItem = selectedTemplate.TranslationQualityAssessment.ToString(); BatchTasksAllLanguages.SelectedItem = selectedTemplate.BatchTasksAllLanguages.ToString(); @@ -289,8 +292,9 @@ private void TranslationProvidersAllLanguages_SelectedIndexChanged(object sender if (SelectedTemplate.SelectedItem is ApplyTemplate applyTemplate) { applyTemplate.TranslationProvidersAllLanguages = - (ApplyTemplateOptions)Enum.Parse(typeof(ApplyTemplateOptions), - TranslationProvidersAllLanguages.SelectedItem.ToString()); + (ApplyTemplateOptions)TranslationProvidersAllLanguages.SelectedIndex; + //Enum.Parse(typeof(ApplyTemplateOptions), + //TranslationProvidersAllLanguages.SelectedItem.ToString()); } CheckChanged(); } @@ -305,8 +309,9 @@ private void TranslationProvidersSpecificLanguages_SelectedIndexChanged(object s if (SelectedTemplate.SelectedItem is ApplyTemplate applyTemplate) { applyTemplate.TranslationProvidersSpecificLanguages = - (ApplyTemplateOptions)Enum.Parse(typeof(ApplyTemplateOptions), - TranslationProvidersSpecificLanguages.SelectedItem.ToString()); + (ApplyTemplateOptions)TranslationProvidersSpecificLanguages.SelectedIndex; + //Enum.Parse(typeof(ApplyTemplateOptions), + // TranslationProvidersSpecificLanguages.SelectedItem.ToString()); } CheckChanged(); @@ -323,7 +328,7 @@ private void TranslationMemoriesAllLanguages_SelectedIndexChanged(object sender, { applyTemplate.TranslationMemoriesAllLanguages = (ApplyTemplateOptions)Enum.Parse(typeof(ApplyTemplateOptions), - TranslationMemoriesAllLanguages.SelectedItem.ToString()); + TranslationMemoriesAllLanguages.SelectedItem.ToString()); } CheckChanged(); } @@ -354,8 +359,9 @@ private void TerminologyTermbases_SelectedIndexChanged(object sender, EventArgs if (SelectedTemplate.SelectedItem is ApplyTemplate applyTemplate) { applyTemplate.TerminologyTermbases = - (ApplyTemplateOptions)Enum.Parse(typeof(ApplyTemplateOptions), - TerminologyTermbases.SelectedItem.ToString()); + (ApplyTemplateOptions)TerminologyTermbases.SelectedIndex; + //Enum.Parse(typeof(ApplyTemplateOptions), + //TerminologyTermbases.SelectedItem.ToString()); } CheckChanged(); } diff --git a/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateOptions.cs b/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateOptions.cs index b337a0ac84..56853c90b5 100644 --- a/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateOptions.cs +++ b/ApplyStudioProjectTemplate/Sdl.Community.ApplyStudioProjectTemplate/ApplyTemplateOptions.cs @@ -25,5 +25,16 @@ public enum ApplyTemplateOptions /// Overwrite the current settings with the settings from the template /// Overwrite = 2, + + /// + /// Alternative Merge of settings from the template with the existing settings + /// + /// + /// This is to not to break older versions of settings file ASPT.xml. + /// ApplyTemplateForm actually uses Append and Prepend for Merge/AltMerge. + /// For translation providers the old Merge matches Prepend, + /// for Termbases the old Merge matches Append. + /// + AltMerge = 3 } } diff --git a/SdlXliff Compare/Sdl.Community.XliffCompare.Core/Comparer/TextComparer/TextComparer.cs b/SdlXliff Compare/Sdl.Community.XliffCompare.Core/Comparer/TextComparer/TextComparer.cs index 766505cbef..0ed17fa0ec 100644 --- a/SdlXliff Compare/Sdl.Community.XliffCompare.Core/Comparer/TextComparer/TextComparer.cs +++ b/SdlXliff Compare/Sdl.Community.XliffCompare.Core/Comparer/TextComparer/TextComparer.cs @@ -332,13 +332,19 @@ internal static WordsCollection Parse(List xSegmentSect while (curPos < xSegmentSection.Content.Length) { var prevPos = curPos; - while (curPos < xSegmentSection.Content.Length && - (char.IsControl(xSegmentSection.Content[curPos]) - || char.IsWhiteSpace(xSegmentSection.Content[curPos]))) - { - curPos++; - } - prefix += xSegmentSection.Content.Substring(prevPos, curPos - prevPos); + if (xSegmentSection.Content[curPos] == '\xa0') // make nbsp a word + { + words.Add(new Word("\xa0", string.Empty, string.Empty)); + curPos++; + continue; + } + while (curPos < xSegmentSection.Content.Length && + (char.IsControl(xSegmentSection.Content[curPos]) + || char.IsWhiteSpace(xSegmentSection.Content[curPos]))) + { + curPos++; + } + prefix += xSegmentSection.Content.Substring(prevPos, curPos - prevPos); if (curPos == xSegmentSection.Content.Length) { @@ -362,7 +368,8 @@ internal static WordsCollection Parse(List xSegmentSect prevPos = curPos; while (curPos < xSegmentSection.Content.Length && - (char.IsControl(xSegmentSection.Content[curPos]) || + xSegmentSection.Content[curPos] != '\xa0' && // stop at nbsp + (char.IsControl(xSegmentSection.Content[curPos]) || char.IsWhiteSpace(xSegmentSection.Content[curPos]))) { curPos++;