anylang
Version:
A translator's kit that uses the free APIs of Google Translate, Yandex, Bing, ChatGPT, and other LLMs
91 lines (89 loc) • 12.2 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import z from 'zod';
import { BaseTranslator } from '../BaseTranslator';
export class DeepLTranslator extends BaseTranslator {
static getSupportedLanguages() {
// eslint-disable
// prettier-ignore
return [
'bg', 'cs', 'da', 'de', 'el', 'en', 'es', 'et', 'fi', 'fr',
'hu', 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'nb', 'nl', 'pl',
'pt', 'ro', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'zh'
];
// eslint-enable
}
constructor(options) {
super(options);
// DeepL API Free authentication keys can be identified easily by the suffix ":fx"
// Docs: https://www.deepl.com/docs-api/api-access/
const isApiKeyFreeVersion = options.apiKey.endsWith(':fx');
const apiHost = isApiKeyFreeVersion
? 'https://api-free.deepl.com'
: 'https://api.deepl.com';
this.apiHost = apiHost + '/v2/translate';
}
getLengthLimit() {
return 5000;
}
getRequestsTimeout() {
return 300;
}
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) {
return __awaiter(this, void 0, void 0, function* () {
return this.translateBatch([text], from, to).then((resp) => resp[0]);
});
}
translateBatch(text, from, to) {
return __awaiter(this, void 0, void 0, function* () {
// eslint-disable-next-line camelcase
const requestBody = { text, target_lang: to };
if (from !== 'auto') {
requestBody['source_lang'] = from;
}
const stringifiedBody = Object.entries(requestBody)
.map(([key, value]) => {
if (!Array.isArray(value))
return `${key}=${encodeURIComponent(value)}`;
// Handle array parameters
return value.map((t) => `${key}=` + encodeURIComponent(t)).join('&');
})
.join('&');
return this.fetch(this.apiHost, {
responseType: 'json',
method: 'POST',
headers: Object.assign({ Authorization: `DeepL-Auth-Key ${this.options.apiKey}`, 'Content-Type': 'application/x-www-form-urlencoded' }, this.options.headers),
body: stringifiedBody,
}).then((rsp) => {
return z
.object({
translations: z.object({ text: z.string() }).array(),
})
.transform(({ translations }) => translations.map(({ text }) => text))
.parse(rsp.data, { error: () => 'Unexpected data' });
});
});
}
}
DeepLTranslator.translatorName = 'DeepLTranslator';
DeepLTranslator.isRequiredKey = () => true;
DeepLTranslator.isSupportedAutoFrom = () => true;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyYW5zbGF0b3JzL0RlZXBMVHJhbnNsYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7QUFFcEIsT0FBTyxFQUFFLGNBQWMsRUFBcUIsTUFBTSxtQkFBbUIsQ0FBQztBQU10RSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxjQUFzQztJQU9uRSxNQUFNLENBQUMscUJBQXFCO1FBQ2xDLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsT0FBTztZQUNOLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDMUQsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtZQUMxRCxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7U0FDcEQsQ0FBQztRQUNGLGdCQUFnQjtJQUNqQixDQUFDO0lBR0QsWUFBWSxPQUFrRDtRQUM3RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixrRkFBa0Y7UUFDbEYsbURBQW1EO1FBRW5ELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsbUJBQW1CO1lBQ2xDLENBQUMsQ0FBQyw0QkFBNEI7WUFDOUIsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO1FBRTNCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxHQUFHLGVBQWUsQ0FBQztJQUMxQyxDQUFDO0lBRU0sY0FBYztRQUNwQixPQUFPLElBQUksQ0FBQztJQUNi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Q0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3JFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7S0FBQTs7QUF6RnNCLDhCQUFjLEdBQUcsaUJBQWlCLENBQUM7QUFFNUMsNkJBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFFM0IsbUNBQW1CLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDIiwiZmlsZSI6InRyYW5zbGF0b3JzL0RlZXBMVHJhbnNsYXRvci9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB6IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7IEJhc2VUcmFuc2xhdG9yLCBUcmFuc2xhdG9yT3B0aW9ucyB9IGZyb20gJy4uL0Jhc2VUcmFuc2xhdG9yJztcblxuZXhwb3J0IHR5cGUgRGVlcExUcmFuc2xhdG9yT3B0aW9ucyA9IHtcblx0YXBpS2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgRGVlcExUcmFuc2xhdG9yIGV4dGVuZHMgQmFzZVRyYW5zbGF0b3I8RGVlcExUcmFuc2xhdG9yT3B0aW9ucz4ge1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHRyYW5zbGF0b3JOYW1lID0gJ0RlZXBMVHJhbnNsYXRvcic7XG5cblx0cHVibGljIHN0YXRpYyBpc1JlcXVpcmVkS2V5ID0gKCkgPT4gdHJ1ZTtcblxuXHRwdWJsaWMgc3RhdGljIGlzU3VwcG9ydGVkQXV0b0Zyb20gPSAoKSA9PiB0cnVlO1xuXG5cdHB1YmxpYyBzdGF0aWMgZ2V0U3VwcG9ydGVkTGFuZ3VhZ2VzKCk6IHN0cmluZ1tdIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZVxuXHRcdC8vIHByZXR0aWVyLWlnbm9yZVxuXHRcdHJldHVybiBbXG5cdFx0XHQnYmcnLCAnY3MnLCAnZGEnLCAnZGUnLCAnZWwnLCAnZW4nLCAnZXMnLCAnZXQnLCAnZmknLCAnZnInLFxuXHRcdFx0J2h1JywgJ2lkJywgJ2l0JywgJ2phJywgJ2tvJywgJ2x0JywgJ2x2JywgJ25iJywgJ25sJywgJ3BsJyxcblx0XHRcdCdwdCcsICdybycsICdydScsICdzaycsICdzbCcsICdzdicsICd0cicsICd1aycsICd6aCdcblx0XHRdO1xuXHRcdC8vIGVzbGludC1lbmFibGVcblx0fVxuXG5cdHByaXZhdGUgcmVhZG9ubHkgYXBpSG9zdDogc3RyaW5nO1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBUcmFuc2xhdG9yT3B0aW9uczxEZWVwTFRyYW5zbGF0b3JPcHRpb25zPikge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0Ly8gRGVlcEwgQVBJIEZyZWUgYXV0aGVudGljYXRpb24ga2V5cyBjYW4gYmUgaWRlbnRpZmllZCBlYXNpbHkgYnkgdGhlIHN1ZmZpeCBcIjpmeFwiXG5cdFx0Ly8gRG9jczogaHR0cHM6Ly93d3cuZGVlcGwuY29tL2RvY3MtYXBpL2FwaS1hY2Nlc3MvXG5cblx0XHRjb25zdCBpc0FwaUtleUZyZWVWZXJzaW9uID0gb3B0aW9ucy5hcGlLZXkuZW5kc1dpdGgoJzpmeCcpO1xuXHRcdGNvbnN0IGFwaUhvc3QgPSBpc0FwaUtleUZyZWVWZXJzaW9uXG5cdFx0XHQ/ICdodHRwczovL2FwaS1mcmVlLmRlZXBsLmNvbSdcblx0XHRcdDogJ2h0dHBzOi8vYXBpLmRlZXBsLmNvbSc7XG5cblx0XHR0aGlzLmFwaUhvc3QgPSBhcGlIb3N0ICsgJy92Mi90cmFuc2xhdGUnO1xuXHR9XG5cblx0cHVibGljIGdldExlbmd0aExpbWl0KCkge1xuXHRcdHJldHVybiA1MDAwO1xuXHR9XG5cblx0cHVibGljIGdldFJlcXVlc3RzVGltZW91dCgpIHtcblx0XHRyZXR1cm4gMzAwO1xuXHR9XG5cblx0cHVibGljIGNoZWNrTGltaXRFeGNlZWRpbmcodGV4dDogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSkge1xuXHRcdFx0Y29uc3QgYXJyYXlMZW4gPSB0ZXh0LnJlZHVjZSgoYWNjLCB0ZXh0KSA9PiBhY2MgKyB0ZXh0Lmxlbmd0aCwgMCk7XG5cdFx0XHRjb25zdCBleHRyYSA9IGFycmF5TGVuIC0gdGhpcy5nZXRMZW5ndGhMaW1pdCgpO1xuXHRcdFx0cmV0dXJuIGV4dHJhID4gMCA/IGV4dHJhIDogMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZXh0cmEgPSB0ZXh0Lmxlbmd0aCAtIHRoaXMuZ2V0TGVuZ3RoTGltaXQoKTtcblx0XHRcdHJldHVybiBleHRyYSA+IDAgPyBleHRyYSA6IDA7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFzeW5jIHRyYW5zbGF0ZSh0ZXh0OiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZUJhdGNoKFt0ZXh0XSwgZnJvbSwgdG8pLnRoZW4oKHJlc3ApID0+IHJlc3BbMF0pO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIHRyYW5zbGF0ZUJhdGNoKHRleHQ6IHN0cmluZ1tdLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5cdFx0Y29uc3QgcmVxdWVzdEJvZHk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPiA9IHsgdGV4dCwgdGFyZ2V0X2xhbmc6IHRvIH07XG5cblx0XHRpZiAoZnJvbSAhPT0gJ2F1dG8nKSB7XG5cdFx0XHRyZXF1ZXN0Qm9keVsnc291cmNlX2xhbmcnXSA9IGZyb207XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RyaW5naWZpZWRCb2R5ID0gT2JqZWN0LmVudHJpZXMocmVxdWVzdEJvZHkpXG5cdFx0XHQubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcblx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGAke2tleX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWA7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIGFycmF5IHBhcmFtZXRlcnNcblx0XHRcdFx0cmV0dXJuIHZhbHVlLm1hcCgodCkgPT4gYCR7a2V5fT1gICsgZW5jb2RlVVJJQ29tcG9uZW50KHQpKS5qb2luKCcmJyk7XG5cdFx0XHR9KVxuXHRcdFx0LmpvaW4oJyYnKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoKHRoaXMuYXBpSG9zdCwge1xuXHRcdFx0cmVzcG9uc2VUeXBlOiAnanNvbicsXG5cdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0QXV0aG9yaXphdGlvbjogYERlZXBMLUF1dGgtS2V5ICR7dGhpcy5vcHRpb25zLmFwaUtleX1gLFxuXHRcdFx0XHQnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG5cdFx0XHRcdC4uLnRoaXMub3B0aW9ucy5oZWFkZXJzLFxuXHRcdFx0fSxcblx0XHRcdGJvZHk6IHN0cmluZ2lmaWVkQm9keSxcblx0XHR9KS50aGVuKChyc3ApID0+IHtcblx0XHRcdHJldHVybiB6XG5cdFx0XHRcdC5vYmplY3Qoe1xuXHRcdFx0XHRcdHRyYW5zbGF0aW9uczogei5vYmplY3QoeyB0ZXh0OiB6LnN0cmluZygpIH0pLmFycmF5KCksXG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50cmFuc2Zvcm0oKHsgdHJhbnNsYXRpb25zIH0pID0+IHRyYW5zbGF0aW9ucy5tYXAoKHsgdGV4dCB9KSA9PiB0ZXh0KSlcblx0XHRcdFx0LnBhcnNlKHJzcC5kYXRhLCB7IGVycm9yOiAoKSA9PiAnVW5leHBlY3RlZCBkYXRhJyB9KTtcblx0XHR9KTtcblx0fVxufVxuIl19