Ver Fonte

feat: add --keys to tr-format and tr-prep

Sv443 há 1 mês atrás
pai
commit
8a430c1afd
1 ficheiros alterados com 21 adições e 2 exclusões
  1. 21 2
      src/tools/tr-format.ts

+ 21 - 2
src/tools/tr-format.ts

@@ -3,12 +3,16 @@ import k from "kleur";
 import type { TrLocale } from "../utils/index.js";
 import locales from "../../assets/locales.json" with { type: "json" };
 
-const prepTranslate = process.argv.find((v) => v.match(/--prep(are)?/) || v.toLowerCase() === "-p");
+const prepTranslateRaw = process.argv.find((v) => v.match(/--prep(are)?/) || v.toLowerCase() === "-p");
+const prepTranslate = prepTranslateRaw && prepTranslateRaw.length > 0;
 
 const onlyLocalesRaw = process.argv.find((v) => v.startsWith("--only") || v.toLowerCase().startsWith("-o"));
 const onlyLocales = onlyLocalesRaw?.split("=")[1]?.replace(/"/g, "")
   ?.replace(/\s/g, "")?.split(",") as TrLocale[] | undefined;
 
+const onlyKeysRaw = process.argv.find((v) => v.startsWith("--keys") || v.toLowerCase().startsWith("-k"));
+const onlyKeys = onlyKeysRaw?.split("=")[1]?.replace(/"/g, "").split(",").map(k => k.trim()) as string[] | undefined;
+
 const includeBased = Boolean(process.argv.find((v) => v.match(/--include-based/) || v.toLowerCase() === "-b"));
 
 async function run() {
@@ -34,12 +38,27 @@ async function run() {
       continue;
 
     for(const k of Object.keys(enUS_obj)) {
+      // special treatment for the meta block
+      if(k === "meta") {
+        localeFile = localeFile.replace(/"meta":\s+{[^}]+\s{2}},?/m, `"meta": ${JSON.stringify(localeObj.meta, null, 2).replace(/\n/gm, "\n  ")},`);
+        continue;
+      }
+
+      // if --keys or -k is present, only update the keys specified:
+      if(onlyKeys && !onlyKeys.includes(k)) {
+        if(localeObj[k] === undefined)
+          continue;
+        // reset to the value in the current language's file:
+        localeFile = localeFile.replace(new RegExp(`"${k}":\\s+".*"`, "m"), `"${k}": "${escapeJsonVal(localeObj[k]).trim()}"`);
+        continue;
+      }
+
       const val = localeObj?.[k];
       if(val)
         localeFile = localeFile.replace(new RegExp(`"${k}":\\s+".*"`, "m"), `"${k}": "${escapeJsonVal(val).trim()}"`);
       else {
         if(prepTranslate)
-          localeFile = localeFile.replace(new RegExp(`\\n\\s+"${k}":\\s+".*",?`, "m"), `\n    "${k}": "",\n    "${k}": "${escapeJsonVal(enUS_obj[k]).trim()}",`);
+          localeFile = localeFile.replace(new RegExp(`\\n\\s+"${k}":\\s+".*",?`, "m"), `\n  "${k}": "",\n  "${k}": "${escapeJsonVal(enUS_obj[k]).trim()}",`);
         else
           localeFile = localeFile.replace(new RegExp(`\\n\\s+"${k}":\\s+".*",?`, "m"), "");
       }