diff --git a/scripts/server/locale.js b/scripts/server/locale.js index 02edab35..f10c0b02 100644 --- a/scripts/server/locale.js +++ b/scripts/server/locale.js @@ -7,9 +7,22 @@ // TYPE: Server (JavaScript) // =========================================================================== +let translateURL = "http://api.mymemory.translated.net/get?de={3}&q={0}&langpair={1}|{2}"; + +// =========================================================================== + function initLocaleScript() { logToConsole(LOG_INFO, "[VRR.Locale]: Initializing locale script ..."); getServerData().localeStrings = loadAllLocaleStrings(); + + // Translation Cache + getServerData().cachedTranslations = new Array(getGlobalConfig().locale.locales.length); + getServerData().cachedTranslationFrom = new Array(getGlobalConfig().locale.locales.length); + getServerData().cachedTranslationFrom.fill([]); + getServerData().cachedTranslations.fill(getServerData().cachedTranslationFrom); + + getGlobalConfig().locale.defaultLanguageId = getLocaleFromParams(getGlobalConfig().locale.defaultLanguageId); + logToConsole(LOG_INFO, "[VRR.Locale]: Locale script initialized!"); } @@ -67,7 +80,7 @@ function getPlayerLocaleName(client) { function loadAllLocaleStrings() { let tempLocaleStrings = {}; - let locales = getGlobalConfig().locales; + let locales = getGlobalConfig().locale.locales; for(let i in locales) { let localeData = locales[i]; let localeFile = JSON.parse(loadTextFile(`locale/${localeData[1]}.json`)); @@ -105,7 +118,7 @@ function getLocaleFromParams(params) { // =========================================================================== function getLocales() { - return getGlobalConfig().locales; + return getGlobalConfig().locale.locales; } // =========================================================================== @@ -150,4 +163,52 @@ function getLocaleData(localeId) { return false; } +// =========================================================================== + +function reloadLocaleConfigurationCommand(command, params, client) { + getGlobalConfig().locale = loadLocaleConfig(); + getServerData().localeStrings = loadAllLocaleStrings(); + + // Translation Cache + getServerData().cachedTranslations = new Array(getGlobalConfig().locale.locales.length); + getServerData().cachedTranslationFrom = new Array(getGlobalConfig().locale.locales.length); + getServerData().cachedTranslationFrom.fill([]); + getServerData().cachedTranslations.fill(getServerData().cachedTranslationFrom); + + getGlobalConfig().locale.defaultLanguageId = getLocaleFromParams(getGlobalConfig().locale.defaultLanguage); + + messageAdmins(`${client.name}{MAINCOLOUR} has reloaded the locale settings and texts`); +} + +// =========================================================================== + +async function translateMessage(messageText, translateFrom = getGlobalConfig().locale.defaultLanguageId, translateTo = getGlobalConfig().locale.defaultLanguageId) { + return new Promise(resolve => { + if(translateFrom == translateTo) { + resolve(messageText); + } + + for(let i in cachedTranslations[translateFrom][translateTo]) { + if(cachedTranslations[translateFrom][translateTo][i][0] == messageText) { + logToConsole(LOG_DEBUG, `[Translate]: Using existing translation for ${getGlobalConfig().locale.locales[translateFrom][0]} to ${getGlobalConfig().locale.locales[translateTo][0]} - (${messageText}), (${cachedTranslations[translateFrom][translateTo][i][1]})`); + resolve(cachedTranslations[translateFrom][translateTo][i][1]); + } + } + + let thisTranslationURL = translateURL.format(encodeURI(messageText), toUpperCase(getGlobalConfig().locale.locales[translateFrom][2]), toUpperCase(getGlobalConfig().locale.locales[translateTo][2]), getGlobalConfig().locale.apiEmail); + httpGet( + thisTranslationURL, + "", + function(data) { + data = ArrayBufferToString(data); + let translationData = JSON.parse(data); + cachedTranslations[translateFrom][translateTo].push([messageText, translationData.responseData.translatedText]); + resolve(translationData.responseData.translatedText); + }, + function(data) { + } + ); + }); +} + // =========================================================================== \ No newline at end of file