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++;