mono/packages/osrl/plugins/i18n.js
2025-12-30 16:33:03 +01:00

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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