From d5fe74945c94f8ed1432c0b20fede315329d9634 Mon Sep 17 00:00:00 2001 From: harveyshao Date: Tue, 28 Sep 2021 10:15:53 +0800 Subject: [PATCH] add language --- frame.js | 11 ++++++----- lib/base.js | 1 + lib/user.js | 11 +++++++++++ page/index.css | 4 ++++ page/share.js | 2 +- panel/header.js | 20 ++++++++++++++++---- panel/river.js | 8 ++++---- plugin/input.js | 8 ++++---- plugin/local/code/inner.js | 4 ++-- plugin/local/code/vimer.js | 2 +- plugin/local/wiki/word.js | 2 +- publish/chrome/popup.js | 2 +- publish/client/mp/pages/action/action.js | 6 +++--- 13 files changed, 55 insertions(+), 26 deletions(-) diff --git a/frame.js b/frame.js index 69f3fda7..864aaf84 100644 --- a/frame.js +++ b/frame.js @@ -298,7 +298,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }, field: function(can, type, item, target) { type = type || html.INPUT, item = item || {} var name = (item.nick||item.name||"").split(" ")[0] - var title = item.help? name+"("+item.help.split(" ")[0]+")": name + var title = !item.help || can.user.language(can) == "en"? name: name+"("+item.help.split(" ")[0]+")" return can.page.Append(can, target||can._output, [{view: [(type||"")+" "+(item.name||"")+" "+(item.pos||""), html.FIELDSET], list: [ name && {text: [title, html.LEGEND]}, can.user.mod.isCmd && type == "plugin" && {view: [html.LEGEND, html.DIV, title]}, @@ -343,7 +343,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, return {type: html.OPTION, value: value, inner: value} }), item.className || can.page.ClassList.add(can, item, "args") break - case "button": item.value = item.value||item.name||"查看"; break + case "button": item.value = item.value||item.name||"list"; break case "upfile": item.type = html.FILE; break case "upload": item.type = html.FILE, input.name = "upload"; break } @@ -475,7 +475,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }) - can.onappend._action(can, ["关闭", "刷新", {input: "text", placeholder: "filter", style: {position: ""}, _init: function(input) { + can.onappend._action(can, ["close", "refresh", {input: "text", placeholder: "filter", style: {position: ""}, _init: function(input) { can.onengine.signal(can, "keymap.focus", can.request({}, {cb: function(event) { if (event.target.tagName == "INPUT") { return } if (event.key == "Escape") { ui.close(); return } @@ -495,8 +495,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, } }) }) - }}], ui.action, { "关闭": ui.close, - "刷新": function(event) { ui.close(), can.toast.click() }, + }}], ui.action, { "close": ui.close, + "refresh": function(event) { ui.close(), can.toast.click() }, }) can.onappend.table(can, msg, function(value, key, index, line, list) { return {text: [value, "td"], onclick: function(event) { @@ -543,6 +543,7 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe }, topic: function(can, topic) { topic && (can._topic = topic) can.user.topic(can, can._topic || can.user.Search(can, "topic") || ((can.user.Search(can, cli.POD)||can.base.isNight())? "black": "white")) + can.page.ClassList.add(can, document.body, can.user.language(can)) }, figure: function(event, can, target, right) { target = target||can._target; if (!event || !event.target) { return } var left = event.clientX-event.offsetX, top = event.clientY-event.offsetY+event.target.offsetHeight; if (right) { diff --git a/lib/base.js b/lib/base.js index 00889615..4281892a 100644 --- a/lib/base.js +++ b/lib/base.js @@ -143,6 +143,7 @@ Volcanos("base", {help: "数据类型", }, Time: function(time, fmt) { var now = this.Date(time) var list = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] + var list = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] fmt = fmt || "%y-%m-%d %H:%M:%S" fmt = fmt.replace("%y", now.getFullYear()) fmt = fmt.replace("%m", this.Number(now.getMonth()+1, 2)) diff --git a/lib/user.js b/lib/user.js index 0ccd9b69..17d18769 100644 --- a/lib/user.js +++ b/lib/user.js @@ -37,13 +37,21 @@ Volcanos("user", {help: "用户操作", agent: { reload: function(force) { (force || confirm("重新加载页面?")) && location.reload() }, jumps: function(url) { location.href = url }, open: function(url) { window.open(url) }, + time: function(can, time, fmt) { var now = can.base.Date(time) + var list = can.user.language(can) == "en"? ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] + return can.base.Time(time, (fmt||"%y-%m-%d %H:%M:%S").replace("%w", list[now.getDay()])) + }, title: function(text) { return text && (document.title = text), document.title }, topic: function(can, name) { can.user.isMobile && (name += " mobile") && can.user.isLandscape && (name += " landscape") can.page.Modify(can, document.body, {className: name}) }, + language: function(can) { + return can.user.Search(can, "language") + }, trans: function(can, text) { + if (can.user.language(can) == "en") { return text } if (typeof text == "object") { return can.core.Item(text, function(k, v) { can.core.Value(can._trans, k, v) }) } @@ -53,6 +61,9 @@ Volcanos("user", {help: "用户操作", agent: { "submit": "提交", "cancel": "取消", "open": "打开", "close": "关闭", "begin": "启动", "end": "结束", + "list": "查看", "back": "返回", + "run": "执行", "refresh": "刷新", + "share": "共享", }[text] || text }, toast: function(can, content, title, duration, progress) { diff --git a/page/index.css b/page/index.css index 6c50d66e..5dece1c7 100644 --- a/page/index.css +++ b/page/index.css @@ -58,6 +58,10 @@ input[type=button] { letter-spacing:4px; padding-left:10px; cursor:pointer; + font-family:monospace; +} +body.en input[type=button] { + letter-spacing:2px; } input[type=button]:hover { background-color:gray; color:cyan; diff --git a/page/share.js b/page/share.js index aaa51c03..959e8b7d 100644 --- a/page/share.js +++ b/page/share.js @@ -2,7 +2,7 @@ Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js", libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panels: [ {name: "Header", help: "标题栏", pos: "head", state: ["time", "username", "avatar"]}, {name: "Search", help: "搜索框", pos: "auto"}, - {name: "River", help: "群聊组", pos: "left", action: ["创建", "刷新"]}, + {name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]}, {name: "Action", help: "工作台", pos: "main"}, {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]}, ], main: {name: "Header"}, river: { diff --git a/panel/header.js b/panel/header.js index 4874f784..1745f849 100644 --- a/panel/header.js +++ b/panel/header.js @@ -44,7 +44,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, _state: function(can, msg, target) { const STATE = "state" can.core.List(can.base.Obj(can.Conf(STATE)||msg.Option(STATE), [kit.MDB_TIME, aaa.USERNAME]), function(item) { if (item == aaa.AVATAR) { - can.page.Append(can, target, [{view: [STATE+" "+item], list: [{img: can.Conf(item)}], onmouseenter: function(event) { + can.page.Append(can, target, [{view: [STATE+" "+item], list: [{img: can.Conf(item)||" "}], onmouseenter: function(event) { can.onaction.carte(event, can, [can.page.Format(html.IMG, can.Conf(item), 160)]) }}]) return @@ -119,7 +119,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, time: function(can, target) { can.onlayout.topic(can) - target.innerHTML = can.base.Time(null, "%w %H:%M:%S") + target.innerHTML = can.user.time(can, null, "%w %H:%M:%S") }, menu: function(can, cmds, cb) { return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) { @@ -158,6 +158,9 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, "river": "菜单", "search": "搜索", + "create": "创建", + "share": "共享", + "help": "帮助", "tutor": "入门简介", "manual": "使用手册", @@ -235,7 +238,13 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, }, username: function(event, can) { - can.onaction.carte(event, can, ["shareuser", aaa.USERNICK, "clear", aaa.LOGOUT]) + can.onaction.carte(event, can, ["shareuser", aaa.USERNICK, "clear", aaa.LOGOUT, "english", "chinese"]) + }, + english: function(event, can) { + can.user.Search(can, "language", "en") + }, + chinese: function(event, can) { + can.user.Search(can, "language", "zh") }, shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, kit.MDB_TYPE, aaa.LOGIN]) @@ -252,7 +261,10 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, }, true) }) }, - clear: function(event, can, button) { can.onimport.background(event, can, "") }, + clear: function(event, can, button) { + can.onimport.background(event, can, "") + can.onimport.avatar(event, can, "") + }, logout: function(event, can) { can.user.logout(can) }, River: function(can) { can.search({}, ["River.onmotion.toggle"]) }, diff --git a/panel/river.js b/panel/river.js index 863cad33..bd5f57a9 100644 --- a/panel/river.js +++ b/panel/river.js @@ -54,12 +54,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, can, msg, panel, cmds, cb) { var list = can.onengine._river||can.onengine.river cmds.length == 0 && can.core.Item(list, function(key, value) { - msg.Push({hash: key, name: value.name}) // 群组列表 + msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 群组列表 }); if (cmds.length != 1 && cmds[1] != chat.TOOL) { return false } var river = list[cmds[0]]; if (!river) { return false } can.core.Item(river.storm, function(key, value) { - msg.Push({hash: key, name: value.name}) // 应用列表 + msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 应用列表 }), can.base.isFunc(cb) && cb(msg); return true }, }) @@ -135,8 +135,8 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加应用", "添加设备", "重命名群组", "删除群组"], sublist: ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], menus: [chat.RIVER, - ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"], - ["共享", "共享群组", "共享应用", "共享工具", "共享主机", "访问空间"], + ["create", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"], + ["share", "共享群组", "共享应用", "共享工具", "共享主机", "访问空间"], ], "创建群组": function(event, can) { can.onaction.create(event, can) }, diff --git a/plugin/input.js b/plugin/input.js index c7b3daa0..53134ba1 100644 --- a/plugin/input.js +++ b/plugin/input.js @@ -9,14 +9,14 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta, } }, - "执行": function(event, can) { + "run": function(event, can) { var title = can.sup._name+" "+can.sup.Input([], true) var toast = can.user.toast(can, "执行中...", title, -1) can.run(event, [], function() { toast.close(), can.user.toast(can, "执行成功...", title) }) }, - "刷新": function(event, can) { can.run(event) }, - "查看": function(event, can) { can.run(event) }, - "返回": function(event, can) { can.sup.onimport._back(can.sup) }, + "refresh": function(event, can) { can.run(event) }, + "list": function(event, can) { can.run(event) }, + "back": function(event, can) { can.sup.onimport._back(can.sup) }, onchange: function(event, can) { if (can.Conf("type") == "select") { can.run(event) } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 3c7ee851..21acb1e2 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -38,7 +38,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, event.key == "Enter" && can.onaction.searchLine(event, can, ui.word.value) }], value: "main", onfocus: function(event) { event.target.setSelectionRange(0, -1) }}, {button: ["搜索", function(event) { can.onaction.searchLine(event, can, ui.word.value) }]}, - {button: ["返回", function(event) { can.onaction["返回"](event, can) }]}, + {button: ["back", function(event) { can.onaction["back"](event, can) }]}, {button: ["关闭", function(event) { can.onaction["搜索"](event, can) }]}, ]}, {view: "tags", style: {"max-height": 160}}, @@ -170,7 +170,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], }, }) Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"], - "返回": function(event, can) { + "back": function(event, can) { var last = can.history.pop(); last = can.history.pop() last && can.onimport.tabview(can, last.path, last.file, last.line) can.Status("跳转数", can.history.length) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 7a3d4032..db88cd63 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -43,7 +43,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, event.target.setSelectionRange(0, -1) can.onkeymap._command(can) }}, - {button: ["执行", function(event) { + {button: ["run", function(event) { can.onkeymap.command.Enter(event, can, can.ui.cmd.value) }]}, {button: ["清空", function(event) { diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index 57d99c0c..e873ab1d 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -134,7 +134,7 @@ Volcanos("onaction", {help: "控件交互", list: [], location.href = "/" }, - "演示": function(event, can) { var list = [], current = [] + "play": function(event, can) { var list = [], current = [] can.page.Select(can, can._output, ".story", function(item) { switch (item.tagName) { case "H1": diff --git a/publish/chrome/popup.js b/publish/chrome/popup.js index ad909ca9..73a627ce 100644 --- a/publish/chrome/popup.js +++ b/publish/chrome/popup.js @@ -2,7 +2,7 @@ Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", volcano: "/frame libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panels: [ {name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]}, {name: "Search", help: "搜索框", pos: "auto"}, - {name: "River", help: "群聊组", pos: "left", action: ["创建", "刷新"]}, + {name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]}, {name: "Action", help: "工作台", pos: "main"}, {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]}, ], main: {name: "Header", list: ["/publish/order.js"]}, plugin: [ diff --git a/publish/client/mp/pages/action/action.js b/publish/client/mp/pages/action/action.js index c6edc618..3a0e4d63 100644 --- a/publish/client/mp/pages/action/action.js +++ b/publish/client/mp/pages/action/action.js @@ -97,14 +97,14 @@ Page({ } switch (input.name) { - case "返回": // 恢复命令 + case "back": // 恢复命令 page.data.back[data.order].pop(); var line = page.data.back[data.order].pop() kit.List(field.inputs, function(input, index) { if (input._input != "button") { input.value = line&&line[index] || "" } }) - case "执行": // 执行命令 + case "run": // 执行命令 case "刷新": // 执行命令 - case "查看": page.run(event, data.order); break + case "list": page.run(event, data.order); break default: var cb = page.plugin[input.name]; can.base.isFunc(cb)? cb(event, page, data.order, input.name): page.run(event, data.order, ["action", input.name].concat(kit.List(field.inputs, function(input) {