diff options
141 files changed, 6848 insertions, 4005 deletions
diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po index de5c1cd6e2..408d04055c 100644 --- a/applications/luci-app-adblock/po/zh-cn/adblock.po +++ b/applications/luci-app-adblock/po/zh-cn/adblock.po @@ -16,7 +16,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" msgid "'Jail' Blocklist Creation" -msgstr "" +msgstr "“Jail†拦截åå•åˆ›å»º" msgid "-------" msgstr "-------" @@ -25,6 +25,7 @@ msgid "" "<b>Caution:</b> To prevent OOM exceptions on low memory devices with less " "than 64 MB free RAM, please only select a few of them!" msgstr "" +"<b>注æ„:</b>为防æ¢åœ¨å°äºŽ 64M 空闲内å˜çš„设备上出现内å˜ä¸è¶³å¼‚常,请åªé€‰æ‹©å…¶ä¸çš„å‡ ä¸ªï¼" msgid "Adblock" msgstr "Adblock" @@ -51,7 +52,7 @@ msgid "Backup Directory" msgstr "备份目录" msgid "Backup Mode" -msgstr "" +msgstr "备份模å¼" msgid "Blocklist Sources" msgstr "拦截列表æ¥æº" @@ -82,6 +83,7 @@ msgid "" "Create compressed blocklist backups, they will be used in case of download " "errors or during startup in backup mode." msgstr "" +"创建压缩的拦截列表备份,它们将在下载错误或备份模å¼å¯åŠ¨æœŸé—´ä½¿ç”¨ã€‚" msgid "DNS Backend (DNS Directory)" msgstr "DNS åŽç«¯ï¼ˆDNS 目录)" @@ -98,7 +100,7 @@ msgid "" msgstr "å¯åŠ¨æœŸé—´ä¸è¦è‡ªåŠ¨æ›´æ–° blocklists,改用 blocklists 的备份。" msgid "Download Utility" -msgstr "" +msgstr "下载工具" msgid "Download Utility (SSL Library)" msgstr "下载实用程åºï¼ˆSSL 库)" @@ -113,10 +115,10 @@ msgid "Edit Whitelist" msgstr "编辑白åå•" msgid "Email Notification" -msgstr "" +msgstr "Email æ醒" msgid "Email Notification Count" -msgstr "" +msgstr "Email æ醒计数" msgid "Enable Adblock" msgstr "å¯ç”¨ Adblock" @@ -128,6 +130,7 @@ msgid "" "Enable memory intense overall sort / duplicate removal on low memory devices " "(< 64 MB free RAM)" msgstr "" +"在低内å˜è®¾å¤‡ä¸Šå¯ç”¨ç§¯æžçš„内å˜æ•´ä½“排åº/é‡å¤ç§»é™¤(< 64 MB 空闲内å˜)" msgid "Enable verbose debug logging in case of any processing error." msgstr "在出现任何处ç†é”™è¯¯çš„情况下å¯ç”¨è¯¦ç»†è°ƒè¯•æ—¥å¿—记录。" @@ -139,25 +142,29 @@ msgid "Extra Options" msgstr "é¢å¤–选项" msgid "Flush DNS Cache" -msgstr "" +msgstr "清空 DNS 缓å˜" msgid "Flush DNS Cache after adblock processing." -msgstr "" +msgstr "在 adblock 进程å¯åŠ¨åŽæ¸…空 DNS 缓å˜ã€‚" msgid "" "For SSL protected blocklist sources you need a suitable SSL library, e.g. " "'libustream-ssl' or 'built-in'." msgstr "" +"å¯¹å— SSL ä¿æŠ¤çš„拦截列表æºï¼Œæ‚¨éœ€è¦ä¸€ä¸ªåˆé€‚çš„ SSL 库,如 “libustream-ssl†或 " +"“built-inâ€ã€‚" msgid "" "For further information <a href=\"%s\" target=\"_blank\">check the online " "documentation</a>" msgstr "" +"进一æ¥ä¿¡æ¯<a href=\"%s\" target=\"_blank\">请访问在线文档" msgid "" "For further performance improvements you can raise this value, e.g. '8' or " "'16' should be safe." msgstr "" +"为了进一æ¥æ高性能,您å¯ä»¥æ高æ¤å€¼ï¼Œä¾‹å¦‚:8 或 16 应该是安全的。" msgid "Force Local DNS" msgstr "强制本地 DNS" @@ -166,7 +173,7 @@ msgid "Force Overall Sort" msgstr "强制整体排åº" msgid "Full path to the whitelist file." -msgstr "" +msgstr "白åå•æ–‡ä»¶çš„全路径。" msgid "Input file not found, please check your configuration." msgstr "输入文件未找到,请检查您的é…置。" @@ -178,6 +185,7 @@ msgid "" "List of available network interfaces. Usually the startup will be triggered " "by the 'wan' interface.<br />" msgstr "" +"å¯ç”¨ç½‘络接å£åˆ—表。通常å¯åŠ¨å°†ç”± “wan†接å£è§¦å‘。<br />" msgid "" "List of supported DNS backends with their default list export directory.<br /" @@ -185,13 +193,13 @@ msgid "" msgstr "支æŒçš„ DNS åŽç«¯åˆ—表åŠå…¶é»˜è®¤åˆ—表导出目录。<br />" msgid "List of supported and fully pre-configured download utilities." -msgstr "" +msgstr "支æŒå’Œå®Œå…¨é¢„é…置的下载工具列表。" msgid "Loading" msgstr "åŠ è½½ä¸" msgid "Max. Download Queue" -msgstr "" +msgstr "最大下载队列" msgid "No" msgstr "å¦" @@ -201,7 +209,7 @@ msgid "" msgstr "在默认设置并ä¸é€‚åˆæ‚¨æ—¶çš„é¢å¤–选项。" msgid "Overall Domains" -msgstr "" +msgstr "域å总览" msgid "Overview" msgstr "总览" @@ -219,6 +227,7 @@ msgstr "请在终端会è¯ä¸ç›´æŽ¥ç¼–辑æ¤æ–‡ä»¶ã€‚" msgid "" "Please note: this needs additional 'msmtp' package installation and setup." msgstr "" +"请注æ„:这需è¦é¢å¤–çš„ “msmtp†软件包安装和设置。" msgid "Query" msgstr "查询" @@ -230,6 +239,7 @@ msgid "" "Raise the minimum email notification count, to get emails if the overall " "count is less or equal to the given limit (default 0),<br />" msgstr "" +"如果总数å°äºŽæˆ–ç‰äºŽç»™å®šé™åˆ¶ï¼ˆé»˜è®¤ä¸º 0),请æ高最å°ç”µå邮件通知数,以获å–电å邮件。" msgid "Redirect all DNS queries from 'lan' zone to the local resolver." msgstr "将所有 DNS 查询从“lanâ€åŒºåŸŸé‡å®šå‘到本地解æžå™¨ã€‚" @@ -250,11 +260,13 @@ msgid "" "Send notification emails in case of a processing error or if domain count is " "≤ 0.<br />" msgstr "" +"如果å‘生错误或域计数 ≤ 0,å‘é€é€šçŸ¥ç”µå邮件。<br />" msgid "" "Size of the download queue to handle downloads & list processing in " "parallel (default '4').<br />" msgstr "" +"处ç†ä¸‹è½½é˜Ÿåˆ—çš„å¤§å° ï¼†amp; 并行处ç†åˆ—表(默认 “4â€ï¼‰ã€‚<br />" msgid "Startup Trigger" msgstr "å¯åŠ¨è§¦å‘器" @@ -269,12 +281,14 @@ msgid "" "Target directory for adblock backups. Please use only non-volatile disks, e." "g. an external usb stick." msgstr "" +"adblock å¤‡ä»½çš„ç›®æ ‡ç›®å½•ã€‚ 请仅使用éžæ˜“失性ç£ç›˜ï¼Œä¾‹å¦‚:一个外置 U 盘。" msgid "Target directory for the generated blocklist 'adb_list.overall'." msgstr "生æˆçš„ blocklist 'adb_list.overall'çš„ç›®æ ‡ç›®å½•ã€‚" msgid "The file size is too large for online editing in LuCI (≥ 100 KB)." msgstr "" +"æ–‡ä»¶è¿‡å¤§ï¼Œæ— æ³•ä½¿ç”¨ LuCI 的在线编辑(≥ 100 KB)。" msgid "" "This form allows you to modify the content of the adblock blacklist (%s)." @@ -319,7 +333,7 @@ msgid "Waiting for command to complete..." msgstr "æ£åœ¨æ‰§è¡Œå‘½ä»¤..." msgid "Whitelist File" -msgstr "" +msgstr "白åå•æ–‡ä»¶" msgid "Yes" msgstr "是" @@ -328,6 +342,7 @@ msgid "" "You can use this restrictive blocklist manually e.g. for guest wifi or " "kidsafe configurations." msgstr "" +"您å¯ä»¥æ‰‹åŠ¨ä½¿ç”¨æ¤é™åˆ¶æ€§æ‹¦æˆªåˆ—表,例如:为客人æä¾› wifi 或 kidsafe é…置。" msgid "disabled" msgstr "å·²ç¦ç”¨" @@ -335,7 +350,7 @@ msgstr "å·²ç¦ç”¨" msgid "" "e.g. to receive an email notification with every adblock update set this " "value to 150000." -msgstr "" +msgstr "例如:è¦æŽ¥æ”¶æ¯ä¸ª adblock 更新的电å邮件通知时将æ¤å€¼è®¾ç½®ä¸º150000。" msgid "enabled" msgstr "å·²å¯ç”¨" @@ -350,7 +365,7 @@ msgid "paused" msgstr "已暂åœ" msgid "running" -msgstr "" +msgstr "è¿è¡Œä¸" #~ msgid "Invalid domain specified!" #~ msgstr "æ— æ•ˆåŸŸåï¼" diff --git a/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua b/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua index 632074a56f..731c3350eb 100644 --- a/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua +++ b/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua @@ -14,7 +14,8 @@ $Id$ local wa = require "luci.tools.webadmin" local net = require "luci.model.network".init() -local ifaces = net:get_interfaces() +local sys = require "luci.sys" +local ifaces = sys.net:devices() m = Map("bcp38", translate("BCP38"), translate("This function blocks packets with private address destinations " .. @@ -37,10 +38,17 @@ a.rmempty = false n = s:option(ListValue, "interface", translate("Interface name"), translate("Interface to apply the blocking to " .. "(should be the upstream WAN interface).")) + for _, iface in ipairs(ifaces) do - if iface:is_up() then - n:value(iface:name()) - end + if not (iface == "lo" or iface:match("^ifb.*")) then + local nets = net:get_interface(iface) + nets = nets and nets:get_networks() or {} + for k, v in pairs(nets) do + nets[k] = nets[k].sid + end + nets = table.concat(nets, ",") + n:value(iface, ((#nets > 0) and "%s (%s)" % {iface, nets} or iface)) + end end n.rmempty = false diff --git a/applications/luci-app-ddns/luasrc/controller/ddns.lua b/applications/luci-app-ddns/luasrc/controller/ddns.lua index bfd7a2a414..e152bb0d98 100755 --- a/applications/luci-app-ddns/luasrc/controller/ddns.lua +++ b/applications/luci-app-ddns/luasrc/controller/ddns.lua @@ -83,12 +83,12 @@ function app_title_main() tmp[#tmp+1] = [[<a href="javascript:alert(']] tmp[#tmp+1] = I18N.translate("Version Information") tmp[#tmp+1] = [[\n\n]] .. app_name - tmp[#tmp+1] = [[\n\t]] .. I18N.translate("Version") .. [[:\t]] .. app_version + tmp[#tmp+1] = [[\n]] .. I18N.translate("Version") .. [[: ]] .. app_version tmp[#tmp+1] = [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("required") .. [[:]] - tmp[#tmp+1] = [[\n\t]] .. I18N.translate("Version") .. [[:\t]] + tmp[#tmp+1] = [[\n]] .. I18N.translate("Version") .. [[: ]] tmp[#tmp+1] = srv_ver_min .. [[ ]] .. I18N.translate("or higher") tmp[#tmp+1] = [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("installed") .. [[:]] - tmp[#tmp+1] = [[\n\t]] .. I18N.translate("Version") .. [[:\t]] + tmp[#tmp+1] = [[\n]] .. I18N.translate("Version") .. [[: ]] tmp[#tmp+1] = (service_version() or I18N.translate("NOT installed")) tmp[#tmp+1] = [[\n\n]] tmp[#tmp+1] = [[')">]] @@ -97,29 +97,20 @@ function app_title_main() return table.concat(tmp) end -function service_version() - - local nxfs = require "nixio.fs" - local ver = nil - local ver_helper +function service_version() - if nxfs.access("/bin/opkg") then - ver_helper = "/bin/opkg info " .. srv_name .. " | grep 'Version'" + local srv_ver_cmd = luci_helper .. " -V | awk {'print $2'} " + local ver + + if IPKG then + ver = IPKG.info(srv_name)[srv_name].Version else - ver_helper = luci_helper .. " -V" + ver = UTIL.exec(srv_ver_cmd) end - local srv_ver_cmd = ver_helper .. " | awk {'print $2'} " + if ver and #ver > 0 then return ver or nil end - ver = UTIL.exec(srv_ver_cmd) - if ver and #ver > 0 then return ver end - - IPKG.list_installed(srv_name, function(n, v, d) - if v and (#v > 0) then ver = v end - end - ) - return ver end function service_ok() diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua index 39895c6f0d..d51f8fb79b 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua @@ -89,6 +89,10 @@ o.rmempty = true o.datatype = "neg(portrange)" o.placeholder = translate("any") +o:depends("proto", "tcp") +o:depends("proto", "udp") +o:depends("proto", "tcp udp") +o:depends("proto", "tcpudp") o = s:option(Value, "src_dip", translate("External IP address"), @@ -109,7 +113,10 @@ o = s:option(Value, "src_dport", translate("External port"), "destination port or port range on this host")) o.datatype = "neg(portrange)" - +o:depends("proto", "tcp") +o:depends("proto", "udp") +o:depends("proto", "tcp udp") +o:depends("proto", "tcpudp") o = s:option(Value, "dest", translate("Internal zone")) o.nocreate = true @@ -134,6 +141,10 @@ o = s:option(Value, "dest_port", o.placeholder = translate("any") o.datatype = "portrange" +o:depends("proto", "tcp") +o:depends("proto", "udp") +o:depends("proto", "tcp udp") +o:depends("proto", "tcpudp") o = s:option(Flag, "reflection", translate("Enable NAT Loopback")) o.rmempty = true diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua index e61ce73cdd..5d1ffe0913 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua @@ -54,7 +54,7 @@ function s.parse(self, ...) if created then m.uci:save("firewall") luci.http.redirect(ds.build_url( - "admin/network/firewall/redirect", created + "admin/network/firewall/forwards", created )) end end @@ -63,8 +63,9 @@ function s.filter(self, sid) return (self.map:get(sid, "target") ~= "SNAT") end - -ft.opt_name(s, DummyValue, translate("Name")) +function s.sectiontitle(self, sid) + return (self.map:get(sid, "name") or translate("Unnamed forward")) +end local function forward_proto_txt(self, s) @@ -103,7 +104,6 @@ end match = s:option(DummyValue, "match", translate("Match")) match.rawhtml = true -match.width = "50%" function match.cfgvalue(self, s) return "<small>%s<br />%s<br />%s</small>" % { forward_proto_txt(self, s), @@ -115,7 +115,6 @@ end dest = s:option(DummyValue, "dest", translate("Forward to")) dest.rawhtml = true -dest.width = "40%" function dest.cfgvalue(self, s) local z = ft.fmt_zone(self.map:get(s, "dest"), translate("any zone")) local a = ft.fmt_ip(self.map:get(s, "dest_ip"), translate("any host")) @@ -129,6 +128,6 @@ function dest.cfgvalue(self, s) end end -ft.opt_enabled(s, Flag, translate("Enable")).width = "1%" +ft.opt_enabled(s, Flag, translate("Enable")) return m diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua index fffa64dad7..a4763d5dc4 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua @@ -115,6 +115,10 @@ elseif rule_type == "redirect" then o.datatype = "neg(portrange)" o.placeholder = translate("any") + o:depends("proto", "tcp") + o:depends("proto", "udp") + o:depends("proto", "tcp udp") + o:depends("proto", "tcpudp") o = s:option(Value, "dest", translate("Destination zone")) o.nocreate = true @@ -139,6 +143,10 @@ elseif rule_type == "redirect" then o.placeholder = translate("any") o.datatype = "neg(portrange)" + o:depends("proto", "tcp") + o:depends("proto", "udp") + o:depends("proto", "tcp udp") + o:depends("proto", "tcpudp") o = s:option(Value, "src_dip", translate("SNAT IP address"), @@ -163,6 +171,10 @@ elseif rule_type == "redirect" then o.rmempty = true o.placeholder = translate('Do not rewrite') + o:depends("proto", "tcp") + o:depends("proto", "udp") + o:depends("proto", "tcp udp") + o:depends("proto", "tcpudp") s:option(Value, "extra", translate("Extra arguments"), @@ -212,7 +224,13 @@ else end - o = s:option(DynamicList, "icmp_type", translate("Match ICMP type")) + o = s:option(DropDown, "icmp_type", translate("Match ICMP type")) + o.multiple = true + o.display = 10 + o.dropdown = 10 + o.custom = true + o.cast = "table" + o:value("", "any") o:value("echo-reply") o:value("destination-unreachable") @@ -251,6 +269,8 @@ else o:value("address-mask-request") o:value("address-mask-reply") + o:depends("proto", "icmp") + o = s:option(Value, "src", translate("Source zone")) o.nocreate = true @@ -269,7 +289,7 @@ else o = s:option(Value, "src_ip", translate("Source address")) - o.datatype = "neg(ipmask)" + o.datatype = "list(neg(ipmask))" o.placeholder = translate("any") luci.sys.net.ipv4_hints(function(ip, name) @@ -281,11 +301,14 @@ else o.datatype = "list(neg(portrange))" o.placeholder = translate("any") + o:depends("proto", "tcp") + o:depends("proto", "udp") + o:depends("proto", "tcp udp") + o:depends("proto", "tcpudp") o = s:option(Value, "dest_local", translate("Output zone")) o.nocreate = true o.allowany = true - o.rmempty = false o.template = "cbi/firewall_zonelist" o.alias = "dest" o:depends("src", "") @@ -300,7 +323,7 @@ else o = s:option(Value, "dest_ip", translate("Destination address")) - o.datatype = "neg(ipmask)" + o.datatype = "list(neg(ipmask))" o.placeholder = translate("any") luci.sys.net.ipv4_hints(function(ip, name) @@ -312,6 +335,10 @@ else o.datatype = "list(neg(portrange))" o.placeholder = translate("any") + o:depends("proto", "tcp") + o:depends("proto", "udp") + o:depends("proto", "tcp udp") + o:depends("proto", "tcpudp") o = s:option(ListValue, "target", translate("Action")) o.default = "ACCEPT" diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua index 22dec5ee6b..f4b6b2a928 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua @@ -72,7 +72,9 @@ function s.parse(self, ...) end end -ft.opt_name(s, DummyValue, translate("Name")) +function s.sectiontitle(self, sid) + return (self.map:get(sid, "name") or translate("Unnamed rule")) +end local function rule_proto_txt(self, s) local f = self.map:get(s, "family") @@ -159,7 +161,6 @@ end match = s:option(DummyValue, "match", translate("Match")) match.rawhtml = true -match.width = "70%" function match.cfgvalue(self, s) return "<small>%s<br />%s<br />%s</small>" % { rule_proto_txt(self, s), @@ -170,7 +171,6 @@ end target = s:option(DummyValue, "target", translate("Action")) target.rawhtml = true -target.width = "20%" function target.cfgvalue(self, s) local t = ft.fmt_target(self.map:get(s, "target"), self.map:get(s, "src"), self.map:get(s, "dest")) local l = ft.fmt_limit(self.map:get(s, "limit"), @@ -183,7 +183,7 @@ function target.cfgvalue(self, s) end end -ft.opt_enabled(s, Flag, translate("Enable")).width = "1%" +ft.opt_enabled(s, Flag, translate("Enable")) -- @@ -240,11 +240,12 @@ function s.filter(self, sid) return (self.map:get(sid, "target") == "SNAT") end -ft.opt_name(s, DummyValue, translate("Name")) +function s.sectiontitle(self, sid) + return (self.map:get(sid, "name") or translate("Unnamed SNAT")) +end match = s:option(DummyValue, "match", translate("Match")) match.rawhtml = true -match.width = "70%" function match.cfgvalue(self, s) return "<small>%s<br />%s<br />%s</small>" % { rule_proto_txt(self, s), @@ -255,7 +256,6 @@ end snat = s:option(DummyValue, "via", translate("Action")) snat.rawhtml = true -snat.width = "20%" function snat.cfgvalue(self, s) local a = ft.fmt_ip(self.map:get(s, "src_dip")) local p = ft.fmt_port(self.map:get(s, "src_dport")) @@ -267,7 +267,7 @@ function snat.cfgvalue(self, s) end end -ft.opt_enabled(s, Flag, translate("Enable")).width = "1%" +ft.opt_enabled(s, Flag, translate("Enable")) return m diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua index 2c5083a019..46402a8fc1 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua @@ -62,6 +62,11 @@ s.anonymous = true s.addremove = true s.extedit = ds.build_url("admin", "network", "firewall", "zones", "%s") +function s.sectiontitle(self, sid) + local z = fw:get_zone(sid) + return z:name() +end + function s.create(self) local z = fw:new_zone() if z then diff --git a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm index 279b6e06d6..f48599b505 100644 --- a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm +++ b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm @@ -18,95 +18,91 @@ vals[#vals+1] = '%s (%s)' %{ ip, name } end) -%> -<div class="cbi-section-create cbi-tblsection-create"> - <br /> - <div class="table cbi-section-table" style="width:810px; margin-left:5px"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell" colspan="8"><%:New port forward%>:</div> + +<h4><%:New port forward%></h4> +<div class="table"> + <div class="tr table-titles"> + <div class="th"><%:Name%></div> + <div class="th"><%:Protocol%></div> + <div class="th"><%:External zone%></div> + <div class="th"><%:External port%></div> + <div class="th"><%:Internal zone%></div> + <div class="th"><%:Internal IP address%></div> + <div class="th"><%:Internal port%></div> + <div class="th"></div> + </div> + <div class="tr"> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newfwd.name" name="_newfwd.name" placeholder="<%:New port forward%>" /> + </div> + <div class="td"> + <select class="cbi-input-select" id="_newfwd.proto" name="_newfwd.proto"> + <option value="tcp udp">TCP+UDP</option> + <option value="tcp">TCP</option> + <option value="udp">UDP</option> + <option value="other"><%:Other...%></option> + </select> + </div> + <div class="td"> + <select class="cbi-input-select" id="_newfwd.extzone" name="_newfwd.extzone"> + <% for _, z in ipairs(ezl) do -%><option value="<%=z:name()%>"><%=z:name()%></option><%- end %> + </select> + </div> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newfwd.extport" name="_newfwd.extport" data-type="portrange" data-optional="true" /> + </div> + <div class="td"> + <select class="cbi-input-select" id="_newfwd.intzone" name="_newfwd.intzone"> + <% for _, z in ipairs(izl) do -%><option value="<%=z:name()%>"><%=z:name()%></option><%- end %> + </select> + </div> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newfwd.intaddr" name="_newfwd.intaddr" data-type="host" data-optional="true"<%= + ifattr(#keys > 0, "data-choices", {keys, vals}) + %>/> </div> - <div class="tr cbi-section-table-descr"> - <div class="th cbi-section-table-cell"><%:Name%></div> - <div class="th cbi-section-table-cell"><%:Protocol%></div> - <div class="th cbi-section-table-cell"><%:External zone%></div> - <div class="th cbi-section-table-cell"><%:External port%></div> - <div class="th cbi-section-table-cell"><%:Internal zone%></div> - <div class="th cbi-section-table-cell"><%:Internal IP address%></div> - <div class="th cbi-section-table-cell"><%:Internal port%></div> - <div class="th cbi-section-table-cell"></div> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newfwd.intport" name="_newfwd.intport" data-type="portrange" data-optional="true" /> </div> - <div class="tr cbi-section-table-row"> - <div class="td cbi-section-table-cell"> - <input type="text" class="cbi-input-text" id="_newfwd.name" name="_newfwd.name" placeholder="<%:New port forward%>" /> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <select class="cbi-input-select" id="_newfwd.proto" name="_newfwd.proto"> - <option value="tcp udp">TCP+UDP</option> - <option value="tcp">TCP</option> - <option value="udp">UDP</option> - <option value="other"><%:Other...%></option> - </select> - </div> - <div class="td cbi-section-table-cell" style="width:55px"> - <select class="cbi-input-select" id="_newfwd.extzone" name="_newfwd.extzone"> - <% for _, z in ipairs(ezl) do -%><option value="<%=z:name()%>"><%=z:name()%></option><%- end %> - </select> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <input type="text" class="cbi-input-text" id="_newfwd.extport" name="_newfwd.extport" data-type="portrange" data-optional="true" /> - </div> - <div class="td cbi-section-table-cell" style="width:55px"> - <select class="cbi-input-select" id="_newfwd.intzone" name="_newfwd.intzone"> - <% for _, z in ipairs(izl) do -%><option value="<%=z:name()%>"><%=z:name()%></option><%- end %> - </select> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <input type="text" class="cbi-input-text" id="_newfwd.intaddr" name="_newfwd.intaddr" data-type="host" data-optional="true"<%= - ifattr(#keys > 0, "data-choices", {keys, vals}) - %>/> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <input type="text" class="cbi-input-text" id="_newfwd.intport" name="_newfwd.intport" data-type="portrange" data-optional="true" /> - </div> - <div class="td cbi-section-table-cell"> - <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> - </div> + <div class="td bottom"> + <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> </div> </div> +</div> - <script type="text/javascript">//<![CDATA[ - cbi_bind(document.getElementById('_newfwd.extport'), 'blur', - function() { - var n = document.getElementById('_newfwd.name'); - var p = document.getElementById('_newfwd.proto'); - var i = document.getElementById('_newfwd.intport'); - var hints = { - /* port name 0=both, 1=tcp, 2=udp, 3=other */ - 21: [ 'FTP', 1 ], - 22: [ 'SSH', 1 ], - 53: [ 'DNS', 0 ], - 80: [ 'HTTP', 1 ], - 443: [ 'HTTPS', 1 ], - 3389: [ 'RDP', 1 ], - 5900: [ 'VNC', 1 ], - }; +<script type="text/javascript">//<![CDATA[ + cbi_bind(document.getElementById('_newfwd.extport'), 'blur', + function() { + var n = document.getElementById('_newfwd.name'); + var p = document.getElementById('_newfwd.proto'); + var i = document.getElementById('_newfwd.intport'); + var hints = { + /* port name 0=both, 1=tcp, 2=udp, 3=other */ + 21: [ 'FTP', 1 ], + 22: [ 'SSH', 1 ], + 53: [ 'DNS', 0 ], + 80: [ 'HTTP', 1 ], + 443: [ 'HTTPS', 1 ], + 3389: [ 'RDP', 1 ], + 5900: [ 'VNC', 1 ], + }; - if (!this.className.match(/invalid/)) - { - if (!i.value) i.value = this.value; + if (!this.className.match(/invalid/)) + { + if (!i.value) i.value = this.value; - var hint = hints[this.value || 0] || hints[i.value || 0]; - if (hint) - { - p.selectedIndex = hint[1]; + var hint = hints[this.value || 0] || hints[i.value || 0]; + if (hint) + { + p.selectedIndex = hint[1]; - if (!n.value) - n.value = hint[0]; - } - else if (!n.value) - { - n.value = 'Forward' + this.value; - } + if (!n.value) + n.value = hint[0]; } - }); - //]]></script> -</div> + else if (!n.value) + { + n.value = 'Forward' + this.value; + } + } + }); +//]]></script> diff --git a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm index c99ecaca37..273675cd30 100644 --- a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm +++ b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm @@ -5,112 +5,105 @@ local zones = fw:get_zones() %> -<div class="cbi-section-create cbi-tblsection-create"> - <% if wz then %> - <br /> - <div class="table cbi-section-table" style="margin-left:5px"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell left" colspan="4"><%:Open ports on router%>:</div> +<% if wz then %> + <h4><%:Open ports on router%></h4> + <div class="table"> + <div class="tr cbi-section-table-titles"> + <div class="th"><%:Name%></div> + <div class="th"><%:Protocol%></div> + <div class="th"><%:External port%></div> + <div class="th"></div> + </div> + <div class="tr"> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newopen.name" name="_newopen.name" placeholder="<%:New input rule%>" /> + </div> + <div class="td"> + <select class="cbi-input-select" id="_newopen.proto" name="_newopen.proto"> + <option value="tcp udp">TCP+UDP</option> + <option value="tcp">TCP</option> + <option value="udp">UDP</option> + <option value="other"><%:Other...%></option> + </select> </div> - <div class="tr cbi-section-table-descr"> - <div class="th cbi-section-table-cell"><%:Name%></div> - <div class="th cbi-section-table-cell"><%:Protocol%></div> - <div class="th cbi-section-table-cell"><%:External port%></div> - <div class="th cbi-section-table-cell"></div> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newopen.extport" name="_newopen.extport" /> </div> - <div class="tr cbi-section-table-row"> - <div class="td cbi-section-table-cell" style="width:130px"> - <input type="text" class="cbi-input-text" id="_newopen.name" name="_newopen.name" placeholder="<%:New input rule%>" /> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <select class="cbi-input-select" id="_newopen.proto" name="_newopen.proto"> - <option value="tcp udp">TCP+UDP</option> - <option value="tcp">TCP</option> - <option value="udp">UDP</option> - <option value="other"><%:Other...%></option> - </select> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <input type="text" class="cbi-input-text" id="_newopen.extport" name="_newopen.extport" /> - </div> - <div class="td cbi-section-table-cell left"> - <input type="submit" class="cbi-button cbi-button-add" name="_newopen.submit" value="<%:Add%>" /> - </div> + <div class="td bottom"> + <input type="submit" class="cbi-button cbi-button-add" name="_newopen.submit" value="<%:Add%>" /> </div> </div> - <% end %> - <% if #zones > 1 then %> - <div class="table cbi-section-table" style="margin-left:5px"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell left" colspan="6"><br /><%:New forward rule%>:</div> + </div> +<% end %> +<% if #zones > 1 then %> + <h4><%:New forward rule%></h4> + <div class="table"> + <div class="tr cbi-section-table-titles"> + <div class="th"><%:Name%></div> + <div class="th"><%:Source zone%></div> + <div class="th"><%:Destination zone%></div> + <div class="th"></div> + </div> + <div class="tr"> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newfwd.name" name="_newfwd.name" placeholder="<%:New forward rule%>" /> </div> - <div class="tr cbi-section-table-descr"> - <div class="th cbi-section-table-cell"><%:Name%></div> - <div class="th cbi-section-table-cell"><%:Source zone%></div> - <div class="th cbi-section-table-cell"><%:Destination zone%></div> - <div class="th cbi-section-table-cell"></div> + <div class="td"> + <select class="cbi-input-text" id="_newfwd.src" name="_newfwd.src"> + <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> + <option<%=ifattr(v:name() == "wan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> + <%- end %> + </select> </div> - <div class="tr cbi-section-table-row"> - <div class="td cbi-section-table-cell" style="width:130px"> - <input type="text" class="cbi-input-text" id="_newfwd.name" name="_newfwd.name" placeholder="<%:New forward rule%>" /> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <select class="cbi-input-text" id="_newfwd.src" name="_newfwd.src"> - <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> - <option<%=ifattr(v:name() == "wan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> - <%- end %> - </select> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <select class="cbi-input-text" id="_newfwd.dest" name="_newfwd.dest"> - <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> - <option<%=ifattr(v:name() == "lan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> - <%- end %> - </select> - </div> - <div class="td cbi-section-table-cell left"> - <input type="submit" class="cbi-button cbi-button-link" name="_newfwd.submit" value="<%:Add and edit...%>" /> - </div> + <div class="td"> + <select class="cbi-input-text" id="_newfwd.dest" name="_newfwd.dest"> + <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> + <option<%=ifattr(v:name() == "lan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> + <%- end %> + </select> + </div> + <div class="td bottom"> + <input type="submit" class="cbi-button cbi-button-link" name="_newfwd.submit" value="<%:Add and edit...%>" /> </div> </div> - <% else %> - <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> - <% end %> + </div> +<% else %> + <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> +<% end %> - <% if wz then %> - <script type="text/javascript">//<![CDATA[ - cbi_validate_field('_newopen.extport', true, 'list(neg(portrange))'); - cbi_bind(document.getElementById('_newopen.extport'), 'blur', - function() { - var n = document.getElementById('_newopen.name'); - var p = document.getElementById('_newopen.proto'); - var hints = { - /* port name 0=both, 1=tcp, 2=udp, 3=other */ - 22: [ 'SSH', 1 ], - 53: [ 'DNS', 0 ], - 80: [ 'HTTP', 1 ], - 443: [ 'HTTPS', 1 ], - }; +<% if wz then %> + <script type="text/javascript">//<![CDATA[ + cbi_validate_field('_newopen.extport', true, 'list(neg(portrange))'); + cbi_bind(document.getElementById('_newopen.extport'), 'blur', + function() { + var n = document.getElementById('_newopen.name'); + var p = document.getElementById('_newopen.proto'); + var hints = { + /* port name 0=both, 1=tcp, 2=udp, 3=other */ + 22: [ 'SSH', 1 ], + 53: [ 'DNS', 0 ], + 80: [ 'HTTP', 1 ], + 443: [ 'HTTPS', 1 ], + }; - if (!this.className.match(/invalid/)) + if (!this.className.match(/invalid/)) + { + var hint = hints[this.value || 0]; + if (hint) { - var hint = hints[this.value || 0]; - if (hint) - { - p.selectedIndex = hint[1]; + p.selectedIndex = hint[1]; - if (!n.value) - n.value = hint[0]; - } - else if (!n.value && this.value) - { - n.value = 'Open' + this.value; - } + if (!n.value) + n.value = hint[0]; + } + else if (!n.value && this.value) + { + n.value = 'Open' + this.value; } - }); + } + }); - cbi_validate_field('cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>', true, 'uciname'); - //]]></script> - <% end %> -</div> + cbi_validate_field('cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>', true, 'uciname'); + //]]></script> +<% end %> diff --git a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm index b2775cf694..0b4774ccc0 100644 --- a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm +++ b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm @@ -12,53 +12,48 @@ end %> -<div class="cbi-section-create cbi-tblsection-create"> - <% if #zones > 1 then %> - <br /> - <div class="table cbi-section-table" style="width:700px; margin-left:5px"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell left" colspan="6"><%:New source NAT%>:</div> +<% if #zones > 1 then %> + <h4><%:New source NAT%></h4> + <div class="table"> + <div class="tr cbi-section-table-titles"> + <div class="th"><%:Name%></div> + <div class="th"><%:Source zone%></div> + <div class="th"><%:Destination zone%></div> + <div class="th"><%:To source IP%></div> + <div class="th"><%:To source port%></div> + <div class="th"></div> + </div> + <div class="tr"> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newsnat.name" name="_newsnat.name" placeholder="<%:New SNAT rule%>" /> + </div> + <div class="td"> + <select class="cbi-input-text" id="_newsnat.src" name="_newsnat.src"> + <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> + <option<%=ifattr(v:name() == "lan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> + <%- end %> + </select> + </div> + <div class="td"> + <select class="cbi-input-text" id="_newsnat.dest" name="_newsnat.dest"> + <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> + <option<%=ifattr(v:name() == "wan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> + <%- end %> + </select> + </div> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newsnat.dip" name="_newsnat.dip" placeholder="<%:Do not rewrite%>" data-type="ip4addr" data-optional="true"<%= + ifattr(#keys > 0, "data-choices", { keys, vals }) + %> /> </div> - <div class="tr cbi-section-table-descr"> - <div class="th cbi-section-table-cell"><%:Name%></div> - <div class="th cbi-section-table-cell"><%:Source zone%></div> - <div class="th cbi-section-table-cell"><%:Destination zone%></div> - <div class="th cbi-section-table-cell"><%:To source IP%></div> - <div class="th cbi-section-table-cell"><%:To source port%></div> - <div class="th cbi-section-table-cell"></div> + <div class="td"> + <input type="text" class="cbi-input-text" id="_newsnat.dport" name="_newsnat.dport" placeholder="<%:Do not rewrite%>" data-type="portrange" data-optional="true" /> </div> - <div class="tr cbi-section-table-row"> - <div class="td cbi-section-table-cell"> - <input type="text" class="cbi-input-text" id="_newsnat.name" name="_newsnat.name" placeholder="<%:New SNAT rule%>" /> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <select class="cbi-input-text" id="_newsnat.src" name="_newsnat.src"> - <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> - <option<%=ifattr(v:name() == "lan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> - <%- end %> - </select> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <select class="cbi-input-text" id="_newsnat.dest" name="_newsnat.dest"> - <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> - <option<%=ifattr(v:name() == "wan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> - <%- end %> - </select> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <input type="text" class="cbi-input-text" id="_newsnat.dip" name="_newsnat.dip" placeholder="<%:Do not rewrite%>" data-type="ip4addr" data-optional="true"<%= - ifattr(#keys > 0, "data-choices", { keys, vals }) - %> /> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <input type="text" class="cbi-input-text" id="_newsnat.dport" name="_newsnat.dport" placeholder="<%:Do not rewrite%>" data-type="portrange" data-optional="true" /> - </div> - <div class="td cbi-section-table-cell"> - <input type="submit" class="cbi-button cbi-button-link" name="_newsnat.submit" value="<%:Add and edit...%>" /> - </div> + <div class="td bottom"> + <input type="submit" class="cbi-button cbi-button-link" name="_newsnat.submit" value="<%:Add and edit...%>" /> </div> </div> - <% else %> - <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> - <% end %> -</div> + </div> +<% else %> + <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> +<% end %> diff --git a/applications/luci-app-firewall/po/ca/firewall.po b/applications/luci-app-firewall/po/ca/firewall.po index b206fce1e4..e1e553abba 100644 --- a/applications/luci-app-firewall/po/ca/firewall.po +++ b/applications/luci-app-firewall/po/ca/firewall.po @@ -48,6 +48,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Acció" @@ -106,6 +109,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "No reescriguis" @@ -115,6 +121,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Descarta els paquets invà lids" @@ -181,6 +190,15 @@ msgstr "Des de %s en %s amb origen %s" msgid "From %s in %s with source %s and %s" msgstr "Des de %s en %s amb orÃgens %s i %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Ajusts generals" @@ -346,6 +364,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -534,6 +555,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "Via %s" diff --git a/applications/luci-app-firewall/po/cs/firewall.po b/applications/luci-app-firewall/po/cs/firewall.po index 3ecd433a7d..727e40d5be 100644 --- a/applications/luci-app-firewall/po/cs/firewall.po +++ b/applications/luci-app-firewall/po/cs/firewall.po @@ -44,6 +44,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Akce" @@ -101,6 +104,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "NepÅ™episovat" @@ -110,6 +116,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Zahazovat neplatné pakety" @@ -176,6 +185,15 @@ msgstr "Z %s v %s se zdrojovou %s" msgid "From %s in %s with source %s and %s" msgstr "Z %s v %s se zdrojovou %s a %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Obecné nastavenÃ" @@ -343,6 +361,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -529,6 +550,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "ProstÅ™ednictvÃm %s" diff --git a/applications/luci-app-firewall/po/de/firewall.po b/applications/luci-app-firewall/po/de/firewall.po index e39d4f8566..9b6d2a01aa 100644 --- a/applications/luci-app-firewall/po/de/firewall.po +++ b/applications/luci-app-firewall/po/de/firewall.po @@ -46,6 +46,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Aktion" @@ -104,6 +107,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Nicht umschreiben" @@ -113,6 +119,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Ungültige Pakete verwerfen" @@ -179,6 +188,15 @@ msgstr "Von %s in %s mit Quell-%s" msgid "From %s in %s with source %s and %s" msgstr "Von %s in %s mit Quell-%s und %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Allgemein" @@ -343,6 +361,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -533,6 +554,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "Ãœber %s" diff --git a/applications/luci-app-firewall/po/el/firewall.po b/applications/luci-app-firewall/po/el/firewall.po index 783fcd462c..00b61d857d 100644 --- a/applications/luci-app-firewall/po/el/firewall.po +++ b/applications/luci-app-firewall/po/el/firewall.po @@ -46,6 +46,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "ΕνÎÏγεια" @@ -101,6 +104,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -110,6 +116,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Αγνόηση μη-ÎγκυÏων πακετών" @@ -177,6 +186,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "ΓενικÎÏ‚ Ρυθμίσεις" @@ -336,6 +354,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -501,6 +522,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/en/firewall.po b/applications/luci-app-firewall/po/en/firewall.po index 9d9166d68f..0de68d5c03 100644 --- a/applications/luci-app-firewall/po/en/firewall.po +++ b/applications/luci-app-firewall/po/en/firewall.po @@ -44,6 +44,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Action" @@ -98,6 +101,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -107,6 +113,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Drop invalid packets" @@ -177,6 +186,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "" @@ -336,6 +354,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -528,6 +549,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/es/firewall.po b/applications/luci-app-firewall/po/es/firewall.po index e96fecad99..fbb63ed330 100644 --- a/applications/luci-app-firewall/po/es/firewall.po +++ b/applications/luci-app-firewall/po/es/firewall.po @@ -47,6 +47,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Acción" @@ -105,6 +108,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "No reescribir" @@ -114,6 +120,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Descartar paquetes no válidos" @@ -180,6 +189,15 @@ msgstr "Desde %s en %s con origen %s" msgid "From %s in %s with source %s and %s" msgstr "Desde %s en %s con origen %s y %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Configuración general" @@ -345,6 +363,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -532,6 +553,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "VÃa %s" diff --git a/applications/luci-app-firewall/po/fr/firewall.po b/applications/luci-app-firewall/po/fr/firewall.po index 4a34064868..644f5c3b6b 100644 --- a/applications/luci-app-firewall/po/fr/firewall.po +++ b/applications/luci-app-firewall/po/fr/firewall.po @@ -46,6 +46,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Action" @@ -100,6 +103,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -109,6 +115,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Supprimer les paquets invalides" @@ -179,6 +188,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Paramètres généraux" @@ -341,6 +359,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -554,6 +575,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/he/firewall.po b/applications/luci-app-firewall/po/he/firewall.po index 5511e8ab10..55b15b2c37 100644 --- a/applications/luci-app-firewall/po/he/firewall.po +++ b/applications/luci-app-firewall/po/he/firewall.po @@ -41,6 +41,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "" @@ -95,6 +98,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -104,6 +110,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "" @@ -170,6 +179,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "" @@ -326,6 +344,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -486,6 +507,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/hu/firewall.po b/applications/luci-app-firewall/po/hu/firewall.po index 30c242913d..6abda1e27d 100644 --- a/applications/luci-app-firewall/po/hu/firewall.po +++ b/applications/luci-app-firewall/po/hu/firewall.po @@ -44,6 +44,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Művelet" @@ -102,6 +105,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Ne Ãrja felül" @@ -111,6 +117,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Érvénytelen csomagok eldobása" @@ -177,6 +186,15 @@ msgstr "%s felÅ‘l %s-ben %s forrással" msgid "From %s in %s with source %s and %s" msgstr "%s felÅ‘l %s-ben %s és %s forrással" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Ãltalános beállÃtások" @@ -347,6 +365,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -536,6 +557,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "%s-en át" diff --git a/applications/luci-app-firewall/po/it/firewall.po b/applications/luci-app-firewall/po/it/firewall.po index e26c504b95..ca7faa7f26 100644 --- a/applications/luci-app-firewall/po/it/firewall.po +++ b/applications/luci-app-firewall/po/it/firewall.po @@ -46,6 +46,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Azione" @@ -104,6 +107,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Non riscrivere" @@ -113,6 +119,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Scarta pacchetti invalidi" @@ -179,6 +188,15 @@ msgstr "Da %s a %s con sorgente %s" msgid "From %s in %s with source %s and %s" msgstr "Da %s a %s con sorgente %s e %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Opzioni Generali" @@ -343,6 +361,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -552,6 +573,15 @@ msgstr "" msgid "Tuesday" msgstr "Martedì" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/ja/firewall.po b/applications/luci-app-firewall/po/ja/firewall.po index d4cf84c956..6cc4714113 100644 --- a/applications/luci-app-firewall/po/ja/firewall.po +++ b/applications/luci-app-firewall/po/ja/firewall.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-30 17:00+0200\n" -"PO-Revision-Date: 2018-05-27 21:24+0900\n" +"PO-Revision-Date: 2018-06-30 23:19+0900\n" "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language: ja\n" "MIME-Version: 1.0\n" @@ -47,6 +47,9 @@ msgstr "転é€ã‚’許å¯" msgid "Accept input" msgstr "入力を許å¯" +msgid "Accept output" +msgstr "出力を許å¯" + msgid "Action" msgstr "動作" @@ -105,6 +108,9 @@ msgstr "転é€ã‚’ç ´æ£„" msgid "Discard input" msgstr "å…¥åŠ›ã‚’ç ´æ£„" +msgid "Discard output" +msgstr "å‡ºåŠ›ã‚’ç ´æ£„" + msgid "Do not rewrite" msgstr "リライトã—ãªã„" @@ -114,6 +120,9 @@ msgstr "転é€ã‚’追跡ã—ãªã„" msgid "Do not track input" msgstr "入力を追跡ã—ãªã„" +msgid "Do not track output" +msgstr "出力を追跡ã—ãªã„" + msgid "Drop invalid packets" msgstr "無効ãªãƒ‘ケットをé®æ–ã™ã‚‹" @@ -175,10 +184,19 @@ msgid "From %s in %s" msgstr "é€ä¿¡å…ƒ %s (%s)" msgid "From %s in %s with source %s" -msgstr "é€ä¿¡å…ƒ %s (%s) , é€ä¿¡å…ƒ %s" +msgstr "é€ä¿¡å…ƒ %s (%s) , %s" msgid "From %s in %s with source %s and %s" -msgstr "é€ä¿¡å…ƒ %s (%s) , é€ä¿¡å…ƒ %s, é€ä¿¡å…ƒ %s" +msgstr "é€ä¿¡å…ƒ %s (%s) , %s, %s" + +msgid "From %s on <var>this device</var>" +msgstr "é€ä¿¡å…ƒ %s (<var>デãƒã‚¤ã‚¹</var>)" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "é€ä¿¡å…ƒ %s, %s (<var>デãƒã‚¤ã‚¹</var>)" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "é€ä¿¡å…ƒ %s, %s, %s (<var>デãƒã‚¤ã‚¹</var>)" msgid "General Settings" msgstr "一般è¨å®š" @@ -317,7 +335,7 @@ msgid "Output" msgstr "é€ä¿¡" msgid "Output zone" -msgstr "" +msgstr "出力ゾーン" msgid "Passes additional arguments to iptables. Use with care!" msgstr "" @@ -352,6 +370,9 @@ msgstr "転é€ã‚’æ‹’å¦" msgid "Refuse input" msgstr "入力を拒å¦" +msgid "Refuse output" +msgstr "出力を拒å¦" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ NAT サãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™ã€‚ mt7621 ã®ã¿ã«ãŠã„ã¦å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã™ã€‚" @@ -569,6 +590,15 @@ msgstr "" msgid "Tuesday" msgstr "ç«æ›œæ—¥" +msgid "Unnamed SNAT" +msgstr "å称未è¨å®šã® SNAT" + +msgid "Unnamed forward" +msgstr "å称未è¨å®šã®è»¢é€" + +msgid "Unnamed rule" +msgstr "å称未è¨å®šã®ãƒ«ãƒ¼ãƒ«" + msgid "Via %s" msgstr "経由 %s" diff --git a/applications/luci-app-firewall/po/ko/firewall.po b/applications/luci-app-firewall/po/ko/firewall.po index 5c3d02c1e2..6b07c69dbd 100644 --- a/applications/luci-app-firewall/po/ko/firewall.po +++ b/applications/luci-app-firewall/po/ko/firewall.po @@ -46,6 +46,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "" @@ -103,6 +106,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -112,6 +118,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "" @@ -178,6 +187,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "" @@ -336,6 +354,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -520,6 +541,15 @@ msgstr "" msgid "Tuesday" msgstr "화요ì¼" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/ms/firewall.po b/applications/luci-app-firewall/po/ms/firewall.po index 9688622ba4..42bc606a0b 100644 --- a/applications/luci-app-firewall/po/ms/firewall.po +++ b/applications/luci-app-firewall/po/ms/firewall.po @@ -40,6 +40,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "" @@ -94,6 +97,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -103,6 +109,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "" @@ -169,6 +178,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "" @@ -325,6 +343,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -485,6 +506,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/no/firewall.po b/applications/luci-app-firewall/po/no/firewall.po index d59fec3646..0b9fdc6082 100644 --- a/applications/luci-app-firewall/po/no/firewall.po +++ b/applications/luci-app-firewall/po/no/firewall.po @@ -41,6 +41,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Handling" @@ -98,6 +101,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Ikke omskriv" @@ -107,6 +113,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Forkast ugyldige pakker" @@ -174,6 +183,15 @@ msgstr "Fra %s i %s med kilde %s" msgid "From %s in %s with source %s and %s" msgstr "Fra %s i %s med kilde %s og %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Generelle Innstillinger" @@ -342,6 +360,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -530,6 +551,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "Via %s" diff --git a/applications/luci-app-firewall/po/pl/firewall.po b/applications/luci-app-firewall/po/pl/firewall.po index 7c087ef02b..5881f1519a 100644 --- a/applications/luci-app-firewall/po/pl/firewall.po +++ b/applications/luci-app-firewall/po/pl/firewall.po @@ -48,6 +48,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "DziaÅ‚anie" @@ -105,6 +108,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Nie przepisuj" @@ -114,6 +120,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Porzuć wadliwe pakiety" @@ -183,6 +192,15 @@ msgstr "Z %s w %s ze źródÅ‚em %s" msgid "From %s in %s with source %s and %s" msgstr "Z %s w %s ze źródÅ‚em %s i %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Ustawienia ogólne" @@ -351,6 +369,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -543,6 +564,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "Przez %s" diff --git a/applications/luci-app-firewall/po/pt-br/firewall.po b/applications/luci-app-firewall/po/pt-br/firewall.po index bfcdd54d9b..116bf6a633 100644 --- a/applications/luci-app-firewall/po/pt-br/firewall.po +++ b/applications/luci-app-firewall/po/pt-br/firewall.po @@ -46,6 +46,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Ação" @@ -103,6 +106,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Não sobrescreva" @@ -112,6 +118,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Descartar pacotes inválidos" @@ -178,6 +187,15 @@ msgstr "Vindo de %s em %s com origem %s" msgid "From %s in %s with source %s and %s" msgstr "Vindo de %s em %s com origem %s e %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Configurações Gerais" @@ -346,6 +364,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -533,6 +554,15 @@ msgstr "" msgid "Tuesday" msgstr "Terça-feira" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "Via %s" diff --git a/applications/luci-app-firewall/po/pt/firewall.po b/applications/luci-app-firewall/po/pt/firewall.po index 2536b7a369..901fd6a847 100644 --- a/applications/luci-app-firewall/po/pt/firewall.po +++ b/applications/luci-app-firewall/po/pt/firewall.po @@ -46,6 +46,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Acção" @@ -104,6 +107,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Não re-escrever" @@ -113,6 +119,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Cancelar pacotes inválidos" @@ -179,6 +188,15 @@ msgstr "De %s em %s com origem %s" msgid "From %s in %s with source %s and %s" msgstr "De %s em %s com origem %s e %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Definições Gerais" @@ -348,6 +366,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -518,6 +539,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "Via %s" diff --git a/applications/luci-app-firewall/po/ro/firewall.po b/applications/luci-app-firewall/po/ro/firewall.po index dbae338229..7f82271375 100644 --- a/applications/luci-app-firewall/po/ro/firewall.po +++ b/applications/luci-app-firewall/po/ro/firewall.po @@ -45,6 +45,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "AcÅ£iune" @@ -99,6 +102,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Nu rescrie" @@ -108,6 +114,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Descarcă pachetele invalide" @@ -174,6 +183,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Setari generale" @@ -330,6 +348,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -490,6 +511,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/ru/firewall.po b/applications/luci-app-firewall/po/ru/firewall.po index a441c5a709..79c0f0b9a6 100644 --- a/applications/luci-app-firewall/po/ru/firewall.po +++ b/applications/luci-app-firewall/po/ru/firewall.po @@ -48,6 +48,9 @@ msgstr "ПринÑÑ‚ÑŒ перенаправление" msgid "Accept input" msgstr "ПринÑÑ‚ÑŒ входÑщий трафик" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "ДейÑтвие" @@ -106,6 +109,9 @@ msgstr "Отключить перенаправление" msgid "Discard input" msgstr "Отключить входÑщий трафик" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Ðе перезапиÑывать" @@ -115,6 +121,9 @@ msgstr "Ðе отÑлеживать перенаправление" msgid "Do not track input" msgstr "Ðе отÑлеживать входÑщий трафик" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Ðе пропуÑкать<br />некорректные пакеты" @@ -181,6 +190,15 @@ msgstr "Из %s в %s Ñ Ð¸Ñточником %s" msgid "From %s in %s with source %s and %s" msgstr "Из %s в %s Ñ Ð¸Ñточниками %s и %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "ОÑновные наÑтройки" @@ -355,6 +373,9 @@ msgstr "СбраÑывать перенаправление" msgid "Refuse input" msgstr "СбраÑывать входÑщий трафик" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -540,6 +561,15 @@ msgstr "" msgid "Tuesday" msgstr "Вторник" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "Через %s" diff --git a/applications/luci-app-firewall/po/sk/firewall.po b/applications/luci-app-firewall/po/sk/firewall.po index c6952faa35..8f936d2bed 100644 --- a/applications/luci-app-firewall/po/sk/firewall.po +++ b/applications/luci-app-firewall/po/sk/firewall.po @@ -41,6 +41,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "" @@ -95,6 +98,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -104,6 +110,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "" @@ -170,6 +179,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "" @@ -326,6 +344,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -486,6 +507,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/sv/firewall.po b/applications/luci-app-firewall/po/sv/firewall.po index 0301c25b5a..efe29ac4b7 100644 --- a/applications/luci-app-firewall/po/sv/firewall.po +++ b/applications/luci-app-firewall/po/sv/firewall.po @@ -42,6 +42,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Ã…tgärd" @@ -96,6 +99,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "Skriv inte om igen" @@ -105,6 +111,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Släpp ogiltiga paket" @@ -171,6 +180,15 @@ msgstr "FrÃ¥n %s i %s med källa %s" msgid "From %s in %s with source %s and %s" msgstr "FrÃ¥n %s i %s med källa %s och %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "Generella inställningar" @@ -332,6 +350,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -492,6 +513,15 @@ msgstr "" msgid "Tuesday" msgstr "Tisdag" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "Via %s" diff --git a/applications/luci-app-firewall/po/templates/firewall.pot b/applications/luci-app-firewall/po/templates/firewall.pot index d2691cc44a..f761c5e69a 100644 --- a/applications/luci-app-firewall/po/templates/firewall.pot +++ b/applications/luci-app-firewall/po/templates/firewall.pot @@ -34,6 +34,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "" @@ -88,6 +91,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -97,6 +103,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "" @@ -163,6 +172,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "" @@ -319,6 +337,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -479,6 +500,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/tr/firewall.po b/applications/luci-app-firewall/po/tr/firewall.po index 9c5adb1cd2..9e497330f9 100644 --- a/applications/luci-app-firewall/po/tr/firewall.po +++ b/applications/luci-app-firewall/po/tr/firewall.po @@ -41,6 +41,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "" @@ -95,6 +98,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -104,6 +110,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "" @@ -170,6 +179,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "" @@ -326,6 +344,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -486,6 +507,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/uk/firewall.po b/applications/luci-app-firewall/po/uk/firewall.po index 55c3ae8702..0ed90d9fcb 100644 --- a/applications/luci-app-firewall/po/uk/firewall.po +++ b/applications/luci-app-firewall/po/uk/firewall.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2012-12-29 12:53+0200\n" +"PO-Revision-Date: 2018-07-01 23:45+0300\n" "Last-Translator: Yurii <yuripet@gmail.com>\n" "Language-Team: none\n" "Language: uk\n" @@ -10,7 +10,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Pootle 2.0.6\n" msgid "%s in %s" msgstr "%s у %s" @@ -22,13 +21,13 @@ msgid "%s, %s in %s" msgstr "%s, %s у %s" msgid "(Unnamed Entry)" -msgstr "(Ð—Ð°Ð¿Ð¸Ñ Ð±ÐµÐ· імені)" +msgstr "(Ð—Ð°Ð¿Ð¸Ñ Ð±ÐµÐ· назви)" msgid "(Unnamed Rule)" -msgstr "(Правило без імені)" +msgstr "(Правило без назви)" msgid "(Unnamed SNAT)" -msgstr "(SNAT без імені)" +msgstr "(SNAT без назви)" msgid "<var>%d</var> pkts. per <var>%s</var>" msgstr "<var>%d</var> пакетів за <var>%s</var>" @@ -40,10 +39,13 @@ msgid "<var>%s</var> and limit to %s" msgstr "<var>%s</var> з лімітом %s" msgid "Accept forward" -msgstr "" +msgstr "Приймати переÑпрÑмовуваннÑ" msgid "Accept input" -msgstr "" +msgstr "Приймати вхідний" + +msgid "Accept output" +msgstr "Приймати вихідний" msgid "Action" msgstr "ДіÑ" @@ -58,10 +60,10 @@ msgid "Advanced Settings" msgstr "Розширені наÑтройки" msgid "Allow forward from <em>source zones</em>:" -msgstr "Дозволити ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ <em>зон-джерел</em>:" +msgstr "Дозволити переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ <em>зон джерела</em>:" msgid "Allow forward to <em>destination zones</em>:" -msgstr "Дозволити ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ <em>зон призначеннÑ</em>:" +msgstr "Дозволити переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ <em>зон призначеннÑ</em>:" msgid "Any" msgstr "Будь-Ñкий" @@ -95,22 +97,28 @@ msgid "Destination zone" msgstr "Зона призначеннÑ" msgid "Disable" -msgstr "" +msgstr "Вимкнути" msgid "Discard forward" -msgstr "" +msgstr "Відкидати переÑпрÑмовуваннÑ" msgid "Discard input" -msgstr "" +msgstr "Відкидати вхідний" + +msgid "Discard output" +msgstr "Відкидати вихідний" msgid "Do not rewrite" msgstr "Ðе перезапиÑувати" msgid "Do not track forward" -msgstr "" +msgstr "Ðе відÑлідковувати переÑпрÑмовуваннÑ" msgid "Do not track input" -msgstr "" +msgstr "Ðе відÑлідковувати вхідний" + +msgid "Do not track output" +msgstr "Ðе відÑлідковувати вихідний" msgid "Drop invalid packets" msgstr "Відкидати помилкові пакети" @@ -128,7 +136,7 @@ msgid "Enable logging on this zone" msgstr "Увімкнути реєÑÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ цій зоні" msgid "Experimental feature. Not fully compatible with QoS/SQM." -msgstr "" +msgstr "ЕкÑпериментальна функціÑ. Ðе повніÑÑ‚ÑŽ ÑуміÑно з QoS / SQM." msgid "External IP address" msgstr "Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ IP-адреÑа" @@ -149,7 +157,7 @@ msgid "Firewall - Custom Rules" msgstr "Брандмауер — ÐаÑтроювані правила" msgid "Firewall - Port Forwards" -msgstr "Брандмауер — СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð²" +msgstr "Брандмауер — ПереÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð²" msgid "Firewall - Traffic Rules" msgstr "Брандмауер — Правила трафіка" @@ -161,37 +169,46 @@ msgid "Force connection tracking" msgstr "Увімкнути відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·'єднань" msgid "Forward" -msgstr "СпрÑмовуваннÑ" +msgstr "ПереÑпрÑмовуваннÑ" msgid "Forward to" -msgstr "ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾" +msgstr "переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾" msgid "Friday" -msgstr "" +msgstr "П'ÑтницÑ" msgid "From %s in %s" msgstr "%s у %s" msgid "From %s in %s with source %s" -msgstr "%s у %s з вихідним %s" +msgstr "%s у %s з джерелом %s" msgid "From %s in %s with source %s and %s" -msgstr "%s у %s з вихідним %s та %s" +msgstr "%s у %s з джерелом %s та %s" + +msgid "From %s on <var>this device</var>" +msgstr "Від %s на <var>цьому приÑтрої</var>" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "Від %s на <var>цьому приÑтрої</var> з джерелом %s" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "Від %s на <var>цьому приÑтрої</var> з джерелом %s та %s" msgid "General Settings" msgstr "Загальні наÑтройки" msgid "Hardware flow offloading" -msgstr "" +msgstr "Ðпаратні заÑоби Ñ€Ð¾Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ" msgid "IP" -msgstr "" +msgstr "IP-адреÑа" msgid "IP range" -msgstr "" +msgstr "Діапазон IP" msgid "IPs" -msgstr "" +msgstr "IP-адреÑи" msgid "IPv4" msgstr "IPv4" @@ -212,7 +229,7 @@ msgid "Input" msgstr "Вхідний" msgid "Inter-Zone Forwarding" -msgstr "СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÑ€Ñ–Ð·ÑŒ зони" +msgstr "ПереÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ зонами" msgid "Internal IP address" msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ IP-адреÑа" @@ -227,10 +244,10 @@ msgid "Limit log messages" msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ журналу" msgid "MAC" -msgstr "" +msgstr "MAC-адреÑа" msgid "MACs" -msgstr "" +msgstr "MAC-адреÑи" msgid "MSS clamping" msgstr "ЗатиÑÐºÐ°Ð½Ð½Ñ MSS" @@ -246,8 +263,8 @@ msgstr "ЗіÑтавлÑти ICMP типу" msgid "Match forwarded traffic to the given destination port or port range." msgstr "" -"ЗіÑтавлÑти трафік, що ÑпрÑмовуєтьÑÑ Ð½Ð° заданий порт Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ діапазон " -"портів." +"ЗіÑтавлÑти трафік, що переÑпрÑмовуєтьÑÑ Ð½Ð° заданий порт Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ " +"діапазон портів." msgid "" "Match incoming traffic directed at the given destination port or port range " @@ -264,10 +281,10 @@ msgstr "" "діапазоні портів вузла клієнта." msgid "Monday" -msgstr "" +msgstr "Понеділок" msgid "Month Days" -msgstr "" +msgstr "Дні міÑÑцÑ" msgid "Name" msgstr "Ім'Ñ" @@ -276,13 +293,13 @@ msgid "New SNAT rule" msgstr "Ðове правило SNAT" msgid "New forward rule" -msgstr "Ðове правило ÑпрÑмовуваннÑ" +msgstr "Ðове правило переÑпрÑмовуваннÑ" msgid "New input rule" msgstr "Ðове вхідне правило" msgid "New port forward" -msgstr "Ðове ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñƒ" +msgstr "Ðове переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñƒ" msgid "New source NAT" msgstr "Ðовий NAT джерела" @@ -313,20 +330,20 @@ msgid "Output" msgstr "Вихідний" msgid "Output zone" -msgstr "" +msgstr "Вихідна зона" msgid "Passes additional arguments to iptables. Use with care!" msgstr "" "Передача додаткових аргументів Ð´Ð»Ñ IPTables. ВикориÑтовуйте з обережніÑÑ‚ÑŽ!" msgid "Port Forwards" -msgstr "СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð²" +msgstr "ПереÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð²" msgid "" "Port forwarding allows remote computers on the Internet to connect to a " "specific computer or service within the private LAN." msgstr "" -"СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð² дозволÑÑ” віддаленим комп'ютерам з Інтернету " +"ПереÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð² дозволÑÑ” віддаленим комп'ютерам з Інтернету " "підключатиÑÑ Ð´Ð¾ певного комп'ютера або Ñлужби у приватній мережі." msgid "Protocol" @@ -341,22 +358,25 @@ msgid "Redirect matched incoming traffic to the specified internal host" msgstr "ПереÑпрÑмувати відповідний вхідний трафік на заданий внутрішній вузол" msgid "Refuse forward" -msgstr "" +msgstr "ВідхилÑти переÑпрÑмовуваннÑ" msgid "Refuse input" -msgstr "" +msgstr "ВідхилÑти вхідний" + +msgid "Refuse output" +msgstr "ВідхилÑти вихідний" msgid "Requires hardware NAT support. Implemented at least for mt7621" -msgstr "" +msgstr "Ðеобхідна апаратна підтримка NAT. Впроваджено принаймні Ð´Ð»Ñ mt7621" msgid "Restart Firewall" -msgstr "" +msgstr "Перезавантажити брандмауер" msgid "Restrict Masquerading to given destination subnets" msgstr "Обмежити підміну заданими підмережами призначеннÑ" msgid "Restrict Masquerading to given source subnets" -msgstr "Обмежити підміну заданими вихідними підмережами" +msgstr "Обмежити підміну заданими підмережами джерела" msgid "Restrict to address family" msgstr "Обмежити ÑімейÑтво протоколів" @@ -372,19 +392,19 @@ msgstr "" "порожнім, щоб перепиÑувати тільки IP-адреÑу." msgid "Rewrite to source %s" -msgstr "Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ð½Ð° вихідний %s" +msgstr "Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ð½Ð° джерело %s" msgid "Rewrite to source %s, %s" -msgstr "Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ð½Ð° вихідний %s, %s" +msgstr "Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ð½Ð° джерело %s, %s" msgid "Routing/NAT Offloading" -msgstr "" +msgstr "Ð Ð¾Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ñ–Ñ—/NAT" msgid "Rule is disabled" -msgstr "" +msgstr "Правило вимкнено" msgid "Rule is enabled" -msgstr "" +msgstr "Правило ввімкнено" msgid "SNAT IP address" msgstr "IP-адреÑа SNAT" @@ -393,13 +413,13 @@ msgid "SNAT port" msgstr "Порт SNAT" msgid "Saturday" -msgstr "" +msgstr "Субота" msgid "Software based offloading for routing/NAT" -msgstr "" +msgstr "Програмне Ñ€Ð¾Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ñ–Ñ—/NAT" msgid "Software flow offloading" -msgstr "" +msgstr "Програмне Ñ€Ð¾Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ" msgid "Source IP address" msgstr "IP-адреÑа джерела" @@ -426,22 +446,22 @@ msgid "Source port" msgstr "Порт джерела" msgid "Source zone" -msgstr "Зона-джерело" +msgstr "Зона джерела" msgid "Start Date (yyyy-mm-dd)" -msgstr "" +msgstr "Дата початку (рррр-мм-дд)" msgid "Start Time (hh:mm:ss)" -msgstr "" +msgstr "Ð§Ð°Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ (гг:Ñ…Ñ…:ÑÑ)" msgid "Stop Date (yyyy-mm-dd)" -msgstr "" +msgstr "Дата зупинки (рррр-мм-дд)" msgid "Stop Time (hh:mm:ss)" -msgstr "" +msgstr "Ð§Ð°Ñ Ð·ÑƒÐ¿Ð¸Ð½ÐºÐ¸ (гг:Ñ…Ñ…:ÑÑ)" msgid "Sunday" -msgstr "" +msgstr "ÐеділÑ" msgid "" "The firewall creates zones over your network interfaces to control network " @@ -458,19 +478,21 @@ msgid "" "rule is <em>unidirectional</em>, e.g. a forward from lan to wan does " "<em>not</em> imply a permission to forward from wan to lan as well." msgstr "" -"Опції, наведені нижче, управлÑÑŽÑ‚ÑŒ політиками ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ цією (%s) та " -"іншими зонами. <em>Зони призначеннÑ</em> покриваютьÑÑ Ñ‚Ñ€Ð°Ñ„Ñ–ÐºÐ¾Ð¼, що " -"<strong>виходить з %q</strong>. <em>Зони-джерела</em> покриваютьÑÑ Ñ‚Ñ€Ð°Ñ„Ñ–ÐºÐ¾Ð¼ " -"з інших зон, <strong>ÑпрÑмованим на %q</strong>. Правила ÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ Ñ” " -"<em>одноÑпрÑмованим</em>, тобто, ÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ LAN до WAN <em>не</em> " -"означає, що Ñ” також дозвіл ÑпрÑмовувати від WAN в LAN." +"Опції, наведені нижче, керують політиками переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ цією (%s) та " +"іншими зонами. <em>Зони призначеннÑ</em> покриваютьÑÑ Ð¿ÐµÑ€ÐµÑпрÑмованим " +"трафіком, що <strong>виходить з %q</strong>. <em>Зони джерела</em> " +"покриваютьÑÑ Ñ‚Ñ€Ð°Ñ„Ñ–ÐºÐ¾Ð¼ з інших зон, <strong>переÑпрÑмованим на %q</strong>. " +"Правило переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñ” <em>одноÑпрÑмованим</em>, тобто, ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ " +"від LAN до WAN <em>не</em> означає, що Ñ” також дозвіл ÑпрÑмовувати від WAN " +"до LAN." msgid "" "This page allows you to change advanced properties of the port forwarding " "entry. In most cases there is no need to modify those settings." msgstr "" -"Ðа цій Ñторінці можна змінити додаткові влаÑтивоÑÑ‚Ñ– елемента ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ " -"портів. У більшоÑÑ‚Ñ– випадків змінювати ці параметри немає необхідноÑÑ‚Ñ–." +"Ðа цій Ñторінці можна змінити додаткові влаÑтивоÑÑ‚Ñ– елемента " +"переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð². У більшоÑÑ‚Ñ– випадків змінювати ці параметри немає " +"потреби." msgid "" "This page allows you to change advanced properties of the traffic rule " @@ -479,7 +501,6 @@ msgstr "" "Ðа цій Ñторінці можна змінити додаткові влаÑтивоÑÑ‚Ñ– елемента правил трафіка, " "таких Ñк відповідні параметри джерела та вузлів призначеннÑ." -#, fuzzy msgid "" "This section defines common properties of %q. The <em>input</em> and " "<em>output</em> options set the default policies for traffic entering and " @@ -489,15 +510,15 @@ msgid "" msgstr "" "Цей розділ визначає загальні влаÑтивоÑÑ‚Ñ– %q. Параметри <em>вхідний</em> Ñ– " "<em>вихідний</em> задають типову політику Ð´Ð»Ñ Ñ‚Ñ€Ð°Ñ„Ñ–ÐºÑƒ на вході й виході з " -"цієї зони, а параметр \"ÑпрÑмовуваннÑ\" опиÑує політику ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ " -"трафіку між різними мережами в межах зони. Пункт <em>вкриті мережі</em> " +"цієї зони, а параметр \"переÑпрÑмовуваннÑ\" опиÑує політику ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ " +"трафіку між різними мережами в межах зони. Пункт <em>Покриті мережі</em> " "визначає, Ñкі доÑтупні мережі Ñ” членами цієї зони." msgid "Thursday" -msgstr "" +msgstr "Четвер" msgid "Time in UTC" -msgstr "" +msgstr "Ð§Ð°Ñ Ð² UTC" msgid "To %s at %s on <var>this device</var>" msgstr "%s на %s <var>цього приÑтрою</var>" @@ -530,7 +551,16 @@ msgstr "" "порти WAN на маршрутизаторі." msgid "Tuesday" -msgstr "" +msgstr "Вівторок" + +msgid "Unnamed SNAT" +msgstr "SNAT без назви" + +msgid "Unnamed forward" +msgstr "ПереÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ· назви" + +msgid "Unnamed rule" +msgstr "Правило без назви" msgid "Via %s" msgstr "Через %s" @@ -539,10 +569,10 @@ msgid "Via %s at %s" msgstr "Через %s на %s" msgid "Wednesday" -msgstr "" +msgstr "Середа" msgid "Week Days" -msgstr "" +msgstr "Дні тижнÑ" msgid "" "You may specify multiple by selecting \"-- custom --\" and then entering " @@ -555,7 +585,7 @@ msgid "Zone %q" msgstr "Зона %q" msgid "Zone ⇒ Forwardings" -msgstr "Зона ⇒ СпрÑмовуваннÑ" +msgstr "Зона ⇒ ПереÑпрÑмовуваннÑ" msgid "Zones" msgstr "Зони" @@ -576,7 +606,7 @@ msgid "any zone" msgstr "будь-Ñкій зоні" msgid "day" -msgstr "" +msgstr "день" msgid "don't track" msgstr "не відÑтеж." @@ -585,31 +615,31 @@ msgid "drop" msgstr "опуÑкати" msgid "hour" -msgstr "" +msgstr "година" msgid "minute" -msgstr "" +msgstr "хвилина" msgid "not" -msgstr "" +msgstr "не" msgid "port" -msgstr "" +msgstr "порт" msgid "ports" -msgstr "" +msgstr "порти" msgid "reject" msgstr "відкидати" msgid "second" -msgstr "" +msgstr "Ñекунда" msgid "traffic" -msgstr "" +msgstr "трафік" msgid "type" -msgstr "" +msgstr "типом" msgid "types" -msgstr "" +msgstr "типами" diff --git a/applications/luci-app-firewall/po/vi/firewall.po b/applications/luci-app-firewall/po/vi/firewall.po index 0eba33f760..5a28e35c8f 100644 --- a/applications/luci-app-firewall/po/vi/firewall.po +++ b/applications/luci-app-firewall/po/vi/firewall.po @@ -46,6 +46,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "Action" @@ -101,6 +104,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "" @@ -110,6 +116,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "Bá» qua nhÆ°ng gói không hợp lý" @@ -177,6 +186,15 @@ msgstr "" msgid "From %s in %s with source %s and %s" msgstr "" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "" @@ -336,6 +354,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -501,6 +522,15 @@ msgstr "" msgid "Tuesday" msgstr "" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "" diff --git a/applications/luci-app-firewall/po/zh-cn/firewall.po b/applications/luci-app-firewall/po/zh-cn/firewall.po index df730a223e..bd3ad4e80d 100644 --- a/applications/luci-app-firewall/po/zh-cn/firewall.po +++ b/applications/luci-app-firewall/po/zh-cn/firewall.po @@ -44,6 +44,9 @@ msgstr "接å—转å‘" msgid "Accept input" msgstr "接å—入站" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "动作" @@ -100,6 +103,9 @@ msgstr "丢弃转å‘" msgid "Discard input" msgstr "丢弃入站" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "ä¸é‡å†™" @@ -109,6 +115,9 @@ msgstr "ä¸è·Ÿè¸ªè½¬å‘" msgid "Do not track input" msgstr "ä¸è·Ÿè¸ªå…¥ç«™" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "ä¸¢å¼ƒæ— æ•ˆæ•°æ®åŒ…" @@ -175,11 +184,20 @@ msgstr "æ¥è‡ª %s ä½äºŽ %s æºäºŽ %s" msgid "From %s in %s with source %s and %s" msgstr "æ¥è‡ª %s ä½äºŽ %s æºç«¯å£ %s æº MAC %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "基本设置" msgid "Hardware flow offloading" -msgstr "硬件æµé‡å¸è½½" +msgstr "硬件æµé‡åˆ†è½½" msgid "IP" msgstr "IP" @@ -332,6 +350,9 @@ msgstr "æ‹’ç»è½¬å‘" msgid "Refuse input" msgstr "æ‹’ç»å…¥ç«™" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "需è¦ç¡¬ä»¶ NAT 支æŒã€‚ç›®å‰ mt7621 已实现" @@ -362,7 +383,7 @@ msgid "Rewrite to source %s, %s" msgstr "æºåœ°å€æ”¹å†™æˆ %s, %s" msgid "Routing/NAT Offloading" -msgstr "Routing/NAT å¸è½½" +msgstr "Routing/NAT 分载" msgid "Rule is disabled" msgstr "规则已ç¦ç”¨" @@ -380,10 +401,10 @@ msgid "Saturday" msgstr "星期å…" msgid "Software based offloading for routing/NAT" -msgstr "基于软件的 Routing/NAT å¸è½½" +msgstr "基于软件的 Routing/NAT 分载" msgid "Software flow offloading" -msgstr "软件æµé‡å¸è½½" +msgstr "软件æµé‡åˆ†è½½" msgid "Source IP address" msgstr "æº IP 地å€" @@ -503,6 +524,15 @@ msgstr "" msgid "Tuesday" msgstr "星期二" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "通过 %s" diff --git a/applications/luci-app-firewall/po/zh-tw/firewall.po b/applications/luci-app-firewall/po/zh-tw/firewall.po index 93af452d05..ea7901ae8c 100644 --- a/applications/luci-app-firewall/po/zh-tw/firewall.po +++ b/applications/luci-app-firewall/po/zh-tw/firewall.po @@ -44,6 +44,9 @@ msgstr "" msgid "Accept input" msgstr "" +msgid "Accept output" +msgstr "" + msgid "Action" msgstr "動作" @@ -100,6 +103,9 @@ msgstr "" msgid "Discard input" msgstr "" +msgid "Discard output" +msgstr "" + msgid "Do not rewrite" msgstr "ä¸é‡å¯«" @@ -109,6 +115,9 @@ msgstr "" msgid "Do not track input" msgstr "" +msgid "Do not track output" +msgstr "" + msgid "Drop invalid packets" msgstr "丟棄無效資料包" @@ -175,6 +184,15 @@ msgstr "來自 %s ä½æ–¼ %s æºæ–¼ %s" msgid "From %s in %s with source %s and %s" msgstr "來自 %s ä½æ–¼ %s æºåŸ %s æº MAC %s" +msgid "From %s on <var>this device</var>" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s" +msgstr "" + +msgid "From %s on <var>this device</var> with source %s and %s" +msgstr "" + msgid "General Settings" msgstr "基本è¨å®š" @@ -331,6 +349,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Refuse output" +msgstr "" + msgid "Requires hardware NAT support. Implemented at least for mt7621" msgstr "" @@ -502,6 +523,15 @@ msgstr "" msgid "Tuesday" msgstr "星期二" +msgid "Unnamed SNAT" +msgstr "" + +msgid "Unnamed forward" +msgstr "" + +msgid "Unnamed rule" +msgstr "" + msgid "Via %s" msgstr "é€šéŽ %s" diff --git a/applications/luci-app-lxc/luasrc/controller/lxc.lua b/applications/luci-app-lxc/luasrc/controller/lxc.lua index 8557f2b821..4a7f96e5ff 100644 --- a/applications/luci-app-lxc/luasrc/controller/lxc.lua +++ b/applications/luci-app-lxc/luasrc/controller/lxc.lua @@ -19,6 +19,7 @@ module("luci.controller.lxc", package.seeall) local uci = require "luci.model.uci".cursor() local util = require "luci.util" local nx = require "nixio" +local url = util.shellquote(uci:get("lxc", "lxc", "url")) function index() if not nixio.fs.access("/etc/config/lxc") then @@ -38,12 +39,12 @@ function index() end function lxc_get_downloadable() - local target = lxc_get_arch_target() - local templates = {} + local target = lxc_get_arch_target(url) local ssl_status = lxc_get_ssl_status() + local templates = {} local f = io.popen('sh /usr/share/lxc/templates/lxc-download --list %s --server %s 2>/dev/null' - %{ ssl_status, util.shellquote(uci:get("lxc", "lxc", "url")) }, 'r') + %{ ssl_status, url }, 'r') local line for line in f:lines() do local dist, version, dist_target = line:match("^(%S+)%s+(%S+)%s+(%S+)%s+default%s+%S+$") @@ -59,31 +60,21 @@ end function lxc_create(lxc_name, lxc_template) luci.http.prepare_content("text/plain") - local path = lxc_get_config_path() if not path then return end local ssl_status = lxc_get_ssl_status() - - local src_err local lxc_dist, lxc_release = lxc_template:match("^(.+):(.+)$") - luci.http.write(util.ubus("lxc", "create", { - name = lxc_name, - template = "download", - args = { - "--server", uci:get("lxc", "lxc", "url"), - "--dist", lxc_dist, - "--release", lxc_release, - "--arch", lxc_get_arch_target(), - ssl_status - } - }), src_err) + luci.sys.call('/usr/bin/lxc-create --quiet --name %s --bdev best --template download -- --dist %s --release %s --arch %s --server %s %s' + %{ lxc_name, lxc_dist, lxc_release, lxc_get_arch_target(url), url, ssl_status }) while (nx.fs.access(path .. lxc_name .. "/partial")) do nx.nanosleep(1) end + + luci.http.write("0") end function lxc_action(lxc_action, lxc_name) @@ -153,19 +144,21 @@ function lxc_configuration_set(lxc_name) luci.http.write("0") end -function lxc_get_arch_target() +function lxc_get_arch_target(url) local target = nx.uname().machine - local target_map = { - armv5 = "armel", - armv6 = "armel", - armv7 = "armhf", - armv8 = "arm64", - x86_64 = "amd64" - } - local k, v - for k, v in pairs(target_map) do - if target:find("^" ..k.. "$") then - return v + if url and url:match("images.linuxcontainers.org") then + local target_map = { + armv5 = "armel", + armv6 = "armel", + armv7 = "armhf", + armv8 = "arm64", + x86_64 = "amd64" + } + local k, v + for k, v in pairs(target_map) do + if target:find(k) then + return v + end end end return target diff --git a/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua b/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua index 8a8fc2be0d..db7d19eb26 100644 --- a/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua +++ b/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua @@ -16,7 +16,7 @@ Author: Petar Koretic <petar.koretic@sartura.hr> m = Map("lxc", translate("LXC Containers"), translate("<b>Please note:</b> For LXC Containers you need a custom OpenWrt image.<br />") - .. translate("The image should include at least support for 'kernel cgroups', 'kernel namespaces' and 'miscellaneous LXC related options'.")) + .. translate("The image should include at least support for 'kernel cgroups', 'kernel namespaces' and 'miscellaneous LXC related options' plus 'kmod-veth' for optional network support.")) m:section(SimpleSection).template = "lxc" s = m:section(TypedSection, "lxc", translate("Options")) diff --git a/applications/luci-app-lxc/luasrc/view/lxc.htm b/applications/luci-app-lxc/luasrc/view/lxc.htm index b45e27f51f..47cc1a5f3f 100644 --- a/applications/luci-app-lxc/luasrc/view/lxc.htm +++ b/applications/luci-app-lxc/luasrc/view/lxc.htm @@ -19,8 +19,8 @@ local nx = require "nixio" local target = nx.uname().machine -%> -<fieldset class="cbi-section"> - <legend><%:Available Containers%></legend> +<div class="cbi-section"> + <h3><%:Available Containers%></h3> <div class="cbi-section-node"> <div class="table cbi-section-table" id="t_lxc_list"> <div class="tr cbi-section-table-titles"> @@ -30,15 +30,15 @@ local target = nx.uname().machine </div> </div> </div> -</fieldset> +</div> -<fieldset class="cbi-section"> +<div class="cbi-section"> <span id="lxc-list-output"></span> -</fieldset> +</div> <hr /> -<fieldset class="cbi-section"> - <legend><%:Create New Container%></legend> +<div class="cbi-section"> + <h3><%:Create New Container%></h3> <div class="cbi-section-node"> <div class="table cbi-section-table" id="t_lxc_create"> <div class="tr cbi-section-table-titles"> @@ -56,11 +56,11 @@ local target = nx.uname().machine </div> </div> </div> -</fieldset> +</div> -<fieldset class="cbi-section"> +<div class="cbi-section"> <span id="lxc-add-output"></span> -</fieldset> +</div> <hr /> diff --git a/applications/luci-app-mwan3/luasrc/controller/mwan3.lua b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua index 18c2135e43..2d46953e55 100644 --- a/applications/luci-app-mwan3/luasrc/controller/mwan3.lua +++ b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua @@ -138,10 +138,12 @@ function diagnosticsData(interface, task) local number = getInterfaceNumber(interface) local uci = require "luci.model.uci".cursor(nil, "/var/state") - local device = uci:get("network", interface, "ifname") + local nw = require "luci.model.network".init() + local network = nw:get_network(interface) + local device = network and network:ifname() luci.http.prepare_content("text/plain") - if device ~= "" then + if device then if task == "ping_gateway" then local gateway = get_gateway(interface) if gateway ~= nil then diff --git a/applications/luci-app-mwan3/po/zh-cn/mwan3.po b/applications/luci-app-mwan3/po/zh-cn/mwan3.po index 4a92c7abd9..e730004d97 100644 --- a/applications/luci-app-mwan3/po/zh-cn/mwan3.po +++ b/applications/luci-app-mwan3/po/zh-cn/mwan3.po @@ -42,7 +42,7 @@ msgid "Check IP rules" msgstr "检查 IP 规则" msgid "Check link quality" -msgstr "" +msgstr "检查连接数é‡" msgid "Check routing table" msgstr "检查路由表" @@ -57,7 +57,7 @@ msgid "Destination port" msgstr "ç›®æ ‡ç«¯å£" msgid "Detail" -msgstr "" +msgstr "详细" msgid "Diagnostics" msgstr "诊æ–" @@ -76,7 +76,7 @@ msgid "Enter value in hex, starting with <code>0x</code>" msgstr "输入åå…进制值,以 <code>0x</code> 开头" msgid "Execute" -msgstr "" +msgstr "执行" msgid "Expect interface state on up event" msgstr "在 up 事件å‘生时的预期接å£çŠ¶æ€" @@ -103,7 +103,7 @@ msgid "Hotplug ifup" msgstr "Hotplug ifup" msgid "INFO: MWAN not running" -msgstr "" +msgstr "ä¿¡æ¯ï¼šMWAN 没有è¿è¡Œ" msgid "IPset" msgstr "IPset" @@ -154,28 +154,28 @@ msgid "Local source interface" msgstr "本地æºæŽ¥å£" msgid "MWAN - Globals" -msgstr "" +msgstr "MWAN - 全局" msgid "MWAN - Interfaces" -msgstr "" +msgstr "MWAN - 接å£" msgid "MWAN - Members" -msgstr "" +msgstr "MWAN - æˆå‘˜" msgid "MWAN - Notification" -msgstr "" +msgstr "MWAN - 通知" msgid "MWAN - Policies" -msgstr "" +msgstr "MWAN - ç–ç•¥" msgid "MWAN - Rules" -msgstr "" +msgstr "MWAN - 规则" msgid "MWAN Interface Configuration - %s" msgstr "MWAN 接å£é…ç½® - %s" msgid "MWAN Interfaces" -msgstr "" +msgstr "MWAN 接å£" msgid "MWAN Member Configuration - %s" msgstr "MWAN æˆå‘˜é…ç½® - %s" @@ -187,13 +187,13 @@ msgid "MWAN Rule Configuration - %s" msgstr "MWAN 规则é…ç½® - %s" msgid "MWAN Status - Detail" -msgstr "" +msgstr "MWAN Status - 详细" msgid "MWAN Status - Diagnostics" -msgstr "" +msgstr "MWAN Status - 诊æ–" msgid "MWAN Status - Troubleshooting" -msgstr "" +msgstr "MWAN Status - 故障排除" msgid "" "MWAN supports up to 252 physical and/or logical interfaces<br />MWAN " @@ -209,10 +209,10 @@ msgstr "" "å£ä¸åº”该与æˆå‘˜ã€ç–ç•¥ã€è§„则ä¸çš„ä»»æ„一个设置项使用相åŒçš„å称" msgid "Max packet latency [ms]" -msgstr "" +msgstr "最大数æ®åŒ…延迟 [ms]" msgid "Max packet loss [%]" -msgstr "" +msgstr "最大数æ®åŒ…丢失率 [%]" msgid "" "May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or " @@ -246,10 +246,10 @@ msgid "Metric" msgstr "跃点数" msgid "Min packet latency [ms]" -msgstr "" +msgstr "最å°æ•°æ®åŒ…延迟 [ms]" msgid "Min packet loss [%]" -msgstr "" +msgstr "最å°æ•°æ®åŒ…丢失率 [%]" msgid "" "Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/" @@ -265,7 +265,7 @@ msgid "No MWAN interfaces found" msgstr "没有找到 MWAN 接å£" msgid "Notification" -msgstr "" +msgstr "通知" msgid "Offline" msgstr "离线" @@ -312,8 +312,8 @@ msgstr "" "“ç–ç•¥â€æŠŠæˆå‘˜è¿›è¡Œåˆ†ç»„,告诉 MWAN 如何分é…“规则â€ä¸ä½¿ç”¨è¿™ä¸€ç–略的æµé‡<br />拥有" "较低跃点数的æˆå‘˜å°†ä¼šè¢«ä¼˜å…ˆä½¿ç”¨ã€‚拥有相åŒè·ƒç‚¹æ•°çš„æˆå‘˜æŠŠæµé‡è¿›è¡Œè´Ÿè½½å‡è¡¡ã€‚<br /" ">进行负载å‡è¡¡çš„æˆå‘˜ä¹‹é—´æ‹¥æœ‰è¾ƒé«˜æ¯”é‡çš„æˆå‘˜å°†ä¼šè¢«åˆ†é…到更多æµé‡ã€‚<br />å称å…许" -"包括A-Zã€a-zã€0-9ã€_ 但是ä¸èƒ½æœ‰ç©ºæ ¼ã€‚å称应该在 15 个å—符以内<br />ç–ç•¥ä¸åº”该" -"与接å£ã€æˆå‘˜ã€è§„则ä¸çš„ä»»æ„一个设置项使用相åŒçš„å称" +"包括 A-Zã€a-zã€0-9ã€_ 但是ä¸èƒ½æœ‰ç©ºæ ¼ã€‚å称应该在 15 个å—符以内<br />ç–ç•¥ä¸åº”" +"该与接å£ã€æˆå‘˜ã€è§„则ä¸çš„ä»»æ„一个设置项使用相åŒçš„å称" msgid "Policy" msgstr "ç–ç•¥" @@ -344,6 +344,11 @@ msgid "" "z, 0-9, _ and no spaces<br />Rules may not share the same name as configured " "interfaces, members or policies" msgstr "" +"规则指定哪些æµé‡å°†ä½¿ç”¨ç‰¹å®šçš„ MWAN ç–ç•¥<br />规则基于 IP 地å€ï¼Œç«¯å£æˆ–åè®®<br /" +">规则从上到下匹é…<br />匹é…规则以下的规则被忽略<br />ä¸ç¬¦åˆä»»ä½•è§„则的æµé‡å°†ä½¿" +"用主路由表进行路由<br />目的地为已知(éžé»˜è®¤ï¼‰ç½‘络的æµé‡ç”±ä¸»è·¯ç”±è¡¨å¤„ç†<br />" +"æµé‡ç¬¦åˆè§„则,但该ç–略的所有 WAN 接å£å…³é—åŽéƒ½ä¼šè¢«å¤±æ•ˆ<br />å称å¯åŒ…å«å—符 A-" +"Z,a-z,0-9,_å’Œç©ºæ ¼<br />规则ä¸èƒ½ä¸Žé…置的接å£ã€æˆå‘˜æˆ–ç–略共享相åŒçš„å称" msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set" msgstr "å•ä½ä¸ºç§’。接å—的值:1-1000000。留空则使用默认值 600 秒" @@ -364,7 +369,7 @@ msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes" msgstr "æ”¯æŒ CIDR 记法(例如:\"192.168.100.0/24\")ä¸å«å¼•å·" msgid "Task" -msgstr "" +msgstr "任务" msgid "There are currently %d of %d supported interfaces configured" msgstr "当å‰å·²é…ç½® %d 个接å£ï¼Œæœ€å¤§æ”¯æŒ %d 个" @@ -395,6 +400,14 @@ msgid "" "Physical device name which interface went up or down (e.g. \"eth0\" or " "\"wwan0\")<br /><br />" msgstr "" +"这里å…许您修改“/etc/mwan3.userâ€çš„内容。<br />该文件在 sysupgrade 期间也会ä¿" +"留。<br /><br />注æ„:<br />该文件会作为 shell 脚本解释。<br />脚本的第一行必" +"须是 "#!/bin/sh",ä¸å¸¦å¼•å·ã€‚<br />以 # 开头的行是注释,ä¸ä¼šæ‰§è¡Œã€‚" +"<br />将您的自定义 mwan3 动作放在这里,他们将<br />在å¯ç”¨ mwan3 的接å£ä¸Š<br /" +">在 netifd hotplug 接å£äº‹ä»¶æ—¶æ‰§è¡Œã€‚<br /><br />有三个主è¦çš„环境å˜é‡ä¼ 递给这个" +"脚本。<br /><br />$ACTION “ifup†或 “ifdownâ€<br />$INTERFACE å¯åŠ¨æˆ–åœæ¢çš„接å£" +"å(例如 “wan†或 “wwanâ€ï¼‰<br />$DEVICE å¯åŠ¨æˆ–åœæ¢æŽ¥å£çš„物ç†è®¾å¤‡å(例如 " +"“eth0†或 “wwan0â€ï¼‰<br /><br />" msgid "Tracking hostname or IP address" msgstr "跟踪的主机或 IP 地å€" @@ -421,35 +434,35 @@ msgid "" msgstr "使用该接å£çš„ IP 地å€ä½œä¸ºè·¯ç”±å™¨æœ¬èº«å‘èµ·çš„æµé‡çš„æº IP 地å€" msgid "View the content of /etc/protocols for protocol description" -msgstr "" +msgstr "查看åè®®æè¿°çš„ /etc/protocols 的内容" msgid "WARNING: %d interfaces are configured exceeding the maximum of %d!" msgstr "è¦å‘Šï¼šå·²é…ç½® %d 个接å£ï¼Œè¶…过最大值 %dï¼" msgid "WARNING: Interface %s are not found in /etc/config/network" -msgstr "" +msgstr "è¦å‘Šï¼šæŽ¥å£ %s 在 /etc/config/network ä¸æœªæ‰¾åˆ°" msgid "WARNING: Interface %s has a duplicate metric %s configured" -msgstr "" +msgstr "è¦å‘Šï¼šæŽ¥å£ %s çš„ metric %s é…ç½®é‡å¤" msgid "" "WARNING: Interface %s has a higher reliability requirement than tracking " "hosts (%d)" -msgstr "" +msgstr "è¦å‘Šï¼šæŽ¥å£ %s 比跟踪主机具有更高的å¯é 性è¦æ±‚(%d)" msgid "WARNING: Interface %s has no default route in the main routing table" -msgstr "" +msgstr "è¦å‘Šï¼šæŽ¥å£ %s 在主路由表ä¸æ²¡æœ‰é»˜è®¤çš„路由" msgid "WARNING: Policy %s has exceeding the maximum name of 15 characters" -msgstr "" +msgstr "è¦å‘Šï¼šç–ç•¥ %s å称超过 15 个å—符" msgid "" "WARNING: Rule %s have a port configured with no or improper protocol " "specified!" -msgstr "" +msgstr "è¦å‘Šï¼šè§„则 %s 有一个端å£é…置没有指定或åè®®ä¸æ£ç¡®ï¼" msgid "Waiting for command to complete..." -msgstr "" +msgstr "æ£åœ¨ç‰å¾…命令完æˆ..." msgid "Weight" msgstr "比é‡" diff --git a/applications/luci-app-rp-pppoe-server/Makefile b/applications/luci-app-rp-pppoe-server/Makefile index 6cf4595cea..aa3ae538cd 100644 --- a/applications/luci-app-rp-pppoe-server/Makefile +++ b/applications/luci-app-rp-pppoe-server/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk -LUCI_TITLE:=Roaring Penguing PPPoE Server +LUCI_TITLE:=Roaring Penguin PPPoE Server LUCI_DEPENDS:=+rp-pppoe-server include ../../luci.mk diff --git a/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm b/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm index 80b95564dd..f016dd47e6 100644 --- a/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm +++ b/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm @@ -1,24 +1,17 @@ <div class="cbi-section-create cbi-tblsection-create"> - <br /> - <div class="table cbi-section-table"> - <div class="tr cbi-section-table-row"> - <div class="td cbi-section-table-cell" style="width:140px"> - <select class="cbi-input-select" id="_newinst.type" name="_newinst.type"> - <option value="_dummy">-- instance type --</option> - <option value="ss_local">ss-local</option> - <option value="ss_tunnel">ss-tunnel</option> - <option value="ss_redir">ss-redir</option> - <option value="ss_server">ss-server</option> - </select> - </div> - <div class="td cbi-section-table-cell" style="width:110px"> - <input type="text" class="cbi-input-text" id="_newinst.name" name="_newinst.name" placeholder="<%:Name%>"/> - </div> - <div class="td cbi-section-table-cell left"> - <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>" value="<%:Add%>" /> - </div> - </div> + <div> + <select class="cbi-input-select" id="_newinst.type" name="_newinst.type"> + <option value="_dummy">-- instance type --</option> + <option value="ss_local">ss-local</option> + <option value="ss_tunnel">ss-tunnel</option> + <option value="ss_redir">ss-redir</option> + <option value="ss_server">ss-server</option> + </select> </div> + <div> + <input type="text" class="cbi-input-text" id="_newinst.name" name="_newinst.name" placeholder="<%:Name%>"/> + </div> + <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>" value="<%:Add%>" /> </div> <script type="text/javascript">//<![CDATA[ XHR.poll(5, '<%=url('admin/services/shadowsocks-libev/status')%>', null, diff --git a/applications/luci-app-transmission/root/etc/uci-defaults/40_luci-transmission b/applications/luci-app-transmission/root/etc/uci-defaults/40_luci-transmission index 456e8b89ac..08dc719974 100644 --- a/applications/luci-app-transmission/root/etc/uci-defaults/40_luci-transmission +++ b/applications/luci-app-transmission/root/etc/uci-defaults/40_luci-transmission @@ -1,7 +1,7 @@ #!/bin/sh uci -q batch <<-EOF >/dev/null - delete ucitrack.@tranmsmission[-1] + delete ucitrack.@transmission[-1] add ucitrack transmission set ucitrack.@transmission[-1].init=transmission commit ucitrack diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm index 6cbeaffde6..c40bdeeb59 100644 --- a/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm +++ b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm @@ -6,10 +6,10 @@ This is free software, licensed under the Apache License, Version 2.0 <%+header%> <div class="cbi-map"> - <fieldset class="cbi-section"> + <div class="cbi-section"> <div class="cbi-section-descr"><%:This form shows the syslog output, pre-filtered for travelmate related messages only.%></div> <textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea> - </fieldset> + </div> </div> <script type="text/javascript"> diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm index bee6fcb360..ffacc2f6df 100644 --- a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm +++ b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm @@ -11,19 +11,21 @@ This is free software, licensed under the Apache License, Version 2.0 <%+header%> +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> + <div class="cbi-map"> <div class="cbi-map-descr"> <%=translatef("Provides an overview of all configured uplinks for the travelmate interface (%s). You can edit, delete or re-order existing uplinks or scan for a new one. The currently used uplink is emphasized in blue.", trmiface)%> </div> -<fieldset class="cbi-section"> - <div class="table cbi-section-table" style="empty-cells:hide"> +<div class="cbi-section"> + <div class="table cbi-section-table"> <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Device%></div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:SSID%></div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:BSSID%></div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Encryption%></div> - <div class="th cbi-section-table-cell" style="text-align:center" colspan="2"><%:Actions%></div> + <div class="th left"><%:Device%></div> + <div class="th left"><%:SSID%></div> + <div class="th left"><%:BSSID%></div> + <div class="th left"><%:Encryption%></div> + <div class="th center"> </div> </div> <% uci:foreach("wireless", "wifi-iface", function(s) @@ -45,11 +47,9 @@ This is free software, licensed under the Apache License, Version 2.0 <div class="td" style="<%=style%>"><%=ssid%></div> <div class="td" style="<%=style%>"><%=bssid%></div> <div class="td" style="<%=style%>"><%=encryption%></div> - <div class="td cbi-value-field" style="width:80px"> - <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/> - <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/> - </div> - <div class="td cbi-value-field" style="width:150px"> + <div class="td cbi-section-actions"> + <input class="cbi-button cbi-button-up" type="button" value="<%:Up%>" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/> + <input class="cbi-button cbi-button-down" type="button" value="<%:Down%>" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/> <input type="button" class="cbi-button cbi-button-edit" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiedit')%>?cfg=<%=section%>'" title="<%:Edit this Uplink%>" value="<%:Edit%>"/> <input type="button" class="cbi-button cbi-button-remove" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifidelete')%>?cfg=<%=section%>'" title="<%:Delete this Uplink%>" value="<%:Delete%>"/> </div> @@ -59,7 +59,7 @@ This is free software, licensed under the Apache License, Version 2.0 end) %> </div> -</fieldset> +</div> <div class="cbi-page-actions right"> <% uci:foreach("wireless", "wifi-device", function(s) @@ -68,7 +68,7 @@ This is free software, licensed under the Apache License, Version 2.0 <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/wifiscan')%>" method="post"> <input type="hidden" name="device" value="<%=device%>"/> <input type="hidden" name="token" value="<%=token%>"/> - <input type="submit" class="cbi-button cbi-button-find" title="<%:Find and join network on%> <%=device%>" value="<%:Scan%> <%=device%>"/> + <input type="submit" class="cbi-button cbi-button-action important" title="<%:Find and join network on%> <%=device%>" value="<%:Scan%> <%=device%>"/> </form> <% end) diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm index 81182b99b4..57efd97376 100644 --- a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm +++ b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm @@ -39,31 +39,33 @@ This is free software, licensed under the Apache License, Version 2.0 <%+header%> +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> + <div class="cbi-map"> <h2 name="content"><%:Wireless Scan%></h2> - <fieldset class="cbi-section"> - <div class="table cbi-section-table" style="empty-cells:hide"> + <div class="cbi-section"> + <div class="table cbi-section-table"> <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Uplink SSID%></div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Uplink BSSID%></div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Encryption%></div> - <div class="th cbi-section-table-cell" style="text-align:left" colspan="2"><%:Signal strength%></div> + <div class="th left"><%:Uplink SSID%></div> + <div class="th left"><%:Uplink BSSID%></div> + <div class="th left"><%:Encryption%></div> + <div class="th left"><%:Signal strength%></div> </div> <% for i, net in ipairs(iw.scanlist or { }) do %> <div class="tr cbi-section-table-row cbi-rowstyle-1"> - <div class="td cbi-value-field" style="text-align:left"> + <div class="td left"> <%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%> </div> - <div class="td cbi-value-field" style="text-align:left"> + <div class="td left"> <%=net.bssid and utl.pcdata(net.bssid)%> </div> - <div class="td cbi-value-field" style="text-align:left"> + <div class="td left"> <%=format_wifi_encryption(net.encryption)%> </div> - <div class="td cbi-value-field" style="text-align:left"> + <div class="td left"> <%=percent_wifi_signal(net)%> % </div> - <div class="td cbi-value-field" style="width:100px;text-align:right"> + <div class="td cbi-section-actions"> <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/wifiadd')%>" method="post"> <input type="hidden" name="token" value="<%=token%>"/> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/> @@ -80,16 +82,16 @@ This is free software, licensed under the Apache License, Version 2.0 </div> <% end %> </div> - </fieldset> + </div> <div class="cbi-page-actions right"> + <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/stations')%>" method="get"> + <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>"/> + </form> <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/wifiscan')%>" method="post"> <input type="hidden" name="token" value="<%=token%>"/> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/> <input class="cbi-button cbi-input-find" type="submit" value="<%:Repeat scan%>"/> </form> - <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/stations')%>" method="post"> - <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>"/> - </form> </div> </div> diff --git a/applications/luci-app-travelmate/po/ja/travelmate.po b/applications/luci-app-travelmate/po/ja/travelmate.po index 6a46ea3c87..f1d1220b7c 100644 --- a/applications/luci-app-travelmate/po/ja/travelmate.po +++ b/applications/luci-app-travelmate/po/ja/travelmate.po @@ -12,9 +12,6 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "Language: ja\n" -msgid "Actions" -msgstr "æ“作" - msgid "Add Uplink" msgstr "アップリンクã®è¿½åŠ " @@ -86,6 +83,9 @@ msgstr "ã“ã®ã‚¢ãƒƒãƒ—リンクを削除" msgid "Device" msgstr "デãƒã‚¤ã‚¹" +msgid "Down" +msgstr "" + msgid "EAP-Method" msgstr "EAP メソッド" @@ -339,6 +339,9 @@ msgstr "トリガé…延" msgid "Unknown" msgstr "ä¸æ˜Ž" +msgid "Up" +msgstr "" + msgid "Uplink / Trigger interface" msgstr "アップリンク / トリガー インターフェース" @@ -386,3 +389,6 @@ msgstr "(ステルス)" msgid "n/a" msgstr "利用ä¸å¯" + +#~ msgid "Actions" +#~ msgstr "æ“作" diff --git a/applications/luci-app-travelmate/po/pt-br/travelmate.po b/applications/luci-app-travelmate/po/pt-br/travelmate.po index 6bf65b9370..2bed677d35 100644 --- a/applications/luci-app-travelmate/po/pt-br/travelmate.po +++ b/applications/luci-app-travelmate/po/pt-br/travelmate.po @@ -12,9 +12,6 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" -msgid "Actions" -msgstr "" - msgid "Add Uplink" msgstr "" @@ -80,6 +77,9 @@ msgstr "" msgid "Device" msgstr "" +msgid "Down" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -310,6 +310,9 @@ msgstr "" msgid "Unknown" msgstr "" +msgid "Up" +msgstr "" + msgid "Uplink / Trigger interface" msgstr "" diff --git a/applications/luci-app-travelmate/po/ru/travelmate.po b/applications/luci-app-travelmate/po/ru/travelmate.po index 8b25e9b139..d3dbd24752 100644 --- a/applications/luci-app-travelmate/po/ru/travelmate.po +++ b/applications/luci-app-travelmate/po/ru/travelmate.po @@ -15,9 +15,6 @@ msgstr "" "Project-Info: Ðто техничеÑкий перевод, не доÑловный. Главное-удобный руÑÑкий " "интерфейÑ, вÑе проверÑлоÑÑŒ в графичеÑком режиме, ÑовмеÑтим Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ apps\n" -msgid "Actions" -msgstr "ДейÑтвиÑ" - msgid "Add Uplink" msgstr "Подключение к Ñети" @@ -85,6 +82,9 @@ msgstr "Удалить Ñеть" msgid "Device" msgstr "УÑтройÑтво" +msgid "Down" +msgstr "" + msgid "EAP-Method" msgstr "Метод EAP" @@ -333,6 +333,9 @@ msgstr "" msgid "Unknown" msgstr "ÐеизвеÑтно" +msgid "Up" +msgstr "" + msgid "Uplink / Trigger interface" msgstr "Включить интерфейÑ<br />внешней Ñети" @@ -381,6 +384,9 @@ msgstr "Ñкрытый" msgid "n/a" msgstr "нет данных" +#~ msgid "Actions" +#~ msgstr "ДейÑтвиÑ" + #~ msgid "Add Interface" #~ msgstr "Добавить интерфейÑ" diff --git a/applications/luci-app-travelmate/po/templates/travelmate.pot b/applications/luci-app-travelmate/po/templates/travelmate.pot index f4f3418422..b3e80e3c96 100644 --- a/applications/luci-app-travelmate/po/templates/travelmate.pot +++ b/applications/luci-app-travelmate/po/templates/travelmate.pot @@ -1,9 +1,6 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -msgid "Actions" -msgstr "" - msgid "Add Uplink" msgstr "" @@ -69,6 +66,9 @@ msgstr "" msgid "Device" msgstr "" +msgid "Down" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -299,6 +299,9 @@ msgstr "" msgid "Unknown" msgstr "" +msgid "Up" +msgstr "" + msgid "Uplink / Trigger interface" msgstr "" diff --git a/applications/luci-app-upnp/luasrc/view/upnp_status.htm b/applications/luci-app-upnp/luasrc/view/upnp_status.htm index 1e09225793..ee385b24a8 100644 --- a/applications/luci-app-upnp/luasrc/view/upnp_status.htm +++ b/applications/luci-app-upnp/luasrc/view/upnp_status.htm @@ -16,40 +16,37 @@ var tb = document.getElementById('upnp_status_table'); if (st && tb) { - /* clear all rows */ - while (tb.firstElementChild !== tb.lastElementChild) - tb.removeChild(tb.lastElementChild); + var rows = []; for (var i = 0; i < st.length; i++) - tb.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ - E('<div class="td">', st[i].proto), - E('<div class="td">', st[i].extport), - E('<div class="td">', st[i].intaddr), - E('<div class="td">', st[i].intport), - E('<div class="td">', st[i].descr), - E('<input class="cbi-button cbi-input-remove" type="button" value="<%:Delete%>" onclick="upnp_delete_fwd(%d)" />'.format(st[i].num)) - ])); + rows.push([ + st[i].proto, + st[i].extport, + st[i].intaddr, + st[i].intport, + st[i].descr, + E('<input class="cbi-button cbi-button-remove" type="button" value="<%:Delete%>" onclick="upnp_delete_fwd(%d)" />'.format(st[i].num)) + ]); - if (tb.firstElementChild === tb.lastElementChild) - tb.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active redirects.%></em></div></div>')); + cbi_update_table(tb, rows, '<em><%:There are no active redirects.%></em>'); } } ); //]]></script> -<fieldset class="cbi-section"> - <legend><%:Active UPnP Redirects%></legend> - <div class="table cbi-section-table" id="upnp_status_table"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell"><%:Protocol%></div> - <div class="th cbi-section-table-cell"><%:External Port%></div> - <div class="th cbi-section-table-cell"><%:Client Address%></div> - <div class="th cbi-section-table-cell"><%:Client Port%></div> - <div class="th cbi-section-table-cell"><%:Description%></div> - <div class="th cbi-section-table-cell"> </div> +<div class="cbi-section"> + <h3><%:Active UPnP Redirects%></h3> + <div class="table" id="upnp_status_table"> + <div class="tr table-titles"> + <div class="th"><%:Protocol%></div> + <div class="th"><%:External Port%></div> + <div class="th"><%:Client Address%></div> + <div class="th"><%:Client Port%></div> + <div class="th"><%:Description%></div> + <div class="th cbi-section-actions"> </div> </div> - <div class="tr cbi-section-table-row"> - <div class="td" colspan="5"><em><br /><%:Collecting data...%></em></div> + <div class="tr placeholder"> + <div class="td"><em><%:Collecting data...%></em></div> </div> </div> -</fieldset> +</div> diff --git a/applications/luci-app-upnp/po/uk/upnp.po b/applications/luci-app-upnp/po/uk/upnp.po index 8f43ae371a..8dbffe9767 100644 --- a/applications/luci-app-upnp/po/uk/upnp.po +++ b/applications/luci-app-upnp/po/uk/upnp.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2013-05-26 19:26+0200\n" +"PO-Revision-Date: 2018-06-17 23:15+0300\n" "Last-Translator: Yurii <yuripet@gmail.com>\n" "Language-Team: none\n" "Language: uk\n" @@ -10,13 +10,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Pootle 2.0.6\n" msgid "" "ACLs specify which external ports may be redirected to which internal " "addresses and ports" msgstr "" -"СпиÑок кнтролю доÑтупу визначає, Ñкі зовнішні порти можуть бути " +"СпиÑок контролю доÑтупу визначає, Ñкі зовнішні порти можуть бути " "переÑпрÑмовані на Ñкі внутрішні адреÑи й порти" msgid "Action" @@ -29,7 +28,7 @@ msgid "Advanced Settings" msgstr "Додаткові параметри" msgid "Advertise as IGDv1 device instead of IGDv2" -msgstr "" +msgstr "Оголошувати Ñк приÑтрій IGDv1 заміÑÑ‚ÑŒ IGDv2" msgid "Allow adding forwards only to requesting ip addresses" msgstr "" @@ -63,16 +62,16 @@ msgid "Delete" msgstr "" msgid "Description" -msgstr "" +msgstr "ОпиÑ" msgid "Device UUID" msgstr "UUID приÑтрою" msgid "Downlink" -msgstr "Ðизхідний канал" +msgstr "Ðизхідне з’єднаннÑ" msgid "Enable IGDv1 mode" -msgstr "" +msgstr "Увімкнути режим IGDv1" msgid "Enable NAT-PMP functionality" msgstr "Увімкнути функцію NAT-PMP" @@ -148,20 +147,10 @@ msgid "Universal Plug & Play" msgstr "Universal Plug & Play" msgid "Uplink" -msgstr "ВиÑхідний канал" +msgstr "ВиÑхідне з’єднаннÑ" msgid "Value in KByte/s, informational only" -msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (КБ/Ñ) тільки Ð´Ð»Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ—" +msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (КБ/Ñ), тільки Ð´Ð»Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ—" #~ msgid "Delete Redirect" #~ msgstr "Видалити переÑпрÑмуваннÑ" - -#~ msgid "" -#~ "UPNP allows clients in the local network to automatically configure the " -#~ "router." -#~ msgstr "" -#~ "UPnP надає клієнтам у локальній мережі змогу автоматично наÑтроювати " -#~ "маршрутизатор." - -#~ msgid "enable" -#~ msgstr "Увімкнути" diff --git a/collections/luci-nginx/Makefile b/collections/luci-nginx/Makefile new file mode 100644 index 0000000000..7d14b1df7d --- /dev/null +++ b/collections/luci-nginx/Makefile @@ -0,0 +1,23 @@ +# +# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org> +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TYPE:=col +LUCI_BASENAME:=nginx + +LUCI_TITLE:=LuCI interface with Nginx as Webserver +LUCI_DESCRIPTION:=Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme +LUCI_DEPENDS:= \ + +nginx +nginx-mod-luci +luci-mod-admin-full +luci-theme-bootstrap \ + +luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 \ + +rpcd-mod-rrdns + +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/collections/luci-ssl-nginx/Makefile b/collections/luci-ssl-nginx/Makefile new file mode 100644 index 0000000000..549c44af11 --- /dev/null +++ b/collections/luci-ssl-nginx/Makefile @@ -0,0 +1,25 @@ +# +# Copyright (C) 2008-2016 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TYPE:=col +LUCI_BASENAME:=ssl + +LUCI_TITLE:=LuCI with HTTPS support on Nginx (OpenSSL as SSL backend) +LUCI_DESCRIPTION:=LuCI with OpenSSL as the SSL backend (libustream-openssl). \ + OpenSSL cmd tools (openssl-util) are used by nginx for SSL key generation. \ + +LUCI_DEPENDS:= \ + +nginx-ssl +nginx-mod-luci-ssl +luci-mod-admin-full +luci-theme-bootstrap \ + +luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 \ + +rpcd-mod-rrdns +libustream-openssl +openssl-util + +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/collections/luci/Makefile b/collections/luci/Makefile index 9b495c3187..3c765c396b 100644 --- a/collections/luci/Makefile +++ b/collections/luci/Makefile @@ -9,7 +9,8 @@ include $(TOPDIR)/rules.mk LUCI_TYPE:=col LUCI_BASENAME:=luci -LUCI_TITLE:=Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme +LUCI_TITLE:=LuCI interface with Uhttpd as Webserver (default) +LUCI_DESCRIPTION:=Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme LUCI_DEPENDS:= \ +uhttpd +uhttpd-mod-ubus +luci-mod-admin-full +luci-theme-bootstrap \ +luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 \ @@ -34,7 +34,7 @@ LUCI_LANG.ru=РуÑÑкий (Russian) LUCI_LANG.sk=SlovenÄina (Slovak) LUCI_LANG.sv=Svenska (Swedish) LUCI_LANG.tr=Türkçe (Turkish) -LUCI_LANG.uk=україÌнÑька (Ukrainian) +LUCI_LANG.uk=УкраїнÑька (Ukrainian) LUCI_LANG.vi=Tiếng Việt (Vietnamese) LUCI_LANG.zh-cn=ä¸æ–‡ (Chinese) LUCI_LANG.zh-tw=臺ç£è¯èªž (Taiwanese) @@ -153,7 +153,7 @@ LUCI_LIBRARYDIR = $(LUA_LIBRARYDIR)/luci define SrcDiet $(FIND) $(1) -type f -name '*.lua' | while read src; do \ - if LuaSrcDiet --noopt-binequiv -o "$$$$src.o" "$$$$src"; \ + if luasrcdiet --noopt-binequiv -o "$$$$src.o" "$$$$src"; \ then mv "$$$$src.o" "$$$$src"; fi; \ done endef diff --git a/modules/luci-base/Makefile b/modules/luci-base/Makefile index 7f7d7e772f..5c38d99c58 100644 --- a/modules/luci-base/Makefile +++ b/modules/luci-base/Makefile @@ -14,12 +14,13 @@ LUCI_BASENAME:=base LUCI_TITLE:=LuCI core libraries LUCI_DEPENDS:=+lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc +liblucihttp-lua -PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2 -PKG_SOURCE_URL:=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/luasrcdiet -PKG_HASH:=ed7680f2896269ae8633756e7edcf09050812f78c8f49e280e63c30d14f35aea -PKG_LICENSE:=Apache-2.0 -HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/LuaSrcDiet-0.12.1 +PKG_SOURCE:=v1.0.0.tar.gz +PKG_SOURCE_URL:=https://github.com/jirutka/luasrcdiet/archive/ +PKG_HASH:=48162e63e77d009f5848f18a5cabffbdfc867d0e5e73c6d407f6af5d6880151b +PKG_LICENSE:=MIT + +HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/luasrcdiet-1.0.0 include $(INCLUDE_DIR)/host-build.mk @@ -36,13 +37,13 @@ endef define Host/Compile $(MAKE) -C src/ clean po2lmo - $(MAKE) -C $(HOST_BUILD_DIR) bin/LuaSrcDiet.lua + $(MAKE) -C $(HOST_BUILD_DIR) bin/luasrcdiet endef define Host/Install $(INSTALL_DIR) $(1)/bin $(INSTALL_BIN) src/po2lmo $(1)/bin/po2lmo - $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/LuaSrcDiet.lua $(1)/bin/LuaSrcDiet + $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/luasrcdiet $(1)/bin/luasrcdiet endef $(eval $(call HostBuild)) diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js index a7f999d876..6a487366f8 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi.js +++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js @@ -620,7 +620,11 @@ function cbi_init() { } document.querySelectorAll('.cbi-dropdown').forEach(function(s) { - cbi_dropdown_init(s); + cbi_dropdown_init(s); + }); + + document.querySelectorAll('.cbi-tooltip:not(:empty)').forEach(function(s) { + s.parentNode.classList.add('cbi-tooltip-container'); }); cbi_d_update(); @@ -1232,14 +1236,13 @@ function cbi_validate_field(cbid, optional, type) function cbi_row_swap(elem, up, store) { - var tr = elem.parentNode; - - while (tr && !tr.classList.contains('cbi-section-table-row')) - tr = tr.parentNode; + var tr = findParent(elem.parentNode, '.cbi-section-table-row'); if (!tr) return false; + tr.classList.remove('flash'); + if (up) { var prev = tr.previousElementSibling; @@ -1277,6 +1280,9 @@ function cbi_row_swap(elem, up, store) if (input) input.value = ids.join(' '); + window.scrollTo(0, tr.offsetTop); + window.setTimeout(function() { tr.classList.add('flash'); }, 1); + return false; } @@ -1522,6 +1528,19 @@ function toElem(s) return elem || null; } +function findParent(node, selector) +{ + while (node) + if (node.msMatchesSelector && node.msMatchesSelector(selector)) + return node; + else if (node.matches && node.matches(selector)) + return node; + else + node = node.parentNode; + + return null; +} + function E() { var html = arguments[0], @@ -1541,7 +1560,7 @@ function E() if (attr) for (var key in attr) - if (attr.hasOwnProperty(key)) + if (attr.hasOwnProperty(key) && attr[key] !== null && attr[key] !== undefined) elem.setAttribute(key, attr[key]); if (typeof(data) === 'function') @@ -1818,18 +1837,6 @@ CBIDropdown = { document.querySelectorAll('.cbi-dropdown[open]').forEach(function(s) { s.dispatchEvent(new CustomEvent('cbi-dropdown-close', {})); }); - }, - - findParent: function(node, selector) { - while (node) - if (node.msMatchesSelector && node.msMatchesSelector(selector)) - return node; - else if (node.matches && node.matches(selector)) - return node; - else - node = node.parentNode; - - return null; } }; @@ -1908,7 +1915,7 @@ function cbi_dropdown_init(sb) { sbox.openDropdown(this); } else { - var li = sbox.findParent(ev.target, 'li'); + var li = findParent(ev.target, 'li'); if (li && li.parentNode.classList.contains('dropdown')) sbox.toggleItem(this, li); } @@ -1933,7 +1940,7 @@ function cbi_dropdown_init(sb) { } else { - var active = sbox.findParent(document.activeElement, 'li'); + var active = findParent(document.activeElement, 'li'); switch (ev.keyCode) { case 27: @@ -1986,7 +1993,7 @@ function cbi_dropdown_init(sb) { if (!this.hasAttribute('open')) return; - var li = sbox.findParent(ev.target, 'li'); + var li = findParent(ev.target, 'li'); if (li) { if (li.parentNode.classList.contains('dropdown')) sbox.setFocus(this, li); @@ -2023,18 +2030,18 @@ function cbi_dropdown_init(sb) { }); create.addEventListener('focus', function(ev) { - var cbox = sbox.findParent(this, 'li').querySelector('input[type="checkbox"]'); + var cbox = findParent(this, 'li').querySelector('input[type="checkbox"]'); if (cbox) cbox.checked = true; sb.setAttribute('locked-in', ''); }); create.addEventListener('blur', function(ev) { - var cbox = sbox.findParent(this, 'li').querySelector('input[type="checkbox"]'); + var cbox = findParent(this, 'li').querySelector('input[type="checkbox"]'); if (cbox) cbox.checked = false; sb.removeAttribute('locked-in'); }); - var li = sbox.findParent(create, 'li'); + var li = findParent(create, 'li'); li.setAttribute('unselectable', ''); li.addEventListener('click', function(ev) { @@ -2044,3 +2051,77 @@ function cbi_dropdown_init(sb) { } cbi_dropdown_init.prototype = CBIDropdown; + +function cbi_update_table(table, data, placeholder) { + target = isElem(table) ? table : document.querySelector(table); + + if (!isElem(target)) + return; + + target.querySelectorAll('.tr.table-titles, .cbi-section-table-titles').forEach(function(thead) { + var titles = []; + + thead.querySelectorAll('.th').forEach(function(th) { + titles.push(th); + }); + + if (Array.isArray(data)) { + var n = 0, rows = target.querySelectorAll('.tr'); + + data.forEach(function(row) { + var trow = E('div', { 'class': 'tr' }); + + for (var i = 0; i < titles.length; i++) { + var text = titles[i].innerText; + var td = trow.appendChild(E('div', { + 'class': titles[i].className, + 'data-title': text ? text.trim() : null + }, row[i] || '')); + + td.classList.remove('th'); + td.classList.add('td'); + } + + trow.classList.add('cbi-rowstyle-%d'.format((n++ % 2) ? 2 : 1)); + + if (rows[n]) + target.replaceChild(trow, rows[n]); + else + target.appendChild(trow); + }); + + while (rows[++n]) + target.removeChild(rows[n]); + + if (placeholder && target.firstElementChild === target.lastElementChild) { + var trow = target.appendChild(E('div', { 'class': 'tr placeholder' })); + var td = trow.appendChild(E('div', { 'class': titles[0].className }, placeholder)); + + td.classList.remove('th'); + td.classList.add('td'); + } + } + else { + thead.parentNode.style.display = 'none'; + + thead.parentNode.querySelectorAll('.tr, .cbi-section-table-row').forEach(function(trow) { + if (trow !== thead) { + var n = 0; + trow.querySelectorAll('.th, .td').forEach(function(td) { + if (n < titles.length) { + var text = (titles[n++].innerText || '').trim(); + if (text !== '') + td.setAttribute('data-title', text); + } + }); + } + }); + + thead.parentNode.style.display = ''; + } + }); +} + +document.addEventListener('DOMContentLoaded', function() { + document.querySelectorAll('.table').forEach(cbi_update_table); +}); diff --git a/modules/luci-base/htdocs/luci-static/resources/xhr.js b/modules/luci-base/htdocs/luci-static/resources/xhr.js index de4476cdd3..f1537a4481 100644 --- a/modules/luci-base/htdocs/luci-static/resources/xhr.js +++ b/modules/luci-base/htdocs/luci-static/resources/xhr.js @@ -204,7 +204,6 @@ XHR.poll = function(interval, url, data, callback, post) }; XHR._q.push(e); - XHR.run(); return e; } @@ -260,3 +259,5 @@ XHR.running = function() { return !!(XHR._r && XHR._i); } + +document.addEventListener('DOMContentLoaded', XHR.run); diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua index 6850d7e3a9..6d5a8f4d3d 100644 --- a/modules/luci-base/luasrc/dispatcher.lua +++ b/modules/luci-base/luasrc/dispatcher.lua @@ -703,15 +703,22 @@ function _create_node(path) local last = table.remove(path) local parent = _create_node(path) - c = {nodes={}, auto=true} - -- the node is "in request" if the request path matches - -- at least up to the length of the node path - if parent.inreq and context.path[#path+1] == last then - c.inreq = true + c = {nodes={}, auto=true, inreq=true} + + local _, n + for _, n in ipairs(path) do + if context.path[_] ~= n then + c.inreq = false + break + end end + + c.inreq = c.inreq and (context.path[#path + 1] == last) + parent.nodes[last] = c context.treecache[name] = c end + return c end diff --git a/modules/luci-base/luasrc/tools/status.lua b/modules/luci-base/luasrc/tools/status.lua index 06a9ad4154..635995310f 100644 --- a/modules/luci-base/luasrc/tools/status.lua +++ b/modules/luci-base/luasrc/tools/status.lua @@ -6,9 +6,25 @@ module("luci.tools.status", package.seeall) local uci = require "luci.model.uci".cursor() local ipc = require "luci.ip" +local function duid_to_mac(duid) + local b1, b2, b3, b4, b5, b6 + + -- DUID-LLT / Ethernet + if type(duid) == "string" and #duid == 28 then + b1, b2, b3, b4, b5, b6 = duid:match("^00010001(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)%x%x%x%x%x%x%x%x$") + + -- DUID-LL / Ethernet + elseif type(duid) == "string" and #duid == 20 then + b1, b2, b3, b4, b5, b6 = duid:match("^00030001(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)$") + end + + return b1 and ipc.checkmac(table.concat({ b1, b2, b3, b4, b5, b6 }, ":")) +end + local function dhcp_leases_common(family) local rv = { } local nfs = require "nixio.fs" + local sys = require "luci.sys" local leasefile = "/tmp/dhcp.leases" uci:foreach("dhcp", "dnsmasq", @@ -87,6 +103,22 @@ local function dhcp_leases_common(family) fd:close() end + if family == 6 then + local _, lease + local hosts = sys.net.host_hints() + for _, lease in ipairs(rv) do + local mac = duid_to_mac(lease.duid) + local host = mac and hosts[mac] + if host then + if not lease.name then + lease.host_hint = host.name or host.ipv4 or host.ipv6 + elseif host.name and lease.hostname ~= host.name then + lease.host_hint = host.name + end + end + end + end + return rv end @@ -113,6 +145,11 @@ function wifi_networks() local net for _, net in ipairs(dev:get_wifinets()) do + local a, an = nil, 0 + for _, a in pairs(net:assoclist() or {}) do + an = an + 1 + end + rd.networks[#rd.networks+1] = { name = net:shortname(), link = net:adminlink(), @@ -128,10 +165,10 @@ function wifi_networks() noise = net:noise(), bitrate = net:bitrate(), ifname = net:ifname(), - assoclist = net:assoclist(), country = net:country(), txpower = net:txpower(), txpoweroff = net:txpower_offset(), + num_assoc = an, disabled = (dev:get("disabled") == "1" or net:get("disabled") == "1") } @@ -165,7 +202,6 @@ function wifi_network(id) noise = net:noise(), bitrate = net:bitrate(), ifname = net:ifname(), - assoclist = net:assoclist(), country = net:country(), txpower = net:txpower(), txpoweroff = net:txpower_offset(), @@ -182,6 +218,52 @@ function wifi_network(id) return { } end +function wifi_assoclist() + local sys = require "luci.sys" + local ntm = require "luci.model.network".init() + local hosts = sys.net.host_hints() + + local assoc = {} + local _, dev, net, bss + + for _, dev in ipairs(ntm:get_wifidevs()) do + local radioname = dev:get_i18n() + + for _, net in ipairs(dev:get_wifinets()) do + local netname = net:shortname() + local netlink = net:adminlink() + local ifname = net:ifname() + + for _, bss in pairs(net:assoclist() or {}) do + local host = hosts[_] + + bss.bssid = _ + bss.ifname = ifname + bss.radio = radioname + bss.name = netname + bss.link = netlink + + bss.host_name = (host) and (host.name or host.ipv4 or host.ipv6) + bss.host_hint = (host and host.name and (host.ipv4 or host.ipv6)) and (host.ipv4 or host.ipv6) + + assoc[#assoc+1] = bss + end + end + end + + table.sort(assoc, function(a, b) + if a.radio ~= b.radio then + return a.radio < b.radio + elseif a.ifname ~= b.ifname then + return a.ifname < b.ifname + else + return a.bssid < b.bssid + end + end) + + return assoc +end + function switch_status(devs) local dev local switches = { } diff --git a/modules/luci-base/luasrc/view/cbi/apply_widget.htm b/modules/luci-base/luasrc/view/cbi/apply_widget.htm index 702512f495..e3090da656 100644 --- a/modules/luci-base/luasrc/view/cbi/apply_widget.htm +++ b/modules/luci-base/luasrc/view/cbi/apply_widget.htm @@ -47,7 +47,7 @@ } </style> -<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-18.138.59467-72fe5dd"></script> +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> <script type="text/javascript">//<![CDATA[ var xhr = new XHR(), uci_apply_auth = { sid: '<%=luci.dispatcher.context.authsession%>', token: '<%=token%>' }, diff --git a/modules/luci-base/luasrc/view/cbi/button.htm b/modules/luci-base/luasrc/view/cbi/button.htm index 30f8ddfda5..6ccba58f23 100644 --- a/modules/luci-base/luasrc/view/cbi/button.htm +++ b/modules/luci-base/luasrc/view/cbi/button.htm @@ -1,6 +1,6 @@ <%+cbi/valueheader%> <% if self:cfgvalue(section) ~= false then %> - <input class="cbi-button cbi-input-<%=self.inputstyle or "button" %>" type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> + <input class="cbi-button cbi-button-<%=self.inputstyle or "button" %>" type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> <% else %> - <% end %> diff --git a/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm b/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm index a4b68cda72..dbb0e1120b 100644 --- a/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm +++ b/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm @@ -1,2 +1,10 @@ -<div class="td cbi-value-field<% if self.error and self.error[section] then %> cbi-value-error<% end %>"> +<%- + local title = luci.util.trim(striptags(self.title)) + local ftype = self.template and self.template:gsub("^.+/", "") +-%> +<div class="td cbi-value-field<% if self.error and self.error[section] then %> cbi-value-error<% end %>"<%= + attr("data-name", self.option) .. + ifattr(ftype and #ftype > 0, "data-type", ftype) .. + ifattr(title and #title > 0, "data-title", title) +%>> <div id="cbi-<%=self.config.."-"..section.."-"..self.option%>" data-index="<%=self.index%>" data-depends="<%=pcdata(self:deplist2json(section))%>"> diff --git a/modules/luci-base/luasrc/view/cbi/dropdown.htm b/modules/luci-base/luasrc/view/cbi/dropdown.htm index bdf7248375..cf8c03d22c 100644 --- a/modules/luci-base/luasrc/view/cbi/dropdown.htm +++ b/modules/luci-base/luasrc/view/cbi/dropdown.htm @@ -36,6 +36,18 @@ <%=pcdata(self.vallist[i])%> </li> <% end %> + <% if self.custom then %> + <li> + <input type="password" style="display:none" /> + <input class="create-item-input" type="text"<%= + attr("placeholder", self.custom ~= true and + self.custom or + (self.multiple and + translate("Enter custom values") or + translate("Enter custom value"))) + %> /> + </li> + <% end %> </ul> </div> diff --git a/modules/luci-base/luasrc/view/cbi/firewall_zoneforwards.htm b/modules/luci-base/luasrc/view/cbi/firewall_zoneforwards.htm index 546fd8e85a..b38e4b13db 100644 --- a/modules/luci-base/luasrc/view/cbi/firewall_zoneforwards.htm +++ b/modules/luci-base/luasrc/view/cbi/firewall_zoneforwards.htm @@ -14,46 +14,59 @@ local def = fwm:get_defaults() local zone = fwm:get_zone(value) local empty = true + + local function render_zone(zone) +-%> + <label class="zonebadge" style="background-color:<%=zone:get_color()%>"> + <strong><%=zone:name()%></strong> + <div class="cbi-tooltip"> + <%- + local zempty = true + for _, net in ipairs(zone:get_networks()) do + net = nwm:get_network(net) + if net then + zempty = false + -%> + <span class="ifacebadge<% if net:name() == self.network then %> ifacebadge-active<% end %>"><%=net:name()%>:  + <% + local nempty = true + for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do + nempty = false + %> + <img<%=attr("title", iface:get_i18n())%> src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> + <% end %> + <% if nempty then %><em><%:(empty)%></em><% end %> + </span> + <%- end end -%> + <% if zempty then %><span class="ifacebadge"><em><%:(empty)%></em></span><% end %> + </div> + </label> +<%- + end -%> <% if zone then %> -<div style="white-space:nowrap"> - <label class="zonebadge" style="background-color:<%=zone:get_color()%>"> - <strong><%=zone:name()%>:</strong> - <%- - local zempty = true - for _, net in ipairs(zone:get_networks()) do - net = nwm:get_network(net) - if net then - zempty = false - -%> - <span class="ifacebadge<% if net:name() == self.network then %> ifacebadge-active<% end %>"><%=net:name()%>: - <% - local nempty = true - for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do - nempty = false - %> - <img<%=attr("title", iface:get_i18n())%> style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> - <% end %> - <% if nempty then %><em><%:(empty)%></em><% end %> - </span> - <%- end end -%> - <%- if zempty then %><em><%:(empty)%></em><% end -%> - </label> -  ⇒  - <% for _, fwd in ipairs(zone:get_forwardings_by("src")) do - fz = fwd:dest_zone() - if fz then - empty = false %> - <label class="zonebadge" style="background-color:<%=fz:get_color()%>"> - <strong><%=fz:name()%></strong> - </label>  - <% end end %> - <% if empty then %> +<div class="zone-forwards"> + <div class="zone-src"> + <%=render_zone(zone)%> + </div> + <span>⇒</span> + <div class="zone-dest"> + <% + for _, fwd in ipairs(zone:get_forwardings_by("src")) do + fz = fwd:dest_zone() + if fz then + empty = false + render_zone(fz) + end + end + if empty then + %> <label class="zonebadge zonebadge-empty"> <strong><%=zone:forward():upper()%></strong> </label> <% end %> + </div> </div> <% end %> diff --git a/modules/luci-base/luasrc/view/cbi/footer.htm b/modules/luci-base/luasrc/view/cbi/footer.htm index e6acfb0697..5f939b6469 100644 --- a/modules/luci-base/luasrc/view/cbi/footer.htm +++ b/modules/luci-base/luasrc/view/cbi/footer.htm @@ -1,9 +1,7 @@ <%- if pageaction then -%> <div class="cbi-page-actions"> <% if redirect and not flow.hidebackbtn then %> - <div style="float:left"> <input class="cbi-button cbi-button-link" type="button" value="<%:Back to Overview%>" onclick="location.href='<%=pcdata(redirect)%>'" /> - </div> <% end %> <% if flow.skip then %> diff --git a/modules/luci-base/luasrc/view/cbi/full_valuefooter.htm b/modules/luci-base/luasrc/view/cbi/full_valuefooter.htm index f780936766..d4ad093efa 100644 --- a/modules/luci-base/luasrc/view/cbi/full_valuefooter.htm +++ b/modules/luci-base/luasrc/view/cbi/full_valuefooter.htm @@ -3,7 +3,6 @@ <br /> <%- end %> <div class="cbi-value-description"> - <span class="cbi-value-helpicon"><img src="<%=resource%>/cbi/help.gif" alt="<%:help%>" /></span> <%=self.description%> </div> <%- end %> diff --git a/modules/luci-base/luasrc/view/cbi/map.htm b/modules/luci-base/luasrc/view/cbi/map.htm index 02b47f5455..83c3cb2170 100644 --- a/modules/luci-base/luasrc/view/cbi/map.htm +++ b/modules/luci-base/luasrc/view/cbi/map.htm @@ -31,7 +31,6 @@ </li> <% end %> </ul> - <br /> <% for i, section in ipairs(self.children) do %> <div class="cbi-tabcontainer" id="container.m-<%=self.config%>.<%=section.section or section.sectiontype%>"<% if section.sectiontype ~= self.selected_tab then %> style="display:none"<% end %>> <% section:render() %> @@ -53,6 +52,4 @@ <% else %> <%- self:render_children() %> <% end %> - - <br /> </div> diff --git a/modules/luci-base/luasrc/view/cbi/nsection.htm b/modules/luci-base/luasrc/view/cbi/nsection.htm index abf67596f0..63abc57734 100644 --- a/modules/luci-base/luasrc/view/cbi/nsection.htm +++ b/modules/luci-base/luasrc/view/cbi/nsection.htm @@ -1,5 +1,5 @@ <% if self:cfgvalue(self.section) then section = self.section %> - <fieldset class="cbi-section"> + <div class="cbi-section"> <% if self.title and #self.title > 0 then -%> <legend><%=self.title%></legend> <%- end %> @@ -15,17 +15,16 @@ <div class="cbi-section-node<% if self.tabs then %> cbi-section-node-tabbed<% end %>" id="cbi-<%=self.config%>-<%=section%>"> <%+cbi/ucisection%> </div> - <br /> - </fieldset> + </div> <% elseif self.addremove then %> <% if self.template_addremove then include(self.template_addremove) else -%> - <fieldset class="cbi-section" id="cbi-<%=self.config%>-<%=self.section%>"> + <div class="cbi-section" id="cbi-<%=self.config%>-<%=self.section%>"> <% if self.title and #self.title > 0 then -%> <legend><%=self.title%></legend> <%- end %> <div class="cbi-section-descr"><%=self.description%></div> <input type="submit" class="cbi-button cbi-button-add" name="cbi.cns.<%=self.config%>.<%=self.section%>" value="<%:Add%>" /> - </fieldset> + </div> <%- end %> <% end %> <!-- /nsection --> diff --git a/modules/luci-base/luasrc/view/cbi/nullsection.htm b/modules/luci-base/luasrc/view/cbi/nullsection.htm index ef169593af..7230719d19 100644 --- a/modules/luci-base/luasrc/view/cbi/nullsection.htm +++ b/modules/luci-base/luasrc/view/cbi/nullsection.htm @@ -1,4 +1,4 @@ -<fieldset class="cbi-section"> +<div class="cbi-section"> <% if self.title and #self.title > 0 then -%> <legend><%=self.title%></legend> <%- end %> @@ -25,8 +25,7 @@ </div> <%- end %> </div> - <br /> -</fieldset> +</div> <%- if type(self.hidden) == "table" then for k, v in pairs(self.hidden) do diff --git a/modules/luci-base/luasrc/view/cbi/simpleform.htm b/modules/luci-base/luasrc/view/cbi/simpleform.htm index 3b758d70ee..c6000d22b3 100644 --- a/modules/luci-base/luasrc/view/cbi/simpleform.htm +++ b/modules/luci-base/luasrc/view/cbi/simpleform.htm @@ -10,7 +10,6 @@ <% if self.title and #self.title > 0 then %><h2 name="content"><%=self.title%></h2><% end %> <% if self.description and #self.description > 0 then %><div class="cbi-map-descr"><%=self.description%></div><% end %> <% self:render_children() %> - <br /> </div> <%- if self.message then %> <div><%=self.message%></div> @@ -30,9 +29,12 @@ end %> <% if redirect then %> - <div style="float:left"> - <input class="cbi-button cbi-button-link" type="button" value="<%:Back to Overview%>" onclick="location.href='<%=pcdata(redirect)%>'" /> - </div> + <input class="cbi-button cbi-button-link" type="button" value="<%:Back to Overview%>" onclick="location.href='<%=pcdata(redirect)%>'" /> +<% end %> +<%- if self.cancel ~= false and self.on_cancel then %> + <input class="cbi-button cbi-button-link" type="submit" name="cbi.cancel" value=" + <%- if not self.cancel then -%><%-:Cancel-%><%-else-%><%=self.cancel%><%end-%> + " /> <% end %> <%- if self.flow and self.flow.skip then %> <input class="cbi-button cbi-button-skip" type="submit" name="cbi.skip" value="<%:Skip%>" /> @@ -47,11 +49,6 @@ <%- if not self.reset then -%><%-:Reset-%><%-else-%><%=self.reset%><%end-%> " /> <% end %> -<%- if self.cancel ~= false and self.on_cancel then %> - <input class="cbi-button cbi-button-reset" type="submit" name="cbi.cancel" value=" - <%- if not self.cancel then -%><%-:Cancel-%><%-else-%><%=self.cancel%><%end-%> - " /> -<% end %> </div> </form> <% end %> diff --git a/modules/luci-base/luasrc/view/cbi/tblsection.htm b/modules/luci-base/luasrc/view/cbi/tblsection.htm index bb11cf1c06..ab13922040 100644 --- a/modules/luci-base/luasrc/view/cbi/tblsection.htm +++ b/modules/luci-base/luasrc/view/cbi/tblsection.htm @@ -14,10 +14,14 @@ function width(o) end return '' end + +local anonclass = (not self.anonymous or self.sectiontitle) and "named" or "anonymous" +local titlename = ifattr(not self.anonymous or self.sectiontitle, "data-title", translate("Name")) + -%> <!-- tblsection --> -<fieldset class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>"> +<div class="cbi-section cbi-tblsection" id="cbi-<%=self.config%>-<%=self.sectiontype%>"> <% if self.title and #self.title > 0 then -%> <legend><%=self.title%></legend> <%- end %> @@ -25,121 +29,107 @@ end <input type="hidden" id="cbi.sts.<%=self.config%>.<%=self.sectiontype%>" name="cbi.sts.<%=self.config%>.<%=self.sectiontype%>" value="" /> <%- end -%> <div class="cbi-section-descr"><%=self.description%></div> - <div class="cbi-section-node"> - <%- local count = 0 -%> - <div class="table cbi-section-table"> - <div class="tr cbi-section-table-titles"> - <%- if not self.anonymous then -%> - <%- if self.sectionhead then -%> - <div class="th cbi-section-table-cell"><%=self.sectionhead%></div> - <%- else -%> - <div class="th"> </div> - <%- end -%> - <%- count = count +1; end -%> - <%- for i, k in pairs(self.children) do if not k.optional then -%> - <div class="th cbi-section-table-cell"<%=width(k)%>> - <%- if k.titleref then -%><a title="<%=self.titledesc or translate('Go to relevant configuration page')%>" class="cbi-title-ref" href="<%=k.titleref%>"><%- end -%> - <%-=k.title-%> - <%- if k.titleref then -%></a><%- end -%> - </div> - <%- count = count + 1; end; end; if self.sortable then -%> - <div class="th cbi-section-table-cell"><%:Sort%></div> - <%- count = count + 1; end; if self.extedit or self.addremove then -%> - <div class="th cbi-section-table-cell"> </div> - <%- count = count + 1; end -%> - </div> - <div class="tr cbi-section-table-descr"> - <%- if not self.anonymous then -%> - <%- if self.sectiondesc then -%> - <div class="th cbi-section-table-cell"><%=self.sectiondesc%></div> - <%- else -%> - <div class="th"></div> - <%- end -%> - <%- end -%> - <%- for i, k in pairs(self.children) do if not k.optional then -%> - <div class="th cbi-section-table-cell"<%=width(k)%>><%=k.description%></div> - <%- end; end; if self.sortable then -%> - <div class="th cbi-section-table-cell"></div> - <%- end; if self.extedit or self.addremove then -%> - <div class="th cbi-section-table-cell"></div> - <%- end -%> + <%- local count = 0 -%> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles <%=anonclass%>"<%=titlename%>> + <%- for i, k in pairs(self.children) do if not k.optional then -%> + <div class="th cbi-section-table-cell"<%= + width(k) .. + attr("data-type", k.template and k.template:gsub("^.+/", "") or "") + %>> + <%- if k.titleref then -%><a title="<%=self.titledesc or translate('Go to relevant configuration page')%>" class="cbi-title-ref" href="<%=k.titleref%>"><%- end -%> + <%-=k.title-%> + <%- if k.titleref then -%></a><%- end -%> </div> - <%- local isempty = true - for i, k in ipairs(self:cfgsections()) do - section = k - isempty = false - scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" } - -%> - <div class="tr cbi-section-table-row<% if self.extedit or self.rowcolors then %> cbi-rowstyle-<%=rowstyle()%><% end %>" id="cbi-<%=self.config%>-<%=section%>"> - <% if not self.anonymous then -%> - <div class="th"><h3><%=(type(self.sectiontitle) == "function") and self:sectiontitle(section) or k%></h3></div> - <%- end %> - + <%- count = count + 1; end; end; if self.sortable or self.extedit or self.addremove then -%> + <div class="th cbi-section-table-cell cbi-section-actions"></div> + <%- count = count + 1; end -%> + </div> + <div class="tr cbi-section-table-descr <%=anonclass%>"> + <%- for i, k in pairs(self.children) do if not k.optional then -%> + <div class="th cbi-section-table-cell"<%= + width(k) .. + attr("data-type", k.template and k.template:gsub("^.+/", "") or "") + %>><%=k.description%></div> + <%- end; end; if self.sortable or self.extedit or self.addremove then -%> + <div class="th cbi-section-table-cell cbi-section-actions"></div> + <%- end -%> + </div> + <%- local isempty, i, k = true, nil, nil + for i, k in ipairs(self:cfgsections()) do + isempty = false - <%- - for k, node in ipairs(self.children) do - if not node.optional then - node:render(section, scope or {}) - end + local section = k + local sectionname = striptags((type(self.sectiontitle) == "function") and self:sectiontitle(section) or k) + local sectiontitle = ifattr(sectionname and (not self.anonymous or self.sectiontitle), "data-title", sectionname) + local colorclass = (self.extedit or self.rowcolors) and " cbi-rowstyle-%d" % rowstyle() or "" + local scope = { + valueheader = "cbi/cell_valueheader", + valuefooter = "cbi/cell_valuefooter" + } + -%> + <div class="tr cbi-section-table-row<%=colorclass%>" id="cbi-<%=self.config%>-<%=section%>"<%=sectiontitle%>> + <%- + local node + for k, node in ipairs(self.children) do + if not node.optional then + node:render(section, scope or {}) end - -%> - - <%- if self.sortable then -%> - <div class="td cbi-section-table-cell"> - <input class="cbi-button cbi-button-up" type="button" value="" onclick="return cbi_row_swap(this, true, 'cbi.sts.<%=self.config%>.<%=self.sectiontype%>')" alt="<%:Move up%>" title="<%:Move up%>" /> - <input class="cbi-button cbi-button-down" type="button" value="" onclick="return cbi_row_swap(this, false, 'cbi.sts.<%=self.config%>.<%=self.sectiontype%>')" alt="<%:Move down%>" title="<%:Move down%>" /> - </div> - <%- end -%> - - <%- if self.extedit or self.addremove then -%> - <div class="td cbi-section-table-cell"> - <%- if self.extedit then -%> - <input class="cbi-button cbi-button-edit" type="button" value="<%:Edit%>" - <%- if type(self.extedit) == "string" then - %> onclick="location.href='<%=self.extedit:format(section)%>'" - <%- elseif type(self.extedit) == "function" then - %> onclick="location.href='<%=self:extedit(section)%>'" - <%- end - %> alt="<%:Edit%>" title="<%:Edit%>" /> - <%- end; if self.addremove then %> - <input class="cbi-button cbi-button-remove" type="submit" value="<%:Delete%>" onclick="this.form.cbi_state='del-section'; return true" name="cbi.rts.<%=self.config%>.<%=k%>" alt="<%:Delete%>" title="<%:Delete%>" /> - <%- end -%> - </div> - <%- end -%> - </div> - <%- end -%> + end + -%> - <%- if isempty then -%> - <div class="tr cbi-section-table-row"> - <div class="td" colspan="<%=count%>"><em><br /><%:This section contains no values yet%></em></div> - </div> + <%- if self.sortable or self.extedit or self.addremove then -%> + <div class="td cbi-section-table-cell nowrap cbi-section-actions"> + <%- if self.sortable then -%> + <input class="cbi-button cbi-button-up" type="button" value="<%:Up%>" onclick="return cbi_row_swap(this, true, 'cbi.sts.<%=self.config%>.<%=self.sectiontype%>')" title="<%:Move up%>" /> + <input class="cbi-button cbi-button-down" type="button" value="<%:Down%>" onclick="return cbi_row_swap(this, false, 'cbi.sts.<%=self.config%>.<%=self.sectiontype%>')" title="<%:Move down%>" /> + <% end; if self.extedit then -%> + <input class="cbi-button cbi-button-edit" type="button" value="<%:Edit%>" + <%- if type(self.extedit) == "string" then + %> onclick="location.href='<%=self.extedit:format(section)%>'" + <%- elseif type(self.extedit) == "function" then + %> onclick="location.href='<%=self:extedit(section)%>'" + <%- end + %> alt="<%:Edit%>" title="<%:Edit%>" /> + <% end; if self.addremove then %> + <input class="cbi-button cbi-button-remove" type="submit" value="<%:Delete%>" onclick="this.form.cbi_state='del-section'; return true" name="cbi.rts.<%=self.config%>.<%=k%>" alt="<%:Delete%>" title="<%:Delete%>" /> + <%- end -%> + </div> <%- end -%> </div> + <%- end -%> - <% if self.error then %> - <div class="cbi-section-error"> - <ul><% for _, c in pairs(self.error) do for _, e in ipairs(c) do -%> - <li><%=pcdata(e):gsub("\n","<br />")%></li> - <%- end end %></ul> - </div> - <% end %> - - <%- if self.addremove then -%> - <% if self.template_addremove then include(self.template_addremove) else -%> - <div class="cbi-section-create cbi-tblsection-create"> - <% if self.anonymous then %> - <input class="cbi-button cbi-button-add" type="submit" value="<%:Add%>" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" title="<%:Add%>" /> - <% else %> - <% if self.invalid_cts then -%><div class="cbi-section-error"><% end %> - <input type="text" class="cbi-section-create-name" id="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" data-type="uciname" data-optional="true" /> - <input class="cbi-button cbi-button-add" type="submit" onclick="this.form.cbi_state='add-section'; return true" value="<%:Add%>" title="<%:Add%>" /> - <% if self.invalid_cts then -%> - <br /><%:Invalid%></div> - <%- end %> - <% end %> - </div> - <%- end %> + <%- if isempty then -%> + <div class="tr cbi-section-table-row placeholder"> + <div class="td"><em><%:This section contains no values yet%></em></div> + </div> <%- end -%> </div> -</fieldset> + + <% if self.error then %> + <div class="cbi-section-error"> + <ul><% for _, c in pairs(self.error) do for _, e in ipairs(c) do -%> + <li><%=pcdata(e):gsub("\n","<br />")%></li> + <%- end end %></ul> + </div> + <% end %> + + <%- if self.addremove then -%> + <% if self.template_addremove then include(self.template_addremove) else -%> + <div class="cbi-section-create cbi-tblsection-create"> + <% if self.anonymous then %> + <input class="cbi-button cbi-button-add" type="submit" value="<%:Add%>" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" title="<%:Add%>" /> + <% else %> + <% if self.invalid_cts then -%> + <div class="cbi-section-error"><%:Invalid%></div> + <%- end %> + <div> + <input type="text" class="cbi-section-create-name" id="cbi.cts.<%=self.config%>.<%=self.sectiontype%>." name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>." data-type="uciname" data-optional="true" /> + </div> + <input class="cbi-button cbi-button-add" type="submit" onclick="this.form.cbi_state='add-section'; return true" value="<%:Add%>" title="<%:Add%>" /> + <% end %> + </div> + <%- end %> + <%- end -%> +</div> <!-- /tblsection --> diff --git a/modules/luci-base/luasrc/view/cbi/tsection.htm b/modules/luci-base/luasrc/view/cbi/tsection.htm index 726521ae3f..1a13df0c04 100644 --- a/modules/luci-base/luasrc/view/cbi/tsection.htm +++ b/modules/luci-base/luasrc/view/cbi/tsection.htm @@ -1,4 +1,4 @@ -<fieldset class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>"> +<div class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>"> <% if self.title and #self.title > 0 then -%> <legend><%=self.title%></legend> <%- end %> @@ -20,10 +20,9 @@ <%+cbi/tabmenu%> - <fieldset class="cbi-section-node<% if self.tabs then %> cbi-section-node-tabbed<% end %>" id="cbi-<%=self.config%>-<%=section%>"> + <div class="cbi-section-node<% if self.tabs then %> cbi-section-node-tabbed<% end %>" id="cbi-<%=self.config%>-<%=section%>"> <%+cbi/ucisection%> - </fieldset> - <br /> + </div> <%- end %> <% if isempty then -%> @@ -36,14 +35,15 @@ <% if self.anonymous then -%> <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> <%- else -%> - <% if self.invalid_cts then -%><div class="cbi-section-error"><% end %> - <input type="text" class="cbi-section-create-name" id="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" data-type="uciname" data-optional="true" /> - <input type="submit" class="cbi-button cbi-button-add" onclick="this.form.cbi_state='add-section'; return true" value="<%:Add%>" /> <% if self.invalid_cts then -%> - <br /><%:Invalid%></div> + <div class="cbi-section-error"><%:Invalid%></div> <%- end %> + <div> + <input type="text" class="cbi-section-create-name" id="cbi.cts.<%=self.config%>.<%=self.sectiontype%>." name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>." data-type="uciname" data-optional="true" /> + </div> + <input class="cbi-button cbi-button-add" type="submit" onclick="this.form.cbi_state='add-section'; return true" value="<%:Add%>" title="<%:Add%>" /> <%- end %> </div> <%- end %> <%- end %> -</fieldset> +</div> diff --git a/modules/luci-base/luasrc/view/cbi/upload.htm b/modules/luci-base/luasrc/view/cbi/upload.htm index 4fb5201aac..3c3d82b653 100644 --- a/modules/luci-base/luasrc/view/cbi/upload.htm +++ b/modules/luci-base/luasrc/view/cbi/upload.htm @@ -8,7 +8,7 @@ <%:Uploaded File%> (<%=t.byte_format(s.size)%>) <% if self.unsafeupload then %> <input type="hidden"<%= attr("value", v) .. attr("name", cbid) .. attr("id", cbid) %> /> - <input class="cbi-button cbi-input-image" type="image" value="<%:Replace entry%>" name="cbi.rlf.<%=section .. "." .. self.option%>" alt="<%:Replace entry%>" title="<%:Replace entry%>" src="<%=resource%>/cbi/reload.gif" /> + <input class="cbi-button cbi-button-image" type="image" value="<%:Replace entry%>" name="cbi.rlf.<%=section .. "." .. self.option%>" alt="<%:Replace entry%>" title="<%:Replace entry%>" src="<%=resource%>/cbi/reload.gif" /> <% end %> <% end %> diff --git a/modules/luci-base/luasrc/view/sysauth.htm b/modules/luci-base/luasrc/view/sysauth.htm index e7a741aaab..9b0e2de780 100644 --- a/modules/luci-base/luasrc/view/sysauth.htm +++ b/modules/luci-base/luasrc/view/sysauth.htm @@ -18,23 +18,23 @@ <div class="cbi-map-descr"> <%:Please enter your username and password.%> </div> - <fieldset class="cbi-section"><fieldset class="cbi-section-node"> + <div class="cbi-section"><div class="cbi-section-node"> <div class="cbi-value"> <label class="cbi-value-title"><%:Username%></label> <div class="cbi-value-field"> - <input class="cbi-input-user" type="text" name="luci_username" value="<%=duser%>" /> + <input class="cbi-input-text" type="text" name="luci_username" value="<%=duser%>" /> </div> </div> <div class="cbi-value cbi-value-last"> <label class="cbi-value-title"><%:Password%></label> <div class="cbi-value-field"> - <input class="cbi-input-password" type="password" name="luci_password" /> + <input class="cbi-input-text" type="password" name="luci_password" /> </div> </div> - </fieldset></fieldset> + </div></div> </div> - <div> + <div class="cbi-page-actions"> <input type="submit" value="<%:Login%>" class="cbi-button cbi-button-apply" /> <input type="reset" value="<%:Reset%>" class="cbi-button cbi-button-reset" /> </div> diff --git a/modules/luci-base/po/ca/base.po b/modules/luci-base/po/ca/base.po index d7a1d29393..b94068a0c3 100644 --- a/modules/luci-base/po/ca/base.po +++ b/modules/luci-base/po/ca/base.po @@ -500,12 +500,12 @@ msgstr "Enrere al resum" msgid "Back to scan results" msgstr "Enrere als resultats de l'escaneig" +msgid "Backup" +msgstr "Còpia de seguretat" + msgid "Backup / Flash Firmware" msgstr "Còpia de seguretat i microprogramari" -msgid "Backup / Restore" -msgstr "Còpia de seguretat i restauració de la configuració" - msgid "Backup file list" msgstr "Llista de còpies de seguretat" @@ -640,13 +640,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Fes clic a \"Genera l'arxiu\" per obtenir un fitxer .tar.gz amb els fitxers " -"de configuració actuals. Per restablir el microprogramari al seu estat " -"inicial, fes clic a \"Restableix la configuració\" (només funciona amb " -"imatges squashfs)." +"de configuració actuals." msgid "Client" msgstr "Client" @@ -764,9 +761,6 @@ msgstr "" "Personalitza el comportament dels <abbr title=\"Light Emitting Diode\">LED</" "abbr>s del dispositiu, si és possible." -msgid "DHCP Leases" -msgstr "Arrendaments DHCP" - msgid "DHCP Server" msgstr "Servidor DHCP" @@ -779,9 +773,6 @@ msgstr "Client DHCP" msgid "DHCP-Options" msgstr "Opcions DHCP" -msgid "DHCPv6 Leases" -msgstr "Arrendaments DHCPv6" - msgid "DHCPv6 client" msgstr "" @@ -875,10 +866,10 @@ msgstr "Configuració de dispositiu" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -969,6 +960,9 @@ msgstr "" "No reenviïs les peticions <abbr title=\"Domain Name System\">DNS</abbr> " "sense el nom <abbr title=\"Domain Name System\">DNS</abbr>" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Descarrega i instal·la el paquet" @@ -1082,6 +1076,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1114,6 +1111,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Esborrant..." @@ -1296,7 +1299,7 @@ msgstr "Espai lliure" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2594,7 +2597,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2607,7 +2610,7 @@ msgstr "" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2751,6 +2754,9 @@ msgstr "Reinicia" msgid "Restart Firewall" msgstr "Reinicia el tallafocs" +msgid "Restore" +msgstr "Restauració de la configuració" + msgid "Restore backup" msgstr "Restaura còpia de seguretat" @@ -2949,9 +2955,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "Ordena" - msgid "Source" msgstr "Origen" @@ -3146,6 +3149,9 @@ msgstr "" "Els carà cters permets són: <code>A-Z</code>, <code>a-z</code>, <code>0-9</" "code> i <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3362,10 +3368,13 @@ msgstr "Zona horà ria" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Per restaurar els fitxers de configuració, pots pujar una còpia de seguretat " -"generada anteriorment aquÃ." +"generada anteriorment aquÃ. Per restablir el microprogramari al seu estat " +"inicial, fes clic a \"Restableix la configuració\" (només funciona amb " +"imatges squashfs)." msgid "Tone" msgstr "" @@ -3457,6 +3466,9 @@ msgstr "Canvis sense desar" msgid "Unsupported protocol type." msgstr "Tipus de protocol no suportat." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Actualitza les llistes" @@ -3757,9 +3769,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "ajuda" - msgid "hidden" msgstr "amagat" @@ -3862,6 +3871,18 @@ msgstr "sÃ" msgid "« Back" msgstr "« Enrere" +#~ msgid "DHCP Leases" +#~ msgstr "Arrendaments DHCP" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "Arrendaments DHCPv6" + +#~ msgid "Sort" +#~ msgstr "Ordena" + +#~ msgid "help" +#~ msgstr "ajuda" + #~ msgid "IPv4 WAN Status" #~ msgstr "Estat WAN IPv4" diff --git a/modules/luci-base/po/cs/base.po b/modules/luci-base/po/cs/base.po index 2a042d2031..1dd8340df0 100644 --- a/modules/luci-base/po/cs/base.po +++ b/modules/luci-base/po/cs/base.po @@ -495,12 +495,12 @@ msgstr "ZpÄ›t k pÅ™ehledu" msgid "Back to scan results" msgstr "ZpÄ›t k výsledkům vyhledávánÃ" +msgid "Backup" +msgstr "Zálohovat" + msgid "Backup / Flash Firmware" msgstr "Zálohovat / nahrát firmware" -msgid "Backup / Restore" -msgstr "Zálohovat / obnovit" - msgid "Backup file list" msgstr "Seznam souborů k zálohovánÃ" @@ -633,12 +633,9 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" -"Pro staženà archivu tar s aktuálnà konfiguracà stisknÄ›te \"VytvoÅ™it archiv" -"\". Pro obnovenà továrnÃho nastavenà stisknÄ›te \"Obnovit výchozÃ\" (možné " -"pouze s obrazy squashfs)." +"Pro staženà archivu tar s aktuálnà konfiguracà stisknÄ›te \"VytvoÅ™it archiv\"." msgid "Client" msgstr "Klient" @@ -758,9 +755,6 @@ msgstr "" "Upravà chovánà <abbr title=\"Light Emitting Diode\">LED</abbr> diod zaÅ™Ãzenà " "pokud je to možné." -msgid "DHCP Leases" -msgstr "DHCP výpůjÄky" - msgid "DHCP Server" msgstr "DHCP server" @@ -773,9 +767,6 @@ msgstr "DHCP klient" msgid "DHCP-Options" msgstr "Volby DHCP" -msgid "DHCPv6 Leases" -msgstr "DHCPv6 pÅ™idÄ›lené IP" - msgid "DHCPv6 client" msgstr "" @@ -871,10 +862,10 @@ msgstr "Nastavenà zaÅ™ÃzenÃ" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -967,6 +958,9 @@ msgstr "" "NepÅ™eposÃlat <abbr title=\"Domain Name System\">DNS</abbr> dotazy bez <abbr " "title=\"Domain Name System\">DNS</abbr> jména" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Stáhnout a nainstalovat balÃÄek" @@ -1082,6 +1076,9 @@ msgstr "" msgid "Enable this mount" msgstr "Povolit tento pÅ™Ãpojný bod" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Povolit tento swapovacà oddÃl" @@ -1114,6 +1111,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "OdstraňovánÃ..." @@ -1298,7 +1301,7 @@ msgstr "Volné mÃsto" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2605,11 +2608,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"Opravdu odstranit toto rozhranÃ? OdstranÄ›nà nelze vrátit zpÄ›t!\n" -"Můžete ztratit pÅ™Ãstup k zaÅ™ÃzenÃ, pokud jste pÅ™ipojeni prostÅ™ednictvÃm " -"tohoto rozhranÃ." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2622,14 +2622,10 @@ msgstr "" msgid "Really reset all changes?" msgstr "Opravdu resetovat vÅ¡echny zmÄ›ny?" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"Opravdu vypnout sÃÅ¥ ?\n" -"Můžete ztratit pÅ™Ãstup k zaÅ™ÃzenÃ, pokud jste pÅ™ipojeni prostÅ™ednictvÃm " -"tohoto rozhranÃ." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2776,6 +2772,9 @@ msgstr "Restart" msgid "Restart Firewall" msgstr "Restartovat firewall" +msgid "Restore" +msgstr "Obnovit" + msgid "Restore backup" msgstr "Obnovit zálohu" @@ -2978,9 +2977,6 @@ msgstr "" "systému. Nový obraz firmwaru musà být zapsán ruÄnÄ›. ProsÃm, obraÅ¥te se na " "wiki pro zaÅ™Ãzenà specifické instalaÄnà instrukce." -msgid "Sort" -msgstr "SeÅ™adit" - msgid "Source" msgstr "Zdroj" @@ -3186,6 +3182,9 @@ msgstr "" "Povolené znaky jsou: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> a " "<code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3402,10 +3401,12 @@ msgstr "ÄŒasové pásmo" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Zde můžete nahrát dÅ™Ãve vygenerovaný záložnà archiv, pokud chcete obnovit " -"konfiguraÄnà soubory." +"konfiguraÄnà soubory. Pro obnovenà továrnÃho nastavenà stisknÄ›te \"Obnovit " +"výchozÃ\" (možné pouze s obrazy squashfs)." msgid "Tone" msgstr "" @@ -3497,6 +3498,9 @@ msgstr "Neuložené zmÄ›ny" msgid "Unsupported protocol type." msgstr "Nepodporovaný typ protokolu." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Aktualizovat seznamy" @@ -3798,9 +3802,6 @@ msgstr "plný-duplex" msgid "half-duplex" msgstr "poloviÄnÃ-duplex" -msgid "help" -msgstr "pomoc" - msgid "hidden" msgstr "skrytý" @@ -3903,6 +3904,35 @@ msgstr "ano" msgid "« Back" msgstr "« ZpÄ›t" +#~ msgid "DHCP Leases" +#~ msgstr "DHCP výpůjÄky" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "DHCPv6 pÅ™idÄ›lené IP" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "Opravdu odstranit toto rozhranÃ? OdstranÄ›nà nelze vrátit zpÄ›t!\n" +#~ "Můžete ztratit pÅ™Ãstup k zaÅ™ÃzenÃ, pokud jste pÅ™ipojeni prostÅ™ednictvÃm " +#~ "tohoto rozhranÃ." + +#, fuzzy +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "Opravdu vypnout sÃÅ¥ ?\n" +#~ "Můžete ztratit pÅ™Ãstup k zaÅ™ÃzenÃ, pokud jste pÅ™ipojeni prostÅ™ednictvÃm " +#~ "tohoto rozhranÃ." + +#~ msgid "Sort" +#~ msgstr "SeÅ™adit" + +#~ msgid "help" +#~ msgstr "pomoc" + #~ msgid "IPv4 WAN Status" #~ msgstr "Stav IPv4 WAN" diff --git a/modules/luci-base/po/de/base.po b/modules/luci-base/po/de/base.po index 3157c3b447..5d70b83d53 100644 --- a/modules/luci-base/po/de/base.po +++ b/modules/luci-base/po/de/base.po @@ -504,12 +504,12 @@ msgstr "Zurück zur Ãœbersicht" msgid "Back to scan results" msgstr "Zurück zu den Scan-Ergebnissen" +msgid "Backup" +msgstr "Sichern" + msgid "Backup / Flash Firmware" msgstr "Backup / Firmware Update" -msgid "Backup / Restore" -msgstr "Sichern / Wiederherstellen" - msgid "Backup file list" msgstr "Liste zu sichernder Dateien" @@ -650,13 +650,10 @@ msgstr "Cisco UDP-Kapselung" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Zum Herunterladen der aktuellen Konfigurationsdateien als gepacktes Archiv " -"\"Sicherung erstellen\" drücken. \"Konfiguration zurücksetzen\" stellt den " -"Auslieferungszustand des Systems wieder her (nur möglich bei squashfs-" -"Images)." +"\"Sicherung erstellen\" drücken." msgid "Client" msgstr "Client" @@ -780,9 +777,6 @@ msgid "" "\">LED</abbr>s if possible." msgstr "Passt das Verhalten der Geräte-LEDs an - wenn dies möglich ist." -msgid "DHCP Leases" -msgstr "DHCP-Leases" - msgid "DHCP Server" msgstr "DHCP-Server" @@ -795,9 +789,6 @@ msgstr "DHCP Client" msgid "DHCP-Options" msgstr "DHCP-Optionen" -msgid "DHCPv6 Leases" -msgstr "DHCPv6-Leases" - msgid "DHCPv6 client" msgstr "DHCPv6 Client" @@ -893,10 +884,10 @@ msgstr "Gerätekonfiguration" msgid "Device is rebooting..." msgstr "Das Gerät startet neu..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "Das Gerät ist nicht erreichbar" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -990,6 +981,9 @@ msgid "" "<abbr title=\"Domain Name System\">DNS</abbr>-Name" msgstr "Anfragen ohne Domainnamen nicht weiterleiten" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Paket herunterladen und installieren" @@ -1107,6 +1101,9 @@ msgstr "Das DF-Bit (Nicht fragmentieren) auf gekapselten Paketen setzen." msgid "Enable this mount" msgstr "Diesen Mountpunkt aktivieren" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Diesen Auslagerungsspeicher aktivieren" @@ -1141,6 +1138,12 @@ msgstr "Entfernter Server" msgid "Endpoint Port" msgstr "Entfernter Port" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Lösche..." @@ -1331,10 +1334,10 @@ msgstr "Freier Platz" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" "Weitere Informationen zu WireGuard-Schnittstellen und Peers unter <a href=" -"\"http://wireguard.io\">wireguard.io</a>." +"\"http://wireguard.com\">wireguard.com</a>." msgid "GHz" msgstr "GHz" @@ -2685,12 +2688,8 @@ msgstr "Lese Informationen aus /etc/ethers um den DHCP-Server zu konfigurieren" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"Diese Schnittstelle wirklich löschen? Der Schritt kann nicht rückgängig " -"gemacht werden!\n" -"Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über diese " -"Schnittstelle verbunden sind." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2704,14 +2703,10 @@ msgstr "" msgid "Really reset all changes?" msgstr "Sollen wirklich alle Änderungen verworfen werden?" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"Das Netzwerk wirklich herunterfahren?\n" -"Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über diese " -"Schnittstelle verbunden sind." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2866,6 +2861,9 @@ msgstr "Neustarten" msgid "Restart Firewall" msgstr "Firewall neu starten" +msgid "Restore" +msgstr "Wiederherstellen" + msgid "Restore backup" msgstr "Sicherung wiederherstellen" @@ -3073,9 +3071,6 @@ msgstr "" "geflasht werden. Weitere Informationen sowie gerätespezifische " "Installationsanleitungen entnehmen Sie bitte dem Wiki." -msgid "Sort" -msgstr "Sortieren" - msgid "Source" msgstr "Quelle" @@ -3297,6 +3292,9 @@ msgstr "" "Erlaubte Buchstaben sind: <code>A-Z</code>, <code>a-z</code>, <code>0-9</" "code> and <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" "Die Konfigurationsdatei konnte aufgrund der folgenden Fehler nicht geladen " @@ -3530,10 +3528,13 @@ msgstr "Zeitzone" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Zum Wiederherstellen der Konfiguration kann hier ein bereits vorhandenes " -"Backup-Archiv hochgeladen werden." +"Backup-Archiv hochgeladen werden. \"Konfiguration zurücksetzen\" stellt den " +"Auslieferungszustand des Systems wieder her (nur möglich bei squashfs-" +"Images)." msgid "Tone" msgstr "Ton" @@ -3626,6 +3627,9 @@ msgstr "Ungespeicherte Änderungen" msgid "Unsupported protocol type." msgstr "Nicht unterstützter Protokolltyp." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Listen aktualisieren" @@ -3934,9 +3938,6 @@ msgstr "Voll-Duplex" msgid "half-duplex" msgstr "Halb-Duplex" -msgid "help" -msgstr "Hilfe" - msgid "hidden" msgstr "versteckt" @@ -4039,6 +4040,36 @@ msgstr "ja" msgid "« Back" msgstr "« Zurück" +#~ msgid "DHCP Leases" +#~ msgstr "DHCP-Leases" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "DHCPv6-Leases" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "Diese Schnittstelle wirklich löschen? Der Schritt kann nicht rückgängig " +#~ "gemacht werden!\n" +#~ "Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über diese " +#~ "Schnittstelle verbunden sind." + +#, fuzzy +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "Das Netzwerk wirklich herunterfahren?\n" +#~ "Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über diese " +#~ "Schnittstelle verbunden sind." + +#~ msgid "Sort" +#~ msgstr "Sortieren" + +#~ msgid "help" +#~ msgstr "Hilfe" + #~ msgid "IPv4 WAN Status" #~ msgstr "IPv4 WAN Status" diff --git a/modules/luci-base/po/el/base.po b/modules/luci-base/po/el/base.po index 7eccb971bf..512017248a 100644 --- a/modules/luci-base/po/el/base.po +++ b/modules/luci-base/po/el/base.po @@ -502,12 +502,12 @@ msgstr "Πίσω Ï€Ïος επισκόπηση" msgid "Back to scan results" msgstr "Πίσω στα αποτελÎσματα σάÏωσης" +msgid "Backup" +msgstr "Αποθήκευση" + msgid "Backup / Flash Firmware" msgstr "ΑντίγÏαφο ασφαλείας / ΕγγÏαφή FLASH Υλικολογισμικό" -msgid "Backup / Restore" -msgstr "Αποθήκευση / ΕπαναφοÏά ΑντίγÏαφου Ασφαλείας" - msgid "Backup file list" msgstr "Λίστα αÏχείων για αντίγÏαφο ασφαλείας" @@ -640,13 +640,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Κλικ στο \"ΔημιουÏγία αÏχείου\" για να κατεβάσετε Îνα tar αÏχείο με τα " -"Ï„ÏÎχοντα αÏχεία παÏαμετÏοποίησης. Για να επαναφÎÏετε το υλικολογισμικό στην " -"αÏχική του κατάσταση, κάντε κλικ στο \"ΕκτÎλεσε επαναφοÏά\" (δυνατό μόνο σε " -"squashfs εικόνες)." +"Ï„ÏÎχοντα αÏχεία παÏαμετÏοποίησης." msgid "Client" msgstr "Πελάτης" @@ -767,9 +764,6 @@ msgstr "" "Ρυθμίζει, αν είναι δυνατόν, την συμπεÏιφοÏά των <abbr title=\"Light Emitting " "Diode\">LED</abbr> της συσκευής." -msgid "DHCP Leases" -msgstr "DHCP Leases" - msgid "DHCP Server" msgstr "ΕξυπηÏετητής DHCP" @@ -782,9 +776,6 @@ msgstr "Πελάτης DHCP" msgid "DHCP-Options" msgstr "ΕπιλογÎÏ‚ DHCP" -msgid "DHCPv6 Leases" -msgstr "" - msgid "DHCPv6 client" msgstr "" @@ -880,10 +871,10 @@ msgstr "ΠαÏαμετÏοποίηση Συσκευής" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -978,6 +969,9 @@ msgstr "" "Îα μην Ï€ÏοωθοÏνται εÏωτήματα <abbr title=\"Domain Name System\">DNS</abbr> " "χωÏίς όνομα τομÎα <abbr title=\"Domain Name System\">DNS</abbr>" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "ΚατÎβασμα και εγκατάσταση πακÎτου" @@ -1094,6 +1088,9 @@ msgstr "" msgid "Enable this mount" msgstr "ΕνεÏγοποίηση αυτής της Ï€ÏοσάÏτησης" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "ΕνεÏγοποίηση αυτής της swap" @@ -1126,6 +1123,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "ΔιαγÏάφεται..." @@ -1312,7 +1315,7 @@ msgstr "ΕλεÏθεÏος χώÏος" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2611,7 +2614,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2624,7 +2627,7 @@ msgstr "ΑÏχικοποίηση όλων των αλλαγών;" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2768,6 +2771,9 @@ msgstr "Επανεκκίνηση" msgid "Restart Firewall" msgstr "Επανεκκίνηση Τείχους Î Ïοστασίας" +msgid "Restore" +msgstr "ΕπαναφοÏά ΑντίγÏαφου Ασφαλείας" + msgid "Restore backup" msgstr "ΕπαναφοÏά αντιγÏάφου ασφαλείας" @@ -2967,9 +2973,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "Ταξινόμηση" - msgid "Source" msgstr "Πηγή" @@ -3164,6 +3167,9 @@ msgstr "" "Οι επιτÏεπόμενοι χαÏακτήÏες είναι: <code>A-Z</code>, <code>a-z</code>, " "<code>0-9</code> και <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3363,8 +3369,13 @@ msgstr "Ζώνη ÏŽÏας" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" +"To restore configuration files, you can upload a previously generated backup " +"archive here. Για να επαναφÎÏετε το υλικολογισμικό στην αÏχική του " +"κατάσταση, κάντε κλικ στο \"ΕκτÎλεσε επαναφοÏά\" (δυνατό μόνο σε squashfs " +"εικόνες)." msgid "Tone" msgstr "" @@ -3456,6 +3467,9 @@ msgstr "Μη-αποθηκευμÎνες ΑλλαγÎÏ‚" msgid "Unsupported protocol type." msgstr "" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3750,9 +3764,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "βοήθεια" - msgid "hidden" msgstr "" @@ -3855,6 +3866,15 @@ msgstr "ναι" msgid "« Back" msgstr "« Πίσω" +#~ msgid "DHCP Leases" +#~ msgstr "DHCP Leases" + +#~ msgid "Sort" +#~ msgstr "Ταξινόμηση" + +#~ msgid "help" +#~ msgstr "βοήθεια" + #~ msgid "IPv6 WAN Status" #~ msgstr "Κατάσταση IPv6 WAN" diff --git a/modules/luci-base/po/en/base.po b/modules/luci-base/po/en/base.po index 40bb1bff63..31af05177e 100644 --- a/modules/luci-base/po/en/base.po +++ b/modules/luci-base/po/en/base.po @@ -493,12 +493,12 @@ msgstr "Back to overview" msgid "Back to scan results" msgstr "Back to scan results" +msgid "Backup" +msgstr "" + msgid "Backup / Flash Firmware" msgstr "Backup / Flash Firmware" -msgid "Backup / Restore" -msgstr "Backup / Restore" - msgid "Backup file list" msgstr "Backup file list" @@ -629,12 +629,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgid "Client" msgstr "Client" @@ -754,9 +752,6 @@ msgstr "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." -msgid "DHCP Leases" -msgstr "DHCP Leases" - msgid "DHCP Server" msgstr "DHCP Server" @@ -769,9 +764,6 @@ msgstr "DHCP client" msgid "DHCP-Options" msgstr "DHCP-Options" -msgid "DHCPv6 Leases" -msgstr "" - msgid "DHCPv6 client" msgstr "" @@ -868,10 +860,10 @@ msgstr "Device Configuration" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -960,6 +952,9 @@ msgstr "" "Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests " "without <abbr title=\"Domain Name System\">DNS</abbr>-Name" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Download and install package" @@ -1073,6 +1068,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1105,6 +1103,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "" @@ -1287,7 +1291,7 @@ msgstr "" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2577,7 +2581,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2590,7 +2594,7 @@ msgstr "" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2734,6 +2738,9 @@ msgstr "Restart" msgid "Restart Firewall" msgstr "Restart Firewall" +msgid "Restore" +msgstr "" + msgid "Restore backup" msgstr "Restore backup" @@ -2931,9 +2938,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "" - msgid "Source" msgstr "Source" @@ -3124,6 +3128,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3320,8 +3327,12 @@ msgstr "Timezone" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" +"To restore configuration files, you can upload a previously generated backup " +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgid "Tone" msgstr "" @@ -3413,6 +3424,9 @@ msgstr "Unsaved Changes" msgid "Unsupported protocol type." msgstr "" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3707,9 +3721,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "help" - msgid "hidden" msgstr "" @@ -3812,6 +3823,15 @@ msgstr "" msgid "« Back" msgstr "« Back" +#~ msgid "Backup / Restore" +#~ msgstr "Backup / Restore" + +#~ msgid "DHCP Leases" +#~ msgstr "DHCP Leases" + +#~ msgid "help" +#~ msgstr "help" + #~ msgid "Apply" #~ msgstr "Apply" diff --git a/modules/luci-base/po/es/base.po b/modules/luci-base/po/es/base.po index 9e0aede5de..4350b85482 100644 --- a/modules/luci-base/po/es/base.po +++ b/modules/luci-base/po/es/base.po @@ -499,12 +499,12 @@ msgstr "Volver al resumen" msgid "Back to scan results" msgstr "Volver a resultados de la exploración" +msgid "Backup" +msgstr "Salvar" + msgid "Backup / Flash Firmware" msgstr "Copia de seguridad / Grabar firmware" -msgid "Backup / Restore" -msgstr "Salvar / Restaurar" - msgid "Backup file list" msgstr "Salvar lista de ficheros" @@ -638,12 +638,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Pulse \"generar archivo\" para descargar un fichero tar con los ficheros de " -"configuración actuales. Para reiniciar el firmware a su estado inicial pulse " -"\"Reiniciar\" (sólo posible con imágenes squashfs)." +"configuración actuales." msgid "Client" msgstr "Cliente" @@ -763,9 +761,6 @@ msgstr "" "Personaliza el comportamiento de los <abbr title=\"Light Emitting Diode" "\">LED</abbr>s del dispositivo, si es posible." -msgid "DHCP Leases" -msgstr "Cesiones DHCP" - msgid "DHCP Server" msgstr "Servidor DHCP" @@ -778,9 +773,6 @@ msgstr "Cliente DHCP" msgid "DHCP-Options" msgstr "Opciones de DHCP" -msgid "DHCPv6 Leases" -msgstr "Cesiones DHCPv6" - msgid "DHCPv6 client" msgstr "" @@ -877,10 +869,10 @@ msgstr "Configuración del dispositivo" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -973,6 +965,9 @@ msgstr "" "No reenviar peticiones de <abbr title=\"Domain Name System\">DNS</abbr> sin " "un nombre de <abbr title=\"Domain Name System\">DNS</abbr>" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Descargar e instalar paquete" @@ -1088,6 +1083,9 @@ msgstr "" msgid "Enable this mount" msgstr "Active este punto de montaje" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Activar este swap" @@ -1120,6 +1118,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Borrando..." @@ -1306,7 +1310,7 @@ msgstr "Espacio libre" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2619,12 +2623,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"¿Está seguro de borrar esta interfaz?. ¡No será posible deshacer el " -"borrado!\n" -"Puede perder el acceso a este dispositivo si está conectado por esta " -"interfaz." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2637,13 +2637,10 @@ msgstr "" msgid "Really reset all changes?" msgstr "¿Está seguro de querer reiniciar todos los cambios?" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"¿Está seguro de querer apagar esta red?.\n" -"Puede perder el acceso a este dispositivo si está conectado por esta red." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2788,6 +2785,9 @@ msgstr "Rearrancar" msgid "Restart Firewall" msgstr "Rearrancar cortafuegos" +msgid "Restore" +msgstr "Restaurar" + msgid "Restore backup" msgstr "Restaurar copia de seguridad" @@ -2991,9 +2991,6 @@ msgstr "" "grabarse manualmente. Por favor, mire el wiki para instrucciones de " "instalación especÃficas." -msgid "Sort" -msgstr "Ordenar" - msgid "Source" msgstr "Origen" @@ -3206,6 +3203,9 @@ msgstr "" "Los caracteres permitidos son: <code>A-Z</code>, <code>a-z</code>, " "<code>0-9</code> y <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3427,10 +3427,12 @@ msgstr "Zona horaria" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Para restaurar los ficheros de configuración, debe subir primero una copia " -"de seguridad." +"de seguridad. Para reiniciar el firmware a su estado inicial pulse " +"\"Reiniciar\" (sólo posible con imágenes squashfs)." msgid "Tone" msgstr "" @@ -3522,6 +3524,9 @@ msgstr "Cambios no guardados" msgid "Unsupported protocol type." msgstr "Tipo de protocolo no soportado." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Actualizar listas" @@ -3825,9 +3830,6 @@ msgstr "full dúplex" msgid "half-duplex" msgstr "half dúplex" -msgid "help" -msgstr "ayuda" - msgid "hidden" msgstr "oculto" @@ -3930,6 +3932,35 @@ msgstr "sÃ" msgid "« Back" msgstr "« Volver" +#~ msgid "DHCP Leases" +#~ msgstr "Cesiones DHCP" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "Cesiones DHCPv6" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "¿Está seguro de borrar esta interfaz?. ¡No será posible deshacer el " +#~ "borrado!\n" +#~ "Puede perder el acceso a este dispositivo si está conectado por esta " +#~ "interfaz." + +#, fuzzy +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "¿Está seguro de querer apagar esta red?.\n" +#~ "Puede perder el acceso a este dispositivo si está conectado por esta red." + +#~ msgid "Sort" +#~ msgstr "Ordenar" + +#~ msgid "help" +#~ msgstr "ayuda" + #~ msgid "IPv4 WAN Status" #~ msgstr "Estado de la WAN IPv4" diff --git a/modules/luci-base/po/fr/base.po b/modules/luci-base/po/fr/base.po index 90c547b264..813f7f7544 100644 --- a/modules/luci-base/po/fr/base.po +++ b/modules/luci-base/po/fr/base.po @@ -505,12 +505,12 @@ msgstr "Retour à la vue générale" msgid "Back to scan results" msgstr "Retour aux résultats de la recherche" +msgid "Backup" +msgstr "Sauvegarder" + msgid "Backup / Flash Firmware" msgstr "Sauvegarde / Mise à jour du micrologiciel" -msgid "Backup / Restore" -msgstr "Sauvegarder / Restaurer" - msgid "Backup file list" msgstr "Liste des fichiers de sauvegarde" @@ -644,13 +644,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Cliquer sur \"Construire l'archive\" pour télécharger une archive tar des " -"fichiers de la configuration actuelle. Pour réinitialiser le micrologiciel " -"dans son état initial, cliquer sur \"Réinitialiser\" (possible seulement " -"avec les images de type squashfs)." +"fichiers de la configuration actuelle." msgid "Client" msgstr "Client" @@ -770,9 +767,6 @@ msgstr "" "Personnaliser le comportement des <abbr title=\"Diode Électro-Luminescente" "\">DEL</abbr>s si possible." -msgid "DHCP Leases" -msgstr "Baux DHCP" - msgid "DHCP Server" msgstr "Serveur DHCP" @@ -785,9 +779,6 @@ msgstr "client DHCP" msgid "DHCP-Options" msgstr "Options DHCP" -msgid "DHCPv6 Leases" -msgstr "Bails DHCPv6" - msgid "DHCPv6 client" msgstr "" @@ -884,10 +875,10 @@ msgstr "Configuration de l'équipement" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -983,6 +974,9 @@ msgstr "" "Ne pas transmettre de requêtes <abbr title=\"Domain Name System\">DNS</abbr> " "sans nom <abbr title=\"Domain Name System\">DNS</abbr>" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Télécharge et installe le paquet" @@ -1098,6 +1092,9 @@ msgstr "" msgid "Enable this mount" msgstr "Activer ce montage" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Activer cette mémoire d'échange (swap)" @@ -1132,6 +1129,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Effacement…" @@ -1317,7 +1320,7 @@ msgstr "Espace libre" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2630,12 +2633,8 @@ msgstr "Lire /etc/ethers pour configurer le serveur DHCP" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"Voulez-vous vraiment supprimer cette interface? L'effacement ne peut être " -"annulé!\n" -"Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par " -"cette interface." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2651,11 +2650,8 @@ msgstr "Voulez-vous vraiment ré-initialiser toutes les modifications ?" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"Voulez-vous vraiment arrêter l'interface %s ?\n" -"Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par " -"cette interface." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2801,6 +2797,9 @@ msgstr "Redémarrer" msgid "Restart Firewall" msgstr "Redémarrer le pare-feu" +msgid "Restore" +msgstr "Restaurer" + msgid "Restore backup" msgstr "Restaurer une sauvegarde" @@ -3006,9 +3005,6 @@ msgstr "" "au wiki pour connaître les instructions d'installation spécifiques à votre " "matériel." -msgid "Sort" -msgstr "Trier" - msgid "Source" msgstr "Source" @@ -3218,6 +3214,9 @@ msgstr "" "Les caractères autorisés sont : <code>A-Z</code>, <code>a-z</code>, " "<code>0-9</code> et <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3445,10 +3444,13 @@ msgstr "Fuseau horaire" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Pour restaurer les fichiers de configuration, vous pouvez charger ici une " -"archive de sauvegarde construite précédemment." +"archive de sauvegarde construite précédemment. Pour réinitialiser le " +"micrologiciel dans son état initial, cliquer sur \"Réinitialiser\" (possible " +"seulement avec les images de type squashfs)." msgid "Tone" msgstr "" @@ -3540,6 +3542,9 @@ msgstr "Changements non appliqués" msgid "Unsupported protocol type." msgstr "Type de protocole non pris en charge." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Mettre les listes à jour" @@ -3843,9 +3848,6 @@ msgstr "full-duplex" msgid "half-duplex" msgstr "half-duplex" -msgid "help" -msgstr "aide" - msgid "hidden" msgstr "cacher" @@ -3948,6 +3950,35 @@ msgstr "oui" msgid "« Back" msgstr "« Retour" +#~ msgid "DHCP Leases" +#~ msgstr "Baux DHCP" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "Bails DHCPv6" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "Voulez-vous vraiment supprimer cette interface? L'effacement ne peut être " +#~ "annulé!\n" +#~ "Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par " +#~ "cette interface." + +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "Voulez-vous vraiment arrêter l'interface %s ?\n" +#~ "Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par " +#~ "cette interface." + +#~ msgid "Sort" +#~ msgstr "Trier" + +#~ msgid "help" +#~ msgstr "aide" + #~ msgid "IPv4 WAN Status" #~ msgstr "État IPv4 du WAN" diff --git a/modules/luci-base/po/he/base.po b/modules/luci-base/po/he/base.po index 1757bec2bf..6b6c65590f 100644 --- a/modules/luci-base/po/he/base.po +++ b/modules/luci-base/po/he/base.po @@ -494,12 +494,12 @@ msgstr "חזרה לסקירה" msgid "Back to scan results" msgstr "חזרה לתוצ×ות סריקה" +msgid "Backup" +msgstr "גיבוי" + msgid "Backup / Flash Firmware" msgstr "גיבוי / קושחת פל×ש" -msgid "Backup / Restore" -msgstr "גיבוי / שחזור" - msgid "Backup file list" msgstr "גיבוי רשימת קבצי×" @@ -627,8 +627,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -747,9 +746,6 @@ msgstr "" "מת××™× ×ת הגדרות ×”-<abbr title=\"Light Emitting Diode\">LED</abbr>-×™× ×‘×ž×›×©×™×¨ " "(×× ×פשרי)." -msgid "DHCP Leases" -msgstr "הרש×ות DHCP" - msgid "DHCP Server" msgstr "שרת DHCP" @@ -762,9 +758,6 @@ msgstr "לקוח DHCP" msgid "DHCP-Options" msgstr "×פשרויות-DHCP" -msgid "DHCPv6 Leases" -msgstr "הרש×ות DHCPv6" - msgid "DHCPv6 client" msgstr "" @@ -860,10 +853,10 @@ msgstr "הגדרות מכשיר" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -946,6 +939,9 @@ msgid "" "<abbr title=\"Domain Name System\">DNS</abbr>-Name" msgstr "" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "הורד והתקן חבילות" @@ -1058,6 +1054,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1090,6 +1089,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "מוחק..." @@ -1272,7 +1277,7 @@ msgstr "" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2542,7 +2547,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2553,13 +2558,10 @@ msgstr "" msgid "Really reset all changes?" msgstr "" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"×”×× ×œ×ž×—×•×§ ×ת הרשת ×”×לחוטית הזו? המחיקה ××™× ×” × ×™×ª× ×ª לביטול!\n" -"ייתכן ות×בד גישה ×œ× ×ª×‘ ×”×–×” ×× ×תה מחובר דרך השרת הזו." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2702,6 +2704,9 @@ msgstr "" msgid "Restart Firewall" msgstr "" +msgid "Restore" +msgstr "שחזור" + msgid "Restore backup" msgstr "" @@ -2900,9 +2905,6 @@ msgstr "" "סליחה, ×ין תמיכה בעדכון מערכת, ולכן קושחה חדשה חייבת להיצרב ×™×“× ×™×ª. ×× × ×¤× ×” " "×ל ×”-wiki של OpenWrt/LEDE עבור הור×ות ספציפיות למכשיר שלך." -msgid "Sort" -msgstr "מיין" - msgid "Source" msgstr "מקור" @@ -3096,6 +3098,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3277,7 +3282,8 @@ msgstr "×זור זמן" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "על ×ž× ×ª לשחזר ×ת קבצי ההגדרות, ב×פשרותך להעלות ×רכיון גיבוי ×©× ×•×¦×¨ ×œ×¤× ×™ כן." @@ -3371,6 +3377,9 @@ msgstr "" msgid "Unsupported protocol type." msgstr "" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3658,9 +3667,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "עזרה" - msgid "hidden" msgstr "" @@ -3763,6 +3769,26 @@ msgstr "כן" msgid "« Back" msgstr "<< ×חורה" +#~ msgid "DHCP Leases" +#~ msgstr "הרש×ות DHCP" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "הרש×ות DHCPv6" + +#, fuzzy +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "×”×× ×œ×ž×—×•×§ ×ת הרשת ×”×לחוטית הזו? המחיקה ××™× ×” × ×™×ª× ×ª לביטול!\n" +#~ "ייתכן ות×בד גישה ×œ× ×ª×‘ ×”×–×” ×× ×תה מחובר דרך השרת הזו." + +#~ msgid "Sort" +#~ msgstr "מיין" + +#~ msgid "help" +#~ msgstr "עזרה" + #~ msgid "Apply" #~ msgstr "החל" diff --git a/modules/luci-base/po/hu/base.po b/modules/luci-base/po/hu/base.po index 85a3e86435..630624c112 100644 --- a/modules/luci-base/po/hu/base.po +++ b/modules/luci-base/po/hu/base.po @@ -498,12 +498,12 @@ msgstr "Vissza az áttekintéshez" msgid "Back to scan results" msgstr "Vissza a felderÃtési eredményekhez" +msgid "Backup" +msgstr "Mentés" + msgid "Backup / Flash Firmware" msgstr "Mentés / Firmware frissÃtés" -msgid "Backup / Restore" -msgstr "Mentés / VisszaállÃtás" - msgid "Backup file list" msgstr "Mentési fájl lista" @@ -639,13 +639,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Kattintson az \"ArchÃvum készÃtése\" gombra a jelenlegi konfiguráció tar " -"archÃvumként történÅ‘ letöltéséhez. A firmware kezdeti állapotának " -"visszaállÃtásához kattintson a \"VisszaállÃtás végrehajtása\" gombra (csak " -"squashfs image-ek esetén lehetséges)." +"archÃvumként történÅ‘ letöltéséhez." msgid "Client" msgstr "Ãœgyfél" @@ -765,9 +762,6 @@ msgstr "" "Az eszköz <abbr title=\"Light Emitting Diode\">LED</abbr>-jei működésének " "testreszabása." -msgid "DHCP Leases" -msgstr "DHCP bérletek" - msgid "DHCP Server" msgstr "DHCP kiszolgáló" @@ -780,9 +774,6 @@ msgstr "DHCP ügyfél" msgid "DHCP-Options" msgstr "DHCP beállÃtások" -msgid "DHCPv6 Leases" -msgstr "DHCPv6 bérletek" - msgid "DHCPv6 client" msgstr "" @@ -878,10 +869,10 @@ msgstr "Eszköz beállÃtások" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -974,6 +965,9 @@ msgstr "" "Ne továbbÃtsa a <abbr title=\"Domain Name System\">DNS</abbr>-név nélküli " "<abbr title=\"Domain Name System\">DNS</abbr>-kéréseket " +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Csomag letöltése és telepÃtése" @@ -1091,6 +1085,9 @@ msgstr "" msgid "Enable this mount" msgstr "A csatolás engedélyezése" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "A lapozó terület engedélyezése" @@ -1123,6 +1120,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Törlés..." @@ -1308,7 +1311,7 @@ msgstr "Szabad hely" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2622,11 +2625,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"Biztosan törli az interfészt? A törlés nem visszavonható!\n" -" Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen az " -"interfészen keresztül kapcsolódik." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2639,14 +2639,10 @@ msgstr "" msgid "Really reset all changes?" msgstr "Biztos, hogy visszavonja az összes módosÃtást?" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"Biztos, hogy leállÃtja a hálózatot?!\n" -" Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen a " -"hálózaton keresztül kapcsolódik." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2793,6 +2789,9 @@ msgstr "ÚjraindÃtás" msgid "Restart Firewall" msgstr "Tűzfal újraindÃtása" +msgid "Restore" +msgstr "VisszaállÃtás" + msgid "Restore backup" msgstr "Biztonsági mentés visszaállÃtása" @@ -2996,9 +2995,6 @@ msgstr "" "telepÃtését manuálisan kell elvégezni. Az eszközhöz tartozó telepÃtési " "utasÃtásokért keresse fel az wiki-t." -msgid "Sort" -msgstr "Sorbarendezés" - msgid "Source" msgstr "Forrás" @@ -3207,6 +3203,9 @@ msgstr "" "A következÅ‘ karakterek használhatók: <code>A-Z</code>, <code>a-z</code>, " "<code>0-9</code> and <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3433,10 +3432,13 @@ msgstr "IdÅ‘zóna" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Itt tölthet fel egy korábban létrehozott biztonsági mentés archÃvumot a " -"konfigurációs fájlok visszaállÃtásához." +"konfigurációs fájlok visszaállÃtásához. A firmware kezdeti állapotának " +"visszaállÃtásához kattintson a \"VisszaállÃtás végrehajtása\" gombra (csak " +"squashfs image-ek esetén lehetséges)." msgid "Tone" msgstr "" @@ -3528,6 +3530,9 @@ msgstr "El nem mentett módosÃtások" msgid "Unsupported protocol type." msgstr "Nem támogatott protokoll tÃpus." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Listák frissÃtése" @@ -3832,9 +3837,6 @@ msgstr "full-duplex" msgid "half-duplex" msgstr "half-duplex" -msgid "help" -msgstr "súgó" - msgid "hidden" msgstr "rejtett" @@ -3937,6 +3939,35 @@ msgstr "igen" msgid "« Back" msgstr "« Vissza" +#~ msgid "DHCP Leases" +#~ msgstr "DHCP bérletek" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "DHCPv6 bérletek" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "Biztosan törli az interfészt? A törlés nem visszavonható!\n" +#~ " Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen az " +#~ "interfészen keresztül kapcsolódik." + +#, fuzzy +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "Biztos, hogy leállÃtja a hálózatot?!\n" +#~ " Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen a " +#~ "hálózaton keresztül kapcsolódik." + +#~ msgid "Sort" +#~ msgstr "Sorbarendezés" + +#~ msgid "help" +#~ msgstr "súgó" + #~ msgid "IPv4 WAN Status" #~ msgstr "IPv4 WAN állapot" diff --git a/modules/luci-base/po/it/base.po b/modules/luci-base/po/it/base.po index 9f50ec272a..76a648a086 100644 --- a/modules/luci-base/po/it/base.po +++ b/modules/luci-base/po/it/base.po @@ -507,12 +507,12 @@ msgstr "Ritorna alla panoramica" msgid "Back to scan results" msgstr "Ritorno ai risultati della scansione" +msgid "Backup" +msgstr "Copia di Sicurezza" + msgid "Backup / Flash Firmware" msgstr "Copia di Sicurezza / Flash Firmware" -msgid "Backup / Restore" -msgstr "Copia di Sicurezza / Ripristina" - msgid "Backup file list" msgstr "Elenco dei file di cui effettuare una copia di sicurezza" @@ -645,12 +645,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Premi su \"Genera archivio\" per scaricare un archivio tar di backup dei " -"file di configurazione attuali. Per ripristinare il firmware al suo stato " -"iniziale premi \"Esegui Ripristino\" (solo per firmware basati su squashfs)." +"file di configurazione attuali." msgid "Client" msgstr "Cliente" @@ -770,9 +768,6 @@ msgstr "" "Personalizza la configurazione dei <abbr title=\"Light Emitting Diode\">LED</" "abbr> del sistema se possibile." -msgid "DHCP Leases" -msgstr "Contratti DHCP" - msgid "DHCP Server" msgstr "Server DHCP" @@ -785,9 +780,6 @@ msgstr "Cliente DHCP" msgid "DHCP-Options" msgstr "Opzioni DHCP" -msgid "DHCPv6 Leases" -msgstr "Contratti DHCPv6" - msgid "DHCPv6 client" msgstr "Cliente DHCPv6" @@ -884,10 +876,10 @@ msgstr "Configurazione del dispositivo" msgid "Device is rebooting..." msgstr "Dispositivo in riavvio..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "Dispositivo irraggiungibile" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -979,6 +971,9 @@ msgstr "" "Non inoltrare le richieste <abbr title=\"Domain Name System\">DNS</abbr> " "senza nome <abbr title=\"Domain Name System\">DNS</abbr>" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Scarica e installa pacchetto" @@ -1094,6 +1089,9 @@ msgstr "Abilita l'opzione DF (non Frammentare) dei pacchetti incapsulati" msgid "Enable this mount" msgstr "Abilita questo mount" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Abilita questo swap" @@ -1126,6 +1124,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Cancellazione..." @@ -1310,7 +1314,7 @@ msgstr "Spazio libero" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2620,27 +2624,24 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"Vuoi davvero rimuovere questa interfaccia? La rimozione non può essere ripristinata! " -"Potresti perdere l'accesso a questo dispositivo se sei connesso con questa rete." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " "might lose access to this device if you are connected via this network." msgstr "" -"Vuoi davvero rimuovere questa interfaccia wireless? La rimozione non può essere ripristinata! " -"Potresti perdere l'accesso a questo dispositivo se sei connesso con questa rete." +"Vuoi davvero rimuovere questa interfaccia wireless? La rimozione non può " +"essere ripristinata! Potresti perdere l'accesso a questo dispositivo se sei " +"connesso con questa rete." msgid "Really reset all changes?" msgstr "Azzerare veramente tutte le modifiche?" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"Vuoi davvero spegnere questa interfaccia? Potresti perdere l'accesso a " -"questo router se sei connesso usando questa interfaccia." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2785,6 +2786,9 @@ msgstr "Riavvia" msgid "Restart Firewall" msgstr "Riavvia Firewall" +msgid "Restore" +msgstr "Ripristina" + msgid "Restore backup" msgstr "Ripristina backup" @@ -2986,9 +2990,6 @@ msgstr "" "riferimento al wiki per le istruzioni di installazione di dispositivi " "specifici." -msgid "Sort" -msgstr "Ordina" - msgid "Source" msgstr "Origine" @@ -3198,6 +3199,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3395,10 +3399,12 @@ msgstr "Fuso orario" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Per ripristinare i file configurazione, puoi inviare un archivio di backup " -"generato precedentemente qui." +"generato precedentemente qui. Per ripristinare il firmware al suo stato " +"iniziale premi \"Esegui Ripristino\" (solo per firmware basati su squashfs)." msgid "Tone" msgstr "" @@ -3490,6 +3496,9 @@ msgstr "Modifiche non salvate" msgid "Unsupported protocol type." msgstr "Tipo protocollo non supportato." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Aggiorna liste" @@ -3797,9 +3806,6 @@ msgstr "full-duplex" msgid "half-duplex" msgstr "half-duplex" -msgid "help" -msgstr "aiuto" - msgid "hidden" msgstr "nascosto" @@ -3902,6 +3908,33 @@ msgstr "Sì" msgid "« Back" msgstr "« Indietro" +#~ msgid "DHCP Leases" +#~ msgstr "Contratti DHCP" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "Contratti DHCPv6" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "Vuoi davvero rimuovere questa interfaccia? La rimozione non può essere " +#~ "ripristinata! Potresti perdere l'accesso a questo dispositivo se sei " +#~ "connesso con questa rete." + +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "Vuoi davvero spegnere questa interfaccia? Potresti perdere l'accesso a " +#~ "questo router se sei connesso usando questa interfaccia." + +#~ msgid "Sort" +#~ msgstr "Ordina" + +#~ msgid "help" +#~ msgstr "aiuto" + #~ msgid "IPv4 WAN Status" #~ msgstr "Stato WAN IPv4" diff --git a/modules/luci-base/po/ja/base.po b/modules/luci-base/po/ja/base.po index 75da48f09b..2cefb817a3 100644 --- a/modules/luci-base/po/ja/base.po +++ b/modules/luci-base/po/ja/base.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:40+0200\n" -"PO-Revision-Date: 2018-06-01 02:42+0900\n" +"PO-Revision-Date: 2018-07-07 17:55+0900\n" "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language: ja\n" "MIME-Version: 1.0\n" @@ -50,7 +50,7 @@ msgid "-- match by uuid --" msgstr "-- UUID を指定 --" msgid "-- please select --" -msgstr "" +msgstr "-- é¸æŠžã—ã¦ãã ã•ã„ --" msgid "1 Minute Load:" msgstr "éŽåŽ»1分ã®è² è·:" @@ -499,12 +499,12 @@ msgstr "概è¦ã¸æˆ»ã‚‹" msgid "Back to scan results" msgstr "スã‚ャンçµæžœã¸æˆ»ã‚‹" +msgid "Backup" +msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" + msgid "Backup / Flash Firmware" msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— / ファームウェア更新" -msgid "Backup / Restore" -msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— / 復元" - msgid "Backup file list" msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイル リスト" @@ -643,13 +643,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "\"ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— アーカイブã®ä½œæˆ\"をクリックã™ã‚‹ã¨ã€ç¾åœ¨ã®è¨å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’tarå½¢" -"å¼ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ファイルã¨ã—ã¦ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚è¨å®šã®ãƒªã‚»ãƒƒãƒˆã‚’è¡Œã†å ´" -"åˆã€\"è¨å®šãƒªã‚»ãƒƒãƒˆ\"をクリックã—ã¦ãã ã•ã„。(ãŸã ã—ã€squashfsã‚’ãŠä½¿ã„ã®å ´åˆã®" -"ã¿ä½¿ç”¨å¯èƒ½ã§ã™)" +"å¼ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ファイルã¨ã—ã¦ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚" msgid "Client" msgstr "クライアント" @@ -780,9 +777,6 @@ msgstr "" "<abbr title=\"Light Emitting Diode\">LED</abbr> デãƒã‚¤ã‚¹ã®æŒ™å‹•ã‚’カスタマイズ" "ã—ã¾ã™ã€‚" -msgid "DHCP Leases" -msgstr "DHCPリース" - msgid "DHCP Server" msgstr "DHCPサーãƒãƒ¼" @@ -795,9 +789,6 @@ msgstr "DHCP クライアント" msgid "DHCP-Options" msgstr "DHCPオプション" -msgid "DHCPv6 Leases" -msgstr "DHCPv6 リース" - msgid "DHCPv6 client" msgstr "DHCPv6 クライアント" @@ -893,11 +884,11 @@ msgstr "デãƒã‚¤ã‚¹è¨å®š" msgid "Device is rebooting..." msgstr "デãƒã‚¤ã‚¹ã‚’å†èµ·å‹•ä¸ã§ã™..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "デãƒã‚¤ã‚¹ã«åˆ°é”ã§ãã¾ã›ã‚“" -msgid "Device unreachable!" -msgstr "デãƒã‚¤ã‚¹ã«åˆ°é”ã§ãã¾ã›ã‚“ï¼" +msgid "Device unreachable! Still waiting for device..." +msgstr "デãƒã‚¤ã‚¹ã«åˆ°é”ã§ãã¾ã›ã‚“ï¼ã¾ã デãƒã‚¤ã‚¹ã‚’å¾…ã£ã¦ã„ã¾ã™..." msgid "Diagnostics" msgstr "診æ–機能" @@ -988,6 +979,9 @@ msgstr "" "<abbr title=\"Domain Name System\">DNS</abbr>åã®ç„¡ã„ <abbr title=\"Domain " "Name System\">DNS</abbr>リクエストを転é€ã—ã¾ã›ã‚“" +msgid "Down" +msgstr "下ã¸" + msgid "Download and install package" msgstr "パッケージã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" @@ -1105,6 +1099,9 @@ msgstr "カプセル化ã•ã‚ŒãŸãƒ‘ケット㮠DF (Don't Fragment) フラグを msgid "Enable this mount" msgstr "マウントè¨å®šã‚’有効ã«ã™ã‚‹" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "スワップè¨å®šã‚’有効ã«ã™ã‚‹" @@ -1137,6 +1134,12 @@ msgstr "エンドãƒã‚¤ãƒ³ãƒˆ ホスト" msgid "Endpoint Port" msgstr "エンドãƒã‚¤ãƒ³ãƒˆ ãƒãƒ¼ãƒˆ" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "消去ä¸..." @@ -1324,10 +1327,10 @@ msgstr "ディスクã®ç©ºã容é‡" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" "WireGuard インターフェースã¨ãƒ”ã‚¢ã«ã¤ã„ã¦ã®è©³ç´°æƒ…å ±: <a href=\"http://" -"wireguard.io\">wireguard.io</a>" +"wireguard.com\">wireguard.com</a>" msgid "GHz" msgstr "GHz" @@ -2077,10 +2080,10 @@ msgid "Mounted file systems" msgstr "マウントä¸ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ " msgid "Move down" -msgstr "下ã¸" +msgstr "下ã¸ç§»å‹•" msgid "Move up" -msgstr "上ã¸" +msgstr "上ã¸ç§»å‹•" msgid "Multicast address" msgstr "マルãƒã‚ャスト アドレス" @@ -2645,12 +2648,12 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"本当ã«ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’削除ã—ã¾ã™ã‹?一度削除ã™ã‚‹ã¨ã€å…ƒã«æˆ»ã™ã“ã¨ã¯ã§ãã¾" -"ã›ã‚“!\n" -"ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’経由ã—ã¦æŽ¥ç¶šã—ã¦ã„ã‚‹å ´åˆã€ãƒ‡ãƒã‚¤ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªããª" -"ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚" +"本当ã«ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’削除ã—ã¾ã™ã‹ï¼Ÿä¸€åº¦å‰Šé™¤ã™ã‚‹ã¨ã€å…ƒã«æˆ»ã™ã“ã¨ã¯ã§ã" +"ã¾ã›ã‚“ï¼\n" +"ã‚‚ã—ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’経由ã—ã¦æŽ¥ç¶šã—ã¦ã„ã‚‹å ´åˆã€ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§" +"ããªããªã‚‹å ´åˆãŒã‚ã‚Šã¾ã™" msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2666,11 +2669,11 @@ msgstr "本当ã«å…¨ã¦ã®å¤‰æ›´ã‚’リセットã—ã¾ã™ã‹?" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"本当ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’åœæ¢ã—ã¾ã™ã‹?\n" +"本当ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’åœæ¢ã—ã¾ã™ã‹ï¼Ÿ\n" "ã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’経由ã—ã¦æŽ¥ç¶šã—ã¦ã„ã‚‹å ´åˆã€ãƒ‡ãƒã‚¤ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªããªã‚‹å ´" -"åˆãŒã‚ã‚Šã¾ã™ã€‚" +"åˆãŒã‚ã‚Šã¾ã™" msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2818,6 +2821,9 @@ msgstr "å†èµ·å‹•" msgid "Restart Firewall" msgstr "ファイアウォールã®å†èµ·å‹•" +msgid "Restore" +msgstr "復元" + msgid "Restore backup" msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‹ã‚‰å¾©å…ƒã™ã‚‹" @@ -3020,9 +3026,6 @@ msgstr "" "ファームウェア更新ã¯æ‰‹å‹•ã§è¡Œã£ã¦ã„ãŸã ãå¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚wikiã‚’å‚ç…§ã—ã¦ã€ã“ã®" "デãƒã‚¤ã‚¹ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ‰‹é †ã‚’å‚ç…§ã—ã¦ãã ã•ã„。" -msgid "Sort" -msgstr "ソート" - msgid "Source" msgstr "é€ä¿¡å…ƒ" @@ -3130,6 +3133,8 @@ msgstr "スイッム%q (%s)" msgid "" "Switch %q has an unknown topology - the VLAN settings might not be accurate." msgstr "" +"スイッム%q ã¯ä¸æ˜Žãªãƒˆãƒãƒã‚¸ã‚’æŒã£ã¦ã„ã¾ã™ - VLAN è¨å®šã¯æ£ç¢ºã§ã¯ãªã„ã‹ã‚‚ã—ã‚Œ" +"ã¾ã›ã‚“。" msgid "Switch Port Mask" msgstr "スイッãƒãƒãƒ¼ãƒˆ マスク" @@ -3225,6 +3230,9 @@ msgstr "" "使用å¯èƒ½ãªæ–‡å—ã¯å³è¨˜ã®é€šã‚Šã§ã™: <code>A-Z</code>, <code>a-z</code>, " "<code>0-9</code>, <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "è¨å®šãƒ•ã‚¡ã‚¤ãƒ«ã¯ä»¥ä¸‹ã®ã‚¨ãƒ©ãƒ¼ã«ã‚ˆã‚Šèªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" @@ -3454,10 +3462,12 @@ msgstr "タイムゾーン" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "è¨å®šã‚’復元ã™ã‚‹ã«ã¯ã€ä½œæˆã—ã¦ãŠã„ãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— アーカイブをアップãƒãƒ¼ãƒ‰ã—ã¦ã" -"ã ã•ã„。" +"ã ã•ã„。è¨å®šã®ãƒªã‚»ãƒƒãƒˆã‚’è¡Œã†å ´åˆã€\"è¨å®šãƒªã‚»ãƒƒãƒˆ\"をクリックã—ã¦ãã ã•ã„。(ãŸ" +"ã ã—ã€squashfsã‚’ãŠä½¿ã„ã®å ´åˆã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™)" msgid "Tone" msgstr "" @@ -3549,6 +3559,9 @@ msgstr "ä¿å˜ã•ã‚Œã¦ã„ãªã„変更" msgid "Unsupported protocol type." msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„プãƒãƒˆã‚³ãƒ«ã‚¿ã‚¤ãƒ—" +msgid "Up" +msgstr "上ã¸" + msgid "Update lists" msgstr "リストã®æ›´æ–°" @@ -3817,7 +3830,7 @@ msgid "bridged" msgstr "ブリッジ" msgid "create" -msgstr "" +msgstr "作æˆ" msgid "create:" msgstr "作æˆ:" @@ -3848,7 +3861,7 @@ msgstr "" "録ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«" msgid "forward" -msgstr "" +msgstr "転é€" msgid "full-duplex" msgstr "全二é‡" @@ -3856,9 +3869,6 @@ msgstr "全二é‡" msgid "half-duplex" msgstr "åŠäºŒé‡" -msgid "help" -msgstr "ヘルプ" - msgid "hidden" msgstr "(ä¸æ˜Ž)" diff --git a/modules/luci-base/po/ko/base.po b/modules/luci-base/po/ko/base.po index e9ad6c50e1..40010c59e2 100644 --- a/modules/luci-base/po/ko/base.po +++ b/modules/luci-base/po/ko/base.po @@ -487,12 +487,12 @@ msgstr "" msgid "Back to scan results" msgstr "" +msgid "Backup" +msgstr "백업" + msgid "Backup / Flash Firmware" msgstr "Firmware 백업 / Flash" -msgid "Backup / Restore" -msgstr "백업 / 복구" - msgid "Backup file list" msgstr "" @@ -627,12 +627,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "현재 ì„¤ì • 파ì¼ì— 대한 tar ì•„ì¹´ì´ë¸Œ 다운로드를 ì›í•œë‹¤ë©´ \"ì•„ì¹´ì´ë¸Œ ìƒì„±\" 버튼" -"ì„ í´ë¦í•˜ì„¸ìš”. Firmware ì˜ ì´ˆê¸° ì„¤ì • reset ì„ ì›í•œë‹¤ë©´ \"Reset 하기\" 를 í´" -"ë¦í•˜ì„¸ìš”. (squashfs ì´ë¯¸ì§€ë“¤ë§Œ 가능)." +"ì„ í´ë¦í•˜ì„¸ìš”." msgid "Client" msgstr "" @@ -752,9 +750,6 @@ msgstr "" "ì›í•œë‹¤ë©´ ìž¥ì¹˜ì— ë¶€ì°©ëœ <abbr title=\"Light Emitting Diode\">LED</abbr> ë“¤ì˜ " "í–‰ë™ì„ 마ìŒëŒ€ë¡œ ë³€ê²½í• ìˆ˜ 있습니다." -msgid "DHCP Leases" -msgstr "DHCP 임대 ì •ë³´" - msgid "DHCP Server" msgstr "DHCP 서버" @@ -767,9 +762,6 @@ msgstr "DHCP client" msgid "DHCP-Options" msgstr "DHCP-옵션들" -msgid "DHCPv6 Leases" -msgstr "DHCPv6 임대 ì •ë³´" - msgid "DHCPv6 client" msgstr "" @@ -866,10 +858,10 @@ msgstr "장치 ì„¤ì •" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -957,6 +949,9 @@ msgid "" "<abbr title=\"Domain Name System\">DNS</abbr>-Name" msgstr "" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "패키지 다운로드 후 설치" @@ -1071,6 +1066,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1103,6 +1101,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "" @@ -1285,7 +1289,7 @@ msgstr "ì—¬ìœ ê³µê°„" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2570,7 +2574,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2583,10 +2587,8 @@ msgstr "" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"ì •ë§ë¡œ 네트워í¬ë¥¼ shutdown í•˜ì‹œê² ìŠµë‹ˆê¹Œ?\\nì´ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 연결하였다면 " -"ì ‘ì†ì´ ëŠì–´ì§ˆ 수 있습니다." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2729,6 +2731,9 @@ msgstr "재시작" msgid "Restart Firewall" msgstr "방화벽 재시작" +msgid "Restore" +msgstr "복구" + msgid "Restore backup" msgstr "백업 복구" @@ -2926,9 +2931,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "순서" - msgid "Source" msgstr "" @@ -3127,6 +3129,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3320,10 +3325,12 @@ msgstr "시간대" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "ì„¤ì • 파ì¼ì„ ë³µêµ¬í•˜ê³ ìž í•œë‹¤ë©´ ì´ì „ì— ë°±ì—…í•˜ì‹ ì•„ì¹´ì´ë¸Œ 파ì¼ì„ 여기로 업로드" -"í• ìˆ˜ 있습니다." +"í• ìˆ˜ 있습니다. Firmware ì˜ ì´ˆê¸° ì„¤ì • reset ì„ ì›í•œë‹¤ë©´ \"Reset 하기\" 를 í´" +"ë¦í•˜ì„¸ìš”. (squashfs ì´ë¯¸ì§€ë“¤ë§Œ 가능)." msgid "Tone" msgstr "" @@ -3415,6 +3422,9 @@ msgstr "ì ìš© ì•ˆëœ ë³€ê²½ 사í•" msgid "Unsupported protocol type." msgstr "" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3716,9 +3726,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "" - msgid "hidden" msgstr "" @@ -3821,6 +3828,22 @@ msgstr "" msgid "« Back" msgstr "" +#~ msgid "DHCP Leases" +#~ msgstr "DHCP 임대 ì •ë³´" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "DHCPv6 임대 ì •ë³´" + +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "ì •ë§ë¡œ 네트워í¬ë¥¼ shutdown í•˜ì‹œê² ìŠµë‹ˆê¹Œ?\\nì´ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 연결하였다" +#~ "ë©´ ì ‘ì†ì´ ëŠì–´ì§ˆ 수 있습니다." + +#~ msgid "Sort" +#~ msgstr "순서" + #~ msgid "IPv4 WAN Status" #~ msgstr "IPv4 WAN ìƒíƒœ" diff --git a/modules/luci-base/po/ms/base.po b/modules/luci-base/po/ms/base.po index 8dbd3e63e9..b36ccd1836 100644 --- a/modules/luci-base/po/ms/base.po +++ b/modules/luci-base/po/ms/base.po @@ -482,12 +482,12 @@ msgstr "Kembali ke ikhtisar" msgid "Back to scan results" msgstr "Kembali ke keputusan scan" +msgid "Backup" +msgstr "Sandaran" + msgid "Backup / Flash Firmware" msgstr "" -msgid "Backup / Restore" -msgstr "Sandaran / Mengembalikan" - msgid "Backup file list" msgstr "" @@ -611,8 +611,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" #, fuzzy @@ -730,9 +729,6 @@ msgid "" "\">LED</abbr>s if possible." msgstr "Mengkustomisasi perilaku peranti LED jika mungkin." -msgid "DHCP Leases" -msgstr "" - msgid "DHCP Server" msgstr "" @@ -745,9 +741,6 @@ msgstr "" msgid "DHCP-Options" msgstr "DHCP-Pilihan" -msgid "DHCPv6 Leases" -msgstr "" - msgid "DHCPv6 client" msgstr "" @@ -841,10 +834,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -932,6 +925,9 @@ msgid "" "<abbr title=\"Domain Name System\">DNS</abbr>-Name" msgstr "Jangan hantar permintaan DNS tanpa nama DNS" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Turun dan memasang pakej" @@ -1043,6 +1039,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1075,6 +1074,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "" @@ -1257,7 +1262,7 @@ msgstr "" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2546,7 +2551,7 @@ msgstr "Baca /etc/ethers untuk mengkonfigurasikan DHCP-Server" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2559,7 +2564,7 @@ msgstr "" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2703,6 +2708,9 @@ msgstr "" msgid "Restart Firewall" msgstr "Restart Firewall" +msgid "Restore" +msgstr "Mengembalikan" + msgid "Restore backup" msgstr "Kembalikan sandaran" @@ -2900,9 +2908,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "" - msgid "Source" msgstr "Sumber" @@ -3096,6 +3101,9 @@ msgstr "" "Karakter yang diizinkan adalah: <code>A-Z</code>, <code>a-z</code>, " "<code>0-9</code> dan <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3293,7 +3301,8 @@ msgstr "Zon masa" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3386,6 +3395,9 @@ msgstr "Perubahan yang belum disimpan" msgid "Unsupported protocol type." msgstr "" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3675,9 +3687,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "Membantu" - msgid "hidden" msgstr "" @@ -3780,6 +3789,9 @@ msgstr "" msgid "« Back" msgstr "« Kembali" +#~ msgid "help" +#~ msgstr "Membantu" + #~ msgid "Apply" #~ msgstr "Melaksanakan" diff --git a/modules/luci-base/po/no/base.po b/modules/luci-base/po/no/base.po index 4ce32ff7c8..e9546b310c 100644 --- a/modules/luci-base/po/no/base.po +++ b/modules/luci-base/po/no/base.po @@ -491,12 +491,12 @@ msgstr "Tilbake til oversikt" msgid "Back to scan results" msgstr "Tilbake til skanne resultat" +msgid "Backup" +msgstr "Sikkerhetskopi" + msgid "Backup / Flash Firmware" msgstr "Sikkerhetskopiering/Firmware oppgradering" -msgid "Backup / Restore" -msgstr "Sikkerhetskopi/Gjenoppretting" - msgid "Backup file list" msgstr "Sikkerhetskopier filliste" @@ -629,12 +629,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Klikk \"Opprett arkiv\" for Ã¥ laste ned et tar arkiv av de gjeldende " -"konfigurasjons filer. For Ã¥ nullstille firmwaren til opprinnelig tilstand, " -"klikker du pÃ¥ \"Utfør nullstilling\" (kun mulig pÃ¥ squashfs firmwarer)." +"konfigurasjons filer." msgid "Client" msgstr "Klient" @@ -754,9 +752,6 @@ msgstr "" "Tilpasser oppførselen til enhetens <abbr title=\"Light Emitting Diode\">LED</" "abbr>s om mulig." -msgid "DHCP Leases" -msgstr "DHCP Leier" - msgid "DHCP Server" msgstr "DHCP Server" @@ -769,9 +764,6 @@ msgstr "DHCP klient" msgid "DHCP-Options" msgstr "DHCP-Alternativer" -msgid "DHCPv6 Leases" -msgstr "DHCPv6 Leier" - msgid "DHCPv6 client" msgstr "" @@ -867,10 +859,10 @@ msgstr "Enhet Konfigurasjon" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -963,6 +955,9 @@ msgstr "" "Ikke videresend <abbr title=\"Domain Name System\">DNS</abbr>-Forespørsler " "uten <abbr title=\"Domain Name System\">DNS</abbr>-Navn" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Last ned og installer pakken" @@ -1078,6 +1073,9 @@ msgstr "" msgid "Enable this mount" msgstr "Aktiver dette monteringspunktet" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Aktiver denne swapenhet" @@ -1110,6 +1108,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Sletter..." @@ -1294,7 +1298,7 @@ msgstr "Ledig plass" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2597,11 +2601,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"Fjerne dette grensesnittet? Slettingen kan ikke omgjøres!\n" -"Du kan miste kontakten med ruteren om du er tilkoblet via dette " -"grensesnittet." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2613,14 +2614,10 @@ msgstr "" msgid "Really reset all changes?" msgstr "Vil du nullstille alle endringer?" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"SlÃ¥ av dette nettverket ?\n" -"Du kan miste kontakten med ruteren om du er tilkoblet via dette " -"grensesnittet." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2766,6 +2763,9 @@ msgstr "Omstart" msgid "Restart Firewall" msgstr "Omstart Brannmur" +msgid "Restore" +msgstr "Gjenoppretting" + msgid "Restore backup" msgstr "Gjenopprett sikkerhetskopi" @@ -2969,9 +2969,6 @@ msgstr "" "flashes manuelt. Viser til wiki for installering av firmare pÃ¥ forskjellige " "enheter." -msgid "Sort" -msgstr "Sortering" - msgid "Source" msgstr "Kilde" @@ -3178,6 +3175,9 @@ msgstr "" "Gyldige tegn er: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> og " "<code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3398,10 +3398,13 @@ msgstr "Tidssone" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "For Ã¥ gjenopprette konfigurasjonsfiler, kan du her laste opp et backup arkiv " -"som ble opprettet tidligere." +"som ble opprettet tidligere. For Ã¥ nullstille firmwaren til opprinnelig " +"tilstand, klikker du pÃ¥ \"Utfør nullstilling\" (kun mulig pÃ¥ squashfs " +"firmwarer)." msgid "Tone" msgstr "" @@ -3493,6 +3496,9 @@ msgstr "Ulagrede Endringer" msgid "Unsupported protocol type." msgstr "Protokoll type er ikke støttet." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Oppdater lister" @@ -3797,9 +3803,6 @@ msgstr "full-dupleks" msgid "half-duplex" msgstr "halv-dupleks" -msgid "help" -msgstr "Hjelp" - msgid "hidden" msgstr "skjult" @@ -3902,6 +3905,35 @@ msgstr "ja" msgid "« Back" msgstr "« Tilbake" +#~ msgid "DHCP Leases" +#~ msgstr "DHCP Leier" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "DHCPv6 Leier" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "Fjerne dette grensesnittet? Slettingen kan ikke omgjøres!\n" +#~ "Du kan miste kontakten med ruteren om du er tilkoblet via dette " +#~ "grensesnittet." + +#, fuzzy +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "SlÃ¥ av dette nettverket ?\n" +#~ "Du kan miste kontakten med ruteren om du er tilkoblet via dette " +#~ "grensesnittet." + +#~ msgid "Sort" +#~ msgstr "Sortering" + +#~ msgid "help" +#~ msgstr "Hjelp" + #~ msgid "IPv4 WAN Status" #~ msgstr "IPv4 WAN Status" diff --git a/modules/luci-base/po/pl/base.po b/modules/luci-base/po/pl/base.po index a588cfe4f6..7d2e006cd1 100644 --- a/modules/luci-base/po/pl/base.po +++ b/modules/luci-base/po/pl/base.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: LuCI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-04-20 09:40+0200\n" -"PO-Revision-Date: 2018-05-14 20:05+0200\n" +"PO-Revision-Date: 2018-07-7 14:05+0200\n" "Last-Translator: Rixerx <krystian.kozak20@gmail.com>\n" "Language-Team: Polish\n" "Language: pl\n" @@ -376,12 +376,14 @@ msgstr "" msgid "Announce as default router even if no public prefix is available." msgstr "" +"RozgÅ‚aszaj jako domyÅ›lny router nawet jeÅ›li publiczny prefiks nie jest " +"dostÄ™pny." msgid "Announced DNS domains" -msgstr "" +msgstr "RozgÅ‚aszaj domeny DNS" msgid "Announced DNS servers" -msgstr "" +msgstr "RozgÅ‚aszaj serwery DNS" msgid "Anonymous Identity" msgstr "" @@ -411,11 +413,13 @@ msgid "Apply unchecked" msgstr "" msgid "Architecture" -msgstr "" +msgstr "Architektura" msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" +"Przypisz część danej dÅ‚ugoÅ›ci każdego publicznego prefiksu IPv6 do tego " +"interfejsu" msgid "Assign interfaces..." msgstr "Przypisz interfejsy..." @@ -423,12 +427,14 @@ msgstr "Przypisz interfejsy..." msgid "" "Assign prefix parts using this hexadecimal subprefix ID for this interface." msgstr "" +"Przypisz cześć prefiksu za pomocÄ… szesnastkowego ID subprefiksu dla tego " +"interfejsu" msgid "Associated Stations" msgstr "PoÅ‚Ä…czone stacje" msgid "Associations" -msgstr "" +msgstr "PoÅ‚Ä…czeni" msgid "Auth Group" msgstr "" @@ -505,15 +511,14 @@ msgstr "Wróć do przeglÄ…du" msgid "Back to scan results" msgstr "Wróć do wyników skanowania" -msgid "Backup / Flash Firmware" -msgstr "Kopia zapasowa/aktualizacja firmware" +msgid "Backup" +msgstr "Kopia zapasowa" -# NIe ma powodu skracać tekstu, zmieÅ›ci siÄ™ w polu. -msgid "Backup / Restore" -msgstr "Kopia zapasowa/Przywróć" +msgid "Backup / Flash Firmware" +msgstr "Kopia zapasowa / aktualizacja firmware" msgid "Backup file list" -msgstr "Kopia zapas. listy plików" +msgstr "Kopia zapasowa listy plików" msgid "Bad address specified!" msgstr "Wprowadzono zÅ‚y adres" @@ -535,6 +540,7 @@ msgstr "" msgid "Bind only to specific interfaces rather than wildcard address." msgstr "" +"Powiąż tylko ze specyficznymi interfejsami, a nie z adresami wieloznacznymi." msgid "Bind the tunnel to this interface (optional)." msgstr "" @@ -645,12 +651,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" -"WciÅ›nij \"Twórz archiwum\" aby pobrać archiwum tar zawierajÄ…ce bieżące pliki " -"konfiguracyjne. Aby przywrócić ustawienia domyÅ›lne wciÅ›nij \"Wykonaj reset" -"\" (możliwe tylko w przypadku obrazu squashfs)." +"Kliknij \"Twórz archiwum\" aby pobrać archiwum tar zawierajÄ…ce bieżące pliki " +"konfiguracyjne." msgid "Client" msgstr "Klient" @@ -696,10 +700,10 @@ msgid "Configuration files will be kept." msgstr "Pliki konfiguracyjne zostanÄ… zachowane." msgid "Configuration has been applied." -msgstr "" +msgstr "Konfiguracja zostaÅ‚a zastosowana." msgid "Configuration has been rolled back!" -msgstr "" +msgstr "Konfiguracja zostaÅ‚a wycofana!" msgid "Confirmation" msgstr "Potwierdzenie" @@ -768,6 +772,8 @@ msgid "" "Custom files (certificates, scripts) may remain on the system. To prevent " "this, perform a factory-reset first." msgstr "" +"WÅ‚asne pliki (certyfikaty, skrypty) mogÄ… pozostać w systemie. Aby zapobiec " +"temu, wykonaj najpierw reset do ustawieÅ„ fabrycznych" msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" @@ -776,9 +782,6 @@ msgstr "" "Dostosuj zachowanie diod <abbr title=\"Light Emitting Diode\">LED</abbr> " "urzÄ…dzenia jeÅ›li jest to możliwe." -msgid "DHCP Leases" -msgstr "Dzierżawy DHCP" - msgid "DHCP Server" msgstr "Serwer DHCP" @@ -791,17 +794,14 @@ msgstr "Klient DHCP" msgid "DHCP-Options" msgstr "Opcje DHCP" -msgid "DHCPv6 Leases" -msgstr "Dzierżawy DHCPv6" - msgid "DHCPv6 client" msgstr "Klient DHCPv6" msgid "DHCPv6-Mode" -msgstr "" +msgstr "Tryb DHCPv6" msgid "DHCPv6-Service" -msgstr "" +msgstr "Serwis DHCPv6" msgid "DNS" msgstr "DNS" @@ -816,7 +816,7 @@ msgid "DNSSEC" msgstr "" msgid "DNSSEC check unsigned" -msgstr "" +msgstr "Sprawdzanie DNSSEC bez podpisu" msgid "DPD Idle Timeout" msgstr "" @@ -849,7 +849,7 @@ msgid "Default gateway" msgstr "Brama domyÅ›lna" msgid "Default is stateless + stateful" -msgstr "" +msgstr "DomyÅ›lnie jest to stateless + stateful" msgid "Default state" msgstr "Stan domyÅ›lny" @@ -890,11 +890,11 @@ msgstr "Konfiguracja urzÄ…dzenia" msgid "Device is rebooting..." msgstr "UrzÄ…dzenie jest uruchamiane ponownie ..." -msgid "Device unreachable" -msgstr "UrzÄ…dzenie nieosiÄ…galne" - msgid "Device unreachable!" -msgstr "" +msgstr "UrzÄ…dzenie nieosiÄ…galne!" + +msgid "Device unreachable! Still waiting for device..." +msgstr "UrzÄ…dzenie nieosiÄ…galne! Wciąż czekam na urzÄ…dzenie..." msgid "Diagnostics" msgstr "Diagnostyka" @@ -988,6 +988,9 @@ msgstr "" "Nie przekazuj zapytaÅ„ <abbr title=\"Domain Name System\">DNS</abbr> bez " "nazwy <abbr title=\"Domain Name System\">DNS</abbr>'a" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Pobierz i zainstaluj pakiet" @@ -1107,6 +1110,9 @@ msgstr "" msgid "Enable this mount" msgstr "WÅ‚Ä…cz ten punkt montowania" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "WÅ‚Ä…cz ten swap" @@ -1143,6 +1149,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Usuwanie..." @@ -1183,13 +1195,13 @@ msgid "External R1 Key Holder List" msgstr "" msgid "External system log server" -msgstr "ZewnÄ™trzny serwer dla logów systemowych" +msgstr "Serwer zewnÄ™trzny dla logów systemowych" msgid "External system log server port" -msgstr "Port zewnÄ™trznego serwera dla logów systemowych" +msgstr "Port zewnÄ™trznego serwera logów systemowych" msgid "External system log server protocol" -msgstr "Protokół zewnÄ™trznego serwera dla logów systemowych" +msgstr "Protokół zewnÄ™trznego serwera logów systemowych" msgid "Extra SSH command options" msgstr "" @@ -1328,7 +1340,7 @@ msgstr "Wolna przestrzeÅ„" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -1373,7 +1385,7 @@ msgid "Global Settings" msgstr "" msgid "Global network options" -msgstr "" +msgstr "Globalne opcje sieciowe" msgid "Go to password configuration..." msgstr "Przejdź do konfiguracji hasÅ‚a..." @@ -1465,7 +1477,7 @@ msgid "IPv4 Firewall" msgstr "Firewall IPv4" msgid "IPv4 Upstream" -msgstr "" +msgstr "Protokół IPv4" msgid "IPv4 address" msgstr "Adres IPv4" @@ -1510,22 +1522,22 @@ msgid "IPv6 Neighbours" msgstr "" msgid "IPv6 Settings" -msgstr "" +msgstr "Ustawienia IPv6" msgid "IPv6 ULA-Prefix" -msgstr "" +msgstr "IPv6 Prefiks-ULA" msgid "IPv6 Upstream" -msgstr "" +msgstr "Protokół IPv6" msgid "IPv6 address" msgstr "Adres IPv6" msgid "IPv6 assignment hint" -msgstr "" +msgstr "Wskazówka przypisania IPv6" msgid "IPv6 assignment length" -msgstr "" +msgstr "DÅ‚ugość przydziaÅ‚u IPv6" msgid "IPv6 gateway" msgstr "Brama IPv6" @@ -1543,7 +1555,7 @@ msgid "IPv6 routed prefix" msgstr "" msgid "IPv6 suffix" -msgstr "" +msgstr "Sufiks IPv6" msgid "IPv6-Address" msgstr "Adres IPv6" @@ -1803,6 +1815,7 @@ msgstr "Limit" msgid "Limit DNS service to subnets interfaces on which we are serving DNS." msgstr "" +"Ogranicz usÅ‚ugi DNS do podsieci interfejsów, na których obsÅ‚ugujemy DNS." msgid "Limit listening to these interfaces, and loopback." msgstr "Ogranicz nasÅ‚uchiwanie do tych interfesjów, oraz loopbacku." @@ -1886,7 +1899,7 @@ msgid "Local IPv6 address" msgstr "Lokalny adres IPv6" msgid "Local Service Only" -msgstr "" +msgstr "Tylko serwis lokalny" msgid "Local Startup" msgstr "Lokalny autostart" @@ -1907,7 +1920,7 @@ msgstr "" msgid "Local domain suffix appended to DHCP names and hosts file entries" msgstr "" -"Przyrostek (suffiks) domeny przyÅ‚Ä…czany do nazw DHCP i wpisów w pliku hosts" +"Przyrostek (sufiks) domeny przyÅ‚Ä…czany do nazw DHCP i wpisów w pliku hosts" msgid "Local server" msgstr "Serwer lokalny" @@ -2107,7 +2120,7 @@ msgid "NCM" msgstr "NCM" msgid "NDP-Proxy" -msgstr "" +msgstr "Proxy NDP" msgid "NT Domain" msgstr "" @@ -2194,7 +2207,7 @@ msgid "Non Pre-emtive CRC errors (CRC_P)" msgstr "" msgid "Non-wildcard" -msgstr "" +msgstr "Bez symboli wieloznacznych" msgid "None" msgstr "Brak" @@ -2225,6 +2238,8 @@ msgstr "Nslookup" msgid "Number of cached DNS entries (max is 10000, 0 is no caching)" msgstr "" +"Liczba buforowanych wpisów DNS (max wynosi 10000, 0 oznacza brak pamiÄ™ci " +"podrÄ™cznej)" msgid "OK" msgstr "OK" @@ -2302,6 +2317,10 @@ msgid "" "server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') " "for the interface." msgstr "" +"Opcjonalne. Dopuszczalne wartoÅ›ci: 'eui64', 'random', staÅ‚e wartoÅ›ci takie " +"jak '::1' lub '::1:2'. Kiedy prefiks IPv6 (taki jak 'a:b:c:d::') jest " +"odbierany z serwera delegujÄ…cego, użyj sufiksa (takiego jak '::1') aby " +"utworzyć adres IPv6 ('a:b:c:d::1') dla tego interfejsu." msgid "" "Optional. Base64-encoded preshared key. Adds in an additional layer of " @@ -2546,7 +2565,7 @@ msgid "Prevent listening on these interfaces." msgstr "Zapobiegaj nasÅ‚uchiwaniu na tych interfejsach." msgid "Prevents client-to-client communication" -msgstr "ZabroÅ„ klientÄ… na komunikacje miÄ™dzy sobÄ…" +msgstr "Zapobiega na komunikacje miÄ™dzy klientami" msgid "Prism2/2.5/3 802.11b Wireless Controller" msgstr "Kontroler bezprzewodowy Prism2/2.5/3 802.11b" @@ -2594,7 +2613,7 @@ msgid "Public prefix routed to this device for distribution to clients." msgstr "" msgid "QMI Cellular" -msgstr "" +msgstr "Komórkowy QMI" msgid "Quality" msgstr "Jakość" @@ -2647,11 +2666,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"NaprawdÄ™ usunąć ten interfejs? UsuniÄ™cie nie może zostać cofniÄ™te!\n" -"Możesz stracić dostÄ™p do tego urzÄ…dzenia, jeÅ›li jesteÅ› poÅ‚Ä…czony przez ten " -"interfejs!" msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2664,14 +2680,10 @@ msgstr "" msgid "Really reset all changes?" msgstr "NaprawdÄ™ usunąć wszelkie zmiany?" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"NaprawdÄ™ wyÅ‚Ä…czyć tÄ™ sieć?\n" -"Możesz stracić dostÄ™p do tego urzÄ…dzenia jeÅ›li jesteÅ› poÅ‚Ä…czony przez ten " -"interfejs!" msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2795,6 +2807,8 @@ msgid "" "Requires upstream supports DNSSEC; verify unsigned domain responses really " "come from unsigned domains" msgstr "" +"Wymagane jest wsparcie dla DNSSEC; sprawdzanie, czy niepodpisane odpowiedzi " +"w domenie rzeczywiÅ›cie pochodzÄ… z domen bez znaku" msgid "Reset" msgstr "Resetuj" @@ -2817,6 +2831,9 @@ msgstr "Uruchom ponownie" msgid "Restart Firewall" msgstr "Uruchom ponownie firewalla" +msgid "Restore" +msgstr "Przywróć" + msgid "Restore backup" msgstr "Przywróć kopiÄ™ zapasowÄ…" @@ -2848,10 +2865,10 @@ msgid "Route Allowed IPs" msgstr "" msgid "Route type" -msgstr "" +msgstr "Typ trasy" msgid "Router Advertisement-Service" -msgstr "" +msgstr "Serwis rozgÅ‚oszeniowy routera" msgid "Router Password" msgstr "HasÅ‚o routera" @@ -2986,7 +3003,7 @@ msgid "Size (.ipk)" msgstr "" msgid "Size of DNS query cache" -msgstr "" +msgstr "Rozmiar pamiÄ™ci podrÄ™cznej zapytaÅ„ DNS" msgid "Skip" msgstr "PomiÅ„" @@ -3004,7 +3021,7 @@ msgid "Software" msgstr "Oprogramowanie" msgid "Software VLAN" -msgstr "VLAN programowy" +msgstr "Programowy VLAN" msgid "Some fields are invalid, cannot save values!" msgstr "WartoÅ›ci pewnych pól sÄ… niewÅ‚aÅ›ciwe, nie mogÄ™ ich zachować!" @@ -3024,9 +3041,6 @@ msgstr "" "być wgrany rÄ™cznie. Sprawdź stronÄ™ wiki, aby uzyskać instrukcjÄ™ dla danego " "urzÄ…dzenia." -msgid "Sort" -msgstr "Posortuj" - msgid "Source" msgstr "ŹródÅ‚o" @@ -3115,10 +3129,10 @@ msgid "Submit" msgstr "WyÅ›lij" msgid "Suppress logging" -msgstr "" +msgstr "PomiÅ„ rejestrowanie" msgid "Suppress logging of the routine operation of these protocols" -msgstr "" +msgstr "PomiÅ„ rejestrowanie rutynowych operacji dla tych protokołów" msgid "Swap" msgstr "" @@ -3237,6 +3251,9 @@ msgstr "" "Dozwolone znaki to: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> " "oraz <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "Archiwum kopii zapasowej nie wyglÄ…da na prawidÅ‚owe." + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3357,7 +3374,7 @@ msgid "There are no active leases." msgstr "Brak aktywnych dzierżaw." msgid "There are no changes to apply." -msgstr "" +msgstr "Nie ma żadnych zmian do zastosowania." msgid "There are no pending changes to revert!" msgstr "Brak oczekujÄ…cych zmian do przywrócenia!" @@ -3387,6 +3404,9 @@ msgid "" "'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " "Name System\">DNS</abbr> servers." msgstr "" +"Ten plik może zawierać linie takie jak 'server=/domain/1.2.3.4' lub " +"'server=1.2.3.4' dla specyficznych dla domeny lub peÅ‚nych serwerów <abbr " +"title=\"Domain Name System\">DNS</abbr>" msgid "" "This is a list of shell glob patterns for matching files and directories to " @@ -3465,10 +3485,12 @@ msgstr "Strefa czasowa" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" -"Aby przywrócić pliki konfiguracyjne, możesz tutaj przesÅ‚ać wczeÅ›niej " -"utworzonÄ… kopiÄ™ zapasowÄ…." +"Aby przywrócić pliki konfiguracyjne, możesz przesÅ‚ać tutaj wczeÅ›niej " +"utworzonÄ… kopiÄ™ zapasowÄ…. Aby przywrócić ustawienia domyÅ›lne wciÅ›nij " +"\"Wykonaj reset\" (możliwe tylko w przypadku obrazu squashfs)." msgid "Tone" msgstr "" @@ -3560,6 +3582,9 @@ msgstr "Niezapisane zmiany" msgid "Unsupported protocol type." msgstr "NieobsÅ‚ugiwany typ protokoÅ‚u." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Aktualizuj listy" @@ -3731,7 +3756,7 @@ msgid "Waiting for command to complete..." msgstr "Trwa wykonanie polecenia..." msgid "Waiting for configuration to get applied… %ds" -msgstr "" +msgstr "Oczekiwanie na zastosowanie konfiguracji… %ds" msgid "Waiting for device..." msgstr "Oczekiwanie na urzÄ…dzenie..." @@ -3871,9 +3896,6 @@ msgstr "peÅ‚ny-duplex" msgid "half-duplex" msgstr "pół-duplex" -msgid "help" -msgstr "pomoc" - msgid "hidden" msgstr "ukryty" @@ -3977,6 +3999,35 @@ msgstr "tak" msgid "« Back" msgstr "« Wróć" +#~ msgid "DHCP Leases" +#~ msgstr "Dzierżawy DHCP" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "Dzierżawy DHCPv6" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "NaprawdÄ™ usunąć ten interfejs? UsuniÄ™cie nie może zostać cofniÄ™te!\n" +#~ "Możesz stracić dostÄ™p do tego urzÄ…dzenia, jeÅ›li jesteÅ› poÅ‚Ä…czony przez " +#~ "ten interfejs!" + +#, fuzzy +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "NaprawdÄ™ wyÅ‚Ä…czyć tÄ™ sieć?\n" +#~ "Możesz stracić dostÄ™p do tego urzÄ…dzenia jeÅ›li jesteÅ› poÅ‚Ä…czony przez ten " +#~ "interfejs!" + +#~ msgid "Sort" +#~ msgstr "Posortuj" + +#~ msgid "help" +#~ msgstr "pomoc" + #~ msgid "IPv4 WAN Status" #~ msgstr "Status IPv4 WAN" diff --git a/modules/luci-base/po/pt-br/base.po b/modules/luci-base/po/pt-br/base.po index a044707936..6d569830b7 100644 --- a/modules/luci-base/po/pt-br/base.po +++ b/modules/luci-base/po/pt-br/base.po @@ -531,12 +531,12 @@ msgstr "Voltar para visão geral" msgid "Back to scan results" msgstr "Voltar para os resultados da busca" +msgid "Backup" +msgstr "Cópia de Segurança" + msgid "Backup / Flash Firmware" msgstr "Cópia de Segurança / Gravar Firmware" -msgid "Backup / Restore" -msgstr "Cópia de Segurança / Restauração" - msgid "Backup file list" msgstr "Lista de arquivos para a cópia de segurança" @@ -675,12 +675,10 @@ msgstr "Encapsulamento UDP da Cisco" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Clique em \"Gerar arquivo\" para baixar um arquivo tar com os arquivos de " -"configuração atuais. Para retornar o roteador para o seu estado inicial, " -"clique em \"Zerar configuração\" (somente possÃvel para imagens squashfs)." +"configuração atuais." msgid "Client" msgstr "Cliente" @@ -803,9 +801,6 @@ msgstr "" "Se possÃvel, personaliza o comportamento dos <abbr title=\"Diodo Emissor de " "Luz\">LED</abbr>s." -msgid "DHCP Leases" -msgstr "Alocações do DHCP" - msgid "DHCP Server" msgstr "Servidor DHCP" @@ -818,9 +813,6 @@ msgstr "Cliente DHCP" msgid "DHCP-Options" msgstr "Opções de DHCP" -msgid "DHCPv6 Leases" -msgstr "Alocações DHCPv6" - msgid "DHCPv6 client" msgstr "Cliente DHCPv6" @@ -917,10 +909,10 @@ msgstr "Configuração do Dispositivo" msgid "Device is rebooting..." msgstr "O dispositivo está reiniciando..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "Dispositivo não alcançável" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -1017,6 +1009,9 @@ msgstr "" "abbr> sem o nome completo do <abbr title=\"Sistema de Nomes de DomÃnios" "\">DNS</abbr>" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Baixe e instale o pacote" @@ -1136,6 +1131,9 @@ msgstr "Habilita o campo DF (Não Fragmentar) dos pacotes encapsulados." msgid "Enable this mount" msgstr "Ativar esta montagem" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Ativar este espaço de troca (swap)" @@ -1170,6 +1168,12 @@ msgstr "Equipamento do ponto final" msgid "Endpoint Port" msgstr "Porta do ponto final" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Apagando..." @@ -1359,10 +1363,10 @@ msgstr "Espaço livre" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" "Mais informações sobre interfaces e parceiros WireGuard em <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgid "GHz" msgstr "GHz" @@ -2733,11 +2737,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"Realmente excluir esta interface? A exclusão não pode ser desfeita!\n" -" Você poderá perder o acesso a este dispositivo se você estiver conectado " -"através desta interface." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2753,11 +2754,8 @@ msgstr "Realmente limpar todas as mudanças?" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"Realmente desligar esta rede\"%s\" ?\n" -"Você poderá perder o acesso a este dispositivo se você estiver conectado " -"através desta interface." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2909,6 +2907,9 @@ msgstr "Reiniciar" msgid "Restart Firewall" msgstr "Reiniciar o firewall" +msgid "Restore" +msgstr "Restauração" + msgid "Restore backup" msgstr "Restaurar cópia de segurança" @@ -3114,9 +3115,6 @@ msgstr "" "firmware deve ser gravada manualmente. Por favor, consulte a wiki para " "instruções especÃficas da instalação deste dispositivo." -msgid "Sort" -msgstr "Ordenar" - msgid "Source" msgstr "Origem" @@ -3334,6 +3332,9 @@ msgstr "" "Os caracteres permitidos são: <code>A-Z</code>, <code>a-z</code>, <code>0-9</" "code> e <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" "O arquivo de configuração não pode ser carregado devido ao seguinte erro:" @@ -3566,10 +3567,12 @@ msgstr "Fuso Horário" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Para recuperar os arquivos de configuração, você pode enviar aqui uma cópia " -"de segurança anterior." +"de segurança anterior. Para retornar o roteador para o seu estado inicial, " +"clique em \"Zerar configuração\" (somente possÃvel para imagens squashfs)." msgid "Tone" msgstr "Tom" @@ -3663,6 +3666,9 @@ msgstr "Alterações Não Salvas" msgid "Unsupported protocol type." msgstr "Tipo de protocolo não suportado." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Atualizar listas" @@ -3976,9 +3982,6 @@ msgstr "full-duplex" msgid "half-duplex" msgstr "half-duplex" -msgid "help" -msgstr "ajuda" - msgid "hidden" msgstr "ocultar" @@ -4083,6 +4086,34 @@ msgstr "sim" msgid "« Back" msgstr "« Voltar" +#~ msgid "DHCP Leases" +#~ msgstr "Alocações do DHCP" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "Alocações DHCPv6" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "Realmente excluir esta interface? A exclusão não pode ser desfeita!\n" +#~ " Você poderá perder o acesso a este dispositivo se você estiver conectado " +#~ "através desta interface." + +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "Realmente desligar esta rede\"%s\" ?\n" +#~ "Você poderá perder o acesso a este dispositivo se você estiver conectado " +#~ "através desta interface." + +#~ msgid "Sort" +#~ msgstr "Ordenar" + +#~ msgid "help" +#~ msgstr "ajuda" + #~ msgid "IPv4 WAN Status" #~ msgstr "Estado IPv4 da WAN" diff --git a/modules/luci-base/po/pt/base.po b/modules/luci-base/po/pt/base.po index 64a6df1888..75bbee9789 100644 --- a/modules/luci-base/po/pt/base.po +++ b/modules/luci-base/po/pt/base.po @@ -504,12 +504,12 @@ msgstr "Voltar à vista global" msgid "Back to scan results" msgstr "Voltar aos resultados do scan" +msgid "Backup" +msgstr "Backup" + msgid "Backup / Flash Firmware" msgstr "Backup / Flashar Firmware" -msgid "Backup / Restore" -msgstr "Backup / Restauração" - msgid "Backup file list" msgstr "Lista de ficheiros para backup" @@ -642,12 +642,10 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Clique em \"Gerar arquivo\" para descarregar o ficheiro tar com os actuais " -"ficheiros de configuração. Para voltar as definições originais do firmware, " -"clique \" Fazer reset\" (só possÃvel com imagens squashfs)" +"ficheiros de configuração." msgid "Client" msgstr "Cliente" @@ -767,9 +765,6 @@ msgstr "" "Customiza o comportamento dos <abbr title=\"Diodo Emissor de Luz\">LED</" "abbr>s, se possÃvel." -msgid "DHCP Leases" -msgstr "Concessões DHCP" - msgid "DHCP Server" msgstr "Servidor DHCP" @@ -782,9 +777,6 @@ msgstr "Cliente DHCP" msgid "DHCP-Options" msgstr "Opções DHCP" -msgid "DHCPv6 Leases" -msgstr "Concessões DHCPv6" - msgid "DHCPv6 client" msgstr "" @@ -881,10 +873,10 @@ msgstr "Configuração do Dispositivo" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -978,6 +970,9 @@ msgstr "" "Não encaminhar consultas <abbr title=\"Sistema de Nomes de DomÃnios\">DNS</" "abbr> sem o nome do <abbr title=\"Sistema de Nomes de DomÃnios\">DNS</abbr>" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Descarregar e instalar pacote" @@ -1094,6 +1089,9 @@ msgstr "" msgid "Enable this mount" msgstr "Ativar este mount" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Ativar esta swap" @@ -1126,6 +1124,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "A apagar..." @@ -1311,7 +1315,7 @@ msgstr "Espaço livre" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2617,11 +2621,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"Deseja mesmo apagar esta interface? A eliminação não poder desfeita!\n" -"Pode perde a ligação ao dispositivo, caso esta ligado através desta " -"interface." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2633,13 +2634,10 @@ msgstr "" msgid "Really reset all changes?" msgstr "Deseja mesmo limpar todas as alterações?" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"Deseja mesmo desligar esta rede?\n" -"Pode perder o acesso ao dispositivo se estiver ligado através desta rede." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2785,6 +2783,9 @@ msgstr "Reiniciar" msgid "Restart Firewall" msgstr "Reiniciar Firewall" +msgid "Restore" +msgstr "Restauração" + msgid "Restore backup" msgstr "Restaurar backup" @@ -2984,9 +2985,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "Ordenar" - msgid "Source" msgstr "Origem" @@ -3183,6 +3181,9 @@ msgstr "" "Os caracteres permitidos são: <code>A-Z</code>, <code>a-z</code>, <code>0-9</" "code> e <code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3399,10 +3400,12 @@ msgstr "Fuso Horário" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Para restaurar os ficheiros de configuração, pode carregar aqui um ficheiro " -"de backup gerado anteriormente." +"de backup gerado anteriormente. Para voltar as definições originais do " +"firmware, clique \" Fazer reset\" (só possÃvel com imagens squashfs)." msgid "Tone" msgstr "" @@ -3494,6 +3497,9 @@ msgstr "Alterações não Guardadas" msgid "Unsupported protocol type." msgstr "Tipo de protocolo não suportado." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Actualizar listas" @@ -3792,9 +3798,6 @@ msgstr "full-duplex" msgid "half-duplex" msgstr "half-duplex" -msgid "help" -msgstr "ajuda" - msgid "hidden" msgstr "escondido" @@ -3898,6 +3901,34 @@ msgstr "sim" msgid "« Back" msgstr "« Voltar" +#~ msgid "DHCP Leases" +#~ msgstr "Concessões DHCP" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "Concessões DHCPv6" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "Deseja mesmo apagar esta interface? A eliminação não poder desfeita!\n" +#~ "Pode perde a ligação ao dispositivo, caso esta ligado através desta " +#~ "interface." + +#, fuzzy +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "Deseja mesmo desligar esta rede?\n" +#~ "Pode perder o acesso ao dispositivo se estiver ligado através desta rede." + +#~ msgid "Sort" +#~ msgstr "Ordenar" + +#~ msgid "help" +#~ msgstr "ajuda" + #~ msgid "IPv4 WAN Status" #~ msgstr "Estado WAN IPv4" diff --git a/modules/luci-base/po/ro/base.po b/modules/luci-base/po/ro/base.po index 9bcffbcb36..5ee5d186d3 100644 --- a/modules/luci-base/po/ro/base.po +++ b/modules/luci-base/po/ro/base.po @@ -490,12 +490,12 @@ msgstr "Inapoi la vedere generala" msgid "Back to scan results" msgstr "Inapoi la rezultatele scanarii" +msgid "Backup" +msgstr "Salveaza" + msgid "Backup / Flash Firmware" msgstr "Salveaza / Scrie Firmware" -msgid "Backup / Restore" -msgstr "Salveaza / Restaureaza" - msgid "Backup file list" msgstr "Salveaza lista fisiere" @@ -622,8 +622,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -740,9 +739,6 @@ msgid "" "\">LED</abbr>s if possible." msgstr "" -msgid "DHCP Leases" -msgstr "Conexiuni DHCP" - msgid "DHCP Server" msgstr "Server DHCP" @@ -755,9 +751,6 @@ msgstr "" msgid "DHCP-Options" msgstr "Optiuni DHCP" -msgid "DHCPv6 Leases" -msgstr "" - msgid "DHCPv6 client" msgstr "" @@ -851,10 +844,10 @@ msgstr "Configurarea dispozitivului" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -939,6 +932,9 @@ msgid "" "<abbr title=\"Domain Name System\">DNS</abbr>-Name" msgstr "" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Descarca si instaleaza pachetul" @@ -1049,6 +1045,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1081,6 +1080,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Stergere..." @@ -1264,7 +1269,7 @@ msgstr "Spatiu liber" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2541,7 +2546,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2554,7 +2559,7 @@ msgstr "" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2698,6 +2703,9 @@ msgstr "Restart" msgid "Restart Firewall" msgstr "Restarteaza firewallul" +msgid "Restore" +msgstr "Restaureaza" + msgid "Restore backup" msgstr "Reface backup-ul" @@ -2894,9 +2902,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "" - msgid "Source" msgstr "Sursa" @@ -3087,6 +3092,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3269,7 +3277,8 @@ msgstr "Fusul orar" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3362,6 +3371,9 @@ msgstr "Modificari nesalvate" msgid "Unsupported protocol type." msgstr "Tipul de protocol neacceptat." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3651,9 +3663,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "ajutor" - msgid "hidden" msgstr "ascuns" @@ -3756,6 +3765,12 @@ msgstr "da" msgid "« Back" msgstr "« Inapoi" +#~ msgid "DHCP Leases" +#~ msgstr "Conexiuni DHCP" + +#~ msgid "help" +#~ msgstr "ajutor" + #~ msgid "IPv4 WAN Status" #~ msgstr "Statusul IPv4 pe WAN" diff --git a/modules/luci-base/po/ru/base.po b/modules/luci-base/po/ru/base.po index e69928ea76..b24b238a2d 100644 --- a/modules/luci-base/po/ru/base.po +++ b/modules/luci-base/po/ru/base.po @@ -518,12 +518,12 @@ msgstr "назад в меню" msgid "Back to scan results" msgstr "Ðазад к результатам поиÑка" +msgid "Backup" +msgstr "Резервное копирование" + msgid "Backup / Flash Firmware" msgstr "Резервное копирование / Перепрошивка" -msgid "Backup / Restore" -msgstr "Резервное копирование / ВоÑÑтановление" - msgid "Backup file list" msgstr "СпиÑок файлов Ð´Ð»Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ð³Ð¾ копированиÑ" @@ -664,13 +664,10 @@ msgstr "формирование пакетов данных Cisco UDP " msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "Ðажмите 'Создать архив', чтобы загрузить tar-архив текущих config файлов " -"прошивки уÑтройÑтва, таким образом вы Ñохраните его наÑтройки. Ð”Ð»Ñ ÑброÑа " -"наÑтроек прошивки к иÑходному ÑоÑтоÑнию нажмите 'Выполнить ÑброÑ' (возможно " -"только Ð´Ð»Ñ squashfs-образов)." +"прошивки уÑтройÑтва, таким образом вы Ñохраните его наÑтройки." msgid "Client" msgstr "Клиент" @@ -796,9 +793,6 @@ msgstr "" "ÐаÑтройка Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñветодиодной индикации <abbr title=\"Светодиод\">LED</" "abbr>s уÑтройÑтва, еÑли Ñто возможно." -msgid "DHCP Leases" -msgstr "Ðренды DHCP" - msgid "DHCP Server" msgstr "DHCP-Ñервер" @@ -811,9 +805,6 @@ msgstr "DHCP-клиент" msgid "DHCP-Options" msgstr "DHCP-ÐаÑтройки" -msgid "DHCPv6 Leases" -msgstr "Ðренды DHCPv6" - msgid "DHCPv6 client" msgstr "DHCPv6 клиент" @@ -910,10 +901,10 @@ msgstr "ÐаÑтройка уÑтройÑтва" msgid "Device is rebooting..." msgstr "Перезагрузка..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "УÑтройÑтво недоÑтупно" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -1006,6 +997,9 @@ msgstr "" "Ðе перенаправлÑÑ‚ÑŒ <abbr title=\"Служба доменных имён\">DNS</abbr>-запроÑÑ‹ " "без <abbr title=\"Служба доменных имён\">DNS</abbr>-имени." +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Загрузить и уÑтановить пакет" @@ -1123,6 +1117,9 @@ msgstr "Включите флаг DF (не Фрагментировать) инРmsgid "Enable this mount" msgstr "Включить Ñту<br />точку монтированиÑ" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Включить Ñтот раздел подкачки" @@ -1157,6 +1154,12 @@ msgstr "ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° ХоÑта" msgid "Endpoint Port" msgstr "ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° Порта" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Стирание..." @@ -1344,10 +1347,10 @@ msgstr "Свободное меÑто" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ интерфейÑах и партнерах WireGuard приведена в <a " -"href=\"http://wireguard.io\">wireguard.io</a>." +"href=\"http://wireguard.com\">wireguard.com</a>." msgid "GHz" msgstr "ГГц" @@ -2692,11 +2695,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"ДейÑтвительно удалить Ñтот интерфейÑ? Удаление не может быть отменено!\\nÐ’Ñ‹ " -"можете потерÑÑ‚ÑŒ доÑтуп к Ñтому уÑтройÑтву, еÑли вы подключены через Ñтот " -"интерфейÑ." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2711,10 +2711,8 @@ msgstr "ДейÑтвительно ÑброÑить вÑе изменениÑ?" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"ДейÑтвительно отключить Ñеть? Ð’Ñ‹ можете потерÑÑ‚ÑŒ доÑтуп к Ñтому уÑтройÑтву, " -"еÑли вы подключены через Ñтот интерфейÑ." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2868,6 +2866,9 @@ msgstr "ПерезапуÑтить" msgid "Restart Firewall" msgstr "ПерезапуÑтить межÑетевой Ñкран" +msgid "Restore" +msgstr "ВоÑÑтановление" + msgid "Restore backup" msgstr "ВоÑÑтановить резервную копию" @@ -3071,9 +3072,6 @@ msgstr "" "должна быть уÑтановлена вручную. ОбратитеÑÑŒ к wiki Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… " "инÑтрукций Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ уÑтройÑтва." -msgid "Sort" -msgstr "Сортировка" - msgid "Source" msgstr "ИÑточник" @@ -3289,6 +3287,9 @@ msgstr "" "ДопуÑтимые Ñимволы: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> и " "<code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "Ðе удалоÑÑŒ загрузить config файл из-за Ñледующей ошибки:" @@ -3515,10 +3516,13 @@ msgstr "ЧаÑовой поÑÑ" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Чтобы воÑÑтановить config файлы, ваши наÑтройки прошивки уÑтройÑтва, вы " -"можете загрузить ранее Ñозданный вами архив здеÑÑŒ." +"можете загрузить ранее Ñозданный вами архив здеÑÑŒ. Ð”Ð»Ñ ÑброÑа наÑтроек " +"прошивки к иÑходному ÑоÑтоÑнию нажмите 'Выполнить ÑброÑ' (возможно только " +"Ð´Ð»Ñ squashfs-образов)." msgid "Tone" msgstr "Тон" @@ -3610,6 +3614,9 @@ msgstr "ÐепринÑтые изменениÑ" msgid "Unsupported protocol type." msgstr "Ðеподдерживаемый тип протокола." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Обновить ÑпиÑки" @@ -3925,9 +3932,6 @@ msgstr "полный дуплекÑ" msgid "half-duplex" msgstr "полудуплекÑ" -msgid "help" -msgstr "помощь" - msgid "hidden" msgstr "Ñкрытый" @@ -4030,6 +4034,33 @@ msgstr "да" msgid "« Back" msgstr "« Ðазад" +#~ msgid "DHCP Leases" +#~ msgstr "Ðренды DHCP" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "Ðренды DHCPv6" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "ДейÑтвительно удалить Ñтот интерфейÑ? Удаление не может быть отменено!" +#~ "\\nÐ’Ñ‹ можете потерÑÑ‚ÑŒ доÑтуп к Ñтому уÑтройÑтву, еÑли вы подключены через " +#~ "Ñтот интерфейÑ." + +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "ДейÑтвительно отключить Ñеть? Ð’Ñ‹ можете потерÑÑ‚ÑŒ доÑтуп к Ñтому " +#~ "уÑтройÑтву, еÑли вы подключены через Ñтот интерфейÑ." + +#~ msgid "Sort" +#~ msgstr "Сортировка" + +#~ msgid "help" +#~ msgstr "помощь" + #~ msgid "IPv4 WAN Status" #~ msgstr "СоÑтоÑние IPv4 WAN" diff --git a/modules/luci-base/po/sk/base.po b/modules/luci-base/po/sk/base.po index c727e0d288..b167a00213 100644 --- a/modules/luci-base/po/sk/base.po +++ b/modules/luci-base/po/sk/base.po @@ -476,10 +476,10 @@ msgstr "" msgid "Back to scan results" msgstr "" -msgid "Backup / Flash Firmware" +msgid "Backup" msgstr "" -msgid "Backup / Restore" +msgid "Backup / Flash Firmware" msgstr "" msgid "Backup file list" @@ -605,8 +605,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -723,9 +722,6 @@ msgid "" "\">LED</abbr>s if possible." msgstr "" -msgid "DHCP Leases" -msgstr "" - msgid "DHCP Server" msgstr "" @@ -738,9 +734,6 @@ msgstr "" msgid "DHCP-Options" msgstr "" -msgid "DHCPv6 Leases" -msgstr "" - msgid "DHCPv6 client" msgstr "" @@ -834,10 +827,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -920,6 +913,9 @@ msgid "" "<abbr title=\"Domain Name System\">DNS</abbr>-Name" msgstr "" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "" @@ -1030,6 +1026,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1062,6 +1061,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "" @@ -1244,7 +1249,7 @@ msgstr "" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2514,7 +2519,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2527,7 +2532,7 @@ msgstr "" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2671,6 +2676,9 @@ msgstr "" msgid "Restart Firewall" msgstr "" +msgid "Restore" +msgstr "" + msgid "Restore backup" msgstr "" @@ -2866,9 +2874,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "" - msgid "Source" msgstr "" @@ -3059,6 +3064,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3239,7 +3247,8 @@ msgstr "" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3332,6 +3341,9 @@ msgstr "" msgid "Unsupported protocol type." msgstr "" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3619,9 +3631,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "" - msgid "hidden" msgstr "" diff --git a/modules/luci-base/po/sv/base.po b/modules/luci-base/po/sv/base.po index 5b7a8ecbde..3fff2f49e4 100644 --- a/modules/luci-base/po/sv/base.po +++ b/modules/luci-base/po/sv/base.po @@ -487,12 +487,12 @@ msgstr "Backa till överblick" msgid "Back to scan results" msgstr "Backa till skanningsresultat" +msgid "Backup" +msgstr "Säkerhetskopiera" + msgid "Backup / Flash Firmware" msgstr "Säkerhetskopiera / Flasha inre mjukvara" -msgid "Backup / Restore" -msgstr "Säkerhetskopiera / Ã…terställ" - msgid "Backup file list" msgstr "Säkerhetskopiera fillista" @@ -619,8 +619,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -737,9 +736,6 @@ msgid "" "\">LED</abbr>s if possible." msgstr "" -msgid "DHCP Leases" -msgstr "DHCP-kontrakt" - msgid "DHCP Server" msgstr "DHCP-server" @@ -752,9 +748,6 @@ msgstr "DHCP-klient" msgid "DHCP-Options" msgstr "DHCP-alternativ" -msgid "DHCPv6 Leases" -msgstr "DHCPv6-kontrakt" - msgid "DHCPv6 client" msgstr "DHCPv6-klient" @@ -848,10 +841,10 @@ msgstr "Enhetskonfiguration" msgid "Device is rebooting..." msgstr "Enheten startar om..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "Enheten kan inte nÃ¥s" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -940,6 +933,9 @@ msgstr "" "Vidarebefordra inte <abbr title=\"Domain Name System\">DNS</abbr>-" "förfrÃ¥gningar utan <abbr title=\"Domain Name System\">DNS</abbr>-namn" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Ladda ner och installera paket" @@ -1050,6 +1046,9 @@ msgstr "" msgid "Enable this mount" msgstr "Aktivera den här monteringen" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "Aktivera den här swap" @@ -1082,6 +1081,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "Raderar..." @@ -1264,7 +1269,7 @@ msgstr "Fritt utrymme" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2537,7 +2542,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2550,7 +2555,7 @@ msgstr "Verkligen Ã¥terställa alla ändringar?" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2694,6 +2699,9 @@ msgstr "Starta om" msgid "Restart Firewall" msgstr "Starta om brandvägg" +msgid "Restore" +msgstr "Ã…terställ" + msgid "Restore backup" msgstr "Ã…terställ säkerhetskopian" @@ -2889,9 +2897,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "Sortera" - msgid "Source" msgstr "Källa" @@ -3082,6 +3087,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3264,7 +3272,8 @@ msgstr "Tidszon" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "För att Ã¥terställa konfigurationsfiler sÃ¥ kan du ladda upp ett tidigare " "genererat säkerhetskopierings arkiv här." @@ -3359,6 +3368,9 @@ msgstr "Osparade ändringar" msgid "Unsupported protocol type." msgstr "Protokolltypen stöds inte." +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "Uppdatera listor" @@ -3652,9 +3664,6 @@ msgstr "full-duplex" msgid "half-duplex" msgstr "halv-duplex" -msgid "help" -msgstr "hjälp" - msgid "hidden" msgstr "gömd" @@ -3756,3 +3765,15 @@ msgstr "ja" msgid "« Back" msgstr "« BakÃ¥t" + +#~ msgid "DHCP Leases" +#~ msgstr "DHCP-kontrakt" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "DHCPv6-kontrakt" + +#~ msgid "Sort" +#~ msgstr "Sortera" + +#~ msgid "help" +#~ msgstr "hjälp" diff --git a/modules/luci-base/po/templates/base.pot b/modules/luci-base/po/templates/base.pot index 7a2cdec81b..99ad716507 100644 --- a/modules/luci-base/po/templates/base.pot +++ b/modules/luci-base/po/templates/base.pot @@ -469,10 +469,10 @@ msgstr "" msgid "Back to scan results" msgstr "" -msgid "Backup / Flash Firmware" +msgid "Backup" msgstr "" -msgid "Backup / Restore" +msgid "Backup / Flash Firmware" msgstr "" msgid "Backup file list" @@ -598,8 +598,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -716,9 +715,6 @@ msgid "" "\">LED</abbr>s if possible." msgstr "" -msgid "DHCP Leases" -msgstr "" - msgid "DHCP Server" msgstr "" @@ -731,9 +727,6 @@ msgstr "" msgid "DHCP-Options" msgstr "" -msgid "DHCPv6 Leases" -msgstr "" - msgid "DHCPv6 client" msgstr "" @@ -827,10 +820,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -913,6 +906,9 @@ msgid "" "<abbr title=\"Domain Name System\">DNS</abbr>-Name" msgstr "" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "" @@ -1023,6 +1019,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1055,6 +1054,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "" @@ -1237,7 +1242,7 @@ msgstr "" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2507,7 +2512,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2520,7 +2525,7 @@ msgstr "" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2664,6 +2669,9 @@ msgstr "" msgid "Restart Firewall" msgstr "" +msgid "Restore" +msgstr "" + msgid "Restore backup" msgstr "" @@ -2859,9 +2867,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "" - msgid "Source" msgstr "" @@ -3052,6 +3057,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3232,7 +3240,8 @@ msgstr "" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3325,6 +3334,9 @@ msgstr "" msgid "Unsupported protocol type." msgstr "" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3612,9 +3624,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "" - msgid "hidden" msgstr "" diff --git a/modules/luci-base/po/tr/base.po b/modules/luci-base/po/tr/base.po index d64da31a71..c1a8161dec 100644 --- a/modules/luci-base/po/tr/base.po +++ b/modules/luci-base/po/tr/base.po @@ -489,12 +489,12 @@ msgstr "Genel Bakışa dön" msgid "Back to scan results" msgstr "Tarama sonuçlarına dön" +msgid "Backup" +msgstr "Yedekleme" + msgid "Backup / Flash Firmware" msgstr "" -msgid "Backup / Restore" -msgstr "Yedekleme / Geri Yükleme" - msgid "Backup file list" msgstr "" @@ -618,8 +618,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -736,9 +735,6 @@ msgid "" "\">LED</abbr>s if possible." msgstr "" -msgid "DHCP Leases" -msgstr "" - msgid "DHCP Server" msgstr "" @@ -751,9 +747,6 @@ msgstr "" msgid "DHCP-Options" msgstr "" -msgid "DHCPv6 Leases" -msgstr "" - msgid "DHCPv6 client" msgstr "" @@ -847,10 +840,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -933,6 +926,9 @@ msgid "" "<abbr title=\"Domain Name System\">DNS</abbr>-Name" msgstr "" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "" @@ -1043,6 +1039,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1075,6 +1074,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "" @@ -1257,7 +1262,7 @@ msgstr "" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2527,7 +2532,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2540,7 +2545,7 @@ msgstr "" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2684,6 +2689,9 @@ msgstr "Tekrar baÅŸlat" msgid "Restart Firewall" msgstr "" +msgid "Restore" +msgstr "Geri Yükleme" + msgid "Restore backup" msgstr "Yedeklemeyi geri yükle" @@ -2879,9 +2887,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "Sıralama" - msgid "Source" msgstr "Kaynak" @@ -3072,6 +3077,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3252,7 +3260,8 @@ msgstr "" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3345,6 +3354,9 @@ msgstr "" msgid "Unsupported protocol type." msgstr "" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3634,9 +3646,6 @@ msgstr "tam çift yönlü" msgid "half-duplex" msgstr "yarı çift yönlü" -msgid "help" -msgstr "yardım" - msgid "hidden" msgstr "gizli" @@ -3739,6 +3748,12 @@ msgstr "evet" msgid "« Back" msgstr "« Geri" +#~ msgid "Sort" +#~ msgstr "Sıralama" + +#~ msgid "help" +#~ msgstr "yardım" + #~ msgid "Apply" #~ msgstr "Uygula" diff --git a/modules/luci-base/po/uk/base.po b/modules/luci-base/po/uk/base.po index 65e4377335..ac0c5f7994 100644 --- a/modules/luci-base/po/uk/base.po +++ b/modules/luci-base/po/uk/base.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2013-12-05 19:07+0200\n" -"Last-Translator: Dmitri <4glitch@gmail.com>\n" +"PO-Revision-Date: 2018-07-04 17:36+0300\n" +"Last-Translator: Yurii <yuripet@gmail.com>\n" "Language-Team: none\n" "Language: uk\n" "MIME-Version: 1.0\n" @@ -10,19 +10,18 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Pootle 2.0.6\n" msgid "%.1f dB" -msgstr "" +msgstr "%.1f дБ" msgid "%s is untagged in multiple VLANs!" -msgstr "" +msgstr "%s Ñ” непозначеним у декількох VLAN!" msgid "(%d minute window, %d second interval)" -msgstr "(%d-хвилинне вікно, %d-Ñекундний інтервал)" +msgstr "(вікно - %d хвилин, інтервал - %d Ñекунд)" msgid "(%s available)" -msgstr "(%s доÑтупно)" +msgstr "(доÑтупно %s)" msgid "(empty)" msgstr "(пуÑто)" @@ -34,22 +33,22 @@ msgid "-- Additional Field --" msgstr "-- Додаткові Ð¿Ð¾Ð»Ñ --" msgid "-- Please choose --" -msgstr "-- Виберіть --" +msgstr "-- Оберіть --" msgid "-- custom --" msgstr "-- нетипово --" msgid "-- match by device --" -msgstr "" +msgstr "-- відповідно приÑтрою --" msgid "-- match by label --" -msgstr "" +msgstr "-- відповідно мітці --" msgid "-- match by uuid --" -msgstr "" +msgstr "-- відповідно UUID --" msgid "-- please select --" -msgstr "" +msgstr "-- виберіть --" msgid "1 Minute Load:" msgstr "ÐÐ°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° 1 хвилину:" @@ -58,34 +57,35 @@ msgid "15 Minute Load:" msgstr "ÐÐ°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° 15 хвилин:" msgid "4-character hexadecimal ID" -msgstr "" +msgstr "4-Ñимв. шіÑтнадцÑтковий ID" msgid "464XLAT (CLAT)" -msgstr "" +msgstr "464XLAT (CLAT)" msgid "5 Minute Load:" msgstr "ÐÐ°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° 5 хвилин:" msgid "6-octet identifier as a hex string - no colons" msgstr "" +"6-октетний ідентифікатор у виглÑді шіÑтнадцÑткового Ñ€Ñдка – без двокрапок" msgid "802.11r Fast Transition" -msgstr "" +msgstr "Швидкий перехід 802.11r" msgid "802.11w Association SA Query maximum timeout" -msgstr "" +msgstr "МакÑимальний тайм-аут запиту аÑоціації 802.11w" msgid "802.11w Association SA Query retry timeout" -msgstr "" +msgstr "Тайм-аут Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ аÑоціації 802.11w" msgid "802.11w Management Frame Protection" -msgstr "" +msgstr "ЗахиÑÑ‚ кадрів ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ 802.11w" msgid "802.11w maximum timeout" -msgstr "" +msgstr "МакÑимальний тайм-аут 802.11w" msgid "802.11w retry timeout" -msgstr "" +msgstr "Тайм-аут Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ 802.11w" msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>" msgstr "" @@ -107,7 +107,7 @@ msgid "" "order of the resolvfile" msgstr "" "<abbr title=\"Domain Name System — ÑиÑтема доменних імен\">DNS</abbr>-" -"Ñервери будуть опитані у порÑдку, визначеному файлом resolvfile" +"Ñервери буде опитано в порÑдку, визначеному файлом <em>resolvfile</em>" msgid "<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>" msgstr "" @@ -134,11 +134,11 @@ msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Gateway" msgstr "<abbr title=\"Інтернет-протокол верÑÑ–Ñ— 6\">IPv6</abbr>-шлюз" msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Suffix (hex)" -msgstr "" +msgstr "<abbr title=\"Інтернет-протокол верÑÑ–Ñ— 6\">IPv6</abbr>-ÑÑƒÑ„Ñ–ÐºÑ (hex)" msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration" msgstr "" -"ÐаÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ <abbr title=\"Light Emitting Diode — Ñвітлодіод\">LED</abbr>" +"ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ <abbr title=\"Light Emitting Diode — Ñвітлодіод\">LED</abbr>" msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Name" msgstr "Ðазва <abbr title=\"Light Emitting Diode — Ñвітлодіод\">LED</abbr>" @@ -149,33 +149,35 @@ msgstr "" "abbr>-адреÑа" msgid "<abbr title=\"The DHCP Unique Identifier\">DUID</abbr>" -msgstr "" +msgstr "<abbr title=\"Унікальний ідентифікатор DHCP\">DUID</abbr>" msgid "" "<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Dynamic Host Configuration " "Protocol\">DHCP</abbr> leases" msgstr "" -"<abbr title=\"МакÑимум\">Max.</abbr> оренд <abbr title=\"Dynamic Host " +"<abbr title=\"МакÑимум\">МакÑ.</abbr> оренд <abbr title=\"Dynamic Host " "Configuration Protocol — протокол динамічної конфігурації вузла\">DHCP</abbr>" msgid "" "<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Extension Mechanisms for " "Domain Name System\">EDNS0</abbr> packet size" msgstr "" -"<abbr title=\"МакÑимум\">Max.</abbr> розмір пакета <abbr title=\"Extension " -"Mechanisms for Domain Name System — Механізми розширень Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½Ð½Ð¾Ñ— ÑиÑтеми " -"імен\">EDNS0</abbr>" +"<abbr title=\"МакÑимальний\">МакÑ.</abbr> розмір пакета <abbr title=" +"\"Extension Mechanisms for Domain Name System — Механізми розширень Ð´Ð»Ñ " +"доменної ÑиÑтеми імен\">EDNS0</abbr>" msgid "<abbr title=\"maximal\">Max.</abbr> concurrent queries" -msgstr "<abbr title=\"МакÑимум\">Max.</abbr> одночаÑних запитів" +msgstr "<abbr title=\"МакÑимум\">МакÑ.</abbr> одночаÑних запитів" msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>" -msgstr "<abbr title='Парний: %s / Груповий: %s'>%s - %s</abbr>" +msgstr "<abbr title='Парний: %s / Груповий: %s'>%s – %s</abbr>" msgid "" "<br/>Note: you need to manually restart the cron service if the crontab file " "was empty before editing." msgstr "" +"<br/>Примітка: Ñкщо перед редагуваннÑм, файл crontab був порожній, вам " +"потрібно вручну перезапуÑтити Ñлужби cron." msgid "A43C + J43 + A43" msgstr "" @@ -194,10 +196,12 @@ msgstr "" "<abbr title=\"Access Point Name — Ñимволічна назва точки доÑтупу\">APN</abbr>" msgid "ARP retry threshold" -msgstr "Поріг повтору ARP" +msgstr "Поріг Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ ARP" msgid "ATM (Asynchronous Transfer Mode)" msgstr "" +"<abbr title=\"Asynchronous Transfer Mode — аÑинхронний режим передаваннÑ" +"\">ATM</abbr>" msgid "ATM Bridges" msgstr "ATM-моÑти" @@ -217,7 +221,7 @@ msgid "" "Linux network interfaces which can be used in conjunction with DHCP or PPP " "to dial into the provider network." msgstr "" -"ATM-моÑти виÑтавлÑÑŽÑ‚ÑŒ інкапÑульований Ethernet у з'єднаннÑÑ… AAL5 Ñк " +"ATM-моÑти виÑтавлÑÑŽÑ‚ÑŒ інкапÑульований Ethernet у з’єднаннÑÑ… AAL5 Ñк " "віртуальні мережеві інтерфейÑи Linux, котрі можуть викориÑтовуватиÑÑ Ð² " "поєднанні з DHCP або PPP Ð´Ð»Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі провайдера." @@ -270,7 +274,7 @@ msgid "Additional Hosts files" msgstr "Додаткові файли hosts" msgid "Additional servers file" -msgstr "" +msgstr "Додаткові файли servers" msgid "Address" msgstr "ÐдреÑа" @@ -285,7 +289,7 @@ msgid "Advanced Settings" msgstr "Додаткові параметри" msgid "Aggregate Transmit Power(ACTATP)" -msgstr "" +msgstr "Сумарна потужніÑÑ‚ÑŒ передаваннÑ" msgid "Alert" msgstr "Тривога" @@ -293,10 +297,10 @@ msgstr "Тривога" msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" -msgstr "" +msgstr "ВиділÑти IP-адреÑи поÑлідовно, починаючи з найнижчої доÑтупної адреÑи" msgid "Allocate IP sequentially" -msgstr "" +msgstr "ВиділÑти IP поÑлідовно" msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication" msgstr "" @@ -307,7 +311,7 @@ msgid "Allow all except listed" msgstr "Дозволити вÑÑ–, крім зазначених" msgid "Allow legacy 802.11b rates" -msgstr "" +msgstr "Дозволити заÑтарілі швидкоÑÑ‚Ñ– 802.11b" msgid "Allow listed only" msgstr "Дозволити тільки зазначені" @@ -317,7 +321,8 @@ msgstr "Дозволити локальний вузол" msgid "Allow remote hosts to connect to local SSH forwarded ports" msgstr "" -"Дозволити віддаленим вузлам Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ локальних SSH-ÑпрÑмованих портів" +"Дозволити віддаленим вузлам Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ локальних переÑпрÑмованих портів " +"SSH" msgid "Allow root logins with password" msgstr "Дозволити root-вхід із паролем" @@ -328,14 +333,14 @@ msgstr "Дозволити кориÑтувачеві <em>root</em> вхід у msgid "" "Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" msgstr "" -"Дозволити відповіді від клієнта на Ñервер у діапазоні 127.0.0.0/8, " +"Дозволити виÑхідні відповіді від клієнта на Ñервер у діапазоні 127.0.0.0/8, " "наприклад, Ð´Ð»Ñ RBL-поÑлуг" msgid "Allowed IPs" -msgstr "" +msgstr "Дозволено IP-адреÑи" msgid "Always announce default router" -msgstr "" +msgstr "Завжди оголошувати типовим маршрутизатором" msgid "Annex" msgstr "" @@ -384,21 +389,23 @@ msgstr "" msgid "Announce as default router even if no public prefix is available." msgstr "" +"Оголошувати типовим маршрутизатором, навіть Ñкщо немає доÑтупного публічного " +"префікÑа." msgid "Announced DNS domains" -msgstr "" +msgstr "Оголошено DNS-домени" msgid "Announced DNS servers" -msgstr "" +msgstr "Оголошено DNS-Ñервери" msgid "Anonymous Identity" -msgstr "" +msgstr "Ðнонімне поÑвідченнÑ" msgid "Anonymous Mount" -msgstr "" +msgstr "Ðнонімне монтуваннÑ" msgid "Anonymous Swap" -msgstr "" +msgstr "Ðнонімний Ñвоп" msgid "Antenna 1" msgstr "Ðнтена 1" @@ -413,17 +420,19 @@ msgid "Any zone" msgstr "Будь-Ñка зона" msgid "Apply request failed with status <code>%h</code>" -msgstr "" +msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° запиту на заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ñ– ÑтатуÑом <code>%h</code>" msgid "Apply unchecked" -msgstr "" +msgstr "ЗаÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ позначено" msgid "Architecture" -msgstr "" +msgstr "Ðрхітектура" msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" +"Призначати чаÑтину заданої довжини до кожного публічного IPv6-префікÑа цього " +"інтерфейÑу" msgid "Assign interfaces..." msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñів..." @@ -431,21 +440,23 @@ msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñів..." msgid "" "Assign prefix parts using this hexadecimal subprefix ID for this interface." msgstr "" +"Призначати Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу чаÑтину префікÑа, викориÑтовуючи цей " +"шіÑтнадцÑтковий ID ÑубпрефікÑа." msgid "Associated Stations" -msgstr "Приєднані Ñтанції" +msgstr "Приєднано Ñтанції" msgid "Associations" -msgstr "" +msgstr "З’єднань" msgid "Auth Group" -msgstr "" +msgstr "Група автентифікації" msgid "Authentication" msgstr "ÐвтентифікаціÑ" msgid "Authentication Type" -msgstr "" +msgstr "Тип автентифікації" msgid "Authoritative" msgstr "Ðадійний" @@ -457,25 +468,26 @@ msgid "Auto Refresh" msgstr "Ðвтоматичне оновленнÑ" msgid "Automatic" -msgstr "" +msgstr "Ðвтоматично" msgid "Automatic Homenet (HNCP)" -msgstr "" +msgstr "Ðвтоматично Homenet (HNCP)" msgid "Automatically check filesystem for errors before mounting" msgstr "" +"Ðвтоматично перевірÑти файлову ÑиÑтему на наÑвніÑÑ‚ÑŒ помилок перед монтуваннÑм" msgid "Automatically mount filesystems on hotplug" -msgstr "" +msgstr "Ðвтоматично монтувати файлові ÑиÑтеми при оперативниму підключенні" msgid "Automatically mount swap on hotplug" -msgstr "" +msgstr "Ðвтоматично монтувати Ñвоп при оперативниму підключенні" msgid "Automount Filesystem" -msgstr "" +msgstr "ÐÐ²Ñ‚Ð¾Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¤Ð¡" msgid "Automount Swap" -msgstr "" +msgstr "ÐÐ²Ñ‚Ð¾Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñвоп" msgid "Available" msgstr "ДоÑтупно" @@ -513,20 +525,20 @@ msgstr "ПовернутиÑÑ Ð´Ð¾ переліку" msgid "Back to scan results" msgstr "ПовернутиÑÑ Ð´Ð¾ результатів ÑкануваннÑ" -msgid "Backup / Flash Firmware" -msgstr "Резервне ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ / ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ¸" +msgid "Backup" +msgstr "Резервне копіюваннÑ" -msgid "Backup / Restore" -msgstr "Резервне копіюваннÑ/відновленнÑ" +msgid "Backup / Flash Firmware" +msgstr "Резервне ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ / Прошивка мікропрограми" msgid "Backup file list" msgstr "СпиÑок файлів резервних копій" msgid "Bad address specified!" -msgstr "Вказана неправильна адреÑа!" +msgstr "Вказано неправильну адреÑу!" msgid "Band" -msgstr "" +msgstr "Група" msgid "" "Below is the determined list of files to backup. It consists of changed " @@ -538,16 +550,16 @@ msgstr "" "базових файлів, та файлів за кориÑтувацькими шаблонами резервного копіюваннÑ." msgid "Bind interface" -msgstr "" +msgstr "Прив’Ñзка інтерфейÑу" msgid "Bind only to specific interfaces rather than wildcard address." -msgstr "" +msgstr "Прив’Ñзка тільки до певних інтерфейÑів, а не шаблонної адреÑи." msgid "Bind the tunnel to this interface (optional)." -msgstr "" +msgstr "Прив’Ñзка тунелю до цього інтерфейÑу (за бажаннÑ)." msgid "Bitrate" -msgstr "ШвидкіÑÑ‚ÑŒ передачі даних" +msgstr "ШвидкіÑÑ‚ÑŒ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…" msgid "Bogus NX Domain Override" msgstr "Відкидати підробки NX-домену" @@ -556,7 +568,7 @@ msgid "Bridge" msgstr "МіÑÑ‚" msgid "Bridge interfaces" -msgstr "Об'єднати інтерфейÑи в міÑÑ‚" +msgstr "Об’єднати інтерфейÑи в міÑÑ‚" msgid "Bridge unit number" msgstr "Ðомер моÑта" @@ -577,9 +589,12 @@ msgid "" "Build/distribution specific feed definitions. This file will NOT be " "preserved in any sysupgrade." msgstr "" +"Специфічні Ð´Ð»Ñ Ð·Ð±Ñ–Ñ€ÐºÐ¸/Ð¿Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ñ–Ð². Цей файл ÐЕ БУДЕ " +"збережено при будь-Ñкому оновленні ÑиÑтеми." msgid "CA certificate; if empty it will be saved after the first connection." msgstr "" +"Сертифікат CA; Ñкщо порожньо, його буде збережено піÑÐ»Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ підключеннÑ." msgid "CPU usage (%)" msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¦ÐŸ, %" @@ -588,7 +603,7 @@ msgid "Cancel" msgstr "СкаÑувати" msgid "Category" -msgstr "" +msgstr "КатегоріÑ" msgid "Chain" msgstr "Ланцюжок" @@ -600,7 +615,7 @@ msgid "Changes applied." msgstr "Зміни заÑтоÑовано." msgid "Changes have been reverted." -msgstr "" +msgstr "Зміни було ÑкаÑовано." msgid "Changes the administrator password for accessing the device" msgstr "Зміна Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð°Ð´Ð¼Ñ–Ð½Ñ–Ñтратора Ð´Ð»Ñ Ð´Ð¾Ñтупу до приÑтрою" @@ -612,15 +627,17 @@ msgid "" "Channel %d is not available in the %s regulatory domain and has been auto-" "adjusted to %d." msgstr "" +"Канал %d не доÑтупний у %s регулÑторному домені й був автоматично " +"Ñкоригований на %d." msgid "Check" msgstr "Перевірити" msgid "Check filesystems before mount" -msgstr "" +msgstr "Перевірити файлову ÑиÑтему перед монтуваннÑм" msgid "Check this option to delete the existing networks from this radio." -msgstr "" +msgstr "Позначте цей параметр, щоб видалити Ñ–Ñнуючі мережі з цього радіо." msgid "Checksum" msgstr "Контрольна Ñума" @@ -647,16 +664,14 @@ msgid "Cipher" msgstr "Шифр" msgid "Cisco UDP encapsulation" -msgstr "" +msgstr "ІнкапÑулÑÑ†Ñ–Ñ UDP Cisco" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" "ÐатиÑніть кнопку \"Створити архів\", щоб завантажити tar-архів поточних " -"файлів конфігурації. Ð”Ð»Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ¸ до Ñ—Ñ— початкового Ñтану, " -"натиÑніть кнопку \"Відновити\" (можливе тільки з образами SquashFS)." +"файлів конфігурації." msgid "Client" msgstr "Клієнт" @@ -668,8 +683,8 @@ msgid "" "Close inactive connection after the given amount of seconds, use 0 to " "persist connection" msgstr "" -"Закривати неактивні з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð¿ÐµÐ²Ð½Ð¾Ð³Ð¾ інтервалу чаÑу (Ñекунди). Ð”Ð»Ñ " -"ÑƒÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð¸Ñ… з'єднань викориÑтовуйте 0" +"Закривати неактивні Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð¿ÐµÐ²Ð½Ð¾Ð³Ð¾ інтервалу чаÑу (Ñекунди). Ð”Ð»Ñ " +"ÑƒÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð¸Ñ… з’єднань викориÑтовуйте 0" msgid "Close list..." msgstr "Згорнути ÑпиÑок..." @@ -689,18 +704,22 @@ msgid "" "workaround might cause interoperability issues and reduced robustness of key " "negotiation especially in environments with heavy traffic load." msgstr "" +"УÑкладнює атаки перевÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° на Ñтороні клієнта, відключаючи " +"ретранÑлÑцію кадрів EAPOL-Key, що викориÑтовуютьÑÑ Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð². " +"Може викликати проблеми ÑуміÑноÑÑ‚Ñ– та Ð·Ð½Ð¸Ð¶ÐµÐ½Ð½Ñ ÑтійкоÑÑ‚Ñ– ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°, " +"оÑобливо в Ñередовищах з великою завантаженіÑÑ‚ÑŽ трафіку." msgid "Configuration" msgstr "КонфігураціÑ" msgid "Configuration files will be kept." -msgstr "Конфігураційні файли будуть збережені." +msgstr "Конфігураційні файли буде збережено." msgid "Configuration has been applied." -msgstr "" +msgstr "Конфігурацію заÑтоÑовано." msgid "Configuration has been rolled back!" -msgstr "" +msgstr "Конфігурацію було відкочено!" msgid "Confirmation" msgstr "ПідтвердженнÑ" @@ -709,7 +728,7 @@ msgid "Connect" msgstr "Підключити" msgid "Connected" -msgstr "Підключений" +msgstr "Підключено" msgid "Connection Limit" msgstr "Гранична кількіÑÑ‚ÑŒ підключень" @@ -722,6 +741,10 @@ msgid "" "changes. You might need to reconnect if you modified network related " "settings such as the IP address or wireless security credentials." msgstr "" +"ПіÑÐ»Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½ конфігурації не вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ доÑтуп до " +"приÑтрою. Вам, можливо, знадобитиÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ підключеннÑ, Ñкщо ви змінили " +"Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ–, такі Ñк IP-адреÑа або облікові дані безпеки бездротової " +"мережі." msgid "Country" msgstr "Країна" @@ -754,31 +777,32 @@ msgid "Custom Interface" msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ñ€Ð¸Ñтувача" msgid "Custom delegated IPv6-prefix" -msgstr "" +msgstr "КориÑтувацький делегований Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ IPv6" msgid "" "Custom feed definitions, e.g. private feeds. This file can be preserved in a " "sysupgrade." msgstr "" +"КориÑтувацькі Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ñ–Ð², наприклад, приватних. Цей файл може бути " +"збережено при оновленні ÑиÑтеми." msgid "Custom feeds" -msgstr "" +msgstr "КориÑтувацькі канали" msgid "" "Custom files (certificates, scripts) may remain on the system. To prevent " "this, perform a factory-reset first." msgstr "" +"КориÑтувацькі файли (Ñертифікати, Ñкрипти) можуть залишитиÑÑ Ð² ÑиÑтемі. Щоб " +"запобігти цьому, Ñпочатку виконайте ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð´Ð¾ заводÑьких налаштувань." msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" -"ÐаÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²ÐµÐ´Ñ–Ð½ÐºÐ¸ <abbr title=\"Light Emitting Diode — Ñвітлодіод" +"ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²ÐµÐ´Ñ–Ð½ÐºÐ¸ <abbr title=\"Light Emitting Diode — Ñвітлодіод" "\">LED</abbr>, Ñкщо це можливо." -msgid "DHCP Leases" -msgstr "Оренди DHCP" - msgid "DHCP Server" msgstr "Сервер DHCP" @@ -791,53 +815,50 @@ msgstr "Клієнт DHCP" msgid "DHCP-Options" msgstr "Параметри DHCP" -msgid "DHCPv6 Leases" -msgstr "Оренди DHCPv6" - msgid "DHCPv6 client" -msgstr "" +msgstr "Клієнт DHCPv6" msgid "DHCPv6-Mode" -msgstr "" +msgstr "Режим DHCPv6" msgid "DHCPv6-Service" -msgstr "" +msgstr "Служба DHCPv6" msgid "DNS" msgstr "DNS" msgid "DNS forwardings" -msgstr "СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ DNS-запитів" +msgstr "ПереÑпрÑмовуваннÑ<br />запитів DNS" msgid "DNS-Label / FQDN" -msgstr "" +msgstr "DNS-мітка / FQDN" msgid "DNSSEC" msgstr "" msgid "DNSSEC check unsigned" -msgstr "" +msgstr "Перевірка непідпиÑаного DNSSEC" msgid "DPD Idle Timeout" -msgstr "" +msgstr "Тайм-аут проÑтою DPD" msgid "DS-Lite AFTR address" -msgstr "" +msgstr "AFTR-адреÑа DS-Lite" msgid "DSL" -msgstr "" +msgstr "DSL" msgid "DSL Status" -msgstr "" +msgstr "Стан DSL" msgid "DSL line mode" -msgstr "" +msgstr "Режим лінії DSL" msgid "DUID" msgstr "DUID" msgid "Data Rate" -msgstr "" +msgstr "Швидк. передаваннÑ" msgid "Debug" msgstr "ЗневаджуваннÑ" @@ -849,7 +870,7 @@ msgid "Default gateway" msgstr "Типовий шлюз" msgid "Default is stateless + stateful" -msgstr "" +msgstr "Типовим Ñ” БЕЗ та ЗІ збереженнÑм Ñтану" msgid "Default state" msgstr "Типовий Ñтан" @@ -888,19 +909,19 @@ msgid "Device Configuration" msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¸Ñтрою" msgid "Device is rebooting..." -msgstr "" - -msgid "Device unreachable" -msgstr "" +msgstr "ПриÑтрій перезавантажуєтьÑÑ..." msgid "Device unreachable!" -msgstr "" +msgstr "ПриÑтрій недоÑÑжний!" + +msgid "Device unreachable! Still waiting for device..." +msgstr "ПриÑтрій недоÑÑжний! ДоÑÑ– чекаємо на приÑтрій..." msgid "Diagnostics" msgstr "ДіагноÑтика" msgid "Dial number" -msgstr "" +msgstr "Ðабір номера" msgid "Directory" msgstr "Каталог" @@ -916,25 +937,25 @@ msgstr "" "динамічної конфігурації вузла\">DHCP</abbr> Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу." msgid "Disable DNS setup" -msgstr "Вимкнути наÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ DNS" +msgstr "Вимкнути Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ DNS" msgid "Disable Encryption" -msgstr "" +msgstr "Вимкнути шифруваннÑ" msgid "Disabled" msgstr "Вимкнено" msgid "Disabled (default)" -msgstr "" +msgstr "Вимкнено (типово)" msgid "Discard upstream RFC1918 responses" -msgstr "Відкидати RFC1918-відповіді від клієнта на Ñервер" +msgstr "Відкидати виÑхідні RFC1918-відповіді" msgid "Dismiss" -msgstr "" +msgstr "Відхилити" msgid "Displaying only packages containing" -msgstr "Показані тільки непорожні пакети" +msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ непорожніх пакетів" msgid "Distance Optimization" msgstr "ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð·Ð° відÑтанню" @@ -943,7 +964,7 @@ msgid "Distance to farthest network member in meters." msgstr "ВідÑтань до найвіддаленішого вузла мережі в метрах." msgid "Distribution feeds" -msgstr "" +msgstr "Канали поширеннÑ" msgid "Diversity" msgstr "РізновидніÑÑ‚ÑŒ" @@ -956,20 +977,22 @@ msgid "" msgstr "" "Dnsmasq ÑвлÑÑ” Ñобою комбінований <abbr title=\"Dynamic Host Configuration " "Protocol — протокол динамічної конфігурації вузла\">DHCP</abbr>-Ñервер Ñ– " -"<abbr title=\"Domain Name System — ÑиÑтема доменних імен\">DNS</abbr>-" -"транÑпортер Ð´Ð»Ñ Ð±Ñ€Ð°Ð½Ð´Ð¼Ð°ÑƒÐµÑ€Ñ–Ð² <abbr title=\"Network Address Translation — " -"Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ (транÑлÑціÑ) мережевих адреÑ\">NAT</abbr>" +"<abbr title=\"Domain Name System — ÑиÑтема доменних імен\">DNS</abbr>-прокÑÑ– " +"Ð´Ð»Ñ Ð±Ñ€Ð°Ð½Ð´Ð¼Ð°ÑƒÐµÑ€Ñ–Ð² <abbr title=\"Network Address Translation — Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ " +"(транÑлÑціÑ) мережевих адреÑ\">NAT</abbr>" msgid "Do not cache negative replies, e.g. for not existing domains" msgstr "Ðе кешувати негативні відповіді, наприклад, за неіÑнуючих доменів" msgid "Do not forward requests that cannot be answered by public name servers" msgstr "" -"Ðе ÑпрÑмовувати запити, Ñкі не можуть бути оброблені публічними Ñерверами " +"Ðе переÑпрÑмовувати запити, Ñкі не може бути оброблено відкритими Ñерверами " "імен" msgid "Do not forward reverse lookups for local networks" -msgstr "Ðе ÑпрÑмовувати зворотний переглÑд Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… мереж" +msgstr "" +"Ðе переÑпрÑмовувати зворотні <abbr title=\"Domain Name System — ÑиÑтема " +"доменних імен\">DNS</abbr>-запити Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… мереж" msgid "Domain required" msgstr "Потрібен домен" @@ -978,16 +1001,19 @@ msgid "Domain whitelist" msgstr "\"Білий ÑпиÑок\" доменів" msgid "Don't Fragment" -msgstr "" +msgstr "Ðе фрагментувати" msgid "" "Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without " "<abbr title=\"Domain Name System\">DNS</abbr>-Name" msgstr "" -"Ðе переÑилати <abbr title=\"Domain Name System — ÑиÑтема доменних імен" +"Ðе переÑпрÑмовувати <abbr title=\"Domain Name System — ÑиÑтема доменних імен" "\">DNS</abbr>-запити без <abbr title=\"Domain Name System — ÑиÑтема доменних " "імен\">DNS</abbr>-імені" +msgid "Down" +msgstr "Вниз" + msgid "Download and install package" msgstr "Завантажити та інÑталювати пакети" @@ -995,7 +1021,7 @@ msgid "Download backup" msgstr "Завантажити резервну копію" msgid "Downstream SNR offset" -msgstr "" +msgstr "Ðизхідний зÑув SNR" msgid "Dropbear Instance" msgstr "Ð ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Dropbear" @@ -1026,7 +1052,7 @@ msgstr "" "обÑлуговуватиÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ клієнти, Ñкі мають Ñтатичні оренди." msgid "EA-bits length" -msgstr "" +msgstr "Довжина EA-бітів" msgid "EAP-Method" msgstr "EAP-Метод" @@ -1038,6 +1064,8 @@ msgid "" "Edit the raw configuration data above to fix any error and hit \"Save\" to " "reload the page." msgstr "" +"Щоб виправити ÑкуÑÑŒ помилку, відредагуйте вихідні дані конфігурації вище Ñ– " +"натиÑніть \"Зберегти\", щоб перезавантажити Ñторінку." msgid "Edit this interface" msgstr "Редагувати цей інтерфейÑ" @@ -1055,6 +1083,8 @@ msgid "" "Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> " "snooping" msgstr "" +"Увімкнути відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ <abbr title=\"Internet Group Management Protocol" +"\">IGMP</abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "Увімкнути <abbr title=\"Spanning Tree Protocol\">STP</abbr>" @@ -1063,19 +1093,19 @@ msgid "Enable HE.net dynamic endpoint update" msgstr "Увімкнути динамічне Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÑ–Ð½Ñ†ÐµÐ²Ð¾Ñ— точки HE.net" msgid "Enable IPv6 negotiation" -msgstr "" +msgstr "Увімкнути ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ IPv6" msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Увімкнути ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ IPv6 Ð´Ð»Ñ PPP-з'єднань" +msgstr "Увімкнути ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ IPv6 Ð´Ð»Ñ PPP-з’єднань" msgid "Enable Jumbo Frame passthrough" msgstr "ПропуÑкати Jumbo-фрейми" msgid "Enable NTP client" -msgstr "Увімкнути NTP-клієнт" +msgstr "Увімкнути клієнта NTP" msgid "Enable Single DES" -msgstr "" +msgstr "Увімкнути Single DES" msgid "Enable TFTP server" msgstr "Увімкнути TFTP-Ñервер" @@ -1084,28 +1114,31 @@ msgid "Enable VLAN functionality" msgstr "Увімкнути підтримку VLAN" msgid "Enable WPS pushbutton, requires WPA(2)-PSK" -msgstr "" +msgstr "Увімкнути кнопку WPS, потребує WPA(2)-PSK" msgid "Enable key reinstallation (KRACK) countermeasures" -msgstr "" +msgstr "Увімкнути протидію<br />перевÑтановленню ключів (KRACK)" msgid "Enable learning and aging" msgstr "Увімкнути learning та aging" msgid "Enable mirroring of incoming packets" -msgstr "" +msgstr "Увімкнути Ð²Ñ–Ð´Ð´Ð·ÐµÑ€ÐºÐ°Ð»ÐµÐ½Ð½Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… пакетів" msgid "Enable mirroring of outgoing packets" -msgstr "" +msgstr "Увімкнути Ð²Ñ–Ð´Ð´Ð·ÐµÑ€ÐºÐ°Ð»ÐµÐ½Ð½Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… пакетів" msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." -msgstr "" +msgstr "Увімкнути прапорець DF (Don't Fragment) Ð´Ð»Ñ Ñ–Ð½ÐºÐ°Ð¿Ñульованих пакетів." msgid "Enable this mount" msgstr "Увімкнути це монтуваннÑ" +msgid "Enable this network" +msgstr "Увімкнути цю мережу" + msgid "Enable this swap" -msgstr "Увімкнути це довантаженнÑ" +msgstr "Увімкнути цей Ñвоп" msgid "Enable/Disable" msgstr "Увімкнено/Вимкнено" @@ -1114,16 +1147,18 @@ msgid "Enabled" msgstr "Увімкнено" msgid "Enables IGMP snooping on this bridge" -msgstr "" +msgstr "Вмикає відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ IGMP на цьому моÑту" msgid "" "Enables fast roaming among access points that belong to the same Mobility " "Domain" msgstr "" +"Вмикає швидкий роумінг між точками доÑтупу, що належать до одного Ñ– того ж " +"домену мобільноÑÑ‚Ñ–" msgid "Enables the Spanning Tree Protocol on this bridge" msgstr "" -"Увімкнути <abbr title=\"Spanning Tree Protocol\">STP</abbr> на цьому моÑту" +"Вмикає <abbr title=\"Spanning Tree Protocol\">STP</abbr> на цьому моÑту" msgid "Encapsulation mode" msgstr "Режим інкапÑулÑції" @@ -1132,10 +1167,16 @@ msgid "Encryption" msgstr "ШифруваннÑ" msgid "Endpoint Host" -msgstr "" +msgstr "ХоÑÑ‚ кінцевої точки" msgid "Endpoint Port" -msgstr "" +msgstr "Порт кінцевої точки" + +msgid "Enter custom value" +msgstr "Введіть влаÑне значеннÑ" + +msgid "Enter custom values" +msgstr "Введіть влаÑні значеннÑ" msgid "Erasing..." msgstr "ВидаленнÑ..." @@ -1144,22 +1185,22 @@ msgid "Error" msgstr "Помилка" msgid "Errored seconds (ES)" -msgstr "" +msgstr "Секунд з помилками (<abbr title=\"Errored seconds\">ES</abbr>)" msgid "Ethernet Adapter" -msgstr "Ðдаптер Ethernet" +msgstr "Ethernet-адаптер" msgid "Ethernet Switch" msgstr "Ethernet-комутатор" msgid "Exclude interfaces" -msgstr "" +msgstr "Виключити інтерфейÑи" msgid "Expand hosts" msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð²ÑƒÐ·Ð»Ñ–Ð²" msgid "Expires" -msgstr "ДійÑний ще" +msgstr "Збігає за" #, fuzzy msgid "" @@ -1167,13 +1208,13 @@ msgid "" msgstr "Термін оренди адреÑ, мінімум 2 хвилини (<code>2m</code>)." msgid "External" -msgstr "" +msgstr "Зовнішнє" msgid "External R0 Key Holder List" -msgstr "" +msgstr "Зовнішній ÑпиÑок влаÑників ключів R0" msgid "External R1 Key Holder List" -msgstr "" +msgstr "Зовнішній ÑпиÑок влаÑників ключів R1" msgid "External system log server" msgstr "Зовнішній Ñервер ÑиÑтемного журналу" @@ -1182,28 +1223,28 @@ msgid "External system log server port" msgstr "Порт зовнішнього Ñервера ÑиÑтемного журналу" msgid "External system log server protocol" -msgstr "" +msgstr "Протокол зовнішнього Ñервера ÑиÑтемного журналу" msgid "Extra SSH command options" -msgstr "" +msgstr "Додаткові параметри команд SSH" msgid "FT over DS" -msgstr "" +msgstr "FT через DS" msgid "FT over the Air" -msgstr "" +msgstr "FT через повітрÑ" msgid "FT protocol" -msgstr "" +msgstr "Протокол FT" msgid "Failed to confirm apply within %ds, waiting for rollback…" -msgstr "" +msgstr "Ðе вдалоÑÑ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ñ‚Ð¸ заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° протÑзі %d Ñ, очікуємо відкату…" msgid "File" msgstr "Файл" msgid "Filename of the boot image advertised to clients" -msgstr "І'Ð¼Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ образу, що оголошуєтьÑÑ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð°Ð¼" +msgstr "Ð†â€™Ð¼Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ образу, що оголошуєтьÑÑ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð°Ð¼" msgid "Filesystem" msgstr "Файлова ÑиÑтема" @@ -1221,6 +1262,8 @@ msgid "" "Find all currently attached filesystems and swap and replace configuration " "with defaults based on what was detected" msgstr "" +"Знайти вÑÑ– файлові ÑиÑтеми та Ñвопи, Ñкі наразі підключено Ñ– замінити " +"конфігурацію типовою на підÑтаві того, що було виÑвлено" msgid "Find and join network" msgstr "Знайти мережу й приєднатиÑÑ" @@ -1235,37 +1278,37 @@ msgid "Firewall" msgstr "Брандмауер" msgid "Firewall Mark" -msgstr "" +msgstr "Позначка брандмауера" msgid "Firewall Settings" -msgstr "ÐаÑтройки брандмауера" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ñ€Ð°Ð½Ð´Ð¼Ð°ÑƒÐµÑ€Ð°" msgid "Firewall Status" -msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð±Ñ€Ð°Ð½Ð´Ð¼Ð°ÑƒÐµÑ€Ð°" +msgstr "Стан брандмауера" msgid "Firmware File" -msgstr "" +msgstr "Файл мікропрограми" msgid "Firmware Version" -msgstr "ВерÑÑ–Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ¸" +msgstr "ВерÑÑ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸" msgid "Fixed source port for outbound DNS queries" msgstr "ФікÑований порт Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… DNS-запитів" msgid "Flash Firmware" -msgstr "Заливаємо прошивку" +msgstr "Прошиваємо мікропрограму" msgid "Flash image..." -msgstr "Відвантажити образ..." +msgstr "Прошити образ..." msgid "Flash new firmware image" -msgstr "Залити новий образ прошивки" +msgstr "Прошити новий образ мікропрограми" msgid "Flash operations" -msgstr "Операції заливаннÑ" +msgstr "Операції прошиваннÑ" msgid "Flashing..." -msgstr "Заливаємо..." +msgstr "Прошиваємо..." msgid "Force" msgstr "ПримуÑово" @@ -1283,28 +1326,28 @@ msgid "Force TKIP and CCMP (AES)" msgstr "ПримуÑово TKIP та CCMP (AES)" msgid "Force link" -msgstr "" +msgstr "ПримуÑове з’єднаннÑ" msgid "Force use of NAT-T" -msgstr "" +msgstr "ПримуÑово викориÑтовувати NAT-T" msgid "Form token mismatch" -msgstr "" +msgstr "ÐеузгодженіÑÑ‚ÑŒ маркера форми" msgid "Forward DHCP traffic" -msgstr "СпрÑмовувати DHCP-трафік" +msgstr "ПереÑпрÑмовувати DHCP-трафік" msgid "Forward Error Correction Seconds (FECS)" -msgstr "" +msgstr "Секунди прÑмого ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº (FECS)" msgid "Forward broadcast traffic" -msgstr "СпрÑмовувати широкомовний трафік" +msgstr "ПереÑпрÑмовувати широкомовний трафік" msgid "Forward mesh peer traffic" -msgstr "" +msgstr "ПереÑпрÑмовувати одноранговий трафік" msgid "Forwarding mode" -msgstr "Режим ÑпрÑмовуваннÑ" +msgstr "Режим переÑпрÑмовуваннÑ" msgid "Fragmentation Threshold" msgstr "Поріг фрагментації" @@ -1320,8 +1363,10 @@ msgstr "Вільне міÑце" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" +"Більш детальна Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ інтерфейÑи та вузли WireGuard на <a href=" +"\"http://wireguard.com\">wireguard.com</a>." msgid "GHz" msgstr "ГГц" @@ -1336,19 +1381,19 @@ msgid "Gateway ports" msgstr "Порти шлюзу" msgid "General Settings" -msgstr "Загальні наÑтройки" +msgstr "Загальні параметри" msgid "General Setup" -msgstr "Загальні наÑтройки" +msgstr "Загальні налаштуваннÑ" msgid "General options for opkg" -msgstr "" +msgstr "Загальні параметри OPKG" msgid "Generate Config" -msgstr "" +msgstr "Cтворити конфігурацію" msgid "Generate PMK locally" -msgstr "" +msgstr "Генерувати PMK локально" msgid "Generate archive" msgstr "Cтворити архів" @@ -1360,10 +1405,10 @@ msgid "Given password confirmation did not match, password not changed!" msgstr "ОÑкільки пароль Ñ– Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ Ñпівпадають, то пароль не змінено!" msgid "Global Settings" -msgstr "" +msgstr "Загальні параметри" msgid "Global network options" -msgstr "" +msgstr "Глобальні параметри мережі" msgid "Go to password configuration..." msgstr "Перейти до конфігурації паролÑ..." @@ -1372,19 +1417,19 @@ msgid "Go to relevant configuration page" msgstr "Перейти до відповідної Ñторінки конфігурації" msgid "Group Password" -msgstr "" +msgstr "Пароль групи" msgid "Guest" -msgstr "" +msgstr "ГіÑÑ‚ÑŒ" msgid "HE.net password" msgstr "Пароль HE.net" msgid "HE.net username" -msgstr "" +msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача HE.net" msgid "HT mode (802.11n)" -msgstr "" +msgstr "Режим HT (802.11n)" msgid "Hang Up" msgstr "Призупинити" @@ -1396,7 +1441,7 @@ msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." msgstr "" -"Тут ви можете наÑтроїти оÑновні параметри виглÑду вашого приÑтрою, такі Ñк " +"Тут ви можете налаштувати оÑновні параметри виглÑду вашого приÑтрою, такі Ñк " "назва (ім’Ñ) вузла або чаÑовий поÑÑ." msgid "" @@ -1415,7 +1460,7 @@ msgstr "" "розширеної Ñлужби поÑлуг\">ESSID</abbr>" msgid "Host" -msgstr "" +msgstr "Вузол" msgid "Host entries" msgstr "ЗапиÑи вузлів" @@ -1427,22 +1472,22 @@ msgid "Host-<abbr title=\"Internet Protocol Address\">IP</abbr> or Network" msgstr "<abbr title=\"Internet Protocol Address\">IP</abbr> вузла або мережа" msgid "Hostname" -msgstr "Ðазва (ім'Ñ) вузла" +msgstr "Ðазва (ім’Ñ) вузла" msgid "Hostname to send when requesting DHCP" -msgstr "Ім'Ñ Ð²ÑƒÐ·Ð»Ð° Ð´Ð»Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸ запиті DHCP" +msgstr "Ð†Ð¼â€™Ñ Ð²ÑƒÐ·Ð»Ð° Ð´Ð»Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸ запиті DHCP" msgid "Hostnames" msgstr "Імена вузлів" msgid "Hybrid" -msgstr "" +msgstr "Гібрид" msgid "IKE DH Group" -msgstr "" +msgstr "Група IKE DH" msgid "IP Addresses" -msgstr "" +msgstr "IP-адреÑи" msgid "IP address" msgstr "IP-адреÑа" @@ -1454,7 +1499,7 @@ msgid "IPv4 Firewall" msgstr "Брандмауер IPv4" msgid "IPv4 Upstream" -msgstr "" +msgstr "ВиÑхідне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ IPv4" msgid "IPv4 address" msgstr "ÐдреÑа IPv4" @@ -1463,7 +1508,7 @@ msgid "IPv4 and IPv6" msgstr "IPv4 та IPv6" msgid "IPv4 assignment length" -msgstr "" +msgstr "Довжина приÑÐ²Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ IPv4" msgid "IPv4 broadcast" msgstr "Широкомовний IPv4" @@ -1478,7 +1523,7 @@ msgid "IPv4 only" msgstr "Тільки IPv4" msgid "IPv4 prefix" -msgstr "" +msgstr "ÐŸÑ€ÐµÑ„Ñ–ÐºÑ IPv4" msgid "IPv4 prefix length" msgstr "Довжина префікÑа IPv4" @@ -1487,7 +1532,7 @@ msgid "IPv4-Address" msgstr "IPv4-адреÑа" msgid "IPv4-in-IPv4 (RFC2003)" -msgstr "" +msgstr "IPv4 у IPv4 (RFC2003)" msgid "IPv6" msgstr "IPv6" @@ -1496,25 +1541,27 @@ msgid "IPv6 Firewall" msgstr "Брандмауер IPv6" msgid "IPv6 Neighbours" -msgstr "" +msgstr "СуÑіди IPv6" msgid "IPv6 Settings" -msgstr "" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ IPv6" msgid "IPv6 ULA-Prefix" msgstr "" +"<abbr title=\"Unique Local Address — унікальна локальна адреÑа\">ULA</abbr>-" +"Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ IPv6" msgid "IPv6 Upstream" -msgstr "" +msgstr "ВиÑхідне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ IPv6" msgid "IPv6 address" msgstr "ÐдреÑа IPv6" msgid "IPv6 assignment hint" -msgstr "" +msgstr "ÐатÑк Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ IPv6" msgid "IPv6 assignment length" -msgstr "" +msgstr "Довжина Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ IPv6" msgid "IPv6 gateway" msgstr "Шлюз IPv6" @@ -1529,10 +1576,10 @@ msgid "IPv6 prefix length" msgstr "Довжина префікÑа IPv6" msgid "IPv6 routed prefix" -msgstr "" +msgstr "ÐадіÑланий Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ IPv6" msgid "IPv6 suffix" -msgstr "" +msgstr "Ð¡ÑƒÑ„Ñ–ÐºÑ IPv6" msgid "IPv6-Address" msgstr "IPv6-адреÑа" @@ -1550,13 +1597,13 @@ msgid "IPv6-over-IPv4 (6to4)" msgstr "IPv6 через IPv4 (6to4)" msgid "Identity" -msgstr "ІдентичніÑÑ‚ÑŒ" +msgstr "ПоÑвідченнÑ" msgid "If checked, 1DES is enabled" -msgstr "" +msgstr "Якщо позначено, 1DES увімкнено" msgid "If checked, encryption is disabled" -msgstr "" +msgstr "Якщо позначено, ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾" msgid "" "If specified, mount the device by its UUID instead of a fixed device node" @@ -1568,11 +1615,11 @@ msgid "" "If specified, mount the device by the partition label instead of a fixed " "device node" msgstr "" -"Якщо обрано, монтувати приÑтрій за назвою його розділу заміÑÑ‚ÑŒ фікÑованого " +"Якщо обрано, монтувати приÑтрій за міткою його розділу заміÑÑ‚ÑŒ фікÑованого " "вузла приÑтрою" msgid "If unchecked, no default route is configured" -msgstr "Якщо не позначено, типовий маршрут не наÑтроєно" +msgstr "Якщо не позначено, типовий маршрут не налаштовано" msgid "If unchecked, the advertised DNS server addresses are ignored" msgstr "Якщо не позначено, оголошувані адреÑи DNS-Ñерверів ігноруютьÑÑ" @@ -1584,15 +1631,15 @@ msgid "" "slow process as the swap-device cannot be accessed with the high datarates " "of the <abbr title=\"Random Access Memory\">RAM</abbr>." msgstr "" -"Якщо фізичної пам'ÑÑ‚Ñ– недоÑтатньо, невикориÑтовувані дані можуть тимчаÑово " +"Якщо фізичної пам’ÑÑ‚Ñ– недоÑтатньо, невикориÑтовувані дані можуть тимчаÑово " "витіÑнÑтиÑÑ Ð½Ð° Ñвоп-приÑтрій, у результаті чого збільшуєтьÑÑ ÐºÑ–Ð»ÑŒÐºÑ–ÑÑ‚ÑŒ " -"кориÑної оперативної пам'ÑÑ‚Ñ– (<abbr title=\"Random Access Memory\">RAM</" +"кориÑної оперативної пам’ÑÑ‚Ñ– (<abbr title=\"Random Access Memory\">RAM</" "abbr>). Майте на увазі, що Ñвопінг даних Ñ” дуже повільним процеÑом, оÑкільки " "Ñвоп-приÑтрої не можуть бути доÑтупні з такою виÑокою швидкіÑÑ‚ÑŽ, Ñк <abbr " "title=\"Random Access Memory\">RAM</abbr>." msgid "Ignore <code>/etc/hosts</code>" -msgstr "" +msgstr "Ігнорувати<code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Ігнорувати интерфейÑ" @@ -1610,6 +1657,9 @@ msgid "" "In order to prevent unauthorized access to the system, your request has been " "blocked. Click \"Continue »\" below to return to the previous page." msgstr "" +"Щоб запобігти неÑанкціонованому доÑтупу до ÑиÑтеми, ваш запит було " +"заблоковано. ÐатиÑніть \"Продовжити »\" нижче, щоб повернутиÑÑ Ð´Ð¾ " +"попередньої Ñторінки." msgid "Inactivity timeout" msgstr "Тайм-аут бездіÑльноÑÑ‚Ñ–" @@ -1630,7 +1680,7 @@ msgid "Install" msgstr "ІнÑталювати" msgid "Install iputils-traceroute6 for IPv6 traceroute" -msgstr "" +msgstr "ІнÑталюйте iputils-traceroute6 Ð´Ð»Ñ Ñ‚Ñ€Ð°ÑÑƒÐ²Ð°Ð½Ð½Ñ IPv6" msgid "Install package %q" msgstr "ІнÑталÑÑ†Ñ–Ñ Ð¿Ð°ÐºÐµÑ‚Ð° %q" @@ -1639,13 +1689,13 @@ msgid "Install protocol extensions..." msgstr "ІнÑталÑÑ†Ñ–Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½ÑŒ протоколу..." msgid "Installed packages" -msgstr "ІнÑтальовані пакети" +msgstr "ІнÑтальовано пакети" msgid "Interface" msgstr "ІнтерфейÑ" msgid "Interface %q device auto-migrated from %q to %q." -msgstr "" +msgstr "ПриÑтрій інтерфейÑу %q автоматичного мігрував із %q на %q." msgid "Interface Configuration" msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу" @@ -1660,10 +1710,10 @@ msgid "Interface is shutting down..." msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ” роботу..." msgid "Interface name" -msgstr "" +msgstr "Ð†Ð¼â€™Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу" msgid "Interface not present or not connected yet." -msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð²Ñ–Ð´Ñутній або ще не підключений." +msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð²Ñ–Ð´Ñутній або його ще не підключено." msgid "Interface reconnected" msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿ÐµÑ€ÐµÐ¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾" @@ -1675,7 +1725,7 @@ msgid "Interfaces" msgstr "ІнтерфейÑи" msgid "Internal" -msgstr "" +msgstr "Внутрішній" msgid "Internal Server Error" msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñервера" @@ -1694,14 +1744,13 @@ msgid "Invalid username and/or password! Please try again." msgstr "ÐеприпуÑтиме Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача та/або пароль! Спробуйте ще раз." msgid "Isolate Clients" -msgstr "" +msgstr "Ізолювати клієнтів" -#, fuzzy msgid "" "It appears that you are trying to flash an image that does not fit into the " "flash memory, please verify the image file!" msgstr "" -"Схоже, що ви намагаєтеÑÑ Ð·Ð°Ð»Ð¸Ñ‚Ð¸ образ, Ñкий не вміщаєтьÑÑ Ñƒ флеш-пам'ÑÑ‚ÑŒ! " +"Схоже, що ви намагаєтеÑÑ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ‚Ð¸ образ, Ñкий не вміщаєтьÑÑ Ð´Ð¾ флеш-пам’ÑÑ‚Ñ–! " "Перевірте файл образу!" msgid "JavaScript required!" @@ -1714,10 +1763,10 @@ msgid "Join Network: Wireless Scan" msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі: Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð´Ñ€Ð¾Ñ‚Ð¾Ð²Ð¸Ñ… мереж" msgid "Joining Network: %q" -msgstr "" +msgstr "ÐŸÑ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ мережі: %q" msgid "Keep settings" -msgstr "Зберегти наÑтройки" +msgstr "Зберегти налаштуваннÑ" msgid "Kernel Log" msgstr "Журнал Ñдра" @@ -1759,13 +1808,13 @@ msgid "Language and Style" msgstr "Мова та Ñтиль" msgid "Latency" -msgstr "" +msgstr "Затримка" msgid "Leaf" -msgstr "" +msgstr "ЛиÑÑ‚" msgid "Lease time" -msgstr "" +msgstr "Ð§Ð°Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸" msgid "Lease validity time" msgstr "Ð§Ð°Ñ Ñ‡Ð¸Ð½Ð½Ð¾ÑÑ‚Ñ– оренди" @@ -1790,31 +1839,33 @@ msgstr "Межа" msgid "Limit DNS service to subnets interfaces on which we are serving DNS." msgstr "" +"Обмежувати Ñлужбу DNS інтерфейÑами підмереж, на Ñких ми обÑлуговуємо DNS." msgid "Limit listening to these interfaces, and loopback." msgstr "" +"ОбмежитиÑÑ Ð¿Ñ€Ð¾ÑлуховуваннÑм цих інтерфейÑів Ñ– повернутиÑÑ Ð´Ð¾ початку циклу." msgid "Line Attenuation (LATN)" -msgstr "" +msgstr "Ð—Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð½Ñ Ð»Ñ–Ð½Ñ–Ñ— " msgid "Line Mode" -msgstr "" +msgstr "Режим лінії" msgid "Line State" -msgstr "" +msgstr "Стан лінії" msgid "Line Uptime" -msgstr "" +msgstr "Ð§Ð°Ñ Ð±ÐµÐ·Ð¿ÐµÑ€ÐµÑ€Ð²Ð½Ð¾Ñ— роботи лінії" msgid "Link On" -msgstr "Зв'Ñзок вÑтановлено" +msgstr "Зв’Ñзок вÑтановлено" msgid "" "List of <abbr title=\"Domain Name System\">DNS</abbr> servers to forward " "requests to" msgstr "" -"СпиÑок <abbr title=\"Domain Name System\">DNS</abbr>-Ñерверів, до Ñких " -"переÑилати запити" +"СпиÑок <abbr title=\"Domain Name System\">DNS</abbr>-Ñерверів Ð´Ð»Ñ " +"переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð²" msgid "" "List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-" @@ -1823,6 +1874,13 @@ msgid "" "from the R0KH that the STA used during the Initial Mobility Domain " "Association." msgstr "" +"СпиÑок влаÑників ключів R0 у тому ж домені мобільноÑÑ‚Ñ–. <br />Формат: MAC-" +"адреÑа,NAS-ідентифікатор,128-бітний ключ у виглÑді шіÑтнадцÑткового Ñ€Ñдка. " +"<br />Цей ÑпиÑок викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ <abbr title=" +"\"ідентифікатор влаÑника ключа R0\">R0KH-ID</abbr> (NAS-ідентифікатор) на " +"MAC-адреÑи Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ запиті ключа PMK-R1 від <abbr title=\"влаÑник " +"ключа R0\">R0KH</abbr>, Ñк Ñтанції, що була викориÑтана під Ñ‡Ð°Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— " +"аÑоціації домену мобільноÑÑ‚Ñ–." msgid "" "List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID " @@ -1831,21 +1889,30 @@ msgid "" "R0KH. This is also the list of authorized R1KHs in the MD that can request " "PMK-R1 keys." msgstr "" +"СпиÑок влаÑників ключів R1 у тому ж домені мобільноÑÑ‚Ñ–. <br />Формат: MAC-" +"адреÑа,<abbr title=\"ідентифікатор влаÑника ключа R1\">R1KH-ID</abbr> у " +"формі 6 октетів з двокрапками,128-бітний ключ у виглÑді шіÑтнадцÑткового " +"Ñ€Ñдка. <br />Цей ÑпиÑок викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ <abbr title=" +"\"ідентифікатор влаÑника ключа R1\">R1KH-ID</abbr> на MAC-адреÑи Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " +"при передаванні ключа PMK-R1 від <abbr title=\"влаÑник ключа R0\">R0KH</" +"abbr>. Це також ÑпиÑок авторизованих <abbr title=\"влаÑник ключа R1\">R1KH</" +"abbr> у формі <abbr title=\"Message Digest — дайджеÑÑ‚ повідомленнÑ\">MD</" +"abbr>, Ñкі можуть запитувати ключі PMK-R1." msgid "List of SSH key files for auth" -msgstr "" +msgstr "СпиÑок файлів SSH-ключів Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ñ–Ñ—" msgid "List of domains to allow RFC1918 responses for" -msgstr "СпиÑок доменів, Ð´Ð»Ñ Ñких дозволені RFC1918-відповіді" +msgstr "СпиÑок доменів, Ð´Ð»Ñ Ñких дозволено RFC1918-відповіді" msgid "List of hosts that supply bogus NX domain results" msgstr "СпиÑок доменів, Ñкі підтримують результати підробки NX-доменів" msgid "Listen Interfaces" -msgstr "" +msgstr "ІнтерфейÑи проÑлуховуваннÑ" msgid "Listen Port" -msgstr "" +msgstr "Порти проÑлуховуваннÑ" msgid "Listen only on the given interface or, if unspecified, on all" msgstr "" @@ -1865,7 +1932,7 @@ msgid "Loading" msgstr "ЗавантаженнÑ" msgid "Local IP address to assign" -msgstr "" +msgstr "Локальна IP-адреÑа Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ" msgid "Local IPv4 address" msgstr "Локальна адреÑа IPv4" @@ -1874,7 +1941,7 @@ msgid "Local IPv6 address" msgstr "Локальна адреÑа IPv6" msgid "Local Service Only" -msgstr "" +msgstr "Тільки локальна Ñлужба" msgid "Local Startup" msgstr "Локальний запуÑк" @@ -1885,13 +1952,13 @@ msgstr "МіÑцевий чаÑ" msgid "Local domain" msgstr "Локальний домен" -#, fuzzy msgid "" "Local domain specification. Names matching this domain are never forwarded " "and are resolved from DHCP or hosts files only" msgstr "" -"Ð¡Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… доменів. Імена, зіÑтавлені цьому домену, ніколи не " -"ÑпрÑмовуютьÑÑ Ñ– виділÑÑŽÑ‚ÑŒÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ через DHCP або файли hosts" +"Ð¡Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ домену. Імена, Ñкі зіÑтавлено цьому домену, ніколи " +"не переÑилаютьÑÑ Ñ– вирізнÑÑŽÑ‚ÑŒÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ з файлу DHCP (/etc/config/dhcp) або " +"файлу hosts (/etc/hosts)" msgid "Local domain suffix appended to DHCP names and hosts file entries" msgstr "" @@ -1905,14 +1972,14 @@ msgid "" "Localise hostname depending on the requesting subnet if multiple IPs are " "available" msgstr "" -"Локалізувати ім'Ñ Ñ…Ð¾Ñта залежно від запитуючої підмережі, Ñкщо доÑтупні " +"Локалізувати Ñ–Ð¼â€™Ñ Ñ…Ð¾Ñта залежно від запитуючої підмережі, Ñкщо доÑтупно " "кілька IP-адреÑ" msgid "Localise queries" msgstr "Локалізувати запити" msgid "Locked to channel %s used by: %s" -msgstr "" +msgstr "Заблоковано до каналу %s, Ñкий викориÑтовує: %s" msgid "Log output level" msgstr "Рівень Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ– до журналу" @@ -1933,7 +2000,7 @@ msgid "Loss of Signal Seconds (LOSS)" msgstr "" msgid "Lowest leased address as offset from the network address." -msgstr "Ðайнижча орендована адреÑа" +msgstr "Ðайнижча орендована адреÑа." msgid "MAC-Address" msgstr "MAC-адреÑа" @@ -1966,12 +2033,14 @@ msgid "" "Make sure to clone the root filesystem using something like the commands " "below:" msgstr "" +"ПереконайтеÑÑ, що ви клонуєте кореневу файлову ÑиÑтему, викориÑтовуючи такі " +"команди:" msgid "Manual" -msgstr "" +msgstr "Вручну" msgid "Max. Attainable Data Rate (ATTNDR)" -msgstr "" +msgstr "МакÑ. доÑÑжна швидкіÑÑ‚ÑŒ передачі даних (ATTNDR)" msgid "Maximum allowed number of active DHCP leases" msgstr "МакÑимально допуÑтима кількіÑÑ‚ÑŒ активних оренд DHCP" @@ -1989,6 +2058,8 @@ msgid "" "Maximum length of the name is 15 characters including the automatic protocol/" "bridge prefix (br-, 6in4-, pppoe- etc.)" msgstr "" +"МакÑимальна довжина імені Ñтановить 15 Ñимволів, включаючи Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ " +"автоматичного протоколу/моÑту (br-, 6in4-, pppoe та ін.)" msgid "Maximum number of leased addresses." msgstr "МакÑимальна кількіÑÑ‚ÑŒ орендованих адреÑ." @@ -1997,34 +2068,34 @@ msgid "Mbit/s" msgstr "Мбіт/Ñ" msgid "Memory" -msgstr "Пам'ÑÑ‚ÑŒ" +msgstr "Пам’ÑÑ‚ÑŒ" msgid "Memory usage (%)" -msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼'ÑÑ‚Ñ–, %" +msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼â€™ÑÑ‚Ñ–, %" msgid "Mesh Id" -msgstr "" +msgstr "Mesh Id" msgid "Metric" msgstr "Метрика" msgid "Mirror monitor port" -msgstr "" +msgstr "Дзеркало порту диÑпетчера" msgid "Mirror source port" -msgstr "" +msgstr "Дзеркало вихідного порту" msgid "Missing protocol extension for proto %q" msgstr "ВідÑутні Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ñƒ %q" msgid "Mobility Domain" -msgstr "" +msgstr "Домен мобільноÑÑ‚Ñ–" msgid "Mode" msgstr "Режим" msgid "Model" -msgstr "" +msgstr "Модель" msgid "Modem device" msgstr "Модем" @@ -2033,7 +2104,7 @@ msgid "Modem init timeout" msgstr "Тайм-аут ініціалізації модему" msgid "Monitor" -msgstr "Монітор" +msgstr "ДиÑпетчер" msgid "Mount Entry" msgstr "Вхід монтуваннÑ" @@ -2045,20 +2116,20 @@ msgid "Mount Points" msgstr "Точки монтуваннÑ" msgid "Mount Points - Mount Entry" -msgstr "Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ - ЗапиÑи монтуваннÑ" +msgstr "Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ â€“ ЗапиÑи монтуваннÑ" msgid "Mount Points - Swap Entry" -msgstr "Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ - Вхід довантаженнÑ" +msgstr "Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ â€“ Вхід Ñвопу" msgid "" "Mount Points define at which point a memory device will be attached to the " "filesystem" msgstr "" -"Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ‚ÑŒ, до Ñкої точки приÑтрою пам'ÑÑ‚Ñ– буде прикріплена " -"файлова ÑиÑтема" +"Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ‚ÑŒ, до Ñкої точки приÑтрою пам’ÑÑ‚Ñ– буде прикріплено " +"файлову ÑиÑтему" msgid "Mount filesystems not specifically configured" -msgstr "" +msgstr "Монтувати не конкретно налаштовані файлові ÑиÑтеми" msgid "Mount options" msgstr "Опції монтуваннÑ" @@ -2067,10 +2138,10 @@ msgid "Mount point" msgstr "Точка монтуваннÑ" msgid "Mount swap not specifically configured" -msgstr "" +msgstr "Монтувати не конкретно налаштований Ñвоп" msgid "Mounted file systems" -msgstr "Змонтовані файлові ÑиÑтеми" +msgstr "Змонтовано файлові ÑиÑтеми" msgid "Move down" msgstr "Вниз" @@ -2085,31 +2156,31 @@ msgid "NAS ID" msgstr "Ідентифікатор NAS" msgid "NAT-T Mode" -msgstr "" +msgstr "Режим NAT-T" msgid "NAT64 Prefix" -msgstr "" +msgstr "ÐŸÑ€ÐµÑ„Ñ–ÐºÑ NAT64" msgid "NCM" -msgstr "" +msgstr "NCM" msgid "NDP-Proxy" -msgstr "" +msgstr "NDP-прокÑÑ–" msgid "NT Domain" -msgstr "" +msgstr "Домен NT" msgid "NTP server candidates" -msgstr "Кандидати Ð´Ð»Ñ Ñинхронізації NTP-Ñервера" +msgstr "Кандидати Ð´Ð»Ñ Ñинхронізації Ñервера NTP" msgid "Name" -msgstr "Ім'Ñ" +msgstr "Ім’Ñ" msgid "Name of the new interface" -msgstr "Ім'Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ інтерфейÑу" +msgstr "Ð†Ð¼â€™Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ інтерфейÑу" msgid "Name of the new network" -msgstr "Ðазва (ім'Ñ) нової мережі" +msgstr "Ðазва (ім’Ñ) нової мережі" msgid "Navigation" msgstr "ÐавігаціÑ" @@ -2133,13 +2204,13 @@ msgid "Next »" msgstr "ÐаÑтупний »" msgid "No DHCP Server configured for this interface" -msgstr "Ðемає DHCP-Ñервера, наÑтроєного Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу" +msgstr "Ðемає DHCP-Ñервера, налаштованого Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу" msgid "No NAT-T" -msgstr "" +msgstr "Ðемає NAT-T" msgid "No chains in this table" -msgstr "У цій таблиці нема ланцюжків" +msgstr "У цій таблиці немає ланцюжків" msgid "No files found" msgstr "Файли не знайдено" @@ -2151,10 +2222,10 @@ msgid "No negative cache" msgstr "ÐÑ–Ñких негативних кешувань" msgid "No network configured on this device" -msgstr "Ðа цьому приÑтрої нема наÑтроєної мережі" +msgstr "Ðа цьому приÑтрої немає налаштованої мережі" msgid "No network name specified" -msgstr "Ім'Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ– не визначене" +msgstr "Ð†Ð¼â€™Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ– не визначено" msgid "No package lists available" msgstr "Ðемає доÑтупних ÑпиÑків пакетів" @@ -2166,22 +2237,22 @@ msgid "No rules in this chain" msgstr "У цьму ланцюжку нема правил" msgid "No zone assigned" -msgstr "Зона не призначена" +msgstr "Зону не призначено" msgid "Noise" msgstr "Шум" msgid "Noise Margin (SNR)" -msgstr "" +msgstr "Ð¡Ð¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñигнал/шум" msgid "Noise:" msgstr "Шум:" msgid "Non Pre-emtive CRC errors (CRC_P)" -msgstr "" +msgstr "Ðе запобіжні помилки CRC (CRC_P)" msgid "Non-wildcard" -msgstr "" +msgstr "Без шаблону заміни" msgid "None" msgstr "Жоден" @@ -2193,16 +2264,16 @@ msgid "Not Found" msgstr "Ðе знайдено" msgid "Not associated" -msgstr "Ðе пов'Ñзаний" +msgstr "Ðе пов’Ñзаний" msgid "Not connected" msgstr "Ðе підключено" msgid "Note: Configuration files will be erased." -msgstr "Примітка: конфігураційні файли будуть видалені." +msgstr "Примітка: конфігураційні файли буде видалено." msgid "Note: interface name length" -msgstr "" +msgstr "Примітка: довжина імені інтерфейÑу" msgid "Notice" msgstr "ПопередженнÑ" @@ -2211,7 +2282,7 @@ msgid "Nslookup" msgstr "DNS-запит" msgid "Number of cached DNS entries (max is 10000, 0 is no caching)" -msgstr "" +msgstr "КількіÑÑ‚ÑŒ кешованих запиÑів DNS (макÑ. - 10000, 0 - без кешуваннÑ)" msgid "OK" msgstr "OK" @@ -2220,13 +2291,13 @@ msgid "OPKG-Configuration" msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ OPKG" msgid "Obfuscated Group Password" -msgstr "" +msgstr "ОбфуÑований груповий пароль" msgid "Obfuscated Password" -msgstr "" +msgstr "ОбфуÑований пароль" msgid "Obtain IPv6-Address" -msgstr "" +msgstr "Отримати IPv6-адреÑу" msgid "Off-State Delay" msgstr "Затримка Off-State" @@ -2239,27 +2310,27 @@ msgid "" "<samp>INTERFACE.VLANNR</samp> (<abbr title=\"for example\">e.g.</abbr>: " "<samp>eth0.1</samp>)." msgstr "" -"Ðа цій Ñторінці ви можете наÑтроїти мережеві інтерфейÑи. Ви можете " -"об'єднатиати кілька інтерфейÑів моÑтом, відзначивши поле \"Об'єднати " -"інтерфейÑи в міÑÑ‚\" та ввівши імена кількох мережевих інтерфейÑів, розділені " -"пробілами. Також ви можете викориÑтовувати <abbr title=\"Virtual Local Area " -"Network — віртуальна локальна комп'ютерна мережа\">VLAN</abbr>-Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " +"Ðа цій Ñторінці ви можете налаштувати мережеві інтерфейÑи. Ви можете " +"об’єднати кілька інтерфейÑів моÑтом, відзначивши поле \"Об’єднати інтерфейÑи " +"в міÑÑ‚\" та ввівши імена кількох мережевих інтерфейÑів, розділені пробілами. " +"Також ви можете викориÑтовувати <abbr title=\"Virtual Local Area Network — " +"віртуальна локальна комп’ютерна мережа\">VLAN</abbr>-Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ " "<samp>ІÐТЕРФЕЙС.ÐОМЕР_VLAN</samp> (наприклад, <samp>eth0.1</samp>)." msgid "On-State Delay" msgstr "Затримка On-State" msgid "One of hostname or mac address must be specified!" -msgstr "Має бути вказане одне з двох - ім'Ñ Ð²ÑƒÐ·Ð»Ð° або ÐœÐС-адреÑа!" +msgstr "Має бути зазначено одне з двох – Ñ–Ð¼â€™Ñ Ð²ÑƒÐ·Ð»Ð° або ÐœÐС-адреÑа!" msgid "One or more fields contain invalid values!" msgstr "Одне або декілька полів міÑÑ‚ÑÑ‚ÑŒ неприпуÑтимі значеннÑ!" msgid "One or more invalid/required values on tab" -msgstr "" +msgstr "Одне або декілька неприпуÑтимих/обов’Ñзкових значень на вкладці" msgid "One or more required fields have no value!" -msgstr "Одне або декілька обов'Ñзкових полів не мають значень!" +msgstr "Одне або декілька обов’Ñзкових полів не мають значень!" msgid "Open list..." msgstr "Відкрити ÑпиÑок..." @@ -2268,7 +2339,7 @@ msgid "OpenConnect (CISCO AnyConnect)" msgstr "" msgid "Operating frequency" -msgstr "" +msgstr "Робоча чаÑтота" msgid "Option changed" msgstr "ÐžÐ¿Ñ†Ñ–Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð°" @@ -2277,12 +2348,14 @@ msgid "Option removed" msgstr "ÐžÐ¿Ñ†Ñ–Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð°" msgid "Optional" -msgstr "" +msgstr "Ðеобов’Ñзково" msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." msgstr "" +"Ðеобов’Ñзково. 32-бітна мітка Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… зашифрованих пакетів. Введіть " +"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð² шіÑтнадцÑтковому форматі, починаючи з <code>0x</code>." msgid "" "Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or " @@ -2290,33 +2363,46 @@ msgid "" "server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') " "for the interface." msgstr "" +"Ðеобов’Ñзково. ПрипуÑтимі значеннÑ: 'eui64', 'random' чи фікÑоване значеннÑ, " +"наприклад '::1' або '::1:2'. Якщо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ IPv6 (наприклад, 'a:b:c:d::') " +"отримано від Ñервера делегуваннÑ, Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ IPv6-адреÑи інтерфейÑу " +"(наприклад, 'a:b:c:d::1') викориÑтовуйте ÑÑƒÑ„Ñ–ÐºÑ ('::1')." msgid "" "Optional. Base64-encoded preshared key. Adds in an additional layer of " "symmetric-key cryptography for post-quantum resistance." msgstr "" +"Ðеобов’Ñзково. Заздалегідь уÑтановлений Base64-кодований Ñпільний ключ. " +"Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾ Ñ€Ñ–Ð²Ð½Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð· Ñиметричним ключем Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚-" +"квантової ÑтійкоÑÑ‚Ñ–." msgid "Optional. Create routes for Allowed IPs for this peer." -msgstr "" +msgstr "Ðеобов’Ñзково. Створити Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ вузла маршрути Ð´Ð»Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¸Ñ… IP." msgid "" "Optional. Host of peer. Names are resolved prior to bringing up the " "interface." -msgstr "" +msgstr "Ðеобов’Ñзково. ХоÑÑ‚ вузла. Імена буде виділено до піднÑÑ‚Ñ‚Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу" msgid "Optional. Maximum Transmission Unit of tunnel interface." msgstr "" +"Ðеобов’Ñзково. МакÑимальний блок передаваних даних тунельного інтерфейÑу." msgid "Optional. Port of peer." -msgstr "" +msgstr "Ðеобов’Ñзково. Порт вузла." msgid "" "Optional. Seconds between keep alive messages. Default is 0 (disabled). " "Recommended value if this device is behind a NAT is 25." msgstr "" +"Ðеобов’Ñзково. Ð§Ð°Ñ (Ñек.) між перевірками активноÑÑ‚Ñ– повідомлень. Типове " +"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ - 0 (вимкнено). Рекомендоване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ приÑтрою за NAT - " +"25." msgid "Optional. UDP port used for outgoing and incoming packets." msgstr "" +"Ðеобов’Ñзково. UDP-порт, Ñкий викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… та вхідних " +"пакетів." msgid "Options" msgstr "Опції" @@ -2331,7 +2417,7 @@ msgid "Outbound:" msgstr "Вихідний:" msgid "Output Interface" -msgstr "" +msgstr "Вихідний інтерфейÑ" msgid "Override MAC address" msgstr "Перевизначити MAC-адреÑу" @@ -2340,13 +2426,13 @@ msgid "Override MTU" msgstr "Перевизначити MTU" msgid "Override TOS" -msgstr "" +msgstr "Перевизначити TOS" msgid "Override TTL" -msgstr "" +msgstr "Перевизначити TTL" msgid "Override default interface name" -msgstr "" +msgstr "ÐŸÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð³Ð¾ імені інтерфейÑу" msgid "Override the gateway in DHCP responses" msgstr "ÐŸÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑˆÐ»ÑŽÐ·Ñƒ у відповідÑÑ… DHCP" @@ -2372,7 +2458,7 @@ msgid "PAP/CHAP password" msgstr "Пароль PAP/CHAP" msgid "PAP/CHAP username" -msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача PAP/CHAP" +msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача PAP/CHAP" msgid "PID" msgstr "<abbr title=\"Process Identifier — Ідентифікатор процеÑу\">PID</abbr>" @@ -2383,7 +2469,7 @@ msgstr "" "номер\">>PIN</abbr>" msgid "PMK R1 Push" -msgstr "" +msgstr "ÐŸÑ€Ð¾ÑˆÑ‚Ð¾Ð²Ñ…ÑƒÐ²Ð°Ð½Ñ PMK R1" msgid "PPP" msgstr "PPP" @@ -2398,7 +2484,7 @@ msgid "PPPoE" msgstr "PPPoE" msgid "PPPoSSH" -msgstr "" +msgstr "PPPoSSH" msgid "PPtP" msgstr "PPtP" @@ -2437,13 +2523,13 @@ msgid "Password of Private Key" msgstr "Пароль закритого ключа" msgid "Password of inner Private Key" -msgstr "" +msgstr "Пароль внутрішнього закритого ключа" msgid "Password successfully changed!" msgstr "Пароль уÑпішно змінено!" msgid "Password2" -msgstr "" +msgstr "Пароль2" msgid "Path to CA-Certificate" msgstr "ШлÑÑ… до центру Ñертифікції" @@ -2455,25 +2541,25 @@ msgid "Path to Private Key" msgstr "ШлÑÑ… до закритого ключа" msgid "Path to inner CA-Certificate" -msgstr "" +msgstr "ШлÑÑ… до внутрішнього CA-Ñертифікату" msgid "Path to inner Client-Certificate" -msgstr "" +msgstr "ШлÑÑ… до внутрішнього Ñертифікату клієнта" msgid "Path to inner Private Key" -msgstr "" +msgstr "ШлÑÑ… до внутрішнього закритого ключа" msgid "Peak:" msgstr "Пік:" msgid "Peer IP address to assign" -msgstr "" +msgstr "Запит IP-адреÑи призначеннÑ" msgid "Peers" -msgstr "" +msgstr "Піри" msgid "Perfect Forward Secrecy" -msgstr "" +msgstr "Perfect Forward Secrecy" msgid "Perform reboot" msgstr "Виконати перезавантаженнÑ" @@ -2482,7 +2568,7 @@ msgid "Perform reset" msgstr "Відновити" msgid "Persistent Keep Alive" -msgstr "" +msgstr "Завжди тримати ввімкненим" msgid "Phy Rate:" msgstr "Фізична швидкіÑÑ‚ÑŒ:" @@ -2497,7 +2583,7 @@ msgid "Pkts." msgstr "пакетів" msgid "Please enter your username and password." -msgstr "Введіть ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ñ– пароль" +msgstr "Введіть Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ñ– пароль." msgid "Policy" msgstr "Політика" @@ -2506,25 +2592,25 @@ msgid "Port" msgstr "Порт" msgid "Port status:" -msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ñ€Ñ‚Ñƒ:" +msgstr "Стан порту:" msgid "Power Management Mode" -msgstr "" +msgstr "Режим ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¶Ð¸Ð²Ð»ÐµÐ½Ð½Ñм" msgid "Pre-emtive CRC errors (CRCP_P)" -msgstr "" +msgstr "Попереджувати помилки CRC (CRCP_P)" msgid "Prefer LTE" -msgstr "" +msgstr "Переважно LTE" msgid "Prefer UMTS" -msgstr "" +msgstr "Переважно UMTS" msgid "Prefix Delegated" -msgstr "" +msgstr "Делеговано префікÑ" msgid "Preshared Key" -msgstr "" +msgstr "Заздалегідь уÑтановлений Ñпільний ключ" msgid "" "Presume peer to be dead after given amount of LCP echo failures, use 0 to " @@ -2534,16 +2620,16 @@ msgstr "" "пакета LCP, викориÑтовуйте 0, щоб ігнорувати невдачі" msgid "Prevent listening on these interfaces." -msgstr "" +msgstr "Перешкоджати проÑлуховуванню цих інтерфейÑів." msgid "Prevents client-to-client communication" -msgstr "Запобігає зв'Ñзкам клієнт-клієнт" +msgstr "Перешкоджати Ñпілкуванню клієнт-клієнт" msgid "Prism2/2.5/3 802.11b Wireless Controller" msgstr "Бездротовий 802.11b контролер Prism2/2.5/3" msgid "Private Key" -msgstr "" +msgstr "Приватний ключ" msgid "Proceed" msgstr "Продовжити" @@ -2552,7 +2638,7 @@ msgid "Processes" msgstr "ПроцеÑи" msgid "Profile" -msgstr "" +msgstr "Профіль" msgid "Prot." msgstr "Прот." @@ -2570,34 +2656,34 @@ msgid "Protocol support is not installed" msgstr "Підтримка протоколу не інÑтальована" msgid "Provide NTP server" -msgstr "Забезпечувати NTP-Ñервер" +msgstr "Забезпечувати Ñервер NTP" msgid "Provide new network" -msgstr "ПоÑтачити нову мережу" +msgstr "Укажіть нову мережу" msgid "Pseudo Ad-Hoc (ahdemo)" msgstr "ПÑевдо Ad-Hoc (ahdemo)" msgid "Public Key" -msgstr "" +msgstr "Відкритий ключ" msgid "Public prefix routed to this device for distribution to clients." -msgstr "" +msgstr "Публічний Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð½Ð°Ð´Ñ–Ñланий на цей приÑтрій Ð´Ð»Ñ Ð¿Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð°Ð¼." msgid "QMI Cellular" -msgstr "" +msgstr "Стільниковий QMI" msgid "Quality" msgstr "ЯкіÑÑ‚ÑŒ" msgid "R0 Key Lifetime" -msgstr "" +msgstr "ТриваліÑÑ‚ÑŒ Ð¶Ð¸Ñ‚Ñ‚Ñ ÐºÐ»ÑŽÑ‡Ð° R0" msgid "R1 Key Holder" -msgstr "" +msgstr "ВлаÑник ключа R1" msgid "RFC3947 NAT-T mode" -msgstr "" +msgstr "Режим RFC3947 NAT-T" msgid "RTS/CTS Threshold" msgstr "Поріг RTS/CTS" @@ -2633,45 +2719,41 @@ msgid "" "Read <code>/etc/ethers</code> to configure the <abbr title=\"Dynamic Host " "Configuration Protocol\">DHCP</abbr>-Server" msgstr "" -"Читати <code>/etc/ethers</code> Ð´Ð»Ñ Ð½Ð°ÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ <abbr title=\"Dynamic Host " +"Читати <code>/etc/ethers</code> Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ <abbr title=\"Dynamic Host " "Configuration Protocol — Протокол динамічної конфігурації вузла\">DHCP</" "abbr>-Ñервера" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"ДійÑно видалити цей інтерфейÑ? СкаÑувати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾!\n" -"Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо ви підключені через цей " -"інтерфейÑ." +"ДійÑно видалити цей інтерфейÑ? СкаÑувати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾! Ви можете " +"втратити доÑтуп до цього приÑтрою, Ñкщо Ð²Ð°Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ через цей інтерфейÑ." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " "might lose access to this device if you are connected via this network." msgstr "" -"ДійÑно видалити цю бездротову мережу? СкаÑувати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾!\n" -"Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо ви підключені через цю " +"ДійÑно видалити цю бездротову мережу? СкаÑувати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾! Ви " +"можете втратити доÑтуп до цього приÑтрою, Ñкщо Ð²Ð°Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ через цю " "мережу." msgid "Really reset all changes?" msgstr "ДійÑно Ñкинути вÑÑ– зміни?" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"ДійÑно вимкнути мережу?\n" -"Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо ви підключені через цю " -"мережу." +"ДійÑно вимкнути мережу? Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо " +"Ð²Ð°Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ через цю мережу." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " "you are connected via this interface." msgstr "" -"ДійÑно вимкнути Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ \"%s\"?\n" -"Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо ви підключені через цей " -"інтерфейÑ." +"ДійÑно вимкнути Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ \"%s\"? Ви можете втратити доÑтуп до цього " +"приÑтрою, Ñкщо Ð²Ð°Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ через цей інтерфейÑ." msgid "Really switch protocol?" msgstr "ДійÑно змінити протокол?" @@ -2692,10 +2774,10 @@ msgid "Realtime Wireless" msgstr "Бездротові мережі у реальному чаÑÑ–" msgid "Reassociation Deadline" -msgstr "" +msgstr "Кінцевий термін реаÑÑоціації" msgid "Rebind protection" -msgstr "ЗахиÑÑ‚ від переприв'Ñзки" +msgstr "ЗахиÑÑ‚ від переприв’Ñзки" msgid "Reboot" msgstr "ПерезавантаженнÑ" @@ -2707,13 +2789,13 @@ msgid "Reboots the operating system of your device" msgstr "Перезавантажити операційну ÑиÑтему вашого приÑтрою" msgid "Receive" -msgstr "Прийом" +msgstr "ПрийманнÑ" msgid "Receiver Antenna" msgstr "Ðнтена приймача" msgid "Recommended. IP addresses of the WireGuard interface." -msgstr "" +msgstr "Рекомендовано. IP-адреÑи інтерфейÑу WireGuard." msgid "Reconnect this interface" msgstr "Перепідключити цей інтерфейÑ" @@ -2740,7 +2822,7 @@ msgid "Remote IPv4 address" msgstr "Віддалена адреÑа IPv4" msgid "Remote IPv4 address or FQDN" -msgstr "" +msgstr "Віддалена адреÑа IPv4 або FQDN" msgid "Remove" msgstr "Видалити" @@ -2755,22 +2837,22 @@ msgid "Replace wireless configuration" msgstr "Замінити конфігурацію бездротової мережі" msgid "Request IPv6-address" -msgstr "" +msgstr "Запит IPv6-адреÑи" msgid "Request IPv6-prefix of length" -msgstr "" +msgstr "Запит довжини IPv6-префікÑу" msgid "Required" -msgstr "" +msgstr "Потрібно" msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" msgstr "Потрібно Ð´Ð»Ñ Ð´ÐµÑких провайдерів, наприклад, Charter із DOCSIS 3" msgid "Required. Base64-encoded private key for this interface." -msgstr "" +msgstr "Потрібно. Base64-закодований закритий ключ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу." msgid "Required. Base64-encoded public key of peer." -msgstr "" +msgstr "Потрібно. Base64-закодований відкритий ключ вузла." msgid "" "Required. IP addresses and prefixes that this peer is allowed to use inside " @@ -2782,6 +2864,8 @@ msgid "" "Requires the 'full' version of wpad/hostapd and support from the wifi driver " "<br />(as of Feb 2017: ath9k and ath10k, in LEDE also mwlwifi and mt76)" msgstr "" +"Потребує \"повної\" верÑÑ–Ñ— wpad/hostapd та підтримки драйвером WiFi <br /" +">(Ñтаном на лютий 2017 року: ath9k та ath10k, у LEDE також mwlwifi та mt76)" msgid "" "Requires upstream supports DNSSEC; verify unsigned domain responses really " @@ -2809,6 +2893,9 @@ msgstr "Перезавантажити" msgid "Restart Firewall" msgstr "Перезавантажити брандмауер" +msgid "Restore" +msgstr "Відновити" + msgid "Restore backup" msgstr "Відновити з резервної копії" @@ -2816,16 +2903,16 @@ msgid "Reveal/hide password" msgstr "Показати/приховати пароль" msgid "Revert" -msgstr "СкаÑувати зміни" +msgstr "СкаÑувати" msgid "Revert changes" -msgstr "" +msgstr "СкаÑувати зміни" msgid "Revert request failed with status <code>%h</code>" -msgstr "" +msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° запиту на ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ñ– ÑтатуÑом <code>%h</code>" msgid "Reverting configuration…" -msgstr "" +msgstr "Відкат конфігурації…" msgid "Root" msgstr "Корінь" @@ -2834,16 +2921,16 @@ msgid "Root directory for files served via TFTP" msgstr "Кореневий каталог Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² TFTP" msgid "Root preparation" -msgstr "" +msgstr "Підготовка Root" msgid "Route Allowed IPs" -msgstr "" +msgstr "ÐœÐ°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ñ–Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¸Ñ… IP-адреÑ" msgid "Route type" -msgstr "" +msgstr "Тип маршруту" msgid "Router Advertisement-Service" -msgstr "" +msgstr "Служба оголошень маршрутизатора" msgid "Router Password" msgstr "Пароль маршрутизатора" @@ -2874,13 +2961,13 @@ msgid "SSH Access" msgstr "SSH-доÑтуп" msgid "SSH server address" -msgstr "" +msgstr "ÐдреÑа Ñервера SSH" msgid "SSH server port" -msgstr "" +msgstr "Порт Ñервера SSH" msgid "SSH username" -msgstr "" +msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача SSH" msgid "SSH-Keys" msgstr "SSH-ключі" @@ -2907,7 +2994,7 @@ msgid "Section removed" msgstr "Ð¡ÐµÐºÑ†Ñ–Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð°" msgid "See \"mount\" manpage for details" -msgstr "Подробиці див. на Ñторінці керівництва \"mount\"" +msgstr "Подробиці дивиÑÑŒ на Ñторінці керівництва \"mount\"" msgid "" "Send LCP echo requests at the given interval in seconds, only effective in " @@ -2920,10 +3007,10 @@ msgid "Separate Clients" msgstr "РозділÑти клієнтів" msgid "Server Settings" -msgstr "ÐаÑтройки Ñервера" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñервера" msgid "Service Name" -msgstr "Ðазва (ім'Ñ) ÑервіÑу" +msgstr "Ðазва (ім’Ñ) ÑервіÑу" msgid "Service Type" msgstr "Тип ÑервіÑу" @@ -2935,13 +3022,14 @@ msgid "" "Set interface properties regardless of the link carrier (If set, carrier " "sense events do not invoke hotplug handlers)." msgstr "" +"ВлаÑтивоÑÑ‚Ñ– інтерфейÑу вÑтановлюютьÑÑ Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¾ від каналу зв’Ñзку (Ñкщо " +"позначено, обробник Ð°Ð²Ñ‚Ð¾Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ викликаєтьÑÑ Ð¿Ñ€Ð¸ змінах)." -#, fuzzy msgid "Set up Time Synchronization" -msgstr "ÐаÑтройки Ñинхронізації чаÑу" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинхронізації чаÑу" msgid "Setup DHCP Server" -msgstr "ÐаÑтройки DHCP-Ñервера" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ DHCP-Ñервера" msgid "Severely Errored Seconds (SES)" msgstr "" @@ -2962,7 +3050,7 @@ msgid "Signal" msgstr "Сигнал" msgid "Signal Attenuation (SATN)" -msgstr "" +msgstr "Ð—Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð½Ñ Ñигналу (SATN)" msgid "Signal:" msgstr "Сигнал:" @@ -2971,10 +3059,10 @@ msgid "Size" msgstr "Розмір" msgid "Size (.ipk)" -msgstr "" +msgstr "Розмір (.ipk)" msgid "Size of DNS query cache" -msgstr "" +msgstr "Розмір кешу запитів DNS" msgid "Skip" msgstr "ПропуÑтити" @@ -2992,13 +3080,13 @@ msgid "Software" msgstr "Програмне забезпеченнÑ" msgid "Software VLAN" -msgstr "" +msgstr "Програмово реалізований VLAN" msgid "Some fields are invalid, cannot save values!" msgstr "ДеÑкі Ð¿Ð¾Ð»Ñ Ñ” неприпуÑтимими, неможливо зберегти значеннÑ!" msgid "Sorry, the object you requested was not found." -msgstr "Ðа жаль, об'єкт, Ñкий ви проÑили, не знайдено." +msgstr "Ðа жаль, об’єкт, Ñкий ви проÑили, не знайдено." msgid "Sorry, the server encountered an unexpected error." msgstr "Ðа жаль, на Ñервері ÑталаÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° помилка." @@ -3008,12 +3096,9 @@ msgid "" "flashed manually. Please refer to the wiki for device specific install " "instructions." msgstr "" -"Ðа жаль, автоматичне Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑиÑтеми не підтримуєтьÑÑ. Ðовий образ " -"прошивки повинен бути залитий вручну. ЗвернітьÑÑ Ð´Ð¾ Wiki за інÑтрукцією з " -"інÑталÑції Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³Ð¾ приÑтрою." - -msgid "Sort" -msgstr "СортуваннÑ" +"Ðа жаль, Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑиÑтеми не підтримуєтьÑÑ. Ðовий образ мікропрограми Ñлід " +"прошити вручну. ЗвернітьÑÑ Ð´Ð¾ Wiki за інÑтрукцією з інÑталÑції Ð´Ð»Ñ " +"конкретного приÑтрою." msgid "Source" msgstr "Джерело" @@ -3061,7 +3146,7 @@ msgid "Start priority" msgstr "Стартовий пріоритет" msgid "Starting configuration apply…" -msgstr "" +msgstr "ЗаÑтоÑовуєтьÑÑ Ñтартова конфігураціÑ…" msgid "Startup" msgstr "ЗапуÑк" @@ -3079,7 +3164,7 @@ msgid "Static Routes" msgstr "Статичні маршрути" msgid "Static address" -msgstr "Статичні адреÑи" +msgstr "Статична адреÑа" msgid "" "Static leases are used to assign fixed IP addresses and symbolic hostnames " @@ -3092,7 +3177,7 @@ msgstr "" "орендою." msgid "Status" -msgstr "СтатуÑ" +msgstr "Стан" msgid "Stop" msgstr "Зупинити" @@ -3104,16 +3189,16 @@ msgid "Submit" msgstr "ÐадіÑлати" msgid "Suppress logging" -msgstr "" +msgstr "Блокувати журналюваннÑ" msgid "Suppress logging of the routine operation of these protocols" -msgstr "" +msgstr "Блокувати Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ звичайної роботи цих протоколів" msgid "Swap" -msgstr "" +msgstr "Своп" msgid "Swap Entry" -msgstr "Вхід довантаженнÑ" +msgstr "Вхід Ñвоп" msgid "Switch" msgstr "Комутатор" @@ -3127,12 +3212,14 @@ msgstr "Комутатор %q (%s)" msgid "" "Switch %q has an unknown topology - the VLAN settings might not be accurate." msgstr "" +"Комутатор %q має невідому топологію – параметри VLAN можуть бути " +"неправильними." msgid "Switch Port Mask" -msgstr "" +msgstr "МаÑка портів комутатора" msgid "Switch VLAN" -msgstr "" +msgstr "VLAN комутатора" msgid "Switch protocol" msgstr "Протокол комутатора" @@ -3159,7 +3246,7 @@ msgid "TCP:" msgstr "TCP:" msgid "TFTP Settings" -msgstr "ÐаÑтройки TFTP" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ TFTP" msgid "TFTP server root" msgstr "Корінь TFTP-Ñервера" @@ -3174,10 +3261,10 @@ msgid "Table" msgstr "ТаблицÑ" msgid "Target" -msgstr "Мета" +msgstr "Ціль" msgid "Target network" -msgstr "" +msgstr "Цільова мережа" msgid "Terminate" msgstr "Завершити" @@ -3190,11 +3277,11 @@ msgid "" "multi-SSID capable). Per network settings like encryption or operation mode " "are grouped in the <em>Interface Configuration</em>." msgstr "" -"Розділ <em>ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¸Ñтрою</em> охоплює фізичні параметри радіо-" -"апаратних заÑобів, такі, Ñк канал, потужніÑÑ‚ÑŒ передавача або вибір антени, " -"Ñкі Ñ” Ñпільними Ð´Ð»Ñ Ð²ÑÑ–Ñ… визначених бездротових мереж (Ñкщо радіо-апаратні " -"заÑоби здатні підтримувати кілька SSID). Параметри окремих мереж, такі, Ñк " -"ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ режим роботи, згруповані в розділі <em>ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ " +"Розділ <em>ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¸Ñтрою</em> охоплює фізичні параметри апаратних " +"радіо-заÑобів, такі, Ñк канал, потужніÑÑ‚ÑŒ передавача або вибір антени, Ñкі Ñ” " +"Ñпільними Ð´Ð»Ñ Ð²ÑÑ–Ñ… визначених бездротових мереж (Ñкщо апаратні радіо-заÑоби " +"здатні підтримувати кілька SSID). Параметри окремих мереж, такі, Ñк " +"ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ режим роботи, згруповано в розділі <em>ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ " "інтерфейÑу</em>." msgid "" @@ -3202,7 +3289,7 @@ msgid "" "component for working wireless configuration!" msgstr "" "Пакет <em>libiwinfo-lua</em> не інÑтальований. Щоб мати можливіÑÑ‚ÑŒ " -"наÑтроювати безпровідні мережі, Ñлід інÑталювати цей компонент!" +"налаштувати безпровідні мережі, Ñлід інÑталювати цей компонент!" msgid "" "The HE.net endpoint update configuration changed, you must now use the plain " @@ -3216,17 +3303,21 @@ msgstr "" msgid "" "The IPv6 prefix assigned to the provider, usually ends with <code>::</code>" msgstr "" -"Призначений провайдеру IPv6-префікÑ, зазвичай закінчуєтьÑÑ Ð½Ð° <code>::</code>" +"Призначений провайдером IPv6-префікÑ, зазвичай закінчуєтьÑÑ Ð½Ð° <code>::</" +"code>" msgid "" "The allowed characters are: <code>A-Z</code>, <code>a-z</code>, <code>0-9</" "code> and <code>_</code>" msgstr "" -"Дозволені Ñимволи: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> та " +"Дозволено Ñимволи: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> та " "<code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "Ðрхів резервної копії не Ñ” правильним файлом gzip." + msgid "The configuration file could not be loaded due to the following error:" -msgstr "" +msgstr "Файл конфігурації не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ через таку помилку:" msgid "" "The device could not be reached within %d seconds after applying the pending " @@ -3237,18 +3328,24 @@ msgid "" "or revert all pending changes to keep the currently working configuration " "state." msgstr "" +"ПриÑтрій недоÑÑжний протÑгом %d Ñекунд піÑÐ»Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ñ‡Ñ–ÐºÑƒÑŽÑ‡Ð¸Ñ… змін, що " +"призвело до Ð²Ñ–Ð´ÐºÐ¾Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ— з міркувань безпеки. Проте, Ñкщо ви " +"впевнені, що зміни конфігурації Ñ” правильними, заÑтоÑуйте неперевірену " +"конфігурацію. Крім того, ви можете відхилити це Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° " +"відредагувати зміни, перш ніж намагатиÑÑŒ заÑтоÑувати Ñ—Ñ… знову, або ж " +"ÑкаÑувати вÑÑ– очікуючі зміни, щоб зберегти поточну робочу конфігурацію." msgid "" "The device file of the memory or partition (<abbr title=\"for example\">e.g." "</abbr> <code>/dev/sda1</code>)" -msgstr "Файл приÑтрою пам'ÑÑ‚Ñ– або розділу (наприклад, <code>/dev/sda1</code>)" +msgstr "Файл приÑтрою пам’ÑÑ‚Ñ– або розділу (наприклад, <code>/dev/sda1</code>)" msgid "" "The filesystem that was used to format the memory (<abbr title=\"for example" "\">e.g.</abbr> <samp><abbr title=\"Third Extended Filesystem\">ext3</abbr></" "samp>)" msgstr "" -"Файлова ÑиÑтема, Ñка викориÑтовуватиметьÑÑ Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼'ÑÑ‚Ñ– " +"Файлова ÑиÑтема, Ñка викориÑтовуватиметьÑÑ Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼â€™ÑÑ‚Ñ– " "(наприклад, <samp><abbr title=\"Third Extended Filesystem\">ext3</abbr></" "samp>)" @@ -3257,26 +3354,26 @@ msgid "" "compare them with the original file to ensure data integrity.<br /> Click " "\"Proceed\" below to start the flash procedure." msgstr "" -"Образ завантажено. Ðижче наведено контрольну Ñуму Ñ– розмір файлу. ПорівнÑйте " -"Ñ—Ñ… з вихідним файлом Ð´Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ñ–ÑноÑÑ‚Ñ– даних.<br /> ÐатиÑніть " -"\"Продовжити\", щоб розпочати процедуру Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ¸." +"Образ завантажено. Ðижче наведено контрольну Ñуму та розмір файлу. " +"ПорівнÑйте Ñ—Ñ… з вихідним файлом, шоб переконатиÑÑ Ð² ціліÑноÑÑ‚Ñ– даних.<br /> " +"ÐатиÑніть \"Продовжити\", щоб розпочати процедуру прошиваннÑ." msgid "The following changes have been reverted" -msgstr "Ðижче наведені зміни були ÑкаÑовані" +msgstr "Ðаведені нижче зміни було ÑкаÑовано" msgid "The following rules are currently active on this system." -msgstr "У даний Ñ‡Ð°Ñ Ñƒ цій ÑиÑтемі активні такі правила." +msgstr "Ðаразі в цій ÑиÑтемі активні такі правила." msgid "The given network name is not unique" -msgstr "Задане мережеве ім'Ñ Ð½Ðµ Ñ” унікальним" +msgstr "Задане мережеве Ñ–Ð¼â€™Ñ Ð½Ðµ Ñ” унікальним" #, fuzzy msgid "" "The hardware is not multi-SSID capable and the existing configuration will " "be replaced if you proceed." msgstr "" -"ÐžÐ±Ð»Ð°Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ підтримує мульти-SSID Ñ–, Ñкщо ви продовжите, Ñ–Ñнуюча " -"ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð±ÑƒÐ´Ðµ замінена." +"ÐžÐ±Ð»Ð°Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ підтримує мульти-SSID Ñ–, Ñкщо ви продовжите, Ñ–Ñнуючу " +"конфігурацію буде замінено." msgid "" "The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " @@ -3297,12 +3394,12 @@ msgid "" "segments. Often there is by default one Uplink port for a connection to the " "next greater network like the internet and other ports for a local network." msgstr "" -"Мережеві порти вашого приÑтрою можуть бути об'єднані у декілька <abbr title=" -"\"Virtual Local Area Network — віртуальна локальна комп'ютерна мережа" -"\">VLAN</abbr>, у Ñких комп'ютери можуть напрÑму ÑпілкуватиÑÑ Ð¾Ð´Ð¸Ð½ з одним. " -"<abbr title=\"Virtual Local Area Network — віртуальна локальна комп'ютерна " +"Мережеві порти вашого приÑтрою може бути об’єднано у декілька <abbr title=" +"\"Virtual Local Area Network — віртуальна локальна комп’ютерна мережа" +"\">VLAN</abbr>, у Ñких комп’ютери можуть напрÑму ÑпілкуватиÑÑ Ð¾Ð´Ð¸Ð½ з одним. " +"<abbr title=\"Virtual Local Area Network — віртуальна локальна комп’ютерна " "мережа\">VLAN</abbr> чаÑто викориÑтовуютьÑÑ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ– на окремі " -"Ñегменти. Зазвичай один виcхідний порт викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· " +"Ñегменти. Зазвичай один виcхідний порт викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· " "більшою мережею, такою наприклад, Ñк Інтернет, а інші порти — Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ñ— " "мережі." @@ -3328,8 +3425,8 @@ msgid "" msgstr "" "СиÑтема перепрошиваєтьÑÑ.<br /> <strong>ÐЕ ВИМИКÐЙТЕ ЖИВЛЕÐÐЯ ПРИСТРОЮ!</" "strong><br /> Зачекайте кілька хвилин перед тим, Ñк пробувати знову " -"з'єднатиÑÑ. Залежно від ваших наÑтройок, можливо, вам треба буде оновити " -"адреÑу вашого комп'ютера, щоб знову отримати доÑтуп до приÑтрою." +"під’єднатиÑÑ. Залежно від налаштувань, можливо, треба буде оновити адреÑу " +"вашого комп’ютера, щоб знову отримати доÑтуп до приÑтрою." msgid "" "The uploaded image file does not contain a supported format. Make sure that " @@ -3342,10 +3439,10 @@ msgid "There are no active leases." msgstr "Ðктивних оренд немає." msgid "There are no changes to apply." -msgstr "" +msgstr "Ðемає жодних змін до заÑтоÑуваннÑ." msgid "There are no pending changes to revert!" -msgstr "Ðемає жодних змін до ÑкаÑуваннÑ!" +msgstr "Ðемає жодних очікуючих змін до ÑкаÑуваннÑ!" msgid "There are no pending changes!" msgstr "Ðемає жодних очікуючих змін!" @@ -3372,6 +3469,9 @@ msgid "" "'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " "Name System\">DNS</abbr> servers." msgstr "" +"Цей файл може міÑтити такі Ñ€Ñдки, Ñк 'server=/domain/1.2.3.4' або " +"'server=1.2.3.4' Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½-орієнтованих або повних виÑхідних <abbr title=" +"\"Domain Name System\">DNS</abbr>-Ñерверів." msgid "" "This is a list of shell glob patterns for matching files and directories to " @@ -3386,6 +3486,8 @@ msgid "" "This is either the \"Update Key\" configured for the tunnel or the account " "password if no update key has been configured" msgstr "" +"Це або \"Update Key\", Ñконфігурований Ð´Ð»Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŽ, або пароль облікового " +"запиÑу, Ñкщо ключ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ налаштовано" msgid "" "This is the content of /etc/rc.local. Insert your own commands here (in " @@ -3398,8 +3500,8 @@ msgid "" "This is the local endpoint address assigned by the tunnel broker, it usually " "ends with <code>...:2/64</code>" msgstr "" -"Це локальна адреÑа кінцевої точки, приÑвоєна тунельним брокером, зазвичай " -"закінчуєтьÑÑ Ð½Ð° <code>...:2/64</code>" +"Це локальна адреÑа кінцевої точки, Ñку приÑвоєно тунельним брокером, вона " +"зазвичай закінчуєтьÑÑ Ð½Ð° <code>…:2/64</code>" msgid "" "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</" @@ -3409,11 +3511,13 @@ msgstr "" "динамічної конфігурації вузла\">DHCP</abbr> у локальній мережі" msgid "This is the plain username for logging into the account" -msgstr "" +msgstr "Це звичайне Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ до облікового запиÑу" msgid "" "This is the prefix routed to you by the tunnel broker for use by clients" msgstr "" +"Це префікÑ, що надÑилаєтьÑÑ Ð´Ð¾ Ð²Ð°Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŒÐ½Ð¸Ð¼ брокером Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ " +"клієнтами" msgid "This is the system crontab in which scheduled tasks can be defined." msgstr "" @@ -3423,15 +3527,13 @@ msgstr "" msgid "" "This is usually the address of the nearest PoP operated by the tunnel broker" msgstr "" -"Зазвичай, це адреÑа найближчої точки приÑутноÑÑ‚Ñ–, що управлÑєтьÑÑ Ñ‚ÑƒÐ½ÐµÐ»Ð½Ð¸Ð¼ " +"Зазвичай, це адреÑа найближчої точки приÑутноÑÑ‚Ñ–, що управлÑєтьÑÑ Ñ‚ÑƒÐ½ÐµÐ»ÑŒÐ½Ð¸Ð¼ " "брокером" msgid "" "This list gives an overview over currently running system processes and " "their status." -msgstr "" -"У цьому ÑпиÑку наведені працюючі на даний момент ÑиÑтемні процеÑи та Ñ—Ñ… " -"ÑтатуÑ." +msgstr "У цьому ÑпиÑку наведено працюючі наразі ÑиÑтемні процеÑи та Ñ—Ñ… Ñтан." msgid "This page gives an overview over currently active network connections." msgstr "Ð¦Ñ Ñторінка надає оглÑд поточних активних мережних підключень." @@ -3443,20 +3545,22 @@ msgid "Time Synchronization" msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñу" msgid "Time Synchronization is not configured yet." -msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñу не наÑтроєна." +msgstr "Синхронізацію чаÑу не налаштовано." msgid "Timezone" msgstr "ЧаÑовий поÑÑ" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" "Щоб відновити файли конфігурації, ви можете відвантажити раніше Ñтворений " -"архів резервної копії." +"архів резервної копії. Ð”Ð»Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ до Ñ—Ñ— початкового Ñтану " +"натиÑніть кнопку \"Відновити\" (можливо тільки з образами SquashFS)." msgid "Tone" -msgstr "" +msgstr "Тоновий" msgid "Total Available" msgstr "УÑього доÑтупно" @@ -3474,7 +3578,7 @@ msgid "Transmission Rate" msgstr "ШвидкіÑÑ‚ÑŒ передаваннÑ" msgid "Transmit" -msgstr "Передача" +msgstr "ПередаваннÑ" msgid "Transmit Power" msgstr "ПотужніÑÑ‚ÑŒ передавача" @@ -3495,7 +3599,7 @@ msgid "Tunnel Interface" msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŽ" msgid "Tunnel Link" -msgstr "" +msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŽ" msgid "Tx-Power" msgstr "ПотужніÑÑ‚ÑŒ передавача" @@ -3516,7 +3620,7 @@ msgid "USB Device" msgstr "USB-приÑтрій" msgid "USB Ports" -msgstr "" +msgstr "USB-порт" msgid "UUID" msgstr "UUID" @@ -3525,7 +3629,7 @@ msgid "Unable to dispatch" msgstr "Ðе вдалоÑÑ Ð¾Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ñ‚Ð¸ запит" msgid "Unavailable Seconds (UAS)" -msgstr "" +msgstr "ÐедоÑтупні Ñекунди (<abbr title=\"Unavailable Seconds\">UAS</abbr>)" msgid "Unknown" msgstr "Ðевідомо" @@ -3537,7 +3641,7 @@ msgid "Unmanaged" msgstr "Ðекерований" msgid "Unmount" -msgstr "" +msgstr "Демонтувати" msgid "Unsaved Changes" msgstr "Ðезбережені зміни" @@ -3545,17 +3649,20 @@ msgstr "Ðезбережені зміни" msgid "Unsupported protocol type." msgstr "Ðепідтримуваний тип протоколу." +msgid "Up" +msgstr "Вгору" + msgid "Update lists" -msgstr "Оновити ÑпиÑки..." +msgstr "Оновити ÑпиÑки" msgid "" "Upload a sysupgrade-compatible image here to replace the running firmware. " "Check \"Keep settings\" to retain the current configuration (requires a " "compatible firmware image)." msgstr "" -"Відвантажити sysupgrade-ÑуміÑний образ, щоб замінити поточну прошивку. Ð”Ð»Ñ " -"Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— конфігурації вÑтановіть прапорець \"Зберегти наÑтройки" -"\" (потрібен ÑуміÑний образ прошивки)." +"Відвантажити sysupgrade-ÑуміÑний образ, щоб замінити поточну мікропрограму. " +"Ð”Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— конфігурації вÑтановіть прапорець \"Зберегти " +"налаштуваннÑ\" (потрібен ÑуміÑний образ мікропрограми)." msgid "Upload archive..." msgstr "Відвантажити архів..." @@ -3585,16 +3692,16 @@ msgid "Use TTL on tunnel interface" msgstr "ВикориÑтовувати на тунельному інтерфейÑÑ– TTL" msgid "Use as external overlay (/overlay)" -msgstr "" +msgstr "ВикориÑтовувати Ñк зовнішній оверлей (/overlay)" msgid "Use as root filesystem (/)" -msgstr "" +msgstr "ВикориÑтовувати Ñк кореневу файлову ÑиÑтему (/)" msgid "Use broadcast flag" msgstr "ВикориÑтовувати прапорець широкомовноÑÑ‚Ñ–" msgid "Use builtin IPv6-management" -msgstr "" +msgstr "ВикориÑтовувати вбудоване ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ IPv6" msgid "Use custom DNS servers" msgstr "ВикориÑтовувати оÑобливі DNS-Ñервери" @@ -3617,8 +3724,8 @@ msgid "" msgstr "" "ВикориÑтовуйте кнопку <em>Додати</em>, щоб додати новий Ð·Ð°Ð¿Ð¸Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸. " "<em>MAC-адреÑа</em> ідентифікує вузол, <em>IPv4-адреÑа</em> визначає " -"фікÑовану адреÑу, Ñка буде викориÑтовуватиÑÑ, а <em>Ðазва (ім'Ñ) вузла</em> " -"призначає Ñимволічне ім'Ñ Ð²ÑƒÐ·Ð»Ð°." +"фікÑовану адреÑу, Ñка буде викориÑтовуватиÑÑ, а <em>Ðазва (ім’Ñ) вузла</em> " +"призначає Ñимволічне Ñ–Ð¼â€™Ñ Ð²ÑƒÐ·Ð»Ð°." msgid "Used" msgstr "ВикориÑтано" @@ -3630,21 +3737,24 @@ msgid "" "Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not " "needed with normal WPA(2)-PSK." msgstr "" +"ВикориÑтовуєтьÑÑ Ð´Ð»Ñ Ð´Ð²Ð¾Ñ… різних цілей: RADIUS NAS ID Ñ– 802.11r <abbr title=" +"\"ідентифікатор влаÑника ключа R0\">R0KH-ID</abbr>. Ðе потрібно за " +"звичайного WPA(2)-PSK." msgid "User certificate (PEM encoded)" -msgstr "" +msgstr "Сертифікат кориÑтувача (PEM-кодований)" msgid "User key (PEM encoded)" -msgstr "" +msgstr "Ключ кориÑтувача (PEM-кодований)" msgid "Username" -msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача" +msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача" msgid "VC-Mux" msgstr "VC-Mux" msgid "VDSL" -msgstr "" +msgstr "VDSL" msgid "VLANs on %q" msgstr "VLAN на %q" @@ -3653,25 +3763,25 @@ msgid "VLANs on %q (%s)" msgstr "VLAN на %q (%s)" msgid "VPN Local address" -msgstr "" +msgstr "Локальна адреÑа VPN" msgid "VPN Local port" -msgstr "" +msgstr "Локальний порт VPN" msgid "VPN Server" msgstr "VPN-Ñервер" msgid "VPN Server port" -msgstr "" +msgstr "Порт VPN-Ñервера" msgid "VPN Server's certificate SHA1 hash" -msgstr "" +msgstr "SHA1-геш Ñертифіката VPN-Ñервера" msgid "VPNC (CISCO 3000 (and others) VPN)" -msgstr "" +msgstr "VPNC (CISCO 3000 (та інш.) VPN)" msgid "Vendor" -msgstr "" +msgstr "ПоÑтачальник" msgid "Vendor Class to send when requesting DHCP" msgstr "ÐšÐ»Ð°Ñ Ð¿Ð¾Ñтачальника Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²ÐºÐ¸ при запиті DHCP" @@ -3695,7 +3805,7 @@ msgid "WEP passphrase" msgstr "Парольна фраза WEP" msgid "WMM Mode" -msgstr "Режим WMM" +msgstr "Режим <abbr title=\"Wi-Fi Multimedia\">WMM</abbr>" msgid "WPA passphrase" msgstr "Парольна фраза WPA" @@ -3714,27 +3824,29 @@ msgid "Waiting for command to complete..." msgstr "Очікуємо Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸..." msgid "Waiting for configuration to get applied… %ds" -msgstr "" +msgstr "Чекаємо на заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ—â€¦ %d c" msgid "Waiting for device..." -msgstr "" +msgstr "Очікуємо приÑтрій..." msgid "Warning" msgstr "ЗаÑтереженнÑ" msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" +"ЗаÑтереженнÑ: Є незбережені зміни, Ñкі буде втрачено при перезавантаженні!" msgid "" "When using a PSK, the PMK can be generated locally without inter AP " "communications" msgstr "" +"При викориÑтанні PSK, PMK може бути Ñтворений локально без взаємодії між AP" msgid "Width" -msgstr "" +msgstr "Ширина" msgid "WireGuard VPN" -msgstr "" +msgstr "WireGuard VPN" msgid "Wireless" msgstr "Бездротові мережі" @@ -3752,19 +3864,19 @@ msgid "Wireless Security" msgstr "Безпека бездротової мережі" msgid "Wireless is disabled or not associated" -msgstr "Бездротову мережу вимкнено або не пов'Ñзано" +msgstr "Бездротову мережу вимкнено або не пов’Ñзано" msgid "Wireless is restarting..." msgstr "Бездротова мережа перезапуÑкаєтьÑÑ..." msgid "Wireless network is disabled" -msgstr "Бездротова мережа вимкнена" +msgstr "Бездротову мережу вимкнено" msgid "Wireless network is enabled" -msgstr "Бездротова мережа ввімкнена" +msgstr "Бездротову мережу ввімкнено" msgid "Wireless restarted" -msgstr "Бездротова мережа перезапущена" +msgstr "Бездротову мережу перезапущено" msgid "Wireless shut down" msgstr "Бездротова мережа припинила роботу" @@ -3773,7 +3885,7 @@ msgid "Write received DNS requests to syslog" msgstr "ЗапиÑувати отримані DNS-запити до ÑиÑтемного журналу" msgid "Write system log to file" -msgstr "" +msgstr "ЗапиÑувати cиÑтемний журнал до файлу" msgid "" "You can enable or disable installed init scripts here. Changes will applied " @@ -3788,14 +3900,17 @@ msgstr "" msgid "" "You must enable JavaScript in your browser or LuCI will not work properly." msgstr "" -"Ви повинні увімкнути JavaScript у вашому браузері, або LuCI не буде " -"працювати належним чином." +"Вам Ñлід увімкнути JavaScript у вашому браузері, або LuCI не буде працювати " +"належним чином." msgid "" "Your Internet Explorer is too old to display this page correctly. Please " "upgrade it to at least version 7 or use another browser like Firefox, Opera " "or Safari." msgstr "" +"Ваш Internet Explorer занадто Ñтарий, щоб правильно відобразити цю Ñторінку. " +"Поновіть його, принаймні, до верÑÑ–Ñ— 7 або ÑкориÑтайтеÑÑŒ іншим браузером, " +"таким Ñк Firefox, Opera або Safari." msgid "any" msgstr "будь-Ñкий" @@ -3807,16 +3922,16 @@ msgid "baseT" msgstr "baseT" msgid "bridged" -msgstr "зв'Ñзано" +msgstr "зв’Ñзано" msgid "create" -msgstr "" +msgstr "Ñтворити" msgid "create:" msgstr "Ñтворити:" msgid "creates a bridge over specified interface(s)" -msgstr "Створити міÑÑ‚ через вказаний інтерфейÑ(и)" +msgstr "Створює міÑÑ‚ через зазначені інтерфейÑи" msgid "dB" msgstr "дБ" @@ -3828,7 +3943,7 @@ msgid "disable" msgstr "вимкнено" msgid "disabled" -msgstr "" +msgstr "вимкнено" msgid "expired" msgstr "минув" @@ -3841,7 +3956,7 @@ msgstr "" "Protocol — протокол динамічної конфігурації вузла\">DHCP</abbr>-оренди" msgid "forward" -msgstr "переÑлати" +msgstr "переÑпрÑмувати" msgid "full-duplex" msgstr "повний дуплекÑ" @@ -3849,17 +3964,14 @@ msgstr "повний дуплекÑ" msgid "half-duplex" msgstr "напівдуплекÑ" -msgid "help" -msgstr "довідка" - msgid "hidden" msgstr "прихований" msgid "hybrid mode" -msgstr "" +msgstr "гібридний режим" msgid "if target is a network" -msgstr "Ñкщо мета — мережа" +msgstr "Ñкщо ціль — мережа" msgid "input" msgstr "вхід" @@ -3879,19 +3991,19 @@ msgstr "" "abbr>-файл" msgid "minutes" -msgstr "" +msgstr "хв." msgid "no" msgstr "ні" msgid "no link" -msgstr "нема з'єднаннÑ" +msgstr "нема з’єднаннÑ" msgid "none" msgstr "нема нічого" msgid "not present" -msgstr "" +msgstr "не приÑутній" msgid "off" msgstr "вимкнено" @@ -3903,37 +4015,37 @@ msgid "open" msgstr "відкрита" msgid "output" -msgstr "" +msgstr "вихід" msgid "overlay" -msgstr "" +msgstr "оверлей" msgid "random" -msgstr "" +msgstr "випадковий" msgid "relay mode" -msgstr "" +msgstr "режим реле" msgid "routed" msgstr "ÑпрÑмовано" msgid "server mode" -msgstr "" +msgstr "режим Ñервера" msgid "stateful-only" -msgstr "" +msgstr "тільки ЗІ збереженнÑм Ñтану" msgid "stateless" -msgstr "" +msgstr "БЕЗ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñтану" msgid "stateless + stateful" -msgstr "" +msgstr "БЕЗ та ЗІ збереженнÑм Ñтану" msgid "tagged" -msgstr "з позначкою" +msgstr "позначено" msgid "time units (TUs / 1.024 ms) [1000-65535]" -msgstr "" +msgstr "одиниці чаÑу (TUs / 1.024 ms) [1000-65535]" msgid "unknown" msgstr "невідомий" @@ -3945,130 +4057,13 @@ msgid "unspecified" msgstr "не визначено" msgid "unspecified -or- create:" -msgstr "не визначено -або- Ñтворити" +msgstr "не визначено -або- Ñтворити:" msgid "untagged" -msgstr "без позначки" +msgstr "не позначено" msgid "yes" msgstr "так" msgid "« Back" msgstr "« Ðазад" - -#~ msgid "IPv4 WAN Status" -#~ msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ IPv4 WAN" - -#~ msgid "IPv6 WAN Status" -#~ msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ IPv6 WAN" - -#~ msgid "Apply" -#~ msgstr "ЗаÑтоÑувати" - -#~ msgid "Applying changes" -#~ msgstr "ЗаÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½" - -#~ msgid "Configuration applied." -#~ msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð·Ð°ÑтоÑована." - -#~ msgid "Save & Apply" -#~ msgstr "Зберегти Ñ– заÑтоÑувати" - -#~ msgid "The following changes have been committed" -#~ msgstr "Ðижче наведені зміни були заÑтоÑовані" - -#~ msgid "There are no pending changes to apply!" -#~ msgstr "Ðемає жодних змін до заÑтоÑуваннÑ!" - -#~ msgid "Action" -#~ msgstr "ДіÑ" - -#~ msgid "Buttons" -#~ msgstr "Кнопки" - -#~ msgid "Handler" -#~ msgstr "Обробник" - -#~ msgid "Maximum hold time" -#~ msgstr "МакÑимальний Ñ‡Ð°Ñ ÑƒÑ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ" - -#~ msgid "Minimum hold time" -#~ msgstr "Мінімальний Ñ‡Ð°Ñ ÑƒÑ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ" - -#~ msgid "Path to executable which handles the button event" -#~ msgstr "ШлÑÑ… до програми, Ñка оброблÑÑ” натиÑÐºÐ°Ð½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸" - -#~ msgid "Specifies the button state to handle" -#~ msgstr "Визначає Ñтан кнопки Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸" - -#~ msgid "This page allows the configuration of custom button actions" -#~ msgstr "Ð¦Ñ Ñторінка дозволÑÑ” наÑтроїти нетипові дії кнопки" - -#~ msgid "Leasetime" -#~ msgstr "Ð§Ð°Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸" - -#~ msgid "AR Support" -#~ msgstr "Підтримка AR" - -#~ msgid "Atheros 802.11%s Wireless Controller" -#~ msgstr "Бездротовий 802.11%s контролер Atheros" - -#~ msgid "Background Scan" -#~ msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ фоновому режимі" - -#~ msgid "Compression" -#~ msgstr "СтиÑненнÑ" - -#~ msgid "Disable HW-Beacon timer" -#~ msgstr "Вимкнути таймер HW-Beacon" - -#~ msgid "Do not send probe responses" -#~ msgstr "Ðе надÑилати відповіді на зондуваннÑ" - -#~ msgid "Fast Frames" -#~ msgstr "Швидкі фрейми" - -#~ msgid "Maximum Rate" -#~ msgstr "МакÑимальна швидкіÑÑ‚ÑŒ" - -#~ msgid "Minimum Rate" -#~ msgstr "Мінімальна швидкіÑÑ‚ÑŒ" - -#~ msgid "Multicast Rate" -#~ msgstr "ШвидкіÑÑ‚ÑŒ багатоадреÑного потоку" - -#~ msgid "Outdoor Channels" -#~ msgstr "Зовнішні канали" - -#~ msgid "Regulatory Domain" -#~ msgstr "РегулÑтивний домен" - -#~ msgid "Separate WDS" -#~ msgstr "РозділÑти WDS" - -#~ msgid "Static WDS" -#~ msgstr "Статичний WDS" - -#~ msgid "Turbo Mode" -#~ msgstr "Режим Turbo" - -#~ msgid "XR Support" -#~ msgstr "Підтримка XR" - -#~ msgid "An additional network will be created if you leave this unchecked." -#~ msgstr "Якщо ви залишите це невибраним, буде Ñтворена додаткова мережа." - -#~ msgid "Join Network: Settings" -#~ msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі: ÐаÑтройки" - -#~ msgid "CPU" -#~ msgstr "ЦП" - -#~ msgid "Port %d" -#~ msgstr "Порт %d" - -#~ msgid "Port %d is untagged in multiple VLANs!" -#~ msgstr "Порт %d нетегований у кількох VLAN-ах!" - -#~ msgid "VLAN Interface" -#~ msgstr "VLAN-інтерфейÑ" diff --git a/modules/luci-base/po/vi/base.po b/modules/luci-base/po/vi/base.po index 9e4736073b..c15f4e39cc 100644 --- a/modules/luci-base/po/vi/base.po +++ b/modules/luci-base/po/vi/base.po @@ -483,11 +483,11 @@ msgstr "" msgid "Back to scan results" msgstr "" -msgid "Backup / Flash Firmware" +msgid "Backup" msgstr "" -msgid "Backup / Restore" -msgstr "Backup/ Restore" +msgid "Backup / Flash Firmware" +msgstr "" msgid "Backup file list" msgstr "" @@ -612,8 +612,7 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." +"configuration files." msgstr "" msgid "Client" @@ -732,9 +731,6 @@ msgstr "" "Tùy chỉnh chế Ä‘á»™ của thiết bị <abbr title=\"Light Emitting Diode\">LED</" "abbr>s nếu có thể." -msgid "DHCP Leases" -msgstr "" - msgid "DHCP Server" msgstr "" @@ -747,9 +743,6 @@ msgstr "" msgid "DHCP-Options" msgstr "Tùy chá»n DHCP" -msgid "DHCPv6 Leases" -msgstr "" - msgid "DHCPv6 client" msgstr "" @@ -843,10 +836,10 @@ msgstr "" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -935,6 +928,9 @@ msgstr "" "Don&#39;t chuyển tiếp <abbr title=\"Hệ thống tên miá»n\">DNS</abbr>-Yêu " "cầu không cần <abbr title=\"Hệ thống tên miá»n\">DNS</abbr>-Tên" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "Tải và cà i đặt gói" @@ -1048,6 +1044,9 @@ msgstr "" msgid "Enable this mount" msgstr "" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "" @@ -1080,6 +1079,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "" @@ -1262,7 +1267,7 @@ msgstr "" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2552,7 +2557,7 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" msgid "" @@ -2565,7 +2570,7 @@ msgstr "" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" msgid "" @@ -2709,6 +2714,9 @@ msgstr "" msgid "Restart Firewall" msgstr "Khởi Ä‘á»™ng lại Firewall" +msgid "Restore" +msgstr "" + msgid "Restore backup" msgstr "Phục hồi backup" @@ -2906,9 +2914,6 @@ msgid "" "instructions." msgstr "" -msgid "Sort" -msgstr "" - msgid "Source" msgstr "Nguồn" @@ -3099,6 +3104,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3294,7 +3302,8 @@ msgstr "Múi giá» " msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." msgstr "" msgid "Tone" @@ -3387,6 +3396,9 @@ msgstr "Thay đổi không lÆ°u" msgid "Unsupported protocol type." msgstr "" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "" @@ -3680,9 +3692,6 @@ msgstr "" msgid "half-duplex" msgstr "" -msgid "help" -msgstr "" - msgid "hidden" msgstr "" @@ -3785,6 +3794,9 @@ msgstr "" msgid "« Back" msgstr "" +#~ msgid "Backup / Restore" +#~ msgstr "Backup/ Restore" + #~ msgid "Apply" #~ msgstr "Ãp dụng" diff --git a/modules/luci-base/po/zh-cn/base.po b/modules/luci-base/po/zh-cn/base.po index e2bff8dc82..73425dc76c 100644 --- a/modules/luci-base/po/zh-cn/base.po +++ b/modules/luci-base/po/zh-cn/base.po @@ -381,13 +381,13 @@ msgid "Any zone" msgstr "ä»»æ„区域" msgid "Apply request failed with status <code>%h</code>" -msgstr "" +msgstr "åº”ç”¨è¯·æ±‚å¤±è´¥ï¼ŒçŠ¶æ€ <code>%h</code>" msgid "Apply unchecked" -msgstr "" +msgstr "应用未选ä¸" msgid "Architecture" -msgstr "" +msgstr "架构" msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" @@ -404,7 +404,7 @@ msgid "Associated Stations" msgstr "已连接站点" msgid "Associations" -msgstr "" +msgstr "å…³è”æ•°" msgid "Auth Group" msgstr "认è¯ç»„" @@ -481,12 +481,12 @@ msgstr "返回至概况" msgid "Back to scan results" msgstr "返回至扫æ结果" +msgid "Backup" +msgstr "备份" + msgid "Backup / Flash Firmware" msgstr "备份/å‡çº§" -msgid "Backup / Restore" -msgstr "备份/æ¢å¤" - msgid "Backup file list" msgstr "文件备份列表" @@ -564,10 +564,10 @@ msgid "Changes" msgstr "修改数" msgid "Changes applied." -msgstr "更改已应用" +msgstr "更改已应用。" msgid "Changes have been reverted." -msgstr "" +msgstr "更改已å–消。" msgid "Changes the administrator password for accessing the device" msgstr "修改访问设备的管ç†å‘˜å¯†ç " @@ -578,7 +578,7 @@ msgstr "ä¿¡é“" msgid "" "Channel %d is not available in the %s regulatory domain and has been auto-" "adjusted to %d." -msgstr "" +msgstr "ä¿¡é“ %d 在 %s 监管区域内ä¸å¯ç”¨å¹¶å·²è‡ªåŠ¨è°ƒæ•´åˆ° %d。" msgid "Check" msgstr "检查" @@ -614,11 +614,8 @@ msgstr "Cisco UDP å°è£…" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." -msgstr "" -"点击“生æˆå¤‡ä»½â€ä¸‹è½½å½“å‰é…置文件的 tar å˜æ¡£ã€‚è¦å°†å›ºä»¶æ¢å¤åˆ°åˆå§‹çŠ¶æ€ï¼Œè¯·å•å‡»â€œæ‰§" -"è¡Œé‡ç½®â€ï¼ˆä»… squashfs æ ¼å¼çš„固件有效)。" +"configuration files." +msgstr "点击“生æˆå¤‡ä»½â€ä¸‹è½½å½“å‰é…置文件的 tar å˜æ¡£ã€‚" msgid "Client" msgstr "客户端 Client" @@ -660,10 +657,10 @@ msgid "Configuration files will be kept." msgstr "é…置文件将被ä¿ç•™ã€‚" msgid "Configuration has been applied." -msgstr "" +msgstr "é…置已应用。" msgid "Configuration has been rolled back!" -msgstr "" +msgstr "é…置已回滚ï¼" msgid "Confirmation" msgstr "确认密ç " @@ -685,6 +682,8 @@ msgid "" "changes. You might need to reconnect if you modified network related " "settings such as the IP address or wireless security credentials." msgstr "" +"应用é…置更改åŽï¼Œæ— 法é‡æ–°èŽ·å¾—对设备的访问æƒé™ã€‚如果您修改了网络相关设置如 IP " +"地å€æˆ–æ— çº¿å®‰å…¨è¯ä¹¦ï¼Œåˆ™å¯èƒ½éœ€è¦é‡æ–°è¿žæŽ¥ã€‚" msgid "Country" msgstr "国家" @@ -738,9 +737,6 @@ msgid "" "\">LED</abbr>s if possible." msgstr "自定义æ¤è®¾å¤‡çš„ <abbr title=\"Light Emitting Diode\">LED</abbr> 行为。" -msgid "DHCP Leases" -msgstr "DHCP 分é…" - msgid "DHCP Server" msgstr "DHCP æœåŠ¡å™¨" @@ -753,9 +749,6 @@ msgstr "DHCP 客户端" msgid "DHCP-Options" msgstr "DHCP 选项" -msgid "DHCPv6 Leases" -msgstr "DHCPv6 分é…" - msgid "DHCPv6 client" msgstr "DHCPv6 客户端" @@ -851,10 +844,10 @@ msgstr "设备é…ç½®" msgid "Device is rebooting..." msgstr "设备æ£åœ¨é‡å¯..." -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "æ— æ³•è¿žæŽ¥åˆ°è®¾å¤‡" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -892,7 +885,7 @@ msgid "Discard upstream RFC1918 responses" msgstr "丢弃 RFC1918 上行å“应数æ®" msgid "Dismiss" -msgstr "" +msgstr "解除" msgid "Displaying only packages containing" msgstr "åªæ˜¾ç¤ºæœ‰å†…容的软件包" @@ -943,6 +936,9 @@ msgid "" msgstr "" "ä¸è½¬å‘没有 <abbr title=\"Domain Name System\">DNS</abbr> å称的解æžè¯·æ±‚" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "下载并安装软件包" @@ -1007,6 +1003,7 @@ msgid "" "Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> " "snooping" msgstr "" +"å¯ç”¨ <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> 窥探" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "å¼€å¯ <abbr title=\"Spanning Tree Protocol\">STP</abbr>" @@ -1056,6 +1053,9 @@ msgstr "å¯ç”¨åŽæŠ¥æ–‡çš„ DF(ç¦æ¢åˆ†ç‰‡ï¼‰æ ‡å¿—。" msgid "Enable this mount" msgstr "å¯ç”¨æ¤æŒ‚载点" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "å¯ç”¨æ¤ swap 分区" @@ -1063,10 +1063,10 @@ msgid "Enable/Disable" msgstr "å¯ç”¨/ç¦ç”¨" msgid "Enabled" -msgstr "å¯ç”¨" +msgstr "å·²å¯ç”¨" msgid "Enables IGMP snooping on this bridge" -msgstr "" +msgstr "在æ¤æ¡¥æŽ¥ä¸Šå¯ç”¨ IGMP 窥探" msgid "" "Enables fast roaming among access points that belong to the same Mobility " @@ -1088,6 +1088,12 @@ msgstr "端点主机" msgid "Endpoint Port" msgstr "端点端å£" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "擦除ä¸..." @@ -1147,7 +1153,7 @@ msgid "FT protocol" msgstr "FT åè®®" msgid "Failed to confirm apply within %ds, waiting for rollback…" -msgstr "" +msgstr "在 %d 秒内确认应用失败,ç‰å¾…回滚..." msgid "File" msgstr "文件" @@ -1270,10 +1276,10 @@ msgstr "空闲空间" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" -"有关 WireGuard 接å£å’Œ Peer 的更多信æ¯ï¼š<a href=\"http://wireguard.io" -"\">wireguard.io</a>。" +"有关 WireGuard 接å£å’Œ Peer 的更多信æ¯ï¼š<a href=\"http://wireguard.com" +"\">wireguard.com</a>。" msgid "GHz" msgstr "GHz" @@ -1347,7 +1353,7 @@ msgstr "请求头错误代ç 错误(HEC)" msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." -msgstr "é…置路由器的部分基础信æ¯ã€‚" +msgstr "æ¤å¤„é…置设备的基础信æ¯ï¼Œå¦‚主机å称或时区。" msgid "" "Here you can paste public SSH-Keys (one per line) for SSH public-key " @@ -1400,7 +1406,7 @@ msgid "IPv4 Firewall" msgstr "IPv4 防ç«å¢™" msgid "IPv4 Upstream" -msgstr "" +msgstr "IPv4 上游" msgid "IPv4 address" msgstr "IPv4 地å€" @@ -1451,7 +1457,7 @@ msgid "IPv6 ULA-Prefix" msgstr "IPv6 ULA å‰ç¼€" msgid "IPv6 Upstream" -msgstr "" +msgstr "IPv6 上游" msgid "IPv6 address" msgstr "IPv6 地å€" @@ -1499,10 +1505,10 @@ msgid "Identity" msgstr "鉴æƒ" msgid "If checked, 1DES is enabled" -msgstr "选ä¸ä»¥å¯ç”¨ 1DES" +msgstr "如果选ä¸ï¼Œåˆ™å¯ç”¨1DES。" msgid "If checked, encryption is disabled" -msgstr "选ä¸ä»¥ç¦ç”¨åŠ 密" +msgstr "如果选ä¸ï¼Œåˆ™ç¦ç”¨åŠ 密" msgid "" "If specified, mount the device by its UUID instead of a fixed device node" @@ -2161,7 +2167,7 @@ msgid "Obfuscated Password" msgstr "混淆密ç " msgid "Obtain IPv6-Address" -msgstr "" +msgstr "èŽ·å– IPv6 地å€" msgid "Off-State Delay" msgstr "å…³é—时间" @@ -2570,9 +2576,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"确定è¦åˆ 除æ¤æŽ¥å£ï¼Ÿåˆ 除æ“ä½œæ— æ³•æ’¤é”€ï¼\\nåˆ é™¤æ¤æŽ¥å£ï¼Œå¯èƒ½å¯¼è‡´æ— 法å†è®¿é—®è·¯ç”±å™¨ï¼" msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2586,10 +2591,8 @@ msgstr "确定è¦æ”¾å¼ƒæ‰€æœ‰æ›´æ”¹ï¼Ÿ" msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"确定è¦å…³é—æ¤ç½‘络?\\n如果您æ£åœ¨ä½¿ç”¨æ¤æŽ¥å£è¿žæŽ¥è·¯ç”±å™¨ï¼Œå…³é—æ¤ç½‘络å¯èƒ½å¯¼è‡´è¿žæŽ¥æ–" -"å¼€ï¼" msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2738,6 +2741,9 @@ msgstr "é‡å¯" msgid "Restart Firewall" msgstr "é‡å¯é˜²ç«å¢™" +msgid "Restore" +msgstr "æ¢å¤" + msgid "Restore backup" msgstr "æ¢å¤é…ç½®" @@ -2745,16 +2751,16 @@ msgid "Reveal/hide password" msgstr "显示/éšè— 密ç " msgid "Revert" -msgstr "放弃" +msgstr "æ¢å¤" msgid "Revert changes" -msgstr "" +msgstr "æ¢å¤æ›´æ”¹" msgid "Revert request failed with status <code>%h</code>" -msgstr "" +msgstr "æ¢å¤è¯·æ±‚å¤±è´¥ï¼ŒçŠ¶æ€ <code>%h</code>" msgid "Reverting configuration…" -msgstr "" +msgstr "æ£åœ¨æ¢å¤é…ç½®..." msgid "Root" msgstr "Root" @@ -2819,7 +2825,7 @@ msgid "Save" msgstr "ä¿å˜" msgid "Save & Apply" -msgstr "ä¿å˜&应用" +msgstr "ä¿å˜å¹¶åº”用" msgid "Scan" msgstr "扫æ" @@ -2937,9 +2943,6 @@ msgstr "" "抱æ‰ï¼Œæ‚¨çš„设备暂ä¸æ”¯æŒ sysupgrade å‡çº§ï¼Œéœ€æ‰‹åŠ¨æ›´æ–°å›ºä»¶ã€‚请å‚考 Wiki ä¸å…³äºŽæ¤" "设备的固件更新说明。" -msgid "Sort" -msgstr "排åº" - msgid "Source" msgstr "æºåœ°å€" @@ -2982,7 +2985,7 @@ msgid "Start priority" msgstr "å¯åŠ¨ä¼˜å…ˆçº§" msgid "Starting configuration apply…" -msgstr "" +msgstr "开始应用é…ç½®..." msgid "Startup" msgstr "å¯åŠ¨é¡¹" @@ -3137,6 +3140,9 @@ msgstr "" "åˆæ³•å—符:<code>A-Z</code>, <code>a-z</code>, <code>0-9</code> å’Œ <code>_</" "code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "由于以下错误,é…ç½®æ–‡ä»¶æ— æ³•è¢«åŠ è½½ï¼š" @@ -3149,6 +3155,9 @@ msgid "" "or revert all pending changes to keep the currently working configuration " "state." msgstr "" +"åœ¨åº”ç”¨æŒ‚èµ·çš„æ›´æ”¹åŽ %d ç§’å†…æ— æ³•åˆ°è¾¾è¯¥è®¾å¤‡ï¼Œå‡ºäºŽå®‰å…¨åŽŸå› å¯¼è‡´é…置回滚。如果您认" +"为é…置更改ä»ç„¶æ£ç¡®ï¼Œè¯·æ‰§è¡Œæœªé€‰ä¸çš„é…置应用。或者您å¯ä»¥åœ¨å°è¯•å†æ¬¡åº”用之å‰è§£é™¤" +"æ¤è¦å‘Šå¹¶ç¼–辑更改,或者还原所有未完æˆçš„更改以ä¿æŒå½“å‰æ£åœ¨å·¥ä½œçš„é…置状æ€ã€‚" msgid "" "The device file of the memory or partition (<abbr title=\"for example\">e.g." @@ -3238,7 +3247,7 @@ msgid "There are no active leases." msgstr "没有已分é…的租约。" msgid "There are no changes to apply." -msgstr "" +msgstr "没有待生效的更改。" msgid "There are no pending changes to revert!" msgstr "没有å¯æ”¾å¼ƒçš„更改ï¼" @@ -3333,8 +3342,11 @@ msgstr "时区" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." -msgstr "ä¸Šä¼ å¤‡ä»½å˜æ¡£ä»¥æ¢å¤é…置。" +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." +msgstr "" +"ä¸Šä¼ å¤‡ä»½å˜æ¡£ä»¥æ¢å¤é…置。è¦å°†å›ºä»¶æ¢å¤åˆ°åˆå§‹çŠ¶æ€ï¼Œè¯·å•å‡»â€œæ‰§è¡Œé‡ç½®â€ï¼ˆä»… " +"squashfs æ ¼å¼çš„固件有效)。" msgid "Tone" msgstr "Tone" @@ -3426,6 +3438,9 @@ msgstr "未ä¿å˜çš„é…ç½®" msgid "Unsupported protocol type." msgstr "ä¸æ”¯æŒçš„å议类型" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "刷新列表" @@ -3595,7 +3610,7 @@ msgid "Waiting for command to complete..." msgstr "ç‰å¾…命令执行完æˆ..." msgid "Waiting for configuration to get applied… %ds" -msgstr "" +msgstr "ç‰å¾…应用é…ç½®... %d 秒" msgid "Waiting for device..." msgstr "ç‰å¾…设备..." @@ -3639,10 +3654,10 @@ msgid "Wireless is restarting..." msgstr "æ— çº¿é‡å¯ä¸..." msgid "Wireless network is disabled" -msgstr "æ— çº¿å·²ç¦ç”¨" +msgstr "æ— çº¿ç½‘ç»œå·²ç¦ç”¨" msgid "Wireless network is enabled" -msgstr "æ— çº¿ç½‘ç»œå¼€å…³" +msgstr "æ— çº¿ç½‘ç»œå·²å¯ç”¨" msgid "Wireless restarted" msgstr "æ— çº¿å·²é‡å¯" @@ -3728,9 +3743,6 @@ msgstr "å…¨åŒå·¥" msgid "half-duplex" msgstr "åŠåŒå·¥" -msgid "help" -msgstr "帮助" - msgid "hidden" msgstr "éšè—" @@ -3786,7 +3798,7 @@ msgid "overlay" msgstr "覆盖" msgid "random" -msgstr "" +msgstr "éšæœº" msgid "relay mode" msgstr "ä¸ç»§æ¨¡å¼" @@ -3833,6 +3845,35 @@ msgstr "是" msgid "« Back" msgstr "« åŽé€€" +#~ msgid "Device unreachableX" +#~ msgstr "æ— æ³•è¿žæŽ¥åˆ°è®¾å¤‡ï¼" + +#~ msgid "DHCP Leases" +#~ msgstr "DHCP 分é…" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "DHCPv6 分é…" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "确定è¦åˆ 除æ¤æŽ¥å£ï¼Ÿåˆ 除æ“ä½œæ— æ³•æ’¤é”€ï¼\\nåˆ é™¤æ¤æŽ¥å£ï¼Œå¯èƒ½å¯¼è‡´æ— 法å†è®¿é—®è·¯ç”±" +#~ "器ï¼" + +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "确定è¦å…³é—æ¤ç½‘络?\\n如果您æ£åœ¨ä½¿ç”¨æ¤æŽ¥å£è¿žæŽ¥è·¯ç”±å™¨ï¼Œå…³é—æ¤ç½‘络å¯èƒ½å¯¼è‡´è¿ž" +#~ "接æ–å¼€ï¼" + +#~ msgid "Sort" +#~ msgstr "排åº" + +#~ msgid "help" +#~ msgstr "帮助" + #~ msgid "IPv4 WAN Status" #~ msgstr "IPv4 WAN 状æ€" diff --git a/modules/luci-base/po/zh-tw/base.po b/modules/luci-base/po/zh-tw/base.po index b6dde2c24c..4d56d8d8ef 100644 --- a/modules/luci-base/po/zh-tw/base.po +++ b/modules/luci-base/po/zh-tw/base.po @@ -486,12 +486,12 @@ msgstr "返回至總覽" msgid "Back to scan results" msgstr "返回至掃æçµæžœ" +msgid "Backup" +msgstr "備份" + msgid "Backup / Flash Firmware" msgstr "備份/å‡ç´šéŸŒé«”" -msgid "Backup / Restore" -msgstr "備份/還原" - msgid "Backup file list" msgstr "備份檔列表" @@ -621,11 +621,8 @@ msgstr "" msgid "" "Click \"Generate archive\" to download a tar archive of the current " -"configuration files. To reset the firmware to its initial state, click " -"\"Perform reset\" (only possible with squashfs images)." -msgstr "" -"按下\"壓縮檔製作\"就能下載目å‰è¨å®šæª”çš„taræ ¼å¼çš„壓縮. è¦é‡ç½®å›žå¾©å‡ºå» 值,按下" -"\"執行還原\"(å¯èƒ½åªå°squashfså½±åƒæª”有效)" +"configuration files." +msgstr "按下\"壓縮檔製作\"就能下載目å‰è¨å®šæª”çš„taræ ¼å¼çš„壓縮." msgid "Client" msgstr "用戶端" @@ -743,9 +740,6 @@ msgstr "" "如果å¯ä»¥çš„話,自定這個è¨å‚™çš„動作 <abbr title=\"Light Emitting Diode\">LED</" "abbr>s ." -msgid "DHCP Leases" -msgstr "DHCP的釋放週期" - msgid "DHCP Server" msgstr "DHCP伺æœå™¨" @@ -758,9 +752,6 @@ msgstr "DHCP用戶端" msgid "DHCP-Options" msgstr "DHCPé¸é …" -msgid "DHCPv6 Leases" -msgstr "DHCPv6版釋放時間週期" - msgid "DHCPv6 client" msgstr "" @@ -856,10 +847,10 @@ msgstr "è¨å®šè¨å‚™" msgid "Device is rebooting..." msgstr "" -msgid "Device unreachable" +msgid "Device unreachable!" msgstr "" -msgid "Device unreachable!" +msgid "Device unreachable! Still waiting for device..." msgstr "" msgid "Diagnostics" @@ -948,6 +939,9 @@ msgstr "" "若沒 <abbr title=\"Domain Name System\">DNS</abbr>-å稱的話,ä¸è¦è½‰ç™¼ <abbr " "title=\"Domain Name System\">DNS</abbr>-請求" +msgid "Down" +msgstr "" + msgid "Download and install package" msgstr "下載並安è£è»Ÿé«”包" @@ -1060,6 +1054,9 @@ msgstr "" msgid "Enable this mount" msgstr "啟用掛載點" +msgid "Enable this network" +msgstr "" + msgid "Enable this swap" msgstr "啟用swap功能" @@ -1092,6 +1089,12 @@ msgstr "" msgid "Endpoint Port" msgstr "" +msgid "Enter custom value" +msgstr "" + +msgid "Enter custom values" +msgstr "" + msgid "Erasing..." msgstr "刪除ä¸..." @@ -1275,7 +1278,7 @@ msgstr "剩餘空間" msgid "" "Further information about WireGuard interfaces and peers at <a href=\"http://" -"wireguard.io\">wireguard.io</a>." +"wireguard.com\">wireguard.com</a>." msgstr "" msgid "GHz" @@ -2557,10 +2560,8 @@ msgstr "" msgid "" "Really delete this interface? The deletion cannot be undone! You might lose " -"access to this device if you are connected via this interface." +"access to this device if you are connected via this interface" msgstr "" -"真的è¦åˆªé™¤é€™ä»‹é¢?無法復元刪除!\n" -"å‡å¦‚您è¦é€éŽé€™å€‹ä»‹é¢é€£ç·šæ‚¨å¯èƒ½æœƒç„¡æ³•å˜å–這個è¨å‚™." msgid "" "Really delete this wireless network? The deletion cannot be undone! You " @@ -2572,13 +2573,10 @@ msgstr "" msgid "Really reset all changes?" msgstr "確定è¦é‡ç½®å›žå¾©åŽŸå» ?" -#, fuzzy msgid "" "Really shut down network? You might lose access to this device if you are " -"connected via this interface." +"connected via this interface" msgstr "" -"真的è¦åˆªé™¤é€™å€‹ç¶²è·¯ ?\n" -"å‡å¦‚您是é€éŽé€™å€‹ä»‹é¢é€£ç·šæ‚¨å¯èƒ½æœƒç„¡æ³•å˜å–這個è¨å‚™." msgid "" "Really shutdown interface \"%s\"? You might lose access to this device if " @@ -2723,6 +2721,9 @@ msgstr "é‡å•Ÿ" msgid "Restart Firewall" msgstr "é‡å•Ÿé˜²ç«ç‰†" +msgid "Restore" +msgstr "還原" + msgid "Restore backup" msgstr "還原之å‰å‚™ä»½è¨å®š" @@ -2921,9 +2922,6 @@ msgstr "" "抱æ‰, 沒有sysupgrade支æ´å‡ºç¾, æ–°ç‰ˆéŸŒé«”æ˜ åƒæª”å¿…é ˆæ‰‹å‹•æ›´æ–°. 請回æ¸wiki找尋特定" "è¨å‚™å®‰è£æŒ‡å¼•." -msgid "Sort" -msgstr "分類" - msgid "Source" msgstr "來æº" @@ -3125,6 +3123,9 @@ msgstr "" "所å…許的å—元是: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> and " "<code>_</code>" +msgid "The backup archive does not appear to be a valid gzip file." +msgstr "" + msgid "The configuration file could not be loaded due to the following error:" msgstr "" @@ -3326,8 +3327,11 @@ msgstr "時å€" msgid "" "To restore configuration files, you can upload a previously generated backup " -"archive here." -msgstr "è¦å¾©å…ƒè¨å®šæª”, å¯ä»¥ä¸Šå‚³ä¹‹å‰è£½ä½œçš„備份壓縮檔放這." +"archive here. To reset the firmware to its initial state, click \"Perform " +"reset\" (only possible with squashfs images)." +msgstr "" +"è¦å¾©å…ƒè¨å®šæª”, å¯ä»¥ä¸Šå‚³ä¹‹å‰è£½ä½œçš„備份壓縮檔放這. è¦é‡ç½®å›žå¾©å‡ºå» 值,按下\"執行還" +"原\"(å¯èƒ½åªå°squashfså½±åƒæª”有效)" msgid "Tone" msgstr "" @@ -3419,6 +3423,9 @@ msgstr "尚未å˜æª”的修改" msgid "Unsupported protocol type." msgstr "ä¸æ”¯æ´çš„å”定型態" +msgid "Up" +msgstr "" + msgid "Update lists" msgstr "上傳清單" @@ -3717,9 +3724,6 @@ msgstr "全雙工" msgid "half-duplex" msgstr "åŠé›™å·¥" -msgid "help" -msgstr "幫助" - msgid "hidden" msgstr "éš±è—" @@ -3822,6 +3826,33 @@ msgstr "是的" msgid "« Back" msgstr "« 倒退" +#~ msgid "DHCP Leases" +#~ msgstr "DHCP的釋放週期" + +#~ msgid "DHCPv6 Leases" +#~ msgstr "DHCPv6版釋放時間週期" + +#~ msgid "" +#~ "Really delete this interface? The deletion cannot be undone! You might " +#~ "lose access to this device if you are connected via this interface." +#~ msgstr "" +#~ "真的è¦åˆªé™¤é€™ä»‹é¢?無法復元刪除!\n" +#~ "å‡å¦‚您è¦é€éŽé€™å€‹ä»‹é¢é€£ç·šæ‚¨å¯èƒ½æœƒç„¡æ³•å˜å–這個è¨å‚™." + +#, fuzzy +#~ msgid "" +#~ "Really shut down network? You might lose access to this device if you are " +#~ "connected via this interface." +#~ msgstr "" +#~ "真的è¦åˆªé™¤é€™å€‹ç¶²è·¯ ?\n" +#~ "å‡å¦‚您是é€éŽé€™å€‹ä»‹é¢é€£ç·šæ‚¨å¯èƒ½æœƒç„¡æ³•å˜å–這個è¨å‚™." + +#~ msgid "Sort" +#~ msgstr "分類" + +#~ msgid "help" +#~ msgstr "幫助" + #~ msgid "IPv4 WAN Status" #~ msgstr "IPv4å¯¬é »é€£ç·šç‹€æ…‹" diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua index a26d3d14e1..e04a964dd7 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua @@ -43,6 +43,9 @@ function index() end) if has_wifi then + page = entry({"admin", "network", "wireless_assoclist"}, call("wifi_assoclist"), nil) + page.leaf = true + page = entry({"admin", "network", "wireless_join"}, post("wifi_join"), nil) page.leaf = true @@ -372,6 +375,13 @@ function wifi_shutdown(wnet) wifi_reconnect_shutdown(true, wnet) end +function wifi_assoclist() + local s = require "luci.tools.status" + + luci.http.prepare_content("application/json") + luci.http.write_json(s.wifi_assoclist()) +end + function lease_status() local s = require "luci.tools.status" diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua index 6fcd66f441..153615b58a 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua @@ -74,7 +74,7 @@ function action_packages() local out, err -- Display - local display = luci.http.formvalue("display") or "installed" + local display = luci.http.formvalue("display") or "available" -- Letter local letter = string.byte(luci.http.formvalue("letter") or "A", 1) @@ -341,9 +341,17 @@ function action_restore() local upload = http.formvalue("archive") if upload and #upload > 0 then - luci.template.render("admin_system/applyreboot") - os.execute("tar -C / -xzf %q >/dev/null 2>&1" % archive_tmp) - luci.sys.reboot() + if os.execute("gunzip -t %q >/dev/null 2>&1" % archive_tmp) == 0 then + luci.template.render("admin_system/applyreboot") + os.execute("tar -C / -xzf %q >/dev/null 2>&1" % archive_tmp) + luci.sys.reboot() + else + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade(), + backup_invalid = true + }) + end return end diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua index b52dff13ac..3e46628d3f 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua @@ -260,7 +260,7 @@ m.uci:foreach("network", "switch", end - local vid = s:option(Value, has_vlan4k or "vlan", "VLAN ID", "<div id='portstatus-%s'></div>" % switch_name) + local vid = s:option(Value, has_vlan4k or "vlan", "VLAN ID") local mx_vid = has_vlan4k and 4094 or (num_vlans - 1) vid.rmempty = false @@ -333,7 +333,7 @@ m.uci:foreach("network", "switch", local _, pt for _, pt in ipairs(topo.ports) do - local po = s:option(ListValue, tostring(pt.num), pt.label, '<div id="portstatus-%s-%d"></div>' %{ switch_name, pt.num }) + local po = s:option(ListValue, tostring(pt.num), pt.label) po:value("", translate("off")) diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/admin.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/admin.lua index 493a735bde..6c1c1235c5 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/admin.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/admin.lua @@ -104,16 +104,17 @@ end keys = s2:option(TextValue, "_data", "") keys.wrap = "off" keys.rows = 3 -keys.rmempty = false function keys.cfgvalue() return fs.readfile("/etc/dropbear/authorized_keys") or "" end function keys.write(self, section, value) - if value then - fs.writefile("/etc/dropbear/authorized_keys", value:gsub("\r\n", "\n")) - end + return fs.writefile("/etc/dropbear/authorized_keys", value:gsub("\r\n", "\n")) +end + +function keys.remove(self, section, value) + return fs.writefile("/etc/dropbear/authorized_keys", "") end end diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm index f4adb26069..5607e59dfb 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm @@ -61,55 +61,54 @@ local route_host = luci.config.diag and luci.config.diag.route or "dev.openwrt.o <div class="cbi-map"> <h2 name="content"><%:Diagnostics%></h2> - <fieldset class="cbi-section"> + <div class="cbi-section"> <legend><%:Network Utilities%></legend> - <br /> - - <div style="width:30%; float:left"> - <input style="margin: 5px 0" type="text" value="<%=ping_host%>" name="ping" /><br /> - <% if has_ping6 then %> - <select name="ping_proto" style="width:auto"> - <option value="" selected="selected"><%:IPv4%></option> - <option value="6"><%:IPv6%></option> - </select> - <input type="button" value="<%:Ping%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.ping, this.form.ping_proto.selectedIndex)" /> - <% else %> - <input type="button" value="<%:Ping%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.ping)" /> - <% end %> + <div class="table"> + <div class="tr"> + <div class="td left"> + <input style="margin: 5px 0" type="text" value="<%=ping_host%>" name="ping" /><br /> + <% if has_ping6 then %> + <select name="ping_proto" style="width:auto"> + <option value="" selected="selected"><%:IPv4%></option> + <option value="6"><%:IPv6%></option> + </select> + <input type="button" value="<%:Ping%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.ping, this.form.ping_proto.selectedIndex)" /> + <% else %> + <input type="button" value="<%:Ping%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.ping)" /> + <% end %> + </div> + + <div class="td left"> + <input style="margin: 5px 0" type="text" value="<%=route_host%>" name="traceroute" /><br /> + <% if has_traceroute6 then %> + <select name="traceroute_proto" style="width:auto"> + <option value="" selected="selected"><%:IPv4%></option> + <option value="6"><%:IPv6%></option> + </select> + <input type="button" value="<%:Traceroute%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.traceroute, this.form.traceroute_proto.selectedIndex)" /> + <% else %> + <input type="button" value="<%:Traceroute%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.traceroute)" /> + <% end %> + <% if not has_traceroute6 then %> + <p> </p> + <p><%:Install iputils-traceroute6 for IPv6 traceroute%></p> + <% end %> + </div> + + <div class="td left"> + <input style="margin: 5px 0" type="text" value="<%=dns_host%>" name="nslookup" /><br /> + <input type="button" value="<%:Nslookup%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.nslookup)" /> + </div> + </div> </div> - - <div style="width:33%; float:left"> - <input style="margin: 5px 0" type="text" value="<%=route_host%>" name="traceroute" /><br /> - <% if has_traceroute6 then %> - <select name="traceroute_proto" style="width:auto"> - <option value="" selected="selected"><%:IPv4%></option> - <option value="6"><%:IPv6%></option> - </select> - <input type="button" value="<%:Traceroute%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.traceroute, this.form.traceroute_proto.selectedIndex)" /> - <% else %> - <input type="button" value="<%:Traceroute%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.traceroute)" /> - <% end %> - <% if not has_traceroute6 then %> - <p> </p> - <p><%:Install iputils-traceroute6 for IPv6 traceroute%></p> - <% end %> - </div> - - <div style="width:33%; float:left;"> - <input style="margin: 5px 0" type="text" value="<%=dns_host%>" name="nslookup" /><br /> - <input type="button" value="<%:Nslookup%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.nslookup)" /> - </div> - - <br style="clear:both" /><br /> - - </fieldset> + </div> </div> - <fieldset class="cbi-section" style="display:none"> - <legend id="diag-rc-legend"><%:Collecting data...%></legend> + <div class="cbi-section" style="display:none"> + <strong id="diag-rc-legend"></strong> <span id="diag-rc-output"></span> - </fieldset> + </div> </form> <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm index 420e5879fa..473e2275ce 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm @@ -67,7 +67,7 @@ } function iface_delete(id) { - if (!confirm(<%=luci.http.write_json(translate('Really delete this interface? The deletion cannot be undone! You might lose access to this device if you are connected via this interface.'))%>)) + if (!confirm(<%=luci.http.write_json(translate('Really delete this interface? The deletion cannot be undone! You might lose access to this device if you are connected via this interface'))%>)) return; (new XHR()).post('<%=url('admin/network/iface_delete')%>/' + id, { token: '<%=token%>' }, @@ -141,8 +141,8 @@ } html += String.format( - '<strong><%:RX%></strong>: %.2mB (%d <%:Pkts.%>)<br />' + - '<strong><%:TX%></strong>: %.2mB (%d <%:Pkts.%>)<br />', + '<strong><%:RX%>:</strong> %.2mB (%d <%:Pkts.%>)<br />' + + '<strong><%:TX%>:</strong> %.2mB (%d <%:Pkts.%>)<br />', ifc.rx_bytes, ifc.rx_packets, ifc.tx_bytes, ifc.tx_packets ); @@ -209,46 +209,43 @@ </fieldset> <div class="cbi-map"> - <fieldset class="cbi-section"> + <div class="cbi-section"> <legend><%:Interface Overview%></legend> - <div class="table cbi-section-table" style="margin:10px; empty-cells:hide"> - <div class="tr cbi-section-table-titles"> - <div class="th"><%:Network%></div> - <div class="th left"><%:Status%></div> - <div class="th"><%:Actions%></div> - </div> - <% - for i, net in ipairs(netlist) do - local z = net[3] - local c = z and z:get_color() or "#EEEEEE" - local t = z and translate("Part of zone %q" % z:name()) or translate("No zone assigned") - %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=i % 2 + 1%>"> - <div class="td"> - <div class="ifacebox"> - <div class="ifacebox-head" style="background-color:<%=c%>" title="<%=pcdata(t)%>"> - <strong><%=net[1]:upper()%></strong> - </div> - <div class="ifacebox-body" id="<%=net[1]%>-ifc-devices"> - <img src="<%=resource%>/icons/ethernet_disabled.png" style="width:16px; height:16px" /><br /> - <small>?</small> + <div class="cbi-section-node"> + <div class="table"> + <% + for i, net in ipairs(netlist) do + local z = net[3] + local c = z and z:get_color() or "#EEEEEE" + local t = z and translate("Part of zone %q" % z:name()) or translate("No zone assigned") + %> + <div class="tr cbi-rowstyle-<%=i % 2 + 1%>"> + <div class="td col-3 center middle"> + <div class="ifacebox"> + <div class="ifacebox-head" style="background-color:<%=c%>" title="<%=pcdata(t)%>"> + <strong><%=net[1]:upper()%></strong> + </div> + <div class="ifacebox-body" id="<%=net[1]%>-ifc-devices"> + <img src="<%=resource%>/icons/ethernet_disabled.png" style="width:16px; height:16px" /><br /> + <small>?</small> + </div> </div> </div> + <div class="td col-5 left" id="<%=net[1]%>-ifc-description"> + <em><%:Collecting data...%></em> + </div> + <div class="td cbi-section-actions"> + <input type="button" class="cbi-button cbi-button-neutral" onclick="iface_shutdown('<%=net[1]%>', true)" title="<%:Reconnect this interface%>" value="<%:Connect%>" /> + <input type="button" class="cbi-button cbi-button-neutral" onclick="iface_shutdown('<%=net[1]%>', false)" title="<%:Shutdown this interface%>" value="<%:Stop%>" /> + <input type="button" class="cbi-button cbi-button-action important" onclick="location.href='<%=url("admin/network/network", net[1])%>'" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> + <input type="button" class="cbi-button cbi-button-negative" onclick="iface_delete('<%=net[1]%>')" value="<%:Delete%>" /> + </div> </div> - <div class="td left" id="<%=net[1]%>-ifc-description"> - <em><%:Collecting data...%></em> - </div> - <div class="td"> - <input type="button" class="cbi-button cbi-button-reload" style="width:100px" onclick="iface_shutdown('<%=net[1]%>', true)" title="<%:Reconnect this interface%>" value="<%:Connect%>" /> - <input type="button" class="cbi-button cbi-button-reset" style="width:100px" onclick="iface_shutdown('<%=net[1]%>', false)" title="<%:Shutdown this interface%>" value="<%:Stop%>" /> - <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=url("admin/network/network", net[1])%>'" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> - <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="iface_delete('<%=net[1]%>')" value="<%:Delete%>" /> - </div> - </div> - <% end %> + <% end %> + </div> </div> <input type="button" class="cbi-button cbi-button-add" value="<%:Add new interface...%>" onclick="location.href='<%=url("admin/network/iface_add")%>'" /> - </fieldset> + </div> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm index 58f5400da7..9c5173dae2 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm @@ -6,29 +6,18 @@ { if (ifc && (ifc = ifc[0])) { - var html = ''; + var s = document.getElementById('<%=self.option%>-ifc-status'), + img = s.querySelector('img'), + info = s.querySelector('span'), + html = '<strong><%:Device%>:</strong> %h<br />'.format(ifc.ifname); - var s = document.getElementById('<%=self.option%>-ifc-signal'); - if (s) - s.innerHTML = String.format( - '<img src="<%=resource%>/icons/%s%s.png" style="width:16px; height:16px" />' + - '<br /><small>%s</small>', - ifc.type, ifc.is_up ? '' : '_disabled', - ifc.name - ); - - var d = document.getElementById('<%=self.option%>-ifc-description'); - if (d && ifc.ifname) + if (ifc.ifname) { if (ifc.is_up) - { html += String.format('<strong><%:Uptime%>:</strong> %t<br />', ifc.uptime); - } if (ifc.macaddr) - { html += String.format('<strong><%:MAC-Address%>:</strong> %s<br />', ifc.macaddr); - } html += String.format( '<strong><%:RX%></strong>: %.2mB (%d <%:Pkts.%>)<br />' + @@ -38,50 +27,40 @@ ); if (ifc.ipaddrs && ifc.ipaddrs.length) - { for (var i = 0; i < ifc.ipaddrs.length; i++) html += String.format( '<strong><%:IPv4%>:</strong> %s<br />', ifc.ipaddrs[i] ); - } if (ifc.ip6addrs && ifc.ip6addrs.length) - { for (var i = 0; i < ifc.ip6addrs.length; i++) html += String.format( '<strong><%:IPv6%>:</strong> %s<br />', ifc.ip6addrs[i] ); - } - + if (ifc.ip6prefix) - { html += String.format('<strong><%:IPv6-PD%>:</strong> %s<br />', ifc.ip6prefix); - } - d.innerHTML = html; + info.innerHTML = html; } - else if (d) + else { - d.innerHTML = '<em><%:Interface not present or not connected yet.%></em>'; + info.innerHTML = '<em><%:Interface not present or not connected yet.%></em>'; } + + img.src = '<%=resource%>/icons/%s%s.png'.format(ifc.type, ifc.is_up ? '' : '_disabled'); } } ); //]]></script> -<div class="table"> - <div class="tr cbi-section-table"> - <div class="td"></div> - <div class="td cbi-value-field" style="min-width:16px; padding:3px; text-align:center" id="<%=self.option%>-ifc-signal"> - <img src="<%=resource%>/icons/ethernet_disabled.png" style="width:16px; height:16px" /><br /> - <small>?</small> - </div> - <div class="td cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px" id="<%=self.option%>-ifc-description"> - <em><%:Collecting data...%></em> - </div> - </div> -</div> +<span class="ifacebadge large" id="<%=self.option%>-ifc-status"> + <img src="<%=resource%>/icons/ethernet_disabled.png" /> + <span> + <em><%:Collecting data...%></em> + </span> +</span> <%+cbi/valuefooter%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm index 9005279a4e..8fbbdc9477 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm @@ -1,27 +1,11 @@ <script type="text/javascript">//<![CDATA[ - function duid2mac(duid) { - // DUID-LLT / Ethernet - if (duid.length === 28 && duid.substr(0, 8) === '00010001') - return duid.substr(16).replace(/(..)(?=..)/g, '$1:').toUpperCase(); - - // DUID-LL / Ethernet - if (duid.length === 20 && duid.substr(0, 8) === '00030001') - return duid.substr(8).replace(/(..)(?=..)/g, '$1:').toUpperCase(); - - return null; - } - - var hosts = <%=luci.http.write_json(luci.sys.net.host_hints())%>; - XHR.poll(5, '<%=url('admin/network/dhcplease_status')%>', null, function(x, st) { var tb = document.getElementById('lease_status_table'); if (st && st[0] && tb) { - /* clear all rows */ - while (tb.firstElementChild !== tb.lastElementChild) - tb.removeChild(tb.lastElementChild); + var rows = []; for (var i = 0; i < st[0].length; i++) { @@ -34,16 +18,15 @@ else timestr = String.format('%t', st[0][i].expires); - tb.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ - E('<div class="td">', st[0][i].hostname || '?'), - E('<div class="td">', st[0][i].ipaddr), - E('<div class="td">', st[0][i].macaddr), - E('<div class="td">', timestr) - ])); + rows.push([ + st[0][i].hostname || '?', + st[0][i].ipaddr, + st[0][i].macaddr, + timestr + ]); } - if (tb.firstElementChild === tb.lastElementChild) - tb.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>')); + cbi_update_table(tb, rows, '<em><%:There are no active leases.%></em>'); } var tb6 = document.getElementById('lease6_status_table'); @@ -51,9 +34,7 @@ { tb6.parentNode.style.display = 'block'; - /* clear all rows */ - while (tb6.firstElementChild !== tb6.lastElementChild) - tb6.removeChild(tb6.lastElementChild); + var rows = []; for (var i = 0; i < st[1].length; i++) { @@ -66,60 +47,49 @@ else timestr = String.format('%t', st[1][i].expires); - var host = hosts[duid2mac(st[1][i].duid)], - name = st[1][i].hostname, - hint = null; - - if (!name) { - if (host) - hint = host.name || host.ipv4 || host.ipv6; - } - else { - if (host && host.name && st[1][i].hostname != host.name) - hint = host.name; - } + var name = st[1][i].hostname, + hint = st[1][i].host_hint; - tb6.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d" style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">'.format((i % 2) + 1), [ - E('<div class="td">', hint ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">%h (%h)</div>'.format(name || '?', hint) : (name || '?')), - E('<div class="td">', st[1][i].ip6addr), - E('<div class="td">', st[1][i].duid), - E('<div class="td">', timestr) - ])); + rows.push([ + hint ? '%h (%h)'.format(name || '?', hint) : (name || '?'), + st[1][i].ip6addr, + st[1][i].duid, + timestr + ]); } - if (tb6.firstElementChild === tb6.lastElementChild) - tb6.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>')); + cbi_update_table(tb6, rows, '<em><%:There are no active leases.%></em>'); } } ); //]]></script> -<fieldset class="cbi-section"> - <legend><%:Active DHCP Leases%></legend> - <div class="table cbi-section-table" id="lease_status_table"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell"><%:Hostname%></div> - <div class="th cbi-section-table-cell"><%:IPv4-Address%></div> - <div class="th cbi-section-table-cell"><%:MAC-Address%></div> - <div class="th cbi-section-table-cell"><%:Leasetime remaining%></div> +<div class="cbi-section"> + <h3><%:Active DHCP Leases%></h3> + <div class="table" id="lease_status_table"> + <div class="tr table-titles"> + <div class="th"><%:Hostname%></div> + <div class="th"><%:IPv4-Address%></div> + <div class="th"><%:MAC-Address%></div> + <div class="th"><%:Leasetime remaining%></div> </div> - <div class="tr cbi-section-table-row"> - <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div> + <div class="tr placeholder"> + <div class="td"><em><%:Collecting data...%></em></div> </div> </div> -</fieldset> - -<fieldset class="cbi-section" style="display:none"> - <legend><%:Active DHCPv6 Leases%></legend> - <div class="table cbi-section-table" id="lease6_status_table"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell"><%:Host%></div> - <div class="th cbi-section-table-cell"><%:IPv6-Address%></div> - <div class="th cbi-section-table-cell"><%:DUID%></div> - <div class="th cbi-section-table-cell"><%:Leasetime remaining%></div> +</div> + +<div class="cbi-section" style="display:none"> + <h3><%:Active DHCPv6 Leases%></h3> + <div class="table" id="lease6_status_table"> + <div class="tr table-titles"> + <div class="th"><%:Host%></div> + <div class="th"><%:IPv6-Address%></div> + <div class="th"><%:DUID%></div> + <div class="th"><%:Leasetime remaining%></div> </div> - <div class="tr cbi-section-table-row"> - <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div> + <div class="tr placeholder"> + <div class="td"><em><%:Collecting data...%></em></div> </div> </div> -</fieldset> +</div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm index 96fbffdb02..68f0bbc9d4 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm @@ -1,21 +1,39 @@ <script type="text/javascript">//<![CDATA[ - var switches = [ '<%=table.concat(self.switches, "', '")%>' ]; + var switches = [ '<%=table.concat(self.switches, "', '")%>' ], + tables = document.querySelectorAll('.cbi-section-table'); + + function add_status_row(table) { + var first_row = table.querySelector('.cbi-section-table-row'); + if (first_row.classList.contains('port-status')) + return first_row; + + var status_row = first_row.parentNode.insertBefore( + E('div', { 'class': first_row.className }), first_row); + + first_row.querySelectorAll('.td').forEach(function(td) { + status_row.appendChild(td.cloneNode(false)); + status_row.lastElementChild.removeAttribute('data-title'); + }); + + status_row.firstElementChild.innerHTML = '<%:Port status:%>'; + status_row.classList.add('port-status') ; + + return status_row; + } + XHR.poll(5, '<%=url('admin/network/switch_status')%>/' + switches.join(','), null, function(x, st) { for (var i = 0; i < switches.length; i++) { var ports = st[switches[i]]; - var th0 = document.getElementById('portstatus-' + switches[i]); + var tr = add_status_row(tables[i]); - if (th0 && ports && ports.length) + if (tr && ports && ports.length) { - if (!th0.innerHTML) - th0.innerHTML = '<%:Port status:%>'; - for (var j = 0; j < ports.length; j++) { - var th = document.getElementById('portstatus-' + switches[i] + '-' + j); + var th = tr.querySelector('[data-name="%d"]'.format(j)); if (!th) continue; diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_assoclist.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_assoclist.htm new file mode 100644 index 0000000000..b6f84c0607 --- /dev/null +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_assoclist.htm @@ -0,0 +1,82 @@ +<script type="text/javascript">//<![CDATA[ + function wifirate(bss, rx) { + var p = rx ? 'rx_' : 'tx_', + s = '%.1f <%:Mbit/s%>, %d<%:MHz%>' + .format(bss[p+'rate'] / 1000, bss[p+'mhz']), + ht = bss[p+'ht'], vht = bss[p+'vht'], + mhz = bss[p+'mhz'], nss = bss[p+'nss'], + mcs = bss[p+'mcs'], sgi = bss[p+'short_gi']; + + if (ht || vht) { + if (vht) s += ', VHT-MCS %d'.format(mcs); + if (nss) s += ', VHT-NSS %d'.format(nss); + if (ht) s += ', MCS %s'.format(mcs); + if (sgi) s += ', <%:Short GI%>'; + } + + return s; + } + + XHR.poll(5, '<%=url('admin/network/wireless_assoclist')%>', null, + function(x, st) + { + var tb = document.getElementById('wifi_assoclist_table'); + if (st && tb) + { + var rows = []; + + st.forEach(function(bss) { + var icon; + var q = (-1 * (bss.noise - bss.signal)) / 5; + if (q < 1) + icon = "<%=resource%>/icons/signal-0.png"; + else if (q < 2) + icon = "<%=resource%>/icons/signal-0-25.png"; + else if (q < 3) + icon = "<%=resource%>/icons/signal-25-50.png"; + else if (q < 4) + icon = "<%=resource%>/icons/signal-50-75.png"; + else + icon = "<%=resource%>/icons/signal-75-100.png"; + + rows.push([ + '<span class="ifacebadge" title="%q"><img src="<%=resource%>/icons/wifi.png" /> <a href="%s">%h</a><small> (%h)</small></span>'.format( + bss.radio, + bss.link, + bss.name, + bss.ifname), + bss.bssid, + bss.host_hint ? '%h (%h)'.format(bss.host_name || '?', bss.host_hint) : (bss.host_name || '?'), + '<span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%> / <%:SNR%>: %d"><img src="%s" /> %d / %d <%:dBm%></span>'.format( + bss.signal, + bss.noise, + bss.signal - bss.noise, + icon, + bss.signal, + bss.noise), + E('span', {}, [ + E('span', wifirate(bss, true)), + E('br'), + E('span', wifirate(bss, false)) + ]) + ]); + }); + + cbi_update_table(tb, rows, '<em><%:No information available%></em>'); + } + } + ); +//]]></script> + +<div class="table" id="wifi_assoclist_table"> + <div class="tr table-titles"> + <div class="th nowrap"><%:Network%></div> + <div class="th hide-xs"><%:MAC-Address%></div> + <div class="th nowrap"><%:Host%></div> + <div class="th nowrap"><%:Signal%> / <%:Noise%></div> + <div class="th nowrap"><%:RX Rate%> / <%:TX Rate%></div> + </div> + <div class="tr placeholder"> + <div class="td"><em><%:Collecting data...%></em></div> + </div> +</div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm index e9cfb3e85b..9b93942c88 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm @@ -90,25 +90,43 @@ <h2 name="content"><%:Join Network: Wireless Scan%></h2> <div class="cbi-map"> - <fieldset class="cbi-section"> - <div class="table cbi-section-table" style="empty-cells:hide"> + <div class="cbi-section"> + <div class="table"> + <div class="tr table-titles"> + <div class="th col-1 center"><%:Signal%></div> + <div class="th col-5 left"><%:SSID%></div> + <div class="th col-2 center"><%:Channel%></div> + <div class="th col-2 left"><%:Mode%></div> + <div class="th col-3 left"><%:BSSID%></div> + <div class="th col-2 left"><%:Encryption%></div> + <div class="th cbi-section-actions"> </div> + </div> + <!-- scan list --> <% for i, net in ipairs(scanlist(3)) do net.encryption = net.encryption or { } %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=1 + ((i-1) % 2)%>"> - <div class="td cbi-value-field" style="width:16px; padding:3px"> + <div class="tr cbi-rowstyle-<%=1 + ((i-1) % 2)%>"> + <div class="td col-1 center"> <abbr title="<%:Signal%>: <%=net.signal%> <%:dB%> / <%:Quality%>: <%=net.quality%>/<%=net.quality_max%>"> <img src="<%=guess_wifi_signal(net)%>" /><br /> <small><%=percent_wifi_signal(net)%>%</small> </abbr> </div> - <div class="td cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px"> - <big><strong><%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%></strong></big><br /> - <strong>Channel:</strong> <%=net.channel%> | - <strong>Mode:</strong> <%=net.mode%> | - <strong>BSSID:</strong> <%=net.bssid%> | - <strong>Encryption:</strong> <%=format_wifi_encryption(net.encryption)%> + <div class="td col-5 left" data-title="<%:SSID%>"> + <strong><%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%></strong> + </div> + <div class="td col-2 center" data-title="<%:Channel%>"> + <%=net.channel%> + </div> + <div class="td col-2 left" data-title="<%:Mode%>"> + <%=net.mode%> + </div> + <div class="td col-3 left" data-title="<%:BSSID%>"> + <%=net.bssid%> + </div> + <div class="td col-2 left" data-title="<%:Encryption%>"> + <%=format_wifi_encryption(net.encryption)%> </div> - <div class="td cbi-value-field" style="width:40px"> + <div class="td cbi-section-actions"> <form action="<%=url('admin/network/wireless_join')%>" method="post"> <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>" /> @@ -126,23 +144,23 @@ <input type="hidden" name="clbridge" value="<%=iw.type == "wl" and 1 or 0%>" /> - <input class="cbi-button cbi-button-apply" type="submit" value="<%:Join Network%>" /> + <input class="cbi-button cbi-button-action important" type="submit" value="<%:Join Network%>" /> </form> </div> </div> <% end %> <!-- /scan list --> </div> - </fieldset> + </div> </div> <div class="cbi-page-actions right"> <form class="inline" action="<%=url("admin/network/wireless")%>" method="get"> - <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>" /> + <input class="cbi-button cbi-button-neutral" type="submit" value="<%:Back to overview%>" /> </form> <form class="inline" action="<%=url('admin/network/wireless_join')%>" method="post"> <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>" /> - <input class="cbi-button cbi-input-find" type="submit" value="<%:Repeat scan%>" /> + <input class="cbi-button cbi-button-action" type="submit" value="<%:Repeat scan%>" /> </form> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm index ceb810018b..b9602785f4 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm @@ -113,32 +113,10 @@ var is_reconnecting = false; - function nowrap(s) { - return s.replace(/ /g, ' '); - } - - function wifirate(bss, rx) { - var p = rx ? 'rx_' : 'tx_', - s = '%.1f <%:Mbit/s%>, %d<%:MHz%>' - .format(bss[p+'rate'] / 1000, bss[p+'mhz']), - ht = bss[p+'ht'], vht = bss[p+'vht'], - mhz = bss[p+'mhz'], nss = bss[p+'nss'], - mcs = bss[p+'mcs'], sgi = bss[p+'short_gi']; - - if (ht || vht) { - if (vht) s += ', VHT-MCS %d'.format(mcs); - if (nss) s += ', VHT-NSS %d'.format(nss); - if (ht) s += ', MCS %s'.format(mcs); - if (sgi) s += ', <%:Short GI%>'; - } - - return s; - } - function wifi_shutdown(id, toggle) { var reconnect = (toggle.getAttribute('active') == 'false'); - if (!reconnect && !confirm(<%=luci.http.write_json(translate('Really shut down network? You might lose access to this device if you are connected via this interface.'))%>)) + if (!reconnect && !confirm(<%=luci.http.write_json(translate('Really shut down network? You might lose access to this device if you are connected via this interface'))%>)) return; is_reconnecting = true; @@ -193,20 +171,25 @@ { if (st) { - var assoctable = document.getElementById('iw-assoclist'); - if (assoctable) - while (assoctable.firstElementChild !== assoctable.lastElementChild) - assoctable.removeChild(assoctable.lastElementChild); - - var devup = { }; var rowstyle = 1; + var radiostate = { }; + + st.forEach(function(s) { + var r = radiostate[wifidevs[s.id]] || (radiostate[wifidevs[s.id]] = {}); + + s.is_assoc = (s.bssid && s.bssid != '00:00:00:00:00:00' && s.channel && s.mode != 'Unknown' && !s.disabled); + + r.up = r.up || s.is_assoc; + r.channel = r.channel || s.channel; + r.bitrate = r.bitrate || s.bitrate; + r.frequency = r.frequency || s.frequency; + }); for( var i = 0; i < st.length; i++ ) { var iw = st[i]; - var is_assoc = (iw.bssid && iw.bssid != '00:00:00:00:00:00' && iw.channel && iw.mode != 'Unknown' && !iw.disabled); var p = iw.quality; - var q = is_assoc ? p : -1; + var q = iw.is_assoc ? p : -1; var icon; if (q < 0) @@ -222,9 +205,6 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - if (!devup[wifidevs[iw.id]]) - devup[wifidevs[iw.id]] = is_assoc; - var sig = document.getElementById(iw.id + '-iw-signal'); if (sig) sig.innerHTML = String.format( @@ -237,13 +217,13 @@ { if (!iw.disabled) { - toggle.className = 'cbi-button cbi-button-reset'; + toggle.className = 'cbi-button cbi-button-neutral'; toggle.value = '<%:Disable%>'; toggle.title = '<%:Shutdown this network%>'; } else { - toggle.className = 'cbi-button cbi-button-reload'; + toggle.className = 'cbi-button cbi-button-neutral'; toggle.value = '<%:Enable%>'; toggle.title = '<%:Activate this network%>'; } @@ -254,7 +234,7 @@ var info = document.getElementById(iw.id + '-iw-status'); if (info) { - if (is_assoc) + if (iw.is_assoc) info.innerHTML = String.format( '<strong><%:SSID%>:</strong> %h | ' + '<strong><%:Mode%>:</strong> %s<br />' + @@ -274,83 +254,23 @@ : '<em><%:Wireless is disabled or not associated%></em>' ); } - - var dev = document.getElementById(wifidevs[iw.id] + '-iw-devinfo'); - if (dev) - { - if (is_assoc) - dev.innerHTML = String.format( - '<strong><%:Channel%>:</strong> %s (%s <%:GHz%>) | ' + - '<strong><%:Bitrate%>:</strong> %s <%:Mbit/s%>', - iw.channel ? iw.channel : '?', - iw.frequency ? iw.frequency : '?', - iw.bitrate ? iw.bitrate : '?' - ); - else - dev.innerHTML = ''; - } - - if (assoctable) - { - var assoclist = [ ]; - for (var bssid in iw.assoclist) - { - assoclist.push(iw.assoclist[bssid]); - assoclist[assoclist.length-1].bssid = bssid; - } - - assoclist.sort(function(a, b) { a.bssid < b.bssid }); - - for (var j = 0; j < assoclist.length; j++) - { - var icon; - var q = (-1 * (assoclist[j].noise - assoclist[j].signal)) / 5; - if (q < 1) - icon = "<%=resource%>/icons/signal-0.png"; - else if (q < 2) - icon = "<%=resource%>/icons/signal-0-25.png"; - else if (q < 3) - icon = "<%=resource%>/icons/signal-25-50.png"; - else if (q < 4) - icon = "<%=resource%>/icons/signal-50-75.png"; - else - icon = "<%=resource%>/icons/signal-75-100.png"; - - var host = hosts[assoclist[j].bssid], - name = host ? (host.name || host.ipv4 || host.ipv6) : null, - hint = (host && host.name && (host.ipv4 || host.ipv6)) ? (host.ipv4 || host.ipv6) : null; - - assoctable.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format(rowstyle), [ - E('<div class="td"><span class="ifacebadge" title="%q"><img src="<%=resource%>/icons/wifi.png" /> %h</span></div>' - .format(iw.device.name, iw.ifname)), - E('<div class="td" style="white-space:nowrap">%h</div>' - .format(iw.ssid || '?')), - E('<div class="td">%h</div>' - .format(assoclist[j].bssid)), - E('<div class="td">', hint ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis">%h (%h)</div>' - .format(name || '?', hint) : (name || '?')), - E('<div class="td"><span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%> / <%:SNR%>: %d"><img src="%s" /> %d / %d <%:dBm%></span></div>' - .format(assoclist[j].signal, assoclist[j].noise, assoclist[j].signal - assoclist[j].noise, icon, assoclist[j].signal, assoclist[j].noise)), - E('<div class="td">', [ - E('<span style="white-space:nowrap">', wifirate(assoclist[j], true)), - E('<br />'), - E('<span style="white-space:nowrap">', wifirate(assoclist[j], false)) - ]) - ])); - - rowstyle = (rowstyle == 1) ? 2 : 1; - } - } } - if (assoctable && assoctable.firstElementChild === assoctable.lastElementChild) - assoctable.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:No information available%></em></div></div>')); - - for (var dev in devup) + for (var dev in radiostate) { var img = document.getElementById(dev + '-iw-upstate'); if (img) - img.src = '<%=resource%>/icons/wifi_big' + (devup[dev] ? '' : '_disabled') + '.png'; + img.src = '<%=resource%>/icons/wifi' + (radiostate[dev].up ? '' : '_disabled') + '.png'; + + var stat = document.getElementById(dev + '-iw-devinfo'); + if (stat) + stat.innerHTML = String.format( + '<strong><%:Channel%>:</strong> %s (%s <%:GHz%>) | ' + + '<strong><%:Bitrate%>:</strong> %s <%:Mbit/s%>', + radiostate[dev].channel ? radiostate[dev].channel : '?', + radiostate[dev].frequency ? radiostate[dev].frequency : '?', + radiostate[dev].bitrate ? radiostate[dev].bitrate : '?' + ); } } } @@ -359,37 +279,37 @@ <h2 name="content"><%:Wireless Overview%></h2> -<fieldset class="cbi-section" style="display:none"> +<div class="cbi-section" style="display:none"> <legend><%:Reconnecting interface%></legend> <img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> <span id="iw-rc-status"><%:Waiting for changes to be applied...%></span> -</fieldset> +</div> -<div class="cbi-map"> +<div id="cbi-wireless-overview" class="cbi-map"> <% for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %> <!-- device <%=dev:name()%> --> - <fieldset class="cbi-section"> - <div class="table cbi-section-table" style="margin:10px; empty-cells:hide"> + <div class="cbi-section-node"> + <div class="table"> <!-- physical device --> <div class="tr"> - <div class="td"> - <img src="<%=resource%>/icons/wifi_big_disabled.png" id="<%=dev:name()%>-iw-upstate" /> + <div class="td col-2 center"> + <span class="ifacebadge"><img src="<%=resource%>/icons/wifi_disabled.png" id="<%=dev:name()%>-iw-upstate" /> <%=dev:name()%></span> </div> - <div class="td left"> - <big><strong><%=guess_wifi_hw(dev)%> (<%=dev:name()%>)</strong></big><br /> + <div class="td col-7 left"> + <big><strong><%=guess_wifi_hw(dev)%></strong></big><br /> <span id="<%=dev:name()%>-iw-devinfo"></span> </div> - <div class="td right"> + <div class="td cbi-section-actions"> <form action="<%=url('admin/network/wireless_join')%>" method="post" class="inline"> <input type="hidden" name="device" value="<%=dev:name()%>" /> <input type="hidden" name="token" value="<%=token%>" /> - <input type="submit" class="cbi-button cbi-button-find" style="width:100px" title="<%:Find and join network%>" value="<%:Scan%>" /> + <input type="submit" class="cbi-button cbi-button-action" title="<%:Find and join network%>" value="<%:Scan%>" /> </form> <form action="<%=url('admin/network/wireless_add')%>" method="post" class="inline"> <input type="hidden" name="device" value="<%=dev:name()%>" /> <input type="hidden" name="token" value="<%=token%>" /> - <input type="submit" class="cbi-button cbi-button-add" style="width:100px" title="<%:Provide new network%>" value="<%:Add%>" /> + <input type="submit" class="cbi-button cbi-button-add" title="<%:Provide new network%>" value="<%:Add%>" /> </form> </div> </div> @@ -398,22 +318,22 @@ <!-- network list --> <% if #nets > 0 then %> <% for i, net in ipairs(nets) do %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=1 + ((i-1) % 2)%>"> - <div class="td" id="<%=net:id()%>-iw-signal"> + <div class="tr cbi-rowstyle-<%=1 + ((i-1) % 2)%>"> + <div class="td col-2 center" id="<%=net:id()%>-iw-signal"> <span class="ifacebadge" title="<%:Not associated%>"><img src="<%=resource%>/icons/signal-none.png" /> 0%</span> </div> - <div class="td left" id="<%=net:id()%>-iw-status"> + <div class="td col-7 left" id="<%=net:id()%>-iw-status"> <em><%:Collecting data...%></em> </div> - <div class="td right"> - <input id="<%=net:id()%>-iw-toggle" type="button" class="cbi-button cbi-button-reload" style="width:100px" onclick="wifi_shutdown('<%=net:id()%>', this)" title="<%:Delete this network%>" value="<%:Enable%>" /> - <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=net:adminlink()%>'" title="<%:Edit this network%>" value="<%:Edit%>" /> - <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="wifi_delete('<%=net:id()%>')" title="<%:Delete this network%>" value="<%:Remove%>" /> + <div class="td cbi-section-actions"> + <input id="<%=net:id()%>-iw-toggle" type="button" class="cbi-button cbi-button-neutral" onclick="wifi_shutdown('<%=net:id()%>', this)" title="<%:Enable this network%>" value="<%:Enable%>" /> + <input type="button" class="cbi-button cbi-button-action important" onclick="location.href='<%=net:adminlink()%>'" title="<%:Edit this network%>" value="<%:Edit%>" /> + <input type="button" class="cbi-button cbi-button-negative" onclick="wifi_delete('<%=net:id()%>')" title="<%:Delete this network%>" value="<%:Remove%>" /> </div> </div> <% end %> <% else %> - <div class="tr cbi-section-table-row cbi-rowstyle-2"> + <div class="tr cbi-rowstyle-2"> <div class="td left"> <em><%:No network configured on this device%></em> </div> @@ -421,30 +341,14 @@ <% end %> <!-- /network list --> </div> - </fieldset> + </div> <!-- /device <%=dev:name()%> --> <% end %> <h2><%:Associated Stations%></h2> - <fieldset class="cbi-section"> - <div class="table cbi-section-table valign-middle" style="margin:10px" id="iw-assoclist"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell"></div> - <div class="th cbi-section-table-cell"><%:SSID%></div> - <div class="th cbi-section-table-cell"><%:MAC-Address%></div> - <div class="th cbi-section-table-cell"><%:Host%></div> - <div class="th cbi-section-table-cell"><%:Signal%> / <%:Noise%></div> - <div class="th cbi-section-table-cell"><%:RX Rate%> / <%:TX Rate%></div> - </div> - <div class="tr cbi-section-table-row cbi-rowstyle-2"> - <div class="td"> - <em><%:Collecting data...%></em> - </div> - </div> - </div> - </fieldset> + <%+admin_network/wifi_assoclist%> </div> <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm index 85468252e9..ad20ea38fe 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm @@ -24,21 +24,22 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - var s = document.getElementById('<%=self.option%>-iw-signal'); - if (s) - s.innerHTML = String.format( - '<img src="%s" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%>" /><br />' + - '<small>%d%%</small>', icon, iw.signal, iw.noise, p - ); + var s = document.getElementById('<%=self.option%>-iw-status'), + small = s.querySelector('small'), + info = s.querySelector('span'); + + small.innerHTML = info.innerHTML = String.format( + '<img src="%s" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%>" /> <br />%d%% ', + icon, iw.signal, iw.noise, p + ); - var d = document.getElementById('<%=self.option%>-iw-description'); - if (d && is_assoc) - d.innerHTML = String.format( + if (is_assoc) + info.innerHTML = String.format( '<strong><%:Mode%>:</strong> %s | ' + '<strong><%:SSID%>:</strong> %h<br />' + - '<strong><%:BSSID%>:</strong> %s | ' + + '<strong><%:BSSID%>:</strong> %s<br />' + '<strong><%:Encryption%>:</strong> %s<br />' + - '<strong><%:Channel%>:</strong> %d (%.3f <%:GHz%>) | ' + + '<strong><%:Channel%>:</strong> %d (%.3f <%:GHz%>)<br />' + '<strong><%:Tx-Power%>:</strong> %d <%:dBm%><br />' + '<strong><%:Signal%>:</strong> %d <%:dBm%> | ' + '<strong><%:Noise%>:</strong> %d <%:dBm%><br />' + @@ -50,8 +51,8 @@ iw.txpower, iw.signal, iw.noise, iw.bitrate ? iw.bitrate : 0, iw.country ); - else if (d) - d.innerHTML = String.format( + else + info.innerHTML = String.format( '<strong><%:SSID%>:</strong> %h | ' + '<strong><%:Mode%>:</strong> %s<br />' + '<em><%:Wireless is disabled or not associated%></em>', @@ -62,17 +63,13 @@ ); //]]></script> -<div class="table"> - <div class="tr cbi-section-table"> - <div class="td"></div> - <div class="td cbi-value-field" style="width:16px; padding:3px" id="<%=self.option%>-iw-signal"> - <img src="<%=resource%>/icons/signal-none.png" title="<%:Not associated%>" /><br /> - <small>0%</small> - </div> - <div class="td cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px" id="<%=self.option%>-iw-description"> - <em><%:Collecting data...%></em> - </div> - </div> -</div> +<span class="ifacebadge large" id="<%=self.option%>-iw-status"> + <small> + <img src="<%=resource%>/icons/signal-none.png" title="<%:Not associated%>" />  + </small> + <span> + <em><%:Collecting data...%></em> + </span> +</span> <%+cbi/valuefooter%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm index db1d0b8883..ba0ab0f680 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm @@ -202,22 +202,23 @@ data_rx_peak = Math.max(data_rx_peak, data_rx[i]); data_tx_peak = Math.max(data_tx_peak, data_tx[i]); - if (i > 0) - { - data_rx_avg = (data_rx_avg + data_rx[i]) / 2; - data_tx_avg = (data_tx_avg + data_tx[i]) / 2; - } - else - { - data_rx_avg = data_rx[i]; - data_tx_avg = data_tx[i]; - } + data_rx_avg += data_rx[i]; + data_tx_avg += data_tx[i]; } + data_rx_avg = (data_rx_avg / Math.max(data_rx.length, 1)); + data_tx_avg = (data_tx_avg / Math.max(data_tx.length, 1)); + + var size = Math.floor(Math.log2(data_max)), + div = Math.pow(2, size - (size % 10)), + mult = data_max / div, + mult = (mult < 5) ? 2 : ((mult < 50) ? 10 : ((mult < 500) ? 100 : 1000)); + + data_max = data_max + (mult * div) - (data_max % (mult * div)); + /* remember current timestamp, calculate horizontal scale */ data_stamp = data[data.length-1][TIME]; - data_scale = height / (data_max * 1.1); - + data_scale = height / data_max; /* plot data */ var pt_rx = '0,' + height; @@ -244,9 +245,9 @@ line_rx.setAttribute('points', pt_rx); line_tx.setAttribute('points', pt_tx); - label_25.firstChild.data = bandwidth_label(1.1 * 0.25 * data_max); - label_50.firstChild.data = bandwidth_label(1.1 * 0.50 * data_max); - label_75.firstChild.data = bandwidth_label(1.1 * 0.75 * data_max); + label_25.firstChild.data = bandwidth_label(0.25 * data_max); + label_50.firstChild.data = bandwidth_label(0.50 * data_max); + label_75.firstChild.data = bandwidth_label(0.75 * data_max); label_rx_cur.innerHTML = bandwidth_label(data_rx[data_rx.length-1], true); label_tx_cur.innerHTML = bandwidth_label(data_tx[data_tx.length-1], true); @@ -258,6 +259,8 @@ label_tx_peak.innerHTML = bandwidth_label(data_tx_peak, true); } ); + + XHR.run(); } }, 1000 ); diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm index 30d93f78bc..ae8a6bb7ce 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm @@ -304,6 +304,8 @@ label_otr_peak.innerHTML = Math.floor(data_otr_peak); } ); + + XHR.run(); } }, 1000 ); diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm index c5952064aa..9aee30b5f9 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -53,8 +53,6 @@ swap = swapinfo, connmax = conn_max, conncount = conn_count, - leases = stat.dhcp_leases(), - leases6 = stat.dhcp6_leases(), wifinets = stat.wifi_networks() } @@ -111,11 +109,6 @@ luci.http.write_json(rv) return - elseif luci.http.formvalue("hosts") == "1" then - luci.http.prepare_content("application/json") - luci.http.write_json(luci.sys.net.host_hints()) - - return end -%> @@ -130,7 +123,7 @@ var pc = Math.floor((100 / mn) * vn); return String.format( - '<div style="width:200px; position:relative; border:1px solid #999999">' + + '<div style="width:100%%; max-width:200px; position:relative; border:1px solid #999999">' + '<div style="background-color:#CCCCCC; width:%d%%; height:15px">' + '<div style="position:absolute; left:0; top:0; text-align:center; width:100%%; color:#000000">' + '<small>%s / %s (%d%%)</small>' + @@ -140,45 +133,6 @@ ); } - function wifirate(bss, rx) { - var p = rx ? 'rx_' : 'tx_', - s = '%.1f <%:Mbit/s%>, %d<%:MHz%>' - .format(bss[p+'rate'] / 1000, bss[p+'mhz']), - ht = bss[p+'ht'], vht = bss[p+'vht'], - mhz = bss[p+'mhz'], nss = bss[p+'nss'], - mcs = bss[p+'mcs'], sgi = bss[p+'short_gi']; - - if (ht || vht) { - if (vht) s += ', VHT-MCS %d'.format(mcs); - if (nss) s += ', VHT-NSS %d'.format(nss); - if (ht) s += ', MCS %s'.format(mcs); - if (sgi) s += ', <%:Short GI%>'; - } - - return s; - } - - function duid2mac(duid) { - // DUID-LLT / Ethernet - if (duid.length === 28 && duid.substr(0, 8) === '00010001') - return duid.substr(16).replace(/(..)(?=..)/g, '$1:').toUpperCase(); - - // DUID-LL / Ethernet - if (duid.length === 20 && duid.substr(0, 8) === '00030001') - return duid.substr(8).replace(/(..)(?=..)/g, '$1:').toUpperCase(); - - return null; - } - - var npoll = 1; - var hosts = <%=luci.http.write_json(luci.sys.net.host_hints())%>; - - function updateHosts() { - XHR.get('<%=REQUEST_URI%>', { hosts: 1 }, function(x, data) { - hosts = data; - }); - } - function labelList(items, offset) { var rv = [ ]; @@ -205,7 +159,7 @@ return E('div', { class: 'ifacebox' }, [ E('div', { class: 'ifacebox-head center ' + (active ? 'active' : '') }, E('strong', title)), - E('div', { class: 'ifacebox-body' }, childs) + E('div', { class: 'ifacebox-body left' }, childs) ]); } @@ -219,9 +173,6 @@ XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 }, function(x, info) { - if (!(npoll++ % 5)) - updateHosts(); - var us = document.getElementById('upstream_status_table'); while (us.lastElementChild) @@ -330,86 +281,7 @@ ); <% end %> - <% if has_dhcp then %> - var ls = document.getElementById('lease_status_table'); - if (ls) - { - /* clear all rows */ - while (ls.firstElementChild !== ls.lastElementChild) - ls.removeChild(ls.lastElementChild); - - for (var i = 0; i < info.leases.length; i++) - { - var timestr; - - if (info.leases[i].expires === false) - timestr = '<em><%:unlimited%></em>'; - else if (info.leases[i].expires <= 0) - timestr = '<em><%:expired%></em>'; - else - timestr = String.format('%t', info.leases[i].expires); - - ls.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ - E('<div class="td">', info.leases[i].hostname ? info.leases[i].hostname : '?'), - E('<div class="td">', info.leases[i].ipaddr), - E('<div class="td">', info.leases[i].macaddr), - E('<div class="td">', timestr) - ])); - } - - if (ls.firstElementChild === ls.lastElementChild) - ls.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>')); - } - - var ls6 = document.getElementById('lease6_status_table'); - if (ls6 && info.leases6) - { - ls6.parentNode.style.display = 'block'; - - /* clear all rows */ - while (ls6.firstElementChild !== ls6.lastElementChild) - ls6.removeChild(ls6.lastElementChild); - - for (var i = 0; i < info.leases6.length; i++) - { - var timestr; - - if (info.leases6[i].expires === false) - timestr = '<em><%:unlimited%></em>'; - else if (info.leases6[i].expires <= 0) - timestr = '<em><%:expired%></em>'; - else - timestr = String.format('%t', info.leases6[i].expires); - - var host = hosts[duid2mac(info.leases6[i].duid)], - name = info.leases6[i].hostname, - hint = null; - - if (!name) { - if (host) - hint = host.name || host.ipv4 || host.ipv6; - } - else { - if (host && host.name && info.leases6[i].hostname != host.name) - hint = host.name; - } - - ls6.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ - E('<div class="td nowrap">', hint ? '<div>%h (%h)</div>'.format(name || '?', hint) : (name || '?')), - E('<div class="td nowrap">', info.leases6[i].ip6addr), - E('<div class="td nowrap">', info.leases6[i].duid), - E('<div class="td nowrap">', timestr) - ])); - } - - if (ls6.firstElementChild === ls6.lastElementChild) - ls6.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>')); - } - <% end %> - <% if has_wifi then %> - var assoclist = [ ]; - var ws = document.getElementById('wifi_status_table'); if (ws) { @@ -426,21 +298,6 @@ { var net = dev.networks[nidx]; var is_assoc = (net.bssid != '00:00:00:00:00:00' && net.channel && !net.disabled); - var num_assoc = 0; - - for (var bssid in net.assoclist) - { - var bss = net.assoclist[bssid]; - - bss.bssid = bssid; - bss.link = net.link; - bss.name = net.name; - bss.ifname = net.ifname; - bss.radio = dev.name; - - assoclist.push(bss); - num_assoc++; - } var icon; if (!is_assoc) @@ -463,7 +320,7 @@ '<%:Mode%>', net.mode, '<%:BSSID%>', is_assoc ? (net.bssid || '-') : null, '<%:Encryption%>', is_assoc ? net.encryption : null, - '<%:Associations%>', is_assoc ? (num_assoc || '-') : null, + '<%:Associations%>', is_assoc ? (net.num_assoc || '-') : null, null, is_assoc ? null : E('em', '<%:Wireless is disabled or not associated%>'))); } @@ -478,62 +335,6 @@ if (!ws.lastElementChild) ws.appendChild(E('<em><%:No information available%></em>')); } - - var ac = document.getElementById('wifi_assoc_table'); - if (ac) - { - /* clear all rows */ - while (ac.firstElementChild !== ac.lastElementChild) - ac.removeChild(ac.lastElementChild); - - assoclist.sort(function(a, b) { - return (a.name == b.name) - ? (a.bssid < b.bssid) - : (a.name > b.name ) - ; - }); - - for (var i = 0; i < assoclist.length; i++) - { - var icon; - var q = (-1 * (assoclist[i].noise - assoclist[i].signal)) / 5; - if (q < 1) - icon = "<%=resource%>/icons/signal-0.png"; - else if (q < 2) - icon = "<%=resource%>/icons/signal-0-25.png"; - else if (q < 3) - icon = "<%=resource%>/icons/signal-25-50.png"; - else if (q < 4) - icon = "<%=resource%>/icons/signal-50-75.png"; - else - icon = "<%=resource%>/icons/signal-75-100.png"; - - var host = hosts[assoclist[i].bssid], - name = host ? (host.name || host.ipv4 || host.ipv6) : null, - hint = (host && host.name && (host.ipv4 || host.ipv6)) ? (host.ipv4 || host.ipv6) : null; - - ac.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format(1 + (i % 2)), [ - E('<div class="td"><span class="ifacebadge" title="%q"><img src="<%=resource%>/icons/wifi.png" /> %h</span></div>' - .format(assoclist[i].radio, assoclist[i].ifname)), - E('<div class="td"><a href="%s" style="white-space:nowrap">%h</a></div>' - .format(assoclist[i].link, assoclist[i].name)), - E('<div class="td">', - assoclist[i].bssid), - E('<div class="td nowrap">', - hint ? '<div>%h (%h)</div>'.format(name || '?', hint) : (name || '?')), - E('<div class="td"><span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%> / <%:SNR%>: %d"><img src="%s" /> %d / %d <%:dBm%></span></div>' - .format(assoclist[i].signal, assoclist[i].noise, assoclist[i].signal - assoclist[i].noise, icon, assoclist[i].signal, assoclist[i].noise)), - E('<div class="td nowrap">', [ - E('<span style="white-space:nowrap">', wifirate(assoclist[i], true)), - E('<br />'), - E('<span style="white-space:nowrap">', wifirate(assoclist[i], false)) - ]) - ])); - } - - if (ac.firstElementChild === ac.lastElementChild) - ac.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:No information available%></em></div></div>')); - } <% end %> var e; @@ -591,8 +392,8 @@ <h2 name="content"><%:Status%></h2> -<fieldset class="cbi-section"> - <legend><%:System%></legend> +<div class="cbi-section"> + <h3><%:System%></h3> <div class="table" width="100%"> <div class="tr"><div class="td left" width="33%"><%:Hostname%></div><div class="td left"><%=luci.sys.hostname() or "?"%></div></div> @@ -607,31 +408,31 @@ <div class="tr"><div class="td left" width="33%"><%:Uptime%></div><div class="td left" id="uptime">-</div></div> <div class="tr"><div class="td left" width="33%"><%:Load Average%></div><div class="td left" id="loadavg">-</div></div> </div> -</fieldset> +</div> -<fieldset class="cbi-section"> - <legend><%:Memory%></legend> +<div class="cbi-section"> + <h3><%:Memory%></h3> <div class="table" width="100%"> <div class="tr"><div class="td left" width="33%"><%:Total Available%></div><div class="td left" id="memtotal">-</div></div> <div class="tr"><div class="td left" width="33%"><%:Free%></div><div class="td left" id="memfree">-</div></div> <div class="tr"><div class="td left" width="33%"><%:Buffered%></div><div class="td left" id="membuff">-</div></div> </div> -</fieldset> +</div> <% if swapinfo.total > 0 then %> -<fieldset class="cbi-section"> - <legend><%:Swap%></legend> +<div class="cbi-section"> + <h3><%:Swap%></h3> <div class="table" width="100%"> <div class="tr"><div class="td left" width="33%"><%:Total Available%></div><div class="td left" id="swaptotal">-</div></div> <div class="tr"><div class="td left" width="33%"><%:Free%></div><div class="td left" id="swapfree">-</div></div> </div> -</fieldset> +</div> <% end %> -<fieldset class="cbi-section"> - <legend><%:Network%></legend> +<div class="cbi-section"> + <h3><%:Network%></h3> <div id="upstream_status_table" class="network-status-table"> <em><%:Collecting data...%></em> @@ -640,45 +441,18 @@ <div class="table" width="100%"> <div class="tr"><div class="td left" width="33%"><%:Active Connections%></div><div class="td left" id="conns">-</div></div> </div> -</fieldset> - -<% if has_dhcp then %> -<fieldset class="cbi-section"> - <legend><%:DHCP Leases%></legend> - - <div class="table cbi-section-table" id="lease_status_table"> - <div class="tr cbi-section-table-titles"> - <div class="th"><%:Hostname%></div> - <div class="th"><%:IPv4-Address%></div> - <div class="th"><%:MAC-Address%></div> - <div class="th"><%:Leasetime remaining%></div> - </div> - <div class="tr cbi-section-table-row"> - <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div> - </div> - </div> -</fieldset> +</div> -<fieldset class="cbi-section" style="display:none"> - <legend><%:DHCPv6 Leases%></legend> - - <div class="table cbi-section-table" id="lease6_status_table"> - <div class="tr cbi-section-table-titles"> - <div class="th"><%:Host%></div> - <div class="th"><%:IPv6-Address%></div> - <div class="th"><%:DUID%></div> - <div class="th"><%:Leasetime remaining%></div> - </div> - <div class="tr cbi-section-table-row"> - <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div> - </div> - </div> -</fieldset> -<% end %> +<% + if has_dhcp then + include("admin_network/lease_status") + end +%> <% if has_dsl then %> -<fieldset class="cbi-section"> - <legend><%:DSL%></legend> +<div class="cbi-section"> + <h3><%:DSL%></h3> + <div class="table" width="100%"> <div class="tr"> <div class="td left" width="33%" style="vertical-align:top"><%:DSL Status%></div> @@ -692,35 +466,23 @@ </div> </div> </div> -</fieldset> +</div> <% end %> <% if has_wifi then %> -<fieldset class="cbi-section"> - <legend><%:Wireless%></legend> +<div class="cbi-section"> + <h3><%:Wireless%></h3> <div id="wifi_status_table" class="network-status-table"> <em><%:Collecting data...%></em> </div> -</fieldset> - -<fieldset class="cbi-section"> - <legend><%:Associated Stations%></legend> - - <div class="table cbi-section-table valign-middle" id="wifi_assoc_table"> - <div class="tr cbi-section-table-titles"> - <div class="th"> </div> - <div class="th"><%:Network%></div> - <div class="th"><%:MAC-Address%></div> - <div class="th"><%:Host%></div> - <div class="th"><%:Signal%> / <%:Noise%></div> - <div class="th"><%:RX Rate%> / <%:TX Rate%></div> - </div> - <div class="tr cbi-section-table-row"> - <div class="td" colspan="6"><em><br /><%:Collecting data...%></em></div> - </div> - </div> -</fieldset> +</div> + +<div class="cbi-section"> + <h3><%:Associated Stations%></h3> + + <%+admin_network/wifi_assoclist%> +</div> <% end %> <%- diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm index ced4d5f774..5d544ca60b 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm @@ -62,6 +62,7 @@ <%+header%> +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> <style type="text/css"> span:target { color: blue; @@ -70,7 +71,6 @@ </style> <h2 name="content"><%:Firewall Status%></h2> -<br /> <% if has_ip6tables then %> <ul class="cbi-tabmenu"> @@ -88,69 +88,69 @@ <input type="submit" class="cbi-button" name="restart" value="<%:Restart Firewall%>" /> </form> - <fieldset class="cbi-section"> + <div class="cbi-section"> <% for _, tbl in ipairs(tables) do chaincnt = 0 %> <h3><%:Table%>: <%=tbl%></h3> - <div class="table cbi-section-table" style="font-size:90%"> - <% for _, chain in ipairs(ipt:chains(tbl)) do - rowcnt = 0 - chaincnt = chaincnt + 1 - chaininfo = ipt:chain(tbl, chain) - %> - <div class="tr cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <div class="th cbi-section-table-cell" style="text-align:left" colspan="11"> - <br /><span id="rule_<%=tbl:lower()%>_<%=chain%>"> - <%:Chain%> <em><%=chain%></em> - (<%- if chaininfo.policy then -%> - <%:Policy%>: <em><%=chaininfo.policy%></em>, <%:Packets%>: <%=chaininfo.packets%>, <%:Traffic%>: <%=wba.byte_format(chaininfo.bytes)-%> - <%- else -%> - <%:References%>: <%=chaininfo.references-%> - <%- end -%>)</span> - </div> - </div> - <div class="tr cbi-section-table-descr"> - <div class="th cbi-section-table-cell"><%:Pkts.%></div> - <div class="th cbi-section-table-cell"><%:Traffic%></div> - <div class="th cbi-section-table-cell"><%:Target%></div> - <div class="th cbi-section-table-cell"><%:Prot.%></div> - <div class="th cbi-section-table-cell"><%:In%></div> - <div class="th cbi-section-table-cell"><%:Out%></div> - <div class="th cbi-section-table-cell"><%:Source%></div> - <div class="th cbi-section-table-cell"><%:Destination%></div> - <div class="th cbi-section-table-cell" style="width:30%"><%:Options%></div> - </div> - <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <div class="td"><%=rule.packets%></div> - <div class="td" style="white-space: nowrap"><%=wba.byte_format(rule.bytes)%></div> - <div class="td"><%=rule.target and link_target(tbl, rule.target) or "-"%></div> - <div class="td"><%=rule.protocol%></div> - <div class="td"><%=link_iface(rule.inputif)%></div> - <div class="td"><%=link_iface(rule.outputif)%></div> - <div class="td"><%=rule.source%></div> - <div class="td"><%=rule.destination%></div> - <div class="td" style="width:30%"><small><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%></small></div> + <% for _, chain in ipairs(ipt:chains(tbl)) do + rowcnt = 0 + chaincnt = chaincnt + 1 + chaininfo = ipt:chain(tbl, chain) + %> + <h4 id="rule_<%=tbl:lower()%>_<%=chain%>"> + <%:Chain%> <em><%=chain%></em> + (<%- if chaininfo.policy then -%> + <%:Policy%>: <em><%=chaininfo.policy%></em>, <%:Packets%>: <%=chaininfo.packets%>, <%:Traffic%>: <%=wba.byte_format(chaininfo.bytes)-%> + <%- else -%> + <%:References%>: <%=chaininfo.references-%> + <%- end -%>) + </h4> + + <div class="cbi-section-node"> + <div class="table" style="font-size:90%"> + <div class="tr table-titles cbi-rowstyle-<%=rowstyle()%>"> + <div class="th hide-xs"><%:Pkts.%></div> + <div class="th nowrap"><%:Traffic%></div> + <div class="th col-5"><%:Target%></div> + <div class="th"><%:Prot.%></div> + <div class="th"><%:In%></div> + <div class="th"><%:Out%></div> + <div class="th"><%:Source%></div> + <div class="th"><%:Destination%></div> + <div class="th col-9 hide-xs"><%:Options%></div> </div> - <% end %> - <% if rowcnt == 1 then %> - <div class="tr cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <div class="td" colspan="9"><em><%:No rules in this chain%></em></div> - </div> - <% end %> - <% end %> - - <% if chaincnt == 0 then %> - <div class="tr cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <div class="td" colspan="9"><em><%:No chains in this table%></em></div> + <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> + <div class="tr cbi-rowstyle-<%=rowstyle()%>"> + <div class="td"><%=rule.packets%></div> + <div class="td nowrap"><%=wba.byte_format(rule.bytes)%></div> + <div class="td col-5"><%=rule.target and link_target(tbl, rule.target) or "-"%></div> + <div class="td"><%=rule.protocol%></div> + <div class="td"><%=link_iface(rule.inputif)%></div> + <div class="td"><%=link_iface(rule.outputif)%></div> + <div class="td"><%=rule.source%></div> + <div class="td"><%=rule.destination%></div> + <div class="td col-9 hide-xs"><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%></div> + </div> + <% end %> + + <% if rowcnt == 1 then %> + <div class="tr cbi-rowstyle-<%=rowstyle()%>"> + <div class="td" colspan="9"><em><%:No rules in this chain%></em></div> + </div> + <% end %> </div> - <% end %> - </div> + </div> + <% end %> + + <% if chaincnt == 0 then %> + <em><%:No chains in this table%></em> + <% end %> + <br /><br /> <% end %> - </fieldset> + </div> </div> <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm index c8ada71569..dc7d927de8 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm @@ -237,6 +237,8 @@ label_15_peak.innerHTML = (data_15_peak / 100).toFixed(2); } ); + + XHR.run(); } }, 1000 ); diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm index af80371353..9ed37939fe 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm @@ -32,28 +32,30 @@ <%+header%> +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> + <div class="cbi-map" id="cbi-network"> <h2 name="content"><%:Routes%></h2> <div class="cbi-map-descr"><%:The following rules are currently active on this system.%></div> - <fieldset class="cbi-section"> + <div class="cbi-section"> <legend>ARP</legend> <div class="cbi-section-node"> - <div class="table cbi-section-table"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell"><%_<abbr title="Internet Protocol Version 4">IPv4</abbr>-Address%></div> - <div class="th cbi-section-table-cell"><%_<abbr title="Media Access Control">MAC</abbr>-Address%></div> - <div class="th cbi-section-table-cell"><%:Interface%></div> + <div class="table"> + <div class="tr table-titles"> + <div class="th"><%_<abbr title="Internet Protocol Version 4">IPv4</abbr>-Address%></div> + <div class="th"><%_<abbr title="Media Access Control">MAC</abbr>-Address%></div> + <div class="th"><%:Interface%></div> </div> <% for _, v in ipairs(ip.neighbors({ family = 4 })) do if v.mac then %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <div class="td cbi-value-field"><%=v.dest%></div> - <div class="td cbi-value-field"><%=v.mac%></div> - <div class="td cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></div> + <div class="tr cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td"><%=v.dest%></div> + <div class="td"><%=v.mac%></div> + <div class="td"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></div> </div> <% style = not style @@ -62,61 +64,57 @@ %> </div> </div> - </fieldset> - <br /> + </div> - <fieldset class="cbi-section"> + <div class="cbi-section"> <legend><%_Active <abbr title="Internet Protocol Version 4">IPv4</abbr>-Routes%></legend> - <div class="cbi-section-node"> - <div class="table cbi-section-table"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell"><%:Network%></div> - <div class="th cbi-section-table-cell"><%:Target%></div> - <div class="th cbi-section-table-cell"><%_<abbr title="Internet Protocol Version 4">IPv4</abbr>-Gateway%></div> - <div class="th cbi-section-table-cell"><%:Metric%></div> - <div class="th cbi-section-table-cell"><%:Table%></div> + <div class="table"> + <div class="tr table-titles"> + <div class="th"><%:Network%></div> + <div class="th"><%:Target%></div> + <div class="th"><%_<abbr title="Internet Protocol Version 4">IPv4</abbr>-Gateway%></div> + <div class="th"><%:Metric%></div> + <div class="th"><%:Table%></div> </div> <% for _, v in ipairs(ip.routes({ family = 4, type = 1 })) do %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <div class="td cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%></div> - <div class="td cbi-value-field"><%=v.dest%></div> - <div class="td cbi-value-field"><%=v.gw%></div> - <div class="td cbi-value-field"><%=v.metric or 0%></div> - <div class="td cbi-value-field"><%=rtn[v.table] or v.table%></div> + <div class="tr cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td"><%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%></div> + <div class="td"><%=v.dest%></div> + <div class="td"><%=v.gw or "-"%></div> + <div class="td"><%=v.metric or 0%></div> + <div class="td"><%=rtn[v.table] or v.table%></div> </div> <% style = not style end %> </div> </div> - </fieldset> - <br /> + </div> <% if nixio.fs.access("/proc/net/ipv6_route") then style = true %> - <fieldset class="cbi-section"> + <div class="cbi-section"> <legend><%_Active <abbr title="Internet Protocol Version 6">IPv6</abbr>-Routes%></legend> - <div class="cbi-section-node"> - <div class="table cbi-section-table"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell"><%:Network%></div> - <div class="th cbi-section-table-cell"><%:Target%></div> - <div class="th cbi-section-table-cell"><%:Source%></div> - <div class="th cbi-section-table-cell"><%:Metric%></div> - <div class="th cbi-section-table-cell"><%:Table%></div> + <div class="table"> + <div class="tr table-titles"> + <div class="th"><%:Network%></div> + <div class="th"><%:Target%></div> + <div class="th"><%:Source%></div> + <div class="th"><%:Metric%></div> + <div class="th"><%:Table%></div> </div> <% for _, v in ipairs(ip.routes({ family = 6, type = 1 })) do if v.dest and not v.dest:is6linklocal() then %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <div class="td cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></div> - <div class="td cbi-value-field"><%=v.dest%></div> - <div class="td cbi-value-field"><%=v.from%></div> - <div class="td cbi-value-field"><%=v.metric or 0%></div> - <div class="td cbi-value-field"><%=rtn[v.table] or v.table%></div> + <div class="tr cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></div> + <div class="td"><%=v.dest%></div> + <div class="td"><%=v.from%></div> + <div class="td"><%=v.metric or 0%></div> + <div class="td"><%=rtn[v.table] or v.table%></div> </div> <% style = not style @@ -125,27 +123,25 @@ %> </div> </div> - </fieldset> - <br /> + </div> - <fieldset class="cbi-section"> + <div class="cbi-section"> <legend><%:IPv6 Neighbours%></legend> - <div class="cbi-section-node"> - <div class="table cbi-section-table"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell"><%:IPv6-Address%></div> - <div class="th cbi-section-table-cell"><%:MAC-Address%></div> - <div class="th cbi-section-table-cell"><%:Interface%></div> + <div class="table"> + <div class="tr table-titles"> + <div class="th"><%:IPv6-Address%></div> + <div class="th"><%:MAC-Address%></div> + <div class="th"><%:Interface%></div> </div> <% for _, v in ipairs(ip.neighbors({ family = 6 })) do if v.dest and not v.dest:is6linklocal() and v.mac then %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <div class="td cbi-value-field"><%=v.dest%></div> - <div class="td cbi-value-field"><%=v.mac%></div> - <div class="td cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></div> + <div class="tr cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td"><%=v.dest%></div> + <div class="td"><%=v.mac%></div> + <div class="td"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></div> </div> <% style = not style @@ -154,8 +150,7 @@ %> </div> </div> - </fieldset> - <br /> + </div> <% end %> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm index 4211b26471..1806f4a6c8 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm @@ -276,7 +276,7 @@ function wireless_label(dbm, noise) { if (noise) - return String.format("%d <%:dBm%> (SNR %d <%:dBm%>)", noise_floor + dbm - 255, dbm - noise); + return String.format("%d <%:dBm%> (SNR %d <%:dB%>)", noise_floor + dbm - 255, dbm - noise); else return String.format("%d <%:dBm%>", noise_floor + dbm - 255); } @@ -308,6 +308,8 @@ label_rate_peak.innerHTML = rate_label(data_rate_peak); } ); + + XHR.run(); } }, 1000 ); diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm index b32ef78263..ee9c2f8fd3 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm @@ -10,87 +10,85 @@ <ul class="cbi-tabmenu"> <li class="cbi-tab"><a href="#"><%:Actions%></a></li> - <li class="cbi-tab-disabled"><a href="<%=REQUEST_URI%>/backupfiles"><%:Configuration%></a></li> + <li class="cbi-tab-disabled"><a href="<%=url('admin/system/flashops/backupfiles')%>"><%:Configuration%></a></li> </ul> -<fieldset class="cbi-section"> - - <fieldset class="cbi-section"> - <legend><%:Backup / Restore%></legend> - <div class="cbi-section-descr"><%:Click "Generate archive" to download a tar archive of the current configuration files. To reset the firmware to its initial state, click "Perform reset" (only possible with squashfs images).%></div> - <div class="cbi-section-node"> - <form class="inline" method="post" action="<%=url('admin/system/flashops/backup')%>"> - <input type="hidden" name="token" value="<%=token%>" /> - <div class="cbi-value<% if not reset_avail then %> cbi-value-last<% end %>"> - <label class="cbi-value-title" for="image"><%:Download backup%>:</label> - <div class="cbi-value-field"> - <input class="cbi-button cbi-button-apply" type="submit" name="backup" value="<%:Generate archive%>" /> - </div> +<div class="cbi-section"> + <h3><%:Backup%></h3> + <div class="cbi-section-descr"><%:Click "Generate archive" to download a tar archive of the current configuration files.%></div> + <div class="cbi-section-node"> + <form class="inline" method="post" action="<%=url('admin/system/flashops/backup')%>"> + <input type="hidden" name="token" value="<%=token%>" /> + <div class="cbi-value<% if not reset_avail then %> cbi-value-last<% end %>"> + <label class="cbi-value-title" for="image"><%:Download backup%>:</label> + <div class="cbi-value-field"> + <input class="cbi-button cbi-button-action important" type="submit" name="backup" value="<%:Generate archive%>" /> </div> - </form> - <% if reset_avail then %> - <form class="inline" method="post" action="<%=url('admin/system/flashops/reset')%>"> - <input type="hidden" name="token" value="<%=token%>" /> - <div class="cbi-value cbi-value-last"> - <label class="cbi-value-title"><%:Reset to defaults%>:</label> - <div class="cbi-value-field"> - <input onclick="return confirm('<%:Really reset all changes?%>')" class="cbi-button cbi-button-reset" type="submit" name="reset" value="<%:Perform reset%>" /> - </div> + </div> + </form> + </div> + + <h3><%:Restore%></h3> + <div class="cbi-section-descr"><%:To restore configuration files, you can upload a previously generated backup archive here. To reset the firmware to its initial state, click "Perform reset" (only possible with squashfs images).%></div> + <div class="cbi-section-node"> + <% if reset_avail then %> + <form class="inline" method="post" action="<%=url('admin/system/flashops/reset')%>"> + <input type="hidden" name="token" value="<%=token%>" /> + <div class="cbi-value cbi-value-last"> + <label class="cbi-value-title"><%:Reset to defaults%>:</label> + <div class="cbi-value-field"> + <input onclick="return confirm('<%:Really reset all changes?%>')" class="cbi-button cbi-button-reset" type="submit" name="reset" value="<%:Perform reset%>" /> </div> - </form> - <% end %> - </div> - <br /> - <div class="cbi-section-descr"><%:To restore configuration files, you can upload a previously generated backup archive here.%></div> - <div class="cbi-section-node"> - <form class="inline" method="post" action="<%=url('admin/system/flashops/restore')%>" enctype="multipart/form-data"> - <div class="cbi-value cbi-value-last"> - <label class="cbi-value-title" for="archive"><%:Restore backup%>:</label> - <div class="cbi-value-field"> - <input type="hidden" name="token" value="<%=token%>" /> - <input type="file" name="archive" id="archive" /> - <input type="submit" class="cbi-button cbi-input-apply" name="restore" value="<%:Upload archive...%>" /> - </div> + </div> + </form> + <% end %> + <form class="inline" method="post" action="<%=url('admin/system/flashops/restore')%>" enctype="multipart/form-data"> + <div class="cbi-value cbi-value-last"> + <label class="cbi-value-title" for="archive"><%:Restore backup%>:</label> + <div class="cbi-value-field"> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="file" name="archive" id="archive" /> + <input type="submit" class="cbi-button cbi-button-action important" name="restore" value="<%:Upload archive...%>" /> + <% if reset_avail then %> + <div class="cbi-value-description"><%:Custom files (certificates, scripts) may remain on the system. To prevent this, perform a factory-reset first.%></div> + <% end %> </div> - </form> - </div> - <% if reset_avail then %> - <div class="alert-message warning"><%:Custom files (certificates, scripts) may remain on the system. To prevent this, perform a factory-reset first.%></div> + </div> + </form> + <% if backup_invalid then %> + <div class="cbi-section-error"><%:The backup archive does not appear to be a valid gzip file.%></div> <% end %> - </fieldset> - - <br /> + </div> +</div> - <fieldset class="cbi-section"> - <legend><%:Flash new firmware image%></legend> - <% if upgrade_avail then %> - <form method="post" action="<%=url('admin/system/flashops/sysupgrade')%>" enctype="multipart/form-data"> - <input type="hidden" name="token" value="<%=token%>" /> - <div class="cbi-section-descr"><%:Upload a sysupgrade-compatible image here to replace the running firmware. Check "Keep settings" to retain the current configuration (requires a compatible firmware image).%></div> - <div class="cbi-section-node"> - <div class="cbi-value"> - <label class="cbi-value-title" for="keep"><%:Keep settings%>:</label> - <div class="cbi-value-field"> - <input type="checkbox" name="keep" id="keep" checked="checked" /> - </div> +<div class="cbi-section"> + <h3><%:Flash new firmware image%></h3> + <% if upgrade_avail then %> + <form method="post" action="<%=url('admin/system/flashops/sysupgrade')%>" enctype="multipart/form-data"> + <input type="hidden" name="token" value="<%=token%>" /> + <div class="cbi-section-descr"><%:Upload a sysupgrade-compatible image here to replace the running firmware. Check "Keep settings" to retain the current configuration (requires a compatible firmware image).%></div> + <div class="cbi-section-node"> + <div class="cbi-value"> + <label class="cbi-value-title" for="keep"><%:Keep settings%>:</label> + <div class="cbi-value-field"> + <input type="checkbox" name="keep" id="keep" checked="checked" /> </div> - <div class="cbi-value cbi-value-last<% if image_invalid then %> cbi-value-error<% end %>"> - <label class="cbi-value-title" for="image"><%:Image%>:</label> - <div class="cbi-value-field"> - <input type="file" name="image" id="image" /> - <input type="submit" class="cbi-button cbi-input-apply" value="<%:Flash image...%>" /> - </div> + </div> + <div class="cbi-value cbi-value-last<% if image_invalid then %> cbi-value-error<% end %>"> + <label class="cbi-value-title" for="image"><%:Image%>:</label> + <div class="cbi-value-field"> + <input type="file" name="image" id="image" /> + <input type="submit" class="cbi-button cbi-button-action important" value="<%:Flash image...%>" /> </div> </div> - <% if image_invalid then %> - <div class="cbi-section-error"><%:The uploaded image file does not contain a supported format. Make sure that you choose the generic image format for your platform. %></div> - <% end %> - </form> - <% else %> - <div class="cbi-section-descr"><%:Sorry, there is no sysupgrade support present; a new firmware image must be flashed manually. Please refer to the wiki for device specific install instructions.%></div> - <% end %> - </fieldset> - -</fieldset> + </div> + <% if image_invalid then %> + <div class="cbi-section-error"><%:The uploaded image file does not contain a supported format. Make sure that you choose the generic image format for your platform. %></div> + <% end %> + </form> + <% else %> + <div class="cbi-section-descr"><%:Sorry, there is no sysupgrade support present; a new firmware image must be flashed manually. Please refer to the wiki for device specific install instructions.%></div> + <% end %> +</div> <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm index 4944a232b2..ef13a91672 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm @@ -44,6 +44,8 @@ end <%+header%> +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> + <h2 name="content"><%:Software%></h2> <div class="cbi-map"> @@ -57,8 +59,8 @@ end <input type="hidden" name="exec" value="1" /> <input type="hidden" name="token" value="<%=token%>" /> - <fieldset class="cbi-section"> - <fieldset class="cbi-section-node"> + <div class="cbi-section"> + <div class="cbi-section-node"> <% if (install and next(install)) or (remove and next(remove)) or update or upgrade then %> <div class="cbi-value"> <% if #stdout > 0 then %><pre><%=pcdata(stdout)%></pre><% end %> @@ -91,18 +93,18 @@ end <div style="background-color:#F08080; border-right:1px solid #000000; height:100%; width:<%=used_perc%>%"> </div> </div> </div> - </fieldset> + </div> <br /> - <fieldset class="cbi-section-node"> + <div class="cbi-section-node"> <input type="hidden" name="display" value="<%=pcdata(display)%>" /> <div class="cbi-value"> <label class="cbi-value-title"><%:Download and install package%>:</label> <div class="cbi-value-field"> <input type="text" name="url" size="30" value="" /> - <input class="cbi-button cbi-input-save" type="submit" name="go" value="<%:OK%>" /> + <input class="cbi-button cbi-button-save" type="submit" name="go" value="<%:OK%>" /> </div> </div> @@ -110,11 +112,11 @@ end <label class="cbi-value-title"><%:Filter%>:</label> <div class="cbi-value-field"> <input type="text" name="query" size="20" value="<%=pcdata(query)%>" /> - <input type="submit" class="cbi-button cbi-input-find" name="search" value="<%:Find package%>" /> + <input type="submit" class="cbi-button cbi-button-action" name="search" value="<%:Find package%>" /> </div> </div> - </fieldset> - </fieldset> + </div> + </div> </form> @@ -122,90 +124,90 @@ end <ul class="cbi-tabmenu"> - <li class="cbi-tab<% if display ~= "installed" then %>-disabled<% end %>"><a href="?display=installed&query=<%=pcdata(query)%>"><%:Installed packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> <li class="cbi-tab<% if display ~= "available" then %>-disabled<% end %>"><a href="?display=available&query=<%=pcdata(query)%>"><%:Available packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> + <li class="cbi-tab<% if display ~= "installed" then %>-disabled<% end %>"><a href="?display=installed&query=<%=pcdata(query)%>"><%:Installed packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> </ul> <% if display ~= "available" then %> - <fieldset class="cbi-section"> - <div class="table cbi-section-table" style="width:100%"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell" style="text-align:left"> </div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Package name%></div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Version%></div> - </div> - <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <div class="td" style="text-align:left; width:10%"> - <form method="post" class="inline" action="<%=REQUEST_URI%>"> - <input type="hidden" name="exec" value="1" /> - <input type="hidden" name="token" value="<%=token%>" /> - <input type="hidden" name="remove" value="<%=pcdata(n)%>" /> - <a onclick="window.confirm('<%:Remove%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" href="#"><%:Remove%></a> - </form> + <div class="cbi-section"> + <div class="cbi-section-node"> + <div class="table"> + <div class="tr cbi-section-table-titles"> + <div class="th left"><%:Package name%></div> + <div class="th left"><%:Version%></div> + <div class="th cbi-section-actions"> </div> </div> - <div class="td" style="text-align:left"><%=luci.util.pcdata(n)%></div> - <div class="td" style="text-align:left"><%=luci.util.pcdata(v)%></div> - </div> - <% end) %> - <% if empty then %> - <div class="tr cbi-section-table-row"> - <div class="td" style="text-align:left"> </div> - <div class="td" style="text-align:left"><em><%:none%></em></div> - <div class="td" style="text-align:left"><em><%:none%></em></div> + <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %> + <div class="tr cbi-rowstyle-<%=rowstyle()%>"> + <div class="td left"><%=luci.util.pcdata(n)%></div> + <div class="td left"><%=luci.util.pcdata(v)%></div> + <div class="td cbi-section-actions"> + <form method="post" class="inline" action="<%=REQUEST_URI%>"> + <input type="hidden" name="exec" value="1" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="hidden" name="remove" value="<%=pcdata(n)%>" /> + <input class="cbi-button cbi-button-remove" type="submit" onclick="window.confirm('<%:Remove%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" value="<%:Remove%>" /> + </form> + </div> + </div> + <% end) %> + <% if empty then %> + <div class="tr cbi-section-table-row"> + <div class="td left"> </div> + <div class="td left"><em><%:none%></em></div> + <div class="td left"><em><%:none%></em></div> + </div> + <% end %> </div> - <% end %> </div> - </fieldset> + </div> <% else %> - <fieldset class="cbi-section"> + <div class="cbi-section"> <% if not querypat then %> - <ul class="cbi-tabmenu"> + <ul class="cbi-tabmenu" style="flex-wrap:wrap"> <% local i; for i = 65, 90 do %> <li class="cbi-tab<% if letter ~= i then %>-disabled<% end %>"><a href="?display=available&letter=<%=string.char(i)%>"><%=string.char(i)%></a></li> <% end %> <li class="cbi-tab<% if letter ~= 35 then %>-disabled<% end %>"><a href="?display=available&letter=%23">#</a></li> </ul> - <div class="cbi-section-node"> <% end %> - <div class="table cbi-section-table" style="width:100%"> - <div class="tr cbi-section-table-titles"> - <div class="th cbi-section-table-cell" style="text-align:left"> </div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Package name%></div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Version%></div> - <div class="th cbi-section-table-cell" style="text-align:right"><%:Size (.ipk)%></div> - <div class="th cbi-section-table-cell" style="text-align:left"><%:Description%></div> - </div> - <% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %> - <div class="tr cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <div class="td" style="text-align:left; width:10%"> - <form method="post" class="inline" action="<%=REQUEST_URI%>"> - <input type="hidden" name="exec" value="1" /> - <input type="hidden" name="token" value="<%=token%>" /> - <input type="hidden" name="install" value="<%=pcdata(n)%>" /> - <a onclick="window.confirm('<%:Install%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" href="#"><%:Install%></a> - </form> + <div class="cbi-section-node cbi-section-node-tabbed"> + <div class="table"> + <div class="tr cbi-section-table-titles"> + <div class="th col-2 left"><%:Package name%></div> + <div class="th col-2 left"><%:Version%></div> + <div class="th col-1 center"><%:Size (.ipk)%></div> + <div class="th col-10 left"><%:Description%></div> + <div class="th cbi-section-actions"> </div> </div> - <div class="td" style="text-align:left"><%=luci.util.pcdata(n)%></div> - <div class="td" style="text-align:left"><%=luci.util.pcdata(v)%></div> - <div class="td" style="text-align:right"><%=luci.util.pcdata(s)%></div> - <div class="td" style="text-align:left"><%=luci.util.pcdata(d)%></div> - </div> - <% end) %> - <% if empty then %> - <div class="tr cbi-section-table-row"> - <div class="td" style="text-align:left"> </div> - <div class="td" style="text-align:left"><em><%:none%></em></div> - <div class="td" style="text-align:left"><em><%:none%></em></div> - <div class="td" style="text-align:right"><em><%:none%></em></div> - <div class="td" style="text-align:left"><em><%:none%></em></div> + <% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %> + <div class="tr cbi-rowstyle-<%=rowstyle()%>"> + <div class="td col-2 left"><%=luci.util.pcdata(n)%></div> + <div class="td col-2 left"><%=luci.util.pcdata(v)%></div> + <div class="td col-1 center"><%=luci.util.pcdata(s)%></div> + <div class="td col-10 left"><%=luci.util.pcdata(d)%></div> + <div class="td cbi-section-actions"> + <form method="post" class="inline" action="<%=REQUEST_URI%>"> + <input type="hidden" name="exec" value="1" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="hidden" name="install" value="<%=pcdata(n)%>" /> + <input class="cbi-button cbi-button-apply" type="submit" onclick="window.confirm('<%:Install%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" value="<%:Install%>" /> + </form> + </div> + </div> + <% end) %> + <% if empty then %> + <div class="tr"> + <div class="td left"> </div> + <div class="td left"><em><%:none%></em></div> + <div class="td left"><em><%:none%></em></div> + <div class="td right"><em><%:none%></em></div> + <div class="td left"><em><%:none%></em></div> + </div> + <% end %> </div> - <% end %> </div> - <% if not querypat then %> - </div> - <% end %> - </fieldset> + </div> <% end %> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm index c9551804d2..d23664adac 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm @@ -7,7 +7,6 @@ <%+header%> <h2 name="content"><%:Reboot%></h2> -<br /> <p><%:Reboots the operating system of your device%></p> @@ -17,18 +16,24 @@ <hr /> +<input class="cbi-button cbi-button-action important" type="button" value="<%:Perform reboot%>" onclick="reboot(this)" /> + +<p class="alert-message notice reboot-message" style="display:none"> + <img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> + <span><%:Device is rebooting...%></span> +</p> + <script type="text/javascript">//<![CDATA[ - var tries = 0; + var tries = 0, + message = document.querySelector('p.reboot-message'), + label = message.querySelector('span'); function ok() { - window.location = '<%=controller%>/admin'; + window.location = '<%=url("admin")%>'; } function check() { - if (tries++ < 12) - window.setTimeout(ping, 5000); - else - alert('<%:Device unreachable%>'); + window.setTimeout(ping, 5000); } function ping() { @@ -38,22 +43,20 @@ img.onerror = check; img.src = '<%=resource%>/icons/loading.gif?' + Math.random(); - document.getElementById('reboot-message').innerHTML = '<%:Waiting for device...%>'; + if (tries++ >= 30) { + message.classList.remove('notice'); + message.classList.add('warning'); + label.innerHTML = '<%:Device unreachable! Still waiting for device...%>'; + } } function reboot(button) { button.style.display = 'none'; - document.getElementById('reboot-message').parentNode.style.display = ''; + message.style.display = ''; + label.innerHTML = '<%:Waiting for device...%>'; - (new XHR()).post('<%=controller%>/admin/system/reboot/call', { token: '<%=token%>' }, check); + (new XHR()).post('<%=url("admin/system/reboot/call")%>', { token: '<%=token%>' }, check); } //]]></script> -<input class="cbi-button cbi-button-apply" type="button" value="<%:Perform reboot%>" onclick="reboot(this)" /> - -<p class="alert-message" style="display:none"> - <img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> - <span id="reboot-message"><%:Device is rebooting...%></span> -</p> - <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm index 4ed4f0a10f..e05ccdece3 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm @@ -4,7 +4,7 @@ -%> <% export("uci_changelog", function(changes) -%> -<fieldset class="cbi-section"> +<div class="cbi-section"> <strong><%:Legend:%></strong> <div class="uci-change-legend"> <div class="uci-change-legend-label"><ins> </ins> <%:Section added%></div> @@ -32,9 +32,11 @@ ret[#ret+1] = "<br />%s.%s.%s+=<strong>%s</strong>" %{ r, s, o, util.pcdata(v[i]) } end - else + elseif v ~= "" then ret[#ret+1] = "<br />%s.%s.%s=<strong>%s</strong>" %{ r, s, o, util.pcdata(v) } + else + ret[#ret+1] = "<br /><del>%s.%s.<strong>%s</strong></del>" %{ r, s, o } end end end @@ -57,7 +59,7 @@ ret[#ret+1] = "%s.%s.%s+=<strong>%s</strong><br />" %{ r, s, o, util.pcdata(v[i]) } end - + else ret[#ret+1] = "%s.%s.%s=<strong>%s</strong><br />" %{ r, s, o, util.pcdata(v) } @@ -75,5 +77,5 @@ write(table.concat(ret)) %></div> -</fieldset> +</div> <%- end) %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm index c69ec1215a..6282244757 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm @@ -27,21 +27,17 @@ <div class="cbi-page-actions"> <% if redir_url then %> - <div style="float:left"> - <form class="inline" method="get" action="<%=luci.util.pcdata(redir_url)%>"> - <input class="cbi-button cbi-button-link" style="float:left; margin:0" type="submit" value="<%:Back%>" /> - </form> - </div> + <form method="get" action="<%=luci.util.pcdata(redir_url)%>"> + <input class="cbi-button cbi-button-link" type="submit" value="<%:Back%>" /> + </form> <% end %> - <div style="text-align:right"> - <input class="cbi-button cbi-button-save" type="button" id="apply_button" value="<%:Save & Apply%>" onclick="uci_apply(true); this.blur()" /> - <form class="inline" method="post" action="<%=url("admin/uci/revert")%>"> - <input type="hidden" name="token" value="<%=token%>" /> - <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" /> - <input class="cbi-button cbi-button-reset" type="submit" value="<%:Revert%>" /> - </form> - </div> + <input class="cbi-button cbi-button-save" type="button" id="apply_button" value="<%:Save & Apply%>" onclick="uci_apply(true); this.blur()" /> + <form method="post" action="<%=url("admin/uci/revert")%>"> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" /> + <input class="cbi-button cbi-button-reset" type="submit" value="<%:Revert%>" /> + </form> </div> <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm index dff53420aa..ff23d568dc 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm @@ -27,7 +27,7 @@ <div class="alert-message" id="cbi_apply_status" style="display:none"></div> <script type="text/javascript"> document.addEventListener("DOMContentLoaded", function() { - uci_apply(true); + uci_revert(); }); </script> diff --git a/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua b/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua index 46a8f49d97..056f6a6e76 100644 --- a/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua +++ b/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua @@ -89,7 +89,7 @@ peers = map:section( "wireguard_" .. ifname, translate("Peers"), translate("Further information about WireGuard interfaces and peers " .. - "at <a href=\"http://wireguard.io\">wireguard.io</a>.") + "at <a href=\"http://wireguard.com\">wireguard.com</a>.") ) peers.template = "cbi/tsection" peers.anonymous = true diff --git a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css b/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css index 4a40f6d680..72f087580d 100644 --- a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css +++ b/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css @@ -215,7 +215,8 @@ a:hover { * ---------------------------------------------------------------------------------------- */ p, .cbi-map-descr, -.cbi-section-descr { +.cbi-section-descr, +.table .tr.cbi-section-table-descr .th { font-size: 13px; font-weight: normal; line-height: 18px; @@ -229,7 +230,7 @@ p small { h1, h2, -h3, +h3, legend, h4, h5, h6 { @@ -265,14 +266,14 @@ h2 small { font-size: 14px; } -h3, +h3, legend, h4, h5, h6 { line-height: 36px; } -h3 { +h3, legend { font-size: 18px; } @@ -543,6 +544,13 @@ textarea { height: auto; } +.td > input[type=text], +.td > input[type=password], +.td > select, +.td > .cbi-dropdown { + width: 100%; +} + .uneditable-input { background-color: #ffffff; display: block; @@ -645,6 +653,26 @@ textarea[readonly] { border-color: #ddd; } +.cbi-optionals, +.cbi-section-create { + padding: 0 0 10px 10px; +} + +.cbi-section-create { + margin: -3px; + display: inline-flex; + align-items: center; +} + +.cbi-section-create > * { + margin: 3px; + flex: 1 1 auto; +} + +.cbi-section-create > * > input { + width: 100%; +} + .actions, .cbi-page-actions { background: #f5f5f5; @@ -670,6 +698,10 @@ textarea[readonly] { text-decoration: underline; } +.cbi-page-actions > form { + display: inline; +} + .help-inline, .help-block { font-size: 13px; line-height: 18px; @@ -706,6 +738,7 @@ textarea[readonly] { padding: 0; font-size: 13px; border-collapse: collapse; + position: relative; } .table .th, .table .td { @@ -732,6 +765,19 @@ textarea[readonly] { vertical-align: top; } +.tr.placeholder { + height: calc(3em + 20px); +} + +.tr.placeholder > .td { + position: absolute; + left: 0; + right: 0; + bottom: 0; + text-align: center; + line-height: 3em; +} + /* Patterns.less * Repeatable UI elements outside the base styles provided from the scaffolding * ---------------------------------------------------------------------------- */ @@ -1244,99 +1290,67 @@ footer { outline: 1px dotted #666; } -.btn.primary, -.cbi-page-actions .cbi-button-apply, -.cbi-page-actions .cbi-button-save, -.cbi-page-actions .cbi-button-reset { - color: #ffffff; - padding: 5px 14px 6px; - background-color: #0064cd; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #049cdb, #0064cd); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - border-color: #0064cd #0064cd #003f81; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - .cbi-input-invalid, .cbi-value-error input { color: #FF0000; border-color: #FF0000; } -.cbi-button-up, -.cbi-input-up { - background-position: center center; - background-image: url('../resources/cbi/up.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-down, -.cbi-input-down { - background-position: center center; - background-image: url('../resources/cbi/down.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +.cbi-button-positive, +.cbi-button-fieldadd, +.cbi-button-add, +.cbi-button-save { + border-color: #4a4; + color: #4a4; } +.cbi-button-neutral, +.cbi-button-download, .cbi-button-find, -.cbi-input-find { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/find.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-add, -.cbi-input-add { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/add.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +.cbi-button-link, +.cbi-button-up, +.cbi-button-down { + border-color: #444; + color: #444; } +.btn.primary, +.cbi-button-action, .cbi-button-apply, -.cbi-input-apply { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/apply.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +.cbi-button-reload, +.cbi-button-edit { + border-color: #0069d6; + color: #0069d6; } +.cbi-button-negative, +.cbi-section-remove .cbi-button, .cbi-button-reset, -.cbi-input-reset { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/reset.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +.cbi-button-remove { + border-color: #c44; + color: #c44; } -.cbi-button-edit, -.cbi-input-edit { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/edit.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-remove, -.cbi-input-remove { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/remove.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); -} - -.cbi-button-reload, -.cbi-input-reload { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/reload.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +.btn.primary, +.cbi-button-action.important, +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit { + color: #fff; + background: #0069d6; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } -.cbi-button-link, -.cbi-input-link { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/link.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +.cbi-button-positive.important, +.cbi-page-actions .cbi-button-save { + color: #fff; + background: #4a4; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } -.cbi-button-download, -.cbi-input-download { - background-position: 6px center, left top; - padding-left: 28px; - background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +.cbi-page-actions .cbi-button-apply + .cbi-button-save { + background: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.75); + color: #4a4; } .cbi-dropdown { @@ -1492,6 +1506,58 @@ footer { opacity: .6; } +.cbi-tooltip-container { + cursor: help; +} + +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + opacity: 0; + transition: opacity .25s ease-out; +} + +.cbi-tooltip-container:hover .cbi-tooltip:not(:empty) { + left: auto; + opacity: 1; + transition: opacity .25s ease-in; +} + +.zonebadge .cbi-tooltip { + padding: 1px; + background: inherit; + margin: -1.6em 0 0 -5px; + border-radius: 3px; + pointer-events: none; + box-shadow: 0 0 3px #444; +} + +.zonebadge .cbi-tooltip > * { + margin: 1px; +} + +.zone-forwards { + display: flex; + flex-wrap: wrap; +} + +.zone-forwards > * { + flex: 1 1 40%; + padding: 1px; +} + +.zone-forwards > span { + flex-basis: 10%; + text-align: center; +} + +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} + .btn.active, .btn:active { box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); } @@ -1522,46 +1588,6 @@ footer { font-size: 11px; } -/* Button icons for specific pages */ -.Startup .cbi-section-table input.cbi-input-apply, -.Startup .cbi-section-table input.cbi-button-apply { - background-image: url("../resources/cbi/apply.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Processes .cbi-section-table input.cbi-input-reload, -.Startup .cbi-section-table input.cbi-input-reload { - background-image: url("../resources/cbi/reload.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Processes .cbi-section-table input.cbi-input-remove, -.Processes .cbi-section-table div.cbi-section-remove input, -.Startup .cbi-section-table input.cbi-input-remove, -.Startup .cbi-section-table div.cbi-section-remove input { - background-image: url("../resources/cbi/remove.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Processes .cbi-section-table input.cbi-input-reset, -.Processes .cbi-section-table input.cbi-button-reset, -.Startup .cbi-section-table input.cbi-input-reset, -.Startup .cbi-section-table input.cbi-button-reset { - background-image: url("../resources/cbi/reset.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - -.Startup .cbi-section-table input.cbi-input-save, -.Startup .cbi-section-table input.cbi-button-save { - background-image: url("../resources/cbi/save.gif"); - background-position: 7px 4px; - padding: 3px 9px 3px 27px; -} - button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { padding: 0; border: 0; @@ -1713,6 +1739,20 @@ header .pull-right { padding-top: 8px; } font-weight: normal; } +.cbi-section-table-titles.named::before, +.cbi-section-table-descr.named::before, +.cbi-section-table-row[data-title]::before { + content: attr(data-title) " "; + display: table-cell; + padding: 10px 10px 9px; + line-height: 18px; + font-weight: bold; +} + +.cbi-section-table-row[data-title]::before { + border-top: 1px solid #ddd; +} + .left { text-align: left !important; } .right { text-align: right !important; } @@ -1751,15 +1791,20 @@ table table td, vertical-align: middle; } -.cbi-value-description { display: inline; } - -.cbi-value-description img { vertical-align: middle; } +.cbi-value-description { + background-image: url(/luci-static/resources/cbi/help.gif); + background-position: .25em .2em; + background-repeat: no-repeat; + margin: .25em 0 0 0; + padding: 0 0 0 1.7em; +} .cbi-section-error { border: 1px solid #FF0000; border-radius: 3px; background-color: #FCE6E6; padding: 5px; + margin-bottom: 18px; } .cbi-section-error ul { margin: 0 0 0 20px; } @@ -1852,6 +1897,7 @@ table table td, flex-wrap: wrap; } +.ifacebadge.large, .network-status-table .ifacebox-body .ifacebadge { flex: 1; margin: .5em .25em 0 .25em; @@ -1866,7 +1912,6 @@ table table td, white-space: nowrap; color: #666666; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - cursor: pointer; } .zonebadge > em, diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/bg.jpg b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/bg.jpg Binary files differdeleted file mode 100644 index 822527ead8..0000000000 --- a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/bg.jpg +++ /dev/null diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css index ed97427c91..d5e87ebef0 100644 --- a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css +++ b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css @@ -9,7 +9,7 @@ html { body { color: #ccc; - background:#e5eef5 url(bg.jpg) repeat-x top left; + background: #e5eef5 linear-gradient(#fff 0%, #e5eef5 100%) no-repeat; font-family: Verdana, Arial, sans-serif; font-size: 100%; line-height: 100%; @@ -23,6 +23,42 @@ html, body { * { margin: 0; padding: 0; + box-sizing: border-box; +} + +.table { display: table; width: 100%; position: relative; } +.tr { display: table-row; } +.thead { display: table-header-group; } +.tbody { display: table-row-group; } +.tfoot { display: table-footer-group; } +.td, .th { display: table-cell; } +.th { font-weight: bold; } + +.table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } +.table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } + +.col-1 { flex: 1 1 30px !important; -webkit-flex: 1 1 30px !important; } +.col-2 { flex: 2 2 60px !important; -webkit-flex: 2 2 60px !important; } +.col-3 { flex: 3 3 90px !important; -webkit-flex: 3 3 90px !important; } +.col-4 { flex: 4 4 120px !important; -webkit-flex: 4 4 120px !important; } +.col-5 { flex: 5 5 150px !important; -webkit-flex: 5 5 150px !important; } +.col-6 { flex: 6 6 180px !important; -webkit-flex: 6 6 180px !important; } +.col-7 { flex: 7 7 210px !important; -webkit-flex: 7 7 210px !important; } +.col-8 { flex: 8 8 240px !important; -webkit-flex: 8 8 240px !important; } +.col-9 { flex: 9 9 270px !important; -webkit-flex: 9 9 270px !important; } +.col-10 { flex: 10 10 300px !important; -webkit-flex: 10 10 300px !important; } + +.tr.placeholder { + height: 3.5em; +} + +.tr.placeholder > .td { + position: absolute; + left: 1px; + right: 1px; + bottom: 1px; + text-align: center; + line-height: 3em; } abbr, @@ -49,6 +85,34 @@ code { white-space: pre; } +h2, h3, h4, legend { + font-size: 150%; + font-family: Trebuchet MS, Verdana, sans-serif; + font-weight: bold; + margin: .25em 0 .5em 0; + border-bottom: 1px solid; + padding-bottom: 4px; + display: block; + width: 100%; +} + +h3, legend { + font-size: 125%; +} + +h4 { + font-size: 112%; +} + +.cbi-section-node + h4 { + margin-top: 1em; +} + +fieldset { border: none; } + +fieldset > legend { float: left; } +fieldset > legend + * { clear: both; } + #maincontent ul { margin-left: 2em; } @@ -85,37 +149,63 @@ a img { background-color: white; } -.errorbox { - border: 1px solid #F00; - background-color: #FCC; - padding: 5px; +.alert-message { + font-weight: normal; + padding: .5em; + border-radius: 3px; + color: #000; } +.alert-message.notice { + background: linear-gradient(#ccc 0%, #eee 100%); + color: #4a6b7c; +} -.ifacebox { - background-color: #FFFFFF; - border: 1px solid #CCCCCC; - margin: 0 10px; - text-align: center; - white-space: nowrap; +.alert-message.warning { + background: linear-gradient(#dda 0%, #dd8 100%); + color: #c00; } -.ifacebox .ifacebox-head { - border-bottom: 1px solid #CCCCCC; - padding: 2px; +.alert-message > * { + margin: .5em; } -.ifacebox .ifacebox-body { - padding: 2px; +.alert-message > h4 { + font-weight: bold; } -.ifacebadge { - background-color: #FFFFFF; - border: 1px solid #CCCCCC; +.ifacebadge, .ifacebox { + display: inline-flex; + align-content: center; + border: 1px solid #ccc; + border-radius: 3px; padding: 2px; - margin-left: 2px; + background: #fff; + margin: .25em .5em; +} + +.ifacebox-head { + background: #eee; +} + +.ifacebox-head.active { + background: #90c0e0; +} + +.ifacebadge, .zonebadge { + align-items: center; +} + +.ifacebadge > * { + align-self: flex-start; +} + +.ifacebadge > img, +.ifacebadge > em { + margin-right: 5px; display: inline-block; + height: 16px; } .ifacebadge-active { @@ -123,18 +213,70 @@ a img { font-weight: bold; } +.ifacebox { + flex-direction: column; + margin: 0; + padding: 0; + min-width: 100px; + text-align: center; +} + +.ifacebox > * { + padding: 2px; +} + +.td > .ifacebadge, +.td > .zonebadge { + margin: 0; + vertical-align: top; +} + +.network-status-table { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox { + margin: .5em; + font-size: 90%; + flex-grow: 1; +} + +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + flex: 1 0; +} + +.network-status-table .ifacebox-body > span { + flex: 10; +} + +.network-status-table .ifacebox-body > div { + display: flex; + flex-wrap: wrap; +} + +.ifacebadge.large, +.network-status-table .ifacebox-body .ifacebadge { + flex: 1; + margin: .5em .25em .25em .25em; + padding: .5em; + min-width: 220px; + white-space: nowrap; +} + .zonebadge { padding: 2px; display: inline-block; white-space: nowrap; - cursor: pointer; + border-radius: 3px; } -.zonebadge em, -.zonebadge strong { +.zonebadge > em, +.zonebadge > strong { margin: 3px; - display: inline-block; } .zonebadge input { @@ -142,6 +284,18 @@ a img { height: 1.5em; } +.zonebadge .ifacebadge, +.cbi-dropdown .ifacebadge { + margin: 1px; +} + +.zonebadge .ifacebadge img, +.zonebadge .ifacebadge em, +.cbi-dropdown .ifacebadge img, +.cbi-dropdown .ifacebadge em { + margin: 0 1px; +} + .zonebadge-empty { border: 1px dashed #AAAAAA; color: #AAAAAA; @@ -150,6 +304,7 @@ a img { } + #header { height: auto; background: #FFF url(header.jpg) repeat-x left bottom; @@ -158,9 +313,12 @@ a img { text-align:right; } +.header_left { + padding-bottom: 10px; +} + .header_left img { padding: 10px 10px 0px 10px; - margin-bottom: 10px; } .header_banner { @@ -173,15 +331,15 @@ a img { padding: 0px; } -.header_left{ +.header_left { text-align:left; max-width: 50%; float:left; } -.header_left a{ +.header_left a { color: #dc0067; - font: bold 36px Helvetica; + font: bold 36px Helvetica, Verdana, Arial, sans-serif; text-decoration: none; } @@ -454,53 +612,15 @@ textarea#syslog { font-size: 80%; } -#maincontent h2 { - font:normal bold 150% "Trebuchet MS", Verdana, sans-serif; - margin: 0.25em 0 0.7em 0; - border-bottom: 1px solid; - padding: 10px 0 4px 0; - color: #404040; -} - -#maincontent h3 { - margin: 0.5em 0 1.1em 0; - font:italic bold 125% "Trebuchet MS", Verdana, sans-serif; - color: #404040; -} - #maincontent p { margin-bottom: 1em; } .cbi-section { - margin-bottom: 0.5em; - padding: 0.5em 1em; - border: 1px dotted #555; - background-color: #fff; + margin-bottom: 1.5em; color: #000; } -.cbi-section legend { - font-size: 110%; - font-weight: bold; - height: 1em; - padding: 0.5em 0.25em; - background-color: transparent; - color: #404040 ; -} - -.cbi-section h2 { - margin: 0em 0 0.5em -0.5em !important; -} - -.cbi-section h3 { - text-decoration: none !important; - font-weight: bold !important; - color: #555 !important; - margin: 0.25em !important; - font-size: 100% !important; -} - .cbi-section-descr { margin-bottom: 0.5em; font-size: 95%; @@ -519,46 +639,52 @@ ul.cbi-apply { } ul.cbi-tabmenu { - padding: 3px 0; - margin-left: 0 !important; - margin-bottom: -1px; list-style-type: none; + display: flex; + margin: 0 0 .5em 0 !important; + padding: 0 0 0 5px; + border-bottom: 1px solid #bbb; } -ul.cbi-tabmenu li.cbi-tab, -ul.cbi-tabmenu li.cbi-tab-disabled { - display: inline; - margin: 0; +ul.cbi-tabmenu li { + display: inline-flex; + margin: 0 5px -1px 0; + flex: 0 1 auto; + border: 1px solid #bbb; + border-bottom: none; + border-radius: 3px 3px 0 0; + background: linear-gradient(#ddd 90%, #aaa 100%); + color: #888; + overflow: hidden; + text-overflow: ellipsis; + word-wrap: break-word; } -ul.cbi-tabmenu li.cbi-tab a, -ul.cbi-tabmenu li.cbi-tab-disabled a { +ul.cbi-tabmenu li a, +ul.cbi-tabmenu li a:hover { text-decoration: none; - padding: 3px 7px; - margin-right: 3px; - border: 1px dotted #bbb; - border-bottom: none; - background-color: #eee; - color: #bbb; + color: inherit; + padding: 5px; + flex: 1; + width: 100%; + height: 100%; } -ul.cbi-tabmenu li.cbi-tab-highlighted a { +ul.cbi-tabmenu li.cbi-tab-highlighted { color: #000; - background-color: #FFEEAA; + background: #fea; } -ul.cbi-tabmenu li a:hover { +ul.cbi-tabmenu li.cbi-tab { color: #000; + background: #fff; } -ul.cbi-tabmenu li.cbi-tab a { - position: relative; - top: 1px; - padding-top: 4px; - color: #000; - background-color: #fff; +ul.cbi-tabmenu + .cbi-section-node { + margin-top: -.5em; } + div.cbi-tab-descr { background-image: url(/luci-static/resources/cbi/help.gif); background-position: 0.25em 50%; @@ -601,151 +727,126 @@ select, input[type=text], input[type=password] { width: 20em; + font-size: inherit; + line-height: 13pt; + height: 14pt; } -td select, -td input[type=text], -td input[type=password] { - width: 99%; +select[multiple] { + height: auto; } -img.cbi-image-button { - cursor: pointer; - margin: 0 2px; +input[type=radio], +input[type=checkbox], +[data-dynlist] > input + img, +input.cbi-input-password + img { vertical-align: middle; } -input.cbi-input-user { - background: url('../resources/cbi/user.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - text-indent: 17px; -} - -input.cbi-input-password { - background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - text-indent: 17px; -} - -input.cbi-input-find, -input.cbi-button-find { - background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - padding-left: 17px; - border: none; -} - -input.cbi-input-reload { - background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - padding-left: 17px; -} - -input.cbi-button{ - margin-top: 1.3em; +.td select, +.td .cbi-dropdown, +.td input[type=text] { + width: 100%; } -input.cbi-input-add, -input.cbi-button-add { - background: url('../resources/cbi/add.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - padding: 0 1px 0 17px; - border: 1px solid #FFF; +.td [data-dynlist] > input, +.td input.cbi-input-password { + width: calc(100% - 20px); } -input.cbi-input-fieldadd, -input.cbi-button-fieldadd { - background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center; - background-color: inherit; - color: #000; - padding: 0 1px 0 17px; +img.cbi-image-button { + cursor: pointer; + margin: 0 2px; + vertical-align: middle; } -input.cbi-input-reset, -input.cbi-button-reset { - background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center; - background-color: inherit; +.btn, .cbi-button { + padding: 0 .5em; + border-radius: 3px; + border: 1px solid #aaa; + text-decoration: none; color: #000; - padding: 0 1px 0 17px; -} - - + display: inline-block; + font-size: inherit; + -webkit-appearance: none; + background: #fff; + text-align: center; + font-weight: bold; + line-height: 13pt; + height: 14pt; } -input.cbi-input-save, -input.cbi-button-save { - background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - padding: 0 1px 0 17px; +.btn:hover, .cbi-button:hover { + box-shadow: 0 0 3px #59d; } -input.cbi-input-apply, -input.cbi-button-apply { - background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - padding: 0 1px 0 17px; +.btn[disabled], +.btn[disabled]:hover, +.cbi-button[disabled], +.cbi-button[disabled]:hover { + opacity: .6; + cursor: default; + pointer-events: none; } -input.cbi-input-link, -input.cbi-button-link { - background: url('../resources/cbi/link.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - padding: 0 1px 0 17px; - border: none; +.cbi-button-positive, +.cbi-button-fieldadd, +.cbi-button-add, +.cbi-button-save { + border-color: #7b7; + color: #7b7; } -input.cbi-input-download, -input.cbi-button-download { - background: url('../resources/cbi/download.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - padding: 0 1px 0 17px; - border: none; +.cbi-button-neutral, +.cbi-button-reset, +.cbi-button-download, +.cbi-button-find, +.cbi-button-link, +.cbi-button-up, +.cbi-button-down { + border-color: #444; + color: #444; } -input.cbi-input-remove, -div.cbi-section-remove input { - background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; - background-color: inherit; - color: #000; - padding: 0 1px 0 17px; - border: 1px solid #fff; +.cbi-button-action, +.cbi-button-apply, +.cbi-button-reload, +.cbi-button-edit { + border-color: #59d; + color: #59d; } -input.cbi-button-up { - background-image: url('../resources/cbi/up.gif'); - padding: 0 1px 0 11px; +.cbi-button-negative, +.cbi-section-remove .cbi-button, +.cbi-button-remove { + border-color: #b77; + color: #b77; } -input.cbi-button-down { - background-image: url('../resources/cbi/down.gif'); - padding: 0 1px 0 11px; +.cbi-button-action.important, +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit { + color: #fff; + background: #59d; } -input.cbi-button-edit { - background: url('../resources/cbi/edit.gif') no-repeat scroll 1px center; - color: #000000; - padding: 0 1px 0 17px; +.cbi-button-positive.important, +.cbi-page-actions .cbi-button-save { + color: #fff; + background: #7b7; } -input.cbi-button-reload { - background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; - color: #000000; - padding: 0 1px 0 17px; +.cbi-page-actions .cbi-button-apply + .cbi-button-save { + background: #fff; + color: #7b7; } -input.cbi-button-remove { - background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; - color: #000000; - padding: 0 1px 0 17px; +.cbi-input-invalid { + background-image: url('../resources/cbi/reset.gif'); + background-repeat: no-repeat; + background-position: right; + color: #FF0000 !important; + border-color: #FF0000; } .cbi-input-invalid { @@ -765,18 +866,12 @@ textarea { margin-bottom: 0.5em; } -form > div > input[type=submit], -form > div > input[type=reset] { - float: right; - margin-left: 0.5em; -} - -table td, -table th { - color: #000; +.table .td, .table .th { + color: #000000; + padding: .25em; } -table.smalltext { +.table.smalltext { background: #f5f5f5; color: #000; border: 1px solid #666; @@ -787,48 +882,62 @@ table.smalltext { border-collapse: collapse; } -table.smalltext tr:hover td { +.table.smalltext .tr:hover .td { background-color: #bbddee; color: #000; } -table.smalltext tr th { +.table.smalltext .tr .th { padding: 0 0.25em; border-left: 1px dotted #666; text-align: left; } -table.smalltext tr td { +.table.smalltext .tr .td { padding: 0.2em; border-top: 1px dotted #666; border-left: 1px dotted #666; } -table.cbi-section-table .cbi-rowstyle-1 { - background-color: #f1f6fa; - color: #000; +.cbi-section-node .tr:not(.placeholder):nth-child(even) { + background: #e5eef5; } -table.cbi-section-table .cbi-rowstyle-1:hover, -table.cbi-section-table .cbi-rowstyle-2:hover { - background-color: #b2c8d4; - color: #000000; -} - -table.cbi-section-table .cbi-section-table-cell { +.table.cbi-section-table .cbi-section-table-cell { padding: 3px; white-space: nowrap; } -.cbi-section .cbi-rowstyle-1 h3 { - background-color: #f1f6fa; - color: #555; +.table .tr > .th:empty { + display: none; } -.cbi-rowstyle-2 { - color: #000; +.table.cbi-section-table .tr > *, +.table.cbi-section-table .tr[data-title]::before { + border-top: 1px dotted #bbb; + display: table-cell; +} + +.table.cbi-section-table .tr.table-titles > *, +.table.cbi-section-table .tr.cbi-section-table-titles > *, +.table.cbi-section-table .tr.cbi-section-table-desc > *, +.table.cbi-section-table .tr.table-titles::before, +.table.cbi-section-table .tr.cbi-section-table-titles::before, +.table.cbi-section-table .tr.cbi-section-table-desc::before { + border-top: none; } +.table.cbi-section-table .tr:hover::before, +.table.cbi-section-table .tr:hover > * { + background: #eee; +} + +.table.cbi-section-table .tr:nth-child(even):hover::before, +.table.cbi-section-table .tr:nth-child(even):hover > * { + background: #bde; +} + + div.cbi-value { clear: left; vertical-align: middle; @@ -847,34 +956,49 @@ div.cbi-value:hover { line-height: 1.8em; } -div.cbi-value-field { +.cbi-value-field { width: 58%; margin-left: 40%; padding: 0.25em 0; } -div.cbi-value-description { - font-size: 90%; - display: inline; +.td.cbi-value-field { + width: auto; + margin-left: 0; + align-self: center; } -div.cbi-section-create { - clear: left; - white-space: nowrap; - vertical-align: top; +.cbi-value-description { + background-image: url(/luci-static/resources/cbi/help.gif); + background-position: .25em .25em; + background-repeat: no-repeat; + margin: .25em 0 0 0; + padding: .25em .25em .25em 1.75em; } -div.cbi-tblsection-create { - border-bottom: 1px dotted #bbb; +.cbi-section-create { + padding: 0 0 .25em 0; + margin: -3px; + display: inline-flex; + align-items: center; +} + +.cbi-section-create > * { + margin: 3px; + flex: 1 1 auto; +} + +.cbi-section-create > * > input { + width: 100%; } -div.cbi-section-create .cbi-button { - margin: 0.25em; +.cbi-section-remove > .cbi-button { + margin-bottom: -1px; + border-radius: 3px 3px 0 0; } -input.cbi-section-create-name { - margin-right: -0.25em; - border: 1px solid #999; +.cbi-section-node + .cbi-section-create { + padding-top: 0; } div.cbi-map-descr { @@ -886,46 +1010,147 @@ div.cbi-optionals { border-bottom: 1px dotted #bbb; } -div.cbi-section-remove { - float: right; -} + .cbi-section-node { clear: both; - border: 1px dotted #bbb; - border-bottom: none; padding-bottom: 0; + position: relative; + border: 1px dotted #555; + background: #fff; + margin-bottom: 5px; } -.cbi-section-node table div { - padding-bottom: 0; - border-bottom: none; +.cbi-section-node-tabbed { + border-top: none; } -.cbi-section-node div.cbi-section-table-row { - margin: 0.25em; +.cbi-section-node .cbi-optionals:last-child, +.cbi-section-node .cbi-value:last-child { + border-bottom: none; } -table.cbi-section-table { +.table.cbi-section-table { width: 100%; font-size: 95%; + border: 1px dotted #444; + background: #fff; + margin: 0 0 .5em 0; } -table.cbi-section-table th, -table.cbi-section-table td { - text-align: center; +.cbi-section-node > .table.cbi-section-table { + border: none; + margin: 0; } -tr.cbi-section-table-descr th { - font-weight: bold; +@keyframes flash { + 0% { opacity: 1; } + 50% { opacity: .5; } + 100% { opacity: 1; } +} + +.tr.cbi-section-table-row.flash { + animation: flash .35s; +} + +.tr.cbi-section-table-descr .th { + font-weight: normal; font-size: 90%; + vertical-align: top; } -td.cbi-section-table-optionals { +.td.cbi-section-table-optionals { text-align: left !important; padding-top: 1em; } +.th.cbi-section-actions, +.td.cbi-section-actions { + display: flex; + justify-content: flex-end; + flex-direction: row; + flex: 1 1 150px; + margin: auto 0 auto auto; +} + +.td.cbi-section-actions > form { + display: flex; +} + +.td.cbi-section-actions > *, +.td.cbi-section-actions > form > * { + flex: 1 1 4em; + margin: 1px; +} + +.cbi-page-actions { + display: flex; + justify-content: flex-end; + margin: -3px; + padding: 0 .25em .25em .25em; +} + +.cbi-page-actions > form { + display: flex; +} + +.cbi-page-actions > * { + flex: 0 1 auto; + margin: 3px; +} + +.cbi-page-actions > form > * { + flex: 1; + margin: 0 3px 0 0; +} + +.cbi-page-actions > .cbi-button-link, +.cbi-page-actions > form[method="get"]:first-child { + margin-right: auto; +} + + +.th[data-type="button"], .td[data-type="button"], +.th[data-type="fvalue"], .td[data-type="fvalue"] { + flex: 1 1 2em; + text-align: center; +} + +#cbi-network-switch_vlan .th, +#cbi-network-switch_vlan .td { + flex-basis: 12%; +} + +#cbi-wireless-overview .td:first-child { + align-self: center; +} + +.td[data-title]::before { + content: attr(data-title) ":\20"; + font-weight: bold; + text-align: left; + display: none; + padding: 1px; + white-space: nowrap; +} + +.tr.placeholder .td[data-title]::before { + display: none; +} + +.tr[data-title]::before, +.tr.cbi-section-table-titles.named::before { + content: attr(data-title) "\20"; + font-weight: bold; + text-align: left; + display: inline-block; + align-self: center; + flex: 1 1 5%; + padding: .25em; + white-space: normal; + word-wrap: break-word; +} + .cbi-value-helpicon img { vertical-align: bottom; } @@ -956,14 +1181,241 @@ td.cbi-value-error { padding: 3px; } -.left { + +.cbi-dropdown { + border: 1px solid #ccc; + display: inline-flex; + cursor: pointer; + background: #fff; + position: relative; + padding: 0; + color: #000; + min-width: 20em; + max-width: 100%; +} + +.cbi-dropdown:focus { + outline: 2px solid #4b6e9b; +} + +.cbi-dropdown > ul { + margin: 0 !important; + padding: 0; + list-style: none; + overflow-x: hidden; + overflow-y: auto; + display: flex; + width: 100%; +} + +.cbi-dropdown > ul.preview { + display: none; +} + +.cbi-dropdown > .open { + background: #eee; + border: 2px outset #eee; + flex-basis: 15px; +} + +.cbi-dropdown > .open, +.cbi-dropdown > .more { + flex-grow: 0; + flex-shrink: 0; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + line-height: 2em; + padding: 0 .25em; +} + +.cbi-dropdown > .more, +.cbi-dropdown > ul > li[placeholder] { + color: #777; + font-weight: bold; + text-shadow: 1px 1px 0px #fff; + display: none; +} + +.cbi-dropdown > ul > li { + display: none; + padding: .25em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 1; + flex-grow: 1; + align-items: center; + align-self: center; + min-height: 20px; +} + +.cbi-dropdown > ul > li .hide-open { display: initial; } +.cbi-dropdown > ul > li .hide-close { display: none; } + +.cbi-dropdown > ul > li[display]:not([display="0"]) { + border-left: 1px solid #ccc; +} + +.cbi-dropdown[empty] > ul { + max-width: 1px; +} + +.cbi-dropdown > ul > li > form { + display: none; + margin: 0; + padding: 0; + pointer-events: none; +} + +.cbi-dropdown > ul > li img { + vertical-align: middle; + margin-right: .25em; +} + +.cbi-dropdown > ul > li > form > input[type="checkbox"] { + margin: 0; +} + +.cbi-dropdown > ul > li input[type="text"] { + height: 20px; +} + +.cbi-dropdown[open] { + position: relative; +} + +.cbi-dropdown[open] > ul.dropdown { + display: block; + background: #f6f6f5; + border: 1px solid #918e8c; + box-shadow: 0 0 4px #918e8c; + position: absolute; + z-index: 1000; + max-width: none; + min-width: 100%; + width: auto; +} + +.cbi-dropdown > ul > li[display], +.cbi-dropdown[open] > ul.preview, +.cbi-dropdown[open] > ul.dropdown > li, +.cbi-dropdown[multiple] > ul > li > label, +.cbi-dropdown[multiple][open] > ul.dropdown > li, +.cbi-dropdown[multiple][more] > .more, +.cbi-dropdown[multiple][empty] > .more { + flex-grow: 1; + display: flex; + align-items: center; +} + +.cbi-dropdown[empty] > ul > li, +.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], +.cbi-dropdown[multiple][open] > ul.dropdown > li > form { + display: block; +} + +.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; } +.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; } + +.cbi-dropdown[open] > ul.dropdown > li { + border-bottom: 1px solid #ccc; +} + +.cbi-dropdown[open] > ul.dropdown > li[selected] { + background: #b0d0f0; +} + +.cbi-dropdown[open] > ul.dropdown > li.focus { + background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%); +} + +.cbi-dropdown[open] > ul.dropdown > li:last-child { + margin-bottom: 0; + border-bottom: none; +} + +.cbi-dropdown[disabled] { + pointer-events: none; + opacity: .6; +} + + +.cbi-tooltip-container { + cursor: help; +} + +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + opacity: 0; + transition: opacity .25s ease-out; + pointer-events: none; + box-shadow: 0 0 2px #444; +} + +.cbi-tooltip-container:hover .cbi-tooltip { + left: auto; + opacity: 1; + transition: opacity .25s ease-in; +} + +.zonebadge .cbi-tooltip { + padding: 1px; + background: inherit; + margin: -1.6em 0 0 -5px; +} + + +.zone-forwards { + display: flex; + flex-wrap: wrap; +} + +.zone-forwards > * { + flex: 1 1 45%; + padding: 1px; +} + +.zone-forwards > span { + flex-basis: 10%; + text-align: center; +} + +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} + + +.left, .left::before { text-align: left !important; } -.right { +.right, .right::before { text-align: right !important; } +.center, .center::before { + text-align: center !important; +} + +.td.bottom { + align-self: flex-end; +} + +.td.top { + align-self: flex-start; +} + +.td.middle { + align-self: center; +} + + .footer, .push { height: 2em; } @@ -1070,3 +1522,246 @@ td.cbi-value-error { } } + +@media screen and (max-width: 992px) { + body { + -webkit-text-size-adjust: 100%; + } + + #maincontent { + width: 100%; + } + + .table { + display: flex; + flex-direction: column; + width: 100%; + } + + .tr { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: flex-end; + } + + .th, .td { + flex: 2 2 25%; + align-self: flex-start; + overflow: hidden; + text-overflow: ellipsis; + word-wrap: break-word; + display: inline-block; + } + + .td select { + word-wrap: normal; + } + + .td[data-type="button"], + .td[data-type="fvalue"] { + flex: 1 1 12.5%; + text-align: left; + } + + .td.cbi-value-field { + align-self: flex-start; + } + + .td.cbi-value-field .cbi-button { + width: 100%; + } + + .table.cbi-section-table { + border: none; + background: none; + margin: 0; + } + + .tr.table-titles, + .cbi-section-table-titles, + .cbi-section-table-descr { + display: none; + } + + .table.cbi-section-table .tr > *, + .table.cbi-section-table .tr[data-title]::before { + border-top: none; + } + + .cbi-section-table-row { + display: flex; + flex-direction: row; + flex-wrap: wrap; + border: 1px dotted #444; + margin: 0 0 .5em 0; + background: #fff; + } + + .cbi-section-table-row:hover { + border: 1px solid #4a6b7c; + } + + .table.cbi-section-table .tr:hover > *, + .table.cbi-section-table .tr:nth-child(2n):hover > * { + background: none; + } + + .cbi-section-table + .cbi-section-create { + padding-top: 0; + } + + .tr[data-title]::before { + display: block; + flex: 1 1 100%; + background: #eef; + } + + .td[data-title]::before { + display: block; + } + + .td.cbi-section-actions { + flex-basis: 100%; + margin: auto 0 0 auto; + } + + .td.cbi-section-actions > *, + .td.cbi-section-actions > form > * { + flex: 0 1 100%; + max-width: 150px; + } + + .hide-sm, + .hide-xs { + display: none; + } +} + +@media screen and (max-width: 480px) { + body { + font-size: 12pt; + } + + input, textarea, select { + font-size: 12pt !important; + line-height: 1.4em; + } + + select, input[type="text"], input[type="password"] { + width: 100%; + height: 1.4em; + } + + [data-dynlist] > input, + input.cbi-input-password { + width: calc(100% - 20px); + } + + .cbi-dropdown { + min-width: 100%; + } + + .btn, .cbi-button { + font-size: 9pt !important; + line-height: 11pt; + } + + #maincontent { + padding: .25em; + } + + #tabmenu { + margin: -.25em -.25em 1em -.25em; + } + + .th, .td { + flex: 2 2 50%; + } + + .td.cbi-value-field { + flex-basis: 100%; + } + + .td.cbi-value-field[data-type="dvalue"] { + flex-basis: 50%; + } + + .td.cbi-value-field[data-type="button"], + .td.cbi-value-field[data-type="fvalue"] { + flex-basis: 25%; + text-align: left; + } + + .cbi-section { + padding: .25em; + } + + .cbi-value { + padding: 0 .25em; + } + + .cbi-value-title { + float: none; + font-weight: bold; + } + + .cbi-value-field { + width: 100%; + margin: 0; + } + + .cbi-value-description { + margin-top: 5px; + display: block; + } + + .cbi-section-create { + margin-bottom: 1em; + } + + .cbi-optionals { + display: flex; + } + + .cbi-page-actions { + flex-wrap: wrap; + } + + .cbi-page-actions > .cbi-button-link { + flex-basis: 100%; + margin-right: 2px; + } + + .cbi-optionals > *, + .cbi-page-actions > * { + flex: 1 1 auto; + margin: 2px; + height: auto; + } + + ul.cbi-tabmenu { + padding: 0 3px; + } + + ul.cbi-tabmenu li { + font-size: 90%; + margin: 0 1px -1px 0; + } + + .hide-xs { + display: none; + } + + #cbi-network .td[id] > strong { + display: block; + } + + #cbi-network-switch_vlan .td.cbi-section-actions { + flex-basis: 100%; + } + + .network-status-table .ifacebox { + margin: 0 0 .5em 0; + } +} diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/ie7.css b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/ie7.css deleted file mode 100644 index 67ed9fb816..0000000000 --- a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/ie7.css +++ /dev/null @@ -1,20 +0,0 @@ -div.cbi-value-field { - margin-left: 0 !important; -} - -.cbi-section legend { - background-color: #ffffff; - color: #555555; -} - -table.cbi-section-table td .cbi-input-text, -table.cbi-section-table td .cbi-input-select { - width: 95% !important; -} - -.cbi-input-user, -.cbi-input-password { - text-indent: 0 !important; - padding-left: 1.5em !important; - width: 18.5em !important; -} diff --git a/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm b/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm index 16ffc992ac..b6ed1f7134 100644 --- a/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm +++ b/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm @@ -74,7 +74,6 @@ <link rel="stylesheet" media="only screen and (max-device-width: 854px)" href="<%=media%>/mobile.css" type="text/css" /> <link rel="stylesheet" media="only screen and (max-width: 854px)" href="<%=media%>/smallscreen.css" type="text/css" /> <link rel="stylesheet" media="handheld" href="<%=media%>/mobile.css" type="text/css" /> -<!--[if IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie7.css" /><![endif]--> <% if node and node.css then %><link rel="stylesheet" type="text/css" media="screen" href="<%=resource%>/<%=node.css%>" /> <% end -%> <% if css then %><style title="text/css"> diff --git a/themes/luci-theme-material/htdocs/luci-static/material/css/style.css b/themes/luci-theme-material/htdocs/luci-static/material/css/style.css index a9585cf40e..17db81edb3 100755 --- a/themes/luci-theme-material/htdocs/luci-static/material/css/style.css +++ b/themes/luci-theme-material/htdocs/luci-static/material/css/style.css @@ -32,8 +32,8 @@ font-style: normal; } -.table { display: table; } -.tr { display: table-row; } +.table { display: table; position: relative; } +.tr { display: table-row; } .thead { display: table-header-group; } .tbody { display: table-row-group; } .tfoot { display: table-footer-group; } @@ -48,6 +48,19 @@ font-weight: bold; } +.tr.placeholder { + height: 4em; +} + +.tr.placeholder > .td { + position: absolute; + left: 0; + right: 0; + bottom: 0; + text-align: center; + line-height: 3em; +} + .table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } .table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } @@ -442,10 +455,12 @@ h3 { } h4 { - + margin: 2rem 0 0 0; + font-size: 1.2rem; + padding-bottom: 10px; } -fieldset { +.cbi-section { margin: 2rem 0 0 0; padding: 2rem; border: 0; @@ -465,7 +480,7 @@ fieldset { margin-top: 1rem; } -fieldset > legend { +.cbi-section > legend { display: none !important; } @@ -486,10 +501,12 @@ fieldset > fieldset { border-bottom: 1px solid #eee; } -table, -.table { +table { border-spacing: 0; border-collapse: collapse; +} + +table, .table { width: 100%; border: 1px solid #eee; } @@ -501,21 +518,75 @@ table > tbody > tr > td, table > tbody > tr > th, table > tfoot > tr > td, table white-space: nowrap; } +.td.cbi-value-field, .cbi-section-table-cell { text-align: center; + display: inline-block; + flex: 10; +} + +.cbi-section-table-cell { + white-space: nowrap; + align-self: flex-end; + flex: 1; +} + +.td.cbi-value-field[data-title]::before { + content: attr(data-title); + padding: .5rem; + display: block; + white-space: nowrap; +} + +.cbi-section-table { + border: none; +} + +.tr.cbi-section-table-titles, +.tr.cbi-section-table-descr { + display: none; } .cbi-section-table-row { text-align: center; + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: space-between; + margin-bottom: 1rem; + background: #f4f4f4; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +.cbi-section-table-row:last-child { + margin-bottom: 0; +} + +.cbi-section-table-row[data-title]::before { + content: attr(data-title); + display: block; + width: 100%; + margin: .25rem; + padding: .25rem .25rem .5rem .25rem; + border-bottom: 1px solid rgba(0, 0, 0, .26); + text-align: center; + font-size: 1rem; +} + +.cbi-section-table-row > .cbi-value-field .cbi-input-select, +.cbi-section-table-row > .cbi-value-field .cbi-input-text, +.cbi-section-table-row > .cbi-value-field .cbi-input-password, +.cbi-section-table-row > .cbi-value-field .cbi-dropdown { + width: 100%; } -fieldset > table > tbody > tr:nth-of-type(2n), -fieldset > .table > .tbody > .tr:nth-of-type(2n) { +div > table > tbody > tr:nth-of-type(2n), +div > .table > .tbody > .tr:nth-of-type(2n) { background-color: #f9f9f9; } -fieldset > table > tbody > tr:nth-of-type(2n), -fieldset > .table > .tbody > .tr:nth-of-type(2n) { +div > table > tbody > tr:nth-of-type(2n), +div > .table > .tbody > .tr:nth-of-type(2n) { background-color: #f9f9f9; } @@ -1029,7 +1100,7 @@ td > .ifacebadge, .ifacebadge > img { display: inline-block; margin: 0 .2rem; - align-self: start; + align-self: flex-start; } .ifacebadge > img + img { @@ -1206,10 +1277,9 @@ td > .ifacebadge, .zonebadge { padding: 0.2rem 0.5rem; display: inline-block; - cursor: pointer; } -.zonebadge > .ifacebadge { +.zonebadge .ifacebadge { padding: .2rem .3rem; margin: 0.1rem 0.2rem; border: 1px solid #6C6C6C; @@ -1255,11 +1325,13 @@ td > .ifacebadge, min-width: 7rem; } -.cbi-section-table-row > .cbi-value-field .cbi-input-select { - width: 7rem; +.cbi-section-create { + margin: .5rem -3px; + display: inline-flex; + align-items: center; } -.cbi-section-create > .cbi-button-add { +.cbi-section-create > * { margin: 0.5rem; } @@ -1291,6 +1363,62 @@ small { border-top: 1px solid #CCC; } +.cbi-dropdown-container { + position: relative; +} + +.cbi-tooltip-container { + cursor: help; +} + +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + opacity: 0; + transition: opacity .25s ease-out; + pointer-events: none; + box-shadow: 0 0 2px #444; +} + +.cbi-tooltip-container:hover .cbi-tooltip { + left: auto; + opacity: 1; + transition: opacity .25s ease-in; +} + +.zonebadge .cbi-tooltip { + padding: .25rem; + background: inherit; + margin: -1.5rem 0 0 -.5rem; +} + +.zonebadge-empty { + background: repeating-linear-gradient(45deg,rgba(204,204,204,0.5),rgba(204,204,204,0.5) 5px,rgba(255,255,255,0.5) 5px,rgba(255,255,255,0.5) 10px); + color: #404040; +} + +.zone-forwards { + display: flex; + min-width: 10rem; +} + +.zone-forwards > * { + flex: 1 1 45%; +} + +.zone-forwards > span { + flex-basis: 10%; + text-align: center; + padding: 0 .25rem; +} + +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} + #diag-rc-output > pre { background-color: #f5f5f5; display: block; @@ -1475,11 +1603,6 @@ header > .container > .pull-right > * { margin-top: 0; } -/* fix network firewall*/ -.node-network-firewall > .main .cbi-section-table-row > .cbi-value-field .cbi-input-select { - min-width: 4rem; -} - .node-status-iptables fieldset, .node-system-packages fieldset, .node-system-flashops fieldset { @@ -1515,6 +1638,11 @@ header > .container > .pull-right > * { min-width: 3.5rem; } +#cbi-network-switch_vlan .th, +#cbi-network-switch_vlan .td { + flex-basis: 12%; +} + /* language fix */ body.lang_pl.node-main-login .cbi-value-title { width: 12rem; @@ -1669,6 +1797,26 @@ body.lang_pl.node-main-login .cbi-value-title { .node-main-login > .main .cbi-value-title { text-align: left; } + + .tr { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + + .th, .td { + flex: 1; + flex-basis: 33%; + overflow: hidden; + text-overflow: ellipsis; + } + + .th.cbi-value-field, + .td.cbi-value-field, + .th.cbi-section-table-cell, + .td.cbi-section-table-cell { + flex-basis: auto; + } } @media screen and (max-width: 480px) { @@ -1803,6 +1951,14 @@ body.lang_pl.node-main-login .cbi-value-title { .node-status-iptables > .main div > .cbi-map > form input[type="submit"] + input[type="submit"] { margin-top: 1rem; } + + .th, .td { + flex-basis: 50%; + } + + .td.cbi-value-field { + flex-basis: 100%; + } } @media screen and (min-width: 992px) { diff --git a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css index 1d5ac8ab24..4bde3eaea2 100644 --- a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css +++ b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css @@ -18,8 +18,8 @@ body { background-color: #4a6b7c; background-position: bottom center; background-repeat: repeat-x; - font-family: Verdana, Arial, sans-serif; - font-size: 11pt; + font-family: Arial, Verdana, sans-serif; + font-size: 16px; line-height: 100%; padding-bottom: 1.5em; } @@ -30,7 +30,7 @@ body { box-sizing: border-box; } -.table { display: table; } +.table { display: table; width: 100%; position: relative; } .tr { display: table-row; } .thead { display: table-header-group; } .tbody { display: table-row-group; } @@ -41,6 +41,30 @@ body { .table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } .table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } +.col-1 { flex: 1 1 30px !important; -webkit-flex: 1 1 30px !important; } +.col-2 { flex: 2 2 60px !important; -webkit-flex: 2 2 60px !important; } +.col-3 { flex: 3 3 90px !important; -webkit-flex: 3 3 90px !important; } +.col-4 { flex: 4 4 120px !important; -webkit-flex: 4 4 120px !important; } +.col-5 { flex: 5 5 150px !important; -webkit-flex: 5 5 150px !important; } +.col-6 { flex: 6 6 180px !important; -webkit-flex: 6 6 180px !important; } +.col-7 { flex: 7 7 210px !important; -webkit-flex: 7 7 210px !important; } +.col-8 { flex: 8 8 240px !important; -webkit-flex: 8 8 240px !important; } +.col-9 { flex: 9 9 270px !important; -webkit-flex: 9 9 270px !important; } +.col-10 { flex: 10 10 300px !important; -webkit-flex: 10 10 300px !important; } + +.tr.placeholder { + height: 3.5em; +} + +.tr.placeholder > .td { + position: absolute; + left: 0; + right: 0; + bottom: 0; + text-align: center; + line-height: 3em; +} + .nowrap { white-space: nowrap; } @@ -50,81 +74,95 @@ a img { text-decoration: none; } -ul.tabmenu { - margin: 0; - clear: both; - display: block; - vertical-align: bottom; - font-size: 10pt; - padding: 5px 0 0 5px; +#maincontainer { + display: flex; } -div.tabmenu2 { - background-color: #AAAAAA; - background-image: url(tabbg.png); - background-repeat: repeat-x; - margin-top: -1px; - border: 1px solid #444444; - border-bottom: none; +#maincontent { + flex-basis: 100%; } -div.tabmenu3, -div.tabmenu4, -div.tabmenu5 { - background-color: #AAAAAA; - background-image: url(tabbg.png); - background-repeat: repeat-x; - border: none; +#mainmenu { + max-width: 200px; + background: #f5f5f5; + border: 1px solid #444; + border-width: 0 0 1px 1px; + font-size: 85%; + padding-bottom: 1em; } -ul.tabmenu li { - float: left; +#mainmenu ul { display: block; - overflow: hidden; + margin: 0; + padding: 0; } -.lang_he ul.tabmenu li { - float: right; +#mainmenu ul li { + display: block; + white-space: nowrap; } -ul.tabmenu li a { - text-decoration: none; - color: #444444; +#mainmenu ul li > a { display: block; - padding: 3px 8px; - margin: 0 2px; - line-height: 1.3em; - border: 1px solid transparent; - border-bottom: none; + color: #444; + padding: .4em .5em; + text-decoration: none; +} + +#mainmenu ul li.selected > a { + background: #fff; + color: #37c; + border: 1px dotted #444; + border-width: 1px 0; +} + +#mainmenu ul li.selected:first-child > a { + border-top: none; +} + +#mainmenu ul li li > a { font-size: 85%; + padding-left: 1.5em; } -ul.tabmenu li.active a { - font-weight: bold; - color: #000000; - background: #f5f5f5; - border: 1px solid #AAAAAA; - border-bottom: none; +#mainmenu ul li > ul { + flex-basis: 100%; + max-height: 0; + visibility: hidden; + transition: max-height .15s; } -ul.tabmenu li a:hover { - color: #444444; - border-color: #444444; +#mainmenu ul:not(.active) li.selected > ul, +#mainmenu ul li.active > ul { + max-height: 1000px; + visibility: visible; + transition: max-height .25s; } -ul.l1 li a { - background-color: #AAAAAA; - background-image: url(tabbg.png); - background-repeat: repeat-x; - border-color: #444444; +#mainmenu ul li.mainmenu-item-logout { + margin-top: 15%; +} + +#tabmenu { + padding: 0; + margin: -.5em -.5em .5em -.5em; + background: #bbb; +} + +#tabmenu ul { + border-color: #444; + padding-top: .5em; + flex-wrap: wrap; + background: repeating-linear-gradient(#f5f5f5, #bbb 2.4em, #f5f5f5 2.4em, #bbb); + line-height: 1em; } -ul.l1 li.tabmenu-item-logout a { - margin-left: 30px; +#tabmenu ul li { + border-color: #444; } -.lang_he ul.l1 li.tabmenu-item-logout a { - margin-right: 30px; +#tabmenu ul li.cbi-tab { + background: #f5f5f5; } abbr, @@ -151,6 +189,13 @@ code { white-space: pre; } +hr { + margin: .5em 0; + padding: 0; + border: 1px solid #444; + border-width: 0 0 1px 0; +} + #maincontent ul { margin-left: 2em; } @@ -183,30 +228,31 @@ code { } .alert-message { - font-size: 9pt; font-weight: normal; padding: .5em; border-radius: 3px; - color: #000; + border: 1px solid #a22; + color: #a22; + background: #fee; + margin: 0 0 .5em 0; } .alert-message.notice { - background: linear-gradient(#ccc 0%, #eee 100%); - color: #4a6b7c; + border-color: #15a; + background: #e6f6ff; + color: #15a; } .alert-message.warning { - background: linear-gradient(#dda 0%, #dd8 100%); - color: #c00; -} - -.alert-message > * { - margin: .5em; + border-color: #ed5; + background: #fe9; + color: #650; } -.alert-message > h4 { - font-weight: bold; - font-size: 10pt; +.alert-message .btn, +.alert-message .cbi-button { + background: inherit; + border-color: inherit; } div.hostinfo { @@ -348,56 +394,40 @@ textarea#syslog { direction: rtl; } -#maincontent h2 { +h2, h3, h4, legend { font-size: 150%; font-family: Trebuchet MS, Verdana, sans-serif; font-weight: bold; - margin: 0.25em 0 0.7em 0; + margin: .25em 0 .5em 0; border-bottom: 1px solid; - padding-top: 10px; padding-bottom: 4px; + display: block; + width: 100%; } -#maincontent h3 { - margin: 0.5em 0 1.1em 0; +h3, legend { font-size: 125%; - font-weight: bold; - font-style: italic; - font-family: Trebuchet MS, Verdana, sans-serif; - color: #27408B; } -#maincontent p { - margin-bottom: 1em; +h4 { + font-size: 112%; } -.cbi-section { - margin-bottom: 0.5em; - padding: 0.5em 1em; - border: 1px dotted #555555; - background-color: #ffffff; - color: #000000; -} +fieldset { border: none; } +fieldset > legend { float: left; } +fieldset > legend + * { clear: both; } -.cbi-section legend { - font-size: 110%; - font-weight: bold; - height: 1em; - padding: 0 0.25em; - background-color: transparent; - color: #555555; +#maincontent p { + margin-bottom: 1em; } -.cbi-section h2 { - margin: 0em 0 0.5em -0.5em !important; +.cbi-section { + margin: 0 0 .5em 0; } -.cbi-section h3 { - text-decoration: none !important; - font-weight: bold !important; - color: #555555 !important; - margin: 0.25em !important; - font-size: 100% !important; +.cbi-section > h3, +.cbi-section > legend { + margin-top: .5em; } .cbi-section-descr { @@ -405,6 +435,10 @@ textarea#syslog { font-size: 95%; } +.cbi-section-descr:empty { + display: none; +} + .cbi-title-ref { color: inherit; text-decoration: none; @@ -450,7 +484,7 @@ input[type=image] { } input:focus, -input:hover, +input:not(.cbi-button):hover, select:focus, select:hover { background-color: #ffffff; @@ -459,21 +493,38 @@ select:hover { input[type=text], input[type=password] { - padding: 1px 3px; + padding: 0 3px; } select, input[type=text], input[type=password] { - font-size: inherit; width: 20em; + font-size: inherit; + line-height: 13pt; + height: 14pt; +} + +select[multiple] { + height: auto; +} + +input[type=radio], +input[type=checkbox], +[data-dynlist] > input + img, +input.cbi-input-password + img { + vertical-align: middle; } .td select, .td .cbi-dropdown, -.td input[type=text], -.td input[type=password] { - width: 99%; +.td input[type=text] { + width: 100%; +} + +.td [data-dynlist] > input, +.td input.cbi-input-password { + width: calc(100% - 20px); } img.cbi-image-button { @@ -483,18 +534,23 @@ img.cbi-image-button { } .btn, .cbi-button { - padding: 2px; + padding: 0 .5em; border-radius: 3px; border: 1px solid #aaa; - background: #eee 1px center no-repeat; text-decoration: none; color: #000; display: inline-block; + font-size: inherit; + -webkit-appearance: none; + background: #fff; + text-align: center; + font-weight: bold; + line-height: 13pt; + height: 16pt; } .btn:hover, .cbi-button:hover { - border-color: #4a6b7c; - background-color: #fff; + box-shadow: 0 0 3px #37c; } .btn[disabled], @@ -503,153 +559,59 @@ img.cbi-image-button { .cbi-button[disabled]:hover { opacity: .6; cursor: default; - border-color: inherit; - background-color: inherit; -} - -input.cbi-input-user { - background-image: url('../resources/cbi/user.gif'); - background-repeat: no-repeat; - background-position: 1px center; - color: #000000; - text-indent: 17px; -} - -input.cbi-input-password { - background-image: url('../resources/cbi/key.gif'); - background-repeat: no-repeat; - background-position: 1px center; - color: #000000; - text-indent: 17px; -} - -input.cbi-input-find, -input.cbi-button-find { - background-image: url('../resources/cbi/find.gif'); - color: #000000; - padding-left: 17px; -} - -input.cbi-input-reload { - background-image: url('../resources/cbi/reload.gif'); - color: #000000; - padding-left: 17px; -} - -input.cbi-input-add, -input.cbi-button-add { - background-image: url('../resources/cbi/add.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-input-fieldadd, -input.cbi-button-fieldadd { - background-image: url(../resources/cbi/fieldadd.gif); - color: #000000; - padding-left: 17px; -} - -input.cbi-input-reset, -input.cbi-button-reset { - background-image: url('../resources/cbi/reset.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-input-save, -input.cbi-button-save { - background-image: url('../resources/cbi/save.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; -} - -/* -input.cbi-input-apply, -input.cbi-button-apply { - background-image: url('../resources/cbi/apply.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; -} -*/ - -input.cbi-input-apply:before, -input.cbi-button-apply:before { - background-image: url('../resources/cbi/apply.gif'); - border: 2px solid red; - width: 100px; - height: 100px; - content: "."; - display: block; - position: absolute; -} - -input.cbi-input-link, -input.cbi-button-link { - background-image: url('../resources/cbi/link.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-input-download, -input.cbi-button-download { - background-image: url('../resources/cbi/download.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; + pointer-events: none; } -input.cbi-input-remove, -div.cbi-section-remove input { - background-image: url('../resources/cbi/remove.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; +.cbi-button-positive, +.cbi-button-fieldadd, +.cbi-button-add, +.cbi-button-save { + border-color: #595; + color: #595; } -input.cbi-button-up { - background-image: url('../resources/cbi/up.gif'); - padding-left: 11px; - padding-right: 1px; +.cbi-button-neutral, +.cbi-button-reset, +.cbi-button-download, +.cbi-button-find, +.cbi-button-link, +.cbi-button-up, +.cbi-button-down { + border-color: #444; + color: #444; } -input.cbi-button-down { - background-image: url('../resources/cbi/down.gif'); - padding-left: 11px; - padding-right: 1px; +.cbi-button-action, +.cbi-button-apply, +.cbi-button-reload, +.cbi-button-edit { + border-color: #37c; + color: #37c; } -input.cbi-button-edit { - background-image: url('../resources/cbi/edit.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; +.cbi-button-negative, +.cbi-section-remove .cbi-button, +.cbi-button-remove { + border-color: #a22; + color: #a22; } -input.cbi-button-reload { - background-image: url('../resources/cbi/reload.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; +.cbi-button-action.important, +.cbi-page-actions .cbi-button-apply, +.cbi-section-actions .cbi-button-edit { + color: #fff; + background: #37c; } -input.cbi-button-reset { - background-image: url('../resources/cbi/reset.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; +.cbi-button-positive.important, +.cbi-page-actions .cbi-button-save { + color: #fff; + background: #595; } -input.cbi-button-remove { - background-image: url('../resources/cbi/remove.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; +.cbi-page-actions .cbi-button-apply + .cbi-button-save { + background: #fff; + color: #595; } .cbi-input-invalid { @@ -660,30 +622,13 @@ input.cbi-button-remove { border-color: #FF0000; } -div.cbi-section-remove input { - border-bottom: none; -} - -textarea { - margin-left: -1px; - margin-bottom: 0.5em; -} - -form > div > input[type=submit], -form > div > input[type=reset] { - float: right; - margin-left: 0.5em; -} - table td, table th { color: #000000; } .table .td, .table .th { color: #000000; - padding: .25em 0; - text-align: center; - vertical-align: middle; + padding: .25em; } .table.smalltext { @@ -716,39 +661,23 @@ table td, table th { border-left: 1px solid #666666; } -.table.cbi-section-table .cbi-rowstyle-1 { +.cbi-rowstyle-1 { background-color: #eeeeff; color: #000000; } -.table.cbi-section-table .cbi-rowstyle-1:hover, -.table.cbi-section-table .cbi-rowstyle-2:hover { - background-color: #b2c8d4; - color: #000000; -} - -.table.cbi-section-table .cbi-section-table-cell { - padding: 3px; - white-space: nowrap; -} - -.cbi-section .cbi-rowstyle-1 h3 { - background-color: #eeeeff; - color: #555555; -} - .cbi-rowstyle-2 { color: #000000; } -div.cbi-value { +.cbi-value { clear: left; vertical-align: middle; padding: 0.25em 0.6em; border-bottom: 1px dotted #bbbbbb; } -div.cbi-value:hover { +.cbi-value:hover { background: #f8f8f8; color: #000000; } @@ -759,35 +688,49 @@ div.cbi-value:hover { line-height: 1.8em; } -div.cbi-value-field { +.cbi-value-field { width: 58%; margin-left: 40%; padding: 0.25em 0; } -div.td.cbi-value-field { +.td.cbi-value-field { width: auto; - vertical-align: middle; + margin-left: 0; + align-self: center; } -div.cbi-value-description { - font-size: 90%; - display: inline; +.cbi-value-description { + background-image: url(/luci-static/resources/cbi/help.gif); + background-position: .25em .25em; + background-repeat: no-repeat; + margin: .25em 0 0 0; + padding: .25em .25em .25em 1.75em; } -div.cbi-section-create { - clear: left; - white-space: nowrap; - vertical-align: top; +.cbi-section-create { + padding: 0 0 .25em 0; + margin: -3px; + display: inline-flex; + align-items: center; } -div.cbi-section-create .btn, -div.cbi-section-create .cbi-button { - margin: 0.25em; +.cbi-section-create > * { + margin: 3px; + flex: 1 1 auto; } -input.cbi-section-create-name { - margin-right: -0.25em; +.cbi-section-create > * > input { + width: 100%; +} + +.cbi-section-remove > .cbi-button { + margin-bottom: -1px; + border-radius: 3px 3px 0 0; +} + +.cbi-section-node + .cbi-section-create { + padding-top: 0; } div.cbi-map-descr { @@ -799,43 +742,46 @@ div.cbi-optionals { border-bottom: 1px dotted #bbbbbb; } -div.cbi-section-remove { - float: right; -} - .cbi-section-node { clear: both; - border: 1px solid #BBBBBB; - border-radius: 3px; padding-bottom: 0; position: relative; + border: 1px dotted #555; + background: #fff; + margin-bottom: .5em; } .cbi-section-node-tabbed { - border-top-left-radius: 0; + border-top: none; + margin-top: -.5em; } -.cbi-section-node .cbi-value-last { +.cbi-section-node .cbi-value:last-child, +.cbi-section-node .cbi-optionals:last-child { border-bottom: none; } -.cbi-section-node .table div { - padding-bottom: 0; - border-bottom: none; +.table.cbi-section-table { + width: 100%; + font-size: 95%; + border: 1px dotted #444; + background: #fff; + margin: 0 0 .5em 0; } -.cbi-section-node div.cbi-section-table-row { - margin: 0.25em; +.cbi-section-node > .table.cbi-section-table { + border: none; + margin: 0; } -.table.cbi-section-table { - width: 100%; - font-size: 95%; +@keyframes flash { + 0% { opacity: 1; } + 50% { opacity: .5; } + 100% { opacity: 1; } } -.table.cbi-section-table .th, -.table.cbi-section-table .td { - text-align: center; +.tr.cbi-section-table-row.flash { + animation: flash .35s; } .tr.cbi-section-table-descr .th { @@ -849,6 +795,92 @@ div.cbi-section-remove { padding-top: 1em; } +.th.cbi-section-actions, +.td.cbi-section-actions { + display: flex; + justify-content: flex-end; + flex-direction: row; + flex: 1 1 150px; + margin: auto -1px auto auto; +} + +.td.cbi-section-actions > form { + display: flex; +} + +.td.cbi-section-actions > *, +.td.cbi-section-actions > form > * { + flex: 1 1 4em; + margin: 1px; +} + +.cbi-page-actions { + display: flex; + justify-content: flex-end; + margin: -3px; +} + +.cbi-page-actions > form { + display: flex; +} + +.cbi-page-actions > * { + flex: 0 1 auto; + margin: 3px; +} + +.cbi-page-actions > form > * { + flex: 1; + margin: 0 3px 0 0; +} + +.cbi-page-actions > .cbi-button-link, +.cbi-page-actions > form[method="get"]:first-child { + margin-right: auto; +} + + +.th[data-type="button"], .td[data-type="button"], +.th[data-type="fvalue"], .td[data-type="fvalue"] { + flex: 1 1 2em; + text-align: center; +} + +#cbi-network-switch_vlan .th, +#cbi-network-switch_vlan .td { + flex-basis: 12%; +} + +#cbi-wireless-overview .td:first-child { + align-self: center; +} + +.td[data-title]::before { + content: attr(data-title) ":\20"; + font-weight: bold; + text-align: left; + display: none; + padding: 1px; + white-space: nowrap; +} + +.tr.placeholder .td[data-title]::before { + display: none; +} + +.tr[data-title]::before, +.tr.cbi-section-table-titles.named::before { + content: attr(data-title) "\20"; + font-weight: bold; + text-align: left; + display: inline-block; + align-self: center; + flex: 1 1 5%; + padding: .25em; + white-space: normal; + word-wrap: break-word; +} + .cbi-value-helpicon img { vertical-align: bottom; } @@ -877,55 +909,54 @@ div.cbi-section-remove { } ul.cbi-tabmenu { - padding: 3px 0; - margin-left: 0 !important; list-style-type: none; - position: relative; - z-index: 10; - top: 4px; - line-height: 20px; -} - -ul.cbi-tabmenu li.cbi-tab, -ul.cbi-tabmenu li.cbi-tab-disabled { - display: inline; - margin: 0; + display: flex; + margin: 0 0 .5em 0 !important; + padding: 0 0 0 5px; + border-bottom: 1px solid #bbb; } -ul.cbi-tabmenu li.cbi-tab a, -ul.cbi-tabmenu li.cbi-tab-disabled a { - text-decoration: none; - padding: 3px 7px; - margin-right: 3px; - border: 1px solid #BBBBBB; +ul.cbi-tabmenu li { + display: inline-flex; + margin: 0 5px -1px 0; + flex: 0 1 auto; + border: 1px solid #bbb; border-bottom: none; border-radius: 3px 3px 0 0; - background-color: #EEEEEE; - color: #BBBBBB; + background: linear-gradient(#ddd 90%, #aaa 100%); + color: #888; + overflow: hidden; + text-overflow: ellipsis; + word-wrap: break-word; } -ul.cbi-tabmenu li.cbi-tab-highlighted a { - color: #000000; - background-color: #FFEEAA; +ul.cbi-tabmenu li a, +ul.cbi-tabmenu li a:hover { + text-decoration: none; + color: inherit; + padding: 5px; + flex: 1; + width: 100%; + height: 100%; } -ul.cbi-tabmenu li a:hover { - color: #000000; +ul.cbi-tabmenu li.cbi-tab-highlighted { + color: #000; + background: #fea; } -ul.cbi-tabmenu li.cbi-tab a { - padding-top: 4px; - color: #000000; - background-color: #FFFFFF; +ul.cbi-tabmenu li.cbi-tab { + color: #000; + background: #fff; } -div.cbi-tab-descr { +.cbi-tab-descr { background-image: url(/luci-static/resources/cbi/help.gif); - background-position: 0.25em 50%; + background-position: .25em 50%; background-repeat: no-repeat; - border-bottom: 1px solid #CCCCCC; - margin: 0.25em 0.25em 2em; - padding: 0.5em 0.5em 0.5em 2em; + border-bottom: 1px solid #ccc; + margin: 0 .25em .25em .25em; + padding: .5em .5em .5em 2em; } @@ -938,6 +969,7 @@ div.cbi-tab-descr { padding: 0; color: #000; min-width: 20em; + max-width: 100%; } .cbi-dropdown:hover { @@ -1091,18 +1123,79 @@ div.cbi-tab-descr { } -.left { +.cbi-tooltip-container { + cursor: help; +} + +.cbi-tooltip { + position: absolute; + z-index: 1000; + left: -1000px; + opacity: 0; + transition: opacity .25s ease-out; + pointer-events: none; + box-shadow: 0 0 2px #444; +} + +.cbi-tooltip-container:hover .cbi-tooltip { + left: auto; + opacity: 1; + transition: opacity .25s ease-in; +} + +.zonebadge .cbi-tooltip { + padding: 1px; + background: inherit; + margin: -1.6em 0 0 -5px; +} + + +.zone-forwards { + display: flex; + flex-wrap: wrap; +} + +.zone-forwards > * { + flex: 1 1 45%; + padding: 1px; +} + +.zone-forwards > span { + flex-basis: 10%; + text-align: center; +} + +.zone-forwards .zone-src, +.zone-forwards .zone-dest { + display: flex; + flex-direction: column; +} + + +.left, .left::before { text-align: left !important; } -.right { +.right, .right::before { text-align: right !important; } -.center { +.center, .center::before { text-align: center !important; } +.td.bottom { + align-self: flex-end; +} + +.td.top { + align-self: flex-start; +} + +.td.middle { + align-self: center; +} + .luci { position: absolute; bottom: 0; @@ -1154,10 +1247,13 @@ div.cbi-tab-descr { align-items: center; } +.ifacebadge > * { + align-self: flex-start; +} + .ifacebadge > img, .ifacebadge > em { margin-right: 5px; - align-self: start; display: inline-block; height: 16px; } @@ -1169,23 +1265,30 @@ div.cbi-tab-descr { .ifacebox { flex-direction: column; - margin: 0 10px; + margin: 0; padding: 0; min-width: 100px; + text-align: center; } .ifacebox > * { padding: 2px; } +.td > .ifacebadge, +.td > .zonebadge { + margin: 0; + vertical-align: top; +} .network-status-table { display: flex; flex-wrap: wrap; + margin: -.25em; } .network-status-table .ifacebox { - margin: .5em; + margin: .25em; font-size: 90%; flex-grow: 1; } @@ -1205,8 +1308,10 @@ div.cbi-tab-descr { flex-wrap: wrap; } +.ifacebadge.large, .network-status-table .ifacebox-body .ifacebadge { flex: 1; + -webkit-flex: 1 1 auto; margin: .5em .25em .25em .25em; padding: .5em; min-width: 220px; @@ -1218,7 +1323,6 @@ div.cbi-tab-descr { padding: 2px; display: inline-block; white-space: nowrap; - cursor: pointer; border-radius: 3px; } @@ -1234,7 +1338,7 @@ div.cbi-tab-descr { .zonebadge .ifacebadge, .cbi-dropdown .ifacebadge { - margin: 0 .125em; + margin: 1px; } .zonebadge .ifacebadge img, @@ -1322,3 +1426,306 @@ div.cbi-tab-descr { } + +@media screen and (max-width: 992px) { + body { + -webkit-text-size-adjust: 100%; + } + + #maincontainer { + flex-direction: column; + width: 100%; + } + + #maincontent { + width: 96%; + margin: auto; + } + + #mainmenu { + border: none; + border-radius: 0; + max-width: none; + background: #000; + box-shadow: 0 0 2px #444; + padding: 0; + border-top: 1px solid #444; + position: relative; + } + + #mainmenu ul > li.selected > a { + background: #444; + color: #fff; + border-top: none; + } + + #mainmenu ul > li.selected:not(.active) > ul { + max-height: 0; + visibility: hidden; + } + + #mainmenu ul > li > a { + flex: 1; + color: #fff; + border: 1px solid #444; + border-width: 0 0 1px 1px; + } + + #mainmenu ul.l1 { + display: flex; + flex-direction: row; + flex-wrap: wrap; + position: relative; + margin-left: -1px; + width: 100%; + } + + #mainmenu ul.l1 > li { + display: inline-flex; + flex: 1 1 auto; + position: relative; + height: 2em; + } + + #mainmenu ul.l1 ul.l2 { + position: absolute; + top: 2em; + right: 0; + z-index: 1000; + background: #000; + box-shadow: 0 0 2px #444; + min-width: 120px; + display: block; + } + + #mainmenu ul.l1 ul.l2.align-left { + right: auto; + left: 0; + } + + #mainmenu ul.l2 > li { + display: block; + } + + #mainmenu ul.l2 > li > a { + padding: .5em; + } + + #mainmenu ul li.mainmenu-item-logout { + margin-top: 0; + margin-left: auto; + } + + #mainmenu ul li.mainmenu-item-logout::before { + content: "\0a"; + flex: 10; + border: 1px solid #444; + border-width: 0 0 1px 1px; + } + + .table { + display: flex; + flex-direction: column; + width: 100%; + } + + .tr { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: flex-end; + } + + .th, .td { + flex: 2 2 25%; + align-self: flex-start; + overflow: hidden; + text-overflow: ellipsis; + word-wrap: break-word; + display: inline-block; + } + + .td select { + word-wrap: normal; + } + + .td[data-type="button"], + .td[data-type="fvalue"] { + flex: 1 1 12.5%; + text-align: left; + } + + .td.cbi-value-field { + align-self: flex-start; + } + + .td.cbi-value-field .cbi-button { + width: 100%; + } + + .table.cbi-section-table { + border: none; + background: none; + margin: 0; + } + + .tr.table-titles, + .cbi-section-table-titles, + .cbi-section-table-descr { + display: none; + } + + .cbi-section-table-row { + display: flex; + flex-direction: row; + flex-wrap: wrap; + border: 1px dotted #444; + margin: 0 0 .5em 0; + background: #fff; + } + + .cbi-section-table-row:hover { + border: 1px solid #4a6b7c; + } + + .cbi-section-table + .cbi-section-create { + padding-top: 0; + } + + .tr[data-title]::before { + display: block; + flex: 1 1 100%; + background: #eef; + } + + .td[data-title]::before { + display: block; + } + + .td.cbi-section-actions { + flex-basis: 100%; + margin: auto -1px 0 auto; + } + + .td.cbi-section-actions > *, + .td.cbi-section-actions > form > * { + flex: 0 1 100%; + max-width: 150px; + } + + .hide-sm, + .hide-xs { + display: none; + } +} + +@media screen and (max-width: 480px) { + body { + font-size: 12pt; + } + + input, textarea, select { + font-size: 12pt !important; + line-height: 1.4em; + } + + select, input[type="text"], input[type="password"] { + width: 100%; + height: 1.4em; + } + + [data-dynlist] > input, + input.cbi-input-password { + width: calc(100% - 20px); + } + + .cbi-dropdown { + min-width: 100%; + } + + .btn, .cbi-button { + font-size: 9pt !important; + line-height: 13pt; + } + + #maincontent { + padding: .25em; + } + + #tabmenu { + margin: -.25em -.25em 1em -.25em; + } + + .th, .td { + flex: 2 2 50%; + } + + .td.cbi-value-field { + flex-basis: 100%; + } + + .td.cbi-value-field[data-type="dvalue"] { + flex-basis: 50%; + } + + .td.cbi-value-field[data-type="button"], + .td.cbi-value-field[data-type="fvalue"] { + flex-basis: 25%; + text-align: left; + } + + .cbi-value-title { + float: none; + font-weight: bold; + } + + .cbi-value-field { + width: 100%; + margin: 0; + } + + .cbi-value-description { + margin-top: 5px; + display: block; + } + + .cbi-section-create { + margin-bottom: 1em; + } + + .cbi-page-actions { + flex-wrap: wrap; + margin: -2px; + } + + .cbi-page-actions > .cbi-button-link { + flex-basis: 100%; + margin-right: 2px; + } + + .cbi-page-actions > * { + flex: 1 1 auto; + margin: 2px; + } + + ul.cbi-tabmenu { + padding: 0 3px; + } + + ul.cbi-tabmenu li { + font-size: 90%; + margin: 0 1px -1px 0; + } + + .hide-xs { + display: none; + } + + #cbi-network .td[id] > strong { + display: block; + } + + #cbi-network-switch_vlan .td.cbi-section-actions { + flex-basis: 100%; + } +} diff --git a/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm b/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm index cbf02a76cd..773cf1f82e 100644 --- a/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm +++ b/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm @@ -56,9 +56,39 @@ local childs = disp.node_childs(node) if #childs > 0 then - write('<div class="tabmenu%d"><ul class="tabmenu l%d">' %{ - level, level - }) + write('<ul class="mainmenu l%d">' % level) + + local i, v + for i, v in ipairs(childs) do + local nnode = node.nodes[v] + + write('<li class="mainmenu-item-%s %s"><a href="%s">%s</a>' %{ + v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'selected' or '', + nodeurl(prefix, v, nnode.query), + striptags(translate(nnode.title)) + }) + + if level < 2 then + render_menu(prefix .. "/" .. v, nnode, level + 1) + end + + write('</li>') + end + + write('</ul>') + end + end + + local function render_tabmenu(prefix, node, level) + if not level then + level = 1 + end + + local childs = disp.node_childs(node) + if #childs > 0 then + if level > 2 then + write('<ul class="cbi-tabmenu">') + end local selected_node local selected_name @@ -71,20 +101,22 @@ selected_name = v end - write('<li class="tabmenu-item-%s %s"><a href="%s">%s</a></li>' %{ - v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'active' or '', - nodeurl(prefix, v, nnode.query), - striptags(translate(nnode.title)) - }) + if level > 2 then + write('<li class="tabmenu-item-%s %s"><a href="%s">%s</a></li>' %{ + v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'cbi-tab' or '', + nodeurl(prefix, v, nnode.query), + striptags(translate(nnode.title)) + }) + end end - write('</ul><br style="clear:both" />') + if level > 2 then + write('</ul>') + end if selected_node then - render_menu(prefix .. "/" .. selected_name, selected_node, level + 1) + render_tabmenu(prefix .. "/" .. selected_name, selected_node, level + 1) end - - write('</div>') end end @@ -116,6 +148,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=luci.i18n.context.lang%>" lang="<%=luci.i18n.context.lang%>"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" /> <% if node and node.css then %><link rel="stylesheet" type="text/css" media="screen" href="<%=resource%>/<%=node.css%>" /> @@ -125,6 +158,47 @@ </style> <% end -%> <script type="text/javascript" src="<%=resource%>/xhr.js"></script> +<script type="text/javascript">//<![CDATA[ + document.addEventListener('DOMContentLoaded', function() { + var event = ('ontouchstart' in window) ? 'touchstart' : 'click'; + + document.querySelectorAll('ul.mainmenu.l1 > li > a').forEach(function(a) { + a.addEventListener(event, function(ev) { + var a = ev.target, ul1 = a.parentNode.parentNode, ul2 = a.nextElementSibling; + + document.querySelectorAll('ul.mainmenu.l1 > li.active').forEach(function(li) { + if (li !== a.parentNode) + li.classList.remove('active'); + }); + + if (!ul2) + return; + + if (ul2.parentNode.offsetLeft + ul2.offsetWidth <= ul1.offsetLeft + ul1.offsetWidth) + ul2.classList.add('align-left'); + + ul1.classList.add('active'); + a.parentNode.classList.add('active'); + a.blur(); + + ev.preventDefault(); + ev.stopPropagation(); + }); + }); + + document.addEventListener(event, function(ev) { + var t = ev.target; + + while (t && t.id != 'mainmenu') + t = t.parentNode; + + if (!t) + document.querySelectorAll('ul.mainmenu > li.active').forEach(function(li) { + li.classList.remove('active'); + }); + }); + }); +//]]></script> <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title> </head> <body class="lang_<%=luci.i18n.context.lang%>"> @@ -161,11 +235,15 @@ </div> <div id="maincontainer"> - <div id="tabmenu"> + <div id="mainmenu"> <% if category then render_menu(category, cattree) end %> </div> <div id="maincontent"> + <div id="tabmenu"> + <% if category then render_tabmenu(category, cattree) end %> + </div> + <noscript> <div class="alert-message warning"> <h4><%:JavaScript required!%></h4> |