efront 4.23.9 → 4.24.0

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.
Files changed (64) hide show
  1. package/#/345/233/275/351/231/205/345/214/226.yml +237 -0
  2. package/apps/pivot/#/345/233/275/351/231/205/345/214/226.yml +2 -0
  3. package/apps/pivot/auth/login.html +2 -1
  4. package/apps/pivot/auth/login.js +1 -0
  5. package/apps/pivot/auth/login.less +1 -0
  6. package/apps/pivot/cert/edit.js +1 -1
  7. package/apps/pivot/cert/list.js +1 -1
  8. package/apps/pivot/cert/main.xht +6 -6
  9. package/apps/pivot/cert/orders.xht +8 -8
  10. package/apps/pivot/cert/update.xht +3 -3
  11. package/apps/pivot/db/config.xht +1 -1
  12. package/apps/pivot/db/edit.xht +2 -2
  13. package/apps/pivot/db/list.xht +4 -4
  14. package/apps/pivot/dht/list.js +4 -4
  15. package/apps/pivot/dict/edit.js +1 -1
  16. package/apps/pivot/dict/list.js +1 -1
  17. package/apps/pivot/home/welcome.html +12 -9
  18. package/apps/pivot/home/welcome.js +3 -3
  19. package/apps/pivot/link/index.js +7 -4
  20. package/apps/pivot/link/list.html +2 -2
  21. package/apps/pivot/link/room.js +2 -2
  22. package/apps/pivot/main.js +2 -0
  23. package/apps/pivot/menu-en.yml +16 -0
  24. package/apps/pivot/proxy/edit.js +1 -1
  25. package/apps/pivot/proxy/list.js +2 -2
  26. package/apps/pivot/share/edit.html +3 -3
  27. package/apps/pivot/share/list.js +3 -3
  28. package/apps/pivot/task/edit.js +1 -1
  29. package/apps/pivot/task/invoke.html +1 -1
  30. package/apps/pivot/task/invoke.js +2 -2
  31. package/apps/pivot/task/list.js +3 -3
  32. package/apps/pivot/task/rsync.html +3 -3
  33. package/apps/pivot/task/rsync.js +1 -1
  34. package/apps/pivot/token/edit.js +1 -1
  35. package/apps/pivot/token/list.js +1 -1
  36. package/apps/pivot/wow/root.js +1 -1
  37. package/apps/pivot//344/270/273/351/241/265.html +1 -1
  38. package/coms/basic/#loader.js +7 -0
  39. package/coms/basic/cross_.js +4 -3
  40. package/coms/basic/i18n-chooser.xht +17 -0
  41. package/coms/basic/i18n-supports.js +30 -0
  42. package/coms/basic/i18n.js +25 -1
  43. package/coms/basic_/Promise.js +21 -18
  44. package/coms/basic_/WeakMap.js +12 -6
  45. package/coms/compile/Program.js +4 -4
  46. package/coms/frame/list.html +1 -1
  47. package/coms/frame/list.js +1 -1
  48. package/coms/frame/route.js +22 -9
  49. package/coms/pivot/left-footer.xht +4 -1
  50. package/coms/zimoli/chooseFile.js +1 -1
  51. package/coms/zimoli/cless.js +2 -2
  52. package/coms/zimoli/createUploadURL.js +1 -1
  53. package/coms/zimoli/field.html +1 -1
  54. package/coms/zimoli/field.js +1 -0
  55. package/coms/zimoli/menuItem.js +3 -1
  56. package/coms/zimoli/render.js +3 -2
  57. package/coms/zimoli/selectList.js +3 -3
  58. package/coms/zimoli/selectListEdit.html +5 -5
  59. package/coms/zimoli/yousure.js +2 -2
  60. package/coms/zimoli/zimoli.js +46 -15
  61. package/docs/main.xht +19 -6
  62. package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +3 -36
  63. package/package.json +1 -1
  64. package/public/efront.js +1 -1
@@ -1,3 +1,231 @@
1
+ - zh-CN: 密钥管理
2
+ en: Key Management
3
+
4
+ - zh-CN: 任务
5
+ en: task
6
+
7
+ - zh-CN: 执行
8
+ en: execute
9
+
10
+ - zh-CN: 正在执行..
11
+ en: Executing
12
+
13
+ - zh-CN: 完成!
14
+ en: Done!
15
+
16
+ - zh-CN: 任务管理
17
+ en: task management
18
+
19
+ - zh-CN: 同步
20
+ en: synchronous
21
+
22
+ - zh-CN: 同步完成!
23
+ en: Synchronization completed!
24
+
25
+ - zh-CN: 同步任务
26
+ en: Synchronize tasks
27
+
28
+ - zh-CN: 当前
29
+ en: current
30
+
31
+ - zh-CN: 短链接
32
+ en: Short Link
33
+
34
+ - zh-CN: 访问
35
+ en: visit
36
+
37
+ - zh-CN: 自动刷新
38
+ en: auto refresh
39
+
40
+ - zh-CN: 新建连接
41
+ en: make new connection
42
+
43
+ - zh-CN: 房间
44
+ en: room
45
+
46
+ - zh-CN: 会话
47
+ en: conversation
48
+
49
+ - zh-CN: 连接
50
+ en: connect
51
+
52
+ - zh-CN: 未知
53
+ en: unknown
54
+
55
+ - zh-CN: 字典
56
+ en: dictionary
57
+
58
+ - zh-CN: 接口管理
59
+ en: Interfaces
60
+
61
+ - zh-CN: DHT服务器管理
62
+ en: DHT Server Management
63
+
64
+ - zh-CN: 从文件读取
65
+ en: Read from file
66
+
67
+ - zh-CN: 当前浏览器无法读取文件
68
+ en: The current browser is unable to read the file
69
+
70
+ - zh-CN: 读取文件失败!
71
+ en: Failed to read file!
72
+
73
+ - zh-CN: 请在支持window.crypto.subtle的浏览器上使用此页面的功能
74
+ en: Please use the functionality of this page on browsers that support window.crypto.subtle
75
+
76
+ - zh-CN: 检查账户
77
+ en: Check account
78
+
79
+ - zh-CN: 从证书列表同步
80
+ en: Synchronize from certificate list
81
+
82
+ - zh-CN: 暂无订单
83
+ en: No orders at the moment
84
+
85
+ - zh-CN: 删除订单
86
+ en: Delete Order
87
+
88
+ - zh-CN: 刷新
89
+ en: Refresh
90
+
91
+ - zh-CN: 提交审核
92
+ en: Submit for review
93
+
94
+ - zh-CN: 请求证书
95
+ en: Request certificate
96
+
97
+ - zh-CN: 查看证书
98
+ en: View Certificate
99
+
100
+ - zh-CN: 上传到服务器
101
+ en: Upload to server
102
+
103
+ - zh-CN: 订单异常
104
+ en: Order exception
105
+
106
+ - zh-CN: 执行更新
107
+ en: Perform updates
108
+
109
+ - zh-CN: 替换证书
110
+ en: Replace Certificate
111
+
112
+ - zh-CN: 保存计划
113
+ en: Save Plan
114
+
115
+ - zh-CN: 无法在当前浏览器操作!
116
+ en: Cannot operate in the current browser!
117
+
118
+ - zh-CN: 无法在当前浏览器操作!
119
+ en: Cannot operate in the current browser!
120
+
121
+ - zh-CN: 您确定要这么做吗?
122
+ en: Are you sure you want to do this?
123
+
124
+ - zh-CN: 当前操作需要您再次确认
125
+ en: The current operation requires your confirmation again
126
+
127
+ - zh-CN: 操作
128
+ en: operate
129
+
130
+ - zh-CN: 暂不支持跨服务器操作!
131
+ en: Cross server operations are not currently supported!
132
+
133
+ - zh-CN: 确认取消
134
+ en: Confirm Cancel
135
+
136
+ - zh-CN: 服务器版本
137
+ en: Server version
138
+
139
+ - zh-CN: nodejs版本
140
+ en: Node.js version
141
+
142
+ - zh-CN: 操作系统
143
+ en: operating system
144
+
145
+ - zh-CN: 处理器
146
+ en: processor
147
+
148
+ - zh-CN: 清理服务器缓存
149
+ en: Clean up server cache
150
+
151
+ - zh-CN: 重启服务器
152
+ en: Restart the server
153
+
154
+ - zh-CN: 重启
155
+ en: Restart
156
+
157
+ - zh-CN: 内存
158
+ en: Memory
159
+
160
+ - zh-CN: 可用
161
+ en: available
162
+
163
+ - zh-CN: 总内存
164
+ en: total memory
165
+
166
+ - zh-CN: 搜索或添加
167
+ en: Search or add
168
+
169
+ - zh-CN: 删除
170
+ en: delete
171
+
172
+ - zh-CN: 管理
173
+ en: manage
174
+
175
+ - zh-CN: 选项 $1 已存在!
176
+ en: Option $1 already exists!
177
+
178
+ - zh-CN: 切换语言
179
+ en: switch language
180
+
181
+ - zh-CN: 中文简体
182
+ en: Simplified Chinese
183
+
184
+ - zh-CN: 中文繁体
185
+ en: traditional Chinese
186
+
187
+ - zh-CN: 英文
188
+ en: English
189
+
190
+ - zh-CN: 葡萄牙语
191
+ en: Portuguese
192
+
193
+ - zh-CN: 波兰语
194
+ en: Polish
195
+
196
+ - zh-CN: 测试
197
+ en: test
198
+
199
+ - zh-CN: 全部测试
200
+ en: All Tests
201
+
202
+ - zh-CN: 添加可用链接
203
+ en: Add available links
204
+
205
+ - zh-CN: 配置
206
+ en: configuration
207
+
208
+ - zh-CN: 添加动作
209
+ en: Add action
210
+
211
+ - zh-CN: 编辑数据
212
+ en: Edit Data
213
+
214
+ - zh-CN: 请求方法错误
215
+ en: Request method error
216
+
217
+ - zh-CN: 商品数量过多,无法完成交易!
218
+ en: "Too many products, unable to complete transaction!"
219
+
220
+ - zh-CN: 商品信息已变更,请刷新页面后重新购买!
221
+ en: The product information has been changed. Please refresh the page and make a new purchase!
222
+
223
+ - zh-CN: 商品金额过大,交易无法进行
224
+ en: "The amount of the product is too large, and the transaction cannot proceed"
225
+
226
+ - zh-CN: 商品总价值过大,交易无法进行
227
+ en: "The total value of the product is too high, and the transaction cannot proceed"
228
+
1
229
  - zh-CN: $1仅在开发环境存在,供开发者调试查看,$2
2
230
  en: "$1 only exists in the development environment for developers to debug and view, $2"
3
231
 
@@ -2319,3 +2547,12 @@
2319
2547
 
2320
2548
  - zh-CN: 这是一个空白项目
2321
2549
  en: This is a blank project
2550
+
2551
+ - zh-CN: menu.yml
2552
+ en: menu-en.yml
2553
+
2554
+ - zh-CN: menu.yml
2555
+ en: menu-en.yml
2556
+
2557
+ - zh-CN: menu.yml
2558
+ en: menu-en.yml
@@ -0,0 +1,2 @@
1
+ - zh-CN: menu.yml
2
+ en: menu-en.yml
@@ -9,4 +9,5 @@
9
9
  </div>
10
10
  <div message>
11
11
  ${i18n`${i18n`登录`}之前需要使用${`&nbsp;<b>efront password</b>&nbsp;`}命令在${i18n`服务器`}上设置${i18n`密码`}`}
12
- </div>
12
+ </div>
13
+ <i18n-chooser></i18n-chooser>
@@ -13,6 +13,7 @@ function main(host) {
13
13
  move.bindPosition(page, [.5, .5]);
14
14
  });
15
15
  renderWithDefaults(page, {
16
+ i18nChooser,
16
17
  fields, data: {
17
18
  host: host ? parseURL(host).host : data.getInstance("base").host || location.host,
18
19
  }, pending: false
@@ -22,6 +22,7 @@
22
22
  font-size: 12px;
23
23
  }
24
24
 
25
+
25
26
  .button {
26
27
  padding: 0px 40px;
27
28
  }
@@ -1 +1 @@
1
- pedit.bind(null, "证书", "cert");
1
+ pedit.bind(null, i18n`证书`, "cert");
@@ -1,4 +1,4 @@
1
- plist.bind(null, '接口管理', "cert", refilm`
1
+ plist.bind(null, i18n`接口管理`, "cert", refilm`
2
2
  *域名/hostname input/253
3
3
  公钥/private text
4
4
  私钥/public text
@@ -76,7 +76,7 @@
76
76
  </form>
77
77
  <script>
78
78
  var enabled = acme2.enabled;
79
- if (!enabled) return ["请在支持window.crypto.subtle的浏览器上使用此页面的功能"];
79
+ if (!enabled) return [i18n`请在支持window.crypto.subtle的浏览器上使用此页面的功能`];
80
80
  var form = view;
81
81
  var activeIndex = 0;
82
82
  var nosubmit = e => e.preventDefault();
@@ -147,7 +147,7 @@
147
147
  }}
148
148
  *邮箱/email email
149
149
  /termsOfServiceAgreed/同意 checker ${{
150
- async"《服务条款》"(data) {
150
+ async"Let’s Encrypt Subscriber Agreement"(data) {
151
151
  var termsOfService = await acme2.getTermsOfService();
152
152
  if (termsOfService) window.open(termsOfService, "_blank", "popup,noopener,noreferer")
153
153
  },
@@ -157,7 +157,7 @@
157
157
  return formdata.kid ? i18n`已创建账户` : '';
158
158
  },
159
159
  options: {
160
- async 检查账户(actived) {
160
+ async [i18n`检查账户`](actived) {
161
161
  var params = submit(actived.fields, formdata);
162
162
  await saveUnique(params);
163
163
  formdata.kid = await acme2.getAccount(params);
@@ -165,7 +165,7 @@
165
165
  },
166
166
  },
167
167
  actions: {
168
- async 创建账户(actived) {
168
+ async [i18n`创建账户`](actived) {
169
169
  if (formdata.kid) {
170
170
  if (!await confirm(i18n`您已创建账户,请确认是否重新创建?`)) return;
171
171
  }
@@ -186,13 +186,13 @@
186
186
  *当前服务器的域名/domain/每行一个,不支持泛域名 text
187
187
  `,
188
188
  options: {
189
- async 从证书列表同步() {
189
+ async [i18n`从证书列表同步`]() {
190
190
  var a = await plist.load('cert', 'hostname');
191
191
  formdata.domain = a.map(a => a.hostname).join('\r\n');
192
192
  }
193
193
  },
194
194
  actions: {
195
- async 创建订单(actived) {
195
+ async [i18n`创建订单`](actived) {
196
196
  var params = submit(actived.fields, formdata);
197
197
  await acme2.newOrder(params);
198
198
  await saveUnique();
@@ -57,23 +57,23 @@
57
57
  </style>
58
58
  <xmenu -src="o of orders" @active="openOrder(o)"></xmenu>
59
59
  <div -if="!order">
60
- 暂无订单
60
+ ${i18n`暂无订单`}
61
61
  </div>
62
62
  <form -elseif="order.oid" onsubmit="event.preventDefault()">
63
63
  <div body>
64
64
  <field -repeat="f in fields" _src="[f,order]"></field>
65
65
  </div>
66
66
  <div foot>
67
- <button -if="order?.removable" class="danger" confirm @click="dropOrder(order)">删除订单</button>
68
- <button -if="order.status==='processing'" @click="openOrder(order)">刷新</button>
69
- <button -if="order.status==='pending'" @click="auditOrder(order)">提交审核</button>
70
- <button -if="order.status==='ready'" @click="finalize(order)">请求证书</button>
71
- <button -if="order.status==='valid'" @click="see(order)">查看证书</button>
72
- <button -if="order.shouldupload" @click="upload(order)">上传到服务器</button>
67
+ <button -if="order?.removable" class="danger" confirm @click="dropOrder(order)">${i18n`删除订单`}</button>
68
+ <button -if="order.status==='processing'" @click="openOrder(order)">${i18n`刷新`}</button>
69
+ <button -if="order.status==='pending'" @click="auditOrder(order)">${i18n`提交审核`}</button>
70
+ <button -if="order.status==='ready'" @click="finalize(order)">${i18n`请求证书`}</button>
71
+ <button -if="order.status==='valid'" @click="see(order)">${i18n`查看证书`}</button>
72
+ <button -if="order.shouldupload" @click="upload(order)">${i18n`上传到服务器`}</button>
73
73
  </div>
74
74
  </form>
75
75
  <div -else>
76
- 订单异常
76
+ ${i18n`订单异常`}
77
77
  </div>
78
78
  <script>
79
79
  var fields = refilm`
@@ -3,9 +3,9 @@
3
3
  <field -repeat="f in fields" -src="[f,acme2]"></field>
4
4
  </div>
5
5
  <div foot>
6
- <a confirm @click="autoUpdate()">执行更新</a>
7
- <a @click="updateCert()">替换证书</a>
8
- <button @click="saveSchadule()">保存计划</button>
6
+ <a confirm @click="autoUpdate()">${i18n`执行更新`}</a>
7
+ <a @click="updateCert()">${i18n`替换证书`}</a>
8
+ <button @click="saveSchadule()">${i18n`保存计划`}</button>
9
9
  </div>
10
10
  </form>
11
11
  <script>
@@ -48,7 +48,7 @@
48
48
  <div a.name?></div>
49
49
  </div>
50
50
  </padding>
51
- <a insert @click="editAction(null)">添加动作</a>
51
+ <a insert @click="editAction(null)">${i18n`添加动作`}</a>
52
52
  </lattice>
53
53
  </div>
54
54
  <div foot>
@@ -34,8 +34,8 @@
34
34
  }
35
35
  </style>
36
36
  <div head>
37
- 编辑数据 - <span -bind="db.name"></span>
38
- <a @click="add">添加</a>
37
+ ${i18n`编辑数据`} - <span -bind="db.name"></span>
38
+ <a @click="add">${i18n`添加`}</a>
39
39
  </div>
40
40
 
41
41
  <lattice body -src="m in items">
@@ -25,13 +25,13 @@
25
25
  }
26
26
  </style>
27
27
  <lattice body a-src="db in dbs">
28
- <div insert><a @click="adddb">添加</a></div>
28
+ <div insert><a @click="adddb">${i18n`添加`}</a></div>
29
29
  <padding db>
30
30
  <div>
31
31
  <h2> ⩸ </h2>
32
32
  <h2 -bind="db.name"></h2>
33
- <a @click="go('/db/edit',db)">查看</a>
34
- <a @click="go('/db/config',db)">配置</a>
33
+ <a @click="go('/db/edit',db)">${i18n`查看`}</a>
34
+ <a @click="go('/db/config',db)">${i18n`配置`}</a>
35
35
  <drop @click.singly.stop="deldb(db)"></drop>
36
36
  </div>
37
37
  </padding>
@@ -53,7 +53,7 @@
53
53
  await load();
54
54
  };
55
55
  var deldb = async function (db) {
56
- var a = await prompt(i18n`输入名称以确认删除`, ["删除#danger", '取消'], a => a === db.name, {
56
+ var a = await prompt(i18n`输入名称以确认删除`, [i18n`删除` + "#danger", i18n`取消`], a => a === db.name, {
57
57
  async submit(v) {
58
58
  await data.from('dbdel', { id: v });
59
59
  }
@@ -12,11 +12,11 @@ var fields = refilm`名称/name
12
12
  return plist.bind({
13
13
  fields,
14
14
  type: 'nodes',
15
- title: "DHT服务器管理",
15
+ title: i18n`DHT服务器管理`,
16
16
  buttons: [{
17
- name: "从文件读取", async do() {
17
+ name: i18n`从文件读取`, async do() {
18
18
  var FileReader = window.FileReader;
19
- if (!FileReader) return alert('当前浏览器无法读取文件', 'warn')
19
+ if (!FileReader) return alert(i18n`当前浏览器无法读取文件`, 'warn')
20
20
  var f = await chooseFile(".torrent", true);
21
21
  var pg = await popup("/dht/rent");
22
22
  var scope = $scoped.get(pg);
@@ -34,7 +34,7 @@ return plist.bind({
34
34
  ok();
35
35
  };
36
36
  r.onerror = function () {
37
- alert("读取文件失败!", 'error');
37
+ alert(i18n`读取文件失败!`, 'error');
38
38
  oh();
39
39
  };
40
40
  r.readAsArrayBuffer(f);
@@ -1 +1 @@
1
- pedit.bind(null, "字典", "dict");
1
+ pedit.bind(null, i18n`字典`, "dict");
@@ -5,7 +5,7 @@ var types = refilm`
5
5
  model.setModels({
6
6
  dict: frame$dict.bind(null, types),
7
7
  });
8
- return plist.bind(null, '接口管理', "dict", refilm`
8
+ return plist.bind(null, i18n`接口管理`, "dict", refilm`
9
9
  *字典ID/key 100
10
10
  字典名/name 100
11
11
  字典数据/options dict
@@ -2,34 +2,37 @@
2
2
  </block>
3
3
  <block>
4
4
  <padding>
5
- 服务器版本&nbsp;&nbsp;<span -text="String(version)"></span>
5
+ ${i18n`服务器版本`}&nbsp;&nbsp;<span -text="String(version)"></span>
6
6
  </padding>
7
7
  <padding>
8
- nodejs版本&nbsp;&nbsp;<span -text="String(nodeVersion)"></span>
8
+ ${i18n`nodejs版本`}&nbsp;&nbsp;<span -text="String(nodeVersion)"></span>
9
9
  </padding>
10
10
  <padding>
11
- 操作系统&nbsp;&nbsp;<span -text="String(platform)"></span>
11
+ ${i18n`操作系统`}&nbsp;&nbsp;<span -text="String(platform)"></span>
12
12
  </padding>
13
13
  <padding>
14
- 处理器&nbsp;&nbsp;<span -text="String(arch)"></span>
14
+ ${i18n`处理器`}
15
+ &nbsp;&nbsp;<span -text="String(arch)"></span>
15
16
  </padding>
16
17
  </block>
17
18
  <block>
18
19
  <padding>
19
- 清理服务器缓存 <btn @click="run('clear-cache',this)">清理</btn>
20
+ ${i18n`清理服务器缓存`}
21
+ <btn @click="run('clear-cache',this)">${i18n`清理`}</btn>
20
22
  </padding>
21
23
  <padding>
22
- 重启服务器 <btn @click="run('rehost',this)" confirm type="danger">重启</btn>
24
+ ${i18n`重启服务器`}
25
+ <btn @click="run('rehost',this)" confirm type="danger">${i18n`重启`}</btn>
23
26
  </padding>
24
27
  </block>
25
28
  <block>
26
29
  <padding>
27
- 启动时间&nbsp;&nbsp;<span -text="filterTime(hrtime)"></span>
30
+ ${i18n`启动时间`}&nbsp;&nbsp;<span -text="filterTime(hrtime)"></span>
28
31
  </padding>
29
32
  <padding>
30
- 内存 <progbar danger:="memery[0]/memery[1]<.05" :current="memeryUsed" :total="memery[1]"></progbar>
33
+ ${i18n`内存`} <progbar danger:="memery[0]/memery[1]<.05" :current="memeryUsed" :total="memery[1]"></progbar>
31
34
  <span style="color: #999;">
32
- 可用<span -bind="size(memery[0])"></span> / 总内存<span -bind="size(memery[1])"></span>
35
+ ${i18n`可用`} <span -bind="size(memery[0])"></span> / ${i18n`总内存`}<span -bind="size(memery[1])"></span>
33
36
  </span>
34
37
  </padding>
35
38
  </block>
@@ -8,9 +8,9 @@ function main() {
8
8
  filterTime,
9
9
  memeryUsed: 0,
10
10
  memery: [0, 1],
11
- platform: '未知',
12
- arch: '未知',
13
- nodeVersion: "未知",
11
+ platform: i18n`未知`,
12
+ arch: i18n`未知`,
13
+ nodeVersion: i18n`未知`,
14
14
  size,
15
15
  progbar,
16
16
  async run(id) {
@@ -2,10 +2,13 @@ function index() {
2
2
  var page = document.createElement('link-index');
3
3
  page.innerHTML = template;
4
4
  renderWithDefaults(page, {
5
- menus: "房间 /link/room, 会话 /link/list".split(/\s*,\s*/).map(a => {
6
- var [name, path] = a.split(/\s+/);
7
- return { name, path };
8
- }),
5
+ menus: [{
6
+ name: i18n`房间`,
7
+ path: '/link/room'
8
+ }, {
9
+ name: i18n`会话`,
10
+ path: '/link/list'
11
+ }],
9
12
  saveIndex(index) {
10
13
  data.setInstance('link-index', index);
11
14
  },
@@ -16,10 +16,10 @@
16
16
  </style>
17
17
  <div head>
18
18
  <span>
19
- 自动刷新
19
+ ${i18n`自动刷新`}
20
20
  </span>
21
21
  <swap -model="autoreload"></swap>
22
- <btn @click="chat()">新建连接</btn>
22
+ <btn @click="chat()">${i18n`新建连接`}</btn>
23
23
  </div>
24
24
  <div class="clusters">
25
25
  <a -repeat="(c,i) in clusters" ng-class="{current:i===index.index}" @click="active(i,c)">
@@ -1,7 +1,7 @@
1
- plist.bind(null, '房间', "room", refilm`
1
+ plist.bind(null, i18n`房间`, "room", refilm`
2
2
  *房间名/name 100
3
3
  / $ ${[{
4
- name: "连接",
4
+ name: i18n`连接`,
5
5
  async do(o) {
6
6
  var linkid = await data.from("room", { id: encode62.packencode(o.name) });
7
7
  popup("/link/chat", { linkid, name: o.name });
@@ -1,3 +1,5 @@
1
+ frame$route.update(await data.fromURL(i18n`menu.yml`));
2
+ i18n.setReloader(zimoli.reload);
1
3
  data.loadConfig("api.yml");
2
4
  user.loginPath = '/auth/login';
3
5
  var login_queue = [], reject_queue = [];
@@ -0,0 +1,16 @@
1
+ Home Page: /home/welcome
2
+ WEB:
3
+ Path Redirects: /proxy/list
4
+ File Manager: /wow/root
5
+ Data Manager: /db/list
6
+ Living Link: /link/index
7
+ # Dictionary: /dict/list
8
+ Cert Manager: /cert/main
9
+ Shared Path: /share/list
10
+ Service:
11
+ Key Manager: /token/list
12
+ Task Manager: /task/list
13
+ Logs:
14
+ Visit Count: /log/count
15
+ Boot Log: /log/boot
16
+ # Shop: /shop/home
@@ -1 +1 @@
1
- pedit.bind(null, "短链接", "proxy");
1
+ pedit.bind(null, i18n`短链接`, "proxy");
@@ -1,6 +1,6 @@
1
1
  var actions = [
2
2
  {
3
- name: "访问",
3
+ name: i18n`访问`,
4
4
  do(o) {
5
5
  var url = o.url;
6
6
  if (!/\//.test(url)) url = "//" + url;
@@ -16,4 +16,4 @@ var fields = refilm`
16
16
  动作/action select/100 [跳转,转发]
17
17
  状态/status select/100 [启用,禁用]
18
18
  / $ ${actions}`;
19
- return plist.bind(null, '短链接', "proxy", fields, "/proxy/edit");
19
+ return plist.bind(null, i18n`短链接`, "proxy", fields, "/proxy/edit");
@@ -1,10 +1,10 @@
1
- <div head>修改</div>
1
+ <div head>${i18n`修改`}</div>
2
2
  <div body>
3
3
  <form>
4
4
  <field -repeat="f in fields" -src="[f,data]"></field>
5
5
  </form>
6
6
  </div>
7
7
  <div foot>
8
- <btn white @click="close()">取消</btn>
9
- <button @click="save()"> 保存 </button>
8
+ <btn white @click="close()">${i18n`取消`}</btn>
9
+ <button @click="save()"> ${i18n`保存`} </button>
10
10
  </div>
@@ -5,7 +5,7 @@ function main() {
5
5
  var options = [
6
6
  {
7
7
  name(e) {
8
- return this.confirm === e ? "确认取消" : "取消"
8
+ return this.confirm === e ? i18n`确认取消` : i18n`取消`
9
9
  },
10
10
  type: 'danger',
11
11
  confirm: false,
@@ -32,7 +32,7 @@ function main() {
32
32
  });
33
33
  },
34
34
  fields: fields.concat({
35
- name: "操作",
35
+ name: i18n`操作`,
36
36
  width: 200,
37
37
  type: 'button',
38
38
  options,
@@ -42,7 +42,7 @@ function main() {
42
42
  scope.load();
43
43
  contextmenu(page, [
44
44
  {
45
- name: "添加",
45
+ name: i18n`添加`,
46
46
  do(e) {
47
47
  zimoli.prepare("/share/edit", function () {
48
48
  var p = popup("/share/edit", { fields });
@@ -1 +1 @@
1
- pedit.bind(null, "任务", "task");
1
+ pedit.bind(null, i18n`任务`, "task");