stable-diffusion-webui-loca.../test/scripts/build.ts

112 lines
2.2 KiB
TypeScript

import { outputJSON, readFile, readJSON } from 'fs-extra';
import { join } from 'path';
import { __ROOT, __ROOT_OUTPUT } from '../__root';
import { initIdeaSegmentText, processTextSync } from '../../src/lib/segment';
import { tw2cn_min } from '@lazy-cjk/zh-convert/min';
import { parse } from 'json5'
function readJSON5(path: string)
{
return readFile(path).then(buf => parse(buf.toString()))
}
export default Promise.all([
readJSON(join(__ROOT, 'localizations', 'zh_TW.json')),
readJSON(join(__ROOT, 'localizations', 'zh-Hans.json')),
readJSON(join(__ROOT, 'localizations', 'zh_TW.json')),
readJSON5(join(__ROOT, 'localizations', 'my.json5')),
])
.then(ls =>
{
console.log(`merge localizations`);
let tw = ls[2];
Object.entries(tw)
.forEach(([key, value]) =>
{
if (key === value)
{
delete tw[key]
}
})
;
ls.unshift(ls[1]);
return ls.reduce((a, b) => Object.assign(a, b), {}) as Record<string, string>
})
.then(async (json) =>
{
console.log(`output zh_Hant.json`);
await outputJSON(join(__ROOT, 'localizations', 'zh_Hant.json'), json, {
spaces: 2,
});
console.log(`init Segment`);
await initIdeaSegmentText();
console.log(`process zh_Hant.json`);
const ignoreProcessList = [
'zh_Hant',
'zh_Hans',
];
const json_hans: typeof json = {};
for (const key of Object.keys(json))
{
let value = json[key];
let _do = true;
if (typeof value === 'undefined' || value === null || key === value || typeof value !== 'string' && typeof value !== 'number')
{
_do = false;
}
if (_do)
{
if (ignoreProcessList.includes(key))
{
json_hans[key] = json[key] = value;
}
else
{
value = processTextSync(value);
if (key === value)
{
_do = false;
}
else
{
json[key] = value;
json_hans[key] = tw2cn_min(value);
}
}
}
if (!_do)
{
delete json[key]
}
}
console.log(`build zh_Hant.json`);
await Promise.all([
outputJSON(join(__ROOT_OUTPUT, 'localizations', 'zh_Hant.json'), json, {
spaces: 2,
}),
outputJSON(join(__ROOT_OUTPUT, 'localizations', 'zh_Hans.json'), json_hans, {
spaces: 2,
}),
])
console.log(`build done.`)
})
;