@theia/localization-manager 1.69.0-next.65 → 1.69.0-next.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,6 +17,7 @@ export interface DeeplParameters {
17
17
  outline_detection?: string;
18
18
  splitting_tags?: string[];
19
19
  ignore_tags?: string[];
20
+ context?: string;
20
21
  }
21
22
  export interface DeeplResponse {
22
23
  translations: DeeplTranslation[];
@@ -1 +1 @@
1
- {"version":3,"file":"deepl-api.d.ts","sourceRoot":"","sources":["../src/deepl-api.ts"],"names":[],"mappings":"AA4BA,wBAAsB,KAAK,CACvB,UAAU,EAAE,eAAe,GAC5B,OAAO,CAAC,aAAa,CAAC,CAsBxB;AA6DD,MAAM,MAAM,aAAa,GACnB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,SAAS,GACT,SAAS,GACT,IAAI,CAAC;AAEX,eAAO,MAAM,kBAAkB,UAG9B,CAAC;AAGF,eAAO,MAAM,gBAAgB,wGAEnB,CAAC;AAEX,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,aAAa,CAE/E;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,WAAW,CAAC,EAAE,aAAa,CAAA;IAC3B,WAAW,EAAE,aAAa,CAAA;IAC1B,eAAe,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,YAAY,CAAA;IAC1C,mBAAmB,CAAC,EAAE,GAAG,GAAG,GAAG,CAAA;IAC/B,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAA;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,aAAa;IAC1B,YAAY,EAAE,gBAAgB,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC7B,wBAAwB,EAAE,MAAM,CAAA;IAChC,IAAI,EAAE,MAAM,CAAA;CACf"}
1
+ {"version":3,"file":"deepl-api.d.ts","sourceRoot":"","sources":["../src/deepl-api.ts"],"names":[],"mappings":"AA4BA,wBAAsB,KAAK,CACvB,UAAU,EAAE,eAAe,GAC5B,OAAO,CAAC,aAAa,CAAC,CAwBxB;AA6ED,MAAM,MAAM,aAAa,GACnB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,OAAO,GACP,SAAS,GACT,SAAS,GACT,IAAI,CAAC;AAEX,eAAO,MAAM,kBAAkB,UAG9B,CAAC;AAGF,eAAO,MAAM,gBAAgB,wGAEnB,CAAC;AAEX,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,aAAa,CAE/E;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,WAAW,CAAC,EAAE,aAAa,CAAA;IAC3B,WAAW,EAAE,aAAa,CAAA;IAC1B,eAAe,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,YAAY,CAAA;IAC1C,mBAAmB,CAAC,EAAE,GAAG,GAAG,GAAG,CAAA;IAC/B,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAA;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC1B,YAAY,EAAE,gBAAgB,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC7B,wBAAwB,EAAE,MAAM,CAAA;IAChC,IAAI,EAAE,MAAM,CAAA;CACf"}
package/lib/deepl-api.js CHANGED
@@ -36,12 +36,14 @@ async function deepl(parameters) {
36
36
  while (textArray.length > 0) {
37
37
  textChunks.push(textArray.splice(0, deeplLimit));
38
38
  }
39
- const responses = await Promise.all(textChunks.map(async (chunk) => {
39
+ // Process chunks sequentially to respect DeepL API rate limits
40
+ const responses = [];
41
+ for (const chunk of textChunks) {
40
42
  const parameterCopy = { ...parameters, text: chunk };
41
43
  const url = `https://${sub_domain}.deepl.com/v2/translate`;
42
44
  const buffer = Buffer.from(toFormData(parameterCopy));
43
- return postWithRetry(url, parameters.auth_key, buffer, 1);
44
- }));
45
+ responses.push(await postWithRetry(url, parameters.auth_key, buffer, 1));
46
+ }
45
47
  const mergedResponse = { translations: [] };
46
48
  for (const response of responses) {
47
49
  mergedResponse.translations.push(...response.translations);
@@ -65,6 +67,17 @@ async function postWithRetry(url, key, buffer, attempt) {
65
67
  if ('message' in e && typeof e.message === 'string' && e.message.includes('Too Many Requests')) {
66
68
  return postWithRetry(url, key, buffer, attempt + 1);
67
69
  }
70
+ // Try to extract the error details from the DeepL response body
71
+ // eslint-disable-next-line no-null/no-null
72
+ if (typeof e === 'object' && e !== null && 'json' in e && typeof e.json === 'function') {
73
+ try {
74
+ const errorBody = await e.json();
75
+ console.error('DeepL error response:', JSON.stringify(errorBody));
76
+ }
77
+ catch {
78
+ // Ignore if we can't parse the error body
79
+ }
80
+ }
68
81
  throw e;
69
82
  }
70
83
  }
@@ -95,9 +108,14 @@ function coerceTranslation(text) {
95
108
  .replace(/\uff1b/g, ';')
96
109
  .replace(/\uff1f/g, '?');
97
110
  }
111
+ // Parameters that are used internally and should not be sent to the DeepL API
112
+ const internalParameters = new Set(['auth_key', 'free_api']);
98
113
  function toFormData(parameters) {
99
114
  const str = [];
100
115
  for (const [key, value] of Object.entries(parameters)) {
116
+ if (internalParameters.has(key)) {
117
+ continue;
118
+ }
101
119
  if (typeof value === 'string') {
102
120
  str.push(encodeURIComponent(key) + '=' + encodeURIComponent(value.toString()));
103
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deepl-api.js","sourceRoot":"","sources":["../src/deepl-api.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAchF,sBAwBC;AA8GD,kDAEC;AApJD,6BAA6B;AAC7B,qCAAsC;AAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AACvC,uDAAuD;AACvD,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,WAAW,GAAG,IAAI,qBAAW,CAAC;IAChC,iBAAiB,EAAE,EAAE;IACrB,QAAQ,EAAE,QAAQ;IAClB,eAAe,EAAE,IAAI;CACxB,CAAC,CAAC;AAEI,KAAK,UAAU,KAAK,CACvB,UAA2B;IAE3B,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,SAAS,GAAoB,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;QAC9E,MAAM,aAAa,GAAoB,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACtE,MAAM,GAAG,GAAG,WAAW,UAAU,yBAAyB,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;QACtD,OAAO,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC,CAAC;IACJ,MAAM,cAAc,GAAkB,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC3D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC;IACD,KAAK,MAAM,WAAW,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;QACpD,WAAW,CAAC,IAAI,GAAG,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,cAAc,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,GAAW,EAAE,MAAc,EAAE,OAAe;IAClF,IAAI,CAAC;QACD,MAAM,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE;YACrC,cAAc,EAAE,mCAAmC;YACnD,YAAY,EAAE,4BAA4B;YAC1C,eAAe,EAAE,iBAAiB,GAAG,GAAG;SAC3C,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IACpB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,IAAI,SAAS,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC7F,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,CAAC,CAAC;IACZ,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,UAA2B;IAC/C,IAAI,UAAU,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;QACrC,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC;IACvC,CAAC;SAAM,IAAI,UAAU,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;QAC5C,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC;IACvC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACnC,OAAO,IAAI;SACN,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,UAA2B;IAC3C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAClF,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAyCY,QAAA,kBAAkB,GAAG;IAC9B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;CACzH,CAAC;AAEF,gFAAgF;AACnE,QAAA,gBAAgB,GAAG;IAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACrF,CAAC;AAEX,SAAgB,mBAAmB,CAAC,QAAgB;IAChD,OAAO,0BAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"deepl-api.js","sourceRoot":"","sources":["../src/deepl-api.ts"],"names":[],"mappings":"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"}
@@ -305,8 +305,20 @@ function extractString(node) {
305
305
  }
306
306
  node = reference;
307
307
  }
308
- if (ts.isTemplateLiteral(node)) {
309
- throw new TypeScriptError("Template literals are not supported for localization. Please use the additional arguments of the 'nls.localize' function to format strings", node);
308
+ // Template literals without interpolations (e.g. `some text`) are treated as plain strings.
309
+ // Multiline template literals are dedented to remove source code indentation.
310
+ if (ts.isNoSubstitutionTemplateLiteral(node)) {
311
+ return dedent(node.text);
312
+ }
313
+ // Template literals with interpolated expressions (e.g. `Hello ${name}`) cannot be
314
+ // statically resolved, so they are rejected. Use nls.localize format args instead.
315
+ if (ts.isTemplateExpression(node)) {
316
+ throw new TypeScriptError("Template literals with expressions are not supported for localization. Please use the additional arguments of the 'nls.localize' function to format strings", node);
317
+ }
318
+ // String concatenation (e.g. 'part one ' + 'part two') is resolved by recursively
319
+ // extracting both sides. This allows splitting long localization strings across lines.
320
+ if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.PlusToken) {
321
+ return extractString(node.left) + extractString(node.right);
310
322
  }
311
323
  if (!ts.isStringLiteralLike(node)) {
312
324
  throw new TypeScriptError(`'${node.getText()}' is not a string constant`, node);
@@ -345,6 +357,36 @@ function isCommandLocalizeUtility(node) {
345
357
  }
346
358
  return node.expression.getText() === 'Command.toLocalizedCommand';
347
359
  }
360
+ /**
361
+ * Removes common leading whitespace from each line of a multiline string,
362
+ * similar to Python's `textwrap.dedent`. This is used to clean up template
363
+ * literals that inherit indentation from the surrounding source code.
364
+ */
365
+ function dedent(str) {
366
+ const lines = str.split('\n');
367
+ if (lines.length <= 1) {
368
+ return str;
369
+ }
370
+ // Find the minimum indentation across all non-empty lines (skipping the first line)
371
+ let minIndent = Infinity;
372
+ for (let i = 1; i < lines.length; i++) {
373
+ const line = lines[i];
374
+ if (line.trim().length === 0) {
375
+ continue;
376
+ }
377
+ const indent = line.match(/^(\s*)/)?.[1].length ?? 0;
378
+ minIndent = Math.min(minIndent, indent);
379
+ }
380
+ if (minIndent === Infinity || minIndent === 0) {
381
+ return str;
382
+ }
383
+ // Remove the common indentation from all lines except the first
384
+ const dedented = [lines[0]];
385
+ for (let i = 1; i < lines.length; i++) {
386
+ dedented.push(lines[i].substring(minIndent));
387
+ }
388
+ return dedented.join('\n');
389
+ }
348
390
  const unescapeMap = {
349
391
  '\'': '\'',
350
392
  '"': '"',
@@ -1 +1 @@
1
- {"version":3,"file":"localization-extractor.js","sourceRoot":"","sources":["../src/localization-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localization-extractor.js","sourceRoot":"","sources":["../src/localization-extractor.ts"],"names":[],"mappings":"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"}
@@ -127,12 +127,59 @@ describe('correctly extracts from file content', () => {
127
127
  "test.ts(2,28): Multiple translation keys already exist at 'key'"
128
128
  ]);
129
129
  });
130
- it('should show error for template literals', async () => {
130
+ it('should extract from template literal without expressions', async () => {
131
131
  const content = 'nls.localize("key", `template literal value`)';
132
+ assert.deepStrictEqual(await (0, localization_extractor_1.extractFromFile)(TEST_FILE, content), {
133
+ 'key': 'template literal value'
134
+ });
135
+ });
136
+ it('should dedent multiline template literal', async () => {
137
+ const content = [
138
+ 'nls.localize("key", `first line',
139
+ ' second line',
140
+ ' third line`)'
141
+ ].join('\n');
142
+ assert.deepStrictEqual(await (0, localization_extractor_1.extractFromFile)(TEST_FILE, content), {
143
+ 'key': 'first line\nsecond line\nthird line'
144
+ });
145
+ });
146
+ it('should dedent multiline template literal with blank lines', async () => {
147
+ const content = [
148
+ 'nls.localize("key", `first paragraph.',
149
+ '',
150
+ ' second paragraph.`)'
151
+ ].join('\n');
152
+ assert.deepStrictEqual(await (0, localization_extractor_1.extractFromFile)(TEST_FILE, content), {
153
+ 'key': 'first paragraph.\n\nsecond paragraph.'
154
+ });
155
+ });
156
+ it('should show error for template literals with expressions', async () => {
157
+ const content = 'const name = "World"; nls.localize("key", `Hello ${name}`)';
158
+ const errors = [];
159
+ assert.deepStrictEqual(await (0, localization_extractor_1.extractFromFile)(TEST_FILE, content, errors, quiet), {});
160
+ assert.deepStrictEqual(errors, [
161
+ 'test.ts(1,42): Template literals with expressions are not supported for localization. ' +
162
+ 'Please use the additional arguments of the \'nls.localize\' function to format strings'
163
+ ]);
164
+ });
165
+ it('should extract from string concatenation', async () => {
166
+ const content = 'nls.localize("key", "Hello " + "World")';
167
+ assert.deepStrictEqual(await (0, localization_extractor_1.extractFromFile)(TEST_FILE, content), {
168
+ 'key': 'Hello World'
169
+ });
170
+ });
171
+ it('should extract from multi-part string concatenation', async () => {
172
+ const content = 'nls.localize("key", "part one " + "part two " + "part three")';
173
+ assert.deepStrictEqual(await (0, localization_extractor_1.extractFromFile)(TEST_FILE, content), {
174
+ 'key': 'part one part two part three'
175
+ });
176
+ });
177
+ it('should return an error when concatenation includes a non-string expression', async () => {
178
+ const content = 'nls.localize("key", "hello " + someFunction())';
132
179
  const errors = [];
133
180
  assert.deepStrictEqual(await (0, localization_extractor_1.extractFromFile)(TEST_FILE, content, errors, quiet), {});
134
181
  assert.deepStrictEqual(errors, [
135
- "test.ts(1,20): Template literals are not supported for localization. Please use the additional arguments of the 'nls.localize' function to format strings"
182
+ "test.ts(1,31): 'someFunction()' is not a string constant"
136
183
  ]);
137
184
  });
138
185
  });
@@ -1 +1 @@
1
- {"version":3,"file":"localization-extractor.spec.js","sourceRoot":"","sources":["../src/localization-extractor.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localization-extractor.spec.js","sourceRoot":"","sources":["../src/localization-extractor.spec.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Localization } from './common';
2
- import { deepl, DeeplParameters } from './deepl-api';
2
+ import { deepl, DeeplParameters, DeeplResponse } from './deepl-api';
3
3
  export interface LocalizationOptions {
4
4
  freeApi: Boolean;
5
5
  authKey: string;
@@ -7,7 +7,7 @@ export interface LocalizationOptions {
7
7
  sourceLanguage?: string;
8
8
  targetLanguages: string[];
9
9
  }
10
- export type LocalizationFunction = (parameters: DeeplParameters) => Promise<string[]>;
10
+ export type LocalizationFunction = (parameters: DeeplParameters) => Promise<DeeplResponse>;
11
11
  export declare class LocalizationManager {
12
12
  private localizationFn;
13
13
  constructor(localizationFn?: typeof deepl);
@@ -1 +1 @@
1
- {"version":3,"file":"localization-manager.d.ts","sourceRoot":"","sources":["../src/localization-manager.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,YAAY,EAAoB,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAiB,eAAe,EAAyC,MAAM,aAAa,CAAC;AAE3G,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEtF,qBAAa,mBAAmB;IAEhB,OAAO,CAAC,cAAc;gBAAd,cAAc,eAAQ;IAEpC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgD9D,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMnE,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IA4B3I,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI7C,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhD,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe;CAoC9F;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnD"}
1
+ {"version":3,"file":"localization-manager.d.ts","sourceRoot":"","sources":["../src/localization-manager.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,YAAY,EAAoB,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAiB,eAAe,EAAE,aAAa,EAAyC,MAAM,aAAa,CAAC;AAE1H,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE3F,qBAAa,mBAAmB;IAEhB,OAAO,CAAC,cAAc;gBAAd,cAAc,eAAQ;IAEpC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmD9D,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMnE,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8B3I,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAO7C,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAMhD,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe;CAoC9F;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnD"}
@@ -60,8 +60,11 @@ class LocalizationManager {
60
60
  existingTranslations.set(targetLanguage, {});
61
61
  }
62
62
  }
63
- const results = await Promise.all(languages.map(language => this.translateLanguage(source, existingTranslations.get(language), language, options)));
64
- let result = results.reduce((acc, val) => acc && val, true);
63
+ let result = true;
64
+ for (const language of languages) {
65
+ const success = await this.translateLanguage(source, existingTranslations.get(language), language, options);
66
+ result = result && success;
67
+ }
65
68
  for (const targetLanguage of languages) {
66
69
  const targetPath = this.translationFileName(sourceFile, targetLanguage);
67
70
  try {
@@ -91,7 +94,9 @@ class LocalizationManager {
91
94
  source_lang: options.sourceLanguage?.toUpperCase(),
92
95
  text: map.text.map(e => this.addIgnoreTags(e)),
93
96
  tag_handling: ['xml'],
94
- ignore_tags: ['x']
97
+ ignore_tags: ['x'],
98
+ context: 'User interface labels and messages for an IDE (Integrated Development Environment) software application similar to Visual Studio Code. '
99
+ + "Terms like 'disabled' mean 'deactivated/turned off', 'terminal' means 'command-line terminal', 'host' means 'computer/server host'."
95
100
  });
96
101
  translationResponse.translations.forEach(({ text }, i) => {
97
102
  map.localize(i, this.removeIgnoreTags(text));
@@ -110,10 +115,15 @@ class LocalizationManager {
110
115
  }
111
116
  }
112
117
  addIgnoreTags(text) {
113
- return text.replace(/(\{\d*\})/g, '<x>$1</x>');
118
+ // Escape existing angle brackets so DeepL's XML parser doesn't treat them as tags
119
+ const escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
120
+ // Wrap placeholders like {0}, {1} in ignore tags to preserve them during translation
121
+ return escaped.replace(/(\{\d+\})/g, '<x>$1</x>');
114
122
  }
115
123
  removeIgnoreTags(text) {
116
- return text.replace(/<x>(\{\d+\})<\/x>/g, '$1');
124
+ const result = text.replace(/<x>(\{\d+\})<\/x>/g, '$1');
125
+ // Restore escaped angle brackets
126
+ return result.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');
117
127
  }
118
128
  buildLocalizationMap(source, target) {
119
129
  const functionMap = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"localization-manager.js","sourceRoot":"","sources":["../src/localization-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localization-manager.js","sourceRoot":"","sources":["../src/localization-manager.ts"],"names":[],"mappings":"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"}
@@ -81,5 +81,57 @@ describe('localization-manager#translateLanguage', () => {
81
81
  key: '[{1} {0}]'
82
82
  });
83
83
  });
84
+ it('should preserve angle brackets in text', async () => {
85
+ const input = {
86
+ key: 'Use <b>bold</b> text'
87
+ };
88
+ const target = {};
89
+ await manager.translateLanguage(input, target, 'EN', defaultOptions);
90
+ assert.deepStrictEqual(target, {
91
+ key: '[Use <b>bold</b> text]'
92
+ });
93
+ });
94
+ it('should preserve ampersands in text', async () => {
95
+ const input = {
96
+ key: 'foo & bar'
97
+ };
98
+ const target = {};
99
+ await manager.translateLanguage(input, target, 'EN', defaultOptions);
100
+ assert.deepStrictEqual(target, {
101
+ key: '[foo & bar]'
102
+ });
103
+ });
104
+ it('should preserve angle brackets combined with placeholders', async () => {
105
+ const input = {
106
+ key: '{0} is <b>greater</b> than {1}'
107
+ };
108
+ const target = {};
109
+ await manager.translateLanguage(input, target, 'EN', defaultOptions);
110
+ assert.deepStrictEqual(target, {
111
+ key: '[{0} is <b>greater</b> than {1}]'
112
+ });
113
+ });
114
+ it('should not wrap empty braces as placeholders', async () => {
115
+ const input = {
116
+ key: 'empty {} braces'
117
+ };
118
+ const target = {};
119
+ await manager.translateLanguage(input, target, 'EN', defaultOptions);
120
+ assert.deepStrictEqual(target, {
121
+ key: '[empty {} braces]'
122
+ });
123
+ });
124
+ it('should pass context to the localization function', async () => {
125
+ let receivedContext;
126
+ const contextCapture = new localization_manager_1.LocalizationManager(async (parameters) => {
127
+ receivedContext = parameters.context;
128
+ return mockLocalization(parameters);
129
+ });
130
+ const input = { key: 'value' };
131
+ const target = {};
132
+ await contextCapture.translateLanguage(input, target, 'EN', defaultOptions);
133
+ assert.ok(receivedContext, 'context should be defined');
134
+ assert.ok(receivedContext.includes('IDE'), 'context should mention IDE');
135
+ });
84
136
  });
85
137
  //# sourceMappingURL=localization-manager.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"localization-manager.spec.js","sourceRoot":"","sources":["../src/localization-manager.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,iCAAiC;AAEjC,iEAAkF;AAElF,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAEpD,KAAK,UAAU,gBAAgB,CAAC,UAA2B;QACvD,OAAO;YACH,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACxC,wBAAwB,EAAE,EAAE;gBAC5B,IAAI,EAAE,IAAI,KAAK,GAAG;aACrB,CAAC,CAAC;SACN,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,0CAAmB,CAAC,gBAAgB,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAwB;QACxC,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,CAAC,IAAI,CAAC;KAC1B,CAAC;IAEF,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,KAAK,GAAG;YACV,GAAG,EAAE,OAAO;SACf,CAAC;QACF,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACrE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE;YAC3B,GAAG,EAAE,SAAS;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,KAAK,GAAG;YACV,CAAC,EAAE;gBACC,CAAC,EAAE,GAAG;aACT;YACD,CAAC,EAAE,GAAG;SACT,CAAC;QACF,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACrE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE;YAC3B,CAAC,EAAE;gBACC,CAAC,EAAE,KAAK;aACX;YACD,CAAC,EAAE,KAAK;SACX,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,KAAK,GAAG;YACV,CAAC,EAAE,GAAG;SACT,CAAC;QACF,MAAM,MAAM,GAAG;YACX,CAAC,EAAE,GAAG;SACT,CAAC;QACF,MAAM,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACrE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE;YAC3B,CAAC,EAAE,GAAG;SACT,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,KAAK,GAAG;YACV,GAAG,EAAE,SAAS;SACjB,CAAC;QACF,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACrE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE;YAC3B,GAAG,EAAE,WAAW;SACnB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"localization-manager.spec.js","sourceRoot":"","sources":["../src/localization-manager.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theia/localization-manager",
3
- "version": "1.69.0-next.65+3b83c706b",
3
+ "version": "1.69.0-next.69+af53de2a5",
4
4
  "description": "Theia localization manager API.",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -46,5 +46,5 @@
46
46
  "nyc": {
47
47
  "extends": "../../configs/nyc.json"
48
48
  },
49
- "gitHead": "3b83c706bf9e72c496a4eadc9d56df0859498088"
49
+ "gitHead": "af53de2a51b7ab25a3700c3aaf7321916ef60c60"
50
50
  }
package/src/deepl-api.ts CHANGED
@@ -36,12 +36,14 @@ export async function deepl(
36
36
  while (textArray.length > 0) {
37
37
  textChunks.push(textArray.splice(0, deeplLimit));
38
38
  }
39
- const responses: DeeplResponse[] = await Promise.all(textChunks.map(async chunk => {
39
+ // Process chunks sequentially to respect DeepL API rate limits
40
+ const responses: DeeplResponse[] = [];
41
+ for (const chunk of textChunks) {
40
42
  const parameterCopy: DeeplParameters = { ...parameters, text: chunk };
41
43
  const url = `https://${sub_domain}.deepl.com/v2/translate`;
42
44
  const buffer = Buffer.from(toFormData(parameterCopy));
43
- return postWithRetry(url, parameters.auth_key, buffer, 1);
44
- }));
45
+ responses.push(await postWithRetry(url, parameters.auth_key, buffer, 1));
46
+ }
45
47
  const mergedResponse: DeeplResponse = { translations: [] };
46
48
  for (const response of responses) {
47
49
  mergedResponse.translations.push(...response.translations);
@@ -65,6 +67,16 @@ async function postWithRetry(url: string, key: string, buffer: Buffer, attempt:
65
67
  if ('message' in e && typeof e.message === 'string' && e.message.includes('Too Many Requests')) {
66
68
  return postWithRetry(url, key, buffer, attempt + 1);
67
69
  }
70
+ // Try to extract the error details from the DeepL response body
71
+ // eslint-disable-next-line no-null/no-null
72
+ if (typeof e === 'object' && e !== null && 'json' in e && typeof e.json === 'function') {
73
+ try {
74
+ const errorBody = await e.json();
75
+ console.error('DeepL error response:', JSON.stringify(errorBody));
76
+ } catch {
77
+ // Ignore if we can't parse the error body
78
+ }
79
+ }
68
80
  throw e;
69
81
  }
70
82
  }
@@ -97,9 +109,15 @@ function coerceTranslation(text: string): string {
97
109
  .replace(/\uff1f/g, '?');
98
110
  }
99
111
 
112
+ // Parameters that are used internally and should not be sent to the DeepL API
113
+ const internalParameters = new Set(['auth_key', 'free_api']);
114
+
100
115
  function toFormData(parameters: DeeplParameters): string {
101
116
  const str: string[] = [];
102
117
  for (const [key, value] of Object.entries(parameters)) {
118
+ if (internalParameters.has(key)) {
119
+ continue;
120
+ }
103
121
  if (typeof value === 'string') {
104
122
  str.push(encodeURIComponent(key) + '=' + encodeURIComponent(value.toString()));
105
123
  } else if (Array.isArray(value)) {
@@ -178,6 +196,7 @@ export interface DeeplParameters {
178
196
  outline_detection?: string
179
197
  splitting_tags?: string[]
180
198
  ignore_tags?: string[]
199
+ context?: string
181
200
  }
182
201
 
183
202
  export interface DeeplResponse {
@@ -139,12 +139,65 @@ describe('correctly extracts from file content', () => {
139
139
  ]);
140
140
  });
141
141
 
142
- it('should show error for template literals', async () => {
142
+ it('should extract from template literal without expressions', async () => {
143
143
  const content = 'nls.localize("key", `template literal value`)';
144
+ assert.deepStrictEqual(await extractFromFile(TEST_FILE, content), {
145
+ 'key': 'template literal value'
146
+ });
147
+ });
148
+
149
+ it('should dedent multiline template literal', async () => {
150
+ const content = [
151
+ 'nls.localize("key", `first line',
152
+ ' second line',
153
+ ' third line`)'
154
+ ].join('\n');
155
+ assert.deepStrictEqual(await extractFromFile(TEST_FILE, content), {
156
+ 'key': 'first line\nsecond line\nthird line'
157
+ });
158
+ });
159
+
160
+ it('should dedent multiline template literal with blank lines', async () => {
161
+ const content = [
162
+ 'nls.localize("key", `first paragraph.',
163
+ '',
164
+ ' second paragraph.`)'
165
+ ].join('\n');
166
+ assert.deepStrictEqual(await extractFromFile(TEST_FILE, content), {
167
+ 'key': 'first paragraph.\n\nsecond paragraph.'
168
+ });
169
+ });
170
+
171
+ it('should show error for template literals with expressions', async () => {
172
+ const content = 'const name = "World"; nls.localize("key", `Hello ${name}`)';
173
+ const errors: string[] = [];
174
+ assert.deepStrictEqual(await extractFromFile(TEST_FILE, content, errors, quiet), {});
175
+ assert.deepStrictEqual(errors, [
176
+ 'test.ts(1,42): Template literals with expressions are not supported for localization. ' +
177
+ 'Please use the additional arguments of the \'nls.localize\' function to format strings'
178
+ ]);
179
+ });
180
+
181
+ it('should extract from string concatenation', async () => {
182
+ const content = 'nls.localize("key", "Hello " + "World")';
183
+ assert.deepStrictEqual(await extractFromFile(TEST_FILE, content), {
184
+ 'key': 'Hello World'
185
+ });
186
+ });
187
+
188
+ it('should extract from multi-part string concatenation', async () => {
189
+ const content = 'nls.localize("key", "part one " + "part two " + "part three")';
190
+ assert.deepStrictEqual(await extractFromFile(TEST_FILE, content), {
191
+ 'key': 'part one part two part three'
192
+ });
193
+ });
194
+
195
+ it('should return an error when concatenation includes a non-string expression', async () => {
196
+ const content = 'nls.localize("key", "hello " + someFunction())';
144
197
  const errors: string[] = [];
145
198
  assert.deepStrictEqual(await extractFromFile(TEST_FILE, content, errors, quiet), {});
146
199
  assert.deepStrictEqual(errors, [
147
- "test.ts(1,20): Template literals are not supported for localization. Please use the additional arguments of the 'nls.localize' function to format strings"
200
+ "test.ts(1,31): 'someFunction()' is not a string constant"
148
201
  ]);
149
202
  });
150
203
 
@@ -351,12 +351,24 @@ function extractString(node: ts.Expression): string {
351
351
  }
352
352
  node = reference;
353
353
  }
354
- if (ts.isTemplateLiteral(node)) {
354
+ // Template literals without interpolations (e.g. `some text`) are treated as plain strings.
355
+ // Multiline template literals are dedented to remove source code indentation.
356
+ if (ts.isNoSubstitutionTemplateLiteral(node)) {
357
+ return dedent(node.text);
358
+ }
359
+ // Template literals with interpolated expressions (e.g. `Hello ${name}`) cannot be
360
+ // statically resolved, so they are rejected. Use nls.localize format args instead.
361
+ if (ts.isTemplateExpression(node)) {
355
362
  throw new TypeScriptError(
356
- "Template literals are not supported for localization. Please use the additional arguments of the 'nls.localize' function to format strings",
363
+ "Template literals with expressions are not supported for localization. Please use the additional arguments of the 'nls.localize' function to format strings",
357
364
  node
358
365
  );
359
366
  }
367
+ // String concatenation (e.g. 'part one ' + 'part two') is resolved by recursively
368
+ // extracting both sides. This allows splitting long localization strings across lines.
369
+ if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.PlusToken) {
370
+ return extractString(node.left) + extractString(node.right);
371
+ }
360
372
  if (!ts.isStringLiteralLike(node)) {
361
373
  throw new TypeScriptError(`'${node.getText()}' is not a string constant`, node);
362
374
  }
@@ -400,6 +412,37 @@ function isCommandLocalizeUtility(node: ts.Node): boolean {
400
412
  return node.expression.getText() === 'Command.toLocalizedCommand';
401
413
  }
402
414
 
415
+ /**
416
+ * Removes common leading whitespace from each line of a multiline string,
417
+ * similar to Python's `textwrap.dedent`. This is used to clean up template
418
+ * literals that inherit indentation from the surrounding source code.
419
+ */
420
+ function dedent(str: string): string {
421
+ const lines = str.split('\n');
422
+ if (lines.length <= 1) {
423
+ return str;
424
+ }
425
+ // Find the minimum indentation across all non-empty lines (skipping the first line)
426
+ let minIndent = Infinity;
427
+ for (let i = 1; i < lines.length; i++) {
428
+ const line = lines[i];
429
+ if (line.trim().length === 0) {
430
+ continue;
431
+ }
432
+ const indent = line.match(/^(\s*)/)?.[1].length ?? 0;
433
+ minIndent = Math.min(minIndent, indent);
434
+ }
435
+ if (minIndent === Infinity || minIndent === 0) {
436
+ return str;
437
+ }
438
+ // Remove the common indentation from all lines except the first
439
+ const dedented = [lines[0]];
440
+ for (let i = 1; i < lines.length; i++) {
441
+ dedented.push(lines[i].substring(minIndent));
442
+ }
443
+ return dedented.join('\n');
444
+ }
445
+
403
446
  const unescapeMap: Record<string, string> = {
404
447
  '\'': '\'',
405
448
  '"': '"',
@@ -88,4 +88,61 @@ describe('localization-manager#translateLanguage', () => {
88
88
  key: '[{1} {0}]'
89
89
  });
90
90
  });
91
+
92
+ it('should preserve angle brackets in text', async () => {
93
+ const input = {
94
+ key: 'Use <b>bold</b> text'
95
+ };
96
+ const target = {};
97
+ await manager.translateLanguage(input, target, 'EN', defaultOptions);
98
+ assert.deepStrictEqual(target, {
99
+ key: '[Use <b>bold</b> text]'
100
+ });
101
+ });
102
+
103
+ it('should preserve ampersands in text', async () => {
104
+ const input = {
105
+ key: 'foo & bar'
106
+ };
107
+ const target = {};
108
+ await manager.translateLanguage(input, target, 'EN', defaultOptions);
109
+ assert.deepStrictEqual(target, {
110
+ key: '[foo & bar]'
111
+ });
112
+ });
113
+
114
+ it('should preserve angle brackets combined with placeholders', async () => {
115
+ const input = {
116
+ key: '{0} is <b>greater</b> than {1}'
117
+ };
118
+ const target = {};
119
+ await manager.translateLanguage(input, target, 'EN', defaultOptions);
120
+ assert.deepStrictEqual(target, {
121
+ key: '[{0} is <b>greater</b> than {1}]'
122
+ });
123
+ });
124
+
125
+ it('should not wrap empty braces as placeholders', async () => {
126
+ const input = {
127
+ key: 'empty {} braces'
128
+ };
129
+ const target = {};
130
+ await manager.translateLanguage(input, target, 'EN', defaultOptions);
131
+ assert.deepStrictEqual(target, {
132
+ key: '[empty {} braces]'
133
+ });
134
+ });
135
+
136
+ it('should pass context to the localization function', async () => {
137
+ let receivedContext: string | undefined;
138
+ const contextCapture = new LocalizationManager(async (parameters: DeeplParameters) => {
139
+ receivedContext = parameters.context;
140
+ return mockLocalization(parameters);
141
+ });
142
+ const input = { key: 'value' };
143
+ const target = {};
144
+ await contextCapture.translateLanguage(input, target, 'EN', defaultOptions);
145
+ assert.ok(receivedContext, 'context should be defined');
146
+ assert.ok(receivedContext!.includes('IDE'), 'context should mention IDE');
147
+ });
91
148
  });
@@ -18,7 +18,7 @@ import * as chalk from 'chalk';
18
18
  import * as fs from 'fs-extra';
19
19
  import * as path from 'path';
20
20
  import { Localization, sortLocalization } from './common';
21
- import { deepl, DeeplLanguage, DeeplParameters, defaultLanguages, isSupportedLanguage } from './deepl-api';
21
+ import { deepl, DeeplLanguage, DeeplParameters, DeeplResponse, defaultLanguages, isSupportedLanguage } from './deepl-api';
22
22
 
23
23
  export interface LocalizationOptions {
24
24
  freeApi: Boolean
@@ -28,7 +28,7 @@ export interface LocalizationOptions {
28
28
  targetLanguages: string[]
29
29
  }
30
30
 
31
- export type LocalizationFunction = (parameters: DeeplParameters) => Promise<string[]>;
31
+ export type LocalizationFunction = (parameters: DeeplParameters) => Promise<DeeplResponse>;
32
32
 
33
33
  export class LocalizationManager {
34
34
 
@@ -66,8 +66,11 @@ export class LocalizationManager {
66
66
  existingTranslations.set(targetLanguage, {});
67
67
  }
68
68
  }
69
- const results = await Promise.all(languages.map(language => this.translateLanguage(source, existingTranslations.get(language)!, language, options)));
70
- let result = results.reduce((acc, val) => acc && val, true);
69
+ let result = true;
70
+ for (const language of languages) {
71
+ const success = await this.translateLanguage(source, existingTranslations.get(language)!, language, options);
72
+ result = result && success;
73
+ }
71
74
 
72
75
  for (const targetLanguage of languages) {
73
76
  const targetPath = this.translationFileName(sourceFile, targetLanguage);
@@ -99,7 +102,9 @@ export class LocalizationManager {
99
102
  source_lang: options.sourceLanguage?.toUpperCase() as DeeplLanguage,
100
103
  text: map.text.map(e => this.addIgnoreTags(e)),
101
104
  tag_handling: ['xml'],
102
- ignore_tags: ['x']
105
+ ignore_tags: ['x'],
106
+ context: 'User interface labels and messages for an IDE (Integrated Development Environment) software application similar to Visual Studio Code. '
107
+ + "Terms like 'disabled' mean 'deactivated/turned off', 'terminal' means 'command-line terminal', 'host' means 'computer/server host'."
103
108
  });
104
109
  translationResponse.translations.forEach(({ text }, i) => {
105
110
  map.localize(i, this.removeIgnoreTags(text));
@@ -117,11 +122,16 @@ export class LocalizationManager {
117
122
  }
118
123
 
119
124
  protected addIgnoreTags(text: string): string {
120
- return text.replace(/(\{\d*\})/g, '<x>$1</x>');
125
+ // Escape existing angle brackets so DeepL's XML parser doesn't treat them as tags
126
+ const escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
127
+ // Wrap placeholders like {0}, {1} in ignore tags to preserve them during translation
128
+ return escaped.replace(/(\{\d+\})/g, '<x>$1</x>');
121
129
  }
122
130
 
123
131
  protected removeIgnoreTags(text: string): string {
124
- return text.replace(/<x>(\{\d+\})<\/x>/g, '$1');
132
+ const result = text.replace(/<x>(\{\d+\})<\/x>/g, '$1');
133
+ // Restore escaped angle brackets
134
+ return result.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');
125
135
  }
126
136
 
127
137
  protected buildLocalizationMap(source: Localization, target: Localization): LocalizationMap {