UNPKG

attranslate

Version:

Text Translator for Websites and Apps

73 lines (72 loc) 2.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.invokeTranslationService = void 0; const matcher_definitions_1 = require("../matchers/matcher-definitions"); const service_definitions_1 = require("../services/service-definitions"); async function invokeTranslationService(serviceInputs, args) { /** * Some translation services throw errors if they see empty strings. * Therefore, we bypass empty strings without changing them. */ const rawInputs = []; const results = new Map(); serviceInputs.forEach((value, key) => { if (args.service != 'key-as-translation' && (!value || !value.trim().length)) { results.set(key, value); } else { rawInputs.push({ key, value: value !== null && value !== void 0 ? value : "", }); } }); if (results.size) { console.info(`Bypass ${results.size} strings because they are empty...`); } let translateResults = []; if (rawInputs.length) { translateResults = await runTranslationService(rawInputs, args); } translateResults.forEach((tResult) => { results.set(tResult.key, tResult.translated); }); return { inputs: serviceInputs, results, }; } exports.invokeTranslationService = invokeTranslationService; async function runTranslationService(rawInputs, args) { const matcher = (0, matcher_definitions_1.instantiateTMatcher)(args.matcher); const replacers = new Map(); rawInputs.forEach((rawString) => { const replacer = (0, matcher_definitions_1.replaceInterpolations)(rawString.value, matcher); replacers.set(rawString.key, replacer); }); const replacedInputs = rawInputs.map((rawString) => { return { key: rawString.key, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion value: replacers.get(rawString.key).clean, }; }); const serviceArgs = { strings: replacedInputs, srcLng: args.srcLng, targetLng: args.targetLng, serviceConfig: args.serviceConfig, }; console.info(`Invoke '${args.service}' from '${args.srcLng}' to '${args.targetLng}' with ${serviceArgs.strings.length} inputs...`); const translationService = await (0, service_definitions_1.instantiateTService)(args.service); const rawResults = await translationService.translateStrings(serviceArgs); return rawResults.map((rawResult) => { const cleanResult = (0, matcher_definitions_1.reInsertInterpolations)(rawResult.translated, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion replacers.get(rawResult.key).replacements); return { key: rawResult.key, translated: cleanResult, }; }); }