Files
GTA4RP/scripts/server/translate.js
2021-11-28 22:49:21 -06:00

235 lines
6.2 KiB
JavaScript

// ===========================================================================
// Vortrex's Roleplay Resource
// https://github.com/VortrexFTW/gtac_roleplay
// ===========================================================================
// FILE: translate.js
// DESC: Provides translation functions
// TYPE: Server (JavaScript)
// ===========================================================================
let translationBaseURL = `http://api.mymemory.translated.net/get?de=example@example.com&q={0}&langpair={1}|{2}`;
let translationLanguages = [
["Abkhazian", "AB"],
["Afar", "AA"],
["Afrikaans", "AF"],
["Albanian", "SQ"],
["Amharic", "AM"],
["Arabic", "AR"],
["Armenian", "HY"],
["Assamese", "AS"],
["Aymara", "AY"],
["Azerbaijani", "AZ"],
["Bashkir", "BA"],
["Basque", "EU"],
["Bengali, Bangla", "BN"],
["Bhutani", "DZ"],
["Bihari", "BH"],
["Bislama", "BI"],
["Breton", "BR"],
["Bulgarian", "BG"],
["Burmese", "MY"],
["Byelorussian", "BE"],
["Cambodian", "KM"],
["Catalan", "CA"],
["Chinese", "ZH"],
["Corsican", "CO"],
["Croatian", "HR"],
["Czech", "CS"],
["Danish", "DA"],
["Dutch", "NL"],
["English", "EN"],
["Esperanto", "EO"],
["Estonian", "ET"],
["Faeroese", "FO"],
["Fiji", "FJ"],
["Finnish", "FI"],
["French", "FR"],
["Frisian", "FY"],
["Gaelic (Scots Gaelic)", "GD"],
["Galician", "GL"],
["Georgian", "KA"],
["German", "DE"],
["Greek", "EL"],
["Greenlandic", "KL"],
["Guarani", "GN"],
["Gujarati", "GU"],
["Hausa", "HA"],
["Hebrew", "IW"],
["Hindi", "HI"],
["Hungarian", "HU"],
["Icelandic", "IS"],
["Indonesian", "IN"],
["Interlingua", "IA"],
["Interlingue", "IE"],
["Inupiak", "IK"],
["Irish", "GA"],
["Italian", "IT"],
["Japanese", "JA"],
["Javanese", "JW"],
["Kannada", "KN"],
["Kashmiri", "KS"],
["Kazakh", "KK"],
["Kinyarwanda", "RW"],
["Kirghiz", "KY"],
["Kirundi", "RN"],
["Korean", "KO"],
["Kurdish", "KU"],
["Laothian", "LO"],
["Latin", "LA"],
["Latvian, Lettish", "LV"],
["Lingala", "LN"],
["Lithuanian", "LT"],
["Macedonian", "MK"],
["Malagasy", "MG"],
["Malay", "MS"],
["Malayalam", "ML"],
["Maltese", "MT"],
["Maori", "MI"],
["Marathi", "MR"],
["Moldavian", "MO"],
["Mongolian", "MN"],
["Nauru", "NA"],
["Nepali", "NE"],
["Norwegian", "NO"],
["Occitan", "OC"],
["Oriya", "OR"],
["Oromo, Afan", "OM"],
["Pashto, Pushto", "PS"],
["Persian", "FA"],
["Polish", "PL"],
["Portuguese", "PT"],
["Punjabi", "PA"],
["Quechua", "QU"],
["Rhaeto-Romance", "RM"],
["Romanian", "RO"],
["Russian", "RU"],
["Samoan", "SM"],
["Sangro", "SG"],
["Sanskrit", "SA"],
["Serbian", "SR"],
["Serbo-Croatian", "SH"],
["Sesotho", "ST"],
["Setswana", "TN"],
["Shona", "SN"],
["Sindhi", "SD"],
["Singhalese", "SI"],
["Siswati", "SS"],
["Slovak", "SK"],
["Slovenian", "SL"],
["Somali", "SO"],
["Spanish", "ES"],
["Sudanese", "SU"],
["Swahili", "SW"],
["Swedish", "SV"],
["Tagalog", "TL"],
["Tajik", "TG"],
["Tamil", "TA"],
["Tatar", "TT"],
["Tegulu", "TE"],
["Thai", "TH"],
["Tibetan", "BO"],
["Tigrinya", "TI"],
["Tonga", "TO"],
["Tsonga", "TS"],
["Turkish", "TR"],
["Turkmen", "TK"],
["Twi", "TW"],
["Ukrainian", "UK"],
["Urdu", "UR"],
["Uzbek", "UZ"],
["Vietnamese", "VI"],
["Volapuk", "VO"],
["Welsh", "CY"],
["Wolof", "WO"],
["Xhosa", "XH"],
["Yiddish", "JI"],
["Yoruba", "YO"],
["Zulu", "ZU"]
],
// ===========================================================================
translationCache = [];
// ===========================================================================
async function translateMessage(messageText, translateFrom = defaultLanguageId, translateTo = defaultLanguageId) {
if(translateFrom == translateTo) {
return messageText;
}
return new Promise(resolve => {
for(let i in translationCache[translateFrom][translateTo]) {
if(translationCache[translateFrom][translateTo][0] == messageText) {
logToConsole(LOG_DEBUG, `[Translate]: Using existing translation for ${translationLanguages[translateFrom][0]} to ${translationLanguages[translateTo][0]} - (${messageText}), (${translationCache[translateFrom][translateTo][1]})`);
resolve(translationCache[translateFrom][translateTo][1]);
}
}
let thisTranslationURL = translateURL.format(encodeURI(messageText), translationLanguages[translateFrom][1], translationLanguages[translateTo][1], scriptConfig.translatorEmailAddress);
httpGet(
thisTranslationURL,
"",
function(data) {
data = String(data).substr(0, String(data).lastIndexOf("}")+1);
let translationData = JSON.parse(data);
translationCache[translateFrom][translateTo].push([messageText, translationData.responseData.translatedText]);
resolve(translationData.responseData.translatedText);
},
function(data) {
}
);
});
}
// ===========================================================================
function addTranslationToCache(originalText, translatedText, fromLanguageId, toLanguageId) {
translationCache[fromLanguageId][toLanguageId].push([originalText, translatedText]);
return true;
}
// ===========================================================================
function formatTranslationURL(originalText, fromLanguageId, toLanguageId) {
return getServerData().translation.translationBaseURL.format(encodeURI(originalText), getLanguageShortCode(fromLanguageId), getLanguageShortCode(toLanguageId));
}
// ===========================================================================
function getLanguageShortCode(languageId) {
return translationLanguages[languageId][1];
}
// ===========================================================================
function getLanguageFullName(languageId) {
return translationLanguages[languageId][0];
}
// ===========================================================================
function getLanguageIdFromFullName(languageName) {
let languages = translationLanguages;
for(let i in languages) {
if(languages[i][0] == languageName) {
return i;
}
}
return false;
}
// ===========================================================================
function getLanguageIdFromShortCode(languageShortCode) {
let languages = translationLanguages;
for(let i in languages) {
if(languages[i][1] == languageShortCode) {
return i;
}
}
return false;
}
// ===========================================================================