Audit .resx files: add placeholder docs and {Locked="…"} markers - #9031

Merged
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2
Jun 11, 2026
Merged

Audit .resx files: add placeholder docs and {Locked="…"} markers#9031
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Audited every .resx file across the repo (21 files, ~1055 entries) and:

  • Added <comment> elements documenting each {N} placeholder (what value it carries, e.g. {0} is the section name. {1} is the path to testconfig.json.).
  • Added {Locked="…"} markers for tokens that must NOT be localized: CLI option names (--report-trx), environment variable names (TF_BUILD), attribute/type names ([TestMethod], ITestApplicationBuilder), literal config values, file extensions, etc.
  • Regenerated the corresponding .xlf files via dotnet msbuild <project> /t:UpdateXlf for all 20 shipping projects. XliffTasks correctly propagated <note> elements and re-marked affected trans-units as needs-review-translation so the loc team can revalidate existing translations against the new Locked context.

Notes

  • Microsoft.Testing.Extensions.AzureFoundry xlf is not regenerated: the project sets <IsShipping>false</IsShipping>, and Arcade's Localization.targets only wires up XliffTasks for IsShippingAssembly == true. The single new resx <comment> there will be picked up the next time UpdateXlf runs on the project.
  • No <value> text mutations across any resx — verified with raw git diff.
  • .\build.cmd passes with 0 warnings / 0 errors (validated on the original branch; this PR is a clean cherry-pick of the same commit onto current main now that Add Microsoft.Testing.Extensions.CtrfReport extension (CTRF reporter) #8903 has merged).

This PR supersedes Evangelink/testfx#2, which was mistakenly targeting a branch in my fork instead of microsoft/testfx:main.

Audited every .resx file across the repo (21 files, ~1055 entries) and:
- Added <comment> elements documenting each {N} placeholder (what value
it carries, e.g. "{0} is the test method name. {1} is the assertion
failure message.").
- Added {Locked="..."} markers for tokens that must NOT be localized:
CLI option names (--report-trx), env var names (TF_BUILD),
attribute/type names ([TestMethod], ITestApplicationBuilder),
literal config values, file extensions, etc.
- Regenerated the corresponding .xlf files via
`dotnet msbuild <project> /t:UpdateXlf` for all 20 shipping
projects. XliffTasks marks affected trans-units as
`needs-review-translation` so the loc team can revalidate
existing translations against the new Locked context.
AzureFoundry's xlf is not regenerated because its project sets
`IsShipping=false` and Arcade only wires up XliffTasks for shipping
projects; the single resx <comment> there will be picked up the next
time the project becomes shipping or someone explicitly runs UpdateXlf
on it. No <value> mutations across any resx.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

This PR updates localization resources across MSTest and Microsoft.Testing.Platform to improve translator context by documenting format placeholders and marking non-localizable tokens (via {Locked="…"}) in .resx comments, then propagating those notes into regenerated .xlf files.

Changes:

  • Added/expanded <comment> metadata for placeholders ({0}, {1}, …) and non-localizable tokens (CLI options, API names, URLs, file extensions) across resource .resx files.
  • Regenerated corresponding .xlf files so translator notes include the new placeholder documentation and {Locked="…"} markers.
  • Updated localized .xlf targets’ state to reflect that translations may need re-validation given the new locking context.
Show a summary per file
FileDescription
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.it.xlfPropagates updated translator notes/lock markers into it resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.es.xlfPropagates updated translator notes/lock markers into es resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.de.xlfPropagates updated translator notes/lock markers into de resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/TestFramework/TestFramework.Extensions/Resources/FrameworkExtensionsMessages.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.MSBuild/Resources/MSBuildResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/AIExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hans.xlfRegenerated zh-Hans XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pt-BR.xlfRegenerated pt-BR XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pl.xlfRegenerated pl XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ko.xlfRegenerated ko XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ja.xlfRegenerated ja XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.it.xlfRegenerated it XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.de.xlfRegenerated de XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.cs.xlfRegenerated cs XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for JUnitReport resources.
src/Platform/Microsoft.Testing.Extensions.HtmlReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for HtmlReport resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for CTRF resources.
src/Platform/Microsoft.Testing.Extensions.AzureFoundry/Resources/ExtensionResources.resxAdds placeholder documentation in resx comments.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 10

…ed lists
The original cherry-pick onto main triggered git auto-merges in four
extension projects whose resx files had diverged between the audit
branch and main. The merges produced two kinds of corruption:
1. Invalid/duplicate trans-units in xlf files (8 JUnitReport xlf files
had duplicate trans-unit ids; 13 HangDump xlf files were not even
well-formed XML; HtmlReport, JUnitReport, and TrxReport xlf files
had two <target>/<note> pairs in the FileNameOptionDescription
trans-unit, which is invalid XLIFF 1.2).
2. A duplicated <value> line in HangDump's resx that broke XML
well-formedness.
Fix: reset every affected xlf to origin/main, fix the HangDump resx
XML, then run UpdateXlf on the four projects so the xlf files are
regenerated cleanly from the (corrected) resx.
Also addressed the second review comment: the {Locked="{arch}"} token
was missing from the FileNameOptionDescription <comment> in HangDump,
HtmlReport, JUnitReport, and TrxReport resx files even though {arch}
appears in their <value> placeholder list. Added it everywhere for
consistency.
Verified: all 4 affected projects build clean (0 warnings, 0 errors),
all PR xlf files pass well-formedness and trans-unit-uniqueness audits,
all PR resx files are well-formed XML.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous regen left the xlf files semantically out of date with
the resx for three projects (CI's XliffTasks freshness check failed
on cs.xlf for all three). Re-running UpdateXlf now properly:
- Replaces empty <note /> with the actual note text from the resx
<comment> for entries that already had translated targets.
- Re-marks <target state="translated"> as
<target state="needs-review-translation"> since the source's note
changed.
Verified: clean-rebuild (after wiping artifacts/obj) of all four
affected projects passes the XliffTasks freshness check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 09:00

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.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 1

@Evangelink
Amaury Levé (Evangelink) merged commit acb8277 into microsoft:mainJun 11, 2026
20 of 25 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/resx-comments-audit-v2 branch June 11, 2026 09:22
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

Audit .resx files: add placeholder docs and {Locked="…"} markers - #9031

Merged
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2
Jun 11, 2026
Merged

Audit .resx files: add placeholder docs and {Locked="…"} markers#9031
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Audited every .resx file across the repo (21 files, ~1055 entries) and:

  • Added <comment> elements documenting each {N} placeholder (what value it carries, e.g. {0} is the section name. {1} is the path to testconfig.json.).
  • Added {Locked="…"} markers for tokens that must NOT be localized: CLI option names (--report-trx), environment variable names (TF_BUILD), attribute/type names ([TestMethod], ITestApplicationBuilder), literal config values, file extensions, etc.
  • Regenerated the corresponding .xlf files via dotnet msbuild <project> /t:UpdateXlf for all 20 shipping projects. XliffTasks correctly propagated <note> elements and re-marked affected trans-units as needs-review-translation so the loc team can revalidate existing translations against the new Locked context.

Notes

  • Microsoft.Testing.Extensions.AzureFoundry xlf is not regenerated: the project sets <IsShipping>false</IsShipping>, and Arcade's Localization.targets only wires up XliffTasks for IsShippingAssembly == true. The single new resx <comment> there will be picked up the next time UpdateXlf runs on the project.
  • No <value> text mutations across any resx — verified with raw git diff.
  • .\build.cmd passes with 0 warnings / 0 errors (validated on the original branch; this PR is a clean cherry-pick of the same commit onto current main now that Add Microsoft.Testing.Extensions.CtrfReport extension (CTRF reporter) #8903 has merged).

This PR supersedes Evangelink/testfx#2, which was mistakenly targeting a branch in my fork instead of microsoft/testfx:main.

Audited every .resx file across the repo (21 files, ~1055 entries) and:
- Added <comment> elements documenting each {N} placeholder (what value
it carries, e.g. "{0} is the test method name. {1} is the assertion
failure message.").
- Added {Locked="..."} markers for tokens that must NOT be localized:
CLI option names (--report-trx), env var names (TF_BUILD),
attribute/type names ([TestMethod], ITestApplicationBuilder),
literal config values, file extensions, etc.
- Regenerated the corresponding .xlf files via
`dotnet msbuild <project> /t:UpdateXlf` for all 20 shipping
projects. XliffTasks marks affected trans-units as
`needs-review-translation` so the loc team can revalidate
existing translations against the new Locked context.
AzureFoundry's xlf is not regenerated because its project sets
`IsShipping=false` and Arcade only wires up XliffTasks for shipping
projects; the single resx <comment> there will be picked up the next
time the project becomes shipping or someone explicitly runs UpdateXlf
on it. No <value> mutations across any resx.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

This PR updates localization resources across MSTest and Microsoft.Testing.Platform to improve translator context by documenting format placeholders and marking non-localizable tokens (via {Locked="…"}) in .resx comments, then propagating those notes into regenerated .xlf files.

Changes:

  • Added/expanded <comment> metadata for placeholders ({0}, {1}, …) and non-localizable tokens (CLI options, API names, URLs, file extensions) across resource .resx files.
  • Regenerated corresponding .xlf files so translator notes include the new placeholder documentation and {Locked="…"} markers.
  • Updated localized .xlf targets’ state to reflect that translations may need re-validation given the new locking context.
Show a summary per file
FileDescription
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.it.xlfPropagates updated translator notes/lock markers into it resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.es.xlfPropagates updated translator notes/lock markers into es resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.de.xlfPropagates updated translator notes/lock markers into de resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/TestFramework/TestFramework.Extensions/Resources/FrameworkExtensionsMessages.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.MSBuild/Resources/MSBuildResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/AIExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hans.xlfRegenerated zh-Hans XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pt-BR.xlfRegenerated pt-BR XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pl.xlfRegenerated pl XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ko.xlfRegenerated ko XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ja.xlfRegenerated ja XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.it.xlfRegenerated it XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.de.xlfRegenerated de XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.cs.xlfRegenerated cs XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for JUnitReport resources.
src/Platform/Microsoft.Testing.Extensions.HtmlReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for HtmlReport resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for CTRF resources.
src/Platform/Microsoft.Testing.Extensions.AzureFoundry/Resources/ExtensionResources.resxAdds placeholder documentation in resx comments.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 10

…ed lists
The original cherry-pick onto main triggered git auto-merges in four
extension projects whose resx files had diverged between the audit
branch and main. The merges produced two kinds of corruption:
1. Invalid/duplicate trans-units in xlf files (8 JUnitReport xlf files
had duplicate trans-unit ids; 13 HangDump xlf files were not even
well-formed XML; HtmlReport, JUnitReport, and TrxReport xlf files
had two <target>/<note> pairs in the FileNameOptionDescription
trans-unit, which is invalid XLIFF 1.2).
2. A duplicated <value> line in HangDump's resx that broke XML
well-formedness.
Fix: reset every affected xlf to origin/main, fix the HangDump resx
XML, then run UpdateXlf on the four projects so the xlf files are
regenerated cleanly from the (corrected) resx.
Also addressed the second review comment: the {Locked="{arch}"} token
was missing from the FileNameOptionDescription <comment> in HangDump,
HtmlReport, JUnitReport, and TrxReport resx files even though {arch}
appears in their <value> placeholder list. Added it everywhere for
consistency.
Verified: all 4 affected projects build clean (0 warnings, 0 errors),
all PR xlf files pass well-formedness and trans-unit-uniqueness audits,
all PR resx files are well-formed XML.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous regen left the xlf files semantically out of date with
the resx for three projects (CI's XliffTasks freshness check failed
on cs.xlf for all three). Re-running UpdateXlf now properly:
- Replaces empty <note /> with the actual note text from the resx
<comment> for entries that already had translated targets.
- Re-marks <target state="translated"> as
<target state="needs-review-translation"> since the source's note
changed.
Verified: clean-rebuild (after wiping artifacts/obj) of all four
affected projects passes the XliffTasks freshness check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 09:00

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.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 1

@Evangelink
Amaury Levé (Evangelink) merged commit acb8277 into microsoft:mainJun 11, 2026
20 of 25 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/resx-comments-audit-v2 branch June 11, 2026 09:22
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

Audit .resx files: add placeholder docs and {Locked="…"} markers - #9031

Merged
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2
Jun 11, 2026
Merged

Audit .resx files: add placeholder docs and {Locked="…"} markers#9031
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Audited every .resx file across the repo (21 files, ~1055 entries) and:

  • Added <comment> elements documenting each {N} placeholder (what value it carries, e.g. {0} is the section name. {1} is the path to testconfig.json.).
  • Added {Locked="…"} markers for tokens that must NOT be localized: CLI option names (--report-trx), environment variable names (TF_BUILD), attribute/type names ([TestMethod], ITestApplicationBuilder), literal config values, file extensions, etc.
  • Regenerated the corresponding .xlf files via dotnet msbuild <project> /t:UpdateXlf for all 20 shipping projects. XliffTasks correctly propagated <note> elements and re-marked affected trans-units as needs-review-translation so the loc team can revalidate existing translations against the new Locked context.

Notes

  • Microsoft.Testing.Extensions.AzureFoundry xlf is not regenerated: the project sets <IsShipping>false</IsShipping>, and Arcade's Localization.targets only wires up XliffTasks for IsShippingAssembly == true. The single new resx <comment> there will be picked up the next time UpdateXlf runs on the project.
  • No <value> text mutations across any resx — verified with raw git diff.
  • .\build.cmd passes with 0 warnings / 0 errors (validated on the original branch; this PR is a clean cherry-pick of the same commit onto current main now that Add Microsoft.Testing.Extensions.CtrfReport extension (CTRF reporter) #8903 has merged).

This PR supersedes Evangelink/testfx#2, which was mistakenly targeting a branch in my fork instead of microsoft/testfx:main.

Audited every .resx file across the repo (21 files, ~1055 entries) and:
- Added <comment> elements documenting each {N} placeholder (what value
it carries, e.g. "{0} is the test method name. {1} is the assertion
failure message.").
- Added {Locked="..."} markers for tokens that must NOT be localized:
CLI option names (--report-trx), env var names (TF_BUILD),
attribute/type names ([TestMethod], ITestApplicationBuilder),
literal config values, file extensions, etc.
- Regenerated the corresponding .xlf files via
`dotnet msbuild <project> /t:UpdateXlf` for all 20 shipping
projects. XliffTasks marks affected trans-units as
`needs-review-translation` so the loc team can revalidate
existing translations against the new Locked context.
AzureFoundry's xlf is not regenerated because its project sets
`IsShipping=false` and Arcade only wires up XliffTasks for shipping
projects; the single resx <comment> there will be picked up the next
time the project becomes shipping or someone explicitly runs UpdateXlf
on it. No <value> mutations across any resx.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

This PR updates localization resources across MSTest and Microsoft.Testing.Platform to improve translator context by documenting format placeholders and marking non-localizable tokens (via {Locked="…"}) in .resx comments, then propagating those notes into regenerated .xlf files.

Changes:

  • Added/expanded <comment> metadata for placeholders ({0}, {1}, …) and non-localizable tokens (CLI options, API names, URLs, file extensions) across resource .resx files.
  • Regenerated corresponding .xlf files so translator notes include the new placeholder documentation and {Locked="…"} markers.
  • Updated localized .xlf targets’ state to reflect that translations may need re-validation given the new locking context.
Show a summary per file
FileDescription
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.it.xlfPropagates updated translator notes/lock markers into it resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.es.xlfPropagates updated translator notes/lock markers into es resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.de.xlfPropagates updated translator notes/lock markers into de resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/TestFramework/TestFramework.Extensions/Resources/FrameworkExtensionsMessages.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.MSBuild/Resources/MSBuildResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/AIExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hans.xlfRegenerated zh-Hans XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pt-BR.xlfRegenerated pt-BR XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pl.xlfRegenerated pl XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ko.xlfRegenerated ko XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ja.xlfRegenerated ja XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.it.xlfRegenerated it XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.de.xlfRegenerated de XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.cs.xlfRegenerated cs XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for JUnitReport resources.
src/Platform/Microsoft.Testing.Extensions.HtmlReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for HtmlReport resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for CTRF resources.
src/Platform/Microsoft.Testing.Extensions.AzureFoundry/Resources/ExtensionResources.resxAdds placeholder documentation in resx comments.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 10

…ed lists
The original cherry-pick onto main triggered git auto-merges in four
extension projects whose resx files had diverged between the audit
branch and main. The merges produced two kinds of corruption:
1. Invalid/duplicate trans-units in xlf files (8 JUnitReport xlf files
had duplicate trans-unit ids; 13 HangDump xlf files were not even
well-formed XML; HtmlReport, JUnitReport, and TrxReport xlf files
had two <target>/<note> pairs in the FileNameOptionDescription
trans-unit, which is invalid XLIFF 1.2).
2. A duplicated <value> line in HangDump's resx that broke XML
well-formedness.
Fix: reset every affected xlf to origin/main, fix the HangDump resx
XML, then run UpdateXlf on the four projects so the xlf files are
regenerated cleanly from the (corrected) resx.
Also addressed the second review comment: the {Locked="{arch}"} token
was missing from the FileNameOptionDescription <comment> in HangDump,
HtmlReport, JUnitReport, and TrxReport resx files even though {arch}
appears in their <value> placeholder list. Added it everywhere for
consistency.
Verified: all 4 affected projects build clean (0 warnings, 0 errors),
all PR xlf files pass well-formedness and trans-unit-uniqueness audits,
all PR resx files are well-formed XML.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous regen left the xlf files semantically out of date with
the resx for three projects (CI's XliffTasks freshness check failed
on cs.xlf for all three). Re-running UpdateXlf now properly:
- Replaces empty <note /> with the actual note text from the resx
<comment> for entries that already had translated targets.
- Re-marks <target state="translated"> as
<target state="needs-review-translation"> since the source's note
changed.
Verified: clean-rebuild (after wiping artifacts/obj) of all four
affected projects passes the XliffTasks freshness check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 09:00

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.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 1

@Evangelink
Amaury Levé (Evangelink) merged commit acb8277 into microsoft:mainJun 11, 2026
20 of 25 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/resx-comments-audit-v2 branch June 11, 2026 09:22
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

Audit .resx files: add placeholder docs and {Locked="…"} markers - #9031

Merged
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2
Jun 11, 2026
Merged

Audit .resx files: add placeholder docs and {Locked="…"} markers#9031
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Audited every .resx file across the repo (21 files, ~1055 entries) and:

  • Added <comment> elements documenting each {N} placeholder (what value it carries, e.g. {0} is the section name. {1} is the path to testconfig.json.).
  • Added {Locked="…"} markers for tokens that must NOT be localized: CLI option names (--report-trx), environment variable names (TF_BUILD), attribute/type names ([TestMethod], ITestApplicationBuilder), literal config values, file extensions, etc.
  • Regenerated the corresponding .xlf files via dotnet msbuild <project> /t:UpdateXlf for all 20 shipping projects. XliffTasks correctly propagated <note> elements and re-marked affected trans-units as needs-review-translation so the loc team can revalidate existing translations against the new Locked context.

Notes

  • Microsoft.Testing.Extensions.AzureFoundry xlf is not regenerated: the project sets <IsShipping>false</IsShipping>, and Arcade's Localization.targets only wires up XliffTasks for IsShippingAssembly == true. The single new resx <comment> there will be picked up the next time UpdateXlf runs on the project.
  • No <value> text mutations across any resx — verified with raw git diff.
  • .\build.cmd passes with 0 warnings / 0 errors (validated on the original branch; this PR is a clean cherry-pick of the same commit onto current main now that Add Microsoft.Testing.Extensions.CtrfReport extension (CTRF reporter) #8903 has merged).

This PR supersedes Evangelink/testfx#2, which was mistakenly targeting a branch in my fork instead of microsoft/testfx:main.

Audited every .resx file across the repo (21 files, ~1055 entries) and:
- Added <comment> elements documenting each {N} placeholder (what value
it carries, e.g. "{0} is the test method name. {1} is the assertion
failure message.").
- Added {Locked="..."} markers for tokens that must NOT be localized:
CLI option names (--report-trx), env var names (TF_BUILD),
attribute/type names ([TestMethod], ITestApplicationBuilder),
literal config values, file extensions, etc.
- Regenerated the corresponding .xlf files via
`dotnet msbuild <project> /t:UpdateXlf` for all 20 shipping
projects. XliffTasks marks affected trans-units as
`needs-review-translation` so the loc team can revalidate
existing translations against the new Locked context.
AzureFoundry's xlf is not regenerated because its project sets
`IsShipping=false` and Arcade only wires up XliffTasks for shipping
projects; the single resx <comment> there will be picked up the next
time the project becomes shipping or someone explicitly runs UpdateXlf
on it. No <value> mutations across any resx.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

This PR updates localization resources across MSTest and Microsoft.Testing.Platform to improve translator context by documenting format placeholders and marking non-localizable tokens (via {Locked="…"}) in .resx comments, then propagating those notes into regenerated .xlf files.

Changes:

  • Added/expanded <comment> metadata for placeholders ({0}, {1}, …) and non-localizable tokens (CLI options, API names, URLs, file extensions) across resource .resx files.
  • Regenerated corresponding .xlf files so translator notes include the new placeholder documentation and {Locked="…"} markers.
  • Updated localized .xlf targets’ state to reflect that translations may need re-validation given the new locking context.
Show a summary per file
FileDescription
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.it.xlfPropagates updated translator notes/lock markers into it resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.es.xlfPropagates updated translator notes/lock markers into es resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.de.xlfPropagates updated translator notes/lock markers into de resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/TestFramework/TestFramework.Extensions/Resources/FrameworkExtensionsMessages.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.MSBuild/Resources/MSBuildResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/AIExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hans.xlfRegenerated zh-Hans XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pt-BR.xlfRegenerated pt-BR XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pl.xlfRegenerated pl XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ko.xlfRegenerated ko XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ja.xlfRegenerated ja XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.it.xlfRegenerated it XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.de.xlfRegenerated de XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.cs.xlfRegenerated cs XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for JUnitReport resources.
src/Platform/Microsoft.Testing.Extensions.HtmlReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for HtmlReport resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for CTRF resources.
src/Platform/Microsoft.Testing.Extensions.AzureFoundry/Resources/ExtensionResources.resxAdds placeholder documentation in resx comments.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 10

…ed lists
The original cherry-pick onto main triggered git auto-merges in four
extension projects whose resx files had diverged between the audit
branch and main. The merges produced two kinds of corruption:
1. Invalid/duplicate trans-units in xlf files (8 JUnitReport xlf files
had duplicate trans-unit ids; 13 HangDump xlf files were not even
well-formed XML; HtmlReport, JUnitReport, and TrxReport xlf files
had two <target>/<note> pairs in the FileNameOptionDescription
trans-unit, which is invalid XLIFF 1.2).
2. A duplicated <value> line in HangDump's resx that broke XML
well-formedness.
Fix: reset every affected xlf to origin/main, fix the HangDump resx
XML, then run UpdateXlf on the four projects so the xlf files are
regenerated cleanly from the (corrected) resx.
Also addressed the second review comment: the {Locked="{arch}"} token
was missing from the FileNameOptionDescription <comment> in HangDump,
HtmlReport, JUnitReport, and TrxReport resx files even though {arch}
appears in their <value> placeholder list. Added it everywhere for
consistency.
Verified: all 4 affected projects build clean (0 warnings, 0 errors),
all PR xlf files pass well-formedness and trans-unit-uniqueness audits,
all PR resx files are well-formed XML.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous regen left the xlf files semantically out of date with
the resx for three projects (CI's XliffTasks freshness check failed
on cs.xlf for all three). Re-running UpdateXlf now properly:
- Replaces empty <note /> with the actual note text from the resx
<comment> for entries that already had translated targets.
- Re-marks <target state="translated"> as
<target state="needs-review-translation"> since the source's note
changed.
Verified: clean-rebuild (after wiping artifacts/obj) of all four
affected projects passes the XliffTasks freshness check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 09:00

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.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 1

@Evangelink
Amaury Levé (Evangelink) merged commit acb8277 into microsoft:mainJun 11, 2026
20 of 25 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/resx-comments-audit-v2 branch June 11, 2026 09:22
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

Audit .resx files: add placeholder docs and {Locked="…"} markers - #9031

Merged
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2
Jun 11, 2026
Merged

Audit .resx files: add placeholder docs and {Locked="…"} markers#9031
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Audited every .resx file across the repo (21 files, ~1055 entries) and:

  • Added <comment> elements documenting each {N} placeholder (what value it carries, e.g. {0} is the section name. {1} is the path to testconfig.json.).
  • Added {Locked="…"} markers for tokens that must NOT be localized: CLI option names (--report-trx), environment variable names (TF_BUILD), attribute/type names ([TestMethod], ITestApplicationBuilder), literal config values, file extensions, etc.
  • Regenerated the corresponding .xlf files via dotnet msbuild <project> /t:UpdateXlf for all 20 shipping projects. XliffTasks correctly propagated <note> elements and re-marked affected trans-units as needs-review-translation so the loc team can revalidate existing translations against the new Locked context.

Notes

  • Microsoft.Testing.Extensions.AzureFoundry xlf is not regenerated: the project sets <IsShipping>false</IsShipping>, and Arcade's Localization.targets only wires up XliffTasks for IsShippingAssembly == true. The single new resx <comment> there will be picked up the next time UpdateXlf runs on the project.
  • No <value> text mutations across any resx — verified with raw git diff.
  • .\build.cmd passes with 0 warnings / 0 errors (validated on the original branch; this PR is a clean cherry-pick of the same commit onto current main now that Add Microsoft.Testing.Extensions.CtrfReport extension (CTRF reporter) #8903 has merged).

This PR supersedes Evangelink/testfx#2, which was mistakenly targeting a branch in my fork instead of microsoft/testfx:main.

Audited every .resx file across the repo (21 files, ~1055 entries) and:
- Added <comment> elements documenting each {N} placeholder (what value
it carries, e.g. "{0} is the test method name. {1} is the assertion
failure message.").
- Added {Locked="..."} markers for tokens that must NOT be localized:
CLI option names (--report-trx), env var names (TF_BUILD),
attribute/type names ([TestMethod], ITestApplicationBuilder),
literal config values, file extensions, etc.
- Regenerated the corresponding .xlf files via
`dotnet msbuild <project> /t:UpdateXlf` for all 20 shipping
projects. XliffTasks marks affected trans-units as
`needs-review-translation` so the loc team can revalidate
existing translations against the new Locked context.
AzureFoundry's xlf is not regenerated because its project sets
`IsShipping=false` and Arcade only wires up XliffTasks for shipping
projects; the single resx <comment> there will be picked up the next
time the project becomes shipping or someone explicitly runs UpdateXlf
on it. No <value> mutations across any resx.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

This PR updates localization resources across MSTest and Microsoft.Testing.Platform to improve translator context by documenting format placeholders and marking non-localizable tokens (via {Locked="…"}) in .resx comments, then propagating those notes into regenerated .xlf files.

Changes:

  • Added/expanded <comment> metadata for placeholders ({0}, {1}, …) and non-localizable tokens (CLI options, API names, URLs, file extensions) across resource .resx files.
  • Regenerated corresponding .xlf files so translator notes include the new placeholder documentation and {Locked="…"} markers.
  • Updated localized .xlf targets’ state to reflect that translations may need re-validation given the new locking context.
Show a summary per file
FileDescription
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.it.xlfPropagates updated translator notes/lock markers into it resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.es.xlfPropagates updated translator notes/lock markers into es resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.de.xlfPropagates updated translator notes/lock markers into de resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/TestFramework/TestFramework.Extensions/Resources/FrameworkExtensionsMessages.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.MSBuild/Resources/MSBuildResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/AIExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hans.xlfRegenerated zh-Hans XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pt-BR.xlfRegenerated pt-BR XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pl.xlfRegenerated pl XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ko.xlfRegenerated ko XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ja.xlfRegenerated ja XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.it.xlfRegenerated it XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.de.xlfRegenerated de XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.cs.xlfRegenerated cs XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for JUnitReport resources.
src/Platform/Microsoft.Testing.Extensions.HtmlReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for HtmlReport resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for CTRF resources.
src/Platform/Microsoft.Testing.Extensions.AzureFoundry/Resources/ExtensionResources.resxAdds placeholder documentation in resx comments.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 10

…ed lists
The original cherry-pick onto main triggered git auto-merges in four
extension projects whose resx files had diverged between the audit
branch and main. The merges produced two kinds of corruption:
1. Invalid/duplicate trans-units in xlf files (8 JUnitReport xlf files
had duplicate trans-unit ids; 13 HangDump xlf files were not even
well-formed XML; HtmlReport, JUnitReport, and TrxReport xlf files
had two <target>/<note> pairs in the FileNameOptionDescription
trans-unit, which is invalid XLIFF 1.2).
2. A duplicated <value> line in HangDump's resx that broke XML
well-formedness.
Fix: reset every affected xlf to origin/main, fix the HangDump resx
XML, then run UpdateXlf on the four projects so the xlf files are
regenerated cleanly from the (corrected) resx.
Also addressed the second review comment: the {Locked="{arch}"} token
was missing from the FileNameOptionDescription <comment> in HangDump,
HtmlReport, JUnitReport, and TrxReport resx files even though {arch}
appears in their <value> placeholder list. Added it everywhere for
consistency.
Verified: all 4 affected projects build clean (0 warnings, 0 errors),
all PR xlf files pass well-formedness and trans-unit-uniqueness audits,
all PR resx files are well-formed XML.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous regen left the xlf files semantically out of date with
the resx for three projects (CI's XliffTasks freshness check failed
on cs.xlf for all three). Re-running UpdateXlf now properly:
- Replaces empty <note /> with the actual note text from the resx
<comment> for entries that already had translated targets.
- Re-marks <target state="translated"> as
<target state="needs-review-translation"> since the source's note
changed.
Verified: clean-rebuild (after wiping artifacts/obj) of all four
affected projects passes the XliffTasks freshness check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 09:00

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.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 1

@Evangelink
Amaury Levé (Evangelink) merged commit acb8277 into microsoft:mainJun 11, 2026
20 of 25 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/resx-comments-audit-v2 branch June 11, 2026 09:22
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

Audit .resx files: add placeholder docs and {Locked="…"} markers - #9031

Merged
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2
Jun 11, 2026
Merged

Audit .resx files: add placeholder docs and {Locked="…"} markers#9031
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Audited every .resx file across the repo (21 files, ~1055 entries) and:

  • Added <comment> elements documenting each {N} placeholder (what value it carries, e.g. {0} is the section name. {1} is the path to testconfig.json.).
  • Added {Locked="…"} markers for tokens that must NOT be localized: CLI option names (--report-trx), environment variable names (TF_BUILD), attribute/type names ([TestMethod], ITestApplicationBuilder), literal config values, file extensions, etc.
  • Regenerated the corresponding .xlf files via dotnet msbuild <project> /t:UpdateXlf for all 20 shipping projects. XliffTasks correctly propagated <note> elements and re-marked affected trans-units as needs-review-translation so the loc team can revalidate existing translations against the new Locked context.

Notes

  • Microsoft.Testing.Extensions.AzureFoundry xlf is not regenerated: the project sets <IsShipping>false</IsShipping>, and Arcade's Localization.targets only wires up XliffTasks for IsShippingAssembly == true. The single new resx <comment> there will be picked up the next time UpdateXlf runs on the project.
  • No <value> text mutations across any resx — verified with raw git diff.
  • .\build.cmd passes with 0 warnings / 0 errors (validated on the original branch; this PR is a clean cherry-pick of the same commit onto current main now that Add Microsoft.Testing.Extensions.CtrfReport extension (CTRF reporter) #8903 has merged).

This PR supersedes Evangelink/testfx#2, which was mistakenly targeting a branch in my fork instead of microsoft/testfx:main.

Audited every .resx file across the repo (21 files, ~1055 entries) and:
- Added <comment> elements documenting each {N} placeholder (what value
it carries, e.g. "{0} is the test method name. {1} is the assertion
failure message.").
- Added {Locked="..."} markers for tokens that must NOT be localized:
CLI option names (--report-trx), env var names (TF_BUILD),
attribute/type names ([TestMethod], ITestApplicationBuilder),
literal config values, file extensions, etc.
- Regenerated the corresponding .xlf files via
`dotnet msbuild <project> /t:UpdateXlf` for all 20 shipping
projects. XliffTasks marks affected trans-units as
`needs-review-translation` so the loc team can revalidate
existing translations against the new Locked context.
AzureFoundry's xlf is not regenerated because its project sets
`IsShipping=false` and Arcade only wires up XliffTasks for shipping
projects; the single resx <comment> there will be picked up the next
time the project becomes shipping or someone explicitly runs UpdateXlf
on it. No <value> mutations across any resx.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

This PR updates localization resources across MSTest and Microsoft.Testing.Platform to improve translator context by documenting format placeholders and marking non-localizable tokens (via {Locked="…"}) in .resx comments, then propagating those notes into regenerated .xlf files.

Changes:

  • Added/expanded <comment> metadata for placeholders ({0}, {1}, …) and non-localizable tokens (CLI options, API names, URLs, file extensions) across resource .resx files.
  • Regenerated corresponding .xlf files so translator notes include the new placeholder documentation and {Locked="…"} markers.
  • Updated localized .xlf targets’ state to reflect that translations may need re-validation given the new locking context.
Show a summary per file
FileDescription
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.it.xlfPropagates updated translator notes/lock markers into it resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.es.xlfPropagates updated translator notes/lock markers into es resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.de.xlfPropagates updated translator notes/lock markers into de resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/TestFramework/TestFramework.Extensions/Resources/FrameworkExtensionsMessages.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.MSBuild/Resources/MSBuildResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/AIExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hans.xlfRegenerated zh-Hans XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pt-BR.xlfRegenerated pt-BR XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pl.xlfRegenerated pl XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ko.xlfRegenerated ko XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ja.xlfRegenerated ja XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.it.xlfRegenerated it XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.de.xlfRegenerated de XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.cs.xlfRegenerated cs XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for JUnitReport resources.
src/Platform/Microsoft.Testing.Extensions.HtmlReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for HtmlReport resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for CTRF resources.
src/Platform/Microsoft.Testing.Extensions.AzureFoundry/Resources/ExtensionResources.resxAdds placeholder documentation in resx comments.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 10

…ed lists
The original cherry-pick onto main triggered git auto-merges in four
extension projects whose resx files had diverged between the audit
branch and main. The merges produced two kinds of corruption:
1. Invalid/duplicate trans-units in xlf files (8 JUnitReport xlf files
had duplicate trans-unit ids; 13 HangDump xlf files were not even
well-formed XML; HtmlReport, JUnitReport, and TrxReport xlf files
had two <target>/<note> pairs in the FileNameOptionDescription
trans-unit, which is invalid XLIFF 1.2).
2. A duplicated <value> line in HangDump's resx that broke XML
well-formedness.
Fix: reset every affected xlf to origin/main, fix the HangDump resx
XML, then run UpdateXlf on the four projects so the xlf files are
regenerated cleanly from the (corrected) resx.
Also addressed the second review comment: the {Locked="{arch}"} token
was missing from the FileNameOptionDescription <comment> in HangDump,
HtmlReport, JUnitReport, and TrxReport resx files even though {arch}
appears in their <value> placeholder list. Added it everywhere for
consistency.
Verified: all 4 affected projects build clean (0 warnings, 0 errors),
all PR xlf files pass well-formedness and trans-unit-uniqueness audits,
all PR resx files are well-formed XML.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous regen left the xlf files semantically out of date with
the resx for three projects (CI's XliffTasks freshness check failed
on cs.xlf for all three). Re-running UpdateXlf now properly:
- Replaces empty <note /> with the actual note text from the resx
<comment> for entries that already had translated targets.
- Re-marks <target state="translated"> as
<target state="needs-review-translation"> since the source's note
changed.
Verified: clean-rebuild (after wiping artifacts/obj) of all four
affected projects passes the XliffTasks freshness check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 09:00

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.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 1

@Evangelink
Amaury Levé (Evangelink) merged commit acb8277 into microsoft:mainJun 11, 2026
20 of 25 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/resx-comments-audit-v2 branch June 11, 2026 09:22
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

Audit .resx files: add placeholder docs and {Locked="…"} markers - #9031

Merged
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2
Jun 11, 2026
Merged

Audit .resx files: add placeholder docs and {Locked="…"} markers#9031
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Audited every .resx file across the repo (21 files, ~1055 entries) and:

  • Added <comment> elements documenting each {N} placeholder (what value it carries, e.g. {0} is the section name. {1} is the path to testconfig.json.).
  • Added {Locked="…"} markers for tokens that must NOT be localized: CLI option names (--report-trx), environment variable names (TF_BUILD), attribute/type names ([TestMethod], ITestApplicationBuilder), literal config values, file extensions, etc.
  • Regenerated the corresponding .xlf files via dotnet msbuild <project> /t:UpdateXlf for all 20 shipping projects. XliffTasks correctly propagated <note> elements and re-marked affected trans-units as needs-review-translation so the loc team can revalidate existing translations against the new Locked context.

Notes

  • Microsoft.Testing.Extensions.AzureFoundry xlf is not regenerated: the project sets <IsShipping>false</IsShipping>, and Arcade's Localization.targets only wires up XliffTasks for IsShippingAssembly == true. The single new resx <comment> there will be picked up the next time UpdateXlf runs on the project.
  • No <value> text mutations across any resx — verified with raw git diff.
  • .\build.cmd passes with 0 warnings / 0 errors (validated on the original branch; this PR is a clean cherry-pick of the same commit onto current main now that Add Microsoft.Testing.Extensions.CtrfReport extension (CTRF reporter) #8903 has merged).

This PR supersedes Evangelink/testfx#2, which was mistakenly targeting a branch in my fork instead of microsoft/testfx:main.

Audited every .resx file across the repo (21 files, ~1055 entries) and:
- Added <comment> elements documenting each {N} placeholder (what value
it carries, e.g. "{0} is the test method name. {1} is the assertion
failure message.").
- Added {Locked="..."} markers for tokens that must NOT be localized:
CLI option names (--report-trx), env var names (TF_BUILD),
attribute/type names ([TestMethod], ITestApplicationBuilder),
literal config values, file extensions, etc.
- Regenerated the corresponding .xlf files via
`dotnet msbuild <project> /t:UpdateXlf` for all 20 shipping
projects. XliffTasks marks affected trans-units as
`needs-review-translation` so the loc team can revalidate
existing translations against the new Locked context.
AzureFoundry's xlf is not regenerated because its project sets
`IsShipping=false` and Arcade only wires up XliffTasks for shipping
projects; the single resx <comment> there will be picked up the next
time the project becomes shipping or someone explicitly runs UpdateXlf
on it. No <value> mutations across any resx.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

This PR updates localization resources across MSTest and Microsoft.Testing.Platform to improve translator context by documenting format placeholders and marking non-localizable tokens (via {Locked="…"}) in .resx comments, then propagating those notes into regenerated .xlf files.

Changes:

  • Added/expanded <comment> metadata for placeholders ({0}, {1}, …) and non-localizable tokens (CLI options, API names, URLs, file extensions) across resource .resx files.
  • Regenerated corresponding .xlf files so translator notes include the new placeholder documentation and {Locked="…"} markers.
  • Updated localized .xlf targets’ state to reflect that translations may need re-validation given the new locking context.
Show a summary per file
FileDescription
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.it.xlfPropagates updated translator notes/lock markers into it resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.es.xlfPropagates updated translator notes/lock markers into es resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.de.xlfPropagates updated translator notes/lock markers into de resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/TestFramework/TestFramework.Extensions/Resources/FrameworkExtensionsMessages.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.MSBuild/Resources/MSBuildResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/AIExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hans.xlfRegenerated zh-Hans XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pt-BR.xlfRegenerated pt-BR XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pl.xlfRegenerated pl XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ko.xlfRegenerated ko XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ja.xlfRegenerated ja XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.it.xlfRegenerated it XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.de.xlfRegenerated de XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.cs.xlfRegenerated cs XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for JUnitReport resources.
src/Platform/Microsoft.Testing.Extensions.HtmlReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for HtmlReport resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for CTRF resources.
src/Platform/Microsoft.Testing.Extensions.AzureFoundry/Resources/ExtensionResources.resxAdds placeholder documentation in resx comments.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 10

…ed lists
The original cherry-pick onto main triggered git auto-merges in four
extension projects whose resx files had diverged between the audit
branch and main. The merges produced two kinds of corruption:
1. Invalid/duplicate trans-units in xlf files (8 JUnitReport xlf files
had duplicate trans-unit ids; 13 HangDump xlf files were not even
well-formed XML; HtmlReport, JUnitReport, and TrxReport xlf files
had two <target>/<note> pairs in the FileNameOptionDescription
trans-unit, which is invalid XLIFF 1.2).
2. A duplicated <value> line in HangDump's resx that broke XML
well-formedness.
Fix: reset every affected xlf to origin/main, fix the HangDump resx
XML, then run UpdateXlf on the four projects so the xlf files are
regenerated cleanly from the (corrected) resx.
Also addressed the second review comment: the {Locked="{arch}"} token
was missing from the FileNameOptionDescription <comment> in HangDump,
HtmlReport, JUnitReport, and TrxReport resx files even though {arch}
appears in their <value> placeholder list. Added it everywhere for
consistency.
Verified: all 4 affected projects build clean (0 warnings, 0 errors),
all PR xlf files pass well-formedness and trans-unit-uniqueness audits,
all PR resx files are well-formed XML.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous regen left the xlf files semantically out of date with
the resx for three projects (CI's XliffTasks freshness check failed
on cs.xlf for all three). Re-running UpdateXlf now properly:
- Replaces empty <note /> with the actual note text from the resx
<comment> for entries that already had translated targets.
- Re-marks <target state="translated"> as
<target state="needs-review-translation"> since the source's note
changed.
Verified: clean-rebuild (after wiping artifacts/obj) of all four
affected projects passes the XliffTasks freshness check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 09:00

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.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 1

@Evangelink
Amaury Levé (Evangelink) merged commit acb8277 into microsoft:mainJun 11, 2026
20 of 25 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/resx-comments-audit-v2 branch June 11, 2026 09:22
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

Audit .resx files: add placeholder docs and {Locked="…"} markers - #9031

Merged
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2
Jun 11, 2026
Merged

Audit .resx files: add placeholder docs and {Locked="…"} markers#9031
Amaury Levé (Evangelink) merged 3 commits into
microsoft:mainfrom
Evangelink:dev/amauryleve/resx-comments-audit-v2

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Audited every .resx file across the repo (21 files, ~1055 entries) and:

  • Added <comment> elements documenting each {N} placeholder (what value it carries, e.g. {0} is the section name. {1} is the path to testconfig.json.).
  • Added {Locked="…"} markers for tokens that must NOT be localized: CLI option names (--report-trx), environment variable names (TF_BUILD), attribute/type names ([TestMethod], ITestApplicationBuilder), literal config values, file extensions, etc.
  • Regenerated the corresponding .xlf files via dotnet msbuild <project> /t:UpdateXlf for all 20 shipping projects. XliffTasks correctly propagated <note> elements and re-marked affected trans-units as needs-review-translation so the loc team can revalidate existing translations against the new Locked context.

Notes

  • Microsoft.Testing.Extensions.AzureFoundry xlf is not regenerated: the project sets <IsShipping>false</IsShipping>, and Arcade's Localization.targets only wires up XliffTasks for IsShippingAssembly == true. The single new resx <comment> there will be picked up the next time UpdateXlf runs on the project.
  • No <value> text mutations across any resx — verified with raw git diff.
  • .\build.cmd passes with 0 warnings / 0 errors (validated on the original branch; this PR is a clean cherry-pick of the same commit onto current main now that Add Microsoft.Testing.Extensions.CtrfReport extension (CTRF reporter) #8903 has merged).

This PR supersedes Evangelink/testfx#2, which was mistakenly targeting a branch in my fork instead of microsoft/testfx:main.

Audited every .resx file across the repo (21 files, ~1055 entries) and:
- Added <comment> elements documenting each {N} placeholder (what value
it carries, e.g. "{0} is the test method name. {1} is the assertion
failure message.").
- Added {Locked="..."} markers for tokens that must NOT be localized:
CLI option names (--report-trx), env var names (TF_BUILD),
attribute/type names ([TestMethod], ITestApplicationBuilder),
literal config values, file extensions, etc.
- Regenerated the corresponding .xlf files via
`dotnet msbuild <project> /t:UpdateXlf` for all 20 shipping
projects. XliffTasks marks affected trans-units as
`needs-review-translation` so the loc team can revalidate
existing translations against the new Locked context.
AzureFoundry's xlf is not regenerated because its project sets
`IsShipping=false` and Arcade only wires up XliffTasks for shipping
projects; the single resx <comment> there will be picked up the next
time the project becomes shipping or someone explicitly runs UpdateXlf
on it. No <value> mutations across any resx.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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

This PR updates localization resources across MSTest and Microsoft.Testing.Platform to improve translator context by documenting format placeholders and marking non-localizable tokens (via {Locked="…"}) in .resx comments, then propagating those notes into regenerated .xlf files.

Changes:

  • Added/expanded <comment> metadata for placeholders ({0}, {1}, …) and non-localizable tokens (CLI options, API names, URLs, file extensions) across resource .resx files.
  • Regenerated corresponding .xlf files so translator notes include the new placeholder documentation and {Locked="…"} markers.
  • Updated localized .xlf targets’ state to reflect that translations may need re-validation given the new locking context.
Show a summary per file
FileDescription
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.it.xlfPropagates updated translator notes/lock markers into it resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.es.xlfPropagates updated translator notes/lock markers into es resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.de.xlfPropagates updated translator notes/lock markers into de resources.
src/TestFramework/TestFramework.Extensions/Resources/xlf/FrameworkExtensionsMessages.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/TestFramework/TestFramework.Extensions/Resources/FrameworkExtensionsMessages.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.MSBuild/Resources/MSBuildResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/xlf/AIExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Platform.AI/Resources/AIExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.VSTestBridge/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.Telemetry/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resxAdds placeholder documentation and {Locked="…"} guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.MSBuild/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.zh-Hans.xlfRegenerated zh-Hans XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pt-BR.xlfRegenerated pt-BR XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.pl.xlfRegenerated pl XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ko.xlfRegenerated ko XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.ja.xlfRegenerated ja XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.it.xlfRegenerated it XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.de.xlfRegenerated de XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/xlf/ExtensionResources.cs.xlfRegenerated cs XLIFF for JUnitReport.
src/Platform/Microsoft.Testing.Extensions.JUnitReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for JUnitReport resources.
src/Platform/Microsoft.Testing.Extensions.HtmlReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for HtmlReport resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.HotReload/Resources/ExtensionResources.resxAdds non-localizable token guidance in resx comments.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hant.xlfPropagates updated translator notes/lock markers into zh-Hant resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.zh-Hans.xlfPropagates updated translator notes/lock markers into zh-Hans resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.tr.xlfPropagates updated translator notes/lock markers into tr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ru.xlfPropagates updated translator notes/lock markers into ru resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pt-BR.xlfPropagates updated translator notes/lock markers into pt-BR resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.pl.xlfPropagates updated translator notes/lock markers into pl resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ko.xlfPropagates updated translator notes/lock markers into ko resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.ja.xlfPropagates updated translator notes/lock markers into ja resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.it.xlfPropagates updated translator notes/lock markers into it resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.fr.xlfPropagates updated translator notes/lock markers into fr resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.es.xlfPropagates updated translator notes/lock markers into es resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.de.xlfPropagates updated translator notes/lock markers into de resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/xlf/ExtensionResources.cs.xlfPropagates updated translator notes/lock markers into cs resources.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/Resources/ExtensionResources.resxAdds placeholder docs and {Locked="…"} markers for CTRF resources.
src/Platform/Microsoft.Testing.Extensions.AzureFoundry/Resources/ExtensionResources.resxAdds placeholder documentation in resx comments.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 10

…ed lists
The original cherry-pick onto main triggered git auto-merges in four
extension projects whose resx files had diverged between the audit
branch and main. The merges produced two kinds of corruption:
1. Invalid/duplicate trans-units in xlf files (8 JUnitReport xlf files
had duplicate trans-unit ids; 13 HangDump xlf files were not even
well-formed XML; HtmlReport, JUnitReport, and TrxReport xlf files
had two <target>/<note> pairs in the FileNameOptionDescription
trans-unit, which is invalid XLIFF 1.2).
2. A duplicated <value> line in HangDump's resx that broke XML
well-formedness.
Fix: reset every affected xlf to origin/main, fix the HangDump resx
XML, then run UpdateXlf on the four projects so the xlf files are
regenerated cleanly from the (corrected) resx.
Also addressed the second review comment: the {Locked="{arch}"} token
was missing from the FileNameOptionDescription <comment> in HangDump,
HtmlReport, JUnitReport, and TrxReport resx files even though {arch}
appears in their <value> placeholder list. Added it everywhere for
consistency.
Verified: all 4 affected projects build clean (0 warnings, 0 errors),
all PR xlf files pass well-formedness and trans-unit-uniqueness audits,
all PR resx files are well-formed XML.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous regen left the xlf files semantically out of date with
the resx for three projects (CI's XliffTasks freshness check failed
on cs.xlf for all three). Re-running UpdateXlf now properly:
- Replaces empty <note /> with the actual note text from the resx
<comment> for entries that already had translated targets.
- Re-marks <target state="translated"> as
<target state="needs-review-translation"> since the source's note
changed.
Verified: clean-rebuild (after wiping artifacts/obj) of all four
affected projects passes the XliffTasks freshness check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings June 11, 2026 09:00

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.

Copilot's findings

  • Files reviewed: 21/281 changed files
  • Comments generated: 1

@Evangelink
Amaury Levé (Evangelink) merged commit acb8277 into microsoft:mainJun 11, 2026
20 of 25 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/resx-comments-audit-v2 branch June 11, 2026 09:22
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