diff --git a/src/vs/workbench/node/extensionPoints.ts b/src/vs/workbench/node/extensionPoints.ts index 3d7871bced6..4da349b2266 100644 --- a/src/vs/workbench/node/extensionPoints.ts +++ b/src/vs/workbench/node/extensionPoints.ts @@ -161,40 +161,44 @@ class ExtensionManifestNLSReplacer extends ExtensionManifestHandler { /** * This routine make the following assumptions: * The root element is a object literal - * Strings to replace are one values of a key. So for example string[] are ignored. - * This is done to speed things up. */ private static _replaceNLStrings(literal: T, messages: { [key: string]: string; }, collector: MessagesCollector, messageScope: string): void { - Object.keys(literal).forEach(key => { - if (literal.hasOwnProperty(key)) { - let value = literal[key]; - if (Types.isString(value)) { - let str = value; - let length = str.length; - if (length > 1 && str[0] === '%' && str[length - 1] === '%') { - let messageKey = str.substr(1, length - 2); - let message = messages[messageKey]; - if (message) { - if (nlsConfig.pseudo) { - // FF3B and FF3D is the Unicode zenkaku representation for [ and ] - message = '\uFF3B' + message.replace(/[aouei]/g, '$&$&') + '\uFF3D'; - } - literal[key] = message; - } else { - collector.warn(messageScope, nls.localize('missingNLSKey', "Couldn't find message for key {0}.", messageKey)); + function processEntry(obj: any, key: string | number) { + let value = obj[key]; + if (Types.isString(value)) { + let str = value; + let length = str.length; + if (length > 1 && str[0] === '%' && str[length - 1] === '%') { + let messageKey = str.substr(1, length - 2); + let message = messages[messageKey]; + if (message) { + if (nlsConfig.pseudo) { + // FF3B and FF3D is the Unicode zenkaku representation for [ and ] + message = '\uFF3B' + message.replace(/[aouei]/g, '$&$&') + '\uFF3D'; } + obj[key] = message; + } else { + collector.warn(messageScope, nls.localize('missingNLSKey', "Couldn't find message for key {0}.", messageKey)); } - } else if (Types.isObject(value)) { - ExtensionManifestNLSReplacer._replaceNLStrings(value, messages, collector, messageScope); - } else if (Types.isArray(value)) { - (value).forEach(element => { - if (Types.isObject(element)) { - ExtensionManifestNLSReplacer._replaceNLStrings(element, messages, collector, messageScope); - } - }); + } + } else if (Types.isObject(value)) { + for (let k in value) { + if (value.hasOwnProperty(k)) { + processEntry(value, k); + } + } + } else if (Types.isArray(value)) { + for (let i = 0; i < value.length; i++) { + processEntry(value, i); } } - }); + } + + for (let key in literal) { + if (literal.hasOwnProperty(key)) { + processEntry(literal, key); + } + }; } }