Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* Build locale-extra-rest.mjs from English→locale phrase map for keys still English in non-es packs.
|
||||
* Also covers new settings/dashboard strings for all locales including es.
|
||||
*/
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { EXTRA as EXTRA_ES } from "./locale-extra-es.mjs";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
function parseMessageDict(source) {
|
||||
const dict = {};
|
||||
const re = /"([^"\\]+)"\s*:\s*((?:"(?:\\.|[^"\\])*")|(?:`(?:\\.|[^`\\])*`))/gs;
|
||||
let m;
|
||||
while ((m = re.exec(source))) {
|
||||
const key = m[1];
|
||||
const raw = m[2];
|
||||
dict[key] = raw.startsWith("`")
|
||||
? raw.slice(1, -1).replace(/\\`/g, "`").replace(/\\\$/g, "$").replace(/\\n/g, "\n")
|
||||
: JSON.parse(raw);
|
||||
}
|
||||
return dict;
|
||||
}
|
||||
|
||||
const en = parseMessageDict(
|
||||
fs.readFileSync(path.resolve(__dirname, "../src/lib/i18n/messages/en.ts"), "utf8")
|
||||
);
|
||||
|
||||
/** English source string → { fr, de, it, pt, nl, pl, ja, es? } */
|
||||
const BY_EN = JSON.parse(fs.readFileSync(path.join(__dirname, "phrase-map.json"), "utf8"));
|
||||
|
||||
const codes = ["es", "fr", "de", "it", "pt", "nl", "pl", "ja"];
|
||||
const EXTRA = Object.fromEntries(codes.map((c) => [c, {}]));
|
||||
|
||||
// 1) Seed non-es from Spanish extras via English lookup of the same key
|
||||
for (const [key, esText] of Object.entries(EXTRA_ES.es ?? {})) {
|
||||
const enText = en[key];
|
||||
if (!enText) continue;
|
||||
EXTRA.es[key] = esText;
|
||||
const mapped = BY_EN[enText];
|
||||
if (!mapped) continue;
|
||||
for (const code of ["fr", "de", "it", "pt", "nl", "pl", "ja"]) {
|
||||
if (mapped[code]) EXTRA[code][key] = mapped[code];
|
||||
}
|
||||
}
|
||||
|
||||
// 2) Apply phrase map to every en key (fills new settings/dashboard too)
|
||||
for (const [key, enText] of Object.entries(en)) {
|
||||
const mapped = BY_EN[enText];
|
||||
if (!mapped) continue;
|
||||
for (const code of codes) {
|
||||
if (mapped[code]) EXTRA[code][key] = mapped[code];
|
||||
}
|
||||
}
|
||||
|
||||
const out = `/** Auto-built by build-phrase-extra.mjs — do not hand-edit; update phrase-map.json. */\nexport const EXTRA = ${JSON.stringify(EXTRA, null, 2)};\n`;
|
||||
fs.writeFileSync(path.join(__dirname, "locale-extra-rest.mjs"), out, "utf8");
|
||||
|
||||
for (const code of codes) {
|
||||
console.log(code, Object.keys(EXTRA[code]).length);
|
||||
}
|
||||
Reference in New Issue
Block a user