@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.
- package/lib/deepl-api.d.ts +1 -0
- package/lib/deepl-api.d.ts.map +1 -1
- package/lib/deepl-api.js +21 -3
- package/lib/deepl-api.js.map +1 -1
- package/lib/localization-extractor.js +44 -2
- package/lib/localization-extractor.js.map +1 -1
- package/lib/localization-extractor.spec.js +49 -2
- package/lib/localization-extractor.spec.js.map +1 -1
- package/lib/localization-manager.d.ts +2 -2
- package/lib/localization-manager.d.ts.map +1 -1
- package/lib/localization-manager.js +15 -5
- package/lib/localization-manager.js.map +1 -1
- package/lib/localization-manager.spec.js +52 -0
- package/lib/localization-manager.spec.js.map +1 -1
- package/package.json +2 -2
- package/src/deepl-api.ts +22 -3
- package/src/localization-extractor.spec.ts +55 -2
- package/src/localization-extractor.ts +45 -2
- package/src/localization-manager.spec.ts +57 -0
- package/src/localization-manager.ts +17 -7
package/lib/deepl-api.d.ts
CHANGED
package/lib/deepl-api.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|
package/lib/deepl-api.js.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
309
|
-
|
|
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
|
|
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,
|
|
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<
|
|
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;
|
|
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
|
-
|
|
64
|
-
|
|
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
|
-
|
|
118
|
+
// Escape existing angle brackets so DeepL's XML parser doesn't treat them as tags
|
|
119
|
+
const escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
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
|
-
|
|
124
|
+
const result = text.replace(/<x>(\{\d+\})<\/x>/g, '$1');
|
|
125
|
+
// Restore escaped angle brackets
|
|
126
|
+
return result.replace(/</g, '<').replace(/>/g, '>').replace(/&/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":";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,+BAA+B;AAC/B,+BAA+B;AAC/B,6BAA6B;AAC7B,qCAA0D;AAC1D,
|
|
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.
|
|
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": "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
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<
|
|
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
|
-
|
|
70
|
-
|
|
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
|
-
|
|
125
|
+
// Escape existing angle brackets so DeepL's XML parser doesn't treat them as tags
|
|
126
|
+
const escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
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
|
-
|
|
132
|
+
const result = text.replace(/<x>(\{\d+\})<\/x>/g, '$1');
|
|
133
|
+
// Restore escaped angle brackets
|
|
134
|
+
return result.replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&');
|
|
125
135
|
}
|
|
126
136
|
|
|
127
137
|
protected buildLocalizationMap(source: Localization, target: Localization): LocalizationMap {
|