162 lines
14 KiB
JavaScript
162 lines
14 KiB
JavaScript
"use strict";
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.register = exports.i18n = exports.onError = void 0;
|
|
const path = require("path");
|
|
const index_1 = require("../index");
|
|
const i18n_1 = require("../lib/i18n");
|
|
const translate_1 = require("@plastichub/osr-i18n/lib/translate");
|
|
const osr_commons_1 = require("@plastichub/osr-commons");
|
|
const liquid_1 = require("../liquidjs/liquid");
|
|
const osr_commons_2 = require("@plastichub/osr-commons");
|
|
const openai_1 = require("@plastichub/osr-ai/lib/openai");
|
|
const openAI = false;
|
|
const translateOpenAI = (text, srcLang, dstLang, store, engine) => __awaiter(void 0, void 0, void 0, function* () {
|
|
const query = `translate from ${srcLang} to ${dstLang}: ${text}`;
|
|
const config = (0, osr_commons_2.CONFIG_DEFAULT)();
|
|
const _store = path.resolve((0, osr_commons_1.resolve)(engine.variables['i18n'], false, engine.variables));
|
|
const cached = (0, translate_1.storeGet)(_store, text);
|
|
if (cached) {
|
|
return cached;
|
|
}
|
|
const options = {
|
|
query,
|
|
api_key: process.env.OPENAI_API_KEY || config.openai.key,
|
|
filters: '',
|
|
logLevel: engine.options.logLevel || 'debug',
|
|
gui: false,
|
|
variables: Object.assign({}, engine.variables),
|
|
};
|
|
let ret = yield (0, openai_1.prompt)(options);
|
|
if (ret) {
|
|
ret = (0, openai_1.applyFilters)(ret, options.filters || []);
|
|
(0, translate_1.storeSet)(_store, text, ret);
|
|
}
|
|
return ret;
|
|
});
|
|
const onError = (status, text, engine, sourceLanguage, targetLanguage, store) => __awaiter(void 0, void 0, void 0, function* () {
|
|
if (!openAI) {
|
|
return text;
|
|
}
|
|
if (status !== 403) {
|
|
return text;
|
|
}
|
|
return yield translateOpenAI(text, sourceLanguage, targetLanguage, store, engine);
|
|
return text;
|
|
});
|
|
exports.onError = onError;
|
|
const i18n = (expr, options, engine, parsed = [], _ctx, args = {}, templateFile = "") => __awaiter(void 0, void 0, void 0, function* () {
|
|
if (!engine.variables['i18n']) {
|
|
index_1.logger.warn(`i18n : i18n is not defined in the variables`);
|
|
return expr;
|
|
}
|
|
const store = path.resolve((0, osr_commons_1.resolve)(engine.variables['i18n'], false, engine.variables));
|
|
if (!store) {
|
|
index_1.logger.error(`i18n : i18n store not found`);
|
|
return expr;
|
|
}
|
|
const srcLang = engine.variables['sourceLanguage'];
|
|
const dstLang = engine.variables['targetLanguage'];
|
|
if (!srcLang || !dstLang || (srcLang === dstLang)) {
|
|
return expr;
|
|
}
|
|
let translation;
|
|
try {
|
|
if (expr === 'Injectors') {
|
|
//debugger
|
|
}
|
|
translation = yield (0, translate_1.translateText)(expr, srcLang, dstLang, { store });
|
|
}
|
|
catch (e) {
|
|
index_1.logger.error(`Error translating text ${e.message} @ ${templateFile} : ${expr}`);
|
|
}
|
|
return translation || expr;
|
|
});
|
|
exports.i18n = i18n;
|
|
const register = (engine) => {
|
|
engine.registerTag('i18n', {
|
|
parse(tagToken, remainTokens) {
|
|
this.tpls = [];
|
|
const args = tagToken.args;
|
|
let closed = false;
|
|
this['currentFile'] = tagToken.file;
|
|
const tokenizer = new liquid_1.Tokenizer(args, this.liquid.options.operatorsTrie);
|
|
const begin = tokenizer.p;
|
|
while (remainTokens.length) {
|
|
let token = remainTokens.shift();
|
|
if (token.name === 'i18n-end') {
|
|
closed = true;
|
|
break;
|
|
}
|
|
let tpl = this.liquid.parser.parseToken(token, remainTokens);
|
|
this.tpls.push(tpl);
|
|
}
|
|
if (!closed)
|
|
throw new Error(`tag ${tagToken.getText()} not closed`);
|
|
tokenizer.p = begin;
|
|
this.hash = new liquid_1.Hash(tokenizer.remaining());
|
|
},
|
|
*render(context, emitter) {
|
|
let { liquid } = this;
|
|
let translation;
|
|
let output = '';
|
|
const emitter2 = {
|
|
buffer: emitter.buffer,
|
|
write: function (html) {
|
|
this.buffer += html;
|
|
output += html;
|
|
}
|
|
};
|
|
yield liquid.renderer.renderTemplates(this.tpls, context, emitter2);
|
|
let text = output;
|
|
const owner = this.liquid.owner;
|
|
const variables = owner.variables;
|
|
if (!owner.variables['i18n']) {
|
|
index_1.logger.warn(`i18n tag used in ${this['currentFile']} but i18n is not defined in the variables`);
|
|
return text;
|
|
}
|
|
if (text &&
|
|
text.length &&
|
|
(0, i18n_1.clean)(text).length &&
|
|
variables['i18n'] &&
|
|
variables['sourceLanguage'] &&
|
|
variables['targetLanguage']) {
|
|
const store = path.resolve((0, osr_commons_1.resolve)(owner.variables['i18n'], false, variables));
|
|
const srcLang = variables['sourceLanguage'];
|
|
const dstLang = variables['targetLanguage'];
|
|
try {
|
|
translation = yield (0, translate_1.translateText)(text, srcLang, dstLang, {
|
|
store
|
|
});
|
|
}
|
|
catch (e) {
|
|
index_1.logger.error(`Error translating \n\t${text} \n in ${this['currentFile']}: ${e.message} : ${e.response.data.message}`);
|
|
/*
|
|
translation = yield onError(e.response.status, text, owner, srcLang, dstLang, store)
|
|
if (translation) {
|
|
// storeSet(text, translation, srcLang, dstLang, store)
|
|
logger.info(`Translated via OpenAI`)
|
|
//debugger
|
|
return translation
|
|
}
|
|
*/
|
|
}
|
|
}
|
|
else {
|
|
index_1.logger.warn(`Invalid parameters for i18n tag in ${this['currentFile']}`);
|
|
}
|
|
//yield liquid.renderer.renderTemplates(this.tpls, context, emitter)
|
|
return translation || text;
|
|
}
|
|
});
|
|
};
|
|
exports.register = register;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wbHVnaW5zL2kxOG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQTRCO0FBQzVCLG9DQUF5QztBQUN6QyxzQ0FBbUM7QUFFbkMsa0VBQXNGO0FBQ3RGLHlEQUFpRDtBQUVqRCwrQ0FBNkQ7QUFDN0QseURBQXdEO0FBRXhELDBEQUE0RTtBQUU1RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUE7QUFFcEIsTUFBTSxlQUFlLEdBQUcsQ0FBTyxJQUFZLEVBQUUsT0FBZSxFQUFFLE9BQWUsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFFL0csTUFBTSxLQUFLLEdBQUcsa0JBQWtCLE9BQU8sT0FBTyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUE7SUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBYyxHQUFTLENBQUE7SUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFBLHFCQUFPLEVBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDdkYsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNyQyxJQUFJLE1BQU0sRUFBRTtRQUNYLE9BQU8sTUFBTSxDQUFBO0tBQ2I7SUFFRCxNQUFNLE9BQU8sR0FBUTtRQUNwQixLQUFLO1FBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRztRQUN4RCxPQUFPLEVBQUUsRUFBRTtRQUNYLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPO1FBQzVDLEdBQUcsRUFBRSxLQUFLO1FBQ1YsU0FBUyxvQkFBTyxNQUFNLENBQUMsU0FB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
|