UNPKG

@c-sheep/i18n-extract-cli

Version:

这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然,你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react

152 lines (151 loc) 6.05 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const commander_1 = require("commander"); const leven_1 = __importDefault(require("leven")); const minimist_1 = __importDefault(require("minimist")); const genre_1 = require("./control/genre"); const index_1 = require("./chmod/index"); const util_1 = require("./shared/util"); const chalk = require("chalk"); commander_1.program .version(`${process.env.PACKAGE_NAME} ${process.env.PACKAGE_VERSION}`) .usage("[command] [options]"); commander_1.program .option("-i, --input <path>", "输入文件路径") .option("-o, --output <path>", "输出文件路径") .option("-c, --config-file <path>", "配置文件所在路径") .option("-v, --verbose", "控制台打印更多调试信息") .option("--skip-extract", "跳过中文提取阶段") .option("--incremental", "开启增量转换") .action((options) => { (0, genre_1.genreZhToI18n)(options); }); commander_1.program .command("git") .description("翻译git待提交的内容") .action((opt) => { const options = (0, minimist_1.default)(process.argv.slice(3)); if (options.c) { options.configFile = options.c; } (0, genre_1.genreZhByGit)(options); }); commander_1.program .command("translate") .description("自动化翻译目录下面的中文") .option("-m, --formatModuleName", "设置只翻译哪个模块的内容") .option("-c, --config-file <path>", "配置文件所在路径") .action((opt) => { const options = (0, minimist_1.default)(process.argv.slice(3)); if (options.c) { options.configFile = options.c; } options.formatModuleName = (0, util_1.handleAfterNameRegex)(options.m); (0, genre_1.startTranslateJson)(options); }); commander_1.program .command("exportExcel") .description("导出excel") .option("-c, --config-file <path>", "配置文件所在路径") .action((opt) => { const options = (0, minimist_1.default)(process.argv.slice(3)); if (options.c) { options.configFile = options.c; } (0, genre_1.exportModuleExcel)(options); }); commander_1.program .command("get:lose") .option("-m, --formatModuleName", "获取哪个模块的内容") .option("-lang, --lang <path>", "配置根据根据哪个字段来提取") .description("根据xlsx,提取对应的缺失指定语言的xlsx") .action((opt) => { const options = (0, minimist_1.default)(process.argv.slice(3)); if (options.c) { options.configFile = options.c; } options.formatModuleName = (0, util_1.handleAfterNameRegex)(options.m); (0, genre_1.getLoseJsonData)(options); }); commander_1.program .command("genre:langs") .option("-m, --formatModuleName", "获取哪个模块的内容") .option("--langs, --langs", "配置需要生成哪些语言,module里面的文件夹名,没有会新增,多个','隔开") .description("根据xlsx,提取对应的缺失指定语言的xlsx") .action((opt) => { const options = (0, minimist_1.default)(process.argv.slice(3)); if (options.c) { options.configFile = options.c; } options.formatModuleName = (0, util_1.handleAfterNameRegex)(options.m); (0, genre_1.genreLanguageExcel)(options, options.langs); }); commander_1.program .command("init") .description("在项目里初始化一个配置文件") .action(() => { (0, index_1.execInit)(); }); commander_1.program .command("merge:lang") .option("-m, --formatModuleName", "设置只修改哪个模块的内容") .description("合并pmo给到的文案到项目") .action((opt) => { const options = (0, minimist_1.default)(process.argv.slice(3)); if (options.c) { options.configFile = options.c; } options.formatModuleName = (0, util_1.handleAfterNameRegex)(options.m); (0, genre_1.mergeRealJsonToProject)(options); }); commander_1.program .command("replace:json") .option("--temp, --temp", "格式转成啥样 v代表里面的key 比如:{{v}}") .option("--replacePath, --replacePath", "替换哪个路径的 默认为 配置的modules") .description("替换json文件") .action((opt) => { const options = (0, minimist_1.default)(process.argv.slice(3)); if (options.c) { options.configFile = options.c; } options.formatModuleName = (0, util_1.handleAfterNameRegex)(options.m); (0, genre_1.replaceJsonToProject)(options); }); commander_1.program.addOption(new commander_1.Option("-d, --debug").hideHelp()); commander_1.program.on("option:verbose", function () { process.env.CLI_VERBOSE = commander_1.program.opts().verbose; }); commander_1.program.on("option:debug", function () { process.env.CLI_DEBUG = commander_1.program.opts().debug; }); enhanceErrorMessages(); commander_1.program.parse(process.argv); function enhanceErrorMessages() { commander_1.program.Command.prototype["unknownOption"] = function (...options) { const unknownOption = options[0]; this.outputHelp(); console.log(); console.log(` ` + chalk.red(`Unknown option ${chalk.yellow(unknownOption)}.`)); if (unknownOption.startsWith("--")) { suggestCommands(unknownOption.slice(2, unknownOption.length)); } console.log(); process.exit(1); }; } function suggestCommands(unknownOption) { const availableOptions = ["input", "output", "config-file"]; let suggestion; availableOptions.forEach((name) => { const isBestMatch = (0, leven_1.default)(name, unknownOption) < (0, leven_1.default)(suggestion || "", unknownOption); if ((0, leven_1.default)(name, unknownOption) < 3 && isBestMatch) { suggestion = name; } }); if (suggestion) { console.log(` ` + chalk.red(`Did you mean ${chalk.yellow(`--${suggestion}`)}?`)); } }