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.
@@ -39,12 +39,12 @@
39
39
  vertical-align: middle;
40
40
  }
41
41
  </style>
42
- <p><span>翻译结果仅做为参考,未必完美替换,语法参考<a @click="zimoli.go('/组件/basic/i18n.js',{mark:true})">i18n.js</a></span></p>
43
- <p -if="!window.showDirectoryPicker" error>国际化工具仅在浏览器支持 showDirectoryPicker 时可用</p>
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">选择代码文件夹</button>
46
- <button @click="editCode()">修改国际化参数</button>
47
- <button style="float:right" -if="tableData.length" @click="exportCSV">导出到文件</button>
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 "appid和密钥不能只有一个!";
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: "提示", readonly: true, key: 'apply_info', type: 'text' },
91
- { name: "appid及密钥申请地址", readonly: true, key: 'apply_url', type: 'anchor' },
92
- { name: "appid", key: 'appid', type: 'input' },
93
- { name: "密钥", key: 'sign', type: "input" },
94
- { name: "目标语言", type: 'checkbox', options: supports }
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: 'efront目前使用的翻译接口免费额度受限,如果遇到翻译失败的情况,您可以自己申请一个appid和密钥配置后使用',
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: "中文", id: "zh", lang: "zh-CN" },
299
- { name: "繁体中文", id: "cht", lang: "zh-TW" },
300
- { name: "英语", id: "en", lang: "en" },
301
- // { name: "文言文", id: "wyw" },
302
- // { name: "粤语", id: "yue" },
303
- { name: "日语", id: "jp", lang: "ja" },
304
- { name: "法语", id: "fra", lang: 'fr' },
305
- { name: "俄语", id: "ru", lang: 'ru' },
306
- { name: "韩语", id: "kor", lang: "ko" },
307
- { name: "德语", id: "de", lang: "de" },
308
- { name: "意大利语", id: "it", lang: 'it' },
309
- { name: "泰语", id: "th", lang: "th" },
310
- { name: "越南语", id: "vie", lang: 'vi' },
311
- { name: "阿拉伯语", id: "ara", lang: "ar" },
312
- { name: "荷兰语", id: "nl", lang: "nl" },
313
- { name: "芬兰语", id: "fin", lang: "fi" },
314
- { name: "希腊语", id: "el", lang: "el" },
315
- { name: "西班牙语", id: "spa", lang: "es" },
316
- // { name: "葡萄牙语", id: "pt", lang: /pt\-(BR|PT)/ },
317
- { name: "匈牙利语", id: "hu", lang: 'hu' },
318
- { name: "瑞典语", id: "swe", lang: 'sv' },
319
- { name: "丹麦语", id: "dan", lang: 'da' },
320
- { name: "捷克语", id: "cs", lang: 'cs' },
321
- // { name: "波兰语", id: "pl" },
322
- { name: "保加利亚语", id: "bul", lang: "bg" },
323
- { name: "爱沙尼亚语", id: "est", lang: 'et' },
324
- { name: "罗马尼亚语", id: "rom", lang: 'ro' },
325
- { name: "斯洛文尼亚语", id: "slo", lang: 'sl' },
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: "字符串", key: "text", width: 280 },
350
- { name: "已翻译", key: "liang", width: 80 },
351
- { name: "出现文件", key: "files", width: 200 },
352
- { name: "出现次数", key: "count", width: 80 },
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: "只看中文", key: "cnonly", get checked() {
358
+ name: i18n`只看中文`, key: "cnonly", get checked() {
359
359
  return true;
360
360
  },
361
361
  set checked(v) {
362
- alert('暂不支持翻译其他语言', 'warn');
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>翻译: "<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">一键百度</a></div>`;
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("正在提取 " + e.path);
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: "#国际化.yml",
567
+ suggestedName: `#国际化.yml`,
567
568
  excludeAcceptAllOption: true,
568
569
  types: [{
569
- description: 'yml文件',
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>字符集检查工具</h2>
55
+ <h2>${i18n`字符集检查工具`}</h2>
56
56
  <div style="text-align: right;padding: 0 20px;">
57
- <button @click="check">检查</button>
57
+ <button @click="check">${i18n`检查`}</button>
58
58
  </div>
59
59
  <div>
60
60
  <field>
61
- <label>要检查的字符集区间(unicode)</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>当前浏览器支持的字符集区间(unicode)</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("正在检查", false);
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("检查完成", 600);
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>有样式表</b>
103
- <b -if="doc?.mark" w>有文档</b>
104
- <b -if="doc?.test" t>有测试代码</b>
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
- 环境依赖项:&nbsp; <m -repeat="c in envs" -bind="c"> </m>
111
+ ${i18n`环境依赖项:`}&nbsp; <m -repeat="c in envs" -bind="c"> </m>
112
112
  </span>
113
- <span -else> 无环境依赖项 </span>
113
+ <span -else> ${i18n`无环境依赖项`} </span>
114
114
  </p4>
115
115
  <p4 imported>
116
116
  <span -if="required?.length">
117
- 导入项:&nbsp;<m -repeat="c in required" -bind="c"></m>
117
+ ${i18n`导入项:`}&nbsp;<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()">清理</a>
130
- <a -if="doc?.test" @click="loadcode()">载入测试代码</a>
131
- <btn @click="execute()">运行</btn>
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.0.13",
3
+ "version": "4.0.16",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {