@c-sheep/i18n-extract-cli
Version:
这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然,你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react
152 lines (151 loc) • 6.05 kB
JavaScript
;
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}`)}?`));
}
}