@yxw007/translate 0.3.2 → 0.4.0
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/README.md +13 -2
- package/README_zh-CN.md +12 -1
- package/dist/browser/index.cjs +431 -33
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.esm.js +426 -34
- package/dist/browser/index.esm.js.map +1 -1
- package/dist/browser/index.esm.min.js +1 -1
- package/dist/browser/index.esm.min.js.map +1 -1
- package/dist/browser/index.min.cjs +1 -1
- package/dist/browser/index.min.cjs.map +1 -1
- package/dist/browser/index.umd.js +431 -33
- package/dist/browser/index.umd.js.map +1 -1
- package/dist/browser/index.umd.min.js +1 -1
- package/dist/browser/index.umd.min.js.map +1 -1
- package/dist/index.d.ts +2147 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/node/index.cjs +431 -33
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +426 -34
- package/dist/node/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// translate v0.
|
|
1
|
+
// translate v0.4.0 Copyright (c) 2025 Potter<aa4790139@gmail.com> and contributors
|
|
2
2
|
(function (global, factory) {
|
|
3
3
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('fs/promises'), require('fs'), require('path'), require('@aws-sdk/client-translate'), require('crypto')) :
|
|
4
4
|
typeof define === 'function' && define.amd ? define(['exports', 'fs/promises', 'fs', 'path', '@aws-sdk/client-translate', 'crypto'], factory) :
|
|
@@ -13,6 +13,14 @@
|
|
|
13
13
|
Error.captureStackTrace(this, this.constructor);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
+
class CheckLanguageError extends Error {
|
|
17
|
+
region;
|
|
18
|
+
constructor(region, message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.region = region;
|
|
21
|
+
Error.captureStackTrace(this, this.constructor);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
16
24
|
const OPEN_AI_MODELS = [
|
|
17
25
|
"o1-preview",
|
|
18
26
|
"o1-preview-2024-09-12",
|
|
@@ -198,7 +206,7 @@
|
|
|
198
206
|
return total > max_character_num;
|
|
199
207
|
}
|
|
200
208
|
|
|
201
|
-
function google(options) {
|
|
209
|
+
function google$1(options) {
|
|
202
210
|
const base = "https://translate.googleapis.com/translate_a/single";
|
|
203
211
|
return {
|
|
204
212
|
name: "google",
|
|
@@ -227,13 +235,29 @@
|
|
|
227
235
|
}
|
|
228
236
|
return translations;
|
|
229
237
|
},
|
|
238
|
+
async checkLanguage(text) {
|
|
239
|
+
const url = `${base}?client=gtx&sl=auto&tl=en&dt=t&q=${encodeURI(text)}`;
|
|
240
|
+
const res = await fetch(url);
|
|
241
|
+
if (!res.ok) {
|
|
242
|
+
throw await throwResponseError(this.name, res);
|
|
243
|
+
}
|
|
244
|
+
const body = await res.json();
|
|
245
|
+
if (!body || body.length < 3) {
|
|
246
|
+
throw new CheckLanguageError(this.name, "Check language fail! No result returned");
|
|
247
|
+
}
|
|
248
|
+
const detectedLanguage = body[2];
|
|
249
|
+
if (!detectedLanguage) {
|
|
250
|
+
throw new CheckLanguageError(this.name, "Check language fail! Language not detected");
|
|
251
|
+
}
|
|
252
|
+
return detectedLanguage;
|
|
253
|
+
},
|
|
230
254
|
};
|
|
231
255
|
}
|
|
232
256
|
|
|
233
257
|
/**
|
|
234
258
|
* Azure translate documentation: https://learn.microsoft.com/zh-cn/azure/ai-services/translator/reference/v3-0-translate
|
|
235
259
|
*/
|
|
236
|
-
function azure$
|
|
260
|
+
function azure$2(options) {
|
|
237
261
|
const { key, region } = options;
|
|
238
262
|
const name = "azure";
|
|
239
263
|
const checkOptions = () => {
|
|
@@ -266,7 +290,7 @@
|
|
|
266
290
|
}
|
|
267
291
|
const bodyRes = await res.json();
|
|
268
292
|
if (bodyRes.error) {
|
|
269
|
-
throw new TranslationError(this.name, `Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);
|
|
293
|
+
throw new TranslationError(this.name, `Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);
|
|
270
294
|
}
|
|
271
295
|
const body = bodyRes;
|
|
272
296
|
if (!body || body.length === 0) {
|
|
@@ -281,10 +305,35 @@
|
|
|
281
305
|
}
|
|
282
306
|
return translations;
|
|
283
307
|
},
|
|
308
|
+
async checkLanguage(text) {
|
|
309
|
+
checkOptions();
|
|
310
|
+
const detectUrl = "https://api.cognitive.microsofttranslator.com/detect?api-version=3.0";
|
|
311
|
+
const res = await fetch(detectUrl, {
|
|
312
|
+
method: "POST",
|
|
313
|
+
headers: {
|
|
314
|
+
"Content-Type": "application/json; charset=UTF-8",
|
|
315
|
+
"Ocp-Apim-Subscription-Key": key,
|
|
316
|
+
"Ocp-Apim-Subscription-Region": region,
|
|
317
|
+
},
|
|
318
|
+
body: JSON.stringify([{ Text: text }]),
|
|
319
|
+
});
|
|
320
|
+
if (!res.ok) {
|
|
321
|
+
throw await throwResponseError(this.name, res);
|
|
322
|
+
}
|
|
323
|
+
const response = await res.json();
|
|
324
|
+
if (!response || !Array.isArray(response) || response.length === 0) {
|
|
325
|
+
throw new TranslationError(this.name, "Check language fail! No result returned");
|
|
326
|
+
}
|
|
327
|
+
const detection = response[0];
|
|
328
|
+
if (!detection.language) {
|
|
329
|
+
throw new TranslationError(this.name, "Check language fail! Language not detected");
|
|
330
|
+
}
|
|
331
|
+
return detection.language;
|
|
332
|
+
},
|
|
284
333
|
};
|
|
285
334
|
}
|
|
286
335
|
|
|
287
|
-
function amazon$
|
|
336
|
+
function amazon$2(options) {
|
|
288
337
|
const { region, accessKeyId, secretAccessKey } = options;
|
|
289
338
|
const name = "amazon";
|
|
290
339
|
const checkOptions = () => {
|
|
@@ -315,6 +364,28 @@
|
|
|
315
364
|
}
|
|
316
365
|
return translations;
|
|
317
366
|
},
|
|
367
|
+
async checkLanguage(text) {
|
|
368
|
+
checkOptions();
|
|
369
|
+
const translateClient = new clientTranslate.TranslateClient({
|
|
370
|
+
region: region,
|
|
371
|
+
credentials: { accessKeyId, secretAccessKey },
|
|
372
|
+
});
|
|
373
|
+
const command = new clientTranslate.TranslateTextCommand({
|
|
374
|
+
SourceLanguageCode: "auto",
|
|
375
|
+
TargetLanguageCode: "en",
|
|
376
|
+
Text: text,
|
|
377
|
+
});
|
|
378
|
+
try {
|
|
379
|
+
const response = await translateClient.send(command);
|
|
380
|
+
if (!response.SourceLanguageCode) {
|
|
381
|
+
throw new TranslationError(name, "Check language fail! Source language not detected");
|
|
382
|
+
}
|
|
383
|
+
return response.SourceLanguageCode;
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
throw new TranslationError(name, `Check language fail! ${error.message || error}`);
|
|
387
|
+
}
|
|
388
|
+
},
|
|
318
389
|
};
|
|
319
390
|
}
|
|
320
391
|
|
|
@@ -1441,7 +1512,7 @@
|
|
|
1441
1512
|
var md5Exports = md5$1.exports;
|
|
1442
1513
|
var md5 = /*@__PURE__*/getDefaultExportFromCjs(md5Exports);
|
|
1443
1514
|
|
|
1444
|
-
function baidu$
|
|
1515
|
+
function baidu$2(options) {
|
|
1445
1516
|
const { appId, secretKey } = options;
|
|
1446
1517
|
const url = "https://fanyi-api.baidu.com/api/trans/vip/fieldtranslate";
|
|
1447
1518
|
const name = "baidu";
|
|
@@ -1482,7 +1553,7 @@
|
|
|
1482
1553
|
}
|
|
1483
1554
|
const data = await res.json();
|
|
1484
1555
|
if (!data || data.error_code || !data.trans_result || data.trans_result.length === 0) {
|
|
1485
|
-
throw new TranslationError(this.name, `Translate fail ! error_code:${data.error_code}, error_msg: ${data.error_msg}`);
|
|
1556
|
+
throw new TranslationError(this.name, `Translate fail ! error_code:${data.error_code}, error_msg: ${data.error_msg} \n Go to https://fanyi-api.baidu.com/product/123 view details`);
|
|
1486
1557
|
}
|
|
1487
1558
|
const translations = [];
|
|
1488
1559
|
for (const translation of data.trans_result) {
|
|
@@ -1492,10 +1563,35 @@
|
|
|
1492
1563
|
}
|
|
1493
1564
|
return translations;
|
|
1494
1565
|
},
|
|
1566
|
+
async checkLanguage(text) {
|
|
1567
|
+
checkOptions();
|
|
1568
|
+
const salt = Date.now();
|
|
1569
|
+
const sign = md5(`${appId}${text}${salt}${secretKey}`).toString();
|
|
1570
|
+
const body = new URLSearchParams();
|
|
1571
|
+
body.append("q", text);
|
|
1572
|
+
body.append("appid", appId);
|
|
1573
|
+
body.append("salt", salt.toString());
|
|
1574
|
+
body.append("sign", sign);
|
|
1575
|
+
const res = await fetch("https://fanyi-api.baidu.com/api/trans/vip/language", {
|
|
1576
|
+
method: "POST",
|
|
1577
|
+
headers: {
|
|
1578
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
1579
|
+
},
|
|
1580
|
+
body: body.toString(),
|
|
1581
|
+
});
|
|
1582
|
+
if (!res.ok) {
|
|
1583
|
+
throw await throwResponseError(this.name, res);
|
|
1584
|
+
}
|
|
1585
|
+
const response = await res.json();
|
|
1586
|
+
if (!response || response.error_code != 0) {
|
|
1587
|
+
throw new CheckLanguageError(this.name, `Check language fail ! error_code:${response.error_code}, error_msg: ${response.error_msg} \n Go to https://fanyi-api.baidu.com/product/143 view details`);
|
|
1588
|
+
}
|
|
1589
|
+
return response.data.src;
|
|
1590
|
+
},
|
|
1495
1591
|
};
|
|
1496
1592
|
}
|
|
1497
1593
|
|
|
1498
|
-
function deepl$
|
|
1594
|
+
function deepl$3(options) {
|
|
1499
1595
|
const { key } = options;
|
|
1500
1596
|
const name = "deepl";
|
|
1501
1597
|
const checkOptions = () => {
|
|
@@ -1542,6 +1638,39 @@
|
|
|
1542
1638
|
const translations = body.map((t) => t.text);
|
|
1543
1639
|
return translations;
|
|
1544
1640
|
},
|
|
1641
|
+
async checkLanguage(text) {
|
|
1642
|
+
checkOptions();
|
|
1643
|
+
const res = await fetch(url, {
|
|
1644
|
+
method: "POST",
|
|
1645
|
+
headers: {
|
|
1646
|
+
"Content-Type": "application/json; charset=UTF-8",
|
|
1647
|
+
Authorization: `DeepL-Auth-Key ${key}`,
|
|
1648
|
+
Accept: "*/*",
|
|
1649
|
+
Host: "api-free.deepl.com",
|
|
1650
|
+
Connection: "keep-alive",
|
|
1651
|
+
},
|
|
1652
|
+
body: JSON.stringify({
|
|
1653
|
+
text: [text],
|
|
1654
|
+
target_lang: "EN",
|
|
1655
|
+
}),
|
|
1656
|
+
});
|
|
1657
|
+
if (!res.ok) {
|
|
1658
|
+
throw await throwResponseError(this.name, res);
|
|
1659
|
+
}
|
|
1660
|
+
const bodyRes = await res.json();
|
|
1661
|
+
if (bodyRes.error) {
|
|
1662
|
+
throw new CheckLanguageError(this.name, `Check language fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);
|
|
1663
|
+
}
|
|
1664
|
+
const body = bodyRes.translations;
|
|
1665
|
+
if (!body || body.length === 0) {
|
|
1666
|
+
throw new CheckLanguageError(this.name, "Check language fail! No result returned");
|
|
1667
|
+
}
|
|
1668
|
+
const detectedLanguage = body[0].detected_source_language;
|
|
1669
|
+
if (!detectedLanguage) {
|
|
1670
|
+
throw new CheckLanguageError(this.name, "Check language fail! Language not detected");
|
|
1671
|
+
}
|
|
1672
|
+
return detectedLanguage;
|
|
1673
|
+
},
|
|
1545
1674
|
};
|
|
1546
1675
|
}
|
|
1547
1676
|
|
|
@@ -1676,7 +1805,7 @@
|
|
|
1676
1805
|
headers["X-TC-Region"] = region;
|
|
1677
1806
|
return headers;
|
|
1678
1807
|
}
|
|
1679
|
-
function tencent$
|
|
1808
|
+
function tencent$3(options) {
|
|
1680
1809
|
const { secretId, secretKey, region = "ap-guangzhou" } = options;
|
|
1681
1810
|
const name = "tencent";
|
|
1682
1811
|
const host = "tmt.tencentcloudapi.com";
|
|
@@ -1724,7 +1853,7 @@
|
|
|
1724
1853
|
}
|
|
1725
1854
|
const data = await res.json();
|
|
1726
1855
|
if (data.Response?.Error) {
|
|
1727
|
-
throw new TranslationError(name, `Tencent translate fail: ${data.Response.Error.Code}, ${data.Response.Error.Message}`);
|
|
1856
|
+
throw new TranslationError(name, `Tencent translate fail: ${data.Response.Error.Code}, ${data.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);
|
|
1728
1857
|
}
|
|
1729
1858
|
const translatedResults = data.Response?.TargetText.split("\n") ?? [];
|
|
1730
1859
|
if (!Array.isArray(translatedResults) || translatedResults.length === 0) {
|
|
@@ -1738,20 +1867,63 @@
|
|
|
1738
1867
|
throw new TranslationError(name, `Translation failed: ${error}`);
|
|
1739
1868
|
}
|
|
1740
1869
|
},
|
|
1870
|
+
async checkLanguage(text) {
|
|
1871
|
+
checkOptions();
|
|
1872
|
+
const payloadObj = {
|
|
1873
|
+
Text: text,
|
|
1874
|
+
ProjectId: 0,
|
|
1875
|
+
};
|
|
1876
|
+
const payload = JSON.stringify(payloadObj);
|
|
1877
|
+
const headers = buildAuthorization({
|
|
1878
|
+
secretId,
|
|
1879
|
+
secretKey,
|
|
1880
|
+
service,
|
|
1881
|
+
host,
|
|
1882
|
+
payload,
|
|
1883
|
+
httpRequestMethod: "POST",
|
|
1884
|
+
action: "LanguageDetect",
|
|
1885
|
+
apiVersion,
|
|
1886
|
+
region,
|
|
1887
|
+
});
|
|
1888
|
+
try {
|
|
1889
|
+
const res = await fetch(endpoint, {
|
|
1890
|
+
method: "POST",
|
|
1891
|
+
headers,
|
|
1892
|
+
body: payload,
|
|
1893
|
+
});
|
|
1894
|
+
if (!res.ok) {
|
|
1895
|
+
throw new CheckLanguageError(name, `HTTP ${res.status}: ${await res.text()}`);
|
|
1896
|
+
}
|
|
1897
|
+
const data = await res.json();
|
|
1898
|
+
if (data.Response?.Error) {
|
|
1899
|
+
throw new CheckLanguageError(name, `Tencent language detect fail: ${data.Response.Error.Code}, ${data.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15620 view details`);
|
|
1900
|
+
}
|
|
1901
|
+
const detectedLanguage = data.Response?.Lang;
|
|
1902
|
+
if (!detectedLanguage) {
|
|
1903
|
+
throw new CheckLanguageError(name, "Language detect fail! No result returned");
|
|
1904
|
+
}
|
|
1905
|
+
return detectedLanguage;
|
|
1906
|
+
}
|
|
1907
|
+
catch (error) {
|
|
1908
|
+
if (error instanceof CheckLanguageError)
|
|
1909
|
+
throw error;
|
|
1910
|
+
throw new CheckLanguageError(name, `Language detection failed: ${error}`);
|
|
1911
|
+
}
|
|
1912
|
+
},
|
|
1741
1913
|
};
|
|
1742
1914
|
}
|
|
1743
1915
|
|
|
1744
1916
|
const engines = {
|
|
1745
|
-
google,
|
|
1746
|
-
azure: azure$
|
|
1747
|
-
amazon: amazon$
|
|
1748
|
-
baidu: baidu$
|
|
1749
|
-
deepl: deepl$
|
|
1917
|
+
google: google$1,
|
|
1918
|
+
azure: azure$2,
|
|
1919
|
+
amazon: amazon$2,
|
|
1920
|
+
baidu: baidu$2,
|
|
1921
|
+
deepl: deepl$3,
|
|
1750
1922
|
openai: openai$1,
|
|
1751
|
-
tencent: tencent$
|
|
1923
|
+
tencent: tencent$3,
|
|
1752
1924
|
};
|
|
1753
1925
|
|
|
1754
|
-
var azure = {
|
|
1926
|
+
var azure$1 = {
|
|
1755
1927
|
Afrikaans: "af",
|
|
1756
1928
|
Albanian: "sq",
|
|
1757
1929
|
Amharic: "am",
|
|
@@ -2135,7 +2307,7 @@
|
|
|
2135
2307
|
Zulu: "zu",
|
|
2136
2308
|
};
|
|
2137
2309
|
|
|
2138
|
-
var baidu = {
|
|
2310
|
+
var baidu$1 = {
|
|
2139
2311
|
Achinese: "ach",
|
|
2140
2312
|
Afrikaans: "afr",
|
|
2141
2313
|
Akan: "aka",
|
|
@@ -2346,7 +2518,7 @@
|
|
|
2346
2518
|
Zulu: "zul",
|
|
2347
2519
|
};
|
|
2348
2520
|
|
|
2349
|
-
var deepl$
|
|
2521
|
+
var deepl$2 = {
|
|
2350
2522
|
English: "en",
|
|
2351
2523
|
Bulgarian: "bg",
|
|
2352
2524
|
Chinese: "zh",
|
|
@@ -2382,7 +2554,7 @@
|
|
|
2382
2554
|
Ukrainian: "uk",
|
|
2383
2555
|
};
|
|
2384
2556
|
|
|
2385
|
-
var tencent$
|
|
2557
|
+
var tencent$2 = {
|
|
2386
2558
|
Auto: "auto",
|
|
2387
2559
|
Chinese: "zh",
|
|
2388
2560
|
TraditionalChinese: "zh-TW",
|
|
@@ -2404,7 +2576,7 @@
|
|
|
2404
2576
|
Hindi: "hi",
|
|
2405
2577
|
};
|
|
2406
2578
|
|
|
2407
|
-
var amazon = {
|
|
2579
|
+
var amazon$1 = {
|
|
2408
2580
|
Afrikaans: "af",
|
|
2409
2581
|
Albanian: "sq",
|
|
2410
2582
|
Amharic: "am",
|
|
@@ -2483,16 +2655,16 @@
|
|
|
2483
2655
|
};
|
|
2484
2656
|
|
|
2485
2657
|
const originLanguages = {
|
|
2486
|
-
azure: azure,
|
|
2658
|
+
azure: azure$1,
|
|
2487
2659
|
google: openai,
|
|
2488
|
-
baidu: baidu,
|
|
2489
|
-
deepl: deepl$
|
|
2490
|
-
amazon: amazon,
|
|
2660
|
+
baidu: baidu$1,
|
|
2661
|
+
deepl: deepl$2,
|
|
2662
|
+
amazon: amazon$1,
|
|
2491
2663
|
openai: openai,
|
|
2492
|
-
tencent: tencent$
|
|
2664
|
+
tencent: tencent$2,
|
|
2493
2665
|
};
|
|
2494
2666
|
|
|
2495
|
-
var deepl = {
|
|
2667
|
+
var deepl$1 = {
|
|
2496
2668
|
"American English": "en-US",
|
|
2497
2669
|
"Brazilian Portuguese": "pt-BR",
|
|
2498
2670
|
"British English": "en-GB",
|
|
@@ -2531,7 +2703,7 @@
|
|
|
2531
2703
|
Ukrainian: "uk",
|
|
2532
2704
|
};
|
|
2533
2705
|
|
|
2534
|
-
var tencent = {
|
|
2706
|
+
var tencent$1 = {
|
|
2535
2707
|
"Simplified Chinese": "zh",
|
|
2536
2708
|
"Traditional Chinese": "zh-TW",
|
|
2537
2709
|
English: "en",
|
|
@@ -2553,13 +2725,197 @@
|
|
|
2553
2725
|
};
|
|
2554
2726
|
|
|
2555
2727
|
const targetLanguages = {
|
|
2556
|
-
azure: azure,
|
|
2728
|
+
azure: azure$1,
|
|
2557
2729
|
google: openai,
|
|
2558
|
-
baidu: baidu,
|
|
2559
|
-
deepl: deepl,
|
|
2560
|
-
amazon: amazon,
|
|
2730
|
+
baidu: baidu$1,
|
|
2731
|
+
deepl: deepl$1,
|
|
2732
|
+
amazon: amazon$1,
|
|
2561
2733
|
openai: openai,
|
|
2734
|
+
tencent: tencent$1,
|
|
2735
|
+
};
|
|
2736
|
+
|
|
2737
|
+
var baidu = {
|
|
2738
|
+
Chinese: "zh",
|
|
2739
|
+
English: "en",
|
|
2740
|
+
Japanese: "jp",
|
|
2741
|
+
Korean: "kor",
|
|
2742
|
+
Thai: "th",
|
|
2743
|
+
Russian: "ru",
|
|
2744
|
+
};
|
|
2745
|
+
|
|
2746
|
+
var tencent = {
|
|
2747
|
+
Chinese: "zh",
|
|
2748
|
+
English: "en",
|
|
2749
|
+
Japanese: "jp",
|
|
2750
|
+
Korean: "kr",
|
|
2751
|
+
German: "de",
|
|
2752
|
+
French: "fr",
|
|
2753
|
+
Spanish: "es",
|
|
2754
|
+
Italian: "it",
|
|
2755
|
+
Turkish: "tr",
|
|
2756
|
+
Russian: "ru",
|
|
2757
|
+
Portuguese: "pt",
|
|
2758
|
+
Vietnamese: "vi",
|
|
2759
|
+
Indonesian: "id",
|
|
2760
|
+
Malay: "ms",
|
|
2761
|
+
Thai: "th",
|
|
2762
|
+
};
|
|
2763
|
+
|
|
2764
|
+
var azure = {
|
|
2765
|
+
Arabic: "ar",
|
|
2766
|
+
Bengali: "bn",
|
|
2767
|
+
Bulgarian: "bg",
|
|
2768
|
+
Catalan: "ca",
|
|
2769
|
+
Chinese: "zh-Hans",
|
|
2770
|
+
"Chinese (Traditional)": "zh-Hant",
|
|
2771
|
+
Croatian: "hr",
|
|
2772
|
+
Czech: "cs",
|
|
2773
|
+
Danish: "da",
|
|
2774
|
+
Dutch: "nl",
|
|
2775
|
+
English: "en",
|
|
2776
|
+
Finnish: "fi",
|
|
2777
|
+
French: "fr",
|
|
2778
|
+
German: "de",
|
|
2779
|
+
Greek: "el",
|
|
2780
|
+
Hebrew: "he",
|
|
2781
|
+
Hindi: "hi",
|
|
2782
|
+
Hungarian: "hu",
|
|
2783
|
+
Indonesian: "id",
|
|
2784
|
+
Italian: "it",
|
|
2785
|
+
Japanese: "ja",
|
|
2786
|
+
Korean: "ko",
|
|
2787
|
+
Malay: "ms",
|
|
2788
|
+
"Norwegian Bokmål": "nb",
|
|
2789
|
+
Persian: "fa",
|
|
2790
|
+
Polish: "pl",
|
|
2791
|
+
"Portugal (Brazil)": "pt",
|
|
2792
|
+
Romanian: "ro",
|
|
2793
|
+
Russian: "ru",
|
|
2794
|
+
Slovak: "sk",
|
|
2795
|
+
Spanish: "es",
|
|
2796
|
+
Swedish: "sv",
|
|
2797
|
+
Thai: "th",
|
|
2798
|
+
Turkish: "tr",
|
|
2799
|
+
Ukrainian: "uk",
|
|
2800
|
+
Urdu: "ur",
|
|
2801
|
+
Vietnamese: "vi",
|
|
2802
|
+
};
|
|
2803
|
+
|
|
2804
|
+
var amazon = {
|
|
2805
|
+
Arabic: "ar",
|
|
2806
|
+
Bengali: "bn",
|
|
2807
|
+
Bulgarian: "bg",
|
|
2808
|
+
Catalan: "ca",
|
|
2809
|
+
Chinese: "zh-Hans",
|
|
2810
|
+
"Chinese (Traditional)": "zh-Hant",
|
|
2811
|
+
Croatian: "hr",
|
|
2812
|
+
Czech: "cs",
|
|
2813
|
+
Danish: "da",
|
|
2814
|
+
Dutch: "nl",
|
|
2815
|
+
English: "en",
|
|
2816
|
+
Finnish: "fi",
|
|
2817
|
+
French: "fr",
|
|
2818
|
+
German: "de",
|
|
2819
|
+
Greek: "el",
|
|
2820
|
+
Hebrew: "he",
|
|
2821
|
+
Hindi: "hi",
|
|
2822
|
+
Hungarian: "hu",
|
|
2823
|
+
Indonesian: "id",
|
|
2824
|
+
Italian: "it",
|
|
2825
|
+
Japanese: "ja",
|
|
2826
|
+
Korean: "ko",
|
|
2827
|
+
Malay: "ms",
|
|
2828
|
+
Persian: "fa",
|
|
2829
|
+
Polish: "pl",
|
|
2830
|
+
"Portugal (Brazil)": "pt",
|
|
2831
|
+
Romanian: "ro",
|
|
2832
|
+
Russian: "ru",
|
|
2833
|
+
Slovak: "sk",
|
|
2834
|
+
Spanish: "es",
|
|
2835
|
+
Swedish: "sv",
|
|
2836
|
+
Thai: "th",
|
|
2837
|
+
Turkish: "tr",
|
|
2838
|
+
Ukrainian: "uk",
|
|
2839
|
+
Urdu: "ur",
|
|
2840
|
+
Vietnamese: "vi",
|
|
2841
|
+
};
|
|
2842
|
+
|
|
2843
|
+
var deepl = {
|
|
2844
|
+
"American English": "en",
|
|
2845
|
+
Bulgarian: "bg",
|
|
2846
|
+
Chinese: "zh",
|
|
2847
|
+
Czech: "cs",
|
|
2848
|
+
Danish: "da",
|
|
2849
|
+
Dutch: "nl",
|
|
2850
|
+
Estonian: "et",
|
|
2851
|
+
Finnish: "fi",
|
|
2852
|
+
French: "fr",
|
|
2853
|
+
German: "de",
|
|
2854
|
+
Greek: "el",
|
|
2855
|
+
Hungarian: "hu",
|
|
2856
|
+
Icelandic: "is",
|
|
2857
|
+
Indonesian: "id",
|
|
2858
|
+
Irish: "ga",
|
|
2859
|
+
Italian: "it",
|
|
2860
|
+
Japanese: "ja",
|
|
2861
|
+
Korean: "ko",
|
|
2862
|
+
Latvian: "lv",
|
|
2863
|
+
Lithuanian: "lt",
|
|
2864
|
+
Maltese: "mt",
|
|
2865
|
+
Norwegian: "nb",
|
|
2866
|
+
Polish: "pl",
|
|
2867
|
+
Portuguese: "pt",
|
|
2868
|
+
Romanian: "ro",
|
|
2869
|
+
Russian: "ru",
|
|
2870
|
+
Slovak: "sk",
|
|
2871
|
+
Slovenian: "sl",
|
|
2872
|
+
Spanish: "es",
|
|
2873
|
+
Swedish: "sv",
|
|
2874
|
+
Turkish: "tr",
|
|
2875
|
+
Ukrainian: "uk",
|
|
2876
|
+
};
|
|
2877
|
+
|
|
2878
|
+
var google = {
|
|
2879
|
+
English: "en",
|
|
2880
|
+
Bulgarian: "bg",
|
|
2881
|
+
Chinese: "zh-cn",
|
|
2882
|
+
Czech: "cs",
|
|
2883
|
+
Danish: "da",
|
|
2884
|
+
Dutch: "nl",
|
|
2885
|
+
Estonian: "et",
|
|
2886
|
+
Finnish: "fi",
|
|
2887
|
+
French: "fr",
|
|
2888
|
+
German: "de",
|
|
2889
|
+
Greek: "el",
|
|
2890
|
+
Hungarian: "hu",
|
|
2891
|
+
Icelandic: "is",
|
|
2892
|
+
Indonesian: "id",
|
|
2893
|
+
Irish: "ga",
|
|
2894
|
+
Italian: "it",
|
|
2895
|
+
Japanese: "ja",
|
|
2896
|
+
Korean: "ko",
|
|
2897
|
+
Latvian: "lv",
|
|
2898
|
+
Lithuanian: "lt",
|
|
2899
|
+
Maltese: "mt",
|
|
2900
|
+
Polish: "pl",
|
|
2901
|
+
Portuguese: "pt",
|
|
2902
|
+
Romanian: "ro",
|
|
2903
|
+
Russian: "ru",
|
|
2904
|
+
Slovak: "sk",
|
|
2905
|
+
Slovenian: "sl",
|
|
2906
|
+
Spanish: "es",
|
|
2907
|
+
Swedish: "sv",
|
|
2908
|
+
Turkish: "tr",
|
|
2909
|
+
Ukrainian: "uk",
|
|
2910
|
+
};
|
|
2911
|
+
|
|
2912
|
+
const checkLanguages = {
|
|
2913
|
+
baidu: baidu,
|
|
2562
2914
|
tencent: tencent,
|
|
2915
|
+
azure: azure,
|
|
2916
|
+
amazon: amazon,
|
|
2917
|
+
deepl: deepl,
|
|
2918
|
+
google: google,
|
|
2563
2919
|
};
|
|
2564
2920
|
|
|
2565
2921
|
function normalFromLanguage(from, engine) {
|
|
@@ -2640,6 +2996,42 @@
|
|
|
2640
2996
|
}
|
|
2641
2997
|
this.engines.delete(engineName);
|
|
2642
2998
|
}
|
|
2999
|
+
isSupportCheckLanguage(engineName) {
|
|
3000
|
+
if (!engineName || !this.engines.has(engineName)) {
|
|
3001
|
+
logger.warn("Engine name is required or not found");
|
|
3002
|
+
return false;
|
|
3003
|
+
}
|
|
3004
|
+
const engine = this.engines.get(engineName);
|
|
3005
|
+
if (!engine) {
|
|
3006
|
+
logger.warn(`Engine ${engineName} not found`);
|
|
3007
|
+
return false;
|
|
3008
|
+
}
|
|
3009
|
+
return !!engine.checkLanguage;
|
|
3010
|
+
}
|
|
3011
|
+
async checkLanguage(text, options) {
|
|
3012
|
+
const { engine = "google", max_character_num = defaultMaxCharacterNum } = options;
|
|
3013
|
+
if (!this.engines.has(engine)) {
|
|
3014
|
+
throw new CheckLanguageError(appName, `Engine ${engine} not found`);
|
|
3015
|
+
}
|
|
3016
|
+
const engineInstance = this.engines.get(engine);
|
|
3017
|
+
if (!engineInstance) {
|
|
3018
|
+
throw new CheckLanguageError(appName, `Engine ${engine} is null`);
|
|
3019
|
+
}
|
|
3020
|
+
if (!engineInstance.checkLanguage) {
|
|
3021
|
+
throw new CheckLanguageError(appName, `Engine ${engine} does not support checkLanguage method`);
|
|
3022
|
+
}
|
|
3023
|
+
const sample = max_character_num > 0 ? text.substring(0, max_character_num) : text;
|
|
3024
|
+
if (sample.length <= 0) {
|
|
3025
|
+
throw new TranslationError(appName, "Text is empty or too short to check language");
|
|
3026
|
+
}
|
|
3027
|
+
return engineInstance
|
|
3028
|
+
.checkLanguage(sample)
|
|
3029
|
+
.then((r) => r)
|
|
3030
|
+
.catch((e) => {
|
|
3031
|
+
logger.error(`${appName} Failed to check language for text: \n${getGapLine()}\n${text}\n${getGapLine()}\n error: ${getErrorMessages(e)}`);
|
|
3032
|
+
throw e;
|
|
3033
|
+
});
|
|
3034
|
+
}
|
|
2643
3035
|
async translate(text, options) {
|
|
2644
3036
|
const { engine = "google", cache_time = 60 * 1000 } = options;
|
|
2645
3037
|
let { from = "auto", to } = options;
|
|
@@ -2651,7 +3043,7 @@
|
|
|
2651
3043
|
}
|
|
2652
3044
|
const engineInstance = this.engines.get(engine);
|
|
2653
3045
|
if (!engineInstance) {
|
|
2654
|
-
throw new TranslationError(appName, `Engine ${engine}
|
|
3046
|
+
throw new TranslationError(appName, `Engine ${engine} is null`);
|
|
2655
3047
|
}
|
|
2656
3048
|
if (!from) {
|
|
2657
3049
|
throw new TranslationError(appName, `Invalid origin language ${from}`);
|
|
@@ -2739,12 +3131,18 @@
|
|
|
2739
3131
|
};
|
|
2740
3132
|
|
|
2741
3133
|
exports.Cache = Cache;
|
|
3134
|
+
exports.CheckLanguageError = CheckLanguageError;
|
|
2742
3135
|
exports.OPEN_AI_MODELS = OPEN_AI_MODELS;
|
|
2743
3136
|
exports.TranslationError = TranslationError;
|
|
2744
3137
|
exports.Translator = Translator;
|
|
3138
|
+
exports.checkLanguages = checkLanguages;
|
|
2745
3139
|
exports.default = index;
|
|
2746
3140
|
exports.engines = engines;
|
|
2747
3141
|
exports.getLanguage = getLanguage;
|
|
3142
|
+
exports.normalFromLanguage = normalFromLanguage;
|
|
3143
|
+
exports.normalToLanguage = normalToLanguage;
|
|
3144
|
+
exports.originLanguages = originLanguages;
|
|
3145
|
+
exports.targetLanguages = targetLanguages;
|
|
2748
3146
|
exports.translator = translator;
|
|
2749
3147
|
|
|
2750
3148
|
Object.defineProperty(exports, '__esModule', { value: true });
|