From 416566962bdff953cbfff9bd4a7c0cd7152c5b58 Mon Sep 17 00:00:00 2001 From: Code Date: Tue, 28 Jan 2025 17:34:56 +0100 Subject: [PATCH] refactor translate --- packages/i18n/dist/index.d.ts | 1 - packages/i18n/dist/index.js | 3 +- packages/i18n/dist/lib/async-iterator.js | 18 +- packages/i18n/dist/lib/glossary.js | 2 +- packages/i18n/dist/lib/t.d.ts | 1 + packages/i18n/dist/lib/t.js | 2 + packages/i18n/dist/lib/translate.d.ts | 19 +- packages/i18n/dist/lib/translate.js | 377 +-------------- packages/i18n/dist/lib/translate_commons.d.ts | 11 + packages/i18n/dist/lib/translate_commons.js | 178 ++++++++ packages/i18n/dist/lib/translate_ex.d.ts | 5 +- packages/i18n/dist/lib/translate_ex.js | 99 ++-- .../i18n/dist/lib/translate_json copy.d.ts | 2 + packages/i18n/dist/lib/translate_json copy.js | 21 + packages/i18n/dist/lib/translate_json.d.ts | 2 + packages/i18n/dist/lib/translate_json.js | 21 + packages/i18n/dist/lib/translate_markup.d.ts | 2 + packages/i18n/dist/lib/translate_markup.js | 30 ++ packages/i18n/dist/lib/translate_text.d.ts | 2 + packages/i18n/dist/lib/translate_text.js | 51 +++ packages/i18n/dist/lib/translate_toml.d.ts | 2 + packages/i18n/dist/lib/translate_toml.js | 30 ++ packages/i18n/dist/lib/translate_xls.d.ts | 2 + packages/i18n/dist/lib/translate_xls.js | 56 +++ packages/i18n/dist/lib/translate_yaml.d.ts | 3 + packages/i18n/dist/lib/translate_yaml.js | 31 ++ packages/i18n/package.json | 12 +- packages/i18n/src/index.ts | 3 +- packages/i18n/src/lib/async-iterator.ts | 17 +- packages/i18n/src/lib/cache.ts | 0 packages/i18n/src/lib/glossary.ts | 1 + packages/i18n/src/lib/translate.ts | 429 +----------------- packages/i18n/src/lib/translate_commons.ts | 197 ++++++++ packages/i18n/src/lib/translate_ex.ts | 105 ----- packages/i18n/src/lib/translate_json.ts | 27 ++ packages/i18n/src/lib/translate_markup.ts | 37 ++ packages/i18n/src/lib/translate_text.ts | 55 +++ packages/i18n/src/lib/translate_toml.ts | 36 ++ packages/i18n/src/lib/translate_xls.ts | 63 +++ packages/i18n/src/lib/translate_yaml.ts | 31 ++ packages/i18n/tsconfig.json | 4 +- 41 files changed, 1007 insertions(+), 981 deletions(-) create mode 100644 packages/i18n/dist/lib/t.d.ts create mode 100644 packages/i18n/dist/lib/t.js create mode 100644 packages/i18n/dist/lib/translate_commons.d.ts create mode 100644 packages/i18n/dist/lib/translate_commons.js create mode 100644 packages/i18n/dist/lib/translate_json copy.d.ts create mode 100644 packages/i18n/dist/lib/translate_json copy.js create mode 100644 packages/i18n/dist/lib/translate_json.d.ts create mode 100644 packages/i18n/dist/lib/translate_json.js create mode 100644 packages/i18n/dist/lib/translate_markup.d.ts create mode 100644 packages/i18n/dist/lib/translate_markup.js create mode 100644 packages/i18n/dist/lib/translate_text.d.ts create mode 100644 packages/i18n/dist/lib/translate_text.js create mode 100644 packages/i18n/dist/lib/translate_toml.d.ts create mode 100644 packages/i18n/dist/lib/translate_toml.js create mode 100644 packages/i18n/dist/lib/translate_xls.d.ts create mode 100644 packages/i18n/dist/lib/translate_xls.js create mode 100644 packages/i18n/dist/lib/translate_yaml.d.ts create mode 100644 packages/i18n/dist/lib/translate_yaml.js delete mode 100644 packages/i18n/src/lib/cache.ts create mode 100644 packages/i18n/src/lib/translate_commons.ts delete mode 100644 packages/i18n/src/lib/translate_ex.ts create mode 100644 packages/i18n/src/lib/translate_json.ts create mode 100644 packages/i18n/src/lib/translate_markup.ts create mode 100644 packages/i18n/src/lib/translate_text.ts create mode 100644 packages/i18n/src/lib/translate_toml.ts create mode 100644 packages/i18n/src/lib/translate_xls.ts create mode 100644 packages/i18n/src/lib/translate_yaml.ts diff --git a/packages/i18n/dist/index.d.ts b/packages/i18n/dist/index.d.ts index d9247846..ebbaca84 100644 --- a/packages/i18n/dist/index.d.ts +++ b/packages/i18n/dist/index.d.ts @@ -1,7 +1,6 @@ export { Logger } from 'tslog'; export { MODULE_NAME } from './constants.js'; export { sanitize } from './_cli.js'; -export * from './lib/index.js'; export * from './options.js'; export * from './types.js'; export * from './zod_schema.js'; diff --git a/packages/i18n/dist/index.js b/packages/i18n/dist/index.js index 44476404..6d3ffdfd 100644 --- a/packages/i18n/dist/index.js +++ b/packages/i18n/dist/index.js @@ -2,10 +2,9 @@ export { Logger } from 'tslog'; import { createLogger } from '@polymech/log'; export { MODULE_NAME } from './constants.js'; export { sanitize } from './_cli.js'; -export * from './lib/index.js'; export * from './options.js'; export * from './types.js'; export * from './zod_schema.js'; export * from './zod_types.js'; export const logger = createLogger('commons'); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3BDLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxZQUFZLENBQUE7QUFDMUIsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLGdCQUFnQixDQUFBO0FBRTlCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBTyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUEifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXBDLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMsWUFBWSxDQUFBO0FBQzFCLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxnQkFBZ0IsQ0FBQTtBQUU5QixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/i18n/dist/lib/async-iterator.js b/packages/i18n/dist/lib/async-iterator.js index 1c39925b..e1d91781 100644 --- a/packages/i18n/dist/lib/async-iterator.js +++ b/packages/i18n/dist/lib/async-iterator.js @@ -58,11 +58,10 @@ export async function transformPath(obj, keys, transform, throttleDelay, concurr const exampleTransformFunction = async (input, path) => { if (input === 'random') throw new Error('API error'); - console.log('translate : ' + input); return input.toUpperCase(); }; export const defaultError = (path, value, error) => { - console.error(`Error at path: ${path}, value: ${value}, error: ${error}`); + // logger.error(`Error at path: ${path}, value: ${value}, error: ${error}`) }; export const defaultOptions = (options = {}) => { return { @@ -75,17 +74,4 @@ export const defaultOptions = (options = {}) => { ...options }; }; -const data = {}; -const runTransformation = async () => { - // const testTransformFunction = testFilters([isNumber, isBoolean]) - const options = defaultOptions(); - try { - await transformObject(data, options.transform, options.path, options.throttleDelay, options.concurrentTasks, options.errorCallback, options.filterCallback); - console.log('Transformed object:', data); - console.log('All transformations were successful.'); - } - catch (error) { - console.error('Transformation failed:', error); - } -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtaXRlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2FzeW5jLWl0ZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLE9BQU8sSUFBSSxNQUFNLE9BQU8sQ0FBQTtBQWdCeEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFXLEtBQUssRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFXLEtBQUssRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUN2RixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQVcsS0FBSyxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUVwRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFpQixFQUFrQixFQUFFO0lBQzdELE9BQU8sS0FBSyxFQUFFLEtBQWEsRUFBRSxFQUFFO1FBQzNCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0QixPQUFPLEtBQUssQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQW9CLEVBQUUsRUFBRSxFQUFFLENBQ3JEO0lBQ0ksUUFBUSxFQUFFLFNBQVMsRUFB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtaXRlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2FzeW5jLWl0ZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLE9BQU8sSUFBSSxNQUFNLE9BQU8sQ0FBQTtBQWdCeEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFXLEtBQUssRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFXLEtBQUssRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUN2RixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQVcsS0FBSyxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUVwRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFpQixFQUFrQixFQUFFO0lBQzdELE9BQU8sS0FBSyxFQUFFLEtBQWEsRUFBRSxFQUFFO1FBQzNCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0QixPQUFPLEtBQUssQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQW9CLEVBQUUsRUFBRSxFQUFFLENBQ3JEO0lBQ0ksUUFBUSxFQUFFLFNBQVMsRUFB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 \ No newline at end of file diff --git a/packages/i18n/dist/lib/glossary.js b/packages/i18n/dist/lib/glossary.js index 1a29207b..370626b8 100644 --- a/packages/i18n/dist/lib/glossary.js +++ b/packages/i18n/dist/lib/glossary.js @@ -95,4 +95,4 @@ export const _data = (storeRoot, srcLang, dstLang) => { return read(filePath, 'string'); } }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvc3NhcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2dsb3NzYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxNQUFNLE1BQU0sWUFBWSxDQUFBO0FBRXBDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDbkQsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRXBELE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFbEQsT0FBTyxFQUNILGtCQUFrQixFQUNsQixrQkFBa0IsRUFDckIsTUFBTSxpQkFBaUIsQ0FBQTtBQUd4QixPQUFPLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsYUFBYSxPQUFPLElBQUksT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFBO0FBRTlGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FDeEQsSUFBSSxDQUFD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QUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBd0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUE7SUFDdkUsQ0FBQztBQUNMLENBQUMsQ0FBQTtBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLFNBQWlCLEVBQUUsT0FBZSxFQUFFLE9BQWUsRUFBTyxFQUFFO0lBQzlFLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQzVDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzlELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0FBQ0wsQ0FBQyxDQUFBIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvc3NhcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2dsb3NzYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxNQUFNLE1BQU0sWUFBWSxDQUFBO0FBRXBDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDbkQsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRXBELE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFbEQsT0FBTyxFQUNILGtCQUFrQixFQUNsQixrQkFBa0IsRUFDckIsTUFBTSxpQkFBaUIsQ0FBQTtBQUd4QixPQUFPLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsYUFBYSxPQUFPLElBQUksT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFBO0FBRTlGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FDeEQsSUFBSSxDQUFD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QUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBd0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUE7SUFDdkUsQ0FBQztBQUNMLENBQUMsQ0FBQTtBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLFNBQWlCLEVBQUUsT0FBZSxFQUFFLE9BQWUsRUFBTyxFQUFFO0lBQzlFLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQzVDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzlELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0FBQ0wsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/i18n/dist/lib/t.d.ts b/packages/i18n/dist/lib/t.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/packages/i18n/dist/lib/t.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/i18n/dist/lib/t.js b/packages/i18n/dist/lib/t.js new file mode 100644 index 00000000..5e8a0e98 --- /dev/null +++ b/packages/i18n/dist/lib/t.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate.d.ts b/packages/i18n/dist/lib/translate.d.ts index 77606ac5..c6d7c397 100644 --- a/packages/i18n/dist/lib/translate.d.ts +++ b/packages/i18n/dist/lib/translate.d.ts @@ -1,29 +1,14 @@ -import * as TOML from 'smol-toml'; import { IOptions } from '../types.js'; -import * as deepl from './deepl.js'; -export declare const clean: (text?: string) => string; -export declare const hash: (text: string) => string; -export declare const translateObjectAIT: (obj: any, src: string, options: IOptions) => Promise; -export declare const translateXLS: (src: string, dst: string, options: IOptions) => Promise; -export declare const translateDeepL: (text: string, srcLang: string, dstLang: string, dOptions: deepl.IDeepLOptions, options?: IOptions, file?: string) => Promise; -export declare const translateObject: (obj: any, src: string, options: IOptions) => Promise; -export declare const getTranslation: (translations: any, all?: boolean) => any; -export declare const translateMarkup: (src: string, dst: string, options: IOptions) => Promise; -export declare const translateJSON: (src: string, dst: string, options: IOptions) => Promise; -export declare const translateTOML: (src: string, dst: string, options: IOptions) => Promise; -export declare const translateYAML: (src: string, dst: string, options: IOptions) => Promise>; export declare const translateFiles: (file: any, targets: string[], options: IOptions) => Promise; export declare const translate: (opts: IOptions) => Promise; -export declare const translateText: (text: string, srcLang: string, dstLang: string, options?: IOptions) => Promise; -export declare const storeSet: (storePath: string, text: string, translation: string, file?: string) => void; -export declare const storeGet: (storePath: string, text: string, file?: string) => any; export declare const TRANSLATORS: { '.md': (src: string, dst: string, options: IOptions) => Promise; '.html': (src: string, dst: string, options: IOptions) => Promise; '.json': (src: string, dst: string, options: IOptions) => Promise; '.toml': (src: string, dst: string, options: IOptions) => Promise; - '.yaml': (src: string, dst: string, options: IOptions) => Promise>; + '.yaml': (src: string, dst: string, options: IOptions) => Promise>; '.xlsx': (src: string, dst: string, options: IOptions) => Promise; '.xls': (src: string, dst: string, options: IOptions) => Promise; + '.txt': (text: string, srcLang: string, dstLang: string, options?: IOptions) => Promise; }; export declare const getTranslator: (file: string) => any; diff --git a/packages/i18n/dist/lib/translate.js b/packages/i18n/dist/lib/translate.js index a9b268cf..b9636743 100644 --- a/packages/i18n/dist/lib/translate.js +++ b/packages/i18n/dist/lib/translate.js @@ -1,315 +1,14 @@ import * as path from 'path'; -import { JSONPath } from 'jsonpath-plus'; -import { createHash } from 'crypto'; -import { get_cached, set_cached } from '@polymech/cache'; -import { OSR_CACHE } from '@polymech/commons'; -import { CONFIG_DEFAULT } from '@polymech/commons'; -import { resolve } from '@polymech/commons'; -import { isString, isArray, isObject, isNumber } from '@polymech/core/primitives'; -import { sync as read } from "@polymech/fs/read"; -import { sync as write } from "@polymech/fs/write"; -import { sync as exists } from "@polymech/fs/exists"; -import { sync as mkdir } from "@polymech/fs/dir"; -import * as XLSX from 'xlsx'; -import { parse, stringify } from 'yaml'; import pMap from 'p-map'; -import { minify as minify_html } from 'html-minifier-terser'; import { globBase } from '@polymech/commons'; -// import * as TOML from '@iarna/toml' -import * as TOML from 'smol-toml'; import { targets, parse as parseOptions } from '../options.js'; -import { MODULE_NAME } from '../constants.js'; -import { store, get } from './store.js'; -import * as deepl from './deepl.js'; -import { createLogger } from '@polymech/log'; -let logger = createLogger('i18n'); -const minify = false; -const extension = (file) => path.parse(file).ext; -import { defaultFilters, defaultOptions, transformObject, testFilters } from './async-iterator.js'; -import { update } from './glossary.js'; -export const clean = (text = "") => text.trim(); -export const hash = (text) => createHash('md5').update(clean(text)).digest('base64'); -export const translateObjectAIT = async (obj, src, options) => { - const opts = defaultOptions({ - throttleDelay: 100, - concurrentTasks: 1, - path: options.query, - filterCallback: testFilters(defaultFilters([ - async (input) => !options.keys.includes(input) - ])), - transform: async (input, path) => { - if ((isNumber(input) || parseInt(input))) { - return input; - } - const stored = get(options.store, input, options); - if (stored) { - return stored; - } - else { - const translated = await _translate(input, src, options); - if (translated) { - if (options.store) { - store(options.store, input, translated, options); - } - return translated; - } - return input; - } - }, - errorCallback: (path, value, error) => { - logger.error(`Error at path: ${path}, value: ${value}, error: ${error}`); - return value; - } - }); - try { - await transformObject(obj, opts.transform, opts.path, opts.throttleDelay, opts.concurrentTasks, opts.errorCallback, opts.filterCallback); - return obj; - } - catch (error) { - logger.error('Translation failed:', error); - } -}; -export const translateXLS = async (src, dst, options) => { - logger.debug(`Translating ${src} to ${dst}`); - if (!exists(src)) { - logger.error('File not found : ' + src); - return; - } - const dstDir = path.parse(dst).dir; - mkdir(dstDir); - const osr_cache = OSR_CACHE(); - const cached = await get_cached(src, { - keys: options.keys - }, MODULE_NAME); - if (osr_cache && cached && options.cache && exists(dst)) { - return cached; - } - const workbook = XLSX.readFile(src); - const worksheet = workbook.Sheets[workbook.SheetNames[0]]; - const raw_data = XLSX.utils.sheet_to_json(worksheet, { header: 1, blankrows: false, raw: false, skipHidden: true }); - const queryResult = JSONPath({ - path: options.query, - json: raw_data, - }); - let translated; - try { - translated = await translateObjectAIT(raw_data, src, { - ...options, - keys: queryResult - }); - } - catch (error) { - logger.error('Error translating XLSX', error); - return; - } - if (!translated) { - logger.error('Error translating XLSX', src); - return; - } - const sheetOut = XLSX.utils.json_to_sheet(translated, { skipHeader: true }); - const workbookOut = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(workbookOut, sheetOut, workbook.SheetNames[0]); - XLSX.writeFileXLSX(workbookOut, dst); - if (osr_cache && options.cache) { - await set_cached(src, { keys: options.keys }, MODULE_NAME, translated); - } - return translated; -}; -export const translateDeepL = async (text, srcLang = 'EN', dstLang = 'DE', dOptions, options = {}, file = '') => { - if (minify) { - text = await minify_html(text, { - collapseWhitespace: true - }); - } - const glossary = await update(srcLang.toLowerCase(), dstLang.toLowerCase(), options); - const deeplOptions = { - preserve_formatting: '1', - tag_handling: ["xml"], - ...dOptions, - text: text, - target_lang: dstLang, - source_lang: srcLang, - glossary_id: glossary?.glossaryId, - formality: options.formality || 'default', - }; - let ret = await deepl.translate_deepl(deeplOptions); - if (!ret) { - logger.error('Translate failed : ' + text, file); - return false; - } - ret = ret?.data; - if (options.filters) { - (ret.translations).forEach((t, i) => { - options.filters.forEach((f) => { - ret.translations[i].text = f(text, t.text, file); - }); - }); - } - return ret.translations; -}; -const _translate = async (value, src, options) => { - const translations = await translateDeepL(value, options.srcLang, options.dstLang, { - auth_key: options.api_key, - formality: options.formality || 'default', - free_api: false - }, options, src); - return getTranslation(translations); -}; -export const translateObject = async (obj, src, options) => { - if (isNumber(obj)) { - return obj; - } - if (isString(obj) && !obj.trim().length) { - return obj; - } - if (isString(obj) && options.store) { - const stored = get(options.store, obj, options); - if (stored && options.cache) { - return stored; - } - const ret = await _translate(obj, src, options); - if (ret && options.store) { - store(options.store, obj, ret, options); - return ret; - } - else { - console.error('Error translating : ', obj); - } - return obj; - } - if (isObject(obj) || isArray(obj)) { - for await (const [key, value] of Object.entries(obj)) { - if (!obj[key]) { - continue; - } - if (!isString(key)) { - continue; - } - if (isString(value) && options.keys && !options.keys.includes(key)) { - continue; - } - if (isString(value)) { - const stored = get(options.store, value, options); - if (stored && options.cache) { - obj[key] = stored; - } - else { - obj[key] = await _translate(value, src, options); - if (options.store) { - store(options.store, value, obj[key], options); - } - } - } - else if (isObject(value)) { - obj[key] = await translateObject(value, src, options); - } - else if (isArray(value)) { - let i = 0; - for await (const v of value) { - if (!v) - continue; - value[i] = await translateObject(v, src, options); - i++; - } - } - } - } - return obj; -}; -export const getTranslation = (translations, all = false) => { - if (!all) { - if (translations && translations[0] && translations[0].text) { - return translations[0].text; - } - } - else { - return translations; - } - return false; -}; -export const translateMarkup = async (src, dst, options) => { - logger.info(`Translating ${src} to ${dst}`); - const osr_cache = OSR_CACHE(); - const cached = await get_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME); - if (osr_cache && cached && options.cache) { - return cached; - } - const srcContent = read(src); - let translations = await translateDeepL(srcContent, options.srcLang, options.dstLang, { - free_api: false, - auth_key: options.api_key - }, options, src); - translations = getTranslation(translations); - if (osr_cache && options.cache) { - await set_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME, translations); - } - if (translations) { - write(dst, translations); - } - else { - return false; - } - return translations; -}; -export const translateJSON = async (src, dst, options) => { - logger.info(`Translating ${src} to ${dst}`); - const osr_cache = OSR_CACHE(); - const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME); - if (osr_cache && cached && options.cache) { - return cached; - } - let object = read(src, 'json'); - object = await translateObject(object, src, options); - if (osr_cache && options.cache) { - await set_cached(src, { keys: options.keys }, MODULE_NAME, object); - } - write(dst, object); - return object; -}; -export const translateTOML = async (src, dst, options) => { - logger.info(`Translating ${src} to ${dst}`); - const osr_cache = OSR_CACHE(); - const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME); - if (osr_cache && cached && options.cache) { - return cached; - } - let srcContent = read(src); - let toml = TOML.parse(srcContent); - toml = await translateObject(toml, src, options); - if (osr_cache && options.cache) { - try { - await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify(toml)); - } - catch (e) { - logger.error(`Error caching ${src} TOML : ${e.message}`, toml); - } - } - write(dst, TOML.stringify(toml)); -}; -export const translateYAML = async (src, dst, options) => { - logger.debug(`Translating ${src} to ${dst}`); - const osr_cache = OSR_CACHE(); - const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME); - if (osr_cache && cached && options.cache) { - return TOML.parse(cached.translations); - } - let srcContent = read(src); - let yaml = parse(srcContent); - yaml = await translateObject(yaml, src, options); - // yaml = await translateObjectAIT(yaml, src, options) - if (osr_cache && options.cache) { - try { - await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify({ translations: yaml })); - } - catch (e) { - logger.error(`Error caching YAML ${src} : ${e.message}`, yaml); - } - } - const ret = stringify(yaml); - write(dst, ret); - options.stdout && process.stdout.write(ret); - return ret; -}; +import { translateMarkup } from './translate_markup.js'; +import { translateJSON } from './translate_json.js'; +import { translateTOML } from './translate_toml.js'; +import { translateYAML } from './translate_yaml.js'; +import { translateXLS } from './translate_xls.js'; +import { translateText } from './translate_text.js'; +import { extension, getTranslation, logger, translateDeepL } from './translate_commons.js'; export const translateFiles = async (file, targets, options) => { const translator = getTranslator(file); if (!translator) { @@ -371,63 +70,6 @@ export const translate = async (opts) => { logger.debug(`Translated all: ${opts.text ? opts.text : opts.src} to ${languages}`); return translated; }; -export const translateText = async (text, srcLang, dstLang, options = {}) => { - if (!text || text.length === 0) { - return ''; - } - if (srcLang === dstLang) { - return text; - } - if (!options.store) { - logger.error('No store provided'); - return text; - } - const store = path.resolve(resolve(options.store, false)); - if (!exists(store)) { - logger.warn(`Invalid store root : ${store}`); - } - const config = CONFIG_DEFAULT(); - text = clean(text); - if (exists(options.store)) { - const stored = storeGet(options.store, text); - if (stored) { - return stored; - } - } - if (!options.storeRoot) { - options.storeRoot = "${OSR_ROOT}/i18n-store"; - } - if (!options.api_key) { - if (!config || !config.deepl || !config.deepl.auth_key) { - logger.error('i18n:translateText: No API key provided'); - return text; - } - options.api_key = config.deepl.auth_key; - } - const out = await translateDeepL(text, srcLang, dstLang, { - ...config.deepl - }, options, ""); - const translation = getTranslation(out, false); - if (translation) { - storeSet(options.store, text, translation); - return translation; - } - else { - logger.warn('Error translating : ', text); - } - return text; -}; -export const storeSet = (storePath, text, translation, file = '') => { - const store = read(storePath, 'json') || {}; - store[text] = clean(translation); - write(storePath, store); -}; -export const storeGet = (storePath, text, file = '') => { - const db = read(storePath, 'json') || {}; - if (db[text]) { - return db[text]; - } -}; export const TRANSLATORS = { '.md': translateMarkup, '.html': translateMarkup, @@ -435,7 +77,8 @@ export const TRANSLATORS = { '.toml': translateTOML, '.yaml': translateYAML, '.xlsx': translateXLS, - '.xls': translateXLS + '.xls': translateXLS, + '.txt': translateText }; export const getTranslator = (file) => TRANSLATORS[extension(file)]; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi90cmFuc2xhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRW5DLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2pGLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDaEQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDdkMsT0FBTyxJQUFJLE1BQU0sT0FBTyxDQUFBO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLElBQUksV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRyxNQUFN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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi90cmFuc2xhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxJQUFJLE1BQU0sT0FBTyxDQUFBO0FBQ3hCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUU1QyxPQUFPLEVBQUUsT0FBTyxFQUFDLEtBQUssSUFBSSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBRTFGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQy9CLElBQUksRUFBRSxPQUFpQixFQUFFLE9BQWlCLEVBQUUsRUFBRTtJQUM5QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2QsTUFBTSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNuRCxPQUFPLEtBQUssQ0FBQTtJQUNoQixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxNQUFN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 \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate_commons.d.ts b/packages/i18n/dist/lib/translate_commons.d.ts new file mode 100644 index 00000000..2bcd9a16 --- /dev/null +++ b/packages/i18n/dist/lib/translate_commons.d.ts @@ -0,0 +1,11 @@ +import { IOptions } from '../types.js'; +import * as deepl from './deepl.js'; +export declare let logger: import("tslog").Logger; +export declare const clean: (text?: string) => string; +export declare const extension: (file: string) => string; +export declare const getTranslation: (translations: any, all?: boolean) => any; +export declare const storeSet: (storePath: string, text: string, translation: string, file?: string) => void; +export declare const storeGet: (storePath: string, text: string, file?: string) => any; +export declare const translateObjectAIT: (obj: any, src: string, options: IOptions) => Promise; +export declare const translateDeepL: (text: string, srcLang: string, dstLang: string, dOptions: deepl.IDeepLOptions, options?: IOptions, file?: string) => Promise; +export declare const translateObject: (obj: any, src: string, options: IOptions) => Promise; diff --git a/packages/i18n/dist/lib/translate_commons.js b/packages/i18n/dist/lib/translate_commons.js new file mode 100644 index 00000000..4b73b1a0 --- /dev/null +++ b/packages/i18n/dist/lib/translate_commons.js @@ -0,0 +1,178 @@ +import * as path from 'path'; +import { isString, isArray, isObject, isNumber } from '@polymech/core/primitives'; +import { sync as read } from "@polymech/fs/read"; +import { sync as write } from "@polymech/fs/write"; +import { minify as minify_html } from 'html-minifier-terser'; +import { store, get } from './store.js'; +import * as deepl from './deepl.js'; +const minify = false; +import { defaultFilters, defaultOptions, transformObject, testFilters } from './async-iterator.js'; +import { update } from './glossary.js'; +import { createLogger } from '@polymech/log'; +export let logger = createLogger('i18n'); +export const clean = (text = "") => text.trim(); +export const extension = (file) => path.parse(file).ext; +export const getTranslation = (translations, all = false) => { + if (!all) { + if (translations && translations[0] && translations[0].text) { + return translations[0].text; + } + } + else { + return translations; + } + return false; +}; +export const storeSet = (storePath, text, translation, file = '') => { + const store = read(storePath, 'json') || {}; + store[text] = clean(translation); + write(storePath, store); +}; +export const storeGet = (storePath, text, file = '') => { + const db = read(storePath, 'json') || {}; + if (db[text]) { + return db[text]; + } +}; +export const translateObjectAIT = async (obj, src, options) => { + const opts = defaultOptions({ + throttleDelay: 100, + concurrentTasks: 1, + path: options.query, + filterCallback: testFilters(defaultFilters([ + async (input) => !options.keys.includes(input) + ])), + transform: async (input, path) => { + if ((isNumber(input) || parseInt(input))) { + return input; + } + const stored = get(options.store, input, options); + if (stored) { + return stored; + } + else { + const translated = await _translate(input, src, options); + if (translated) { + if (options.store) { + store(options.store, input, translated, options); + } + return translated; + } + return input; + } + }, + errorCallback: (path, value, error) => { + logger.error(`Error at path: ${path}, value: ${value}, error: ${error}`); + return value; + } + }); + try { + await transformObject(obj, opts.transform, opts.path, opts.throttleDelay, opts.concurrentTasks, opts.errorCallback, opts.filterCallback); + return obj; + } + catch (error) { + logger.error('Translation failed:', error); + } +}; +export const translateDeepL = async (text, srcLang = 'EN', dstLang = 'DE', dOptions, options = {}, file = '') => { + if (minify) { + text = await minify_html(text, { + collapseWhitespace: true + }); + } + const glossary = await update(srcLang.toLowerCase(), dstLang.toLowerCase(), options); + const deeplOptions = { + preserve_formatting: '1', + tag_handling: ["xml"], + ...dOptions, + text: text, + target_lang: dstLang, + source_lang: srcLang, + glossary_id: glossary?.glossaryId, + formality: options.formality || 'default', + }; + let ret = await deepl.translate_deepl(deeplOptions); + if (!ret) { + logger.error('Translate failed : ' + text, file); + return false; + } + ret = ret?.data; + if (options.filters) { + (ret.translations).forEach((t, i) => { + options.filters.forEach((f) => { + ret.translations[i].text = f(text, t.text, file); + }); + }); + } + return ret.translations; +}; +const _translate = async (value, src, options) => { + const translations = await translateDeepL(value, options.srcLang, options.dstLang, { + auth_key: options.api_key, + formality: options.formality || 'default', + free_api: false + }, options, src); + return getTranslation(translations); +}; +export const translateObject = async (obj, src, options) => { + if (isNumber(obj)) { + return obj; + } + if (isString(obj) && !obj.trim().length) { + return obj; + } + if (isString(obj) && options.store) { + const stored = get(options.store, obj, options); + if (stored && options.cache) { + return stored; + } + const ret = await _translate(obj, src, options); + if (ret && options.store) { + store(options.store, obj, ret, options); + return ret; + } + else { + console.error('Error translating : ', obj); + } + return obj; + } + if (isObject(obj) || isArray(obj)) { + for await (const [key, value] of Object.entries(obj)) { + if (!obj[key]) { + continue; + } + if (!isString(key)) { + continue; + } + if (isString(value) && options.keys && !options.keys.includes(key)) { + continue; + } + if (isString(value)) { + const stored = get(options.store, value, options); + if (stored && options.cache) { + obj[key] = stored; + } + else { + obj[key] = await _translate(value, src, options); + if (options.store) { + store(options.store, value, obj[key], options); + } + } + } + else if (isObject(value)) { + obj[key] = await translateObject(value, src, options); + } + else if (isArray(value)) { + let i = 0; + for await (const v of value) { + if (!v) + continue; + value[i] = await translateObject(v, src, options); + i++; + } + } + } + } + return obj; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX2NvbW1vbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3RyYW5zbGF0ZV9jb21tb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNqRixPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDbEQsT0FBTyxFQUFFLE1BQU0sSUFBSSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUc1RCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQTtBQUVuQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUE7QUFFcEIsT0FBTyxFQUNILGNBQWMsRUFDZCxjQUFjLEVBQ2QsZUFBZSxFQUVmLFdBQVcsRUFDZCxNQUFNLHFCQUFxQixDQUFBO0FBRTVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM1QyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDdkQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxD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 \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate_ex.d.ts b/packages/i18n/dist/lib/translate_ex.d.ts index 3150ae1d..9fc23322 100644 --- a/packages/i18n/dist/lib/translate_ex.d.ts +++ b/packages/i18n/dist/lib/translate_ex.d.ts @@ -2,5 +2,8 @@ import { IOptions } from '../types.js'; import * as deepl from './deepl.js'; export declare const clean: (text?: string) => string; export declare const hash: (text: string) => string; +export declare const getTranslation: (translations: any, all?: boolean) => any; +export declare const storeSet: (storePath: string, text: string, translation: string, file?: string) => void; +export declare const storeGet: (storePath: string, text: string, file?: string) => any; export declare const translateDeepL: (text: string, srcLang: string, dstLang: string, dOptions: deepl.IDeepLOptions, options?: IOptions, file?: string) => Promise; -export declare const translateText: (text: string, srcLang: string, dstLang: string, options?: IOptions) => Promise; +export declare const translateText: (text: string, srcLang: string, dstLang: string, options?: IOptions) => Promise; diff --git a/packages/i18n/dist/lib/translate_ex.js b/packages/i18n/dist/lib/translate_ex.js index 8abbf3df..6331dee1 100644 --- a/packages/i18n/dist/lib/translate_ex.js +++ b/packages/i18n/dist/lib/translate_ex.js @@ -1,12 +1,45 @@ +import * as path from 'path'; import { createHash } from 'crypto'; import * as deepl from './deepl.js'; -import { createLogger } from '@polymech/log'; -let logger = createLogger('i18n'); +import { CONFIG_DEFAULT } from '@polymech/commons'; +//let logger = createLogger('i18n') +import { isFile, resolve } from "@polymech/commons"; +import { sync as read } from "@polymech/fs/read"; +import { sync as exists } from "@polymech/fs/exists"; +import { sync as write } from "@polymech/fs/write"; import { update } from './glossary.js'; +import * as deeplN from 'deepl-node'; export const clean = (text = "") => text.trim(); export const hash = (text) => createHash('md5').update(clean(text)).digest('base64'); +export const getTranslation = (translations, all = false) => { + if (!all) { + if (translations && translations[0] && translations[0].text) { + return translations[0].text; + } + } + else { + return translations; + } + return false; +}; +import { logger } from '../index.js'; +export const storeSet = (storePath, text, translation, file = '') => { + const store = read(storePath, 'json') || {}; + store[text] = clean(translation); + write(storePath, store); +}; +export const storeGet = (storePath, text, file = '') => { + const db = read(storePath, 'json') || {}; + if (db[text]) { + return db[text]; + } +}; export const translateDeepL = async (text, srcLang = 'EN', dstLang = 'DE', dOptions, options = {}, file = '') => { - const glossary = await update(srcLang.toLowerCase(), dstLang.toLowerCase(), options); + // const glossary = await update(srcLang.toLowerCase(), dstLang.toLowerCase(), options) + const translator = new deeplN.Translator(options.api_key); + isFile(''), + resolve(''), + read(''); const deeplOptions = { preserve_formatting: '1', tag_handling: ["xml"], @@ -14,9 +47,10 @@ export const translateDeepL = async (text, srcLang = 'EN', dstLang = 'DE', dOpti text: text, target_lang: dstLang, source_lang: srcLang, - glossary_id: glossary?.glossaryId, + //glossary_id: glossary?.glossaryId, formality: options.formality || 'default', }; + update(srcLang.toLowerCase(), dstLang.toLowerCase(), options); let ret = await deepl.translate_deepl(deeplOptions); if (!ret) { logger.error('Translate failed : ' + text, file); @@ -33,52 +67,49 @@ export const translateDeepL = async (text, srcLang = 'EN', dstLang = 'DE', dOpti return ret.translations; }; export const translateText = async (text, srcLang, dstLang, options = {}) => { - /* if (!text || text.length === 0) { - return '' + return ''; } if (srcLang === dstLang) { - return text + return text; } if (!options.store) { - logger.error('No store provided') - return text + logger.error('No store provided'); + return text; } - const store = path.resolve(resolve(options.store, false)) + const store = path.resolve(resolve(options.store, false)); if (!exists(store)) { - logger.warn(`Invalid store root : ${store}`) + logger.warn(`Invalid store root : ${store}`); } - const config: any = CONFIG_DEFAULT() - text = clean(text) + const config = CONFIG_DEFAULT(); + text = clean(text); if (exists(options.store)) { - const stored = storeGet(options.store, text) + const stored = storeGet(options.store, text); if (stored) { - return stored + return stored; } } - if(!options.storeRoot){ - options.storeRoot = "${OSR_ROOT}/i18n-store" + if (!options.storeRoot) { + options.storeRoot = "${OSR_ROOT}/i18n-store"; } - if(!options.api_key){ - if(!config || !config.deepl || !config.deepl.auth_key){ - logger.error('i18n:translateText: No API key provided') - return text + if (!options.api_key) { + if (!config || !config.deepl || !config.deepl.auth_key) { + logger.error('i18n:translateText: No API key provided'); + return text; } - options.api_key = config.deepl.auth_key + options.api_key = config.deepl.auth_key; } - const out: string[] = await translateDeepL(text, srcLang, dstLang, - { - ...config.deepl - }, options, "") - - const translation = getTranslation(out, false) + const out = await translateDeepL(text, srcLang, dstLang, { + ...config.deepl + }, options, ""); + const translation = getTranslation(out, false); if (translation) { - // storeSet(options.store, text, translation) - return translation - } else { - logger.warn('Error translating : ', text) + // storeSet(options.store, text, translation) + return translation; + } + else { + logger.warn('Error translating : ', text); } - */ return text; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX2V4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi90cmFuc2xhdGVfZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQVNuQyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQTtBQUVuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVDLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUVqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDdkQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUM1RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUMvQixJQUFZLEVBQ1osVUFBa0IsSUFBSSxFQUN0QixVQUFrQixJQUFJLEVBQ3RCLFFBQTZCLEVBQzdCLFVBQW9CLEVBQUUsRUFDdEIsT0FBZSxFQUFFLEVBQUUsRUFBRTtJQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3BGLE1BQU0sWUFBWSxHQUFHO1FBQ2pCLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ3JCLEdBQUcsUUFBUTtRQUNYLElBQUksRUFBRSxJQUFJO1FBQ1YsV0FBVyxFQUFFLE9BQStCO1FBQzVDLFdBQVcsRUFBRSxPQUErQjtRQUM1QyxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVU7UUFDakMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUztLQUNyQixDQUFBO0lBRXhCLElBQUksR0FBRyxHQUFRLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQXlCLENBQUE7SUFDaEYsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDaEQsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUNELEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFBO0lBQ2YsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxPQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDcEQsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUE7QUFDM0IsQ0FBQyxDQUFBO0FBSUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxJQUFZLEVBQUUsT0FBZSxFQUFFLE9BQWUsRUFBRSxVQUFvQixFQUFFLEVBQUUsRUFBRTtJQUMxRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNkNFO0lBQ0YsT0FBTyxJQUFJLENBQUE7QUFDZixDQUFDLENBQUEifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX2V4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi90cmFuc2xhdGVfZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUVuQyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbEQsbUNBQW1DO0FBRW5DLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDbkQsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0QyxPQUFPLEtBQUssTUFBTSxNQUFNLFlBQVksQ0FBQTtBQUVyQyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7QUFFNUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsWUFBaUIsRUFBRSxNQUFlLEtBQUssRUFBRSxFQUFFO0lBQ3RFLElBQUksQ0FBQyxHQUFHLEVB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 \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate_json copy.d.ts b/packages/i18n/dist/lib/translate_json copy.d.ts new file mode 100644 index 00000000..055a38fd --- /dev/null +++ b/packages/i18n/dist/lib/translate_json copy.d.ts @@ -0,0 +1,2 @@ +import { IOptions } from '../types.js'; +export declare const translateJSON: (src: string, dst: string, options: IOptions) => Promise; diff --git a/packages/i18n/dist/lib/translate_json copy.js b/packages/i18n/dist/lib/translate_json copy.js new file mode 100644 index 00000000..7c1e8dff --- /dev/null +++ b/packages/i18n/dist/lib/translate_json copy.js @@ -0,0 +1,21 @@ +import { OSR_CACHE } from '@polymech/commons'; +import { get_cached, set_cached } from '@polymech/cache'; +import { sync as read } from "@polymech/fs/read"; +import { sync as write } from "@polymech/fs/write"; +import { MODULE_NAME } from '../constants.js'; +import { translateObject } from './translate_commons.js'; +export const translateJSON = async (src, dst, options) => { + const osr_cache = OSR_CACHE(); + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME); + if (osr_cache && cached && options.cache) { + return cached; + } + let object = read(src, 'json'); + object = await translateObject(object, src, options); + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys }, MODULE_NAME, object); + } + write(dst, object); + return object; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX2pzb24gY29weS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdHJhbnNsYXRlX2pzb24gY29weS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQVUsTUFBTSx3QkFBd0IsQ0FBQTtBQUVoRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUM5QixHQUFXLEVBQ1gsR0FBVyxFQUNYLE9BQWlCLEVBQUUsRUFBRTtJQUNyQixNQUFNLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQTtJQUM3QixNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3pFLElBQUksU0FBUyxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUE7SUFDakIsQ0FBQztJQUVELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFRLENBQUE7SUFDckMsTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFcEQsSUFBSSxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ2xCLE9BQU8sTUFBTSxDQUFBO0FBQ2pCLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate_json.d.ts b/packages/i18n/dist/lib/translate_json.d.ts new file mode 100644 index 00000000..055a38fd --- /dev/null +++ b/packages/i18n/dist/lib/translate_json.d.ts @@ -0,0 +1,2 @@ +import { IOptions } from '../types.js'; +export declare const translateJSON: (src: string, dst: string, options: IOptions) => Promise; diff --git a/packages/i18n/dist/lib/translate_json.js b/packages/i18n/dist/lib/translate_json.js new file mode 100644 index 00000000..8ab40212 --- /dev/null +++ b/packages/i18n/dist/lib/translate_json.js @@ -0,0 +1,21 @@ +import { OSR_CACHE } from '@polymech/commons'; +import { get_cached, set_cached } from '@polymech/cache'; +import { sync as read } from "@polymech/fs/read"; +import { sync as write } from "@polymech/fs/write"; +import { MODULE_NAME } from '../constants.js'; +import { translateObject } from './translate_commons.js'; +export const translateJSON = async (src, dst, options) => { + const osr_cache = OSR_CACHE(); + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME); + if (osr_cache && cached && options.cache) { + return cached; + } + let object = read(src, 'json'); + object = await translateObject(object, src, options); + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys }, MODULE_NAME, object); + } + write(dst, object); + return object; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX2pzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3RyYW5zbGF0ZV9qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3hELE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBVSxNQUFNLHdCQUF3QixDQUFBO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQzlCLEdBQVcsRUFDWCxHQUFXLEVBQ1gsT0FBaUIsRUFBRSxFQUFFO0lBQ3JCLE1BQU0sU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDekUsSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxPQUFPLE1BQU0sQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVEsQ0FBQTtJQUNyQyxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVwRCxJQUFJLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDdEUsQ0FBQztJQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbEIsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate_markup.d.ts b/packages/i18n/dist/lib/translate_markup.d.ts new file mode 100644 index 00000000..f60ed223 --- /dev/null +++ b/packages/i18n/dist/lib/translate_markup.d.ts @@ -0,0 +1,2 @@ +import { IOptions } from '../types.js'; +export declare const translateMarkup: (src: string, dst: string, options: IOptions) => Promise; diff --git a/packages/i18n/dist/lib/translate_markup.js b/packages/i18n/dist/lib/translate_markup.js new file mode 100644 index 00000000..07f1ed8e --- /dev/null +++ b/packages/i18n/dist/lib/translate_markup.js @@ -0,0 +1,30 @@ +import { OSR_CACHE } from '@polymech/commons'; +import { get_cached, set_cached } from '@polymech/cache'; +import { sync as read } from "@polymech/fs/read"; +import { sync as write } from "@polymech/fs/write"; +import { MODULE_NAME } from '../constants.js'; +import { translateDeepL, getTranslation } from './translate_commons.js'; +export const translateMarkup = async (src, dst, options) => { + const osr_cache = OSR_CACHE(); + const cached = await get_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME); + if (osr_cache && cached && options.cache) { + return cached; + } + const srcContent = read(src); + let translations = await translateDeepL(srcContent, options.srcLang, options.dstLang, { + free_api: false, + auth_key: options.api_key + }, options, src); + translations = getTranslation(translations); + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME, translations); + } + if (translations) { + write(dst, translations); + } + else { + return false; + } + return translations; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX21hcmt1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdHJhbnNsYXRlX21hcmt1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFdkUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFDaEMsR0FBVyxFQUNYLEdBQVcsRUFDWCxPQUFpQixFQUFFLEVBQUU7SUFDckIsTUFBTSxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUE7SUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRyxJQUFJLFNBQVMsSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFBO0lBQ2pCLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFXLENBQUE7SUFDdEMsSUFBSSxZQUFZLEdBQUcsTUFBTSxjQUFjLENBQUMsVUFBVSxFQUM5QyxPQUFPLENBQUMsT0FBTyxFQUNmLE9BQU8sQ0FBQyxPQUFPLEVBQ2Y7UUFDSSxRQUFRLEVBQUUsS0FBSztRQUNmLFFBQVEsRUFBRSxPQUFPLENBQUMsT0FBTztLQUNyQixFQUFFLE9BQU8sRUFBRSxHQUFHLENBQVEsQ0FBQTtJQUVsQyxZQUFZLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQzNDLElBQUksU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUN0RyxDQUFDO0lBQ0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNmLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDNUIsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEtBQUssQ0FBQTtJQUNoQixDQUFDO0lBQ0QsT0FBTyxZQUFZLENBQUE7QUFDdkIsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate_text.d.ts b/packages/i18n/dist/lib/translate_text.d.ts new file mode 100644 index 00000000..5ffdaf36 --- /dev/null +++ b/packages/i18n/dist/lib/translate_text.d.ts @@ -0,0 +1,2 @@ +import { IOptions } from '../types.js'; +export declare const translateText: (text: string, srcLang: string, dstLang: string, options?: IOptions) => Promise; diff --git a/packages/i18n/dist/lib/translate_text.js b/packages/i18n/dist/lib/translate_text.js new file mode 100644 index 00000000..7a245217 --- /dev/null +++ b/packages/i18n/dist/lib/translate_text.js @@ -0,0 +1,51 @@ +import * as path from 'path'; +import { resolve, CONFIG_DEFAULT } from '@polymech/commons'; +import { sync as exists } from "@polymech/fs/exists"; +import { logger, clean, storeGet, storeSet, translateDeepL, getTranslation } from './translate_commons.js'; +export const translateText = async (text, srcLang, dstLang, options = {}) => { + if (!text || text.length === 0) { + return ''; + } + if (srcLang === dstLang) { + return text; + } + if (!options.store) { + logger.error('No store provided'); + return text; + } + const store = path.resolve(resolve(options.store, false)); + if (!exists(store)) { + logger.warn(`Invalid store root : ${store}`); + } + const config = CONFIG_DEFAULT(); + text = clean(text); + if (exists(options.store)) { + const stored = storeGet(options.store, text); + if (stored) { + return stored; + } + } + if (!options.storeRoot) { + options.storeRoot = "${OSR_ROOT}/i18n-store"; + } + if (!options.api_key) { + if (!config || !config.deepl || !config.deepl.auth_key) { + logger.error('i18n:translateText: No API key provided'); + return text; + } + options.api_key = config.deepl.auth_key; + } + const out = await translateDeepL(text, srcLang, dstLang, { + ...config.deepl + }, options, ""); + const translation = getTranslation(out, false); + if (translation) { + storeSet(options.store, text, translation); + return translation; + } + else { + logger.warn('Error translating : ', text); + } + return text; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX3RleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3RyYW5zbGF0ZV90ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDM0QsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUVwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUcsTUFBTSx3QkFBd0IsQ0FBQTtBQUUzRyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBRSxPQUFlLEVBQUUsT0FBZSxFQUFFLFVBQW9CLEVBQUUsRUFBRSxFQUFFO0lBRTFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLEVBQUUsQ0FBQTtJQUNiLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNqQyxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFRLGNBQWMsRUFBRSxDQUFBO0lBQ3BDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEIsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDNUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULE9BQU8sTUFBTSxDQUFBO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsU0FBUyxHQUFHLHdCQUF3QixDQUFBO0lBQ2hELENBQUM7SUFDRCxJQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQyxDQUFDO1FBQ2pCLElBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUE7WUFDdkQsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO1FBQ0QsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQTtJQUMzQyxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQWEsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQzdEO1FBQ0ksR0FBRyxNQUFNLENBQUMsS0FBSztLQUNsQixFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUVuQixNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzlDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDZCxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDMUMsT0FBTyxXQUFXLENBQUE7SUFDdEIsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNmLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate_toml.d.ts b/packages/i18n/dist/lib/translate_toml.d.ts new file mode 100644 index 00000000..d048a521 --- /dev/null +++ b/packages/i18n/dist/lib/translate_toml.d.ts @@ -0,0 +1,2 @@ +import { IOptions } from '../types.js'; +export declare const translateTOML: (src: string, dst: string, options: IOptions) => Promise; diff --git a/packages/i18n/dist/lib/translate_toml.js b/packages/i18n/dist/lib/translate_toml.js new file mode 100644 index 00000000..6b386216 --- /dev/null +++ b/packages/i18n/dist/lib/translate_toml.js @@ -0,0 +1,30 @@ +import { OSR_CACHE } from '@polymech/commons'; +import { get_cached, set_cached } from '@polymech/cache'; +import { sync as read } from "@polymech/fs/read"; +import { sync as write } from "@polymech/fs/write"; +import * as TOML from 'smol-toml'; +import { MODULE_NAME } from '../constants.js'; +import { translateObject } from './translate_commons.js'; +import { createLogger } from '@polymech/log'; +const logger = createLogger('i18n'); +export const translateTOML = async (src, dst, options) => { + logger.info(`Translating ${src} to ${dst}`); + const osr_cache = OSR_CACHE(); + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME); + if (osr_cache && cached && options.cache) { + return cached; + } + let srcContent = read(src); + let toml = TOML.parse(srcContent); + toml = await translateObject(toml, src, options); + if (osr_cache && options.cache) { + try { + await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify(toml)); + } + catch (e) { + logger.error(`Error caching ${src} TOML : ${e.message}`, toml); + } + } + write(dst, TOML.stringify(toml)); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX3RvbWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3RyYW5zbGF0ZV90b21sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3hELE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUVqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFNUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBRW5DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQzlCLEdBQVcsRUFDWCxHQUFXLEVBQ1gsT0FBaUIsRUFBRSxFQUFFO0lBRXJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUMzQyxNQUFNLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQTtJQUM3QixNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3pFLElBQUksU0FBUyxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUE7SUFDakIsQ0FBQztJQUNELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQVcsQ0FBQTtJQUNwQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2pDLElBQUksR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRWhELElBQUksU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDRCxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDcEYsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDcEMsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate_xls.d.ts b/packages/i18n/dist/lib/translate_xls.d.ts new file mode 100644 index 00000000..0b61b16a --- /dev/null +++ b/packages/i18n/dist/lib/translate_xls.d.ts @@ -0,0 +1,2 @@ +import { IOptions } from '../types.js'; +export declare const translateXLS: (src: string, dst: string, options: IOptions) => Promise; diff --git a/packages/i18n/dist/lib/translate_xls.js b/packages/i18n/dist/lib/translate_xls.js new file mode 100644 index 00000000..a6b614ea --- /dev/null +++ b/packages/i18n/dist/lib/translate_xls.js @@ -0,0 +1,56 @@ +import * as path from 'path'; +import { JSONPath } from 'jsonpath-plus'; +import { get_cached, set_cached } from '@polymech/cache'; +import { OSR_CACHE } from '@polymech/commons'; +import { sync as exists } from "@polymech/fs/exists"; +import { sync as mkdir } from "@polymech/fs/dir"; +import * as XLSX from 'xlsx'; +import { MODULE_NAME } from '../constants.js'; +import { logger, translateObjectAIT } from './translate_commons.js'; +export const translateXLS = async (src, dst, options) => { + logger.debug(`Translating ${src} to ${dst}`); + if (!exists(src)) { + logger.error('File not found : ' + src); + return; + } + const dstDir = path.parse(dst).dir; + mkdir(dstDir); + const osr_cache = OSR_CACHE(); + const cached = await get_cached(src, { + keys: options.keys + }, MODULE_NAME); + if (osr_cache && cached && options.cache && exists(dst)) { + return cached; + } + const workbook = XLSX.readFile(src); + const worksheet = workbook.Sheets[workbook.SheetNames[0]]; + const raw_data = XLSX.utils.sheet_to_json(worksheet, { header: 1, blankrows: false, raw: false, skipHidden: true }); + const queryResult = JSONPath({ + path: options.query, + json: raw_data, + }); + let translated; + try { + translated = await translateObjectAIT(raw_data, src, { + ...options, + keys: queryResult + }); + } + catch (error) { + logger.error('Error translating XLSX', error); + return; + } + if (!translated) { + logger.error('Error translating XLSX', src); + return; + } + const sheetOut = XLSX.utils.json_to_sheet(translated, { skipHeader: true }); + const workbookOut = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(workbookOut, sheetOut, workbook.SheetNames[0]); + XLSX.writeFileXLSX(workbookOut, dst); + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys }, MODULE_NAME, translated); + } + return translated; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX3hscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdHJhbnNsYXRlX3hscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEQsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNoRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQzdCLEdBQVcsRUFDWCxHQUFXLEVBQ1gsT0FBaUIsRUFBRSxFQUFFO0lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZDLE9BQU07SUFDVixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUE7SUFDbEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2IsTUFBTSxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUE7SUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2pDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtLQUNyQixFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBRWYsSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEQsT0FBTyxNQUFNLENBQUE7SUFDakIsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbkMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxRQUFRLEdBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0gsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUN4QjtRQUNJLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSztRQUNuQixJQUFJLEVBQUUsUUFBUTtLQUVqQixDQUFDLENBQUE7SUFDTixJQUFJLFVBQVUsQ0FBQTtJQUNkLElBQUksQ0FBQztRQUNELFVBQVUsR0FBRyxNQUFNLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDakQsR0FBRyxPQUFPO1lBQ1YsSUFBSSxFQUFFLFdBQVc7U0FDcEIsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzdDLE9BQU07SUFDVixDQUFDO0lBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2QsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUMzQyxPQUFNO0lBQ1YsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNwQyxJQUFJLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDMUUsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFBO0FBQ3JCLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/i18n/dist/lib/translate_yaml.d.ts b/packages/i18n/dist/lib/translate_yaml.d.ts new file mode 100644 index 00000000..a48c44a2 --- /dev/null +++ b/packages/i18n/dist/lib/translate_yaml.d.ts @@ -0,0 +1,3 @@ +import { IOptions } from '../types.js'; +import * as TOML from 'smol-toml'; +export declare const translateYAML: (src: string, dst: string, options: IOptions) => Promise>; diff --git a/packages/i18n/dist/lib/translate_yaml.js b/packages/i18n/dist/lib/translate_yaml.js new file mode 100644 index 00000000..49729e9e --- /dev/null +++ b/packages/i18n/dist/lib/translate_yaml.js @@ -0,0 +1,31 @@ +import { OSR_CACHE } from '@polymech/commons'; +import { get_cached, set_cached } from '@polymech/cache'; +import { sync as read } from "@polymech/fs/read"; +import { sync as write } from "@polymech/fs/write"; +import { parse, stringify } from 'yaml'; +import { MODULE_NAME } from '../constants.js'; +import { translateObject, logger } from './translate_commons.js'; +import * as TOML from 'smol-toml'; +export const translateYAML = async (src, dst, options) => { + const osr_cache = OSR_CACHE(); + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME); + if (osr_cache && cached && options.cache) { + return TOML.parse(cached.translations); + } + let srcContent = read(src); + let yaml = parse(srcContent); + yaml = await translateObject(yaml, src, options); + if (osr_cache && options.cache) { + try { + await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify({ translations: yaml })); + } + catch (e) { + logger.error(`Error caching YAML ${src} : ${e.message}`, yaml); + } + } + const ret = stringify(yaml); + write(dst, ret); + options.stdout && process.stdout.write(ret); + return ret; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX3lhbWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3RyYW5zbGF0ZV95YW1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3hELE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUV2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNoRSxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUVqQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsT0FBaUIsRUFBRSxFQUFFO0lBQy9FLE1BQU0sU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDekUsSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFXLENBQUE7SUFDcEMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzVCLElBQUksR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2hELElBQUksU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDRCxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUN0RyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDM0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNmLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0MsT0FBTyxHQUFHLENBQUE7QUFDZCxDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 9e9fb6de..7768e37a 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -19,8 +19,16 @@ "require": "./dist/lib/index.cjs" }, "./translate": { - "import": "./dist/lib/translate_ex.js", - "require": "./dist/lib/translate_ex.cjs" + "import": "./dist/lib/translate.js", + "require": "./dist/lib/translate.cjs" + }, + "./translate_text": { + "import": "./dist/lib/translate_text.js", + "require": "./dist/lib/translate_text.cjs" + }, + "./glossary": { + "import": "./dist/lib/glossary.js", + "require": "./dist/lib/glossary.cjs" } }, "dependencies": { diff --git a/packages/i18n/src/index.ts b/packages/i18n/src/index.ts index 18d0c093..5fe3299b 100644 --- a/packages/i18n/src/index.ts +++ b/packages/i18n/src/index.ts @@ -1,10 +1,9 @@ - export { Logger } from 'tslog' import { createLogger } from '@polymech/log' export { MODULE_NAME } from './constants.js' export { sanitize } from './_cli.js' -export * from './lib/index.js' + export * from './options.js' export * from './types.js' export * from './zod_schema.js' diff --git a/packages/i18n/src/lib/async-iterator.ts b/packages/i18n/src/lib/async-iterator.ts index ac42aab8..3a1fb0e9 100644 --- a/packages/i18n/src/lib/async-iterator.ts +++ b/packages/i18n/src/lib/async-iterator.ts @@ -99,12 +99,11 @@ export async function transformPath( const exampleTransformFunction: AsyncTransformer = async (input: string, path: string): Promise => { if (input === 'random') throw new Error('API error') - console.log('translate : ' + input) return input.toUpperCase() } export const defaultError: ErrorCallback = (path: string, value: string, error: any): void => { - console.error(`Error at path: ${path}, value: ${value}, error: ${error}`) + // logger.error(`Error at path: ${path}, value: ${value}, error: ${error}`) } export const defaultOptions = (options: TransformOptions = {} as TransformOptions): TransformOptions => { @@ -118,17 +117,3 @@ export const defaultOptions = (options: TransformOptions = {} as TransformOption ...options } } - -const data = {} - -const runTransformation = async (): Promise => { - // const testTransformFunction = testFilters([isNumber, isBoolean]) - const options: TransformOptions = defaultOptions(); - try { - await transformObject(data, options.transform, options.path, options.throttleDelay, options.concurrentTasks, options.errorCallback, options.filterCallback); - console.log('Transformed object:', data); - console.log('All transformations were successful.'); - } catch (error) { - console.error('Transformation failed:', error); - } -} \ No newline at end of file diff --git a/packages/i18n/src/lib/cache.ts b/packages/i18n/src/lib/cache.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/i18n/src/lib/glossary.ts b/packages/i18n/src/lib/glossary.ts index d02bc460..a8a4c361 100644 --- a/packages/i18n/src/lib/glossary.ts +++ b/packages/i18n/src/lib/glossary.ts @@ -25,6 +25,7 @@ export const glossaryPath = (storeRoot, srcLang, dstLang) => path.resolve(resolve(`${storeRoot}/glossary/${srcLang}/${dstLang}/${GLOSSARY_FILE_NAME}`)) export const meta = (storeRoot: string, srcLang: string, dstLang: string): deepl.IGlossary | null => { + const filePath = glossaryMetaPath(storeRoot, srcLang, dstLang) if (exists(filePath)) { return (read(filePath, 'json') as deepl.IGlossary) diff --git a/packages/i18n/src/lib/translate.ts b/packages/i18n/src/lib/translate.ts index 4ffac3c5..648f7221 100644 --- a/packages/i18n/src/lib/translate.ts +++ b/packages/i18n/src/lib/translate.ts @@ -1,365 +1,17 @@ import * as path from 'path' -import { JSONPath } from 'jsonpath-plus' -import { createHash } from 'crypto' - -import { get_cached, set_cached } from '@polymech/cache' - -import { OSR_CACHE } from '@polymech/commons' -import { CONFIG_DEFAULT } from '@polymech/commons' - -import { resolve } from '@polymech/commons' -import { isString, isArray, isObject, isNumber } from '@polymech/core/primitives' -import { sync as read } from "@polymech/fs/read" -import { sync as write } from "@polymech/fs/write" -import { sync as exists } from "@polymech/fs/exists" -import { sync as mkdir } from "@polymech/fs/dir" -import * as XLSX from 'xlsx' -import { parse, stringify } from 'yaml' import pMap from 'p-map' -import { minify as minify_html } from 'html-minifier-terser' -import { globBase } from '@polymech/commons' -// import * as TOML from '@iarna/toml' -import * as TOML from 'smol-toml' -import { - targets, - parse as parseOptions -} from '../options.js' +import { globBase } from '@polymech/commons' -import { MODULE_NAME } from '../constants.js' -import { IOptions, TranslateFilter } from '../types.js' -import { store, get } from './store.js' -import * as deepl from './deepl.js' +import { targets,parse as parseOptions } from '../options.js' +import { IOptions } from '../types.js' +import { translateMarkup } from './translate_markup.js' +import { translateJSON } from './translate_json.js' +import { translateTOML } from './translate_toml.js' +import { translateYAML } from './translate_yaml.js' +import { translateXLS } from './translate_xls.js' +import { translateText } from './translate_text.js' +import { extension, getTranslation, logger, translateDeepL } from './translate_commons.js' -import { createLogger } from '@polymech/log' -let logger = createLogger('i18n') - -const minify = false -const extension = (file: string) => path.parse(file).ext - -import { - defaultFilters, - defaultOptions, - transformObject, - TransformOptions, - testFilters -} from './async-iterator.js' - -import { update } from './glossary.js' - -export const clean = (text: string = "") => text.trim() -export const hash = (text: string) => createHash('md5').update(clean(text)).digest('base64') -export const translateObjectAIT = async (obj: any, src: string, options: IOptions) => { - const opts: TransformOptions = defaultOptions({ - throttleDelay: 100, - concurrentTasks: 1, - path: options.query, - filterCallback: testFilters( - defaultFilters([ - async (input) => !options.keys.includes(input) - ]) - ), - transform: async (input: string, path: string) => { - if((isNumber(input) || parseInt(input))){ - return input - } - const stored = get(options.store, input as string, options) - if (stored) { - return stored - } else { - const translated = await _translate(input, src, options) - if (translated) { - if (options.store) { - store(options.store, input, translated, options) - } - return translated - } - return input - } - }, - errorCallback: (path: string, value: string, error: any) => { - logger.error(`Error at path: ${path}, value: ${value}, error: ${error}`) - return value - } - } as TransformOptions) - try { - await transformObject(obj, opts.transform, opts.path, opts.throttleDelay, opts.concurrentTasks, opts.errorCallback, opts.filterCallback) - return obj - } catch (error) { - logger.error('Translation failed:', error) - } -} -export const translateXLS = async ( - src: string, - dst: string, - options: IOptions) => { - logger.debug(`Translating ${src} to ${dst}`) - if (!exists(src)) { - logger.error('File not found : ' + src) - return - } - const dstDir = path.parse(dst).dir - mkdir(dstDir) - const osr_cache = OSR_CACHE() - const cached = await get_cached(src, { - keys: options.keys - }, MODULE_NAME) - - if (osr_cache && cached && options.cache && exists(dst)) { - return cached - } - - const workbook = XLSX.readFile(src) - const worksheet = workbook.Sheets[workbook.SheetNames[0]]; - const raw_data: any[] = XLSX.utils.sheet_to_json(worksheet, { header: 1, blankrows: false, raw: false, skipHidden: true }); - const queryResult = JSONPath( - { - path: options.query, - json: raw_data, - - }) - let translated - try { - translated = await translateObjectAIT(raw_data, src, { - ...options, - keys: queryResult - }) - } catch (error) { - logger.error('Error translating XLSX', error) - return - } - if (!translated) { - logger.error('Error translating XLSX', src) - return - } - const sheetOut = XLSX.utils.json_to_sheet(translated, { skipHeader: true }) - const workbookOut = XLSX.utils.book_new() - XLSX.utils.book_append_sheet(workbookOut, sheetOut, workbook.SheetNames[0]) - XLSX.writeFileXLSX(workbookOut, dst) - if (osr_cache && options.cache) { - await set_cached(src, { keys: options.keys }, MODULE_NAME, translated) - } - - return translated -} -export const translateDeepL = async ( - text: string, - srcLang: string = 'EN', - dstLang: string = 'DE', - dOptions: deepl.IDeepLOptions, - options: IOptions = {}, - file: string = '') => { - - if (minify) { - text = await minify_html(text, { - collapseWhitespace: true - }) - } - const glossary = await update(srcLang.toLowerCase(), dstLang.toLowerCase(), options) - const deeplOptions = { - preserve_formatting: '1', - tag_handling: ["xml"], - ...dOptions, - text: text, - target_lang: dstLang as deepl.DeepLLanguages, - source_lang: srcLang as deepl.DeepLLanguages, - glossary_id: glossary?.glossaryId, - formality: options.formality || 'default', - } as deepl.IDeepLOptions - - let ret: any = await deepl.translate_deepl(deeplOptions) as deepl.IDeepLResponse - if (!ret) { - logger.error('Translate failed : ' + text, file) - return false - } - ret = ret?.data - if (options.filters) { - (ret.translations).forEach((t, i) => { - (options.filters as TranslateFilter[]).forEach((f) => { - ret.translations[i].text = f(text, t.text, file) - }) - }) - } - return ret.translations -} -const _translate = async (value: string, src: string, options: IOptions) => { - - const translations = await translateDeepL(value as string, options.srcLang, options.dstLang, - { - auth_key: options.api_key, - formality: options.formality || 'default', - free_api: false - } as any, options, src) - - return getTranslation(translations) -} -export const translateObject = async (obj: any, src: string, options: IOptions) => { - if (isNumber(obj)) { - return obj - } - if (isString(obj) && !obj.trim().length) { - return obj - } - - if (isString(obj) && options.store) { - const stored = get(options.store, obj as string, options) - if (stored && options.cache) { - return stored - } - const ret = await _translate(obj as string, src, options) - if (ret && options.store) { - store(options.store, obj, ret, options) - return ret - } else { - console.error('Error translating : ', obj) - } - return obj - } - if (isObject(obj) || isArray(obj)) { - for await (const [key, value] of Object.entries(obj)) { - if (!obj[key]) { - continue - } - if (!isString(key)) { - continue - } - if (isString(value) && options.keys && !options.keys.includes(key)) { - continue - } - if (isString(value)) { - const stored = get(options.store, value as string, options) - if (stored && options.cache) { - obj[key] = stored - } else { - obj[key] = await _translate(value as string, src, options) - if (options.store) { - store(options.store, value, obj[key], options) - } - } - } else if (isObject(value)) { - obj[key] = await translateObject(value, src, options) - } else if (isArray(value)) { - let i = 0 - for await (const v of value) { - if (!v) continue - value[i] = await translateObject(v, src, options) - i++ - } - } - } - } - return obj -} -export const getTranslation = (translations: any, all: boolean = false) => { - if (!all) { - if (translations && translations[0] && translations[0].text) { - return translations[0].text - } - } else { - return translations - } - return false -} -export const translateMarkup = async ( - src: string, - dst: string, - options: IOptions) => { - - logger.info(`Translating ${src} to ${dst}`); - - const osr_cache = OSR_CACHE() - const cached = await get_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME); - if (osr_cache && cached && options.cache) { - return cached - } - const srcContent = read(src) as string - let translations = await translateDeepL(srcContent, - options.srcLang, - options.dstLang, - { - free_api: false, - auth_key: options.api_key - } as any, options, src) as any - - translations = getTranslation(translations) - if (osr_cache && options.cache) { - await set_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME, translations) - } - if (translations) { - write(dst, translations) - } else { - return false - } - return translations -} -export const translateJSON = async ( - src: string, - dst: string, - options: IOptions) => { - - logger.info(`Translating ${src} to ${dst}`) - - const osr_cache = OSR_CACHE() - const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME) - if (osr_cache && cached && options.cache) { - return cached - } - - let object = read(src, 'json') as any - object = await translateObject(object, src, options) - - if (osr_cache && options.cache) { - await set_cached(src, { keys: options.keys }, MODULE_NAME, object) - } - write(dst, object) - return object -} -export const translateTOML = async ( - src: string, - dst: string, - options: IOptions) => { - - logger.info(`Translating ${src} to ${dst}`) - const osr_cache = OSR_CACHE() - const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME) - if (osr_cache && cached && options.cache) { - return cached - } - let srcContent = read(src) as string - let toml = TOML.parse(srcContent) - toml = await translateObject(toml, src, options) - - if (osr_cache && options.cache) { - try { - await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify(toml)) - } catch (e) { - logger.error(`Error caching ${src} TOML : ${e.message}`, toml); - } - } - write(dst, TOML.stringify(toml)) -} -export const translateYAML = async (src: string, dst: string, options: IOptions) => { - logger.debug(`Translating ${src} to ${dst}`) - const osr_cache = OSR_CACHE() - const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME) - if (osr_cache && cached && options.cache) { - return TOML.parse(cached.translations) - } - let srcContent = read(src) as string - let yaml = parse(srcContent) - yaml = await translateObject(yaml, src, options) - // yaml = await translateObjectAIT(yaml, src, options) - if (osr_cache && options.cache) { - try { - await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify({ translations: yaml })) - } catch (e) { - logger.error(`Error caching YAML ${src} : ${e.message}`, yaml); - } - } - const ret = stringify(yaml) - write(dst, ret) - options.stdout && process.stdout.write(ret) - return ret -} export const translateFiles = async ( file, targets: string[], options: IOptions) => { const translator = getTranslator(file) @@ -373,6 +25,7 @@ export const translateFiles = async ( } return await pMap(targets, async (target) => getTranslator(file)(file, target, options), { concurrency: 1 }) } + export const translate = async (opts: IOptions) => { opts = parseOptions(opts as any, {}) if (!opts.api_key) { @@ -426,64 +79,7 @@ export const translate = async (opts: IOptions) => { logger.debug(`Translated all: ${opts.text ? opts.text : opts.src} to ${languages}`) return translated } -export const translateText = async (text: string, srcLang: string, dstLang: string, options: IOptions = {}) => { - if (!text || text.length === 0) { - return '' - } - if (srcLang === dstLang) { - return text - } - if (!options.store) { - logger.error('No store provided') - return text - } - const store = path.resolve(resolve(options.store, false)) - if (!exists(store)) { - logger.warn(`Invalid store root : ${store}`) - } - const config: any = CONFIG_DEFAULT() - text = clean(text) - if (exists(options.store)) { - const stored = storeGet(options.store, text) - if (stored) { - return stored - } - } - if(!options.storeRoot){ - options.storeRoot = "${OSR_ROOT}/i18n-store" - } - if(!options.api_key){ - if(!config || !config.deepl || !config.deepl.auth_key){ - logger.error('i18n:translateText: No API key provided') - return text - } - options.api_key = config.deepl.auth_key - } - const out: string[] = await translateDeepL(text, srcLang, dstLang, - { - ...config.deepl - }, options, "") - const translation = getTranslation(out, false) - if (translation) { - storeSet(options.store, text, translation) - return translation - } else { - logger.warn('Error translating : ', text) - } - return text -} -export const storeSet = (storePath: string, text: string, translation: string, file: string = '') => { - const store = read(storePath, 'json') || {} - store[text] = clean(translation) - write(storePath, store) -} -export const storeGet = (storePath: string, text: string, file: string = '') => { - const db = read(storePath, 'json') || {} - if (db[text]) { - return db[text] - } -} export const TRANSLATORS = { '.md': translateMarkup, @@ -492,6 +88,7 @@ export const TRANSLATORS = '.toml': translateTOML, '.yaml': translateYAML, '.xlsx': translateXLS, - '.xls': translateXLS + '.xls': translateXLS, + '.txt': translateText } export const getTranslator = (file: string) => TRANSLATORS[extension(file)] diff --git a/packages/i18n/src/lib/translate_commons.ts b/packages/i18n/src/lib/translate_commons.ts new file mode 100644 index 00000000..60e61995 --- /dev/null +++ b/packages/i18n/src/lib/translate_commons.ts @@ -0,0 +1,197 @@ +import * as path from 'path' +import { isString, isArray, isObject, isNumber } from '@polymech/core/primitives' +import { sync as read } from "@polymech/fs/read" +import { sync as write } from "@polymech/fs/write" +import { minify as minify_html } from 'html-minifier-terser' + +import { IOptions, TranslateFilter } from '../types.js' +import { store, get } from './store.js' +import * as deepl from './deepl.js' + +const minify = false + +import { + defaultFilters, + defaultOptions, + transformObject, + TransformOptions, + testFilters +} from './async-iterator.js' + +import { update } from './glossary.js' + +import { createLogger } from '@polymech/log' +export let logger = createLogger('i18n') + +export const clean = (text: string = "") => text.trim() +export const extension = (file: string) => path.parse(file).ext + +export const getTranslation = (translations: any, all: boolean = false) => { + if (!all) { + if (translations && translations[0] && translations[0].text) { + return translations[0].text + } + } else { + return translations + } + return false +} +export const storeSet = (storePath: string, text: string, translation: string, file: string = '') => { + const store = read(storePath, 'json') || {} + store[text] = clean(translation) + write(storePath, store) +} +export const storeGet = (storePath: string, text: string, file: string = '') => { + const db = read(storePath, 'json') || {} + if (db[text]) { + return db[text] + } +} +export const translateObjectAIT = async (obj: any, src: string, options: IOptions) => { + const opts: TransformOptions = defaultOptions({ + throttleDelay: 100, + concurrentTasks: 1, + path: options.query, + filterCallback: testFilters( + defaultFilters([ + async (input) => !options.keys.includes(input) + ]) + ), + transform: async (input: string, path: string) => { + if((isNumber(input) || parseInt(input))){ + return input + } + const stored = get(options.store, input as string, options) + if (stored) { + return stored + } else { + const translated = await _translate(input, src, options) + if (translated) { + if (options.store) { + store(options.store, input, translated, options) + } + return translated + } + return input + } + }, + errorCallback: (path: string, value: string, error: any) => { + logger.error(`Error at path: ${path}, value: ${value}, error: ${error}`) + return value + } + } as TransformOptions) + try { + await transformObject(obj, opts.transform, opts.path, opts.throttleDelay, opts.concurrentTasks, opts.errorCallback, opts.filterCallback) + return obj + } catch (error) { + logger.error('Translation failed:', error) + } +} +export const translateDeepL = async ( + text: string, + srcLang: string = 'EN', + dstLang: string = 'DE', + dOptions: deepl.IDeepLOptions, + options: IOptions = {}, + file: string = '') => { + + if (minify) { + text = await minify_html(text, { + collapseWhitespace: true + }) + } + const glossary = await update(srcLang.toLowerCase(), dstLang.toLowerCase(), options) + const deeplOptions = { + preserve_formatting: '1', + tag_handling: ["xml"], + ...dOptions, + text: text, + target_lang: dstLang as deepl.DeepLLanguages, + source_lang: srcLang as deepl.DeepLLanguages, + glossary_id: glossary?.glossaryId, + formality: options.formality || 'default', + } as deepl.IDeepLOptions + + let ret: any = await deepl.translate_deepl(deeplOptions) as deepl.IDeepLResponse + if (!ret) { + logger.error('Translate failed : ' + text, file) + return false + } + ret = ret?.data + if (options.filters) { + (ret.translations).forEach((t, i) => { + (options.filters as TranslateFilter[]).forEach((f) => { + ret.translations[i].text = f(text, t.text, file) + }) + }) + } + return ret.translations +} +const _translate = async (value: string, src: string, options: IOptions) => { + + const translations = await translateDeepL(value as string, options.srcLang, options.dstLang, + { + auth_key: options.api_key, + formality: options.formality || 'default', + free_api: false + } as any, options, src) + + return getTranslation(translations) +} +export const translateObject = async (obj: any, src: string, options: IOptions) => { + if (isNumber(obj)) { + return obj + } + if (isString(obj) && !obj.trim().length) { + return obj + } + + if (isString(obj) && options.store) { + const stored = get(options.store, obj as string, options) + if (stored && options.cache) { + return stored + } + const ret = await _translate(obj as string, src, options) + if (ret && options.store) { + store(options.store, obj, ret, options) + return ret + } else { + console.error('Error translating : ', obj) + } + return obj + } + if (isObject(obj) || isArray(obj)) { + for await (const [key, value] of Object.entries(obj)) { + if (!obj[key]) { + continue + } + if (!isString(key)) { + continue + } + if (isString(value) && options.keys && !options.keys.includes(key)) { + continue + } + if (isString(value)) { + const stored = get(options.store, value as string, options) + if (stored && options.cache) { + obj[key] = stored + } else { + obj[key] = await _translate(value as string, src, options) + if (options.store) { + store(options.store, value, obj[key], options) + } + } + } else if (isObject(value)) { + obj[key] = await translateObject(value, src, options) + } else if (isArray(value)) { + let i = 0 + for await (const v of value) { + if (!v) continue + value[i] = await translateObject(v, src, options) + i++ + } + } + } + } + return obj +} diff --git a/packages/i18n/src/lib/translate_ex.ts b/packages/i18n/src/lib/translate_ex.ts deleted file mode 100644 index 0d32b05c..00000000 --- a/packages/i18n/src/lib/translate_ex.ts +++ /dev/null @@ -1,105 +0,0 @@ -import * as path from 'path' -import { createHash } from 'crypto' -import { CONFIG_DEFAULT } from '@polymech/commons' - -import { resolve } from '@polymech/commons' -import { sync as read } from "@polymech/fs/read" -import { sync as write } from "@polymech/fs/write" -import { sync as exists } from "@polymech/fs/exists" -import { IOptions, TranslateFilter } from '../types.js' -import { store, get } from './store.js' -import * as deepl from './deepl.js' - -import { createLogger } from '@polymech/log' -let logger = createLogger('i18n') - -import { update } from './glossary.js' - -export const clean = (text: string = "") => text.trim() -export const hash = (text: string) => createHash('md5').update(clean(text)).digest('base64') -export const translateDeepL = async ( - text: string, - srcLang: string = 'EN', - dstLang: string = 'DE', - dOptions: deepl.IDeepLOptions, - options: IOptions = {}, - file: string = '') => { - const glossary = await update(srcLang.toLowerCase(), dstLang.toLowerCase(), options) - const deeplOptions = { - preserve_formatting: '1', - tag_handling: ["xml"], - ...dOptions, - text: text, - target_lang: dstLang as deepl.DeepLLanguages, - source_lang: srcLang as deepl.DeepLLanguages, - glossary_id: glossary?.glossaryId, - formality: options.formality || 'default', - } as deepl.IDeepLOptions - - let ret: any = await deepl.translate_deepl(deeplOptions) as deepl.IDeepLResponse - if (!ret) { - logger.error('Translate failed : ' + text, file) - return false - } - ret = ret?.data - if (options.filters) { - (ret.translations).forEach((t, i) => { - (options.filters as TranslateFilter[]).forEach((f) => { - ret.translations[i].text = f(text, t.text, file) - }) - }) - } - return ret.translations -} - - - -export const translateText = async (text: string, srcLang: string, dstLang: string, options: IOptions = {}) => { - /* - if (!text || text.length === 0) { - return '' - } - if (srcLang === dstLang) { - return text - } - if (!options.store) { - logger.error('No store provided') - return text - } - const store = path.resolve(resolve(options.store, false)) - if (!exists(store)) { - logger.warn(`Invalid store root : ${store}`) - } - const config: any = CONFIG_DEFAULT() - text = clean(text) - if (exists(options.store)) { - const stored = storeGet(options.store, text) - if (stored) { - return stored - } - } - if(!options.storeRoot){ - options.storeRoot = "${OSR_ROOT}/i18n-store" - } - if(!options.api_key){ - if(!config || !config.deepl || !config.deepl.auth_key){ - logger.error('i18n:translateText: No API key provided') - return text - } - options.api_key = config.deepl.auth_key - } - const out: string[] = await translateDeepL(text, srcLang, dstLang, - { - ...config.deepl - }, options, "") - - const translation = getTranslation(out, false) - if (translation) { - // storeSet(options.store, text, translation) - return translation - } else { - logger.warn('Error translating : ', text) - } - */ - return text -} \ No newline at end of file diff --git a/packages/i18n/src/lib/translate_json.ts b/packages/i18n/src/lib/translate_json.ts new file mode 100644 index 00000000..ff04ebca --- /dev/null +++ b/packages/i18n/src/lib/translate_json.ts @@ -0,0 +1,27 @@ +import { OSR_CACHE } from '@polymech/commons' +import { get_cached, set_cached } from '@polymech/cache' +import { sync as read } from "@polymech/fs/read" +import { sync as write } from "@polymech/fs/write" +import { IOptions } from '../types.js' +import { MODULE_NAME } from '../constants.js' +import { translateObject, logger } from './translate_commons.js' + +export const translateJSON = async ( + src: string, + dst: string, + options: IOptions) => { + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME) + if (osr_cache && cached && options.cache) { + return cached + } + + let object = read(src, 'json') as any + object = await translateObject(object, src, options) + + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys }, MODULE_NAME, object) + } + write(dst, object) + return object +} \ No newline at end of file diff --git a/packages/i18n/src/lib/translate_markup.ts b/packages/i18n/src/lib/translate_markup.ts new file mode 100644 index 00000000..7a7ebeb1 --- /dev/null +++ b/packages/i18n/src/lib/translate_markup.ts @@ -0,0 +1,37 @@ +import { OSR_CACHE } from '@polymech/commons' +import { get_cached, set_cached } from '@polymech/cache' +import { sync as read } from "@polymech/fs/read" +import { sync as write } from "@polymech/fs/write" +import { IOptions } from '../types.js' +import { MODULE_NAME } from '../constants.js' +import { translateDeepL, getTranslation } from './translate_commons.js' + +export const translateMarkup = async ( + src: string, + dst: string, + options: IOptions) => { + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME); + if (osr_cache && cached && options.cache) { + return cached + } + const srcContent = read(src) as string + let translations = await translateDeepL(srcContent, + options.srcLang, + options.dstLang, + { + free_api: false, + auth_key: options.api_key + } as any, options, src) as any + + translations = getTranslation(translations) + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys, filters: options.filters }, MODULE_NAME, translations) + } + if (translations) { + write(dst, translations) + } else { + return false + } + return translations +} \ No newline at end of file diff --git a/packages/i18n/src/lib/translate_text.ts b/packages/i18n/src/lib/translate_text.ts new file mode 100644 index 00000000..78770512 --- /dev/null +++ b/packages/i18n/src/lib/translate_text.ts @@ -0,0 +1,55 @@ +import * as path from 'path' +import { resolve, CONFIG_DEFAULT } from '@polymech/commons' +import { sync as exists } from "@polymech/fs/exists" +import { IOptions } from '../types.js' +import { logger, clean, storeGet, storeSet, translateDeepL, getTranslation } from './translate_commons.js' + +export const translateText = async (text: string, srcLang: string, dstLang: string, options: IOptions = {}) => { + + if (!text || text.length === 0) { + return '' + } + if (srcLang === dstLang) { + return text + } + if (!options.store) { + logger.error('No store provided') + return text + } + const store = path.resolve(resolve(options.store, false)) + if (!exists(store)) { + logger.warn(`Invalid store root : ${store}`) + } + const config: any = CONFIG_DEFAULT() + text = clean(text) + if (exists(options.store)) { + const stored = storeGet(options.store, text) + if (stored) { + return stored + } + } + if(!options.storeRoot){ + options.storeRoot = "${OSR_ROOT}/i18n-store" + } + if(!options.api_key){ + if(!config || !config.deepl || !config.deepl.auth_key){ + logger.error('i18n:translateText: No API key provided') + return text + } + options.api_key = config.deepl.auth_key + } + const out: string[] = await translateDeepL(text, srcLang, dstLang, + { + ...config.deepl + }, options, "") + + const translation = getTranslation(out, false) + if (translation) { + storeSet(options.store, text, translation) + return translation + } else { + logger.warn('Error translating : ', text) + } + + return text +} \ No newline at end of file diff --git a/packages/i18n/src/lib/translate_toml.ts b/packages/i18n/src/lib/translate_toml.ts new file mode 100644 index 00000000..8143e8bc --- /dev/null +++ b/packages/i18n/src/lib/translate_toml.ts @@ -0,0 +1,36 @@ +import { OSR_CACHE } from '@polymech/commons' +import { get_cached, set_cached } from '@polymech/cache' +import { sync as read } from "@polymech/fs/read" +import { sync as write } from "@polymech/fs/write" +import * as TOML from 'smol-toml' +import { IOptions } from '../types.js' +import { MODULE_NAME } from '../constants.js' +import { translateObject } from './translate_commons.js' +import { createLogger } from '@polymech/log' + +const logger = createLogger('i18n') + +export const translateTOML = async ( + src: string, + dst: string, + options: IOptions) => { + + logger.info(`Translating ${src} to ${dst}`) + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME) + if (osr_cache && cached && options.cache) { + return cached + } + let srcContent = read(src) as string + let toml = TOML.parse(srcContent) + toml = await translateObject(toml, src, options) + + if (osr_cache && options.cache) { + try { + await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify(toml)) + } catch (e) { + logger.error(`Error caching ${src} TOML : ${e.message}`, toml); + } + } + write(dst, TOML.stringify(toml)) +} \ No newline at end of file diff --git a/packages/i18n/src/lib/translate_xls.ts b/packages/i18n/src/lib/translate_xls.ts new file mode 100644 index 00000000..d6f48928 --- /dev/null +++ b/packages/i18n/src/lib/translate_xls.ts @@ -0,0 +1,63 @@ +import * as path from 'path' +import { JSONPath } from 'jsonpath-plus' +import { get_cached, set_cached } from '@polymech/cache' +import { OSR_CACHE } from '@polymech/commons' +import { sync as exists } from "@polymech/fs/exists" +import { sync as mkdir } from "@polymech/fs/dir" +import * as XLSX from 'xlsx' +import { MODULE_NAME } from '../constants.js' +import { IOptions } from '../types.js' +import { logger, translateObjectAIT } from './translate_commons.js' + +export const translateXLS = async ( + src: string, + dst: string, + options: IOptions) => { + logger.debug(`Translating ${src} to ${dst}`) + if (!exists(src)) { + logger.error('File not found : ' + src) + return + } + const dstDir = path.parse(dst).dir + mkdir(dstDir) + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { + keys: options.keys + }, MODULE_NAME) + + if (osr_cache && cached && options.cache && exists(dst)) { + return cached + } + + const workbook = XLSX.readFile(src) + const worksheet = workbook.Sheets[workbook.SheetNames[0]]; + const raw_data: any[] = XLSX.utils.sheet_to_json(worksheet, { header: 1, blankrows: false, raw: false, skipHidden: true }); + const queryResult = JSONPath( + { + path: options.query, + json: raw_data, + + }) + let translated + try { + translated = await translateObjectAIT(raw_data, src, { + ...options, + keys: queryResult + }) + } catch (error) { + logger.error('Error translating XLSX', error) + return + } + if (!translated) { + logger.error('Error translating XLSX', src) + return + } + const sheetOut = XLSX.utils.json_to_sheet(translated, { skipHeader: true }) + const workbookOut = XLSX.utils.book_new() + XLSX.utils.book_append_sheet(workbookOut, sheetOut, workbook.SheetNames[0]) + XLSX.writeFileXLSX(workbookOut, dst) + if (osr_cache && options.cache) { + await set_cached(src, { keys: options.keys }, MODULE_NAME, translated) + } + return translated +} diff --git a/packages/i18n/src/lib/translate_yaml.ts b/packages/i18n/src/lib/translate_yaml.ts new file mode 100644 index 00000000..d338ec26 --- /dev/null +++ b/packages/i18n/src/lib/translate_yaml.ts @@ -0,0 +1,31 @@ +import { OSR_CACHE } from '@polymech/commons' +import { get_cached, set_cached } from '@polymech/cache' +import { sync as read } from "@polymech/fs/read" +import { sync as write } from "@polymech/fs/write" +import { parse, stringify } from 'yaml' +import { IOptions } from '../types.js' +import { MODULE_NAME } from '../constants.js' +import { translateObject, logger } from './translate_commons.js' +import * as TOML from 'smol-toml' + +export const translateYAML = async (src: string, dst: string, options: IOptions) => { + const osr_cache = OSR_CACHE() + const cached = await get_cached(src, { keys: options.keys }, MODULE_NAME) + if (osr_cache && cached && options.cache) { + return TOML.parse(cached.translations) + } + let srcContent = read(src) as string + let yaml = parse(srcContent) + yaml = await translateObject(yaml, src, options) + if (osr_cache && options.cache) { + try { + await set_cached(src, { keys: options.keys }, MODULE_NAME, TOML.stringify({ translations: yaml })) + } catch (e) { + logger.error(`Error caching YAML ${src} : ${e.message}`, yaml); + } + } + const ret = stringify(yaml) + write(dst, ret) + options.stdout && process.stdout.write(ret) + return ret +} \ No newline at end of file diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json index ae5672d0..046ab476 100644 --- a/packages/i18n/tsconfig.json +++ b/packages/i18n/tsconfig.json @@ -4,7 +4,9 @@ "src/**/*.ts" ], "files": [ - "src/index.ts" + "src/index.ts", + "src/lib/index.ts", + "src/lib/translate.ts" ], "compilerOptions": { "strictNullChecks": false,