@tenado/i18n-cli
Version:
i18n-cli是一个自动国际化脚本,通过执行命令,自动提取代码里面的中文,自动调用百度或谷歌翻译接口,自动将翻译结果以 key-value 形式存入*.json 语言包里
76 lines (71 loc) • 2.38 kB
JavaScript
const fs = require("fs");
const chalk = require("chalk");
const { parseSync, transformFromAstSync } = require("@babel/core");
const PresetEnv = require("@babel/preset-env");
const PluginSyntaxJSX = require("@babel/plugin-syntax-jsx");
const PluginSyntaxProposalOptionalChaining = require("@babel/plugin-proposal-optional-chaining");
const PluginSyntaxClassProperties = require("@babel/plugin-syntax-class-properties");
const PluginSyntaxDecorators = require("@babel/plugin-syntax-decorators");
const PluginSyntaxObjectRestSpread = require("@babel/plugin-syntax-object-rest-spread");
const PluginSyntaxAsyncGenerators = require("@babel/plugin-syntax-async-generators");
const PluginSyntaxDoExpressions = require("@babel/plugin-syntax-do-expressions");
const PluginSyntaxDynamicImport = require("@babel/plugin-syntax-dynamic-import");
const PluginSyntaxFunctionBind = require("@babel/plugin-syntax-function-bind");
const I18nPlugin = require("./i18nPlugin.js");
module.exports = (localData, needTranslate, filePath, sourceCode, options) => {
// 转换成ast
const { babelPresets = [], babelPlugins = [], isVueScript = false } = options;
options.hasTransform = false;
const presets = [...babelPresets, PresetEnv];
const plugins = [
PluginSyntaxJSX,
PluginSyntaxProposalOptionalChaining,
PluginSyntaxClassProperties,
[
PluginSyntaxDecorators,
isVueScript ? { legacy: true } : { decoratorsBeforeExport: true },
],
PluginSyntaxObjectRestSpread,
PluginSyntaxAsyncGenerators,
PluginSyntaxDoExpressions,
PluginSyntaxDynamicImport,
PluginSyntaxFunctionBind,
...babelPlugins,
];
const ast = parseSync(sourceCode, {
sourceType: "module",
ast: true,
configFile: false,
presets: presets,
plugins: plugins,
});
const { code } = transformFromAstSync(ast, sourceCode, {
configFile: false,
plugins: [
[
I18nPlugin,
{
localData,
needTranslate,
options,
},
],
],
});
// 代码填回
if (options.isWritingFile) {
if (options.hasTransform) {
fs.writeFileSync(filePath, code, { encoding: "utf-8" }, (err) => {
if (err) {
console.log(chalk.red(err));
process.exit(2);
}
});
}
} else {
return {
code,
hasTransform: options.hasTransform,
};
}
};