ebt-vue3
Version:
Vue3 Library for SuttaCentral Voice EBT-Sites
67 lines (58 loc) • 1.75 kB
JavaScript
import fs from 'fs';
import path from 'path';
import { default as EN } from "../src/i18n/en.mjs"
import {
DeepLAdapter,
} from "ebt-deepl";
let [nodePath, scriptPath, ...args] = process.argv;
let script = path.basename(scriptPath);
const msg = `${script}`;
const srcLang = 'en';
let [ dstLang ] = args;
if (dstLang == null) {
console.log(msg, "[1] Expected destination language code");
process.exit(-1);
}
let outPath = path.join(scriptPath, '../../src/i18n', `${dstLang}.mjs`);
(async()=>{
let dlt = await DeepLAdapter.create({srcLang, dstLang});
async function translate(src, dst={}) {
const msg = `${script}.translate()`;
let keys = Object.keys(src);
for (let i=0; i<keys.length; i++) {
let key = keys[i];
let srcVal = src[key];
if (key === 'languageCode') {
switch (dstLang) {
case 'it':
dst[key] = "Italiano / IT";
break;
case 'pt':
dst[key] = "Português / PT";
break;
case 'es':
dst[key] = "Español / ES";
break;
case 'ru':
dst[key] = "Русский / RU";
break;
}
} else if (typeof srcVal === 'object') {
console.warn(msg, '[2]object', key);
dst[key] = await translate(srcVal);
} else {
let trans = await dlt.translate([srcVal]);
console.warn(msg, '[3]translate', key, trans);
dst[key] = trans[0];
}
}
return dst;
}
let xlt = await translate(EN);
console.warn(msg, '[4]writing', outPath);
let json = JSON.stringify(xlt, null, 2);
let js = 'export default ' + json;
await fs.promises.writeFile(outPath, js);
console.warn(msg, '[5]done');
})();