anylang
Version:
A translator's kit that uses the free APIs of Google Translate, Yandex, Bing, ChatGPT, and other LLMs
110 lines (108 loc) • 11.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LibreTranslateTranslator = void 0;
var _queryString = _interopRequireDefault(require("query-string"));
var _zod = _interopRequireDefault(require("zod"));
var _BaseTranslator = require("../../BaseTranslator");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
var __awaiter = void 0 && (void 0).__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());
});
};
class LibreTranslateTranslator extends _BaseTranslator.BaseTranslator {
static getSupportedLanguages() {
// eslint-disable
// prettier-ignore
return ["en", "ar", "az", "zh", "cs", "nl", "eo", "fi", "fr", "de", "el", "hi", "hu", "id", "ga", "it", "ja", "ko", "fa", "pl", "pt", "ru", "sk", "es", "sv", "tr", "uk", "vi"];
// eslint-enable
}
constructor(options) {
var _a;
super(options);
this.apiHost = (_a = options.apiHost) !== null && _a !== void 0 ? _a : 'https://translate.terraprint.co/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* () {
const requestData = {
q: text,
source: from,
target: to,
format: 'text'
};
if (this.options.apiKey) {
requestData['api_key'] = this.options.apiKey;
}
return this.fetch(this.apiHost, {
responseType: 'json',
method: 'POST',
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/99.0',
Accept: '*/*',
'Accept-Language': 'en-US,en;q=0.5',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Content-Type': 'application/x-www-form-urlencoded'
},
body: _queryString.default.stringify(requestData)
}).then(rsp => {
return _zod.default.object({
translatedText: _zod.default.string()
}).parse(rsp.data, {
error: () => 'Unexpected data'
}).translatedText;
});
});
}
translateBatch(texts, from, to) {
return __awaiter(this, void 0, void 0, function* () {
return Promise.all(texts.map(text => this.translate(text, from, to)));
});
}
}
exports.LibreTranslateTranslator = LibreTranslateTranslator;
LibreTranslateTranslator.translatorName = 'LibreTranslateTranslator';
LibreTranslateTranslator.isRequiredKey = () => false;
LibreTranslateTranslator.isSupportedAutoFrom = () => true;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRvcnMvdW5zdGFibGUvTGlicmVUcmFuc2xhdGVUcmFuc2xhdG9yL2luZGV4LmpzIiwibmFtZXMiOlsiX3F1ZXJ5U3RyaW5nIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfem9kIiwiX0Jhc2VUcmFuc2xhdG9yIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTGlicmVUcmFuc2xhdGVUcmFuc2xhdG9yIiwiQmFzZVRyYW5zbGF0b3IiLCJnZXRTdXBwb3J0ZWRMYW5ndWFnZXMiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJhcGlIb3N0IiwiX2EiLCJnZXRMZW5ndGhMaW1pdCIsImdldFJlcXVlc3RzVGltZW91dCIsImNoZWNrTGltaXRFeGNlZWRpbmciLCJ0ZXh0IiwiQXJyYXkiLCJpc0FycmF5IiwiYXJyYXlMZW4iLCJyZWR1Y2UiLCJhY2MiLCJsZW5ndGgiLCJleHRyYSIsInRyYW5zbGF0ZSIsImZyb20iLCJ0byIsInJlcXVlc3REYXRhIiwicSIsInNvdXJjZSIsInRhcmdldCIsImZvcm1hdCIsImFwaUtleSIsImZldGNoIiwicmVzcG9uc2VUeXBlIiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsImJvZHkiLCJxdWVyeVN0cmluZyIsInN0cmluZ2lmeSIsInRoZW4iLCJyc3AiLCJ6Iiwib2JqZWN0IiwidHJhbnNsYXRlZFRleHQiLCJzdHJpbmciLCJwYXJzZSIsImRhdGEiLCJlcnJvciIsInRyYW5zbGF0ZUJhdGNoIiwidGV4dHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwidHJhbnNsYXRvck5hbWUiLCJpc1JlcXVpcmVkS2V5IiwiaXNTdXBwb3J0ZWRBdXRvRnJvbSJdLCJzb3VyY2VzIjpbInRyYW5zbGF0b3JzL3Vuc3RhYmxlL0xpYnJlVHJhbnNsYXRlVHJhbnNsYXRvci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcXVlcnlTdHJpbmcgZnJvbSAncXVlcnktc3RyaW5nJztcbmltcG9ydCB6IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7IEJhc2VUcmFuc2xhdG9yLCBUcmFuc2xhdG9yT3B0aW9ucyB9IGZyb20gJy4uLy4uL0Jhc2VUcmFuc2xhdG9yJztcblxuZXhwb3J0IGNsYXNzIExpYnJlVHJhbnNsYXRlVHJhbnNsYXRvciBleHRlbmRzIEJhc2VUcmFuc2xhdG9yIHtcblx0cHVibGljIHN0YXRpYyByZWFkb25seSB0cmFuc2xhdG9yTmFtZSA9ICdMaWJyZVRyYW5zbGF0ZVRyYW5zbGF0b3InO1xuXG5cdHB1YmxpYyBzdGF0aWMgaXNSZXF1aXJlZEtleSA9ICgpID0+IGZhbHNlO1xuXG5cdHB1YmxpYyBzdGF0aWMgaXNTdXBwb3J0ZWRBdXRvRnJvbSA9ICgpID0+IHRydWU7XG5cblx0cHVibGljIHN0YXRpYyBnZXRTdXBwb3J0ZWRMYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlXG5cdFx0Ly8gcHJldHRpZXItaWdub3JlXG5cdFx0cmV0dXJuIFtcblx0XHRcdFwiZW5cIiwgXCJhclwiLCBcImF6XCIsIFwiemhcIiwgXCJjc1wiLFxuXHRcdFx0XCJubFwiLCBcImVvXCIsIFwiZmlcIiwgXCJmclwiLCBcImRlXCIsXG5cdFx0XHRcImVsXCIsIFwiaGlcIiwgXCJodVwiLCBcImlkXCIsIFwiZ2FcIixcblx0XHRcdFwiaXRcIiwgXCJqYVwiLCBcImtvXCIsIFwiZmFcIiwgXCJwbFwiLFxuXHRcdFx0XCJwdFwiLCBcInJ1XCIsIFwic2tcIiwgXCJlc1wiLCBcInN2XCIsXG5cdFx0XHRcInRyXCIsIFwidWtcIiwgXCJ2aVwiXG5cdFx0XTtcblx0XHQvLyBlc2xpbnQtZW5hYmxlXG5cdH1cblxuXHQvLyBVUkwgb2YgeW91ciBpbnN0YW5jZSBvZiBMaWJyZVRyYW5zbGF0ZVxuXHQvLyBmb3IgbG9jYWwgaW5zdGFuY2UgdXNlIFVSTCBcImh0dHA6Ly9sb2NhbGhvc3QvdHJhbnNsYXRlXCJcblx0cHJpdmF0ZSByZWFkb25seSBhcGlIb3N0O1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IFRyYW5zbGF0b3JPcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHR0aGlzLmFwaUhvc3QgPSBvcHRpb25zLmFwaUhvc3QgPz8gJ2h0dHBzOi8vdHJhbnNsYXRlLnRlcnJhcHJpbnQuY28vdHJhbnNsYXRlJztcblx0fVxuXG5cdHB1YmxpYyBnZXRMZW5ndGhMaW1pdCgpIHtcblx0XHRyZXR1cm4gNTAwMDtcblx0fVxuXG5cdHB1YmxpYyBnZXRSZXF1ZXN0c1RpbWVvdXQoKSB7XG5cdFx0cmV0dXJuIDMwMDtcblx0fVxuXG5cdHB1YmxpYyBjaGVja0xpbWl0RXhjZWVkaW5nKHRleHQ6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodGV4dCkpIHtcblx0XHRcdGNvbnN0IGFycmF5TGVuID0gdGV4dC5yZWR1Y2UoKGFjYywgdGV4dCkgPT4gYWNjICsgdGV4dC5sZW5ndGgsIDApO1xuXHRcdFx0Y29uc3QgZXh0cmEgPSBhcnJheUxlbiAtIHRoaXMuZ2V0TGVuZ3RoTGltaXQoKTtcblx0XHRcdHJldHVybiBleHRyYSA+IDAgPyBleHRyYSA6IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGV4dHJhID0gdGV4dC5sZW5ndGggLSB0aGlzLmdldExlbmd0aExpbWl0KCk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPiAwID8gZXh0cmEgOiAwO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBhc3luYyB0cmFuc2xhdGUodGV4dDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpIHtcblx0XHRjb25zdCByZXF1ZXN0RGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcblx0XHRcdHE6IHRleHQsXG5cdFx0XHRzb3VyY2U6IGZyb20sXG5cdFx0XHR0YXJnZXQ6IHRvLFxuXHRcdFx0Zm9ybWF0OiAndGV4dCcsXG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMuYXBpS2V5KSB7XG5cdFx0XHRyZXF1ZXN0RGF0YVsnYXBpX2tleSddID0gdGhpcy5vcHRpb25zLmFwaUtleTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5mZXRjaCh0aGlzLmFwaUhvc3QsIHtcblx0XHRcdHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuXHRcdFx0bWV0aG9kOiAnUE9TVCcsXG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdCdVc2VyLUFnZW50Jzpcblx0XHRcdFx0XHQnTW96aWxsYS81LjAgKFgxMTsgVWJ1bnR1OyBMaW51eCB4ODZfNjQ7IHJ2Ojk5LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvOTkuMCcsXG5cdFx0XHRcdEFjY2VwdDogJyovKicsXG5cdFx0XHRcdCdBY2NlcHQtTGFuZ3VhZ2UnOiAnZW4tVVMsZW47cT0wLjUnLFxuXHRcdFx0XHQnU2VjLUZldGNoLURlc3QnOiAnZW1wdHknLFxuXHRcdFx0XHQnU2VjLUZldGNoLU1vZGUnOiAnY29ycycsXG5cdFx0XHRcdCdTZWMtRmV0Y2gtU2l0ZSc6ICdzYW1lLW9yaWdpbicsXG5cdFx0XHRcdCdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcblx0XHRcdH0sXG5cdFx0XHRib2R5OiBxdWVyeVN0cmluZy5zdHJpbmdpZnkocmVxdWVzdERhdGEpLFxuXHRcdH0pLnRoZW4oKHJzcCkgPT4ge1xuXHRcdFx0cmV0dXJuIHpcblx0XHRcdFx0Lm9iamVjdCh7XG5cdFx0XHRcdFx0dHJhbnNsYXRlZFRleHQ6IHouc3RyaW5nKCksXG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5wYXJzZShyc3AuZGF0YSwgeyBlcnJvcjogKCkgPT4gJ1VuZXhwZWN0ZWQgZGF0YScgfSkudHJhbnNsYXRlZFRleHQ7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgdHJhbnNsYXRlQmF0Y2godGV4dHM6IHN0cmluZ1tdLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwodGV4dHMubWFwKCh0ZXh0KSA9PiB0aGlzLnRyYW5zbGF0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