efront 3.35.14 → 3.36.1
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/blank/index.html +1 -21
- package/apps/blank/main.js +1 -1
- package/apps/kugou/singer/keywords.less +1 -0
- package/apps/pivot/auth/login.html +3 -3
- package/apps/sciters/main.js +31 -0
- package/coms/basic/#loader.js +3 -4
- package/coms/basic/i18n.js +27 -0
- package/coms/basic/i18n.md +10 -0
- package/coms/basic/parseYML.js +1 -0
- package/coms/basic/refilm_decode.js +2 -1
- package/coms/basic/strings.js +3 -3
- package/coms/compile/Javascript.js +1 -20
- package/coms/compile/common.js +22 -0
- package/coms/compile/translate.js +136 -0
- package/coms/compile/wraphtml.js +3 -0
- package/coms/docs/md5.js +174 -0
- package/coms/frame/route.js +1 -1
- package/coms/zimoli/XMLHttpRequest.js +33 -1
- package/coms/zimoli/alert.js +1 -1
- package/coms/zimoli/appendChild.js +2 -1
- package/coms/zimoli/button.less +1 -0
- package/coms/zimoli/createEvent.js +8 -3
- package/coms/zimoli/cross.js +1 -1
- package/coms/zimoli/cross_test.js +8 -2
- package/coms/zimoli/forceUpdate.js +2 -6
- package/coms/zimoli/list.js +1 -1
- package/coms/zimoli/on.js +4 -2
- package/coms/zimoli/render.js +5 -2
- package/coms/zimoli/transition.js +4 -5
- package/coms/zimoli/tree.js +5 -3
- package/coms/zimoli/zimoli.js +3 -3
- package/docs/index.html +1 -12
- package/docs/main.xht +2 -1
- package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +576 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/readme.md +1 -1
- package/coms/zimoli/i18n.js +0 -192
|
@@ -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
|
package/apps/blank/index.html
CHANGED
|
@@ -8,32 +8,12 @@
|
|
|
8
8
|
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
|
9
9
|
<meta charset="utf-8" />
|
|
10
10
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
11
|
-
<link rel="Shortcut Icon" href="/favicon.ico" type="image/x-icon" />
|
|
11
|
+
<link rel="Shortcut Icon" href="http://efront.cc/favicon.ico" type="image/x-icon" />
|
|
12
12
|
<meta name="viewport" content="initial-scale=1,maximum-scale=1,width=device-width" />
|
|
13
13
|
<title>Efront 空项目</title>
|
|
14
14
|
<script deleteoncompile efrontloader>
|
|
15
15
|
// 若要在开发环境使用内置组件,请保留此script标签中的代码,在编译发布时,这里的代码会自动删除
|
|
16
16
|
</script>
|
|
17
|
-
<style>
|
|
18
|
-
html {
|
|
19
|
-
height: 100%;
|
|
20
|
-
font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
*,
|
|
24
|
-
::before,
|
|
25
|
-
::after {
|
|
26
|
-
box-sizing: border-box;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
body {
|
|
30
|
-
border: none;
|
|
31
|
-
margin: 0;
|
|
32
|
-
padding: 0;
|
|
33
|
-
height: 100%;
|
|
34
|
-
overflow: hidden;
|
|
35
|
-
}
|
|
36
|
-
</style>
|
|
37
17
|
</head>
|
|
38
18
|
|
|
39
19
|
<body scroll=no max-render=1440></body>
|
package/apps/blank/main.js
CHANGED
|
@@ -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>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
var init_console = function () {
|
|
2
|
+
init_console = function () { };
|
|
3
|
+
var pad = document.createElement("console");
|
|
4
|
+
css(pad, 'position:fixed;bottom:0;top:0;right:0;width:300px;overflow:auto;padding:6px 10px;background:#eee;border-top:1px solid #ccc');
|
|
5
|
+
pad.style.zIndex = 999;
|
|
6
|
+
var log = function (type, style) {
|
|
7
|
+
return function () {
|
|
8
|
+
var log = document.createElement(type);
|
|
9
|
+
css(log, style);
|
|
10
|
+
css(log, 'display:block');
|
|
11
|
+
log.innerHTML = Array.apply(null, arguments).join(" ").replace(/</g, '<').replace(/>/g, ">");
|
|
12
|
+
pad.appendChild(log);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
console.log = log("log", 'color:#333');
|
|
16
|
+
console.error = log("error", 'color:#f00');
|
|
17
|
+
console.info = log("info", 'color:#02f');
|
|
18
|
+
console.clear = function () {
|
|
19
|
+
remove(pad.children);
|
|
20
|
+
};
|
|
21
|
+
onclick(pad, function () {
|
|
22
|
+
pad.style.transition="background-color 300ms linear"
|
|
23
|
+
// pad.style.backgroundColor = "#000";
|
|
24
|
+
pad.innerHTML= pad.style.getPropertyValue("transition").length;
|
|
25
|
+
})
|
|
26
|
+
document.body.appendChild(pad)
|
|
27
|
+
};
|
|
28
|
+
function main() {
|
|
29
|
+
init_console();
|
|
30
|
+
return alert_test();
|
|
31
|
+
}
|
package/coms/basic/#loader.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var window = this;
|
|
3
3
|
var isProduction = true;
|
|
4
|
-
// <!-- isProduction = false -->
|
|
5
|
-
|
|
4
|
+
// <!-- isProduction = false; -->
|
|
6
5
|
var {
|
|
7
6
|
parseInt,
|
|
8
7
|
XMLHttpRequest,
|
|
@@ -832,7 +831,7 @@ modules.modules = modules;
|
|
|
832
831
|
var requires_count = 3;
|
|
833
832
|
var hook = function (requires_count) {
|
|
834
833
|
if (requires_count !== 0) return;
|
|
835
|
-
"alert confirm innerWidth innerHeight close prompt".split(/\s+/).map(removeGlobalProperty);
|
|
834
|
+
"alert confirm innerWidth innerHeight close prompt data".split(/\s+/).map(removeGlobalProperty);
|
|
836
835
|
modules.Promise = Promise;
|
|
837
836
|
modules.hook_time = +new Date;
|
|
838
837
|
if (document) {
|
|
@@ -855,7 +854,7 @@ var initIfNotDefined = function (defined, path, onload) {
|
|
|
855
854
|
else hook(--requires_count);
|
|
856
855
|
};
|
|
857
856
|
|
|
858
|
-
if (
|
|
857
|
+
if (localStorage) loadResponseTreeFromStorage();
|
|
859
858
|
initIfNotDefined([].map, "[]map", map => map);
|
|
860
859
|
"use ../basic_/#checkPromise.js";
|
|
861
860
|
initIfNotDefined(Promise, "Promise", promise => Promise = promise);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var languageMap = {};
|
|
3
|
+
var languageIndex = 0;
|
|
4
|
+
function i18n() {
|
|
5
|
+
return arguments[isFinite(this) ? this : languageIndex];
|
|
6
|
+
};
|
|
7
|
+
i18n.lang = function (type) {
|
|
8
|
+
var id = getLanguageIndexFromName(type) || 0;
|
|
9
|
+
return i18n.bind(id);
|
|
10
|
+
};
|
|
11
|
+
var getLanguageIndexFromName = function (language) {
|
|
12
|
+
if (isFinite(language)) return language;
|
|
13
|
+
if (language in languageMap) return languageMap[language];
|
|
14
|
+
language = String(language).toLowerCase();
|
|
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
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return languageIndex;
|
|
23
|
+
};
|
|
24
|
+
i18n.setLanguage = function (language) {
|
|
25
|
+
languageIndex = getLanguageIndexFromName(language);
|
|
26
|
+
};
|
|
27
|
+
if (this.navigator) i18n.setLanguage(this.navigator.language);
|
package/coms/basic/parseYML.js
CHANGED
|
@@ -386,7 +386,8 @@ 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
|
+
console.log(options)
|
|
390
391
|
options = is(options);
|
|
391
392
|
var needUnfold = /^\[|\]$/.test(options);
|
|
392
393
|
options = options.replace(/^\[|\]$/g, '');
|
package/coms/basic/strings.js
CHANGED
|
@@ -9,8 +9,8 @@ var escapeMap = {
|
|
|
9
9
|
var unescapeMap = {};
|
|
10
10
|
for (var k in escapeMap) unescapeMap[escapeMap[k]] = k;
|
|
11
11
|
|
|
12
|
-
function encode(str) {
|
|
13
|
-
return
|
|
12
|
+
function encode(str, q = "\"") {
|
|
13
|
+
return q + str.replace(new RegExp(`[\\\\${q}]`, 'g'), "\\$&").replace(/[\r\n\t\v\f\u0008\u0000-\u001f\u007f-\uffff]/g, a => {
|
|
14
14
|
if (escapeMap.hasOwnProperty(a)) return escapeMap[a];
|
|
15
15
|
var code = a.charCodeAt(0).toString(16);
|
|
16
16
|
switch (code.length) {
|
|
@@ -22,7 +22,7 @@ function encode(str) {
|
|
|
22
22
|
return "\\u0" + code;
|
|
23
23
|
}
|
|
24
24
|
return "\\u" + code;
|
|
25
|
-
}) +
|
|
25
|
+
}) + q;
|
|
26
26
|
}
|
|
27
27
|
function decode(s) {
|
|
28
28
|
var r = /^(['"`])([\s\S]*)\1$/.exec(s);
|
|
@@ -20,6 +20,7 @@ const {
|
|
|
20
20
|
createScoped,
|
|
21
21
|
snapExpressHead,
|
|
22
22
|
relink,
|
|
23
|
+
replace,
|
|
23
24
|
skipAssignment,
|
|
24
25
|
} = require("./common");
|
|
25
26
|
var straps = `if,in,do,as,of
|
|
@@ -288,26 +289,6 @@ var collectProperty = function (o, text) {
|
|
|
288
289
|
q.defined[text] = o;
|
|
289
290
|
};
|
|
290
291
|
|
|
291
|
-
var replace = function (o, ...args) {
|
|
292
|
-
var queue = o.queue;
|
|
293
|
-
var i = queue.indexOf(o);
|
|
294
|
-
if (i >= 0) queue.splice(i, 1, ...args);
|
|
295
|
-
var prev = o.prev;
|
|
296
|
-
var next = o.next;
|
|
297
|
-
if (!args.length) {
|
|
298
|
-
if (prev) prev.next = next;
|
|
299
|
-
else queue.first = next;
|
|
300
|
-
if (next) next.prev = prev;
|
|
301
|
-
else queue.last = prev;
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
if (prev) prev.next = args[0], args[0].prev = prev;
|
|
305
|
-
else queue.first = args[0];
|
|
306
|
-
if (next) next.prev = args[args.length - 1], args[args.length - 1].next = next;
|
|
307
|
-
else queue.last = args[args.length - 1];
|
|
308
|
-
}
|
|
309
|
-
return args.length ? args[0] : next;
|
|
310
|
-
};
|
|
311
292
|
var hasComma = function (c) {
|
|
312
293
|
for (var cc of c) {
|
|
313
294
|
if (cc.type === STAMP && cc.text === ',') return true;
|
package/coms/compile/common.js
CHANGED
|
@@ -1032,6 +1032,27 @@ var createExpressList = function (code) {
|
|
|
1032
1032
|
}
|
|
1033
1033
|
return list;
|
|
1034
1034
|
};
|
|
1035
|
+
var replace = function (o, ...args) {
|
|
1036
|
+
var queue = o.queue;
|
|
1037
|
+
var i = queue.indexOf(o);
|
|
1038
|
+
if (i >= 0) queue.splice(i, 1, ...args);
|
|
1039
|
+
var prev = o.prev;
|
|
1040
|
+
var next = o.next;
|
|
1041
|
+
if (!args.length) {
|
|
1042
|
+
if (prev) prev.next = next;
|
|
1043
|
+
else queue.first = next;
|
|
1044
|
+
if (next) next.prev = prev;
|
|
1045
|
+
else queue.last = prev;
|
|
1046
|
+
}
|
|
1047
|
+
else {
|
|
1048
|
+
if (prev) prev.next = args[0], args[0].prev = prev;
|
|
1049
|
+
else queue.first = args[0];
|
|
1050
|
+
if (next) next.prev = args[args.length - 1], args[args.length - 1].next = next;
|
|
1051
|
+
else queue.last = args[args.length - 1];
|
|
1052
|
+
}
|
|
1053
|
+
return args.length ? args[0] : next;
|
|
1054
|
+
};
|
|
1055
|
+
|
|
1035
1056
|
module.exports = {
|
|
1036
1057
|
/* 1 */COMMENT,
|
|
1037
1058
|
/* 2 */SPACE,
|
|
@@ -1059,5 +1080,6 @@ module.exports = {
|
|
|
1059
1080
|
saveTo,
|
|
1060
1081
|
rename,
|
|
1061
1082
|
relink,
|
|
1083
|
+
replace,
|
|
1062
1084
|
mergeTo
|
|
1063
1085
|
};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
var scanner2 = require("./scanner2");
|
|
2
|
+
var { SCOPED, QUOTED, SCOPED, PIECE, number_reg, replace, createString } = require("./common");
|
|
3
|
+
var strings = require("../basic/strings");
|
|
4
|
+
var program = null;
|
|
5
|
+
var patchTranslate = function (c) {
|
|
6
|
+
if (c.length) {
|
|
7
|
+
c.translate = c.map((o, i) => o.type === PIECE ? strings.decode(`\`${o.text}\``) : `$${i + 1 >> 1}`).join('');
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
if (/^['"`]/.test(c.text) && c.text.length > 2) {
|
|
11
|
+
var text = strings.decode(c.text);
|
|
12
|
+
c.translate = text;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
function getAllText(code, dest = []) {
|
|
18
|
+
for (var cx = 0, dx = code.length; cx < dx; cx++) {
|
|
19
|
+
var c = code[cx];
|
|
20
|
+
if (c.type === QUOTED) {
|
|
21
|
+
if (c.length) {
|
|
22
|
+
getAllText(c, dest);
|
|
23
|
+
if (c.entry !== '`') continue;
|
|
24
|
+
patchTranslate(c);
|
|
25
|
+
dest.push(c);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
if (/^['"`]/.test(c.text) && c.text.length > 2) {
|
|
29
|
+
var text = strings.decode(c.text);
|
|
30
|
+
if (number_reg.test(text) || program.stamp_reg.test(text) || program.space_reg.test(text)) continue;
|
|
31
|
+
patchTranslate(c);
|
|
32
|
+
dest.push(c);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if (c.type === SCOPED) {
|
|
37
|
+
getAllText(c, dest);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return dest;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var [手动, 字段名] = Array(2).fill(0).map((_, i) => i + 1);
|
|
44
|
+
function getI18nPrefixedText(code, dist = []) {
|
|
45
|
+
var { used, envs } = code;
|
|
46
|
+
var get = function (arr, f, t) {
|
|
47
|
+
for (var n of arr) {
|
|
48
|
+
if (!n || n.type !== QUOTED || n.length && n.entry !== '`') continue;
|
|
49
|
+
var c = n;
|
|
50
|
+
c.transtype = t;
|
|
51
|
+
patchTranslate(c);
|
|
52
|
+
f(c);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
if (envs.i18n) get(used.i18n.filter(o => o.text === 'i18n').map(o => {
|
|
56
|
+
var n = o.next;
|
|
57
|
+
if (n && n.type === SCOPED && n.entry !== '{') n = n.next;
|
|
58
|
+
return n;
|
|
59
|
+
}), c => dist.push(c), 手动);
|
|
60
|
+
if (envs.refilm) get(used.refilm.filter(o => o.text === 'refilm').map(o => o.next), c => {
|
|
61
|
+
c.fields = refilm([c.translate]);
|
|
62
|
+
dist.push(c);
|
|
63
|
+
}, 字段名);
|
|
64
|
+
return dist;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function translate([imap, supports], code) {
|
|
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
|
+
});
|
|
73
|
+
var getm = function (tt) {
|
|
74
|
+
tt = tt.trim();
|
|
75
|
+
if (!imap[tt]) {
|
|
76
|
+
console.warn(`<yellow>国际化翻译缺失:</yellow>${tt}`);
|
|
77
|
+
imap[tt] = supports.map(_ => tt);
|
|
78
|
+
}
|
|
79
|
+
return imap[tt].map(m => strings.encode(m || tt, '`'));
|
|
80
|
+
};
|
|
81
|
+
var used = code.used;
|
|
82
|
+
for (var t of texts) {
|
|
83
|
+
if (t.transtype === 手动) {
|
|
84
|
+
var p = t.prev;
|
|
85
|
+
if (p.type === SCOPED) {
|
|
86
|
+
p.prev.text = 'i18n.lang';
|
|
87
|
+
p.entry = "(";
|
|
88
|
+
p.leave = ")";
|
|
89
|
+
}
|
|
90
|
+
var tt = t.translate;
|
|
91
|
+
replace(t, ...scanner2(`(${getm(tt)})`.replace(/[\$#]+(\d+)/g, (_, i) => {
|
|
92
|
+
var a = (i << 1) - 1;
|
|
93
|
+
if (a in t) return `\${${createString(t[a])}}`;
|
|
94
|
+
return _;
|
|
95
|
+
})));
|
|
96
|
+
}
|
|
97
|
+
else if (t.transtype === 字段名) {
|
|
98
|
+
var i = t.queue.indexOf(t.prev);
|
|
99
|
+
var e = t.queue.indexOf(t, i);
|
|
100
|
+
var ui = used.refilm.indexOf(t.prev);
|
|
101
|
+
used.refilm.splice(ui, 1);
|
|
102
|
+
if (!used.i18n) {
|
|
103
|
+
used.i18n = [];
|
|
104
|
+
code.envs.i18n = true;
|
|
105
|
+
}
|
|
106
|
+
t.queue.splice(i, e + 1 - i, ...scanner2("[" + t.fields.map(f => {
|
|
107
|
+
return "{" + Object.keys(f).map(k => {
|
|
108
|
+
var v = f[k];
|
|
109
|
+
if (/[\$#]\d+/.test(v)) v = v.replace(/[\$#]+(\d+)/g, (_, i) => {
|
|
110
|
+
var a = (i << 1) - 1;
|
|
111
|
+
if (a in t) return createString(t[a]);
|
|
112
|
+
return _;
|
|
113
|
+
});
|
|
114
|
+
else if (k === 'name') v = `i18n(${getm(v)})`;
|
|
115
|
+
else v = JSON.stringify(v);
|
|
116
|
+
return JSON.stringify(k) + ":" + v;
|
|
117
|
+
}).join(',') + "}";
|
|
118
|
+
}).join(',') + "]"));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (used.refilm && !used.refilm.length) {
|
|
122
|
+
delete code.envs.refilm;
|
|
123
|
+
delete code.used.refilm;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
translate.getAllText = function (data) {
|
|
127
|
+
var code = scanner2(String(data));
|
|
128
|
+
program = code.program;
|
|
129
|
+
var texts = [];
|
|
130
|
+
getAllText(code, texts);
|
|
131
|
+
return texts;
|
|
132
|
+
};
|
|
133
|
+
translate.手动 = 手动;
|
|
134
|
+
translate.字段名 = 字段名;
|
|
135
|
+
translate.getI18nPrefixed = getI18nPrefixedText;
|
|
136
|
+
module.exports = translate;
|