UNPKG

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
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