pogen: implement merge and emit subcommands

This commit is contained in:
Florian Dold 2022-02-16 16:31:36 +01:00
parent 22323c082d
commit 54d5cc02d1
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
4 changed files with 33 additions and 16 deletions

View File

@ -15,6 +15,7 @@
"typescript": "^4.5.5"
},
"dependencies": {
"@types/node": "^17.0.17"
"@types/node": "^17.0.17",
"glob": "^7.2.0"
}
}

View File

@ -22,12 +22,10 @@
import * as po2json from "po2json";
import * as fs from "fs";
import * as path from "path";
import glob = require("glob");
export function po2ts(): void {
const files = fs
.readdirSync("./src/i18n")
.filter((x) => x.endsWith(".po"))
.map((x) => path.join("./src/i18n/", x));
const files = glob.sync("src/i18n/*.po");
if (files.length === 0) {
console.error("no .po files found in src/i18n/");

View File

@ -1,4 +1,8 @@
import { potextract } from "./potextract.js";
import * as child_process from "child_process";
import * as fs from "fs";
import glob = require("glob");
import { po2ts } from "./po2ts.js";
function usage(): never {
console.log("usage: pogen <extract|merge|emit>");
@ -14,6 +18,29 @@ export function main() {
case "extract":
potextract();
break;
case "merge": {
const packageJson = JSON.parse(
fs.readFileSync("./package.json", { encoding: "utf-8" }),
);
const poDomain = packageJson.pogen?.domain;
if (!poDomain) {
console.error("missing 'pogen.domain' field in package.json");
process.exit(1);
}
const files = glob.sync("src/i18n/*.po");
console.log(files);
for (const f of files) {
console.log(`merging ${f}`);
child_process.execSync(
`msgmerge -o '${f}' '${f}' 'src/i18n/${poDomain}.pot'`,
);
}
break;
}
case "emit":
po2ts();
break;
default:
console.error(`unknown subcommand '${subcommand}'`);
usage();

View File

@ -150,10 +150,12 @@ importers:
packages/pogen:
specifiers:
'@types/node': ^17.0.17
glob: ^7.2.0
po2json: ^0.4.5
typescript: ^4.5.5
dependencies:
'@types/node': 17.0.17
glob: 7.2.0
devDependencies:
po2json: 0.4.5
typescript: 4.5.5
@ -8201,7 +8203,6 @@ packages:
/balanced-match/1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: true
/base/0.11.2:
resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
@ -8356,7 +8357,6 @@ packages:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: true
/braces/2.3.2:
resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
@ -9196,7 +9196,6 @@ packages:
/concat-map/0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: true
/concat-stream/1.6.2:
resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
@ -11769,7 +11768,6 @@ packages:
/fs.realpath/1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
dev: true
/fsevents/1.2.13:
resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==}
@ -11974,7 +11972,6 @@ packages:
minimatch: 3.0.5
once: 1.4.0
path-is-absolute: 1.0.1
dev: true
/global-dirs/3.0.0:
resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==}
@ -12655,7 +12652,6 @@ packages:
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: true
/inherits/2.0.1:
resolution: {integrity: sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=}
@ -12667,7 +12663,6 @@ packages:
/inherits/2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: true
/ini/1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
@ -14169,7 +14164,6 @@ packages:
resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==}
dependencies:
brace-expansion: 1.1.11
dev: true
/minimist/1.2.5:
resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==}
@ -14754,7 +14748,6 @@ packages:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
dev: true
/onetime/5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
@ -15162,7 +15155,6 @@ packages:
/path-is-absolute/1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
dev: true
/path-key/2.0.1:
resolution: {integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=}
@ -19951,7 +19943,6 @@ packages:
/wrappy/1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: true
/write-file-atomic/3.0.3:
resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}