UNPKG

attranslate

Version:

Text Translator for Websites and Apps

56 lines (55 loc) 2.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GoogleTranslate = void 0; const translate_1 = require("@google-cloud/translate"); const util_1 = require("../util/util"); const lodash_1 = require("lodash"); const managed_json_1 = require("../file-formats/common/managed-json"); class GoogleTranslate { async translateStrings(args) { if (!args.serviceConfig) { (0, util_1.logFatal)("Set '--serviceConfig' to a path that points to a GCloud service account JSON file"); } (0, util_1.checkNotDir)(args.serviceConfig, { errorHint: "serviceConfig" }); const keyFile = (0, managed_json_1.readRawJson)(args.serviceConfig).object; if (!keyFile.project_id) { (0, util_1.logFatal)(`serviceConfig ${(0, util_1.getDebugPath)(args.serviceConfig)} does not contain a project_id`); } const projectId = keyFile.project_id; const clientOptions = { keyFile: args.serviceConfig, }; const client = new translate_1.TranslationServiceClient(clientOptions); const batches = (0, lodash_1.chunk)(args.strings, 10); const results = await Promise.all(batches.map((batch) => this.translateBatch(batch, client, args, projectId))); return (0, lodash_1.flatten)(results); } async translateBatch(batch, client, args, projectId) { const location = "global"; const stringsToTranslate = batch.map((tString) => tString.value); const request = { parent: `projects/${projectId}/locations/${location}`, contents: stringsToTranslate, mimeType: "text/plain", sourceLanguageCode: args.srcLng, targetLanguageCode: args.targetLng, }; const [response] = await client.translateText(request); if (!response.translations) { (0, util_1.logFatal)(`Google-translate did not return translations`); } return response.translations.map((value, index) => { return this.transformGCloudResult(value, batch[index]); }); } transformGCloudResult(result, input) { if (!result.translatedText) { (0, util_1.logFatal)(`Google-translate did not return a result for input '${input.value}' with key '${input.key}'`); } return { key: input.key, translated: result.translatedText, }; } } exports.GoogleTranslate = GoogleTranslate;