efront 4.0.13 → 4.0.16
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 +574 -1
- package/apps/drequest/index.html +10 -0
- package/coms/basic/#loader.js +2 -1
- package/coms/basic/YAML.js +3 -3
- package/coms/basic/parseYML.js +4 -1
- package/coms/basic/parseYML_test.js +3 -1
- package/coms/basic/strings.js +22 -15
- package/coms/basic_/readme-en.md +112 -0
- package/coms/basic_/readme.md +1 -1
- package/coms/compile/common.js +1 -0
- package/coms/compile/downLevel.js +8 -4
- package/coms/compile/translate.js +3 -3
- package/coms/compile/unstruct.js +44 -26
- package/coms/compile/unstruct_test.js +3 -1
- package/coms/docs/helps.js +69 -65
- package/coms/zimoli/data.js +10 -10
- package/coms/zimoli/on.js +3 -4
- package/coms/zimoli/table.html +4 -4
- package/docs/compare-en.md +327 -0
- package/docs/components.jsp +1 -1
- package/docs/main.xht +18 -18
- package/docs/version-desc.md +11 -0
- package/docs/welcome.jsp +1 -1
- package/docs//345/221/275/344/273/244.xht +12 -6
- package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +54 -53
- package/docs//345/267/245/345/205/267//345/255/227/347/254/246/351/233/206/346/243/200/346/237/245.xht +7 -7
- package/docs//347/273/204/344/273/266.xht +12 -12
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/readme-en.md +168 -0
- package/readme.md +16 -7
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
vertical-align: middle;
|
|
40
40
|
}
|
|
41
41
|
</style>
|
|
42
|
-
<p><span
|
|
43
|
-
<p -if="!window.showDirectoryPicker" error
|
|
42
|
+
<p><span>${i18n`翻译结果仅做为参考,未必完美替换,语法参考:`}<a @click="zimoli.go('/组件/basic/i18n.js',{mark:true})">i18n.js</a></span></p>
|
|
43
|
+
<p -if="!window.showDirectoryPicker" error>${i18n`国际化工具仅在浏览器支持 showDirectoryPicker 时可用`}</p>
|
|
44
44
|
<div -else>
|
|
45
|
-
<button @click="chooseFolder"
|
|
46
|
-
<button @click="editCode()"
|
|
47
|
-
<button style="float:right" -if="tableData.length" @click="exportCSV"
|
|
45
|
+
<button @click="chooseFolder">${i18n`选择代码文件夹`}</button>
|
|
46
|
+
<button @click="editCode()">${i18n`修改国际化参数`}</button>
|
|
47
|
+
<button style="float:right" -if="tableData.length" @click="exportCSV">${i18n`导出到文件`}</button>
|
|
48
48
|
<hr />
|
|
49
49
|
<form>
|
|
50
50
|
<checkbox -src="filters" @change="runFilter"></checkbox>
|
|
@@ -73,10 +73,10 @@
|
|
|
73
73
|
var editCode = function () {
|
|
74
74
|
supports.forEach(s => s.checked = false);
|
|
75
75
|
detailScope.supports.forEach(s => s.checked = true);
|
|
76
|
-
var editor = frame$edit(
|
|
76
|
+
var editor = frame$edit(i18n`国际化参数`, {
|
|
77
77
|
submit(form) {
|
|
78
78
|
if (form.appid && !form.sign || form.sign && !form.appid) {
|
|
79
|
-
return
|
|
79
|
+
return i18n`appid和密钥不能只有一个!`;
|
|
80
80
|
}
|
|
81
81
|
detailScope.supports = supports.filter(s => s.checked);
|
|
82
82
|
var smap = {};
|
|
@@ -87,14 +87,14 @@
|
|
|
87
87
|
}
|
|
88
88
|
}, {
|
|
89
89
|
fields: [
|
|
90
|
-
{ name:
|
|
91
|
-
{ name:
|
|
92
|
-
{ name:
|
|
93
|
-
{ name:
|
|
94
|
-
{ name:
|
|
90
|
+
{ name: i18n`提示`, readonly: true, key: 'apply_info', type: 'text' },
|
|
91
|
+
{ name: i18n`appid及密钥申请地址`, readonly: true, key: 'apply_url', type: 'anchor' },
|
|
92
|
+
{ name: i18n`appid`, key: 'appid', type: 'input' },
|
|
93
|
+
{ name: i18n`密钥`, key: 'sign', type: "input" },
|
|
94
|
+
{ name: i18n`目标语言`, type: 'checkbox', options: supports }
|
|
95
95
|
], data: {
|
|
96
96
|
apply_url: 'https://fanyi-api.baidu.com/',
|
|
97
|
-
apply_info:
|
|
97
|
+
apply_info: i18n`efront目前使用的翻译接口免费额度受限,如果遇到翻译失败的情况,您可以自己申请一个appid和密钥配置后使用`,
|
|
98
98
|
appid: baiduFanyiConfig.appid,
|
|
99
99
|
sign: baiduFanyiConfig.sign
|
|
100
100
|
}
|
|
@@ -295,41 +295,41 @@
|
|
|
295
295
|
// 祖鲁语: ["zu", "Zulu"]
|
|
296
296
|
// };
|
|
297
297
|
var supports = [
|
|
298
|
-
{ name:
|
|
299
|
-
{ name:
|
|
300
|
-
{ name:
|
|
301
|
-
// { name:
|
|
302
|
-
// { name:
|
|
303
|
-
{ name:
|
|
304
|
-
{ name:
|
|
305
|
-
{ name:
|
|
306
|
-
{ name:
|
|
307
|
-
{ name:
|
|
308
|
-
{ name:
|
|
309
|
-
{ name:
|
|
310
|
-
{ name:
|
|
311
|
-
{ name:
|
|
312
|
-
{ name:
|
|
313
|
-
{ name:
|
|
314
|
-
{ name:
|
|
315
|
-
{ name:
|
|
316
|
-
// { name:
|
|
317
|
-
{ name:
|
|
318
|
-
{ name:
|
|
319
|
-
{ name:
|
|
320
|
-
{ name:
|
|
321
|
-
// { name:
|
|
322
|
-
{ name:
|
|
323
|
-
{ name:
|
|
324
|
-
{ name:
|
|
325
|
-
{ name:
|
|
298
|
+
{ name: i18n`中文`, id: "zh", lang: "zh-CN" },
|
|
299
|
+
{ name: i18n`繁体中文`, id: "cht", lang: "zh-TW" },
|
|
300
|
+
{ name: i18n`英语`, id: "en", lang: "en" },
|
|
301
|
+
// { name: i18n`文言文`, id: "wyw" },
|
|
302
|
+
// { name: i18n`粤语`, id: "yue" },
|
|
303
|
+
{ name: i18n`日语`, id: "jp", lang: "ja" },
|
|
304
|
+
{ name: i18n`法语`, id: "fra", lang: 'fr' },
|
|
305
|
+
{ name: i18n`俄语`, id: "ru", lang: 'ru' },
|
|
306
|
+
{ name: i18n`韩语`, id: "kor", lang: "ko" },
|
|
307
|
+
{ name: i18n`德语`, id: "de", lang: "de" },
|
|
308
|
+
{ name: i18n`意大利语`, id: "it", lang: 'it' },
|
|
309
|
+
{ name: i18n`泰语`, id: "th", lang: "th" },
|
|
310
|
+
{ name: i18n`越南语`, id: "vie", lang: 'vi' },
|
|
311
|
+
{ name: i18n`阿拉伯语`, id: "ara", lang: "ar" },
|
|
312
|
+
{ name: i18n`荷兰语`, id: "nl", lang: "nl" },
|
|
313
|
+
{ name: i18n`芬兰语`, id: "fin", lang: "fi" },
|
|
314
|
+
{ name: i18n`希腊语`, id: "el", lang: "el" },
|
|
315
|
+
{ name: i18n`西班牙语`, id: "spa", lang: "es" },
|
|
316
|
+
// { name: i18n`葡萄牙语`, id: "pt", lang: /pt\-(BR|PT)/ },
|
|
317
|
+
{ name: i18n`匈牙利语`, id: "hu", lang: 'hu' },
|
|
318
|
+
{ name: i18n`瑞典语`, id: "swe", lang: 'sv' },
|
|
319
|
+
{ name: i18n`丹麦语`, id: "dan", lang: 'da' },
|
|
320
|
+
{ name: i18n`捷克语`, id: "cs", lang: 'cs' },
|
|
321
|
+
// { name: i18n`波兰语`, id: "pl" },
|
|
322
|
+
{ name: i18n`保加利亚语`, id: "bul", lang: "bg" },
|
|
323
|
+
{ name: i18n`爱沙尼亚语`, id: "est", lang: 'et' },
|
|
324
|
+
{ name: i18n`罗马尼亚语`, id: "rom", lang: 'ro' },
|
|
325
|
+
{ name: i18n`斯洛文尼亚语`, id: "slo", lang: 'sl' },
|
|
326
326
|
];
|
|
327
327
|
supports.forEach(s => s.key = s.id);
|
|
328
328
|
var getAllText = function (data, f) {
|
|
329
329
|
try {
|
|
330
330
|
if (/^\s*(\<\!--[\s\S]*?--\>\s*)*<!doctype\s/i.test(data)) return [];
|
|
331
331
|
if (/\.(xht|vue)$/i.test(f.name)) {
|
|
332
|
-
var { scripts, outerHTML: htmltext, attributes = '', tagName, styles } = compile$scanner2(data, 'html').scoped;
|
|
332
|
+
var { scripts, innerHTML, outerHTML: htmltext = innerHTML, attributes = '', tagName, styles } = compile$scanner2(data, 'html').scoped;
|
|
333
333
|
data = compile$wraphtml(htmltext) + ";\r\n" + scripts.join("\r\n");
|
|
334
334
|
}
|
|
335
335
|
else if (/\.html?$/i.test(f.name)) {
|
|
@@ -346,20 +346,20 @@
|
|
|
346
346
|
};
|
|
347
347
|
var 已找到的字符串 = [];
|
|
348
348
|
var fields = [
|
|
349
|
-
{ name:
|
|
350
|
-
{ name:
|
|
351
|
-
{ name:
|
|
352
|
-
{ name:
|
|
349
|
+
{ name: i18n`字符串`, key: "text", width: 280 },
|
|
350
|
+
{ name: i18n`已翻译`, key: "liang", width: 80 },
|
|
351
|
+
{ name: i18n`出现文件`, key: "files", width: 200 },
|
|
352
|
+
{ name: i18n`出现次数`, key: "count", width: 80 },
|
|
353
353
|
];
|
|
354
354
|
var filters = {
|
|
355
355
|
key: "filter",
|
|
356
356
|
options: [
|
|
357
357
|
{
|
|
358
|
-
name:
|
|
358
|
+
name: i18n`只看中文`, key: "cnonly", get checked() {
|
|
359
359
|
return true;
|
|
360
360
|
},
|
|
361
361
|
set checked(v) {
|
|
362
|
-
alert(
|
|
362
|
+
if (v === false) alert(i18n`暂不支持翻译其他语言`, 'warn');
|
|
363
363
|
},
|
|
364
364
|
test(a) {
|
|
365
365
|
return /[\u3400-\ufad9\u{20000}-\u{2a6d6}\u{2fa1d}]/u.test(a.text);
|
|
@@ -411,7 +411,7 @@
|
|
|
411
411
|
if (!detailWindow) {
|
|
412
412
|
detailWindow = view();
|
|
413
413
|
on('submit')(detailWindow, e => e.preventDefault());
|
|
414
|
-
detailWindow.innerHTML = `<div head
|
|
414
|
+
detailWindow.innerHTML = `<div head>${i18n`翻译: `}"<span -bind="item?.text"></span>"<drop @click="close()"></drop></div><lattice itemwidth=260 -src="s in supports" body><field style="display:inline-block;padding:0 0 6px 12px;" ><label style="padding-left:0"><span -bind="s.name"></span>(<span -bind="s.lang"></span>)</label><textarea -model="fanyi[s.id]" class='body' style="resize:none"></textarea></field></lattice><div foot><a style="float:left" @click="baidu">${i18n`一键百度`}</a></div>`;
|
|
415
415
|
drag.on(detailWindow, detailWindow.firstElementChild);
|
|
416
416
|
resize.on(detailWindow);
|
|
417
417
|
css(detailWindow, `position:absolute;left:0;top:0;bottom:0;width:260px;`);
|
|
@@ -502,7 +502,7 @@
|
|
|
502
502
|
tmap[e.path].push(t);
|
|
503
503
|
}
|
|
504
504
|
for (var e of result) {
|
|
505
|
-
msg.setText(
|
|
505
|
+
msg.setText(i18n`正在提取 ` + e.path);
|
|
506
506
|
var data = await readText(e);
|
|
507
507
|
var texts = getAllText(data, e);
|
|
508
508
|
for (var t of texts) {
|
|
@@ -514,7 +514,7 @@
|
|
|
514
514
|
}
|
|
515
515
|
}
|
|
516
516
|
}
|
|
517
|
-
msg.setText(
|
|
517
|
+
msg.setText(i18n`提取完成`);
|
|
518
518
|
var result = [];
|
|
519
519
|
var preMap = Object.create(null);
|
|
520
520
|
for (var e of pretrans) {
|
|
@@ -525,6 +525,7 @@
|
|
|
525
525
|
for (var { lang: k, id } of supports) {
|
|
526
526
|
if (!d[k]) continue;
|
|
527
527
|
if (preMap[d[k]] && preMap[d[k]] !== d) continue loop;
|
|
528
|
+
if (/\\r/.test(d[k])) console.log(d[k]);
|
|
528
529
|
preMap[d[k]] = d;
|
|
529
530
|
liang++;
|
|
530
531
|
fanyi[id] = d[k];
|
|
@@ -563,10 +564,10 @@
|
|
|
563
564
|
objs.push(o);
|
|
564
565
|
}
|
|
565
566
|
var f = await window.showSaveFilePicker({
|
|
566
|
-
suggestedName:
|
|
567
|
+
suggestedName: `#国际化.yml`,
|
|
567
568
|
excludeAcceptAllOption: true,
|
|
568
569
|
types: [{
|
|
569
|
-
description:
|
|
570
|
+
description: i18n`yml文件`,
|
|
570
571
|
accept: { 'text/plain': ['.yml'] },
|
|
571
572
|
}],
|
|
572
573
|
});
|
|
@@ -52,19 +52,19 @@
|
|
|
52
52
|
padding: 0 20px;
|
|
53
53
|
}
|
|
54
54
|
</style>
|
|
55
|
-
<h2
|
|
55
|
+
<h2>${i18n`字符集检查工具`}</h2>
|
|
56
56
|
<div style="text-align: right;padding: 0 20px;">
|
|
57
|
-
<button @click="check"
|
|
57
|
+
<button @click="check">${i18n`检查`}</button>
|
|
58
58
|
</div>
|
|
59
59
|
<div>
|
|
60
60
|
<field>
|
|
61
|
-
<label
|
|
61
|
+
<label>${i18n`要检查的字符集区间`}(unicode)</label>
|
|
62
62
|
<padding>
|
|
63
63
|
<div textarea contenteditable="true" -model="ranges"></div>
|
|
64
64
|
</padding>
|
|
65
65
|
</field>
|
|
66
66
|
<field>
|
|
67
|
-
<label
|
|
67
|
+
<label>${i18n`当前浏览器支持的字符集区间`}(unicode)</label>
|
|
68
68
|
<padding>
|
|
69
69
|
<div textarea contenteditable="true" -model="result"></div>
|
|
70
70
|
</padding>
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
return parseInt(str, 16);
|
|
97
97
|
}
|
|
98
98
|
var check = async function () {
|
|
99
|
-
var elem = alert(
|
|
99
|
+
var elem = alert(i18n`正在检查`, false);
|
|
100
100
|
var reg = /\\(x[0-9a-f]{2}|u[0-9a-f]{4}|u\{[0-9a-f]+\})/ig;
|
|
101
101
|
var dist0 = [];
|
|
102
102
|
ranges.replace(/<\/?\w+\/?>/g, '').replace(new RegExp(`${reg.source}(?:-${reg.source})?|${/[\s\S]/.source}`, 'ig'), function (_, a, b) {
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
continue;
|
|
120
120
|
}
|
|
121
121
|
b = fromHex(b);
|
|
122
|
-
elem.setText(`正在检查${_}`);
|
|
122
|
+
elem.setText(i18n`正在检查${_}`);
|
|
123
123
|
await new Promise(a => setTimeout(a, 20));
|
|
124
124
|
var start = a;
|
|
125
125
|
var temp = [];
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
dist1[i][0] = `<a>${dist1[i][0]}</a>`;
|
|
148
148
|
return `<w>${a}</w>`;
|
|
149
149
|
})
|
|
150
|
-
elem.setText(
|
|
150
|
+
elem.setText(i18n`检查完成`, 600);
|
|
151
151
|
ranges = dist1.map(a => a[0]).join("");
|
|
152
152
|
result = dist.join("");
|
|
153
153
|
}
|
|
@@ -99,25 +99,25 @@
|
|
|
99
99
|
<xmenu -src="(t,i) in tags" @active="saveTagIndex(i)"></xmenu>
|
|
100
100
|
<h2 head>
|
|
101
101
|
<span -bind="name"></span>
|
|
102
|
-
<b -if="doc?.less" l
|
|
103
|
-
<b -if="doc?.mark" w
|
|
104
|
-
<b -if="doc?.test" t
|
|
102
|
+
<b -if="doc?.less" l>${i18n`有样式表`}</b>
|
|
103
|
+
<b -if="doc?.mark" w>${i18n`有文档`}</b>
|
|
104
|
+
<b -if="doc?.test" t>${i18n`有测试代码`}</b>
|
|
105
105
|
</h2>
|
|
106
106
|
<div body -if="tags[0].actived">
|
|
107
107
|
<container -if="doc?.url" .src="doc.url">
|
|
108
108
|
</container>
|
|
109
109
|
<p4 envs>
|
|
110
110
|
<span -if="envs?.length">
|
|
111
|
-
|
|
111
|
+
${i18n`环境依赖项:`} <m -repeat="c in envs" -bind="c"> </m>
|
|
112
112
|
</span>
|
|
113
|
-
<span -else>
|
|
113
|
+
<span -else> ${i18n`无环境依赖项`} </span>
|
|
114
114
|
</p4>
|
|
115
115
|
<p4 imported>
|
|
116
116
|
<span -if="required?.length">
|
|
117
|
-
|
|
117
|
+
${i18n`导入项:`} <m -repeat="c in required" -bind="c"></m>
|
|
118
118
|
</span>
|
|
119
119
|
<span -else>
|
|
120
|
-
|
|
120
|
+
${i18n`无导入项`}
|
|
121
121
|
</span>
|
|
122
122
|
</p4>
|
|
123
123
|
</div>
|
|
@@ -126,9 +126,9 @@
|
|
|
126
126
|
<resultpad .result #coderesult></resultpad>
|
|
127
127
|
</div>
|
|
128
128
|
<div foot -if="tags[1].actived">
|
|
129
|
-
<a -if="doc?.test" @click="clearpad()"
|
|
130
|
-
<a -if="doc?.test" @click="loadcode()"
|
|
131
|
-
<btn @click="execute()"
|
|
129
|
+
<a -if="doc?.test" @click="clearpad()">${i18n`清理`}</a>
|
|
130
|
+
<a -if="doc?.test" @click="loadcode()">${i18n`载入测试代码`}</a>
|
|
131
|
+
<btn @click="execute()">${i18n`运行`}</btn>
|
|
132
132
|
</div>
|
|
133
133
|
<script>
|
|
134
134
|
var commaps = Object.create(null);
|
|
@@ -380,8 +380,8 @@
|
|
|
380
380
|
}
|
|
381
381
|
};
|
|
382
382
|
var tags = [
|
|
383
|
-
{ name:
|
|
384
|
-
{ name:
|
|
383
|
+
{ name: i18n`简介` },
|
|
384
|
+
{ name: i18n`试试` }
|
|
385
385
|
];
|
|
386
386
|
tags[data.getInstance("docscode").tagIndex | 0].actived = true;
|
|
387
387
|
var actived = tags.map(t => t.actived);
|