i18-fe-automator
Version:
前端代码提取中文并替换成$t函数
81 lines (80 loc) • 3.09 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const log_1 = __importDefault(require("./utils/log"));
const removeLineBreaksInTag_1 = require("./utils/removeLineBreaksInTag");
const escapeQuotes_1 = require("./utils/escapeQuotes");
const includeChinese_1 = require("./utils/includeChinese");
class Collector {
// eslint-disable-next-line @typescript-eslint/no-empty-function
constructor() {
this.keyMap = {};
// 记录每个文件执行提取的次数
this.countOfAdditions = 0;
// 记录单个文件里提取的中文,键为自定义key,值为原始中文key
this.currentFileKeyMap = {};
this.currentFilePath = '';
// key为uuid + 英文,value为中文
this.keyValueMap = {};
}
static getInstance() {
if (!this._instance) {
this._instance = new Collector();
}
return this._instance;
}
setCurrentCollectorPath(path) {
this.currentFilePath = path;
}
getCurrentCollectorPath() {
return this.currentFilePath;
}
getKeyValueMap() {
return this.keyValueMap;
}
clearKeyValueMap() {
this.keyValueMap = {};
}
// 第三个参数可以用来判断是否第一次访问,第一次访问是无中文的,第二次访问是有中文的
add(value, customizeKeyFn, oldChinese) {
log_1.default.verbose('collector:add::');
log_1.default.verbose(value);
log_1.default.verbose(oldChinese);
if (!oldChinese) {
const formattedValue = (0, removeLineBreaksInTag_1.removeLineBreaksInTag)(value);
const customizeKey = customizeKeyFn((0, escapeQuotes_1.escapeQuotes)(formattedValue), this.currentFilePath); // key中不能包含回车
log_1.default.verbose('提取中文:', formattedValue);
this.keyMap[customizeKey] = formattedValue.replace('|', "{'|'}"); // '|' 管道符在vue-i18n表示复数形式,需要特殊处理。见https://vue-i18n.intlify.dev/guide/essentials/pluralization.html
// this.countOfAdditions++
this.currentFileKeyMap[customizeKey] = formattedValue;
}
this.countOfAdditions++;
// oldChinese: 纯中文部分
// value: [6位hash]-[desc的英文]
if (oldChinese && value && !(0, includeChinese_1.includeChinese)(value)) {
// this.keyValueMap[customizeKey] = oldChinese
this.keyValueMap[value] = oldChinese;
}
}
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;