efront 3.36.0 → 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/pivot/auth/login.html +3 -3
- package/coms/basic/i18n.js +5 -3
- package/coms/basic/refilm_decode.js +1 -1
- package/coms/compile/translate.js +9 -4
- package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +16 -18
- 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);
|
|
@@ -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 _;
|
|
@@ -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>
|
|
@@ -333,7 +333,7 @@
|
|
|
333
333
|
data = compile$wraphtml(htmltext) + ";\r\n" + scripts.join("\r\n");
|
|
334
334
|
}
|
|
335
335
|
else if (/\.html?$/i.test(e.name)) {
|
|
336
|
-
data = compile$wraphtml(
|
|
336
|
+
data = compile$wraphtml(data);
|
|
337
337
|
}
|
|
338
338
|
var code = compile$scanner2(String(data));
|
|
339
339
|
return compile$translate.getI18nPrefixed(code);
|
|
@@ -519,32 +519,30 @@
|
|
|
519
519
|
for (var e of pretrans) {
|
|
520
520
|
var data = await readText(e);
|
|
521
521
|
data = parseYML(data);
|
|
522
|
-
for (var d of data) {
|
|
523
|
-
|
|
522
|
+
loop: for (var d of data) {
|
|
523
|
+
var liang = 0, fanyi = {};
|
|
524
|
+
for (var { lang: k, id } of supports) {
|
|
525
|
+
if (!d[k]) continue;
|
|
526
|
+
if (preMap[d[k]]) continue loop;
|
|
524
527
|
preMap[d[k]] = d;
|
|
528
|
+
liang++;
|
|
529
|
+
fanyi[id] = d[k];
|
|
525
530
|
}
|
|
531
|
+
result.push({ text: d[supports[0].lang], fanyi, liang });
|
|
526
532
|
}
|
|
527
533
|
}
|
|
534
|
+
var untrans = [];
|
|
528
535
|
Object.keys(textMap).map(k => {
|
|
529
536
|
var texts = textMap[k];
|
|
530
537
|
var count = texts["#count"];
|
|
531
538
|
delete texts["#count"];
|
|
532
539
|
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 });
|
|
540
|
+
k = k.trim();
|
|
541
|
+
if (k in preMap) return;
|
|
542
|
+
untrans.push({ text: k, occurs: texts, files: files.join(',\r\n'), count });
|
|
545
543
|
});
|
|
546
544
|
|
|
547
|
-
已找到的字符串 = result;
|
|
545
|
+
已找到的字符串 = untrans.concat(result);
|
|
548
546
|
runFilter();
|
|
549
547
|
}
|
|
550
548
|
var exportCSV = async function () {
|