mtengines
Version:
Machine Translation (MT) library written in TypeScript
144 lines • 5.82 kB
JavaScript
;
/*******************************************************************************
* Copyright (c) 2023 - 2025 Maxprograms.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse License 1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-v10.html
*
* Contributors:
* Maxprograms - initial API and implementation
*******************************************************************************/
Object.defineProperty(exports, "__esModule", { value: true });
exports.YandexTranslator = void 0;
const typesxml_1 = require("typesxml");
const MTMatch_1 = require("./MTMatch");
const MTUtils_1 = require("./MTUtils");
class YandexTranslator {
apiKey;
srcLang;
tgtLang;
// hardcoded because reading pairs from the API times out
static directions = ["az-ru", "be-bg", "be-cs", "be-de", "be-en", "be-es", "be-fr", "be-it", "be-pl",
"be-ro", "be-ru", "be-sr", "be-tr", "bg-be", "bg-ru", "bg-uk", "ca-en", "ca-ru", "cs-be", "cs-en", "cs-ru", "cs-uk",
"da-en", "da-ru", "de-be", "de-en", "de-es", "de-fr", "de-it", "de-ru", "de-tr", "de-uk", "el-en", "el-ru", "en-be",
"en-ca", "en-cs", "en-da", "en-de", "en-el", "en-es", "en-et", "en-fi", "en-fr", "en-hu", "en-it", "en-lt", "en-lv",
"en-mk", "en-nl", "en-no", "en-pt", "en-ru", "en-sk", "en-sl", "en-sq", "en-sv", "en-tr", "en-uk", "es-be", "es-de",
"es-en", "es-ru", "es-uk", "et-en", "et-ru", "fi-en", "fi-ru", "fr-be", "fr-de", "fr-en", "fr-ru", "fr-uk", "hr-ru",
"hu-en", "hu-ru", "hy-ru", "it-be", "it-de", "it-en", "it-ru", "it-uk", "lt-en", "lt-ru", "lv-en", "lv-ru", "mk-en",
"mk-ru", "nl-en", "nl-ru", "no-en", "no-ru", "pl-be", "pl-ru", "pl-uk", "pt-en", "pt-ru", "ro-be", "ro-ru", "ro-uk",
"ru-az", "ru-be", "ru-bg", "ru-ca", "ru-cs", "ru-da", "ru-de", "ru-el", "ru-en", "ru-es", "ru-et", "ru-fi", "ru-fr",
"ru-hr", "ru-hu", "ru-hy", "ru-it", "ru-lt", "ru-lv", "ru-mk", "ru-nl", "ru-no", "ru-pl", "ru-pt", "ru-ro", "ru-sk",
"ru-sl", "ru-sq", "ru-sr", "ru-sv", "ru-tr", "ru-uk", "sk-en", "sk-ru", "sl-en", "sl-ru", "sq-en", "sq-ru", "sr-be",
"sr-ru", "sr-uk", "sv-en", "sv-ru", "tr-be", "tr-de", "tr-en", "tr-ru", "tr-uk", "uk-bg", "uk-cs", "uk-de", "uk-en",
"uk-es", "uk-fr", "uk-it", "uk-pl", "uk-ro", "uk-ru", "uk-sr", "uk-tr"];
constructor(apiKey) {
this.apiKey = apiKey;
}
getName() {
return 'Yandex Translate API';
}
getShortName() {
return 'Yandex';
}
getSourceLanguages() {
return new Promise((resolve) => {
let languages = [];
for (let pair of YandexTranslator.directions) {
let lang = pair.split('-')[0];
if (!languages.includes(lang)) {
languages.push(lang);
}
}
languages.sort(new Intl.Collator('en').compare);
resolve(languages);
});
}
getTargetLanguages() {
return new Promise((resolve) => {
let languages = [];
for (let pair of YandexTranslator.directions) {
let lang = pair.split('-')[1];
if (!languages.includes(lang)) {
languages.push(lang);
}
}
languages.sort(new Intl.Collator('en').compare);
resolve(languages);
});
}
setSourceLanguage(lang) {
this.srcLang = lang;
}
getSourceLanguage() {
return this.srcLang;
}
setTargetLanguage(lang) {
this.tgtLang = lang;
}
getTargetLanguage() {
return this.tgtLang;
}
translate(source) {
let params = {
"texts": [
source
],
"targetLanguageCode": this.tgtLang,
"sourceLanguageCode": this.srcLang
};
let data = JSON.stringify(params);
return new Promise((resolve, reject) => {
fetch("https://translate.api.cloud.yandex.net/translate/v2/translate", {
method: 'POST',
headers: [
['Authorization', 'Api-Key ' + this.apiKey],
['Content-Type', 'application/json']
],
body: data
}).then(async (response) => {
if (response.ok) {
let json = await response.json();
resolve(json.translations[0].text);
}
else {
reject(new Error(response.statusText));
}
}).catch((error) => {
reject(error);
});
});
}
getMTMatch(source, terms) {
return new Promise((resolve, reject) => {
this.translate(MTUtils_1.MTUtils.plainText(source)).then((translation) => {
let target = new typesxml_1.XMLElement('target');
target.addString(translation);
resolve(new MTMatch_1.MTMatch(source, target, this.getShortName()));
}).catch((error) => {
reject(error);
});
});
}
handlesTags() {
return false;
}
static getDirections() {
return this.directions;
}
fixesMatches() {
return false;
}
fixMatch(originalSource, matchSource, matchTarget) {
return Promise.reject(new Error('fixMatch not implemented for Yandex Translate API'));
}
fixesTags() {
return false;
}
fixTags(source, target) {
return Promise.reject(new Error('fixTags not implemented for Yandex Translate API'));
}
}
exports.YandexTranslator = YandexTranslator;
//# sourceMappingURL=YandexTranslator.js.map