anylang
Version:
A translator's kit that uses the free APIs of Google Translate, Yandex, Bing, ChatGPT, and other LLMs
93 lines (91 loc) • 9.71 kB
JavaScript
import z from 'zod';
import { BaseTranslator } from '../BaseTranslator';
/**
* This module did not test too ago
*/
export class ReversoTranslator extends BaseTranslator {
constructor() {
super(...arguments);
this.langMap = {
en: 'eng',
ar: 'ara',
nl: 'dut',
he: 'heb',
es: 'spa',
it: 'ita',
zh: 'chi',
de: 'ger',
pl: 'pol',
pt: 'por',
ro: 'rum',
ru: 'rus',
tr: 'tur',
fr: 'fra',
ja: 'jpn',
};
}
static isSupportedAutoFrom() {
return false;
}
static getSupportedLanguages() {
// eslint-disable
// prettier-ignore
return [
'en', 'ar', 'nl', 'he', 'es', 'it', 'zh', 'de', 'pl', 'pt',
'ro', 'ru', 'tr', 'fr', 'ja',
];
// eslint-enable
}
getLengthLimit() {
return 5000;
}
getRequestsTimeout() {
return 1000;
}
checkLimitExceeding(text) {
if (Array.isArray(text)) {
const arrayLen = text.reduce((acc, text) => acc + text.length, 0);
const extra = arrayLen - this.getLengthLimit();
return extra > 0 ? extra : 0;
}
else {
const extra = text.length - this.getLengthLimit();
return extra > 0 ? extra : 0;
}
}
translate(text, from, to) {
const localFrom = this.langMap[from];
const localTo = this.langMap[to];
const data = {
input: text,
from: localFrom,
to: localTo,
format: 'text',
options: {
origin: 'translation.web',
sentenceSplitter: true,
contextResults: true,
languageDetection: false,
},
};
const apiHost = 'https://api.reverso.net/translate/v1/translation';
return this.fetch(apiHost, {
responseType: 'json',
method: 'POST',
headers: Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, this.options.headers),
body: JSON.stringify(data),
}).then((rsp) => {
const response = z
.object({
translation: z.string().array(),
})
.parse(rsp.data, { error: () => 'Unexpected response format' });
return response.translation.join('');
});
}
translateBatch(text, from, to) {
return Promise.all(text.map((text) => this.translate(text, from, to)));
}
}
ReversoTranslator.translatorName = 'ReversoTranslator (public)';
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyYW5zbGF0b3JzL3Vuc3RhYmxlL1JldmVyc29UcmFuc2xhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUVwQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBYztJQUFyRDs7UUFvQ2tCLFlBQU8sR0FBMkI7WUFDbEQsRUFBRSxFQUFFLEtBQUs7WUFDVCxFQUFFLEVBQUUsS0FBSztZQUNULEVBQUUsRUFBRSxLQUFLO1lBQ1QsRUFBRSxFQUFFLEtBQUs7WUFDVCxFQUFFLEVBQUUsS0FBSztZQUNULEVBQUUsRUFBRSxLQUFLO1lBQ1QsRUFBRSxFQUFFLEtBQUs7WUFDVCxFQUFFLEVBQUUsS0FBSztZQUNULEVBQUUsRUFBRSxLQUFLO1lBQ1QsRUFBRSxFQUFFLEtBQUs7WUFDVCxFQUFFLEVBQUUsS0FBSztZQUNULEVBQUUsRUFBRSxLQUFLO1lBQ1QsRUFBRSxFQUFFLEtBQUs7WUFDVCxFQUFFLEVBQUUsS0FBSztZQUNULEVBQUUsRUFBRSxLQUFLO1NBQ1QsQ0FBQztJQTBDSCxDQUFDO0lBM0ZPLE1BQU0sQ0FBQyxtQkFBbUI7UUFDaEMsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRU0sTUFBTSxDQUFDLHFCQUFxQjtRQUNsQyxpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLE9BQU87WUFDTixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1lBQzFELElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO1NBQzVCLENBQUM7UUFDRixnQkFBZ0I7SUFDakIsQ0FBQztJQUVNLGNBQWM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRU0sa0JBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVNLG1CQUFtQixDQUFDLElBQXVCO1FBQ2pELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxNQUFNLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQy9DLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNsRCxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7SUFDRixDQUFDO0lBb0JNLFNBQVMsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLEVBQVU7UUFDdEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sSUFBSSxHQUFHO1lBQ1osS0FBSyxFQUFFLElBQUk7WUFDWCxJQUFJLEVBQUUsU0FBUztZQUNmLEVBQUUsRUFBRSxPQUFPO1lBQ1gsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1IsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekIsZ0JBQWdCLEVBQUUsSUFBSTtnQkFDdEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLGlCQUFpQixFQUFFLEtBQUs7YUFDeEI7U0FDRCxDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsa0RBQWtELENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUMxQixZQUFZLEVBQUUsTUFBTTtZQUNwQixNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sa0JBQ04sY0FBYyxFQUFFLGlDQUFpQyxJQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDdkI7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2YsTUFBTSxRQUFRLEdBQUcsQ0FBQztpQkFDaEIsTUFBTSxDQUFDO2dCQUNQLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFO2FBQy9CLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO1lBRWpFLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU0sY0FBYyxDQUFDLElBQWMsRUFBRSxJQUFZLEVBQUUsRUFBVTtRQUM3RCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDOztBQTVGc0IsZ0NBQWMsR0FBRyw0QkFBSCxBQUErQixDQUFDIiwiZmlsZSI6InRyYW5zbGF0b3JzL3Vuc3RhYmxlL1JldmVyc29UcmFuc2xhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHogZnJvbSAnem9kJztcblxuaW1wb3J0IHsgQmFzZVRyYW5zbGF0b3IgfSBmcm9tICcuLi9CYXNlVHJhbnNsYXRvcic7XG5cbi8qKlxuICogVGhpcyBtb2R1bGUgZGlkIG5vdCB0ZXN0IHRvbyBhZ29cbiAqL1xuZXhwb3J0IGNsYXNzIFJldmVyc29UcmFuc2xhdG9yIGV4dGVuZHMgQmFzZVRyYW5zbGF0b3Ige1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHRyYW5zbGF0b3JOYW1lID0gJ1JldmVyc29UcmFuc2xhdG9yIChwdWJsaWMpJztcblxuXHRwdWJsaWMgc3RhdGljIGlzU3VwcG9ydGVkQXV0b0Zyb20oKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cHVibGljIHN0YXRpYyBnZXRTdXBwb3J0ZWRMYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlXG5cdFx0Ly8gcHJldHRpZXItaWdub3JlXG5cdFx0cmV0dXJuIFtcblx0XHRcdCdlbicsICdhcicsICdubCcsICdoZScsICdlcycsICdpdCcsICd6aCcsICdkZScsICdwbCcsICdwdCcsXG5cdFx0XHQncm8nLCAncnUnLCAndHInLCAnZnInLCAnamEnLFxuXHRcdF07XG5cdFx0Ly8gZXNsaW50LWVuYWJsZVxuXHR9XG5cblx0cHVibGljIGdldExlbmd0aExpbWl0KCkge1xuXHRcdHJldHVybiA1MDAwO1xuXHR9XG5cblx0cHVibGljIGdldFJlcXVlc3RzVGltZW91dCgpIHtcblx0XHRyZXR1cm4gMTAwMDtcblx0fVxuXG5cdHB1YmxpYyBjaGVja0xpbWl0RXhjZWVkaW5nKHRleHQ6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodGV4dCkpIHtcblx0XHRcdGNvbnN0IGFycmF5TGVuID0gdGV4dC5yZWR1Y2UoKGFjYywgdGV4dCkgPT4gYWNjICsgdGV4dC5sZW5ndGgsIDApO1xuXHRcdFx0Y29uc3QgZXh0cmEgPSBhcnJheUxlbiAtIHRoaXMuZ2V0TGVuZ3RoTGltaXQoKTtcblx0XHRcdHJldHVybiBleHRyYSA+IDAgPyBleHRyYSA6IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGV4dHJhID0gdGV4dC5sZW5ndGggLSB0aGlzLmdldExlbmd0aExpbWl0KCk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPiAwID8gZXh0cmEgOiAwO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVhZG9ubHkgbGFuZ01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcblx0XHRlbjogJ2VuZycsXG5cdFx0YXI6ICdhcmEnLFxuXHRcdG5sOiAnZHV0Jyxcblx0XHRoZTogJ2hlYicsXG5cdFx0ZXM6ICdzcGEnLFxuXHRcdGl0OiAnaXRhJyxcblx0XHR6aDogJ2NoaScsXG5cdFx0ZGU6ICdnZXInLFxuXHRcdHBsOiAncG9sJyxcblx0XHRwdDogJ3BvcicsXG5cdFx0cm86ICdydW0nLFxuXHRcdHJ1OiAncnVzJyxcblx0XHR0cjogJ3R1cicsXG5cdFx0ZnI6ICdmcmEnLFxuXHRcdGphOiAnanBuJyxcblx0fTtcblxuXHRwdWJsaWMgdHJhbnNsYXRlKHRleHQ6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbG9jYWxGcm9tID0gdGhpcy5sYW5nTWFwW2Zyb21dO1xuXHRcdGNvbnN0IGxvY2FsVG8gPSB0aGlzLmxhbmdNYXBbdG9dO1xuXG5cdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdGlucHV0OiB0ZXh0LFxuXHRcdFx0ZnJvbTogbG9jYWxGcm9tLFxuXHRcdFx0dG86IGxvY2FsVG8sXG5cdFx0XHRmb3JtYXQ6ICd0ZXh0Jyxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0b3JpZ2luOiAndHJhbnNsYXRpb24ud2ViJyxcblx0XHRcdFx0c2VudGVuY2VTcGxpdHRlcjogdHJ1ZSxcblx0XHRcdFx0Y29udGV4dFJlc3VsdHM6IHRydWUsXG5cdFx0XHRcdGxhbmd1YWdlRGV0ZWN0aW9uOiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0fTtcblxuXHRcdGNvbnN0IGFwaUhvc3QgPSAnaHR0cHM6Ly9hcGkucmV2ZXJzby5uZXQvdHJhbnNsYXRlL3YxL3RyYW5zbGF0aW9uJztcblx0XHRyZXR1cm4gdGhpcy5mZXRjaChhcGlIb3N0LCB7XG5cdFx0XHRyZXNwb25zZVR5cGU6ICdqc29uJyxcblx0XHRcdG1ldGhvZDogJ1BPU1QnLFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHQnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLFxuXHRcdFx0XHQuLi50aGlzLm9wdGlvbnMuaGVhZGVycyxcblx0XHRcdH0sXG5cdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSxcblx0XHR9KS50aGVuKChyc3ApID0+IHtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gelxuXHRcdFx0XHQub2JqZWN0KHtcblx0XHRcdFx0XHR0cmFuc2xhdGlvbjogei5zdHJpbmcoKS5hcnJheSgpLFxuXHRcdFx0XHR9KVxuXHRcdFx0XHQucGFyc2UocnNwLmRhdGEsIHsgZXJyb3I6ICgpID0+ICdVbmV4cGVjdGVkIHJlc3BvbnNlIGZvcm1hdCcgfSk7XG5cblx0XHRcdHJldHVybiByZXNwb25zZS50cmFuc2xhdGlvbi5qb2luKCcnKTtcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyB0cmFuc2xhdGVCYXRjaCh0ZXh0OiBzdHJpbmdbXSwgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRleHQubWFwKCh0ZXh0KSA9PiB0aGlzLnRyYW5zbGF0ZSh0ZXh0LCBmcm9tLCB0bykpKTtcblx0fVxufVxuIl19