From 9c3a109adf9ede9752dbc2f507d51baeb11077ce Mon Sep 17 00:00:00 2001 From: Dirk Baeumer Date: Wed, 16 Jun 2021 11:53:10 +0200 Subject: [PATCH] Fixes #126408: Support changes in vscode-nls-dev that allow hint comments in package.nls.json --- build/lib/extensions.js | 2 +- build/lib/extensions.ts | 7 +++++-- src/vs/platform/extensionManagement/common/extensionNls.ts | 7 ++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/build/lib/extensions.js b/build/lib/extensions.js index 20ff7e1c486..38b7038b689 100644 --- a/build/lib/extensions.js +++ b/build/lib/extensions.js @@ -320,7 +320,7 @@ function translatePackageJSON(packageJSON, packageNLSPath) { else if (typeof val === 'string' && val.charCodeAt(0) === CharCode_PC && val.charCodeAt(val.length - 1) === CharCode_PC) { const translated = packageNls[val.substr(1, val.length - 2)]; if (translated) { - obj[key] = translated; + obj[key] = typeof translated === 'string' ? translated : (typeof translated.message === 'string' ? translated.message : val); } } } diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts index 19a53aee4b0..54a0a08421f 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts @@ -385,8 +385,11 @@ export function scanBuiltinExtensions(extensionsRoot: string, exclude: string[] } export function translatePackageJSON(packageJSON: string, packageNLSPath: string) { + interface NLSFormat { + [key: string]: string | { message: string, comment: string[] }; + } const CharCode_PC = '%'.charCodeAt(0); - const packageNls = JSON.parse(fs.readFileSync(packageNLSPath).toString()); + const packageNls: NLSFormat = JSON.parse(fs.readFileSync(packageNLSPath).toString()); const translate = (obj: any) => { for (let key in obj) { const val = obj[key]; @@ -397,7 +400,7 @@ export function translatePackageJSON(packageJSON: string, packageNLSPath: string } else if (typeof val === 'string' && val.charCodeAt(0) === CharCode_PC && val.charCodeAt(val.length - 1) === CharCode_PC) { const translated = packageNls[val.substr(1, val.length - 2)]; if (translated) { - obj[key] = translated; + obj[key] = typeof translated === 'string' ? translated : (typeof translated.message === 'string' ? translated.message : val); } } } diff --git a/src/vs/platform/extensionManagement/common/extensionNls.ts b/src/vs/platform/extensionManagement/common/extensionNls.ts index 895f88d7bc4..1dd951e3f82 100644 --- a/src/vs/platform/extensionManagement/common/extensionNls.ts +++ b/src/vs/platform/extensionManagement/common/extensionNls.ts @@ -9,11 +9,11 @@ import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; const nlsRegex = /^%([\w\d.-]+)%$/i; export interface ITranslations { - [key: string]: string; + [key: string]: string | { message: string; comment: string[] }; } export function localizeManifest(manifest: IExtensionManifest, translations: ITranslations): IExtensionManifest { - const patcher = (value: string) => { + const patcher = (value: string): string | undefined => { if (typeof value !== 'string') { return undefined; } @@ -24,7 +24,8 @@ export function localizeManifest(manifest: IExtensionManifest, translations: ITr return undefined; } - return translations[match[1]] || value; + const translation = translations[match[1]] ?? value; + return typeof translation === 'string' ? translation : (typeof translation.message === 'string' ? translation.message : value); }; return cloneAndChange(manifest, patcher);