@taon-dev/i18n 21.0.50 → 21.0.53
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/VERIFIED-BUILD-DATA.jsonc +3 -3
- package/browser/fesm2022/i18n-browser.mjs +91 -6
- package/browser/fesm2022/i18n-browser.mjs.map +1 -1
- package/browser/package.json +1 -1
- package/browser/types/i18n-browser.d.ts +11 -26
- package/browser-prod/fesm2022/i18n-browser-prod.mjs +91 -6
- package/browser-prod/fesm2022/i18n-browser-prod.mjs.map +1 -1
- package/browser-prod/package.json +1 -1
- package/browser-prod/types/i18n-browser-prod.d.ts +11 -26
- package/full-dts/build-info._auto-generated_.d.ts +1 -1
- package/full-dts/index._auto-generated_.d.ts +1 -2
- package/full-dts/local-translation.d.ts +8 -1
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/index._auto-generated_.d.ts +0 -1
- package/lib/index._auto-generated_.js +0 -1
- package/lib/index._auto-generated_.js.map +1 -1
- package/lib/local-translation.d.ts +8 -1
- package/lib/local-translation.js +93 -6
- package/lib/local-translation.js.map +1 -1
- package/lib/package.json +1 -1
- package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib-esm/lib/build-info._auto-generated_.js +1 -1
- package/lib-esm/lib/index._auto-generated_.d.ts +0 -1
- package/lib-esm/lib/index._auto-generated_.js +0 -1
- package/lib-esm/lib/index._auto-generated_.js.map +1 -1
- package/lib-esm/lib/local-translation.d.ts +8 -1
- package/lib-esm/lib/local-translation.js +93 -8
- package/lib-esm/lib/local-translation.js.map +1 -1
- package/lib-prod/build-info._auto-generated_.d.ts +1 -1
- package/lib-prod/build-info._auto-generated_.js +1 -1
- package/lib-prod/index._auto-generated_.d.ts +0 -1
- package/lib-prod/index._auto-generated_.js +0 -1
- package/lib-prod/index._auto-generated_.js.map +1 -1
- package/lib-prod/local-translation.d.ts +8 -1
- package/lib-prod/local-translation.js +93 -6
- package/lib-prod/local-translation.js.map +1 -1
- package/lib-prod/package.json +1 -1
- package/package.json +1 -1
- package/ts-source/browser-code/build-info._auto-generated_.ts +2 -2
- package/ts-source/browser-code/i18n/lib.translation.ts +1 -1
- package/ts-source/browser-code/i18n/translation.ts.en-US.i18n.data.ts +1 -1
- package/ts-source/browser-code/i18n/translation.ts.pl-PL.i18n.data.ts +1 -1
- package/ts-source/browser-code/index._auto-generated_.ts +1 -2
- package/ts-source/browser-code/index.scss +1 -1
- package/ts-source/browser-code/index.ts +1 -1
- package/ts-source/browser-code/local-translation.ts +36 -1
- package/ts-source/browser-code/start-cli.ts +1 -1
- package/ts-source/browser-code/translate.directive.ts +1 -1
- package/ts-source/browser-code/translate.pipe.ts +1 -1
- package/ts-source/browser-code/translate.service.ts +1 -1
- package/ts-source/browser-code/translation-manager.ts +1 -1
- package/ts-source/browser-code/translation.models.ts +1 -1
- package/ts-source/browser-code/translation.ts +1 -1
- package/ts-source/browser-code/utils-i18n-extract-gettext-translate-from-html.ts +1 -1
- package/ts-source/browser-code/utils-i18n-html.ts +1 -1
- package/ts-source/browser-code/utils-po-file.ts +1 -1
- package/ts-source/browser-code-prod/build-info._auto-generated_.ts +2 -2
- package/ts-source/browser-code-prod/i18n/lib.translation.ts +1 -1
- package/ts-source/browser-code-prod/i18n/translation.ts.en-US.i18n.data.ts +1 -1
- package/ts-source/browser-code-prod/i18n/translation.ts.pl-PL.i18n.data.ts +1 -1
- package/ts-source/browser-code-prod/index._auto-generated_.ts +1 -2
- package/ts-source/browser-code-prod/index.scss +1 -1
- package/ts-source/browser-code-prod/index.ts +1 -1
- package/ts-source/browser-code-prod/local-translation.ts +36 -1
- package/ts-source/browser-code-prod/start-cli.ts +1 -1
- package/ts-source/browser-code-prod/translate.directive.ts +1 -1
- package/ts-source/browser-code-prod/translate.pipe.ts +1 -1
- package/ts-source/browser-code-prod/translate.service.ts +1 -1
- package/ts-source/browser-code-prod/translation-manager.ts +1 -1
- package/ts-source/browser-code-prod/translation.models.ts +1 -1
- package/ts-source/browser-code-prod/translation.ts +1 -1
- package/ts-source/browser-code-prod/utils-i18n-extract-gettext-translate-from-html.ts +1 -1
- package/ts-source/browser-code-prod/utils-i18n-html.ts +1 -1
- package/ts-source/browser-code-prod/utils-po-file.ts +1 -1
- package/ts-source/websql-code/build-info._auto-generated_.ts +2 -2
- package/ts-source/websql-code/i18n/lib.translation.ts +1 -1
- package/ts-source/websql-code/i18n/translation.ts.en-US.i18n.data.ts +1 -1
- package/ts-source/websql-code/i18n/translation.ts.pl-PL.i18n.data.ts +1 -1
- package/ts-source/websql-code/index._auto-generated_.ts +1 -2
- package/ts-source/websql-code/index.scss +1 -1
- package/ts-source/websql-code/index.ts +1 -1
- package/ts-source/websql-code/local-translation.ts +36 -1
- package/ts-source/websql-code/start-cli.ts +1 -1
- package/ts-source/websql-code/translate.directive.ts +1 -1
- package/ts-source/websql-code/translate.pipe.ts +1 -1
- package/ts-source/websql-code/translate.service.ts +1 -1
- package/ts-source/websql-code/translation-manager.ts +1 -1
- package/ts-source/websql-code/translation.models.ts +1 -1
- package/ts-source/websql-code/translation.ts +1 -1
- package/ts-source/websql-code/utils-i18n-extract-gettext-translate-from-html.ts +1 -1
- package/ts-source/websql-code/utils-i18n-html.ts +1 -1
- package/ts-source/websql-code/utils-po-file.ts +1 -1
- package/ts-source/websql-code-prod/build-info._auto-generated_.ts +2 -2
- package/ts-source/websql-code-prod/i18n/lib.translation.ts +1 -1
- package/ts-source/websql-code-prod/i18n/translation.ts.en-US.i18n.data.ts +1 -1
- package/ts-source/websql-code-prod/i18n/translation.ts.pl-PL.i18n.data.ts +1 -1
- package/ts-source/websql-code-prod/index._auto-generated_.ts +1 -2
- package/ts-source/websql-code-prod/index.scss +1 -1
- package/ts-source/websql-code-prod/index.ts +1 -1
- package/ts-source/websql-code-prod/local-translation.ts +36 -1
- package/ts-source/websql-code-prod/start-cli.ts +1 -1
- package/ts-source/websql-code-prod/translate.directive.ts +1 -1
- package/ts-source/websql-code-prod/translate.pipe.ts +1 -1
- package/ts-source/websql-code-prod/translate.service.ts +1 -1
- package/ts-source/websql-code-prod/translation-manager.ts +1 -1
- package/ts-source/websql-code-prod/translation.models.ts +1 -1
- package/ts-source/websql-code-prod/translation.ts +1 -1
- package/ts-source/websql-code-prod/utils-i18n-extract-gettext-translate-from-html.ts +1 -1
- package/ts-source/websql-code-prod/utils-i18n-html.ts +1 -1
- package/ts-source/websql-code-prod/utils-po-file.ts +1 -1
- package/websql/fesm2022/i18n-websql.mjs +91 -6
- package/websql/fesm2022/i18n-websql.mjs.map +1 -1
- package/websql/package.json +1 -1
- package/websql/types/i18n-websql.d.ts +11 -26
- package/websql-prod/fesm2022/i18n-websql-prod.mjs +91 -6
- package/websql-prod/fesm2022/i18n-websql-prod.mjs.map +1 -1
- package/websql-prod/package.json +1 -1
- package/websql-prod/types/i18n-websql-prod.d.ts +11 -26
|
@@ -5,9 +5,15 @@ export interface TranslationOptions {
|
|
|
5
5
|
from: UtilsI18n.CommonLocaleCode;
|
|
6
6
|
to: UtilsI18n.CommonLocaleCode;
|
|
7
7
|
/**
|
|
8
|
-
* Nearby source-language text
|
|
8
|
+
* Nearby source-language text used only to give the translator
|
|
9
|
+
* additional context.
|
|
10
|
+
*
|
|
11
|
+
* Context is never returned from translate().
|
|
9
12
|
*/
|
|
10
13
|
context?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Source terms that should be replaced with specific translated terms.
|
|
16
|
+
*/
|
|
11
17
|
glossary?: Record<string, string>;
|
|
12
18
|
}
|
|
13
19
|
export interface AiDownloadProgress {
|
|
@@ -64,5 +70,6 @@ export declare class LocalTranslationService {
|
|
|
64
70
|
private warmupTranslator;
|
|
65
71
|
translate(options: TranslationOptions): Promise<string>;
|
|
66
72
|
private protectGlossary;
|
|
73
|
+
private protectInterpolation;
|
|
67
74
|
private getModelsCachePath;
|
|
68
75
|
}
|
|
@@ -25,6 +25,6 @@ exports.CURRENT_PACKAGE_TAON_VERSION = 'v21';
|
|
|
25
25
|
/**
|
|
26
26
|
* Autogenerated by current cli tool. Use *tnp release* to bump version.
|
|
27
27
|
*/
|
|
28
|
-
exports.CURRENT_PACKAGE_VERSION = '21.0.
|
|
28
|
+
exports.CURRENT_PACKAGE_VERSION = '21.0.53';
|
|
29
29
|
// THIS FILE IS GENERATED - DO NOT MODIFY
|
|
30
30
|
//# sourceMappingURL=build-info._auto-generated_.js.map
|
|
@@ -31,5 +31,4 @@ __exportStar(require("./translation"), exports);
|
|
|
31
31
|
__exportStar(require("./utils-i18n-extract-gettext-translate-from-html"), exports);
|
|
32
32
|
__exportStar(require("./utils-i18n-html"), exports);
|
|
33
33
|
__exportStar(require("./utils-po-file"), exports);
|
|
34
|
-
__exportStar(require("./i18n/lib.translation"), exports);
|
|
35
34
|
//# sourceMappingURL=index._auto-generated_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index._auto-generated_.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,cAAc;AACd,kEAAkE;AAClE,wCAAwC;AACxC,wDAAwD;AACxD,kCAAkC;AAClC,gEAA8C;AAC9C,sDAAoC;AACpC,8CAA4B;AAC5B,KAAK;AACL,KAAK;AACL,KAAK;AACL,wDAAsC;AACtC,uDAAqC;AACrC,gDAA8B;AAC9B,mFAAiE;AACjE,oDAAkC;AAClC,kDAAgC
|
|
1
|
+
{"version":3,"file":"index._auto-generated_.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,cAAc;AACd,kEAAkE;AAClE,wCAAwC;AACxC,wDAAwD;AACxD,kCAAkC;AAClC,gEAA8C;AAC9C,sDAAoC;AACpC,8CAA4B;AAC5B,KAAK;AACL,KAAK;AACL,KAAK;AACL,wDAAsC;AACtC,uDAAqC;AACrC,gDAA8B;AAC9B,mFAAiE;AACjE,oDAAkC;AAClC,kDAAgC"}
|
|
@@ -4,9 +4,15 @@ export interface TranslationOptions {
|
|
|
4
4
|
from: UtilsI18n.CommonLocaleCode;
|
|
5
5
|
to: UtilsI18n.CommonLocaleCode;
|
|
6
6
|
/**
|
|
7
|
-
* Nearby source-language text
|
|
7
|
+
* Nearby source-language text used only to give the translator
|
|
8
|
+
* additional context.
|
|
9
|
+
*
|
|
10
|
+
* Context is never returned from translate().
|
|
8
11
|
*/
|
|
9
12
|
context?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Source terms that should be replaced with specific translated terms.
|
|
15
|
+
*/
|
|
10
16
|
glossary?: Record<string, string>;
|
|
11
17
|
}
|
|
12
18
|
export interface AiDownloadProgress {
|
|
@@ -63,5 +69,6 @@ export declare class LocalTranslationService {
|
|
|
63
69
|
private warmupTranslator;
|
|
64
70
|
translate(options: TranslationOptions): Promise<string>;
|
|
65
71
|
private protectGlossary;
|
|
72
|
+
private protectInterpolation;
|
|
66
73
|
private getModelsCachePath;
|
|
67
74
|
}
|
package/lib/local-translation.js
CHANGED
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LocalTranslationService = void 0;
|
|
4
|
+
//#region imports
|
|
4
5
|
const lib_1 = require("tnp-core/lib");
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region constants
|
|
5
8
|
const MODEL_ID = 'Xenova/nllb-200-distilled-600M';
|
|
6
9
|
const nllbLanguageCodes = {
|
|
7
10
|
'en-US': 'eng_Latn',
|
|
8
11
|
'pl-PL': 'pol_Latn',
|
|
9
12
|
'de-DE': 'deu_Latn',
|
|
10
13
|
};
|
|
14
|
+
const CONTEXT_SEPARATOR = '→';
|
|
15
|
+
//#endregion
|
|
11
16
|
class LocalTranslationService {
|
|
17
|
+
//#region fields & getters
|
|
12
18
|
translatorPromise;
|
|
13
19
|
aiReady = false;
|
|
14
20
|
warmupPromise;
|
|
15
21
|
progressListeners = new Set();
|
|
22
|
+
//#endregion
|
|
16
23
|
/**
|
|
17
24
|
* Downloads, caches and loads the translation model.
|
|
18
25
|
*
|
|
19
26
|
* Multiple simultaneous calls share the same initialization promise.
|
|
20
27
|
* After this resolves, translate() reuses the already loaded model.
|
|
21
28
|
*/
|
|
29
|
+
//#region methods / make sure ai downloaded
|
|
22
30
|
async makeSureAiDownloaded(options = {}) {
|
|
23
31
|
//#region @backendFunc
|
|
24
32
|
const { onProgress, warmup = false } = options;
|
|
@@ -38,12 +46,16 @@ class LocalTranslationService {
|
|
|
38
46
|
}
|
|
39
47
|
//#endregion
|
|
40
48
|
}
|
|
49
|
+
//#endregion
|
|
41
50
|
/**
|
|
42
51
|
* True only in this process after pipeline initialization succeeded.
|
|
43
52
|
*/
|
|
53
|
+
//#region methods / is ai ready
|
|
44
54
|
isAiReady() {
|
|
45
55
|
return this.aiReady;
|
|
46
56
|
}
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region methods / get translator
|
|
47
59
|
getTranslator() {
|
|
48
60
|
this.translatorPromise ??= this.createTranslator().catch(error => {
|
|
49
61
|
// Allow a later call to retry after a network or disk failure.
|
|
@@ -53,6 +65,8 @@ class LocalTranslationService {
|
|
|
53
65
|
});
|
|
54
66
|
return this.translatorPromise;
|
|
55
67
|
}
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region methods / create translator
|
|
56
70
|
async createTranslator() {
|
|
57
71
|
//#region @backendFunc
|
|
58
72
|
//#region @esmRemove
|
|
@@ -74,6 +88,8 @@ class LocalTranslationService {
|
|
|
74
88
|
//#endregion
|
|
75
89
|
return void 0;
|
|
76
90
|
}
|
|
91
|
+
//#endregion
|
|
92
|
+
//#region methods / emit progress
|
|
77
93
|
emitProgress(progress) {
|
|
78
94
|
for (const listener of this.progressListeners) {
|
|
79
95
|
try {
|
|
@@ -84,6 +100,8 @@ class LocalTranslationService {
|
|
|
84
100
|
}
|
|
85
101
|
}
|
|
86
102
|
}
|
|
103
|
+
//#endregion
|
|
104
|
+
//#region methods / warmup translator
|
|
87
105
|
warmupTranslator(translator) {
|
|
88
106
|
this.warmupPromise ??= translator('Hello.', {
|
|
89
107
|
src_lang: 'eng_Latn',
|
|
@@ -97,6 +115,8 @@ class LocalTranslationService {
|
|
|
97
115
|
});
|
|
98
116
|
return this.warmupPromise;
|
|
99
117
|
}
|
|
118
|
+
//#endregion
|
|
119
|
+
//#region methods / translate
|
|
100
120
|
async translate(options) {
|
|
101
121
|
//#region @backendFunc
|
|
102
122
|
let { text, context, from, to, glossary } = options;
|
|
@@ -115,19 +135,54 @@ class LocalTranslationService {
|
|
|
115
135
|
if (!tgtLang) {
|
|
116
136
|
throw new Error(`Unsupported target translation locale: ${toOrg}`);
|
|
117
137
|
}
|
|
118
|
-
|
|
119
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Context is included so NLLB can use it while translating,
|
|
140
|
+
* but only content after CONTEXT_SEPARATOR is returned.
|
|
141
|
+
*/
|
|
142
|
+
const hasContext = !!context?.trim();
|
|
143
|
+
const input = hasContext
|
|
144
|
+
? `${context.trim()}\n\n${CONTEXT_SEPARATOR}\n\n${text.trim()}`
|
|
120
145
|
: text;
|
|
121
|
-
|
|
146
|
+
/**
|
|
147
|
+
* Protect [[ ... ]] before doing glossary substitutions.
|
|
148
|
+
*
|
|
149
|
+
* This is intentionally first so glossary entries can never
|
|
150
|
+
* accidentally modify interpolation expressions.
|
|
151
|
+
*/
|
|
152
|
+
const protectedInterpolation = this.protectInterpolation(input);
|
|
153
|
+
const protectedGlossary = this.protectGlossary(protectedInterpolation.preparedText, glossary);
|
|
122
154
|
const translator = await this.getTranslator();
|
|
123
|
-
const result = await translator(
|
|
155
|
+
const result = await translator(protectedGlossary.preparedText, {
|
|
124
156
|
src_lang: srcLang,
|
|
125
157
|
tgt_lang: tgtLang,
|
|
126
158
|
});
|
|
127
|
-
|
|
128
|
-
|
|
159
|
+
let translatedText = result[0]?.translation_text ?? '';
|
|
160
|
+
/**
|
|
161
|
+
* Restore glossary values first, then interpolation expressions.
|
|
162
|
+
*/
|
|
163
|
+
translatedText = protectedGlossary.restore(translatedText);
|
|
164
|
+
translatedText = protectedInterpolation.restore(translatedText);
|
|
165
|
+
/**
|
|
166
|
+
* Remove translated context from the final result.
|
|
167
|
+
*/
|
|
168
|
+
if (hasContext) {
|
|
169
|
+
const separatorIndex = translatedText.lastIndexOf('→');
|
|
170
|
+
if (separatorIndex !== -1) {
|
|
171
|
+
translatedText = translatedText.slice(separatorIndex + 1).trim();
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// separator disappeared — never return context accidentally
|
|
175
|
+
return this.translate({
|
|
176
|
+
...options,
|
|
177
|
+
context: undefined,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return translatedText;
|
|
129
182
|
//#endregion
|
|
130
183
|
}
|
|
184
|
+
//#endregion
|
|
185
|
+
//#region methods / protect glossary
|
|
131
186
|
protectGlossary(text, glossary) {
|
|
132
187
|
if (!glossary || Object.keys(glossary).length === 0) {
|
|
133
188
|
return {
|
|
@@ -158,6 +213,38 @@ class LocalTranslationService {
|
|
|
158
213
|
},
|
|
159
214
|
};
|
|
160
215
|
}
|
|
216
|
+
//#endregion
|
|
217
|
+
//#region methods / protect interpolation
|
|
218
|
+
protectInterpolation(text) {
|
|
219
|
+
const replacements = [];
|
|
220
|
+
const preparedText = text.replace(/\[\[[\s\S]*?\]\]/g, originalValue => {
|
|
221
|
+
const placeholder = `TAONINTERPOLATION${replacements.length}PLACEHOLDER`;
|
|
222
|
+
replacements.push({
|
|
223
|
+
placeholder,
|
|
224
|
+
originalValue,
|
|
225
|
+
});
|
|
226
|
+
return placeholder;
|
|
227
|
+
});
|
|
228
|
+
return {
|
|
229
|
+
preparedText,
|
|
230
|
+
restore(translatedText) {
|
|
231
|
+
let result = translatedText;
|
|
232
|
+
for (const replacement of replacements) {
|
|
233
|
+
if (!result.includes(replacement.placeholder)) {
|
|
234
|
+
console.error(`Translation model removed interpolation placeholder ` +
|
|
235
|
+
`"${replacement.placeholder}" while translating "${text}". ` +
|
|
236
|
+
`Appending "${replacement.originalValue}" manually.`);
|
|
237
|
+
result = `${result.trimEnd()} ${replacement.originalValue}`;
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
result = result.replaceAll(replacement.placeholder, replacement.originalValue);
|
|
241
|
+
}
|
|
242
|
+
return result;
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
//#endregion
|
|
247
|
+
//#region methods / get models cache path
|
|
161
248
|
getModelsCachePath() {
|
|
162
249
|
const cachePath = (0, lib_1.crossPlatformPath)([
|
|
163
250
|
lib_1.UtilsOs.getRealHomeDir(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-translation.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;AAAA,sCAOsB;
|
|
1
|
+
{"version":3,"file":"local-translation.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
package/lib/package.json
CHANGED
|
@@ -22,6 +22,6 @@ export const CURRENT_PACKAGE_TAON_VERSION = 'v21';
|
|
|
22
22
|
/**
|
|
23
23
|
* Autogenerated by current cli tool. Use *tnp release* to bump version.
|
|
24
24
|
*/
|
|
25
|
-
export const CURRENT_PACKAGE_VERSION = '21.0.
|
|
25
|
+
export const CURRENT_PACKAGE_VERSION = '21.0.53';
|
|
26
26
|
// THIS FILE IS GENERATED - DO NOT MODIFY
|
|
27
27
|
//# sourceMappingURL=build-info._auto-generated_.js.map
|
|
@@ -15,5 +15,4 @@ export * from './translation';
|
|
|
15
15
|
export * from './utils-i18n-extract-gettext-translate-from-html';
|
|
16
16
|
export * from './utils-i18n-html';
|
|
17
17
|
export * from './utils-po-file';
|
|
18
|
-
export * from './i18n/lib.translation';
|
|
19
18
|
//# sourceMappingURL=index._auto-generated_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index._auto-generated_.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,cAAc;AACd,kEAAkE;AAClE,wCAAwC;AACxC,wDAAwD;AACxD,kCAAkC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,KAAK;AACL,KAAK;AACL,KAAK;AACL,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,kDAAkD,CAAC;AACjE,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC
|
|
1
|
+
{"version":3,"file":"index._auto-generated_.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,cAAc;AACd,kEAAkE;AAClE,wCAAwC;AACxC,wDAAwD;AACxD,kCAAkC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,KAAK;AACL,KAAK;AACL,KAAK;AACL,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,kDAAkD,CAAC;AACjE,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
@@ -4,9 +4,15 @@ export interface TranslationOptions {
|
|
|
4
4
|
from: UtilsI18n.CommonLocaleCode;
|
|
5
5
|
to: UtilsI18n.CommonLocaleCode;
|
|
6
6
|
/**
|
|
7
|
-
* Nearby source-language text
|
|
7
|
+
* Nearby source-language text used only to give the translator
|
|
8
|
+
* additional context.
|
|
9
|
+
*
|
|
10
|
+
* Context is never returned from translate().
|
|
8
11
|
*/
|
|
9
12
|
context?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Source terms that should be replaced with specific translated terms.
|
|
15
|
+
*/
|
|
10
16
|
glossary?: Record<string, string>;
|
|
11
17
|
}
|
|
12
18
|
export interface AiDownloadProgress {
|
|
@@ -63,5 +69,6 @@ export declare class LocalTranslationService {
|
|
|
63
69
|
private warmupTranslator;
|
|
64
70
|
translate(options: TranslationOptions): Promise<string>;
|
|
65
71
|
private protectGlossary;
|
|
72
|
+
private protectInterpolation;
|
|
66
73
|
private getModelsCachePath;
|
|
67
74
|
}
|
|
@@ -1,21 +1,29 @@
|
|
|
1
|
+
//#region imports
|
|
1
2
|
import { crossPlatformPath, dotTaonFolder, UtilsOs, _, Helpers, } from 'tnp-core/lib-esm';
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region constants
|
|
2
5
|
const MODEL_ID = 'Xenova/nllb-200-distilled-600M';
|
|
3
6
|
const nllbLanguageCodes = {
|
|
4
7
|
'en-US': 'eng_Latn',
|
|
5
8
|
'pl-PL': 'pol_Latn',
|
|
6
9
|
'de-DE': 'deu_Latn',
|
|
7
10
|
};
|
|
11
|
+
const CONTEXT_SEPARATOR = '→';
|
|
12
|
+
//#endregion
|
|
8
13
|
export class LocalTranslationService {
|
|
14
|
+
//#region fields & getters
|
|
9
15
|
translatorPromise;
|
|
10
16
|
aiReady = false;
|
|
11
17
|
warmupPromise;
|
|
12
18
|
progressListeners = new Set();
|
|
19
|
+
//#endregion
|
|
13
20
|
/**
|
|
14
21
|
* Downloads, caches and loads the translation model.
|
|
15
22
|
*
|
|
16
23
|
* Multiple simultaneous calls share the same initialization promise.
|
|
17
24
|
* After this resolves, translate() reuses the already loaded model.
|
|
18
25
|
*/
|
|
26
|
+
//#region methods / make sure ai downloaded
|
|
19
27
|
async makeSureAiDownloaded(options = {}) {
|
|
20
28
|
//#region @backendFunc
|
|
21
29
|
const { onProgress, warmup = false } = options;
|
|
@@ -35,12 +43,16 @@ export class LocalTranslationService {
|
|
|
35
43
|
}
|
|
36
44
|
//#endregion
|
|
37
45
|
}
|
|
46
|
+
//#endregion
|
|
38
47
|
/**
|
|
39
48
|
* True only in this process after pipeline initialization succeeded.
|
|
40
49
|
*/
|
|
50
|
+
//#region methods / is ai ready
|
|
41
51
|
isAiReady() {
|
|
42
52
|
return this.aiReady;
|
|
43
53
|
}
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region methods / get translator
|
|
44
56
|
getTranslator() {
|
|
45
57
|
this.translatorPromise ??= this.createTranslator().catch(error => {
|
|
46
58
|
// Allow a later call to retry after a network or disk failure.
|
|
@@ -50,6 +62,8 @@ export class LocalTranslationService {
|
|
|
50
62
|
});
|
|
51
63
|
return this.translatorPromise;
|
|
52
64
|
}
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region methods / create translator
|
|
53
67
|
async createTranslator() {
|
|
54
68
|
//#region @backendFunc
|
|
55
69
|
/* */
|
|
@@ -73,11 +87,11 @@ export class LocalTranslationService {
|
|
|
73
87
|
/* */
|
|
74
88
|
/* */
|
|
75
89
|
/* */
|
|
76
|
-
/* */
|
|
77
|
-
/* */
|
|
78
90
|
//#endregion
|
|
79
91
|
return void 0;
|
|
80
92
|
}
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region methods / emit progress
|
|
81
95
|
emitProgress(progress) {
|
|
82
96
|
for (const listener of this.progressListeners) {
|
|
83
97
|
try {
|
|
@@ -88,6 +102,8 @@ export class LocalTranslationService {
|
|
|
88
102
|
}
|
|
89
103
|
}
|
|
90
104
|
}
|
|
105
|
+
//#endregion
|
|
106
|
+
//#region methods / warmup translator
|
|
91
107
|
warmupTranslator(translator) {
|
|
92
108
|
this.warmupPromise ??= translator('Hello.', {
|
|
93
109
|
src_lang: 'eng_Latn',
|
|
@@ -101,6 +117,8 @@ export class LocalTranslationService {
|
|
|
101
117
|
});
|
|
102
118
|
return this.warmupPromise;
|
|
103
119
|
}
|
|
120
|
+
//#endregion
|
|
121
|
+
//#region methods / translate
|
|
104
122
|
async translate(options) {
|
|
105
123
|
//#region @backendFunc
|
|
106
124
|
let { text, context, from, to, glossary } = options;
|
|
@@ -119,19 +137,54 @@ export class LocalTranslationService {
|
|
|
119
137
|
if (!tgtLang) {
|
|
120
138
|
throw new Error(`Unsupported target translation locale: ${toOrg}`);
|
|
121
139
|
}
|
|
122
|
-
|
|
123
|
-
|
|
140
|
+
/**
|
|
141
|
+
* Context is included so NLLB can use it while translating,
|
|
142
|
+
* but only content after CONTEXT_SEPARATOR is returned.
|
|
143
|
+
*/
|
|
144
|
+
const hasContext = !!context?.trim();
|
|
145
|
+
const input = hasContext
|
|
146
|
+
? `${context.trim()}\n\n${CONTEXT_SEPARATOR}\n\n${text.trim()}`
|
|
124
147
|
: text;
|
|
125
|
-
|
|
148
|
+
/**
|
|
149
|
+
* Protect [[ ... ]] before doing glossary substitutions.
|
|
150
|
+
*
|
|
151
|
+
* This is intentionally first so glossary entries can never
|
|
152
|
+
* accidentally modify interpolation expressions.
|
|
153
|
+
*/
|
|
154
|
+
const protectedInterpolation = this.protectInterpolation(input);
|
|
155
|
+
const protectedGlossary = this.protectGlossary(protectedInterpolation.preparedText, glossary);
|
|
126
156
|
const translator = await this.getTranslator();
|
|
127
|
-
const result = await translator(
|
|
157
|
+
const result = await translator(protectedGlossary.preparedText, {
|
|
128
158
|
src_lang: srcLang,
|
|
129
159
|
tgt_lang: tgtLang,
|
|
130
160
|
});
|
|
131
|
-
|
|
132
|
-
|
|
161
|
+
let translatedText = result[0]?.translation_text ?? '';
|
|
162
|
+
/**
|
|
163
|
+
* Restore glossary values first, then interpolation expressions.
|
|
164
|
+
*/
|
|
165
|
+
translatedText = protectedGlossary.restore(translatedText);
|
|
166
|
+
translatedText = protectedInterpolation.restore(translatedText);
|
|
167
|
+
/**
|
|
168
|
+
* Remove translated context from the final result.
|
|
169
|
+
*/
|
|
170
|
+
if (hasContext) {
|
|
171
|
+
const separatorIndex = translatedText.lastIndexOf('→');
|
|
172
|
+
if (separatorIndex !== -1) {
|
|
173
|
+
translatedText = translatedText.slice(separatorIndex + 1).trim();
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
// separator disappeared — never return context accidentally
|
|
177
|
+
return this.translate({
|
|
178
|
+
...options,
|
|
179
|
+
context: undefined,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return translatedText;
|
|
133
184
|
//#endregion
|
|
134
185
|
}
|
|
186
|
+
//#endregion
|
|
187
|
+
//#region methods / protect glossary
|
|
135
188
|
protectGlossary(text, glossary) {
|
|
136
189
|
if (!glossary || Object.keys(glossary).length === 0) {
|
|
137
190
|
return {
|
|
@@ -162,6 +215,38 @@ export class LocalTranslationService {
|
|
|
162
215
|
},
|
|
163
216
|
};
|
|
164
217
|
}
|
|
218
|
+
//#endregion
|
|
219
|
+
//#region methods / protect interpolation
|
|
220
|
+
protectInterpolation(text) {
|
|
221
|
+
const replacements = [];
|
|
222
|
+
const preparedText = text.replace(/\[\[[\s\S]*?\]\]/g, originalValue => {
|
|
223
|
+
const placeholder = `TAONINTERPOLATION${replacements.length}PLACEHOLDER`;
|
|
224
|
+
replacements.push({
|
|
225
|
+
placeholder,
|
|
226
|
+
originalValue,
|
|
227
|
+
});
|
|
228
|
+
return placeholder;
|
|
229
|
+
});
|
|
230
|
+
return {
|
|
231
|
+
preparedText,
|
|
232
|
+
restore(translatedText) {
|
|
233
|
+
let result = translatedText;
|
|
234
|
+
for (const replacement of replacements) {
|
|
235
|
+
if (!result.includes(replacement.placeholder)) {
|
|
236
|
+
console.error(`Translation model removed interpolation placeholder ` +
|
|
237
|
+
`"${replacement.placeholder}" while translating "${text}". ` +
|
|
238
|
+
`Appending "${replacement.originalValue}" manually.`);
|
|
239
|
+
result = `${result.trimEnd()} ${replacement.originalValue}`;
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
result = result.replaceAll(replacement.placeholder, replacement.originalValue);
|
|
243
|
+
}
|
|
244
|
+
return result;
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
//#endregion
|
|
249
|
+
//#region methods / get models cache path
|
|
165
250
|
getModelsCachePath() {
|
|
166
251
|
const cachePath = crossPlatformPath([
|
|
167
252
|
UtilsOs.getRealHomeDir(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-translation.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EAEb,OAAO,EACP,CAAC,EACD,OAAO,GACR,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"local-translation.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,6 @@ export const CURRENT_PACKAGE_TAON_VERSION = 'v21';
|
|
|
22
22
|
/**
|
|
23
23
|
* Autogenerated by current cli tool. Use *tnp release* to bump version.
|
|
24
24
|
*/
|
|
25
|
-
export const CURRENT_PACKAGE_VERSION = '21.0.
|
|
25
|
+
export const CURRENT_PACKAGE_VERSION = '21.0.53';
|
|
26
26
|
// THIS FILE IS GENERATED - DO NOT MODIFY
|
|
27
27
|
//# sourceMappingURL=build-info._auto-generated_.js.map
|
|
@@ -15,5 +15,4 @@ export * from './translation';
|
|
|
15
15
|
export * from './utils-i18n-extract-gettext-translate-from-html';
|
|
16
16
|
export * from './utils-i18n-html';
|
|
17
17
|
export * from './utils-po-file';
|
|
18
|
-
export * from './i18n/lib.translation';
|
|
19
18
|
//# sourceMappingURL=index._auto-generated_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index._auto-generated_.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,cAAc;AACd,kEAAkE;AAClE,wCAAwC;AACxC,wDAAwD;AACxD,kCAAkC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,KAAK;AACL,KAAK;AACL,KAAK;AACL,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,kDAAkD,CAAC;AACjE,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC
|
|
1
|
+
{"version":3,"file":"index._auto-generated_.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,cAAc;AACd,kEAAkE;AAClE,wCAAwC;AACxC,wDAAwD;AACxD,kCAAkC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,KAAK;AACL,KAAK;AACL,KAAK;AACL,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,kDAAkD,CAAC;AACjE,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
@@ -4,9 +4,15 @@ export interface TranslationOptions {
|
|
|
4
4
|
from: UtilsI18n__NS__CommonLocaleCode;
|
|
5
5
|
to: UtilsI18n__NS__CommonLocaleCode;
|
|
6
6
|
/**
|
|
7
|
-
* Nearby source-language text
|
|
7
|
+
* Nearby source-language text used only to give the translator
|
|
8
|
+
* additional context.
|
|
9
|
+
*
|
|
10
|
+
* Context is never returned from translate().
|
|
8
11
|
*/
|
|
9
12
|
context?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Source terms that should be replaced with specific translated terms.
|
|
15
|
+
*/
|
|
10
16
|
glossary?: Record<string, string>;
|
|
11
17
|
}
|
|
12
18
|
export interface AiDownloadProgress {
|
|
@@ -63,5 +69,6 @@ export declare class LocalTranslationService {
|
|
|
63
69
|
private warmupTranslator;
|
|
64
70
|
translate(options: TranslationOptions): Promise<string>;
|
|
65
71
|
private protectGlossary;
|
|
72
|
+
private protectInterpolation;
|
|
66
73
|
private getModelsCachePath;
|
|
67
74
|
}
|