/* This file is part of GNU Taler (C) 2021-2024 Taler Systems S.A. GNU Taler is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Taler; see the file COPYING. If not, see */ import { strings } from "./i18n/strings.js"; const keys = Object.keys(strings); type Actions = "SHOW_STATS" | "SHOW_MISSING" | "SUGGEST"; const options = process.argv.reduce( (prev, arg, idx, arr) => { if (arg === "--missing") { prev.ACTION = "SHOW_MISSING"; } if (arg === "--lang") { prev.lang = idx + 1 < arr.length ? arr[idx + 1] : undefined; } if (arg === "--suggest") { prev.ACTION = "SUGGEST"; } return prev; }, { ACTION: "SHOW_STATS" as Actions, lang: undefined as string | undefined, }, ); switch (options.ACTION) { case "SHOW_MISSING": { keys.forEach((key) => { if (options.lang && options.lang !== key) { return; } const msgs = Object.entries( strings[key].locale_data.messages as Record, ); let empty = msgs.filter(([key, value]) => { if (!value || !value.length || !value[0]) return true; return false; }); empty.forEach((msg) => { console.log(msg[0]); }); }); break; } case "SUGGEST": { keys.forEach((key) => { if (options.lang && options.lang !== key) { return; } // const content = fs.readFileSync(`./src/i18n/${key}.po`).toString("utf-8") const content = `#: src/Application.tsx:208 #, c-format msgid "checking compatibility with server..." msgstr "" #: src/Application.tsx:217 #, fuzzy, c-format msgid "Contacting the server failed" msgstr "No se pudo aceder al servidor" #: src/Application.tsx:229 #, c-format msgid "The server version is not supported" msgstr "" #: src/Application.tsx:230 #, c-format msgid "Supported version \"%1$s\", server version \"%2$s\"." msgstr "" ` const msgs = Object.entries( strings[key].locale_data.messages as Record, ); let empty = msgs.filter(([key, value]) => { if (!value || !value.length || !value[0]) return true; return false; }); empty.forEach((msg) => { const search = new RegExp(`\n\n(#.*\n)+msgid "${msg[0]}"\nmsgstr .*\n\n`,"gm"); const res = search.exec(content) if (res) { console.log(res[0].trim()) } }); }) break; } case "SHOW_STATS": { keys.forEach((key) => { const com = strings[key].completeness as number; const msgs = Object.entries( strings[key].locale_data.messages as Record, ); const empty = msgs.filter(([key, value]) => { if (!value || !value.length || !value[0]) return true; return false; }).length; console.log( ` * ${key}: ${com.toLocaleString(undefined, { minimumIntegerDigits: 2, })}% ${(msgs.length - empty).toLocaleString(undefined, { minimumIntegerDigits: 3, })} of ${msgs.length}`, ); }); break; } default: { throw Error(`unknown action: ${options.ACTION}`); } }