nls in package.json: Also support strings in arrays

This commit is contained in:
Martin Aeschlimann
2017-01-07 22:22:24 -04:00
parent 3a67f92f5b
commit 3d18fd4d9f

View File

@@ -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<T>(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 = <string>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 = <string>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)) {
(<any[]>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);
}
};
}
}