efront 3.36.0 → 3.36.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/#/345/233/275/351/231/205/345/214/226.yml +137 -0
- package/apps/pivot/auth/login.html +3 -3
- package/coms/basic/i18n.js +5 -3
- package/coms/basic/refilm_decode.js +1 -1
- package/coms/compile/common.js +2 -0
- package/coms/compile/scanner2_test.js +9 -1
- package/coms/compile/translate.js +9 -4
- package/coms/typescript-helpers/__asyncDelegator.js +12 -0
- package/coms/typescript-helpers/__asyncValues.js +14 -0
- package/coms/typescript-helpers/__esDecorate.js +34 -0
- package/coms/typescript-helpers/__propKey.js +10 -0
- package/coms/typescript-helpers/__runInitializers.js +14 -0
- package/coms/typescript-helpers/__setFunctionName.js +11 -0
- package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +23 -24
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/coms/compile/autoi18n.js +0 -17
- package/coms/compile/autoi18n_test.js +0 -6
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
- zh-CN: 服务器异常$1
|
|
2
|
+
en: Server Exception $1
|
|
3
|
+
|
|
4
|
+
- zh-CN: $1之前需要使用$2命令在$3上设置$4
|
|
5
|
+
en: Before $1, you need to use the $2 command to set $4 on $3
|
|
6
|
+
|
|
7
|
+
- zh-CN: 请输入服务器密码
|
|
8
|
+
en: Please enter the server password
|
|
9
|
+
|
|
10
|
+
- zh-CN: 登录
|
|
11
|
+
en: Sign in
|
|
12
|
+
|
|
13
|
+
- zh-CN: 文本超长,无法翻译
|
|
14
|
+
en: The text is too long to be translated
|
|
15
|
+
|
|
16
|
+
- zh-CN: 没有权限!
|
|
17
|
+
en: No permission!
|
|
18
|
+
|
|
19
|
+
- zh-CN: 未找到指定的资源
|
|
20
|
+
en: The specified resource was not found
|
|
21
|
+
|
|
22
|
+
- zh-CN: 原始名称
|
|
23
|
+
en: Original Name
|
|
24
|
+
|
|
25
|
+
- zh-CN: 输入新名称
|
|
26
|
+
en: Enter a new name
|
|
27
|
+
|
|
28
|
+
- zh-CN: 请过一段时间再试
|
|
29
|
+
en: Please try again later
|
|
30
|
+
|
|
31
|
+
- zh-CN: 服务器取消了您的请求
|
|
32
|
+
en: The server canceled your request
|
|
33
|
+
|
|
34
|
+
- zh-CN: 文件
|
|
35
|
+
en: file
|
|
36
|
+
|
|
37
|
+
- zh-CN: 键名
|
|
38
|
+
en: Key Name
|
|
39
|
+
|
|
40
|
+
- zh-CN: 显示名
|
|
41
|
+
en: Display Name
|
|
42
|
+
|
|
43
|
+
- zh-CN: 密钥
|
|
44
|
+
en: secret key
|
|
45
|
+
|
|
46
|
+
- zh-CN: 备注
|
|
47
|
+
en: remarks
|
|
48
|
+
|
|
49
|
+
- zh-CN: 任务ID
|
|
50
|
+
en: Task ID
|
|
51
|
+
|
|
52
|
+
- zh-CN: 任务名
|
|
53
|
+
en: Task Name
|
|
54
|
+
|
|
55
|
+
- zh-CN: 是否启用
|
|
56
|
+
en: Enabled or not
|
|
57
|
+
|
|
58
|
+
- zh-CN: 任务代码
|
|
59
|
+
en: Task Code
|
|
60
|
+
|
|
61
|
+
- zh-CN: 标识
|
|
62
|
+
en: identification
|
|
63
|
+
|
|
64
|
+
- zh-CN: 应用名
|
|
65
|
+
en: App Name
|
|
66
|
+
|
|
67
|
+
- zh-CN: 路径
|
|
68
|
+
en: route
|
|
69
|
+
|
|
70
|
+
- zh-CN: 代理路径
|
|
71
|
+
en: Proxy Path
|
|
72
|
+
|
|
73
|
+
- zh-CN: 二维码
|
|
74
|
+
en: QR code
|
|
75
|
+
|
|
76
|
+
- zh-CN: 真实路径
|
|
77
|
+
en: Real path
|
|
78
|
+
|
|
79
|
+
- zh-CN: 动作
|
|
80
|
+
en: action
|
|
81
|
+
|
|
82
|
+
- zh-CN: 状态
|
|
83
|
+
en: state
|
|
84
|
+
|
|
85
|
+
- zh-CN: 地址
|
|
86
|
+
en: address
|
|
87
|
+
|
|
88
|
+
- zh-CN: 地理位置
|
|
89
|
+
en: geographical position
|
|
90
|
+
|
|
91
|
+
- zh-CN: 启动时间
|
|
92
|
+
en: Start time
|
|
93
|
+
|
|
94
|
+
- zh-CN: 端口
|
|
95
|
+
en: port
|
|
96
|
+
|
|
97
|
+
- zh-CN: 版本
|
|
98
|
+
en: edition
|
|
99
|
+
|
|
100
|
+
- zh-CN: 进程
|
|
101
|
+
en: process
|
|
102
|
+
|
|
103
|
+
- zh-CN: 访问量
|
|
104
|
+
en: Visits
|
|
105
|
+
|
|
106
|
+
- zh-CN: 房间名
|
|
107
|
+
en: Room name
|
|
108
|
+
|
|
109
|
+
- zh-CN: 数值
|
|
110
|
+
en: numerical value
|
|
111
|
+
|
|
112
|
+
- zh-CN: 文本
|
|
113
|
+
en: text
|
|
114
|
+
|
|
115
|
+
- zh-CN: 字典ID
|
|
116
|
+
en: Dictionary ID
|
|
117
|
+
|
|
118
|
+
- zh-CN: 字典名
|
|
119
|
+
en: Dictionary name
|
|
120
|
+
|
|
121
|
+
- zh-CN: 字典数据
|
|
122
|
+
en: Dictionary data
|
|
123
|
+
|
|
124
|
+
- zh-CN: 名称
|
|
125
|
+
en: name
|
|
126
|
+
|
|
127
|
+
- zh-CN: 服务器
|
|
128
|
+
en: The server
|
|
129
|
+
|
|
130
|
+
- zh-CN: 服务器地址
|
|
131
|
+
en: server address
|
|
132
|
+
|
|
133
|
+
- zh-CN: 密码
|
|
134
|
+
en: password
|
|
135
|
+
|
|
136
|
+
- zh-CN: 这是一个空白项目
|
|
137
|
+
en: This is a blank project
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<div head>
|
|
2
|
-
|
|
2
|
+
${i18n`请输入服务器密码`}
|
|
3
3
|
</div>
|
|
4
4
|
<div body>
|
|
5
5
|
<field ng-repeat="f in fields" ng-src="[f,data]"></field>
|
|
6
6
|
</div>
|
|
7
7
|
<div foot>
|
|
8
|
-
<button pending.="pending" type="submit"
|
|
8
|
+
<button pending.="pending" type="submit">${i18n`登录`}</button>
|
|
9
9
|
</div>
|
|
10
10
|
<div message>
|
|
11
|
-
|
|
11
|
+
${i18n`${i18n`登录`}之前需要使用${` <b>efront password</b> `}命令在${i18n`服务器`}上设置${i18n`密码`}`}
|
|
12
12
|
</div>
|
package/coms/basic/i18n.js
CHANGED
|
@@ -12,9 +12,11 @@ var getLanguageIndexFromName = function (language) {
|
|
|
12
12
|
if (isFinite(language)) return language;
|
|
13
13
|
if (language in languageMap) return languageMap[language];
|
|
14
14
|
language = String(language).toLowerCase();
|
|
15
|
-
for (var
|
|
16
|
-
for (var
|
|
17
|
-
|
|
15
|
+
for (var l of language.split(",").slice(0, 12)) {
|
|
16
|
+
for (var k in languageMap) {
|
|
17
|
+
for (var kk of k.toLowerCase().split("-")) {
|
|
18
|
+
if (l.indexOf(kk) >= 0) return languageMap[k];
|
|
19
|
+
}
|
|
18
20
|
}
|
|
19
21
|
}
|
|
20
22
|
return languageIndex;
|
|
@@ -386,7 +386,7 @@ function parse(piece) {
|
|
|
386
386
|
} else if (/^[\/]/.test(type)) {
|
|
387
387
|
type = type.slice(1);
|
|
388
388
|
}
|
|
389
|
-
if (typeof options === "string" &&
|
|
389
|
+
if (typeof options === "string" && !/^[\$#]+\d+$/.test(options)) {
|
|
390
390
|
console.log(options)
|
|
391
391
|
options = is(options);
|
|
392
392
|
var needUnfold = /^\[|\]$/.test(options);
|
package/coms/compile/common.js
CHANGED
|
@@ -419,6 +419,7 @@ var createScoped = function (parsed, wash) {
|
|
|
419
419
|
if (o.next.type === STAMP) {
|
|
420
420
|
isAster = true;
|
|
421
421
|
o = o.next;
|
|
422
|
+
o.isExpress = o.prev.isExpress;
|
|
422
423
|
}
|
|
423
424
|
case "catch":
|
|
424
425
|
if (s === 'catch') isCatch = true;
|
|
@@ -560,6 +561,7 @@ var createScoped = function (parsed, wash) {
|
|
|
560
561
|
scoped.body = o;
|
|
561
562
|
o.isExpress = isExpress;
|
|
562
563
|
run(o.first);
|
|
564
|
+
if (isArrow && id >= 0 && o) o = o.next;
|
|
563
565
|
if (wash && isFunction) {
|
|
564
566
|
var e = o.next;
|
|
565
567
|
if (e && e.type === EXPRESS && /^[\.\[]/.test(e.text) || e && e.type === SCOPED && e.entry === "[") {
|
|
@@ -76,6 +76,13 @@ function testAssign() {
|
|
|
76
76
|
a()`);
|
|
77
77
|
console.log(m.press().toString());
|
|
78
78
|
}
|
|
79
|
+
function testArrow() {
|
|
80
|
+
var m = scanner(`(a)=>(b)=>{c,b};`);
|
|
81
|
+
console.log("1", m.envs);
|
|
82
|
+
var m = scanner(`(a,b)=>{c,b};`);
|
|
83
|
+
console.log("2", m.envs);
|
|
84
|
+
}
|
|
85
|
+
|
|
79
86
|
function testFormat() {
|
|
80
87
|
var t = fs.readFileSync(path.join(__dirname, "../efront/memery.js")).toString();
|
|
81
88
|
assert(scanner(t).toString(), t);
|
|
@@ -111,6 +118,7 @@ Program.debug = true;
|
|
|
111
118
|
// testJsx2();
|
|
112
119
|
// testJsx3();
|
|
113
120
|
// testJsxOnlyHtml();
|
|
114
|
-
testSpaceLess();
|
|
121
|
+
// testSpaceLess();
|
|
122
|
+
testArrow();
|
|
115
123
|
// var typescript = require("../typescript/index");
|
|
116
124
|
// typescript.transpile(data.toString(), { noEmitHelpers: true });
|
|
@@ -4,7 +4,7 @@ var strings = require("../basic/strings");
|
|
|
4
4
|
var program = null;
|
|
5
5
|
var patchTranslate = function (c) {
|
|
6
6
|
if (c.length) {
|
|
7
|
-
c.translate = c.map((o, i) => o.type === PIECE ? strings.decode(`\`${o.text}\``) :
|
|
7
|
+
c.translate = c.map((o, i) => o.type === PIECE ? strings.decode(`\`${o.text}\``) : `$${i + 1 >> 1}`).join('');
|
|
8
8
|
}
|
|
9
9
|
else {
|
|
10
10
|
if (/^['"`]/.test(c.text) && c.text.length > 2) {
|
|
@@ -66,7 +66,12 @@ function getI18nPrefixedText(code, dist = []) {
|
|
|
66
66
|
|
|
67
67
|
function translate([imap, supports], code) {
|
|
68
68
|
var texts = getI18nPrefixedText(code);
|
|
69
|
+
texts.sort((a, b) => {
|
|
70
|
+
if (a.start > b.start && a.end < b.end) return -1;
|
|
71
|
+
return 0;
|
|
72
|
+
});
|
|
69
73
|
var getm = function (tt) {
|
|
74
|
+
tt = tt.trim();
|
|
70
75
|
if (!imap[tt]) {
|
|
71
76
|
console.warn(`<yellow>国际化翻译缺失:</yellow>${tt}`);
|
|
72
77
|
imap[tt] = supports.map(_ => tt);
|
|
@@ -83,9 +88,9 @@ function translate([imap, supports], code) {
|
|
|
83
88
|
p.leave = ")";
|
|
84
89
|
}
|
|
85
90
|
var tt = t.translate;
|
|
86
|
-
replace(t, ...scanner2(`(${getm(tt)})`.replace(
|
|
91
|
+
replace(t, ...scanner2(`(${getm(tt)})`.replace(/[\$#]+(\d+)/g, (_, i) => {
|
|
87
92
|
var a = (i << 1) - 1;
|
|
88
|
-
if (a in t) return createString(t[a])
|
|
93
|
+
if (a in t) return `\${${createString(t[a])}}`;
|
|
89
94
|
return _;
|
|
90
95
|
})));
|
|
91
96
|
}
|
|
@@ -101,7 +106,7 @@ function translate([imap, supports], code) {
|
|
|
101
106
|
t.queue.splice(i, e + 1 - i, ...scanner2("[" + t.fields.map(f => {
|
|
102
107
|
return "{" + Object.keys(f).map(k => {
|
|
103
108
|
var v = f[k];
|
|
104
|
-
if (
|
|
109
|
+
if (/[\$#]\d+/.test(v)) v = v.replace(/[\$#]+(\d+)/g, (_, i) => {
|
|
105
110
|
var a = (i << 1) - 1;
|
|
106
111
|
if (a in t) return createString(t[a]);
|
|
107
112
|
return _;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* typescript:asyncDelegator
|
|
3
|
+
* 这个文件由工具生成,请不要手动修改
|
|
4
|
+
*
|
|
5
|
+
* Efront Authors
|
|
6
|
+
* 2023-03-31T13:49:30.678Z
|
|
7
|
+
*/
|
|
8
|
+
var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {
|
|
9
|
+
var i, p;
|
|
10
|
+
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
|
|
11
|
+
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
|
|
12
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* typescript:asyncValues
|
|
3
|
+
* 这个文件由工具生成,请不要手动修改
|
|
4
|
+
*
|
|
5
|
+
* Efront Authors
|
|
6
|
+
* 2023-03-31T13:49:30.678Z
|
|
7
|
+
*/
|
|
8
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
9
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
10
|
+
var m = o[Symbol.asyncIterator], i;
|
|
11
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
12
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
13
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
14
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* typescript:esDecorate
|
|
3
|
+
* 这个文件由工具生成,请不要手动修改
|
|
4
|
+
*
|
|
5
|
+
* Efront Authors
|
|
6
|
+
* 2023-03-31T13:49:30.678Z
|
|
7
|
+
*/
|
|
8
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
9
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
10
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
11
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
12
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
13
|
+
var _, done = false;
|
|
14
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
15
|
+
var context = {};
|
|
16
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
17
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
18
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
19
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
20
|
+
if (kind === "accessor") {
|
|
21
|
+
if (result === void 0) continue;
|
|
22
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
23
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
24
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
25
|
+
if (_ = accept(result.init)) initializers.push(_);
|
|
26
|
+
}
|
|
27
|
+
else if (_ = accept(result)) {
|
|
28
|
+
if (kind === "field") initializers.push(_);
|
|
29
|
+
else descriptor[key] = _;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
33
|
+
done = true;
|
|
34
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* typescript:runInitializers
|
|
3
|
+
* 这个文件由工具生成,请不要手动修改
|
|
4
|
+
*
|
|
5
|
+
* Efront Authors
|
|
6
|
+
* 2023-03-31T13:49:30.678Z
|
|
7
|
+
*/
|
|
8
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
9
|
+
var useValue = arguments.length > 2;
|
|
10
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
11
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
12
|
+
}
|
|
13
|
+
return useValue ? value : void 0;
|
|
14
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* typescript:setFunctionName
|
|
3
|
+
* 这个文件由工具生成,请不要手动修改
|
|
4
|
+
*
|
|
5
|
+
* Efront Authors
|
|
6
|
+
* 2023-03-31T13:49:30.678Z
|
|
7
|
+
*/
|
|
8
|
+
var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
|
|
9
|
+
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
|
|
10
|
+
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
|
|
11
|
+
};
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
background: #069 !important;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
span,
|
|
38
|
-
a {
|
|
37
|
+
p span,
|
|
38
|
+
p a {
|
|
39
39
|
vertical-align: middle;
|
|
40
40
|
}
|
|
41
41
|
</style>
|
|
@@ -325,22 +325,23 @@
|
|
|
325
325
|
{ name: "斯洛文尼亚语", id: "slo", lang: 'sl' },
|
|
326
326
|
];
|
|
327
327
|
supports.forEach(s => s.key = s.id);
|
|
328
|
-
var getAllText = function (data,
|
|
328
|
+
var getAllText = function (data, f) {
|
|
329
329
|
try {
|
|
330
|
-
if (/^\s*<!doctype\s/i.test(data)) return [];
|
|
331
|
-
if (/\.(xht|vue)$/i.test(
|
|
330
|
+
if (/^\s*(\<\!--[\s\S]*?--\>\s*)*<!doctype\s/i.test(data)) return [];
|
|
331
|
+
if (/\.(xht|vue)$/i.test(f.name)) {
|
|
332
332
|
var { scripts, outerHTML: htmltext, attributes = '', tagName, styles } = compile$scanner2(data, 'html').scoped;
|
|
333
333
|
data = compile$wraphtml(htmltext) + ";\r\n" + scripts.join("\r\n");
|
|
334
334
|
}
|
|
335
|
-
else if (/\.html?$/i.test(
|
|
336
|
-
data = compile$wraphtml(
|
|
335
|
+
else if (/\.html?$/i.test(f.name)) {
|
|
336
|
+
data = compile$wraphtml(data);
|
|
337
337
|
}
|
|
338
338
|
var code = compile$scanner2(String(data));
|
|
339
339
|
return compile$translate.getI18nPrefixed(code);
|
|
340
340
|
}
|
|
341
341
|
catch (e) {
|
|
342
|
-
alert("
|
|
343
|
-
|
|
342
|
+
alert("提取文本时存在异常", "error");
|
|
343
|
+
console.error(e, f.path);
|
|
344
|
+
return [];
|
|
344
345
|
}
|
|
345
346
|
};
|
|
346
347
|
var 已找到的字符串 = [];
|
|
@@ -519,32 +520,30 @@
|
|
|
519
520
|
for (var e of pretrans) {
|
|
520
521
|
var data = await readText(e);
|
|
521
522
|
data = parseYML(data);
|
|
522
|
-
for (var d of data) {
|
|
523
|
-
|
|
523
|
+
loop: for (var d of data) {
|
|
524
|
+
var liang = 0, fanyi = {};
|
|
525
|
+
for (var { lang: k, id } of supports) {
|
|
526
|
+
if (!d[k]) continue;
|
|
527
|
+
if (preMap[d[k]]) continue loop;
|
|
524
528
|
preMap[d[k]] = d;
|
|
529
|
+
liang++;
|
|
530
|
+
fanyi[id] = d[k];
|
|
525
531
|
}
|
|
532
|
+
result.push({ text: d[supports[0].lang], fanyi, liang });
|
|
526
533
|
}
|
|
527
534
|
}
|
|
535
|
+
var untrans = [];
|
|
528
536
|
Object.keys(textMap).map(k => {
|
|
529
537
|
var texts = textMap[k];
|
|
530
538
|
var count = texts["#count"];
|
|
531
539
|
delete texts["#count"];
|
|
532
540
|
var files = Object.keys(texts);
|
|
533
|
-
|
|
534
|
-
if (k in preMap)
|
|
535
|
-
|
|
536
|
-
detailScope.supports.forEach(s => {
|
|
537
|
-
var v = preMap[k][s.lang]
|
|
538
|
-
if (v) {
|
|
539
|
-
fanyi[s.id] = v;
|
|
540
|
-
liang++;
|
|
541
|
-
}
|
|
542
|
-
})
|
|
543
|
-
}
|
|
544
|
-
result.push({ text: k, occurs: texts, files: files.join(',\r\n'), count, fanyi, liang });
|
|
541
|
+
k = k.trim();
|
|
542
|
+
if (k in preMap) return;
|
|
543
|
+
untrans.push({ text: k, occurs: texts, files: files.join(',\r\n'), count });
|
|
545
544
|
});
|
|
546
545
|
|
|
547
|
-
已找到的字符串 = result;
|
|
546
|
+
已找到的字符串 = untrans.concat(result);
|
|
548
547
|
runFilter();
|
|
549
548
|
}
|
|
550
549
|
var exportCSV = async function () {
|