import { CsvAutoTranslator } from "./CsvAutoTranslator"; import { CSVUtils } from "./CSVUtils"; import { LiteralCollector } from "./LiteralCollector"; import commandLineArgs from 'command-line-args' function isNullOrEmpty(arr: T[]): boolean { return arr == null || arr.length == 0; } export class CmdExecutor { static testConvert() { let cwd = "E:/DATA/Projects/ZhiYou/ProjectFClient/GameClient/" let cscodeFolders = [ cwd + "Assets/Bundles/FGUI/", // "E:/DATA/Projects/ZhiYou/DXTSProject/Client/Assets/Bundles/UI/", // "E:/DATA/Projects/ZhiYou/DXTSProject/Client/Assets/Bundles/Battle/", // "E:/DATA/Projects/ZhiYou/DXTSProject/Client/Assets/Scripts/", ] let gameConfigFolders = [cwd + "Assets/Bundles/GameConfigs/"] let outCsvFile = "test/Auto.csv" let langs = ["zh_cn"]; let literalCollector = new LiteralCollector(); // return literalCollector.convert(cscodeFolders, gameConfigFolders, outCsvFile, langs,undefined,false,true) return literalCollector.convert(cscodeFolders, gameConfigFolders, outCsvFile, langs) // node . --cscodedir ../../../GameClient/Assets/Bundles/FGUI/ --configdir ../../../GameClient/Assets/Bundles/GameConfigs/ --outcsv E:/DATA/Projects/e-gbl-client/client/Assets/Bundles/GameConfigs/Translation/hello.csv --langs zh_cn } static async runConvertWithCmdOptions() { const optionDefinitions = [ { name: 'cscodedir', type: String, multiple: true }, { name: 'configdir', type: String, multiple: true }, { name: 'outcsv', type: String }, { name: "langs", type: String, multiple: true, defaultOption: true }, { name: "verbose", alias: 'v', type: Boolean }, { name: "scanonly", type: Boolean, defaultOption: false }, { name: "trmethod", type: String } ] const options = commandLineArgs(optionDefinitions) let cscodedir: string[] = options.cscodedir ?? [] let configdir: string[] = options.configdir ?? [] let outcsv: string = options.outcsv let langs: string[] = options.langs ?? ["zh_cn"] let verbose: boolean = options.verbose ?? false let scanonly: boolean = options.scanonly ?? false let trmethod: string = options.trmethod ?? "Tr.TR" let argv = process.argv if (isNullOrEmpty(cscodedir) && isNullOrEmpty(configdir)) { if (isNullOrEmpty(cscodedir)) { console.error(`cscodedir missing:`, argv) return } if (isNullOrEmpty(configdir)) { console.error(`configdir missing:`, argv) return } } if (outcsv == null) { console.error(`outcsv missing:`, argv) return } if (isNullOrEmpty(langs)) { console.error(`langs missing:`, argv) return } console.log(`convert cmd options: `, cscodedir, configdir, outcsv, langs, verbose) let literalCollector = new LiteralCollector(); await literalCollector.convert(cscodedir, configdir, outcsv, langs, trmethod, scanonly, verbose) console.log("convert done.") } static async testSlimCsv() { let inCsvFile = [ "E:/DATA/Projects/ZhiYou/ProjectFClient/GameClient/Assets/Editor/Translation/Auto.csv", "E:/DATA/Projects/ZhiYou/ProjectFClient/GameClient/Assets/Editor/Translation/Manual.csv", ] let outCsvFile = "E:/DATA/Projects/ZhiYou/ProjectFClient/GameClient/Assets/Bundles/GameConfigs/Translation/ScriptTrans.csv" let langs = ["zh_hk"]; await CSVUtils.slimCsvWithLangs(inCsvFile, outCsvFile, langs); // node bin/slimlangs.js --incsv E:/DATA/Projects/e-gbl-client/client/Assets/Bundles/GameConfigs/Translation/hello.csv --outcsv E:/DATA/Projects/e-gbl-client/client/Assets/Bundles/GameConfigs/Translation/hello-out.csv --langs zh_cn } static async runSlimCsvWithLangs() { const optionDefinitions = [ { name: 'incsv', type: String, multiple: true }, { name: 'outcsv', type: String }, { name: 'langs', type: String, multiple: true, defaultOption: true }, ]; const options = commandLineArgs(optionDefinitions); let incsv: string[] = options.incsv ?? []; let outcsv: string = options.outcsv; let langs: string[] = options.langs ?? ["zh_cn"] console.log(`slim csv cmd options: `, incsv, outcsv, langs); let argv = process.argv; if (isNullOrEmpty(incsv)) { console.error(`incsv missing:`, argv); return; } if (outcsv == null) { console.error(`outcsv missing:`, argv); return; } if (isNullOrEmpty(langs)) { console.error(`langs missing:`, argv); return; } await CSVUtils.slimCsvWithLangs(incsv, outcsv, langs); console.log("slim csv with langs done."); } static async runTranslateCsvWithCmdOptions() { const optionDefinitions = [ { name: 'incsv', type: String }, { name: 'outcsv', type: String }, { name: 'fromLang', type: String }, { name: 'toLangs', type: String, multiple: true, defaultOption: true }, { name: 'apiKey', type: String }, { name: 'appId', type: String }, ]; const options = commandLineArgs(optionDefinitions); let incsv: string = options.incsv; let outcsv: string = options.outcsv; let fromLang: string = options.fromLang ?? undefined let toLangs: string[] = options.toLangs ?? undefined let apiKey: string = options.apiKey; let appId: string = options.appId; console.log(`translate csv cmd options: `, incsv, outcsv, fromLang, toLangs, apiKey, appId); let argv = process.argv; if (incsv == null) { console.error(`incsv missing:`, argv); return; } if (outcsv == null) { console.error(`outcsv missing:`, argv); return; } if (fromLang == null) { console.error(`fromLang missing:`, argv); return; } if (toLangs != null && toLangs.length == 0) { console.error(`toLangs is empty:`, argv); return; } if (apiKey == null) { console.error(`apiKey missing:`, argv); return; } if (appId == null) { console.error(`appId missing:`, argv); return; } await CsvAutoTranslator.translateCsvWithLangs(appId, apiKey, incsv, outcsv, fromLang, toLangs); console.log("translate csv with cmd options done."); } }