mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-01 14:46:36 +08:00
497edfd564
- 一次性回灌:主包最新内容(含 565 个未同步键)全量写回 6 个 fragment 文件,fragments 成为完整唯一源;新增 core fragment(common/docs/home 等 9 个此前仅存在于主包的命名空间)
- merge-i18n-fragments.mjs 改为从零重建主包(不再以主包为基础),重建结果与原主包语义零差异
- 主包 messages/{zh-CN,en}.json 移出跟踪并加入 .gitignore
- 生成接入入口:predev/prebuild/prebuild:embed/precheck:i18n 钩子 + Makefile code-check 与 checks.sh vitest 前置生成
- 修复既有漂移:configVersions.title 现以 fragments(Config versions)为准
43 lines
1.3 KiB
JavaScript
43 lines
1.3 KiB
JavaScript
import { readFileSync, writeFileSync, readdirSync } from 'node:fs';
|
||
import { resolve, dirname } from 'node:path';
|
||
import { fileURLToPath } from 'node:url';
|
||
|
||
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
||
const fragmentsDir = resolve(root, 'messages/fragments');
|
||
|
||
function deepMerge(target, source) {
|
||
for (const [key, value] of Object.entries(source)) {
|
||
if (
|
||
value &&
|
||
typeof value === 'object' &&
|
||
!Array.isArray(value) &&
|
||
target[key] &&
|
||
typeof target[key] === 'object' &&
|
||
!Array.isArray(target[key])
|
||
) {
|
||
deepMerge(target[key], value);
|
||
} else {
|
||
target[key] = value;
|
||
}
|
||
}
|
||
return target;
|
||
}
|
||
|
||
function mergeLocale(locale) {
|
||
const mainPath = resolve(root, `messages/${locale}.json`);
|
||
// 主包是纯生成物:从空对象开始合并全部 fragment(fragments 为唯一源)
|
||
const data = {};
|
||
const suffix = `.${locale}.json`;
|
||
for (const name of readdirSync(fragmentsDir).sort()) {
|
||
if (!name.endsWith(suffix)) continue;
|
||
const frag = JSON.parse(readFileSync(resolve(fragmentsDir, name), 'utf8'));
|
||
deepMerge(data, frag);
|
||
console.log(`merged ${name}`);
|
||
}
|
||
writeFileSync(mainPath, `${JSON.stringify(data, null, 2)}\n`);
|
||
}
|
||
|
||
mergeLocale('zh-CN');
|
||
mergeLocale('en');
|
||
console.log('fragments merged');
|