Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Version: 1.72.2 (user setup) OS: Windows_NT x64 10.0. Steps to Reproduce: for example. Have an entry in for a command but misspell the part: of the other localizations load: ! Issue observed in Python extension: and Jupyter: cc/

Discussion:
import { localize } from 'vs/nls'; export interface ITranslations { <del> [key: string]: string | { message: string; comment: string[] }; </del> <ins> [key: string]: string | { message: string; comment: string[] } | undefined; </ins> } export function localizeManifest(extensionManifest: IExtensionManifest, translations: ITranslations, fallbackTranslations?: ITranslations): IExtensionManifest { try { replaceNLStrings(extensionManifest, translations, fallbackTranslations); } catch (error) { <ins> console.error(error?.message ?? error); </ins> /*Ignore Error*/ } return extensionManifest;

if (translated === undefined && originalMessages) { translated = originalMessages[messageKey]; } <del> const message: string | undefined = typeof translated === 'string' ? translated : translated.message; if (message !== undefined) { // This branch returns ILocalizedString's instead of Strings so that the Command Palette can contain both the localized and the original value. const original = originalMessages?.[messageKey]; const originalMessage: string | undefined = typeof original === 'string' ? original : original?.message; if ( // if we are translating the title or category of a command command && (key === 'title' || key === 'category') && // and the original value is not the same as the translated value originalMessage && originalMessage !== message ) { const localizedString: ILocalizedString = { value: message, original: originalMessage }; obj[key] = localizedString; } else { obj[key] = message; </del> <ins> const message: string | undefined = typeof translated === 'string' ? translated : translated?.message; // This branch returns ILocalizedString's instead of Strings so that the Command Palette can contain both the localized and the original value. const original = originalMessages?.[messageKey]; const originalMessage: string | undefined = typeof original === 'string' ? original : original?.message; if (!message) { if (!originalMessage) { console.warn(`[${extensionManifest.name}]: ${localize('missingNLSKey', "Couldn't find message for key {0}.", messageKey)}`); </ins> } <ins> return; } if ( // if we are translating the title or category of a command command && (key === 'title' || key === 'category') && // and the original value is not the same as the translated value originalMessage && originalMessage !== message ) { const localizedString: ILocalizedString = { value: message, original: originalMessage }; obj[key] = localizedString; </ins> } else { <del> console.warn(`[${extensionManifest.name}]: ${localize('missingNLSKey', "Couldn't find message for key {0}.", messageKey)}`); </del> <ins> obj[key] = message; </ins> } } } else if (isObject(value)) {

assert.strictEqual(localizedManifest.contributes?.authentication?.[0].label, 'Testauthentifizierung'); assert.strictEqual((localizedManifest.contributes?.configuration as IConfiguration).title, 'Testkonfiguration'); }); <ins> test('replaces template strings - is best effort #164630', function () { const manifestWithTypo: IExtensionManifest = { name: 'test', publisher: 'test', version: '1.0.0', engines: { vscode: '*' }, contributes: { authentication: [ { id: 'test.authentication', // This not existing in the bundle shouldn't cause an error. label: '%doesnotexist%', } ], commands: [ { command: 'test.command', title: '%test.command.title%', category: '%test.command.category%' }, ], } }; const localizedManifest = localizeManifest( deepClone(manifestWithTypo), { 'test.command.title': 'Test Command', 'test.command.category': 'Test Category' }); assert.strictEqual(localizedManifest.contributes?.commands?.[0].title, 'Test Command'); assert.strictEqual(localizedManifest.contributes?.commands?.[0].category, 'Test Category'); assert.strictEqual(localizedManifest.contributes?.authentication?.[0].label, '%doesnotexist%'); }); </ins> });