Restore TerminalResources translations wiped by OneLocBuild (#9254) - #9261

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254
Jun 19, 2026
Merged

Restore TerminalResources translations wiped by OneLocBuild (#9254)#9261
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

The microsoft-testfx rolling build on main (build 3004049) failed with persistent acceptance-test failures across every TFM on both Linux and Windows:

  • LocalizationTests.Execution_WithFrenchLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithSpanishLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithTestingPlatformUILanguage_TakesPrecedenceOverDotnetCLI
  • LocalizationFailingTests.Execution_WithFailingTest_OutputContainsTranslatedFailureSummary

The test host emitted the English summary (Test run summary: Passed!) instead of the localized one (e.g. French Résumé de série de tests : Réussite!), so the assertions failed and the test suite failed all 4 retry attempts.

Root cause

OneLocBuild check-in #9254 (commit 2b13b0d2d) regressed all 13 TerminalResources.*.xlf files, resetting every entry from state="translated" (with real translations like Échec/Réussite) back to state="new" with English targets. TerminalTestReporter reads these strings, so the rendered summary fell back to English.

This is the exact same regression that #9248 caused and #9252 fixed.

Fix

Restore the 13 TerminalResources.*.xlf files to their pre-#9254 state (2b13b0d2d^). The change is byte-for-byte identical to the last known-good (CI-passing) state, and the state="new" count matches the pre-regression baseline (only genuinely-untranslated strings remain). Microsoft.Testing.Platform builds clean (0 warnings) with valid satellite assemblies.

Note: the one-off CrashDumpTests.CrashDump_DefaultSetting_CreateDump failure on Linux net8.0 was transient (it passed on retry; only the localization tests failed on all 4 attempts) and is unrelated to this change.

OneLocBuild check-in #9254 (commit 2b13b0d) regressed all 13
TerminalResources.*.xlf files, resetting every translated entry from
state="translated" back to state="new" with English targets. This is the
same regression #9248 caused, previously fixed by #9252.
As a result the localized test-run summary (e.g. French 'Résumé de série
de tests : Réussite!') rendered in English, failing the acceptance
LocalizationTests / LocalizationFailingTests on every TFM on both Linux
and Windows (build 3004049 on main).
Restore the 13 xlf files to their pre-#9254 state (2b13b0d^).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 19, 2026 16:29
@Evangelink
Amaury Levé (Evangelink) merged commit d2ed2f8 into mainJun 19, 2026
11 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the fix/restore-terminalresources-xlf-9254 branch June 19, 2026 16:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Restores localized terminal reporter strings for Microsoft.Testing.Platform by reverting the TerminalResources.*.xlf satellite translation files from the OneLocBuild-regressed “English + state=new” content back to their translated targets, unblocking LocalizationTests/LocalizationFailingTests acceptance runs.

Changes:

  • Restore translated <target state="translated">…</target> entries across the 13 TerminalResources.*.xlf files.
  • Revert the OneLocBuild regression that caused terminal summary text to fall back to English for non-English locales.
Show a summary per file
FileDescription
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.cs.xlfRestores Czech terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.de.xlfRestores German terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.es.xlfRestores Spanish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.fr.xlfRestores French terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.it.xlfRestores Italian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ja.xlfRestores Japanese terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ko.xlfRestores Korean terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pl.xlfRestores Polish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pt-BR.xlfRestores Portuguese (Brazil) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ru.xlfRestores Russian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.tr.xlfRestores Turkish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hans.xlfRestores Chinese (Simplified) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hant.xlfRestores Chinese (Traditional) terminal-resource translations for terminal reporter output.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 13

<file datatype="xml" source-language="en" target-language="cs" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="de" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="es" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="fr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="it" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="ru" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="tr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review — 22-Dimension Analysis

This PR restores 13 TerminalResources.*.xlf files to their pre-#9254 state, changing 481 translation entries across all language files from state="new" (English fallback) back to state="translated" (proper localized text). The remaining 7 state="new" entries per file are genuinely new/untranslated strings (e.g. TerminalAnsiOptionDescription, TerminalProgressHeartbeat, TerminalProgressSlowTest), which is correct.


Verdict Table

#DimensionSeverityStatusNotes
1Algorithmic CorrectnessMAJOR✅ CleanCorrectly targets root cause symptom (481 state+content entries changed; 7 genuinely new strings left as-is per file). Byte-for-byte revert to last CI-passing state is verified.
2Threading & ConcurrencyBLOCKING➡️ N/ANo code changes.
3Security & IPC Contract SafetyBLOCKING➡️ N/AXLF files introduce no security surface.
4Public API & Binary CompatibilityBLOCKING➡️ N/ANo API surface changes; satellite assemblies are rebuilt by MSBuild.
5Performance & AllocationsMAJOR➡️ N/ANo code changes.
6Cross-TFM CompatibilityMAJOR✅ CleanSatellite assemblies generated from XLF work across all TFMs; the pre-regression behavior is restored.
7Resource & IDisposable ManagementMAJOR➡️ N/ANo code changes.
8Defensive Coding at BoundariesMAJOR➡️ N/ANo code changes.
9Localization & ResourcesMAJOR⚠️ Issues FoundSee detailed analysis below.
10Test IsolationMAJOR➡️ N/ANo test code changes.
11Assertion QualityMAJOR➡️ N/ANo test code changes.
12Flakiness PatternsBLOCKING➡️ N/ANo test code changes.
13Test Completeness & CoverageMAJOR✅ CleanExisting LocalizationTests / LocalizationFailingTests acceptance tests cover the fixed behavior end-to-end.
14Data-Driven Test CoverageMODERATE➡️ N/ANo test changes.
15Code Structure & SimplificationMODERATE➡️ N/AXML content only.
16Naming & ConventionsMINOR➡️ N/AN/A for XLF files.
17XML/JSON/YAML ConfigurationMODERATE✅ CleanValid XLIFF 1.2 structure; all <trans-unit> elements are well-formed.
18Error Messages & DiagnosticsMODERATE➡️ N/ANo new user-facing strings introduced.
19Changelog / Release NotesMINOR✅ CleanAcceptable to skip CHANGELOG for a CI-hotfix/revert.
20Follow-up TODOsMINOR⚠️ Issues FoundNo tracking issue referenced for the recurring OneLocBuild regression. See below.
21DocumentationMINOR➡️ N/ANo public API changes.
22PowerShell Script QualityMINOR➡️ N/ANo .ps1 changes.

Dimension 9 — Localization & Resources (detailed)

Emergency exception to the "never manually edit XLF" rule is appropriate here. The automated OneLocBuild pipeline is the regression source, not a developer editing the wrong file. Running dotnet msbuild /t:UpdateXlf would have been insufficient because it regenerates from the .resx (which was not regressed) — it does not know which translation targets were previously correct. The byte-for-byte revert to a CI-passing commit is the only reliable fix path.

The restoration is semantically correct:

  • 37 state="translated" entries per file (481 total across 13 files), all with appropriate localized text verified against the pre-#9254 commit.
  • 7 state="new" entries per file remain — these are genuinely newer strings (TerminalAnsiOptionDescription, TerminalNoProgressOptionDescription, TerminalProgressHeartbeat, TerminalProgressHeartbeatActiveSuffix, TerminalProgressOptionDescription, TerminalProgressOptionInvalidArgument, TerminalProgressSlowTest) that have not yet been through the localization cycle, and leaving them as state="new" is correct.

Minor: indentation inconsistency. The restored files use 12-space indentation for <trans-unit> opening tags (e.g. <trans-unit id="Aborted">) whereas the OneLocBuild-generated content used 6 spaces. This is cosmetic and does not affect XML parsing or satellite assembly generation, but it means the next OneLocBuild PR will produce additional indentation noise in the diff alongside any genuine translation updates.


Dimension 20 — Recurring OneLocBuild Regression (follow-up)

This is the second occurrence of the exact same regression: #9248 (OneLocBuild) → fixed by #9252; then #9254 (OneLocBuild) → fixed by this PR.

The root cause — OneLocBuild resetting state="translated" entries to state="new" with English targets — has not been addressed. Without a systemic fix, the pattern will recur on the next OneLocBuild check-in. Recommended follow-ups:

  1. Open a tracking issue for the OneLocBuild pipeline configuration that causes it to overwrite valid translations. The issue should be shared with the OneLocBuild/localization team to investigate why the pipeline degrades previously-translated entries.
  2. Consider a CI guard: a repo lint step (e.g. a PowerShell or bash check in the build pipeline) that asserts "no TerminalResources.*.xlf file may contain a <target state="new"> value that exactly matches its <source> value unless the source was genuinely never translated." This would detect OneLocBuild regressions automatically before they reach main.

Recommendation

LGTM as a targeted emergency hotfix. The change is correct, minimal in scope, and the emergency exception to the XLF editing rule is fully justified. The one actionable follow-up is opening a tracking issue for the systemic OneLocBuild regression so it does not happen a third time.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Restore TerminalResources translations wiped by OneLocBuild (#9254) - #9261

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254
Jun 19, 2026
Merged

Restore TerminalResources translations wiped by OneLocBuild (#9254)#9261
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

The microsoft-testfx rolling build on main (build 3004049) failed with persistent acceptance-test failures across every TFM on both Linux and Windows:

  • LocalizationTests.Execution_WithFrenchLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithSpanishLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithTestingPlatformUILanguage_TakesPrecedenceOverDotnetCLI
  • LocalizationFailingTests.Execution_WithFailingTest_OutputContainsTranslatedFailureSummary

The test host emitted the English summary (Test run summary: Passed!) instead of the localized one (e.g. French Résumé de série de tests : Réussite!), so the assertions failed and the test suite failed all 4 retry attempts.

Root cause

OneLocBuild check-in #9254 (commit 2b13b0d2d) regressed all 13 TerminalResources.*.xlf files, resetting every entry from state="translated" (with real translations like Échec/Réussite) back to state="new" with English targets. TerminalTestReporter reads these strings, so the rendered summary fell back to English.

This is the exact same regression that #9248 caused and #9252 fixed.

Fix

Restore the 13 TerminalResources.*.xlf files to their pre-#9254 state (2b13b0d2d^). The change is byte-for-byte identical to the last known-good (CI-passing) state, and the state="new" count matches the pre-regression baseline (only genuinely-untranslated strings remain). Microsoft.Testing.Platform builds clean (0 warnings) with valid satellite assemblies.

Note: the one-off CrashDumpTests.CrashDump_DefaultSetting_CreateDump failure on Linux net8.0 was transient (it passed on retry; only the localization tests failed on all 4 attempts) and is unrelated to this change.

OneLocBuild check-in #9254 (commit 2b13b0d) regressed all 13
TerminalResources.*.xlf files, resetting every translated entry from
state="translated" back to state="new" with English targets. This is the
same regression #9248 caused, previously fixed by #9252.
As a result the localized test-run summary (e.g. French 'Résumé de série
de tests : Réussite!') rendered in English, failing the acceptance
LocalizationTests / LocalizationFailingTests on every TFM on both Linux
and Windows (build 3004049 on main).
Restore the 13 xlf files to their pre-#9254 state (2b13b0d^).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 19, 2026 16:29
@Evangelink
Amaury Levé (Evangelink) merged commit d2ed2f8 into mainJun 19, 2026
11 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the fix/restore-terminalresources-xlf-9254 branch June 19, 2026 16:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Restores localized terminal reporter strings for Microsoft.Testing.Platform by reverting the TerminalResources.*.xlf satellite translation files from the OneLocBuild-regressed “English + state=new” content back to their translated targets, unblocking LocalizationTests/LocalizationFailingTests acceptance runs.

Changes:

  • Restore translated <target state="translated">…</target> entries across the 13 TerminalResources.*.xlf files.
  • Revert the OneLocBuild regression that caused terminal summary text to fall back to English for non-English locales.
Show a summary per file
FileDescription
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.cs.xlfRestores Czech terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.de.xlfRestores German terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.es.xlfRestores Spanish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.fr.xlfRestores French terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.it.xlfRestores Italian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ja.xlfRestores Japanese terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ko.xlfRestores Korean terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pl.xlfRestores Polish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pt-BR.xlfRestores Portuguese (Brazil) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ru.xlfRestores Russian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.tr.xlfRestores Turkish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hans.xlfRestores Chinese (Simplified) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hant.xlfRestores Chinese (Traditional) terminal-resource translations for terminal reporter output.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 13

<file datatype="xml" source-language="en" target-language="cs" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="de" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="es" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="fr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="it" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="ru" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="tr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review — 22-Dimension Analysis

This PR restores 13 TerminalResources.*.xlf files to their pre-#9254 state, changing 481 translation entries across all language files from state="new" (English fallback) back to state="translated" (proper localized text). The remaining 7 state="new" entries per file are genuinely new/untranslated strings (e.g. TerminalAnsiOptionDescription, TerminalProgressHeartbeat, TerminalProgressSlowTest), which is correct.


Verdict Table

#DimensionSeverityStatusNotes
1Algorithmic CorrectnessMAJOR✅ CleanCorrectly targets root cause symptom (481 state+content entries changed; 7 genuinely new strings left as-is per file). Byte-for-byte revert to last CI-passing state is verified.
2Threading & ConcurrencyBLOCKING➡️ N/ANo code changes.
3Security & IPC Contract SafetyBLOCKING➡️ N/AXLF files introduce no security surface.
4Public API & Binary CompatibilityBLOCKING➡️ N/ANo API surface changes; satellite assemblies are rebuilt by MSBuild.
5Performance & AllocationsMAJOR➡️ N/ANo code changes.
6Cross-TFM CompatibilityMAJOR✅ CleanSatellite assemblies generated from XLF work across all TFMs; the pre-regression behavior is restored.
7Resource & IDisposable ManagementMAJOR➡️ N/ANo code changes.
8Defensive Coding at BoundariesMAJOR➡️ N/ANo code changes.
9Localization & ResourcesMAJOR⚠️ Issues FoundSee detailed analysis below.
10Test IsolationMAJOR➡️ N/ANo test code changes.
11Assertion QualityMAJOR➡️ N/ANo test code changes.
12Flakiness PatternsBLOCKING➡️ N/ANo test code changes.
13Test Completeness & CoverageMAJOR✅ CleanExisting LocalizationTests / LocalizationFailingTests acceptance tests cover the fixed behavior end-to-end.
14Data-Driven Test CoverageMODERATE➡️ N/ANo test changes.
15Code Structure & SimplificationMODERATE➡️ N/AXML content only.
16Naming & ConventionsMINOR➡️ N/AN/A for XLF files.
17XML/JSON/YAML ConfigurationMODERATE✅ CleanValid XLIFF 1.2 structure; all <trans-unit> elements are well-formed.
18Error Messages & DiagnosticsMODERATE➡️ N/ANo new user-facing strings introduced.
19Changelog / Release NotesMINOR✅ CleanAcceptable to skip CHANGELOG for a CI-hotfix/revert.
20Follow-up TODOsMINOR⚠️ Issues FoundNo tracking issue referenced for the recurring OneLocBuild regression. See below.
21DocumentationMINOR➡️ N/ANo public API changes.
22PowerShell Script QualityMINOR➡️ N/ANo .ps1 changes.

Dimension 9 — Localization & Resources (detailed)

Emergency exception to the "never manually edit XLF" rule is appropriate here. The automated OneLocBuild pipeline is the regression source, not a developer editing the wrong file. Running dotnet msbuild /t:UpdateXlf would have been insufficient because it regenerates from the .resx (which was not regressed) — it does not know which translation targets were previously correct. The byte-for-byte revert to a CI-passing commit is the only reliable fix path.

The restoration is semantically correct:

  • 37 state="translated" entries per file (481 total across 13 files), all with appropriate localized text verified against the pre-#9254 commit.
  • 7 state="new" entries per file remain — these are genuinely newer strings (TerminalAnsiOptionDescription, TerminalNoProgressOptionDescription, TerminalProgressHeartbeat, TerminalProgressHeartbeatActiveSuffix, TerminalProgressOptionDescription, TerminalProgressOptionInvalidArgument, TerminalProgressSlowTest) that have not yet been through the localization cycle, and leaving them as state="new" is correct.

Minor: indentation inconsistency. The restored files use 12-space indentation for <trans-unit> opening tags (e.g. <trans-unit id="Aborted">) whereas the OneLocBuild-generated content used 6 spaces. This is cosmetic and does not affect XML parsing or satellite assembly generation, but it means the next OneLocBuild PR will produce additional indentation noise in the diff alongside any genuine translation updates.


Dimension 20 — Recurring OneLocBuild Regression (follow-up)

This is the second occurrence of the exact same regression: #9248 (OneLocBuild) → fixed by #9252; then #9254 (OneLocBuild) → fixed by this PR.

The root cause — OneLocBuild resetting state="translated" entries to state="new" with English targets — has not been addressed. Without a systemic fix, the pattern will recur on the next OneLocBuild check-in. Recommended follow-ups:

  1. Open a tracking issue for the OneLocBuild pipeline configuration that causes it to overwrite valid translations. The issue should be shared with the OneLocBuild/localization team to investigate why the pipeline degrades previously-translated entries.
  2. Consider a CI guard: a repo lint step (e.g. a PowerShell or bash check in the build pipeline) that asserts "no TerminalResources.*.xlf file may contain a <target state="new"> value that exactly matches its <source> value unless the source was genuinely never translated." This would detect OneLocBuild regressions automatically before they reach main.

Recommendation

LGTM as a targeted emergency hotfix. The change is correct, minimal in scope, and the emergency exception to the XLF editing rule is fully justified. The one actionable follow-up is opening a tracking issue for the systemic OneLocBuild regression so it does not happen a third time.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Restore TerminalResources translations wiped by OneLocBuild (#9254) - #9261

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254
Jun 19, 2026
Merged

Restore TerminalResources translations wiped by OneLocBuild (#9254)#9261
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

The microsoft-testfx rolling build on main (build 3004049) failed with persistent acceptance-test failures across every TFM on both Linux and Windows:

  • LocalizationTests.Execution_WithFrenchLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithSpanishLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithTestingPlatformUILanguage_TakesPrecedenceOverDotnetCLI
  • LocalizationFailingTests.Execution_WithFailingTest_OutputContainsTranslatedFailureSummary

The test host emitted the English summary (Test run summary: Passed!) instead of the localized one (e.g. French Résumé de série de tests : Réussite!), so the assertions failed and the test suite failed all 4 retry attempts.

Root cause

OneLocBuild check-in #9254 (commit 2b13b0d2d) regressed all 13 TerminalResources.*.xlf files, resetting every entry from state="translated" (with real translations like Échec/Réussite) back to state="new" with English targets. TerminalTestReporter reads these strings, so the rendered summary fell back to English.

This is the exact same regression that #9248 caused and #9252 fixed.

Fix

Restore the 13 TerminalResources.*.xlf files to their pre-#9254 state (2b13b0d2d^). The change is byte-for-byte identical to the last known-good (CI-passing) state, and the state="new" count matches the pre-regression baseline (only genuinely-untranslated strings remain). Microsoft.Testing.Platform builds clean (0 warnings) with valid satellite assemblies.

Note: the one-off CrashDumpTests.CrashDump_DefaultSetting_CreateDump failure on Linux net8.0 was transient (it passed on retry; only the localization tests failed on all 4 attempts) and is unrelated to this change.

OneLocBuild check-in #9254 (commit 2b13b0d) regressed all 13
TerminalResources.*.xlf files, resetting every translated entry from
state="translated" back to state="new" with English targets. This is the
same regression #9248 caused, previously fixed by #9252.
As a result the localized test-run summary (e.g. French 'Résumé de série
de tests : Réussite!') rendered in English, failing the acceptance
LocalizationTests / LocalizationFailingTests on every TFM on both Linux
and Windows (build 3004049 on main).
Restore the 13 xlf files to their pre-#9254 state (2b13b0d^).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 19, 2026 16:29
@Evangelink
Amaury Levé (Evangelink) merged commit d2ed2f8 into mainJun 19, 2026
11 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the fix/restore-terminalresources-xlf-9254 branch June 19, 2026 16:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Restores localized terminal reporter strings for Microsoft.Testing.Platform by reverting the TerminalResources.*.xlf satellite translation files from the OneLocBuild-regressed “English + state=new” content back to their translated targets, unblocking LocalizationTests/LocalizationFailingTests acceptance runs.

Changes:

  • Restore translated <target state="translated">…</target> entries across the 13 TerminalResources.*.xlf files.
  • Revert the OneLocBuild regression that caused terminal summary text to fall back to English for non-English locales.
Show a summary per file
FileDescription
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.cs.xlfRestores Czech terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.de.xlfRestores German terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.es.xlfRestores Spanish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.fr.xlfRestores French terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.it.xlfRestores Italian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ja.xlfRestores Japanese terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ko.xlfRestores Korean terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pl.xlfRestores Polish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pt-BR.xlfRestores Portuguese (Brazil) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ru.xlfRestores Russian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.tr.xlfRestores Turkish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hans.xlfRestores Chinese (Simplified) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hant.xlfRestores Chinese (Traditional) terminal-resource translations for terminal reporter output.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 13

<file datatype="xml" source-language="en" target-language="cs" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="de" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="es" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="fr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="it" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="ru" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="tr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review — 22-Dimension Analysis

This PR restores 13 TerminalResources.*.xlf files to their pre-#9254 state, changing 481 translation entries across all language files from state="new" (English fallback) back to state="translated" (proper localized text). The remaining 7 state="new" entries per file are genuinely new/untranslated strings (e.g. TerminalAnsiOptionDescription, TerminalProgressHeartbeat, TerminalProgressSlowTest), which is correct.


Verdict Table

#DimensionSeverityStatusNotes
1Algorithmic CorrectnessMAJOR✅ CleanCorrectly targets root cause symptom (481 state+content entries changed; 7 genuinely new strings left as-is per file). Byte-for-byte revert to last CI-passing state is verified.
2Threading & ConcurrencyBLOCKING➡️ N/ANo code changes.
3Security & IPC Contract SafetyBLOCKING➡️ N/AXLF files introduce no security surface.
4Public API & Binary CompatibilityBLOCKING➡️ N/ANo API surface changes; satellite assemblies are rebuilt by MSBuild.
5Performance & AllocationsMAJOR➡️ N/ANo code changes.
6Cross-TFM CompatibilityMAJOR✅ CleanSatellite assemblies generated from XLF work across all TFMs; the pre-regression behavior is restored.
7Resource & IDisposable ManagementMAJOR➡️ N/ANo code changes.
8Defensive Coding at BoundariesMAJOR➡️ N/ANo code changes.
9Localization & ResourcesMAJOR⚠️ Issues FoundSee detailed analysis below.
10Test IsolationMAJOR➡️ N/ANo test code changes.
11Assertion QualityMAJOR➡️ N/ANo test code changes.
12Flakiness PatternsBLOCKING➡️ N/ANo test code changes.
13Test Completeness & CoverageMAJOR✅ CleanExisting LocalizationTests / LocalizationFailingTests acceptance tests cover the fixed behavior end-to-end.
14Data-Driven Test CoverageMODERATE➡️ N/ANo test changes.
15Code Structure & SimplificationMODERATE➡️ N/AXML content only.
16Naming & ConventionsMINOR➡️ N/AN/A for XLF files.
17XML/JSON/YAML ConfigurationMODERATE✅ CleanValid XLIFF 1.2 structure; all <trans-unit> elements are well-formed.
18Error Messages & DiagnosticsMODERATE➡️ N/ANo new user-facing strings introduced.
19Changelog / Release NotesMINOR✅ CleanAcceptable to skip CHANGELOG for a CI-hotfix/revert.
20Follow-up TODOsMINOR⚠️ Issues FoundNo tracking issue referenced for the recurring OneLocBuild regression. See below.
21DocumentationMINOR➡️ N/ANo public API changes.
22PowerShell Script QualityMINOR➡️ N/ANo .ps1 changes.

Dimension 9 — Localization & Resources (detailed)

Emergency exception to the "never manually edit XLF" rule is appropriate here. The automated OneLocBuild pipeline is the regression source, not a developer editing the wrong file. Running dotnet msbuild /t:UpdateXlf would have been insufficient because it regenerates from the .resx (which was not regressed) — it does not know which translation targets were previously correct. The byte-for-byte revert to a CI-passing commit is the only reliable fix path.

The restoration is semantically correct:

  • 37 state="translated" entries per file (481 total across 13 files), all with appropriate localized text verified against the pre-#9254 commit.
  • 7 state="new" entries per file remain — these are genuinely newer strings (TerminalAnsiOptionDescription, TerminalNoProgressOptionDescription, TerminalProgressHeartbeat, TerminalProgressHeartbeatActiveSuffix, TerminalProgressOptionDescription, TerminalProgressOptionInvalidArgument, TerminalProgressSlowTest) that have not yet been through the localization cycle, and leaving them as state="new" is correct.

Minor: indentation inconsistency. The restored files use 12-space indentation for <trans-unit> opening tags (e.g. <trans-unit id="Aborted">) whereas the OneLocBuild-generated content used 6 spaces. This is cosmetic and does not affect XML parsing or satellite assembly generation, but it means the next OneLocBuild PR will produce additional indentation noise in the diff alongside any genuine translation updates.


Dimension 20 — Recurring OneLocBuild Regression (follow-up)

This is the second occurrence of the exact same regression: #9248 (OneLocBuild) → fixed by #9252; then #9254 (OneLocBuild) → fixed by this PR.

The root cause — OneLocBuild resetting state="translated" entries to state="new" with English targets — has not been addressed. Without a systemic fix, the pattern will recur on the next OneLocBuild check-in. Recommended follow-ups:

  1. Open a tracking issue for the OneLocBuild pipeline configuration that causes it to overwrite valid translations. The issue should be shared with the OneLocBuild/localization team to investigate why the pipeline degrades previously-translated entries.
  2. Consider a CI guard: a repo lint step (e.g. a PowerShell or bash check in the build pipeline) that asserts "no TerminalResources.*.xlf file may contain a <target state="new"> value that exactly matches its <source> value unless the source was genuinely never translated." This would detect OneLocBuild regressions automatically before they reach main.

Recommendation

LGTM as a targeted emergency hotfix. The change is correct, minimal in scope, and the emergency exception to the XLF editing rule is fully justified. The one actionable follow-up is opening a tracking issue for the systemic OneLocBuild regression so it does not happen a third time.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Restore TerminalResources translations wiped by OneLocBuild (#9254) - #9261

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254
Jun 19, 2026
Merged

Restore TerminalResources translations wiped by OneLocBuild (#9254)#9261
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

The microsoft-testfx rolling build on main (build 3004049) failed with persistent acceptance-test failures across every TFM on both Linux and Windows:

  • LocalizationTests.Execution_WithFrenchLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithSpanishLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithTestingPlatformUILanguage_TakesPrecedenceOverDotnetCLI
  • LocalizationFailingTests.Execution_WithFailingTest_OutputContainsTranslatedFailureSummary

The test host emitted the English summary (Test run summary: Passed!) instead of the localized one (e.g. French Résumé de série de tests : Réussite!), so the assertions failed and the test suite failed all 4 retry attempts.

Root cause

OneLocBuild check-in #9254 (commit 2b13b0d2d) regressed all 13 TerminalResources.*.xlf files, resetting every entry from state="translated" (with real translations like Échec/Réussite) back to state="new" with English targets. TerminalTestReporter reads these strings, so the rendered summary fell back to English.

This is the exact same regression that #9248 caused and #9252 fixed.

Fix

Restore the 13 TerminalResources.*.xlf files to their pre-#9254 state (2b13b0d2d^). The change is byte-for-byte identical to the last known-good (CI-passing) state, and the state="new" count matches the pre-regression baseline (only genuinely-untranslated strings remain). Microsoft.Testing.Platform builds clean (0 warnings) with valid satellite assemblies.

Note: the one-off CrashDumpTests.CrashDump_DefaultSetting_CreateDump failure on Linux net8.0 was transient (it passed on retry; only the localization tests failed on all 4 attempts) and is unrelated to this change.

OneLocBuild check-in #9254 (commit 2b13b0d) regressed all 13
TerminalResources.*.xlf files, resetting every translated entry from
state="translated" back to state="new" with English targets. This is the
same regression #9248 caused, previously fixed by #9252.
As a result the localized test-run summary (e.g. French 'Résumé de série
de tests : Réussite!') rendered in English, failing the acceptance
LocalizationTests / LocalizationFailingTests on every TFM on both Linux
and Windows (build 3004049 on main).
Restore the 13 xlf files to their pre-#9254 state (2b13b0d^).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 19, 2026 16:29
@Evangelink
Amaury Levé (Evangelink) merged commit d2ed2f8 into mainJun 19, 2026
11 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the fix/restore-terminalresources-xlf-9254 branch June 19, 2026 16:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Restores localized terminal reporter strings for Microsoft.Testing.Platform by reverting the TerminalResources.*.xlf satellite translation files from the OneLocBuild-regressed “English + state=new” content back to their translated targets, unblocking LocalizationTests/LocalizationFailingTests acceptance runs.

Changes:

  • Restore translated <target state="translated">…</target> entries across the 13 TerminalResources.*.xlf files.
  • Revert the OneLocBuild regression that caused terminal summary text to fall back to English for non-English locales.
Show a summary per file
FileDescription
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.cs.xlfRestores Czech terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.de.xlfRestores German terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.es.xlfRestores Spanish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.fr.xlfRestores French terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.it.xlfRestores Italian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ja.xlfRestores Japanese terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ko.xlfRestores Korean terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pl.xlfRestores Polish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pt-BR.xlfRestores Portuguese (Brazil) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ru.xlfRestores Russian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.tr.xlfRestores Turkish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hans.xlfRestores Chinese (Simplified) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hant.xlfRestores Chinese (Traditional) terminal-resource translations for terminal reporter output.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 13

<file datatype="xml" source-language="en" target-language="cs" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="de" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="es" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="fr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="it" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="ru" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="tr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review — 22-Dimension Analysis

This PR restores 13 TerminalResources.*.xlf files to their pre-#9254 state, changing 481 translation entries across all language files from state="new" (English fallback) back to state="translated" (proper localized text). The remaining 7 state="new" entries per file are genuinely new/untranslated strings (e.g. TerminalAnsiOptionDescription, TerminalProgressHeartbeat, TerminalProgressSlowTest), which is correct.


Verdict Table

#DimensionSeverityStatusNotes
1Algorithmic CorrectnessMAJOR✅ CleanCorrectly targets root cause symptom (481 state+content entries changed; 7 genuinely new strings left as-is per file). Byte-for-byte revert to last CI-passing state is verified.
2Threading & ConcurrencyBLOCKING➡️ N/ANo code changes.
3Security & IPC Contract SafetyBLOCKING➡️ N/AXLF files introduce no security surface.
4Public API & Binary CompatibilityBLOCKING➡️ N/ANo API surface changes; satellite assemblies are rebuilt by MSBuild.
5Performance & AllocationsMAJOR➡️ N/ANo code changes.
6Cross-TFM CompatibilityMAJOR✅ CleanSatellite assemblies generated from XLF work across all TFMs; the pre-regression behavior is restored.
7Resource & IDisposable ManagementMAJOR➡️ N/ANo code changes.
8Defensive Coding at BoundariesMAJOR➡️ N/ANo code changes.
9Localization & ResourcesMAJOR⚠️ Issues FoundSee detailed analysis below.
10Test IsolationMAJOR➡️ N/ANo test code changes.
11Assertion QualityMAJOR➡️ N/ANo test code changes.
12Flakiness PatternsBLOCKING➡️ N/ANo test code changes.
13Test Completeness & CoverageMAJOR✅ CleanExisting LocalizationTests / LocalizationFailingTests acceptance tests cover the fixed behavior end-to-end.
14Data-Driven Test CoverageMODERATE➡️ N/ANo test changes.
15Code Structure & SimplificationMODERATE➡️ N/AXML content only.
16Naming & ConventionsMINOR➡️ N/AN/A for XLF files.
17XML/JSON/YAML ConfigurationMODERATE✅ CleanValid XLIFF 1.2 structure; all <trans-unit> elements are well-formed.
18Error Messages & DiagnosticsMODERATE➡️ N/ANo new user-facing strings introduced.
19Changelog / Release NotesMINOR✅ CleanAcceptable to skip CHANGELOG for a CI-hotfix/revert.
20Follow-up TODOsMINOR⚠️ Issues FoundNo tracking issue referenced for the recurring OneLocBuild regression. See below.
21DocumentationMINOR➡️ N/ANo public API changes.
22PowerShell Script QualityMINOR➡️ N/ANo .ps1 changes.

Dimension 9 — Localization & Resources (detailed)

Emergency exception to the "never manually edit XLF" rule is appropriate here. The automated OneLocBuild pipeline is the regression source, not a developer editing the wrong file. Running dotnet msbuild /t:UpdateXlf would have been insufficient because it regenerates from the .resx (which was not regressed) — it does not know which translation targets were previously correct. The byte-for-byte revert to a CI-passing commit is the only reliable fix path.

The restoration is semantically correct:

  • 37 state="translated" entries per file (481 total across 13 files), all with appropriate localized text verified against the pre-#9254 commit.
  • 7 state="new" entries per file remain — these are genuinely newer strings (TerminalAnsiOptionDescription, TerminalNoProgressOptionDescription, TerminalProgressHeartbeat, TerminalProgressHeartbeatActiveSuffix, TerminalProgressOptionDescription, TerminalProgressOptionInvalidArgument, TerminalProgressSlowTest) that have not yet been through the localization cycle, and leaving them as state="new" is correct.

Minor: indentation inconsistency. The restored files use 12-space indentation for <trans-unit> opening tags (e.g. <trans-unit id="Aborted">) whereas the OneLocBuild-generated content used 6 spaces. This is cosmetic and does not affect XML parsing or satellite assembly generation, but it means the next OneLocBuild PR will produce additional indentation noise in the diff alongside any genuine translation updates.


Dimension 20 — Recurring OneLocBuild Regression (follow-up)

This is the second occurrence of the exact same regression: #9248 (OneLocBuild) → fixed by #9252; then #9254 (OneLocBuild) → fixed by this PR.

The root cause — OneLocBuild resetting state="translated" entries to state="new" with English targets — has not been addressed. Without a systemic fix, the pattern will recur on the next OneLocBuild check-in. Recommended follow-ups:

  1. Open a tracking issue for the OneLocBuild pipeline configuration that causes it to overwrite valid translations. The issue should be shared with the OneLocBuild/localization team to investigate why the pipeline degrades previously-translated entries.
  2. Consider a CI guard: a repo lint step (e.g. a PowerShell or bash check in the build pipeline) that asserts "no TerminalResources.*.xlf file may contain a <target state="new"> value that exactly matches its <source> value unless the source was genuinely never translated." This would detect OneLocBuild regressions automatically before they reach main.

Recommendation

LGTM as a targeted emergency hotfix. The change is correct, minimal in scope, and the emergency exception to the XLF editing rule is fully justified. The one actionable follow-up is opening a tracking issue for the systemic OneLocBuild regression so it does not happen a third time.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Restore TerminalResources translations wiped by OneLocBuild (#9254) - #9261

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254
Jun 19, 2026
Merged

Restore TerminalResources translations wiped by OneLocBuild (#9254)#9261
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

The microsoft-testfx rolling build on main (build 3004049) failed with persistent acceptance-test failures across every TFM on both Linux and Windows:

  • LocalizationTests.Execution_WithFrenchLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithSpanishLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithTestingPlatformUILanguage_TakesPrecedenceOverDotnetCLI
  • LocalizationFailingTests.Execution_WithFailingTest_OutputContainsTranslatedFailureSummary

The test host emitted the English summary (Test run summary: Passed!) instead of the localized one (e.g. French Résumé de série de tests : Réussite!), so the assertions failed and the test suite failed all 4 retry attempts.

Root cause

OneLocBuild check-in #9254 (commit 2b13b0d2d) regressed all 13 TerminalResources.*.xlf files, resetting every entry from state="translated" (with real translations like Échec/Réussite) back to state="new" with English targets. TerminalTestReporter reads these strings, so the rendered summary fell back to English.

This is the exact same regression that #9248 caused and #9252 fixed.

Fix

Restore the 13 TerminalResources.*.xlf files to their pre-#9254 state (2b13b0d2d^). The change is byte-for-byte identical to the last known-good (CI-passing) state, and the state="new" count matches the pre-regression baseline (only genuinely-untranslated strings remain). Microsoft.Testing.Platform builds clean (0 warnings) with valid satellite assemblies.

Note: the one-off CrashDumpTests.CrashDump_DefaultSetting_CreateDump failure on Linux net8.0 was transient (it passed on retry; only the localization tests failed on all 4 attempts) and is unrelated to this change.

OneLocBuild check-in #9254 (commit 2b13b0d) regressed all 13
TerminalResources.*.xlf files, resetting every translated entry from
state="translated" back to state="new" with English targets. This is the
same regression #9248 caused, previously fixed by #9252.
As a result the localized test-run summary (e.g. French 'Résumé de série
de tests : Réussite!') rendered in English, failing the acceptance
LocalizationTests / LocalizationFailingTests on every TFM on both Linux
and Windows (build 3004049 on main).
Restore the 13 xlf files to their pre-#9254 state (2b13b0d^).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 19, 2026 16:29
@Evangelink
Amaury Levé (Evangelink) merged commit d2ed2f8 into mainJun 19, 2026
11 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the fix/restore-terminalresources-xlf-9254 branch June 19, 2026 16:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Restores localized terminal reporter strings for Microsoft.Testing.Platform by reverting the TerminalResources.*.xlf satellite translation files from the OneLocBuild-regressed “English + state=new” content back to their translated targets, unblocking LocalizationTests/LocalizationFailingTests acceptance runs.

Changes:

  • Restore translated <target state="translated">…</target> entries across the 13 TerminalResources.*.xlf files.
  • Revert the OneLocBuild regression that caused terminal summary text to fall back to English for non-English locales.
Show a summary per file
FileDescription
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.cs.xlfRestores Czech terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.de.xlfRestores German terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.es.xlfRestores Spanish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.fr.xlfRestores French terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.it.xlfRestores Italian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ja.xlfRestores Japanese terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ko.xlfRestores Korean terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pl.xlfRestores Polish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pt-BR.xlfRestores Portuguese (Brazil) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ru.xlfRestores Russian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.tr.xlfRestores Turkish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hans.xlfRestores Chinese (Simplified) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hant.xlfRestores Chinese (Traditional) terminal-resource translations for terminal reporter output.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 13

<file datatype="xml" source-language="en" target-language="cs" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="de" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="es" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="fr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="it" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="ru" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="tr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review — 22-Dimension Analysis

This PR restores 13 TerminalResources.*.xlf files to their pre-#9254 state, changing 481 translation entries across all language files from state="new" (English fallback) back to state="translated" (proper localized text). The remaining 7 state="new" entries per file are genuinely new/untranslated strings (e.g. TerminalAnsiOptionDescription, TerminalProgressHeartbeat, TerminalProgressSlowTest), which is correct.


Verdict Table

#DimensionSeverityStatusNotes
1Algorithmic CorrectnessMAJOR✅ CleanCorrectly targets root cause symptom (481 state+content entries changed; 7 genuinely new strings left as-is per file). Byte-for-byte revert to last CI-passing state is verified.
2Threading & ConcurrencyBLOCKING➡️ N/ANo code changes.
3Security & IPC Contract SafetyBLOCKING➡️ N/AXLF files introduce no security surface.
4Public API & Binary CompatibilityBLOCKING➡️ N/ANo API surface changes; satellite assemblies are rebuilt by MSBuild.
5Performance & AllocationsMAJOR➡️ N/ANo code changes.
6Cross-TFM CompatibilityMAJOR✅ CleanSatellite assemblies generated from XLF work across all TFMs; the pre-regression behavior is restored.
7Resource & IDisposable ManagementMAJOR➡️ N/ANo code changes.
8Defensive Coding at BoundariesMAJOR➡️ N/ANo code changes.
9Localization & ResourcesMAJOR⚠️ Issues FoundSee detailed analysis below.
10Test IsolationMAJOR➡️ N/ANo test code changes.
11Assertion QualityMAJOR➡️ N/ANo test code changes.
12Flakiness PatternsBLOCKING➡️ N/ANo test code changes.
13Test Completeness & CoverageMAJOR✅ CleanExisting LocalizationTests / LocalizationFailingTests acceptance tests cover the fixed behavior end-to-end.
14Data-Driven Test CoverageMODERATE➡️ N/ANo test changes.
15Code Structure & SimplificationMODERATE➡️ N/AXML content only.
16Naming & ConventionsMINOR➡️ N/AN/A for XLF files.
17XML/JSON/YAML ConfigurationMODERATE✅ CleanValid XLIFF 1.2 structure; all <trans-unit> elements are well-formed.
18Error Messages & DiagnosticsMODERATE➡️ N/ANo new user-facing strings introduced.
19Changelog / Release NotesMINOR✅ CleanAcceptable to skip CHANGELOG for a CI-hotfix/revert.
20Follow-up TODOsMINOR⚠️ Issues FoundNo tracking issue referenced for the recurring OneLocBuild regression. See below.
21DocumentationMINOR➡️ N/ANo public API changes.
22PowerShell Script QualityMINOR➡️ N/ANo .ps1 changes.

Dimension 9 — Localization & Resources (detailed)

Emergency exception to the "never manually edit XLF" rule is appropriate here. The automated OneLocBuild pipeline is the regression source, not a developer editing the wrong file. Running dotnet msbuild /t:UpdateXlf would have been insufficient because it regenerates from the .resx (which was not regressed) — it does not know which translation targets were previously correct. The byte-for-byte revert to a CI-passing commit is the only reliable fix path.

The restoration is semantically correct:

  • 37 state="translated" entries per file (481 total across 13 files), all with appropriate localized text verified against the pre-#9254 commit.
  • 7 state="new" entries per file remain — these are genuinely newer strings (TerminalAnsiOptionDescription, TerminalNoProgressOptionDescription, TerminalProgressHeartbeat, TerminalProgressHeartbeatActiveSuffix, TerminalProgressOptionDescription, TerminalProgressOptionInvalidArgument, TerminalProgressSlowTest) that have not yet been through the localization cycle, and leaving them as state="new" is correct.

Minor: indentation inconsistency. The restored files use 12-space indentation for <trans-unit> opening tags (e.g. <trans-unit id="Aborted">) whereas the OneLocBuild-generated content used 6 spaces. This is cosmetic and does not affect XML parsing or satellite assembly generation, but it means the next OneLocBuild PR will produce additional indentation noise in the diff alongside any genuine translation updates.


Dimension 20 — Recurring OneLocBuild Regression (follow-up)

This is the second occurrence of the exact same regression: #9248 (OneLocBuild) → fixed by #9252; then #9254 (OneLocBuild) → fixed by this PR.

The root cause — OneLocBuild resetting state="translated" entries to state="new" with English targets — has not been addressed. Without a systemic fix, the pattern will recur on the next OneLocBuild check-in. Recommended follow-ups:

  1. Open a tracking issue for the OneLocBuild pipeline configuration that causes it to overwrite valid translations. The issue should be shared with the OneLocBuild/localization team to investigate why the pipeline degrades previously-translated entries.
  2. Consider a CI guard: a repo lint step (e.g. a PowerShell or bash check in the build pipeline) that asserts "no TerminalResources.*.xlf file may contain a <target state="new"> value that exactly matches its <source> value unless the source was genuinely never translated." This would detect OneLocBuild regressions automatically before they reach main.

Recommendation

LGTM as a targeted emergency hotfix. The change is correct, minimal in scope, and the emergency exception to the XLF editing rule is fully justified. The one actionable follow-up is opening a tracking issue for the systemic OneLocBuild regression so it does not happen a third time.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Restore TerminalResources translations wiped by OneLocBuild (#9254) - #9261

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254
Jun 19, 2026
Merged

Restore TerminalResources translations wiped by OneLocBuild (#9254)#9261
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

The microsoft-testfx rolling build on main (build 3004049) failed with persistent acceptance-test failures across every TFM on both Linux and Windows:

  • LocalizationTests.Execution_WithFrenchLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithSpanishLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithTestingPlatformUILanguage_TakesPrecedenceOverDotnetCLI
  • LocalizationFailingTests.Execution_WithFailingTest_OutputContainsTranslatedFailureSummary

The test host emitted the English summary (Test run summary: Passed!) instead of the localized one (e.g. French Résumé de série de tests : Réussite!), so the assertions failed and the test suite failed all 4 retry attempts.

Root cause

OneLocBuild check-in #9254 (commit 2b13b0d2d) regressed all 13 TerminalResources.*.xlf files, resetting every entry from state="translated" (with real translations like Échec/Réussite) back to state="new" with English targets. TerminalTestReporter reads these strings, so the rendered summary fell back to English.

This is the exact same regression that #9248 caused and #9252 fixed.

Fix

Restore the 13 TerminalResources.*.xlf files to their pre-#9254 state (2b13b0d2d^). The change is byte-for-byte identical to the last known-good (CI-passing) state, and the state="new" count matches the pre-regression baseline (only genuinely-untranslated strings remain). Microsoft.Testing.Platform builds clean (0 warnings) with valid satellite assemblies.

Note: the one-off CrashDumpTests.CrashDump_DefaultSetting_CreateDump failure on Linux net8.0 was transient (it passed on retry; only the localization tests failed on all 4 attempts) and is unrelated to this change.

OneLocBuild check-in #9254 (commit 2b13b0d) regressed all 13
TerminalResources.*.xlf files, resetting every translated entry from
state="translated" back to state="new" with English targets. This is the
same regression #9248 caused, previously fixed by #9252.
As a result the localized test-run summary (e.g. French 'Résumé de série
de tests : Réussite!') rendered in English, failing the acceptance
LocalizationTests / LocalizationFailingTests on every TFM on both Linux
and Windows (build 3004049 on main).
Restore the 13 xlf files to their pre-#9254 state (2b13b0d^).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 19, 2026 16:29
@Evangelink
Amaury Levé (Evangelink) merged commit d2ed2f8 into mainJun 19, 2026
11 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the fix/restore-terminalresources-xlf-9254 branch June 19, 2026 16:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Restores localized terminal reporter strings for Microsoft.Testing.Platform by reverting the TerminalResources.*.xlf satellite translation files from the OneLocBuild-regressed “English + state=new” content back to their translated targets, unblocking LocalizationTests/LocalizationFailingTests acceptance runs.

Changes:

  • Restore translated <target state="translated">…</target> entries across the 13 TerminalResources.*.xlf files.
  • Revert the OneLocBuild regression that caused terminal summary text to fall back to English for non-English locales.
Show a summary per file
FileDescription
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.cs.xlfRestores Czech terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.de.xlfRestores German terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.es.xlfRestores Spanish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.fr.xlfRestores French terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.it.xlfRestores Italian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ja.xlfRestores Japanese terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ko.xlfRestores Korean terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pl.xlfRestores Polish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pt-BR.xlfRestores Portuguese (Brazil) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ru.xlfRestores Russian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.tr.xlfRestores Turkish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hans.xlfRestores Chinese (Simplified) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hant.xlfRestores Chinese (Traditional) terminal-resource translations for terminal reporter output.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 13

<file datatype="xml" source-language="en" target-language="cs" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="de" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="es" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="fr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="it" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="ru" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="tr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review — 22-Dimension Analysis

This PR restores 13 TerminalResources.*.xlf files to their pre-#9254 state, changing 481 translation entries across all language files from state="new" (English fallback) back to state="translated" (proper localized text). The remaining 7 state="new" entries per file are genuinely new/untranslated strings (e.g. TerminalAnsiOptionDescription, TerminalProgressHeartbeat, TerminalProgressSlowTest), which is correct.


Verdict Table

#DimensionSeverityStatusNotes
1Algorithmic CorrectnessMAJOR✅ CleanCorrectly targets root cause symptom (481 state+content entries changed; 7 genuinely new strings left as-is per file). Byte-for-byte revert to last CI-passing state is verified.
2Threading & ConcurrencyBLOCKING➡️ N/ANo code changes.
3Security & IPC Contract SafetyBLOCKING➡️ N/AXLF files introduce no security surface.
4Public API & Binary CompatibilityBLOCKING➡️ N/ANo API surface changes; satellite assemblies are rebuilt by MSBuild.
5Performance & AllocationsMAJOR➡️ N/ANo code changes.
6Cross-TFM CompatibilityMAJOR✅ CleanSatellite assemblies generated from XLF work across all TFMs; the pre-regression behavior is restored.
7Resource & IDisposable ManagementMAJOR➡️ N/ANo code changes.
8Defensive Coding at BoundariesMAJOR➡️ N/ANo code changes.
9Localization & ResourcesMAJOR⚠️ Issues FoundSee detailed analysis below.
10Test IsolationMAJOR➡️ N/ANo test code changes.
11Assertion QualityMAJOR➡️ N/ANo test code changes.
12Flakiness PatternsBLOCKING➡️ N/ANo test code changes.
13Test Completeness & CoverageMAJOR✅ CleanExisting LocalizationTests / LocalizationFailingTests acceptance tests cover the fixed behavior end-to-end.
14Data-Driven Test CoverageMODERATE➡️ N/ANo test changes.
15Code Structure & SimplificationMODERATE➡️ N/AXML content only.
16Naming & ConventionsMINOR➡️ N/AN/A for XLF files.
17XML/JSON/YAML ConfigurationMODERATE✅ CleanValid XLIFF 1.2 structure; all <trans-unit> elements are well-formed.
18Error Messages & DiagnosticsMODERATE➡️ N/ANo new user-facing strings introduced.
19Changelog / Release NotesMINOR✅ CleanAcceptable to skip CHANGELOG for a CI-hotfix/revert.
20Follow-up TODOsMINOR⚠️ Issues FoundNo tracking issue referenced for the recurring OneLocBuild regression. See below.
21DocumentationMINOR➡️ N/ANo public API changes.
22PowerShell Script QualityMINOR➡️ N/ANo .ps1 changes.

Dimension 9 — Localization & Resources (detailed)

Emergency exception to the "never manually edit XLF" rule is appropriate here. The automated OneLocBuild pipeline is the regression source, not a developer editing the wrong file. Running dotnet msbuild /t:UpdateXlf would have been insufficient because it regenerates from the .resx (which was not regressed) — it does not know which translation targets were previously correct. The byte-for-byte revert to a CI-passing commit is the only reliable fix path.

The restoration is semantically correct:

  • 37 state="translated" entries per file (481 total across 13 files), all with appropriate localized text verified against the pre-#9254 commit.
  • 7 state="new" entries per file remain — these are genuinely newer strings (TerminalAnsiOptionDescription, TerminalNoProgressOptionDescription, TerminalProgressHeartbeat, TerminalProgressHeartbeatActiveSuffix, TerminalProgressOptionDescription, TerminalProgressOptionInvalidArgument, TerminalProgressSlowTest) that have not yet been through the localization cycle, and leaving them as state="new" is correct.

Minor: indentation inconsistency. The restored files use 12-space indentation for <trans-unit> opening tags (e.g. <trans-unit id="Aborted">) whereas the OneLocBuild-generated content used 6 spaces. This is cosmetic and does not affect XML parsing or satellite assembly generation, but it means the next OneLocBuild PR will produce additional indentation noise in the diff alongside any genuine translation updates.


Dimension 20 — Recurring OneLocBuild Regression (follow-up)

This is the second occurrence of the exact same regression: #9248 (OneLocBuild) → fixed by #9252; then #9254 (OneLocBuild) → fixed by this PR.

The root cause — OneLocBuild resetting state="translated" entries to state="new" with English targets — has not been addressed. Without a systemic fix, the pattern will recur on the next OneLocBuild check-in. Recommended follow-ups:

  1. Open a tracking issue for the OneLocBuild pipeline configuration that causes it to overwrite valid translations. The issue should be shared with the OneLocBuild/localization team to investigate why the pipeline degrades previously-translated entries.
  2. Consider a CI guard: a repo lint step (e.g. a PowerShell or bash check in the build pipeline) that asserts "no TerminalResources.*.xlf file may contain a <target state="new"> value that exactly matches its <source> value unless the source was genuinely never translated." This would detect OneLocBuild regressions automatically before they reach main.

Recommendation

LGTM as a targeted emergency hotfix. The change is correct, minimal in scope, and the emergency exception to the XLF editing rule is fully justified. The one actionable follow-up is opening a tracking issue for the systemic OneLocBuild regression so it does not happen a third time.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Restore TerminalResources translations wiped by OneLocBuild (#9254) - #9261

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254
Jun 19, 2026
Merged

Restore TerminalResources translations wiped by OneLocBuild (#9254)#9261
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

The microsoft-testfx rolling build on main (build 3004049) failed with persistent acceptance-test failures across every TFM on both Linux and Windows:

  • LocalizationTests.Execution_WithFrenchLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithSpanishLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithTestingPlatformUILanguage_TakesPrecedenceOverDotnetCLI
  • LocalizationFailingTests.Execution_WithFailingTest_OutputContainsTranslatedFailureSummary

The test host emitted the English summary (Test run summary: Passed!) instead of the localized one (e.g. French Résumé de série de tests : Réussite!), so the assertions failed and the test suite failed all 4 retry attempts.

Root cause

OneLocBuild check-in #9254 (commit 2b13b0d2d) regressed all 13 TerminalResources.*.xlf files, resetting every entry from state="translated" (with real translations like Échec/Réussite) back to state="new" with English targets. TerminalTestReporter reads these strings, so the rendered summary fell back to English.

This is the exact same regression that #9248 caused and #9252 fixed.

Fix

Restore the 13 TerminalResources.*.xlf files to their pre-#9254 state (2b13b0d2d^). The change is byte-for-byte identical to the last known-good (CI-passing) state, and the state="new" count matches the pre-regression baseline (only genuinely-untranslated strings remain). Microsoft.Testing.Platform builds clean (0 warnings) with valid satellite assemblies.

Note: the one-off CrashDumpTests.CrashDump_DefaultSetting_CreateDump failure on Linux net8.0 was transient (it passed on retry; only the localization tests failed on all 4 attempts) and is unrelated to this change.

OneLocBuild check-in #9254 (commit 2b13b0d) regressed all 13
TerminalResources.*.xlf files, resetting every translated entry from
state="translated" back to state="new" with English targets. This is the
same regression #9248 caused, previously fixed by #9252.
As a result the localized test-run summary (e.g. French 'Résumé de série
de tests : Réussite!') rendered in English, failing the acceptance
LocalizationTests / LocalizationFailingTests on every TFM on both Linux
and Windows (build 3004049 on main).
Restore the 13 xlf files to their pre-#9254 state (2b13b0d^).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 19, 2026 16:29
@Evangelink
Amaury Levé (Evangelink) merged commit d2ed2f8 into mainJun 19, 2026
11 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the fix/restore-terminalresources-xlf-9254 branch June 19, 2026 16:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Restores localized terminal reporter strings for Microsoft.Testing.Platform by reverting the TerminalResources.*.xlf satellite translation files from the OneLocBuild-regressed “English + state=new” content back to their translated targets, unblocking LocalizationTests/LocalizationFailingTests acceptance runs.

Changes:

  • Restore translated <target state="translated">…</target> entries across the 13 TerminalResources.*.xlf files.
  • Revert the OneLocBuild regression that caused terminal summary text to fall back to English for non-English locales.
Show a summary per file
FileDescription
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.cs.xlfRestores Czech terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.de.xlfRestores German terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.es.xlfRestores Spanish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.fr.xlfRestores French terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.it.xlfRestores Italian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ja.xlfRestores Japanese terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ko.xlfRestores Korean terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pl.xlfRestores Polish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pt-BR.xlfRestores Portuguese (Brazil) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ru.xlfRestores Russian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.tr.xlfRestores Turkish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hans.xlfRestores Chinese (Simplified) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hant.xlfRestores Chinese (Traditional) terminal-resource translations for terminal reporter output.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 13

<file datatype="xml" source-language="en" target-language="cs" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="de" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="es" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="fr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="it" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="ru" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="tr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review — 22-Dimension Analysis

This PR restores 13 TerminalResources.*.xlf files to their pre-#9254 state, changing 481 translation entries across all language files from state="new" (English fallback) back to state="translated" (proper localized text). The remaining 7 state="new" entries per file are genuinely new/untranslated strings (e.g. TerminalAnsiOptionDescription, TerminalProgressHeartbeat, TerminalProgressSlowTest), which is correct.


Verdict Table

#DimensionSeverityStatusNotes
1Algorithmic CorrectnessMAJOR✅ CleanCorrectly targets root cause symptom (481 state+content entries changed; 7 genuinely new strings left as-is per file). Byte-for-byte revert to last CI-passing state is verified.
2Threading & ConcurrencyBLOCKING➡️ N/ANo code changes.
3Security & IPC Contract SafetyBLOCKING➡️ N/AXLF files introduce no security surface.
4Public API & Binary CompatibilityBLOCKING➡️ N/ANo API surface changes; satellite assemblies are rebuilt by MSBuild.
5Performance & AllocationsMAJOR➡️ N/ANo code changes.
6Cross-TFM CompatibilityMAJOR✅ CleanSatellite assemblies generated from XLF work across all TFMs; the pre-regression behavior is restored.
7Resource & IDisposable ManagementMAJOR➡️ N/ANo code changes.
8Defensive Coding at BoundariesMAJOR➡️ N/ANo code changes.
9Localization & ResourcesMAJOR⚠️ Issues FoundSee detailed analysis below.
10Test IsolationMAJOR➡️ N/ANo test code changes.
11Assertion QualityMAJOR➡️ N/ANo test code changes.
12Flakiness PatternsBLOCKING➡️ N/ANo test code changes.
13Test Completeness & CoverageMAJOR✅ CleanExisting LocalizationTests / LocalizationFailingTests acceptance tests cover the fixed behavior end-to-end.
14Data-Driven Test CoverageMODERATE➡️ N/ANo test changes.
15Code Structure & SimplificationMODERATE➡️ N/AXML content only.
16Naming & ConventionsMINOR➡️ N/AN/A for XLF files.
17XML/JSON/YAML ConfigurationMODERATE✅ CleanValid XLIFF 1.2 structure; all <trans-unit> elements are well-formed.
18Error Messages & DiagnosticsMODERATE➡️ N/ANo new user-facing strings introduced.
19Changelog / Release NotesMINOR✅ CleanAcceptable to skip CHANGELOG for a CI-hotfix/revert.
20Follow-up TODOsMINOR⚠️ Issues FoundNo tracking issue referenced for the recurring OneLocBuild regression. See below.
21DocumentationMINOR➡️ N/ANo public API changes.
22PowerShell Script QualityMINOR➡️ N/ANo .ps1 changes.

Dimension 9 — Localization & Resources (detailed)

Emergency exception to the "never manually edit XLF" rule is appropriate here. The automated OneLocBuild pipeline is the regression source, not a developer editing the wrong file. Running dotnet msbuild /t:UpdateXlf would have been insufficient because it regenerates from the .resx (which was not regressed) — it does not know which translation targets were previously correct. The byte-for-byte revert to a CI-passing commit is the only reliable fix path.

The restoration is semantically correct:

  • 37 state="translated" entries per file (481 total across 13 files), all with appropriate localized text verified against the pre-#9254 commit.
  • 7 state="new" entries per file remain — these are genuinely newer strings (TerminalAnsiOptionDescription, TerminalNoProgressOptionDescription, TerminalProgressHeartbeat, TerminalProgressHeartbeatActiveSuffix, TerminalProgressOptionDescription, TerminalProgressOptionInvalidArgument, TerminalProgressSlowTest) that have not yet been through the localization cycle, and leaving them as state="new" is correct.

Minor: indentation inconsistency. The restored files use 12-space indentation for <trans-unit> opening tags (e.g. <trans-unit id="Aborted">) whereas the OneLocBuild-generated content used 6 spaces. This is cosmetic and does not affect XML parsing or satellite assembly generation, but it means the next OneLocBuild PR will produce additional indentation noise in the diff alongside any genuine translation updates.


Dimension 20 — Recurring OneLocBuild Regression (follow-up)

This is the second occurrence of the exact same regression: #9248 (OneLocBuild) → fixed by #9252; then #9254 (OneLocBuild) → fixed by this PR.

The root cause — OneLocBuild resetting state="translated" entries to state="new" with English targets — has not been addressed. Without a systemic fix, the pattern will recur on the next OneLocBuild check-in. Recommended follow-ups:

  1. Open a tracking issue for the OneLocBuild pipeline configuration that causes it to overwrite valid translations. The issue should be shared with the OneLocBuild/localization team to investigate why the pipeline degrades previously-translated entries.
  2. Consider a CI guard: a repo lint step (e.g. a PowerShell or bash check in the build pipeline) that asserts "no TerminalResources.*.xlf file may contain a <target state="new"> value that exactly matches its <source> value unless the source was genuinely never translated." This would detect OneLocBuild regressions automatically before they reach main.

Recommendation

LGTM as a targeted emergency hotfix. The change is correct, minimal in scope, and the emergency exception to the XLF editing rule is fully justified. The one actionable follow-up is opening a tracking issue for the systemic OneLocBuild regression so it does not happen a third time.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Restore TerminalResources translations wiped by OneLocBuild (#9254) - #9261

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254
Jun 19, 2026
Merged

Restore TerminalResources translations wiped by OneLocBuild (#9254)#9261
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
fix/restore-terminalresources-xlf-9254

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

The microsoft-testfx rolling build on main (build 3004049) failed with persistent acceptance-test failures across every TFM on both Linux and Windows:

  • LocalizationTests.Execution_WithFrenchLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithSpanishLocale_OutputContainsTranslatedSummary
  • LocalizationTests.Execution_WithTestingPlatformUILanguage_TakesPrecedenceOverDotnetCLI
  • LocalizationFailingTests.Execution_WithFailingTest_OutputContainsTranslatedFailureSummary

The test host emitted the English summary (Test run summary: Passed!) instead of the localized one (e.g. French Résumé de série de tests : Réussite!), so the assertions failed and the test suite failed all 4 retry attempts.

Root cause

OneLocBuild check-in #9254 (commit 2b13b0d2d) regressed all 13 TerminalResources.*.xlf files, resetting every entry from state="translated" (with real translations like Échec/Réussite) back to state="new" with English targets. TerminalTestReporter reads these strings, so the rendered summary fell back to English.

This is the exact same regression that #9248 caused and #9252 fixed.

Fix

Restore the 13 TerminalResources.*.xlf files to their pre-#9254 state (2b13b0d2d^). The change is byte-for-byte identical to the last known-good (CI-passing) state, and the state="new" count matches the pre-regression baseline (only genuinely-untranslated strings remain). Microsoft.Testing.Platform builds clean (0 warnings) with valid satellite assemblies.

Note: the one-off CrashDumpTests.CrashDump_DefaultSetting_CreateDump failure on Linux net8.0 was transient (it passed on retry; only the localization tests failed on all 4 attempts) and is unrelated to this change.

OneLocBuild check-in #9254 (commit 2b13b0d) regressed all 13
TerminalResources.*.xlf files, resetting every translated entry from
state="translated" back to state="new" with English targets. This is the
same regression #9248 caused, previously fixed by #9252.
As a result the localized test-run summary (e.g. French 'Résumé de série
de tests : Réussite!') rendered in English, failing the acceptance
LocalizationTests / LocalizationFailingTests on every TFM on both Linux
and Windows (build 3004049 on main).
Restore the 13 xlf files to their pre-#9254 state (2b13b0d^).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 19, 2026 16:29
@Evangelink
Amaury Levé (Evangelink) merged commit d2ed2f8 into mainJun 19, 2026
11 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the fix/restore-terminalresources-xlf-9254 branch June 19, 2026 16:30

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Restores localized terminal reporter strings for Microsoft.Testing.Platform by reverting the TerminalResources.*.xlf satellite translation files from the OneLocBuild-regressed “English + state=new” content back to their translated targets, unblocking LocalizationTests/LocalizationFailingTests acceptance runs.

Changes:

  • Restore translated <target state="translated">…</target> entries across the 13 TerminalResources.*.xlf files.
  • Revert the OneLocBuild regression that caused terminal summary text to fall back to English for non-English locales.
Show a summary per file
FileDescription
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.cs.xlfRestores Czech terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.de.xlfRestores German terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.es.xlfRestores Spanish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.fr.xlfRestores French terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.it.xlfRestores Italian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ja.xlfRestores Japanese terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ko.xlfRestores Korean terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pl.xlfRestores Polish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.pt-BR.xlfRestores Portuguese (Brazil) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.ru.xlfRestores Russian terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.tr.xlfRestores Turkish terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hans.xlfRestores Chinese (Simplified) terminal-resource translations for terminal reporter output.
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/xlf/TerminalResources.zh-Hant.xlfRestores Chinese (Traditional) terminal-resource translations for terminal reporter output.

Copilot's findings

  • Files reviewed: 13/13 changed files
  • Comments generated: 13

<file datatype="xml" source-language="en" target-language="cs" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="de" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="es" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="fr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="it" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="pt-BR" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="ru" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="tr" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hans" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">
<file datatype="xml" source-language="en" target-language="zh-Hant" original="../TerminalResources.resx">
<body>
<trans-unit id="Aborted">
<trans-unit id="Aborted">

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review — 22-Dimension Analysis

This PR restores 13 TerminalResources.*.xlf files to their pre-#9254 state, changing 481 translation entries across all language files from state="new" (English fallback) back to state="translated" (proper localized text). The remaining 7 state="new" entries per file are genuinely new/untranslated strings (e.g. TerminalAnsiOptionDescription, TerminalProgressHeartbeat, TerminalProgressSlowTest), which is correct.


Verdict Table

#DimensionSeverityStatusNotes
1Algorithmic CorrectnessMAJOR✅ CleanCorrectly targets root cause symptom (481 state+content entries changed; 7 genuinely new strings left as-is per file). Byte-for-byte revert to last CI-passing state is verified.
2Threading & ConcurrencyBLOCKING➡️ N/ANo code changes.
3Security & IPC Contract SafetyBLOCKING➡️ N/AXLF files introduce no security surface.
4Public API & Binary CompatibilityBLOCKING➡️ N/ANo API surface changes; satellite assemblies are rebuilt by MSBuild.
5Performance & AllocationsMAJOR➡️ N/ANo code changes.
6Cross-TFM CompatibilityMAJOR✅ CleanSatellite assemblies generated from XLF work across all TFMs; the pre-regression behavior is restored.
7Resource & IDisposable ManagementMAJOR➡️ N/ANo code changes.
8Defensive Coding at BoundariesMAJOR➡️ N/ANo code changes.
9Localization & ResourcesMAJOR⚠️ Issues FoundSee detailed analysis below.
10Test IsolationMAJOR➡️ N/ANo test code changes.
11Assertion QualityMAJOR➡️ N/ANo test code changes.
12Flakiness PatternsBLOCKING➡️ N/ANo test code changes.
13Test Completeness & CoverageMAJOR✅ CleanExisting LocalizationTests / LocalizationFailingTests acceptance tests cover the fixed behavior end-to-end.
14Data-Driven Test CoverageMODERATE➡️ N/ANo test changes.
15Code Structure & SimplificationMODERATE➡️ N/AXML content only.
16Naming & ConventionsMINOR➡️ N/AN/A for XLF files.
17XML/JSON/YAML ConfigurationMODERATE✅ CleanValid XLIFF 1.2 structure; all <trans-unit> elements are well-formed.
18Error Messages & DiagnosticsMODERATE➡️ N/ANo new user-facing strings introduced.
19Changelog / Release NotesMINOR✅ CleanAcceptable to skip CHANGELOG for a CI-hotfix/revert.
20Follow-up TODOsMINOR⚠️ Issues FoundNo tracking issue referenced for the recurring OneLocBuild regression. See below.
21DocumentationMINOR➡️ N/ANo public API changes.
22PowerShell Script QualityMINOR➡️ N/ANo .ps1 changes.

Dimension 9 — Localization & Resources (detailed)

Emergency exception to the "never manually edit XLF" rule is appropriate here. The automated OneLocBuild pipeline is the regression source, not a developer editing the wrong file. Running dotnet msbuild /t:UpdateXlf would have been insufficient because it regenerates from the .resx (which was not regressed) — it does not know which translation targets were previously correct. The byte-for-byte revert to a CI-passing commit is the only reliable fix path.

The restoration is semantically correct:

  • 37 state="translated" entries per file (481 total across 13 files), all with appropriate localized text verified against the pre-#9254 commit.
  • 7 state="new" entries per file remain — these are genuinely newer strings (TerminalAnsiOptionDescription, TerminalNoProgressOptionDescription, TerminalProgressHeartbeat, TerminalProgressHeartbeatActiveSuffix, TerminalProgressOptionDescription, TerminalProgressOptionInvalidArgument, TerminalProgressSlowTest) that have not yet been through the localization cycle, and leaving them as state="new" is correct.

Minor: indentation inconsistency. The restored files use 12-space indentation for <trans-unit> opening tags (e.g. <trans-unit id="Aborted">) whereas the OneLocBuild-generated content used 6 spaces. This is cosmetic and does not affect XML parsing or satellite assembly generation, but it means the next OneLocBuild PR will produce additional indentation noise in the diff alongside any genuine translation updates.


Dimension 20 — Recurring OneLocBuild Regression (follow-up)

This is the second occurrence of the exact same regression: #9248 (OneLocBuild) → fixed by #9252; then #9254 (OneLocBuild) → fixed by this PR.

The root cause — OneLocBuild resetting state="translated" entries to state="new" with English targets — has not been addressed. Without a systemic fix, the pattern will recur on the next OneLocBuild check-in. Recommended follow-ups:

  1. Open a tracking issue for the OneLocBuild pipeline configuration that causes it to overwrite valid translations. The issue should be shared with the OneLocBuild/localization team to investigate why the pipeline degrades previously-translated entries.
  2. Consider a CI guard: a repo lint step (e.g. a PowerShell or bash check in the build pipeline) that asserts "no TerminalResources.*.xlf file may contain a <target state="new"> value that exactly matches its <source> value unless the source was genuinely never translated." This would detect OneLocBuild regressions automatically before they reach main.

Recommendation

LGTM as a targeted emergency hotfix. The change is correct, minimal in scope, and the emergency exception to the XLF editing rule is fully justified. The one actionable follow-up is opening a tracking issue for the systemic OneLocBuild regression so it does not happen a third time.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink