28
* The root element is an object literal
29
*/
30
>
function replaceNLStrings(logger: ILogger, extensionManifest: IExtensionManifest, messages: ITranslations, originalMessages?: ITranslations): void {
extensionNls.ts
31
>
const processEntry = (obj: Record<string, unknown>, key: string | number, command?: boolean) => {
32
>
const value = obj[key];
33
>
if (isString(value)) {
34
>
const str = value;
35
>
const length = str.length;
36
>
if (length > 1 && str[0] === '%' && str[length - 1] === '%') {
37
>
const messageKey = str.substr(1, length - 2);
38
>
let translated = messages[messageKey];
39
>
// If the messages come from a language pack they might miss some keys
40
>
// Fill them from the original messages.
41
>
if (translated === undefined && originalMessages) {
42
translated = originalMessages[messageKey];
43
}
44
>
const message: string | undefined = typeof translated === 'string' ? translated : translated?.message;
extensionNls.ts
45
>
46
>
// This branch returns ILocalizedString's instead of Strings so that the Command Palette can contain both the localized and the original value.
47
>
const original = originalMessages?.[messageKey];
48
>
const originalMessage: string | undefined = typeof original === 'string' ? original : original?.message;
49
>
50
>
if (!message) {
51
if (!originalMessage) {
52
logger.warn(`[${extensionManifest.name}]: ${localize('missingNLSKey', "Couldn't find message for key {0}.", messageKey)}`);