diff --git a/scripts/server/translate.js b/scripts/server/translate.js index fdbbf4dc..4713b665 100644 --- a/scripts/server/translate.js +++ b/scripts/server/translate.js @@ -8,33 +8,184 @@ // 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 = []; + // --------------------------------------------------------------------------- -function translateMessage(messageText, fromLanguageId, toLanguageId) { - let translatedText = ""; +async function translateMessage(messageText, translateFrom = defaultLanguageId, translateTo = defaultLanguageId) { + if(translateFrom == translateTo) { + return messageText; + } - let thisTranslationURL = formatTranslationURL(messageText, fromLanguageId, toLanguageId); - httpGet( - thisTranslationURL, - "", - function(data) { - data = toString(data).substr(0, toString(data).lastIndexOf("}")+1); - let translationData = JSON.parse(data); - //this.translatedText = translationData.responseData.translatedText; - addTranslationToCache(messageText, translationData.responseData.translatedText, fromLanguageId, toLanguageId); - return translationData.responseData.translatedText; - }, - function(data) { + return new Promise(resolve => { + for(let i in translationCache[translateFrom][translateTo]) { + if(translationCache[translateFrom][translateTo][0] == messageText) { + console.log(`[Translate]: Using existing translation for ${translationLanguages[translateFrom][0]} to ${translationLanguages[translateTo][0]} - (${messageText}), (${translationCache[translateFrom][translateTo][1]})`); + resolve(translationCache[translateFrom][translateTo][1]); + } } - ); - return this.translatedText; + 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) { - getServerData().translation.cache[fromLanguageId][toLanguageId].push([originalText, translatedText]); + translationCache[fromLanguageId][toLanguageId].push([originalText, translatedText]); return true; } @@ -47,19 +198,19 @@ function formatTranslationURL(originalText, fromLanguageId, toLanguageId) { // --------------------------------------------------------------------------- function getLanguageShortCode(languageId) { - return getServerData().translation.languages[languageId][1]; + return translationLanguages[languageId][1]; } // --------------------------------------------------------------------------- function getLanguageFullName(languageId) { - return getServerData().translation.languages[languageId][0]; + return translationLanguages[languageId][0]; } // --------------------------------------------------------------------------- function getLanguageIdFromFullName(languageName) { - let languages = getServerData().translation.languages; + let languages = translationLanguages; for(let i in languages) { if(languages[i][0] == languageName) { return i; @@ -71,7 +222,7 @@ function getLanguageIdFromFullName(languageName) { // --------------------------------------------------------------------------- function getLanguageIdFromShortCode(languageShortCode) { - let languages = getServerData().translation.languages; + let languages = translationLanguages; for(let i in languages) { if(languages[i][1] == languageShortCode) { return i;