bmc-i18n-extract-cli
Version:
这是一款能够自动将代码里的中文转成i18n国际化标记的命令行工具。当然,你也可以用它实现将中文语言包自动翻译成其他语言。适用于vue2、vue3和react
67 lines • 2.75 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const stateManager_1 = __importDefault(require("./utils/stateManager"));
const log_1 = __importDefault(require("./utils/log"));
const removeLineBreaksInTag_1 = require("./utils/removeLineBreaksInTag");
const escapeQuotes_1 = require("./utils/escapeQuotes");
class Collector {
// eslint-disable-next-line @typescript-eslint/no-empty-function
constructor() {
this.keyMap = {};
// 记录每个文件执行提取的次数
this.countOfAdditions = 0;
// 记录单个文件里提取的中文,键为自定义key,值为原始中文key
this.currentFileKeyMap = {};
this.currentFilePath = '';
}
static getInstance() {
if (!this._instance) {
this._instance = new Collector();
}
return this._instance;
}
setCurrentCollectorPath(path) {
this.currentFilePath = path;
}
getCurrentCollectorPath() {
return this.currentFilePath;
}
add(originalText, customizeKeyFn) {
const formattedText = (0, removeLineBreaksInTag_1.removeLineBreaksInTag)(originalText);
const mapped = stateManager_1.default.getOpenAIKeyMap()[formattedText];
const baseKey = mapped || (0, escapeQuotes_1.escapeQuotes)(formattedText);
let translationKey = customizeKeyFn(baseKey, this.currentFilePath); // key中不能包含回车
// 带有变量的国际化语句,key以 var_ 开头
if (/\{\{[^}]+\}\}/.test(formattedText) && !translationKey.startsWith('var_')) {
translationKey = `var_${translationKey}`;
}
log_1.default.verbose('提取中文:', formattedText);
this.keyMap[translationKey] = formattedText.replace('|', "{'|'}"); // '|' 管道符在vue-i18n表示复数形式,需要特殊处理。见https://vue-i18n.intlify.dev/guide/essentials/pluralization.html
this.countOfAdditions++;
this.currentFileKeyMap[translationKey] = formattedText;
return translationKey;
}
getCurrentFileKeyMap() {
return this.currentFileKeyMap;
}
resetCurrentFileKeyMap() {
this.currentFileKeyMap = {};
}
getKeyMap() {
return this.keyMap;
}
setKeyMap(value) {
this.keyMap = value;
}
resetCountOfAdditions() {
this.countOfAdditions = 0;
}
getCountOfAdditions() {
return this.countOfAdditions;
}
}
exports.default = Collector.getInstance();
//# sourceMappingURL=collector.js.map