Localize native MTP adapter runsettings resources - #9897

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet
Jul 13, 2026
Merged

Localize native MTP adapter runsettings resources#9897
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

UnsupportedRunSettingsEntriesAreFlagged_Localization is broken on main.

PR #9748 (native MTP integration for MSTest) added a new copy of the runsettings warning strings to MSTest.TestAdapter's PlatformAdapterResources. Since the test asset uses EnableMSTestRunner=true, it now hits the native path (MSTestRunSettings.csPlatformAdapterResources) instead of the old VSTestBridge path.

However, every PlatformAdapterResources.*.xlf target was still state="new" with the English text, so no French/Italian output was ever produced and the test's localized assertions failed.

Fix

Ported the already-shipping, verbatim-identical translations from Microsoft.Testing.Extensions.VSTestBridge's ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf, matching by exact <source> text. This fills 11 trans-units × 13 languages (143 targets), flipping each target from state="new" to state="translated".

Notes:

  • Only <target> lines changed (clean 143/143 diff); CRLF + UTF-8 BOM preserved.
  • Running dotnet msbuild /t:UpdateXlf will not undo this — it never overwrites existing translated targets, it only syncs sources.
  • This also correctly localizes the other new native-adapter strings (runsettings file errors, option descriptions) that were untranslated for the same reason.

Verification

.\build.cmd -pack -c Release, then ran the acceptance test:

total: 6 failed: 0 succeeded: 6 skipped: 0

PR #9748 added a native MTP copy of the runsettings warning strings to PlatformAdapterResources, but the *.xlf targets were left untranslated (state=new with English text). This broke UnsupportedRunSettingsEntriesAreFlagged_Localization, which asserts French/Italian output.
Port the verbatim-identical translations that already ship in the VSTestBridge ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf (11 trans-units x 13 languages), flipping each target from state=new to state=translated.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e14a793a-02df-4926-bbea-7fb59e22ff59
CopilotAI review requested due to automatic review settings July 13, 2026 10:58
@EvangelinkAmaury Levé (Evangelink) added the state/needs-review Awaiting review from the team. label Jul 13, 2026
@Evangelink
Amaury Levé (Evangelink) merged commit 8503466 into mainJul 13, 2026
9 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/cuddly-parakeet branch July 13, 2026 11:01

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

Localizes native MTP adapter runsettings messages using existing VSTestBridge translations.

Changes:

  • Marks 143 resource targets as translated across 13 locales.
  • Restores localized runsettings warnings and option descriptions.
Show a summary per file
FileDescription
PlatformAdapterResources.cs.xlfAdds Czech translations.
PlatformAdapterResources.de.xlfAdds German translations.
PlatformAdapterResources.es.xlfAdds Spanish translations.
PlatformAdapterResources.fr.xlfAdds French translations.
PlatformAdapterResources.it.xlfAdds Italian translations.
PlatformAdapterResources.ja.xlfAdds Japanese translations.
PlatformAdapterResources.ko.xlfAdds Korean translations.
PlatformAdapterResources.pl.xlfAdds Polish translations.
PlatformAdapterResources.pt-BR.xlfAdds Brazilian Portuguese translations.
PlatformAdapterResources.ru.xlfAdds Russian translations.
PlatformAdapterResources.tr.xlfAdds Turkish translations.
PlatformAdapterResources.zh-Hans.xlfAdds Simplified Chinese translations.
PlatformAdapterResources.zh-Hant.xlfAdds Traditional Chinese translations.

Review details

  • Files reviewed: 13/13 changed files
  • Comments generated: 13
  • Review effort level: Medium

<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 檔案無效,遺漏 '&lt;RunSettings&gt;' 屬性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 文件无效,缺少 '&lt;RunSettings&gt;' 属性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Geçersiz .runsettings dosyası, '&lt;RunSettings&gt;' özniteliği eksik</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Недопустимый файл .runsettings, отсутствует атрибут "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Arquivo .runsettings inválido, o atributo "&lt;RunSettings&gt;" está ausente</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">File .runsettings non valido. Attributo '&lt;RunSettings&gt;' mancante</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Fichier .runsettings non valide, « &lt;RunSettings&gt; » attribut est manquant</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Archivo .runsettings no válido, falta el atributo "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Ungültige .runsettings-Datei, "&lt;RunSettings&gt;"-Attribut fehlt.</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Neplatný soubor .runsettings. Chybí atribut &lt;RunSettings&gt;.</target>

@github-actionsgithub-actionsBot 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.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Policy Violation: Manual XLF Edits

The repository localization guidelines state:

NEVER manually modify *.xlf files. Instead, regenerate them by running dotnet msbuild <project>.csproj /t:UpdateXlf.

This PR manually edits all 13 .xlf files. The correct workflow is:

  1. Add/update the translated strings in the .resx file (or the localization system that feeds translations).
  2. Run dotnet msbuild src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj /t:UpdateXlf to regenerate the .xlf files.

Please regenerate via UpdateXlf to ensure the files stay consistent with the tooling expected format and avoid drift.


Other observations (no blocking issues beyond the policy violation):

  • The 11 string IDs are updated consistently across all 13 locales ✓
  • state=newstate=translated is the correct transition ✓
  • Locked terms (.runsettings, <RunSettings>, {0} placeholders) appear preserved in the translations ✓
  • No functional code changes — risk is low ✓

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

Labels

needs/author-feedbackWaiting on the original author.state/needs-reviewAwaiting review from the team.

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

Localize native MTP adapter runsettings resources - #9897

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet
Jul 13, 2026
Merged

Localize native MTP adapter runsettings resources#9897
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

UnsupportedRunSettingsEntriesAreFlagged_Localization is broken on main.

PR #9748 (native MTP integration for MSTest) added a new copy of the runsettings warning strings to MSTest.TestAdapter's PlatformAdapterResources. Since the test asset uses EnableMSTestRunner=true, it now hits the native path (MSTestRunSettings.csPlatformAdapterResources) instead of the old VSTestBridge path.

However, every PlatformAdapterResources.*.xlf target was still state="new" with the English text, so no French/Italian output was ever produced and the test's localized assertions failed.

Fix

Ported the already-shipping, verbatim-identical translations from Microsoft.Testing.Extensions.VSTestBridge's ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf, matching by exact <source> text. This fills 11 trans-units × 13 languages (143 targets), flipping each target from state="new" to state="translated".

Notes:

  • Only <target> lines changed (clean 143/143 diff); CRLF + UTF-8 BOM preserved.
  • Running dotnet msbuild /t:UpdateXlf will not undo this — it never overwrites existing translated targets, it only syncs sources.
  • This also correctly localizes the other new native-adapter strings (runsettings file errors, option descriptions) that were untranslated for the same reason.

Verification

.\build.cmd -pack -c Release, then ran the acceptance test:

total: 6 failed: 0 succeeded: 6 skipped: 0

PR #9748 added a native MTP copy of the runsettings warning strings to PlatformAdapterResources, but the *.xlf targets were left untranslated (state=new with English text). This broke UnsupportedRunSettingsEntriesAreFlagged_Localization, which asserts French/Italian output.
Port the verbatim-identical translations that already ship in the VSTestBridge ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf (11 trans-units x 13 languages), flipping each target from state=new to state=translated.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e14a793a-02df-4926-bbea-7fb59e22ff59
CopilotAI review requested due to automatic review settings July 13, 2026 10:58
@EvangelinkAmaury Levé (Evangelink) added the state/needs-review Awaiting review from the team. label Jul 13, 2026
@Evangelink
Amaury Levé (Evangelink) merged commit 8503466 into mainJul 13, 2026
9 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/cuddly-parakeet branch July 13, 2026 11:01

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

Localizes native MTP adapter runsettings messages using existing VSTestBridge translations.

Changes:

  • Marks 143 resource targets as translated across 13 locales.
  • Restores localized runsettings warnings and option descriptions.
Show a summary per file
FileDescription
PlatformAdapterResources.cs.xlfAdds Czech translations.
PlatformAdapterResources.de.xlfAdds German translations.
PlatformAdapterResources.es.xlfAdds Spanish translations.
PlatformAdapterResources.fr.xlfAdds French translations.
PlatformAdapterResources.it.xlfAdds Italian translations.
PlatformAdapterResources.ja.xlfAdds Japanese translations.
PlatformAdapterResources.ko.xlfAdds Korean translations.
PlatformAdapterResources.pl.xlfAdds Polish translations.
PlatformAdapterResources.pt-BR.xlfAdds Brazilian Portuguese translations.
PlatformAdapterResources.ru.xlfAdds Russian translations.
PlatformAdapterResources.tr.xlfAdds Turkish translations.
PlatformAdapterResources.zh-Hans.xlfAdds Simplified Chinese translations.
PlatformAdapterResources.zh-Hant.xlfAdds Traditional Chinese translations.

Review details

  • Files reviewed: 13/13 changed files
  • Comments generated: 13
  • Review effort level: Medium

<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 檔案無效,遺漏 '&lt;RunSettings&gt;' 屬性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 文件无效,缺少 '&lt;RunSettings&gt;' 属性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Geçersiz .runsettings dosyası, '&lt;RunSettings&gt;' özniteliği eksik</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Недопустимый файл .runsettings, отсутствует атрибут "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Arquivo .runsettings inválido, o atributo "&lt;RunSettings&gt;" está ausente</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">File .runsettings non valido. Attributo '&lt;RunSettings&gt;' mancante</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Fichier .runsettings non valide, « &lt;RunSettings&gt; » attribut est manquant</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Archivo .runsettings no válido, falta el atributo "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Ungültige .runsettings-Datei, "&lt;RunSettings&gt;"-Attribut fehlt.</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Neplatný soubor .runsettings. Chybí atribut &lt;RunSettings&gt;.</target>

@github-actionsgithub-actionsBot 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.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Policy Violation: Manual XLF Edits

The repository localization guidelines state:

NEVER manually modify *.xlf files. Instead, regenerate them by running dotnet msbuild <project>.csproj /t:UpdateXlf.

This PR manually edits all 13 .xlf files. The correct workflow is:

  1. Add/update the translated strings in the .resx file (or the localization system that feeds translations).
  2. Run dotnet msbuild src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj /t:UpdateXlf to regenerate the .xlf files.

Please regenerate via UpdateXlf to ensure the files stay consistent with the tooling expected format and avoid drift.


Other observations (no blocking issues beyond the policy violation):

  • The 11 string IDs are updated consistently across all 13 locales ✓
  • state=newstate=translated is the correct transition ✓
  • Locked terms (.runsettings, <RunSettings>, {0} placeholders) appear preserved in the translations ✓
  • No functional code changes — risk is low ✓

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

Labels

needs/author-feedbackWaiting on the original author.state/needs-reviewAwaiting review from the team.

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

Localize native MTP adapter runsettings resources - #9897

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet
Jul 13, 2026
Merged

Localize native MTP adapter runsettings resources#9897
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

UnsupportedRunSettingsEntriesAreFlagged_Localization is broken on main.

PR #9748 (native MTP integration for MSTest) added a new copy of the runsettings warning strings to MSTest.TestAdapter's PlatformAdapterResources. Since the test asset uses EnableMSTestRunner=true, it now hits the native path (MSTestRunSettings.csPlatformAdapterResources) instead of the old VSTestBridge path.

However, every PlatformAdapterResources.*.xlf target was still state="new" with the English text, so no French/Italian output was ever produced and the test's localized assertions failed.

Fix

Ported the already-shipping, verbatim-identical translations from Microsoft.Testing.Extensions.VSTestBridge's ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf, matching by exact <source> text. This fills 11 trans-units × 13 languages (143 targets), flipping each target from state="new" to state="translated".

Notes:

  • Only <target> lines changed (clean 143/143 diff); CRLF + UTF-8 BOM preserved.
  • Running dotnet msbuild /t:UpdateXlf will not undo this — it never overwrites existing translated targets, it only syncs sources.
  • This also correctly localizes the other new native-adapter strings (runsettings file errors, option descriptions) that were untranslated for the same reason.

Verification

.\build.cmd -pack -c Release, then ran the acceptance test:

total: 6 failed: 0 succeeded: 6 skipped: 0

PR #9748 added a native MTP copy of the runsettings warning strings to PlatformAdapterResources, but the *.xlf targets were left untranslated (state=new with English text). This broke UnsupportedRunSettingsEntriesAreFlagged_Localization, which asserts French/Italian output.
Port the verbatim-identical translations that already ship in the VSTestBridge ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf (11 trans-units x 13 languages), flipping each target from state=new to state=translated.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e14a793a-02df-4926-bbea-7fb59e22ff59
CopilotAI review requested due to automatic review settings July 13, 2026 10:58
@EvangelinkAmaury Levé (Evangelink) added the state/needs-review Awaiting review from the team. label Jul 13, 2026
@Evangelink
Amaury Levé (Evangelink) merged commit 8503466 into mainJul 13, 2026
9 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/cuddly-parakeet branch July 13, 2026 11:01

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

Localizes native MTP adapter runsettings messages using existing VSTestBridge translations.

Changes:

  • Marks 143 resource targets as translated across 13 locales.
  • Restores localized runsettings warnings and option descriptions.
Show a summary per file
FileDescription
PlatformAdapterResources.cs.xlfAdds Czech translations.
PlatformAdapterResources.de.xlfAdds German translations.
PlatformAdapterResources.es.xlfAdds Spanish translations.
PlatformAdapterResources.fr.xlfAdds French translations.
PlatformAdapterResources.it.xlfAdds Italian translations.
PlatformAdapterResources.ja.xlfAdds Japanese translations.
PlatformAdapterResources.ko.xlfAdds Korean translations.
PlatformAdapterResources.pl.xlfAdds Polish translations.
PlatformAdapterResources.pt-BR.xlfAdds Brazilian Portuguese translations.
PlatformAdapterResources.ru.xlfAdds Russian translations.
PlatformAdapterResources.tr.xlfAdds Turkish translations.
PlatformAdapterResources.zh-Hans.xlfAdds Simplified Chinese translations.
PlatformAdapterResources.zh-Hant.xlfAdds Traditional Chinese translations.

Review details

  • Files reviewed: 13/13 changed files
  • Comments generated: 13
  • Review effort level: Medium

<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 檔案無效,遺漏 '&lt;RunSettings&gt;' 屬性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 文件无效,缺少 '&lt;RunSettings&gt;' 属性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Geçersiz .runsettings dosyası, '&lt;RunSettings&gt;' özniteliği eksik</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Недопустимый файл .runsettings, отсутствует атрибут "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Arquivo .runsettings inválido, o atributo "&lt;RunSettings&gt;" está ausente</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">File .runsettings non valido. Attributo '&lt;RunSettings&gt;' mancante</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Fichier .runsettings non valide, « &lt;RunSettings&gt; » attribut est manquant</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Archivo .runsettings no válido, falta el atributo "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Ungültige .runsettings-Datei, "&lt;RunSettings&gt;"-Attribut fehlt.</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Neplatný soubor .runsettings. Chybí atribut &lt;RunSettings&gt;.</target>

@github-actionsgithub-actionsBot 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.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Policy Violation: Manual XLF Edits

The repository localization guidelines state:

NEVER manually modify *.xlf files. Instead, regenerate them by running dotnet msbuild <project>.csproj /t:UpdateXlf.

This PR manually edits all 13 .xlf files. The correct workflow is:

  1. Add/update the translated strings in the .resx file (or the localization system that feeds translations).
  2. Run dotnet msbuild src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj /t:UpdateXlf to regenerate the .xlf files.

Please regenerate via UpdateXlf to ensure the files stay consistent with the tooling expected format and avoid drift.


Other observations (no blocking issues beyond the policy violation):

  • The 11 string IDs are updated consistently across all 13 locales ✓
  • state=newstate=translated is the correct transition ✓
  • Locked terms (.runsettings, <RunSettings>, {0} placeholders) appear preserved in the translations ✓
  • No functional code changes — risk is low ✓

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

Labels

needs/author-feedbackWaiting on the original author.state/needs-reviewAwaiting review from the team.

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

Localize native MTP adapter runsettings resources - #9897

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet
Jul 13, 2026
Merged

Localize native MTP adapter runsettings resources#9897
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

UnsupportedRunSettingsEntriesAreFlagged_Localization is broken on main.

PR #9748 (native MTP integration for MSTest) added a new copy of the runsettings warning strings to MSTest.TestAdapter's PlatformAdapterResources. Since the test asset uses EnableMSTestRunner=true, it now hits the native path (MSTestRunSettings.csPlatformAdapterResources) instead of the old VSTestBridge path.

However, every PlatformAdapterResources.*.xlf target was still state="new" with the English text, so no French/Italian output was ever produced and the test's localized assertions failed.

Fix

Ported the already-shipping, verbatim-identical translations from Microsoft.Testing.Extensions.VSTestBridge's ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf, matching by exact <source> text. This fills 11 trans-units × 13 languages (143 targets), flipping each target from state="new" to state="translated".

Notes:

  • Only <target> lines changed (clean 143/143 diff); CRLF + UTF-8 BOM preserved.
  • Running dotnet msbuild /t:UpdateXlf will not undo this — it never overwrites existing translated targets, it only syncs sources.
  • This also correctly localizes the other new native-adapter strings (runsettings file errors, option descriptions) that were untranslated for the same reason.

Verification

.\build.cmd -pack -c Release, then ran the acceptance test:

total: 6 failed: 0 succeeded: 6 skipped: 0

PR #9748 added a native MTP copy of the runsettings warning strings to PlatformAdapterResources, but the *.xlf targets were left untranslated (state=new with English text). This broke UnsupportedRunSettingsEntriesAreFlagged_Localization, which asserts French/Italian output.
Port the verbatim-identical translations that already ship in the VSTestBridge ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf (11 trans-units x 13 languages), flipping each target from state=new to state=translated.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e14a793a-02df-4926-bbea-7fb59e22ff59
CopilotAI review requested due to automatic review settings July 13, 2026 10:58
@EvangelinkAmaury Levé (Evangelink) added the state/needs-review Awaiting review from the team. label Jul 13, 2026
@Evangelink
Amaury Levé (Evangelink) merged commit 8503466 into mainJul 13, 2026
9 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/cuddly-parakeet branch July 13, 2026 11:01

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

Localizes native MTP adapter runsettings messages using existing VSTestBridge translations.

Changes:

  • Marks 143 resource targets as translated across 13 locales.
  • Restores localized runsettings warnings and option descriptions.
Show a summary per file
FileDescription
PlatformAdapterResources.cs.xlfAdds Czech translations.
PlatformAdapterResources.de.xlfAdds German translations.
PlatformAdapterResources.es.xlfAdds Spanish translations.
PlatformAdapterResources.fr.xlfAdds French translations.
PlatformAdapterResources.it.xlfAdds Italian translations.
PlatformAdapterResources.ja.xlfAdds Japanese translations.
PlatformAdapterResources.ko.xlfAdds Korean translations.
PlatformAdapterResources.pl.xlfAdds Polish translations.
PlatformAdapterResources.pt-BR.xlfAdds Brazilian Portuguese translations.
PlatformAdapterResources.ru.xlfAdds Russian translations.
PlatformAdapterResources.tr.xlfAdds Turkish translations.
PlatformAdapterResources.zh-Hans.xlfAdds Simplified Chinese translations.
PlatformAdapterResources.zh-Hant.xlfAdds Traditional Chinese translations.

Review details

  • Files reviewed: 13/13 changed files
  • Comments generated: 13
  • Review effort level: Medium

<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 檔案無效,遺漏 '&lt;RunSettings&gt;' 屬性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 文件无效,缺少 '&lt;RunSettings&gt;' 属性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Geçersiz .runsettings dosyası, '&lt;RunSettings&gt;' özniteliği eksik</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Недопустимый файл .runsettings, отсутствует атрибут "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Arquivo .runsettings inválido, o atributo "&lt;RunSettings&gt;" está ausente</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">File .runsettings non valido. Attributo '&lt;RunSettings&gt;' mancante</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Fichier .runsettings non valide, « &lt;RunSettings&gt; » attribut est manquant</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Archivo .runsettings no válido, falta el atributo "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Ungültige .runsettings-Datei, "&lt;RunSettings&gt;"-Attribut fehlt.</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Neplatný soubor .runsettings. Chybí atribut &lt;RunSettings&gt;.</target>

@github-actionsgithub-actionsBot 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.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Policy Violation: Manual XLF Edits

The repository localization guidelines state:

NEVER manually modify *.xlf files. Instead, regenerate them by running dotnet msbuild <project>.csproj /t:UpdateXlf.

This PR manually edits all 13 .xlf files. The correct workflow is:

  1. Add/update the translated strings in the .resx file (or the localization system that feeds translations).
  2. Run dotnet msbuild src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj /t:UpdateXlf to regenerate the .xlf files.

Please regenerate via UpdateXlf to ensure the files stay consistent with the tooling expected format and avoid drift.


Other observations (no blocking issues beyond the policy violation):

  • The 11 string IDs are updated consistently across all 13 locales ✓
  • state=newstate=translated is the correct transition ✓
  • Locked terms (.runsettings, <RunSettings>, {0} placeholders) appear preserved in the translations ✓
  • No functional code changes — risk is low ✓

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

Labels

needs/author-feedbackWaiting on the original author.state/needs-reviewAwaiting review from the team.

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

Localize native MTP adapter runsettings resources - #9897

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet
Jul 13, 2026
Merged

Localize native MTP adapter runsettings resources#9897
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

UnsupportedRunSettingsEntriesAreFlagged_Localization is broken on main.

PR #9748 (native MTP integration for MSTest) added a new copy of the runsettings warning strings to MSTest.TestAdapter's PlatformAdapterResources. Since the test asset uses EnableMSTestRunner=true, it now hits the native path (MSTestRunSettings.csPlatformAdapterResources) instead of the old VSTestBridge path.

However, every PlatformAdapterResources.*.xlf target was still state="new" with the English text, so no French/Italian output was ever produced and the test's localized assertions failed.

Fix

Ported the already-shipping, verbatim-identical translations from Microsoft.Testing.Extensions.VSTestBridge's ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf, matching by exact <source> text. This fills 11 trans-units × 13 languages (143 targets), flipping each target from state="new" to state="translated".

Notes:

  • Only <target> lines changed (clean 143/143 diff); CRLF + UTF-8 BOM preserved.
  • Running dotnet msbuild /t:UpdateXlf will not undo this — it never overwrites existing translated targets, it only syncs sources.
  • This also correctly localizes the other new native-adapter strings (runsettings file errors, option descriptions) that were untranslated for the same reason.

Verification

.\build.cmd -pack -c Release, then ran the acceptance test:

total: 6 failed: 0 succeeded: 6 skipped: 0

PR #9748 added a native MTP copy of the runsettings warning strings to PlatformAdapterResources, but the *.xlf targets were left untranslated (state=new with English text). This broke UnsupportedRunSettingsEntriesAreFlagged_Localization, which asserts French/Italian output.
Port the verbatim-identical translations that already ship in the VSTestBridge ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf (11 trans-units x 13 languages), flipping each target from state=new to state=translated.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e14a793a-02df-4926-bbea-7fb59e22ff59
CopilotAI review requested due to automatic review settings July 13, 2026 10:58
@EvangelinkAmaury Levé (Evangelink) added the state/needs-review Awaiting review from the team. label Jul 13, 2026
@Evangelink
Amaury Levé (Evangelink) merged commit 8503466 into mainJul 13, 2026
9 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/cuddly-parakeet branch July 13, 2026 11:01

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

Localizes native MTP adapter runsettings messages using existing VSTestBridge translations.

Changes:

  • Marks 143 resource targets as translated across 13 locales.
  • Restores localized runsettings warnings and option descriptions.
Show a summary per file
FileDescription
PlatformAdapterResources.cs.xlfAdds Czech translations.
PlatformAdapterResources.de.xlfAdds German translations.
PlatformAdapterResources.es.xlfAdds Spanish translations.
PlatformAdapterResources.fr.xlfAdds French translations.
PlatformAdapterResources.it.xlfAdds Italian translations.
PlatformAdapterResources.ja.xlfAdds Japanese translations.
PlatformAdapterResources.ko.xlfAdds Korean translations.
PlatformAdapterResources.pl.xlfAdds Polish translations.
PlatformAdapterResources.pt-BR.xlfAdds Brazilian Portuguese translations.
PlatformAdapterResources.ru.xlfAdds Russian translations.
PlatformAdapterResources.tr.xlfAdds Turkish translations.
PlatformAdapterResources.zh-Hans.xlfAdds Simplified Chinese translations.
PlatformAdapterResources.zh-Hant.xlfAdds Traditional Chinese translations.

Review details

  • Files reviewed: 13/13 changed files
  • Comments generated: 13
  • Review effort level: Medium

<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 檔案無效,遺漏 '&lt;RunSettings&gt;' 屬性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 文件无效,缺少 '&lt;RunSettings&gt;' 属性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Geçersiz .runsettings dosyası, '&lt;RunSettings&gt;' özniteliği eksik</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Недопустимый файл .runsettings, отсутствует атрибут "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Arquivo .runsettings inválido, o atributo "&lt;RunSettings&gt;" está ausente</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">File .runsettings non valido. Attributo '&lt;RunSettings&gt;' mancante</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Fichier .runsettings non valide, « &lt;RunSettings&gt; » attribut est manquant</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Archivo .runsettings no válido, falta el atributo "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Ungültige .runsettings-Datei, "&lt;RunSettings&gt;"-Attribut fehlt.</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Neplatný soubor .runsettings. Chybí atribut &lt;RunSettings&gt;.</target>

@github-actionsgithub-actionsBot 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.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Policy Violation: Manual XLF Edits

The repository localization guidelines state:

NEVER manually modify *.xlf files. Instead, regenerate them by running dotnet msbuild <project>.csproj /t:UpdateXlf.

This PR manually edits all 13 .xlf files. The correct workflow is:

  1. Add/update the translated strings in the .resx file (or the localization system that feeds translations).
  2. Run dotnet msbuild src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj /t:UpdateXlf to regenerate the .xlf files.

Please regenerate via UpdateXlf to ensure the files stay consistent with the tooling expected format and avoid drift.


Other observations (no blocking issues beyond the policy violation):

  • The 11 string IDs are updated consistently across all 13 locales ✓
  • state=newstate=translated is the correct transition ✓
  • Locked terms (.runsettings, <RunSettings>, {0} placeholders) appear preserved in the translations ✓
  • No functional code changes — risk is low ✓

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

Labels

needs/author-feedbackWaiting on the original author.state/needs-reviewAwaiting review from the team.

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

Localize native MTP adapter runsettings resources - #9897

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet
Jul 13, 2026
Merged

Localize native MTP adapter runsettings resources#9897
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

UnsupportedRunSettingsEntriesAreFlagged_Localization is broken on main.

PR #9748 (native MTP integration for MSTest) added a new copy of the runsettings warning strings to MSTest.TestAdapter's PlatformAdapterResources. Since the test asset uses EnableMSTestRunner=true, it now hits the native path (MSTestRunSettings.csPlatformAdapterResources) instead of the old VSTestBridge path.

However, every PlatformAdapterResources.*.xlf target was still state="new" with the English text, so no French/Italian output was ever produced and the test's localized assertions failed.

Fix

Ported the already-shipping, verbatim-identical translations from Microsoft.Testing.Extensions.VSTestBridge's ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf, matching by exact <source> text. This fills 11 trans-units × 13 languages (143 targets), flipping each target from state="new" to state="translated".

Notes:

  • Only <target> lines changed (clean 143/143 diff); CRLF + UTF-8 BOM preserved.
  • Running dotnet msbuild /t:UpdateXlf will not undo this — it never overwrites existing translated targets, it only syncs sources.
  • This also correctly localizes the other new native-adapter strings (runsettings file errors, option descriptions) that were untranslated for the same reason.

Verification

.\build.cmd -pack -c Release, then ran the acceptance test:

total: 6 failed: 0 succeeded: 6 skipped: 0

PR #9748 added a native MTP copy of the runsettings warning strings to PlatformAdapterResources, but the *.xlf targets were left untranslated (state=new with English text). This broke UnsupportedRunSettingsEntriesAreFlagged_Localization, which asserts French/Italian output.
Port the verbatim-identical translations that already ship in the VSTestBridge ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf (11 trans-units x 13 languages), flipping each target from state=new to state=translated.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e14a793a-02df-4926-bbea-7fb59e22ff59
CopilotAI review requested due to automatic review settings July 13, 2026 10:58
@EvangelinkAmaury Levé (Evangelink) added the state/needs-review Awaiting review from the team. label Jul 13, 2026
@Evangelink
Amaury Levé (Evangelink) merged commit 8503466 into mainJul 13, 2026
9 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/cuddly-parakeet branch July 13, 2026 11:01

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

Localizes native MTP adapter runsettings messages using existing VSTestBridge translations.

Changes:

  • Marks 143 resource targets as translated across 13 locales.
  • Restores localized runsettings warnings and option descriptions.
Show a summary per file
FileDescription
PlatformAdapterResources.cs.xlfAdds Czech translations.
PlatformAdapterResources.de.xlfAdds German translations.
PlatformAdapterResources.es.xlfAdds Spanish translations.
PlatformAdapterResources.fr.xlfAdds French translations.
PlatformAdapterResources.it.xlfAdds Italian translations.
PlatformAdapterResources.ja.xlfAdds Japanese translations.
PlatformAdapterResources.ko.xlfAdds Korean translations.
PlatformAdapterResources.pl.xlfAdds Polish translations.
PlatformAdapterResources.pt-BR.xlfAdds Brazilian Portuguese translations.
PlatformAdapterResources.ru.xlfAdds Russian translations.
PlatformAdapterResources.tr.xlfAdds Turkish translations.
PlatformAdapterResources.zh-Hans.xlfAdds Simplified Chinese translations.
PlatformAdapterResources.zh-Hant.xlfAdds Traditional Chinese translations.

Review details

  • Files reviewed: 13/13 changed files
  • Comments generated: 13
  • Review effort level: Medium

<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 檔案無效,遺漏 '&lt;RunSettings&gt;' 屬性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 文件无效,缺少 '&lt;RunSettings&gt;' 属性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Geçersiz .runsettings dosyası, '&lt;RunSettings&gt;' özniteliği eksik</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Недопустимый файл .runsettings, отсутствует атрибут "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Arquivo .runsettings inválido, o atributo "&lt;RunSettings&gt;" está ausente</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">File .runsettings non valido. Attributo '&lt;RunSettings&gt;' mancante</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Fichier .runsettings non valide, « &lt;RunSettings&gt; » attribut est manquant</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Archivo .runsettings no válido, falta el atributo "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Ungültige .runsettings-Datei, "&lt;RunSettings&gt;"-Attribut fehlt.</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Neplatný soubor .runsettings. Chybí atribut &lt;RunSettings&gt;.</target>

@github-actionsgithub-actionsBot 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.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Policy Violation: Manual XLF Edits

The repository localization guidelines state:

NEVER manually modify *.xlf files. Instead, regenerate them by running dotnet msbuild <project>.csproj /t:UpdateXlf.

This PR manually edits all 13 .xlf files. The correct workflow is:

  1. Add/update the translated strings in the .resx file (or the localization system that feeds translations).
  2. Run dotnet msbuild src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj /t:UpdateXlf to regenerate the .xlf files.

Please regenerate via UpdateXlf to ensure the files stay consistent with the tooling expected format and avoid drift.


Other observations (no blocking issues beyond the policy violation):

  • The 11 string IDs are updated consistently across all 13 locales ✓
  • state=newstate=translated is the correct transition ✓
  • Locked terms (.runsettings, <RunSettings>, {0} placeholders) appear preserved in the translations ✓
  • No functional code changes — risk is low ✓

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

Labels

needs/author-feedbackWaiting on the original author.state/needs-reviewAwaiting review from the team.

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

Localize native MTP adapter runsettings resources - #9897

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet
Jul 13, 2026
Merged

Localize native MTP adapter runsettings resources#9897
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

UnsupportedRunSettingsEntriesAreFlagged_Localization is broken on main.

PR #9748 (native MTP integration for MSTest) added a new copy of the runsettings warning strings to MSTest.TestAdapter's PlatformAdapterResources. Since the test asset uses EnableMSTestRunner=true, it now hits the native path (MSTestRunSettings.csPlatformAdapterResources) instead of the old VSTestBridge path.

However, every PlatformAdapterResources.*.xlf target was still state="new" with the English text, so no French/Italian output was ever produced and the test's localized assertions failed.

Fix

Ported the already-shipping, verbatim-identical translations from Microsoft.Testing.Extensions.VSTestBridge's ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf, matching by exact <source> text. This fills 11 trans-units × 13 languages (143 targets), flipping each target from state="new" to state="translated".

Notes:

  • Only <target> lines changed (clean 143/143 diff); CRLF + UTF-8 BOM preserved.
  • Running dotnet msbuild /t:UpdateXlf will not undo this — it never overwrites existing translated targets, it only syncs sources.
  • This also correctly localizes the other new native-adapter strings (runsettings file errors, option descriptions) that were untranslated for the same reason.

Verification

.\build.cmd -pack -c Release, then ran the acceptance test:

total: 6 failed: 0 succeeded: 6 skipped: 0

PR #9748 added a native MTP copy of the runsettings warning strings to PlatformAdapterResources, but the *.xlf targets were left untranslated (state=new with English text). This broke UnsupportedRunSettingsEntriesAreFlagged_Localization, which asserts French/Italian output.
Port the verbatim-identical translations that already ship in the VSTestBridge ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf (11 trans-units x 13 languages), flipping each target from state=new to state=translated.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e14a793a-02df-4926-bbea-7fb59e22ff59
CopilotAI review requested due to automatic review settings July 13, 2026 10:58
@EvangelinkAmaury Levé (Evangelink) added the state/needs-review Awaiting review from the team. label Jul 13, 2026
@Evangelink
Amaury Levé (Evangelink) merged commit 8503466 into mainJul 13, 2026
9 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/cuddly-parakeet branch July 13, 2026 11:01

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

Localizes native MTP adapter runsettings messages using existing VSTestBridge translations.

Changes:

  • Marks 143 resource targets as translated across 13 locales.
  • Restores localized runsettings warnings and option descriptions.
Show a summary per file
FileDescription
PlatformAdapterResources.cs.xlfAdds Czech translations.
PlatformAdapterResources.de.xlfAdds German translations.
PlatformAdapterResources.es.xlfAdds Spanish translations.
PlatformAdapterResources.fr.xlfAdds French translations.
PlatformAdapterResources.it.xlfAdds Italian translations.
PlatformAdapterResources.ja.xlfAdds Japanese translations.
PlatformAdapterResources.ko.xlfAdds Korean translations.
PlatformAdapterResources.pl.xlfAdds Polish translations.
PlatformAdapterResources.pt-BR.xlfAdds Brazilian Portuguese translations.
PlatformAdapterResources.ru.xlfAdds Russian translations.
PlatformAdapterResources.tr.xlfAdds Turkish translations.
PlatformAdapterResources.zh-Hans.xlfAdds Simplified Chinese translations.
PlatformAdapterResources.zh-Hant.xlfAdds Traditional Chinese translations.

Review details

  • Files reviewed: 13/13 changed files
  • Comments generated: 13
  • Review effort level: Medium

<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 檔案無效,遺漏 '&lt;RunSettings&gt;' 屬性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 文件无效,缺少 '&lt;RunSettings&gt;' 属性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Geçersiz .runsettings dosyası, '&lt;RunSettings&gt;' özniteliği eksik</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Недопустимый файл .runsettings, отсутствует атрибут "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Arquivo .runsettings inválido, o atributo "&lt;RunSettings&gt;" está ausente</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">File .runsettings non valido. Attributo '&lt;RunSettings&gt;' mancante</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Fichier .runsettings non valide, « &lt;RunSettings&gt; » attribut est manquant</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Archivo .runsettings no válido, falta el atributo "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Ungültige .runsettings-Datei, "&lt;RunSettings&gt;"-Attribut fehlt.</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Neplatný soubor .runsettings. Chybí atribut &lt;RunSettings&gt;.</target>

@github-actionsgithub-actionsBot 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.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Policy Violation: Manual XLF Edits

The repository localization guidelines state:

NEVER manually modify *.xlf files. Instead, regenerate them by running dotnet msbuild <project>.csproj /t:UpdateXlf.

This PR manually edits all 13 .xlf files. The correct workflow is:

  1. Add/update the translated strings in the .resx file (or the localization system that feeds translations).
  2. Run dotnet msbuild src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj /t:UpdateXlf to regenerate the .xlf files.

Please regenerate via UpdateXlf to ensure the files stay consistent with the tooling expected format and avoid drift.


Other observations (no blocking issues beyond the policy violation):

  • The 11 string IDs are updated consistently across all 13 locales ✓
  • state=newstate=translated is the correct transition ✓
  • Locked terms (.runsettings, <RunSettings>, {0} placeholders) appear preserved in the translations ✓
  • No functional code changes — risk is low ✓

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

Labels

needs/author-feedbackWaiting on the original author.state/needs-reviewAwaiting review from the team.

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

Localize native MTP adapter runsettings resources - #9897

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet
Jul 13, 2026
Merged

Localize native MTP adapter runsettings resources#9897
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/cuddly-parakeet

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Problem

UnsupportedRunSettingsEntriesAreFlagged_Localization is broken on main.

PR #9748 (native MTP integration for MSTest) added a new copy of the runsettings warning strings to MSTest.TestAdapter's PlatformAdapterResources. Since the test asset uses EnableMSTestRunner=true, it now hits the native path (MSTestRunSettings.csPlatformAdapterResources) instead of the old VSTestBridge path.

However, every PlatformAdapterResources.*.xlf target was still state="new" with the English text, so no French/Italian output was ever produced and the test's localized assertions failed.

Fix

Ported the already-shipping, verbatim-identical translations from Microsoft.Testing.Extensions.VSTestBridge's ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf, matching by exact <source> text. This fills 11 trans-units × 13 languages (143 targets), flipping each target from state="new" to state="translated".

Notes:

  • Only <target> lines changed (clean 143/143 diff); CRLF + UTF-8 BOM preserved.
  • Running dotnet msbuild /t:UpdateXlf will not undo this — it never overwrites existing translated targets, it only syncs sources.
  • This also correctly localizes the other new native-adapter strings (runsettings file errors, option descriptions) that were untranslated for the same reason.

Verification

.\build.cmd -pack -c Release, then ran the acceptance test:

total: 6 failed: 0 succeeded: 6 skipped: 0

PR #9748 added a native MTP copy of the runsettings warning strings to PlatformAdapterResources, but the *.xlf targets were left untranslated (state=new with English text). This broke UnsupportedRunSettingsEntriesAreFlagged_Localization, which asserts French/Italian output.
Port the verbatim-identical translations that already ship in the VSTestBridge ExtensionResources.*.xlf into PlatformAdapterResources.*.xlf (11 trans-units x 13 languages), flipping each target from state=new to state=translated.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: e14a793a-02df-4926-bbea-7fb59e22ff59
CopilotAI review requested due to automatic review settings July 13, 2026 10:58
@EvangelinkAmaury Levé (Evangelink) added the state/needs-review Awaiting review from the team. label Jul 13, 2026
@Evangelink
Amaury Levé (Evangelink) merged commit 8503466 into mainJul 13, 2026
9 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/cuddly-parakeet branch July 13, 2026 11:01

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

Localizes native MTP adapter runsettings messages using existing VSTestBridge translations.

Changes:

  • Marks 143 resource targets as translated across 13 locales.
  • Restores localized runsettings warnings and option descriptions.
Show a summary per file
FileDescription
PlatformAdapterResources.cs.xlfAdds Czech translations.
PlatformAdapterResources.de.xlfAdds German translations.
PlatformAdapterResources.es.xlfAdds Spanish translations.
PlatformAdapterResources.fr.xlfAdds French translations.
PlatformAdapterResources.it.xlfAdds Italian translations.
PlatformAdapterResources.ja.xlfAdds Japanese translations.
PlatformAdapterResources.ko.xlfAdds Korean translations.
PlatformAdapterResources.pl.xlfAdds Polish translations.
PlatformAdapterResources.pt-BR.xlfAdds Brazilian Portuguese translations.
PlatformAdapterResources.ru.xlfAdds Russian translations.
PlatformAdapterResources.tr.xlfAdds Turkish translations.
PlatformAdapterResources.zh-Hans.xlfAdds Simplified Chinese translations.
PlatformAdapterResources.zh-Hant.xlfAdds Traditional Chinese translations.

Review details

  • Files reviewed: 13/13 changed files
  • Comments generated: 13
  • Review effort level: Medium

<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 檔案無效,遺漏 '&lt;RunSettings&gt;' 屬性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">.runsettings 文件无效,缺少 '&lt;RunSettings&gt;' 属性</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Geçersiz .runsettings dosyası, '&lt;RunSettings&gt;' özniteliği eksik</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Недопустимый файл .runsettings, отсутствует атрибут "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Arquivo .runsettings inválido, o atributo "&lt;RunSettings&gt;" está ausente</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">File .runsettings non valido. Attributo '&lt;RunSettings&gt;' mancante</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Fichier .runsettings non valide, « &lt;RunSettings&gt; » attribut est manquant</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Archivo .runsettings no válido, falta el atributo "&lt;RunSettings&gt;"</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Ungültige .runsettings-Datei, "&lt;RunSettings&gt;"-Attribut fehlt.</target>
<trans-unit id="MissingRunSettingsAttribute">
<source>Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</source>
<target state="new">Invalid .runsettings file, '&lt;RunSettings&gt;' attribute is missing</target>
<target state="translated">Neplatný soubor .runsettings. Chybí atribut &lt;RunSettings&gt;.</target>

@github-actionsgithub-actionsBot 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.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Policy Violation: Manual XLF Edits

The repository localization guidelines state:

NEVER manually modify *.xlf files. Instead, regenerate them by running dotnet msbuild <project>.csproj /t:UpdateXlf.

This PR manually edits all 13 .xlf files. The correct workflow is:

  1. Add/update the translated strings in the .resx file (or the localization system that feeds translations).
  2. Run dotnet msbuild src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj /t:UpdateXlf to regenerate the .xlf files.

Please regenerate via UpdateXlf to ensure the files stay consistent with the tooling expected format and avoid drift.


Other observations (no blocking issues beyond the policy violation):

  • The 11 string IDs are updated consistently across all 13 locales ✓
  • state=newstate=translated is the correct transition ✓
  • Locked terms (.runsettings, <RunSettings>, {0} placeholders) appear preserved in the translations ✓
  • No functional code changes — risk is low ✓

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

Labels

needs/author-feedbackWaiting on the original author.state/needs-reviewAwaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Evangelink