diff options
Diffstat (limited to 'applications')
375 files changed, 17443 insertions, 3064 deletions
diff --git a/applications/luci-app-adblock/Makefile b/applications/luci-app-adblock/Makefile index 8efe2d604..ae1eba251 100644 --- a/applications/luci-app-adblock/Makefile +++ b/applications/luci-app-adblock/Makefile @@ -1,14 +1,12 @@ -# Copyright (C) 2016 Openwrt.org -# -# This is free software, licensed under the Apache License, Version 2.0 . -# +# Copyright 2017 Dirk Brenken (dev@brenken.org) +# This is free software, licensed under the Apache License, Version 2.0 include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI support for Adblock -LUCI_DEPENDS:=+adblock +LUCI_DEPENDS:=+adblock +luci-lib-jsonc LUCI_PKGARCH:=all include ../../luci.mk -# call BuildPackage - OpenWrt buildroot signature +# call BuildPackage - OpenWrt buildroot signature
\ No newline at end of file diff --git a/applications/luci-app-adblock/luasrc/controller/adblock.lua b/applications/luci-app-adblock/luasrc/controller/adblock.lua index d8b471814..b37fcd889 100644 --- a/applications/luci-app-adblock/luasrc/controller/adblock.lua +++ b/applications/luci-app-adblock/luasrc/controller/adblock.lua @@ -1,12 +1,52 @@ --- Copyright 2016 Openwrt.org --- Licensed to the public under the Apache License 2.0. +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 module("luci.controller.adblock", package.seeall) +local fs = require("nixio.fs") +local util = require("luci.util") +local template = require("luci.template") +local i18n = require("luci.i18n") + function index() if not nixio.fs.access("/etc/config/adblock") then return end + entry({"admin", "services", "adblock"}, firstchild(), _("Adblock"), 30).dependent = false + entry({"admin", "services", "adblock", "tab_from_cbi"}, cbi("adblock/overview_tab"), _("Overview"), 10).leaf = true + entry({"admin", "services", "adblock", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true + entry({"admin", "services", "adblock", "advanced"}, firstchild(), _("Advanced"), 100) + entry({"admin", "services", "adblock", "advanced", "blacklist"}, cbi("adblock/blacklist_tab"), _("Edit Blacklist"), 110).leaf = true + entry({"admin", "services", "adblock", "advanced", "whitelist"}, cbi("adblock/whitelist_tab"), _("Edit Whitelist"), 120).leaf = true + entry({"admin", "services", "adblock", "advanced", "configuration"}, cbi("adblock/configuration_tab"), _("Edit Configuration"), 130).leaf = true + entry({"admin", "services", "adblock", "advanced", "query"}, call("query"), _("Query domains"), 140).leaf = true + entry({"admin", "services", "adblock", "advanced", "result"}, call("queryData"), nil, 150).leaf = true +end + +function logread() + local logfile = util.trim(util.exec("logread -e 'adblock'")) + template.render("adblock/logread", {title = i18n.translate("Adblock Logfile"), content = logfile}) +end - entry({"admin", "services", "adblock"}, cbi("adblock"), _("Adblock"), 40) +function query() + template.render("adblock/query", {title = i18n.translate("Adblock Domain Query")}) +end + +function queryData(domain) + if domain and domain:match("^[a-zA-Z0-9%-%._]+$") then + luci.http.prepare_content("text/plain") + local cmd = "/etc/init.d/adblock query %q 2>&1" + local util = io.popen(cmd % domain) + if util then + while true do + local line = util:read("*l") + if not line then + break + end + luci.http.write(line) + luci.http.write("\n") + end + util:close() + end + end end diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua deleted file mode 100644 index 2cee30208..000000000 --- a/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua +++ /dev/null @@ -1,103 +0,0 @@ --- Copyright 2016 Openwrt.org --- Licensed to the public under the Apache License 2.0. - -m = Map("adblock", translate("Adblock"), - translate("Configuration of the adblock package to block ad/abuse domains by using DNS.")) - --- General options - -s = m:section(NamedSection, "global", "adblock", translate("Global options")) - -o1 = s:option(Flag, "adb_enabled", translate("Enable adblock")) -o1.rmempty = false -o1.default = 0 - -o3 = s:option(Value, "adb_whitelist", translate("Whitelist file"), - translate("File with whitelisted hosts/domains that are allowed despite being on a blocklist.")) -o3.rmempty = false -o3.datatype = "file" - -fdns = s:option(Flag, "adb_forcedns", translate("Redirect all DNS queries to the local resolver"), - translate("When adblock is active, all DNS queries are redirected to the local resolver " .. - "in this server by default. You can disable that to allow queries to external DNS servers.")) -fdns.rmempty = false -fdns.default = fdns.enabled - --- Statistics - -t = m:section(NamedSection, "global", "adblock", translate("Statistics")) - -dat = t:option(DummyValue, "adb_lastrun", translate("Last update of the blocklists")) -tot = t:option(DummyValue, "adb_overall_count", translate("Total count of blocked domains")) -prc = t:option(DummyValue, "adb_percentage", translate("Percentage of blocked packets (before last update, IPv4/IPv6)")) - --- Blocklist options - -bl = m:section(TypedSection, "source", translate("Blocklist sources"), - translate("Available blocklist sources (") - .. [[<a href="https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md" target="_blank">]] - .. translate("see list details") - .. [[</a>]] - .. translate("). Note that list URLs and Shallalist category selections are not configurable via Luci.")) -bl.template = "cbi/tblsection" - -name = bl:option(Flag, "enabled", translate("Enabled")) -name.rmempty = false - -des = bl:option(DummyValue, "adb_src_desc", translate("Description")) -cou = bl:option(DummyValue, "adb_src_count", translate("Count")) -upd = bl:option(DummyValue, "adb_src_timestamp", translate("List date/state")) - --- Additional options - -s2 = m:section(NamedSection, "backup", "service", translate("Backup options")) - -o4 = s2:option(Flag, "enabled", translate("Enable blocklist backup")) -o4.rmempty = false -o4.default = 0 - -o5 = s2:option(Value, "adb_dir", translate("Backup directory")) -o5.rmempty = false -o5.datatype = "directory" - --- Extra options - -e = m:section(NamedSection, "global", "adblock", translate("Extra options"), - translate("Options for further tweaking in case the defaults are not suitable for you.")) - -a0 = e:option(Flag, "adb_restricted", translate("Do not write status info to flash"), - translate("Skip writing update status information to the config file. Status fields on this page will not be updated.")) -a0.default = 0 - -a1 = e:option(Value, "adb_nullport", translate("Port of the adblock uhttpd instance")) -a1.optional = true -a1.default = 65534 -a1.datatype = "port" - -a5 = e:option(Value, "adb_nullportssl", translate("Port of the adblock uhttpd instance for https links")) -a5.optional = true -a5.default = 65535 -a5.datatype = "port" - -a2 = e:option(Value, "adb_nullipv4", translate("IPv4 blackhole ip address")) -a2.optional = true -a2.default = "198.18.0.1" -a2.datatype = "ip4addr" - -a3 = e:option(Value, "adb_nullipv6", translate("IPv6 blackhole ip address")) -a3.optional = true -a3.default = "::ffff:c612:0001" -a3.datatype = "ip6addr" - -a4 = e:option(Value, "adb_fetchttl", translate("Timeout for blocklist fetch (seconds)")) -a4.optional = true -a4.default = 5 -a4.datatype = "range(2,60)" - -a7 = e:option(Value, "adb_lanif", translate("Name of the logical lan interface")) -a7.optional = true -a7.default = "lan" -a7.datatype = "network" - -return m - diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua new file mode 100644 index 000000000..d540c77d1 --- /dev/null +++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua @@ -0,0 +1,39 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local util = require("luci.util") +local uci = require("uci") +local adbinput = uci.get("adblock", "blacklist", "adb_src" or "/etc/adblock/adblock.blacklist") + +if not nixio.fs.access(adbinput) then + m = SimpleForm("error", nil, translate("Input file not found, please check your configuration.")) + return m +end + +m = SimpleForm("input", nil) +m:append(Template("adblock/config_css")) +m.reset = false + +s = m:section(SimpleSection, nil, + translatef("This form allows you to modify the content of the adblock blacklist (%s).<br />", adbinput) + .. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not.")) + +f = s:option(TextValue, "data") +f.datatype = "string" +f.rows = 20 +f.rmempty = true + +function f.cfgvalue() + return nixio.fs.readfile(adbinput) or "" +end + +function f.write(self, section, data) + return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n") +end + +function s.handle(self, state, data) + return true +end + +return m diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua new file mode 100644 index 000000000..1b83c949e --- /dev/null +++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua @@ -0,0 +1,36 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local util = require("luci.util") +local adbinput = "/etc/config/adblock" + +if not nixio.fs.access(adbinput) then + m = SimpleForm("error", nil, translate("Input file not found, please check your configuration.")) + return m +end + +m = SimpleForm("input", nil) +m:append(Template("adblock/config_css")) +m.reset = false + +s = m:section(SimpleSection, nil, + translate("This form allows you to modify the content of the main adblock configuration file (/etc/config/adblock).")) + +f = s:option(TextValue, "data") +f.rows = 20 +f.rmempty = true + +function f.cfgvalue() + return nixio.fs.readfile(adbinput) or "" +end + +function f.write(self, section, data) + return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n") +end + +function s.handle(self, state, data) + return true +end + +return m diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua new file mode 100644 index 000000000..d2740f4da --- /dev/null +++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua @@ -0,0 +1,164 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local uci = require("uci") +local sys = require("luci.sys") +local json = require("luci.jsonc") +local adbinput = uci.get("adblock", "global", "adb_rtfile") or "/tmp/adb_runtime.json" +local parse = json.parse(fs.readfile(adbinput) or "") +local dnsFile1 = sys.exec("find '/tmp/dnsmasq.d/.adb_hidden' -maxdepth 1 -type f -name 'adb_list*' -print 2>/dev/null") +local dnsFile2 = sys.exec("find '/var/lib/unbound/.adb_hidden' -maxdepth 1 -type f -name 'adb_list*' -print 2>/dev/null") + +m = Map("adblock", translate("Adblock"), + translate("Configuration of the adblock package to block ad/abuse domains by using DNS. ") + .. translate("For further information ") + .. [[<a href="https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md" target="_blank">]] + .. translate("see online documentation") + .. [[</a>]] + .. translate(".")) +m.reset = false + +-- Main adblock options + +s = m:section(NamedSection, "global", "adblock") + +o1 = s:option(Flag, "adb_enabled", translate("Enable adblock")) +o1.default = o1.enabled +o1.rmempty = false + +btn = s:option(Button, "", translate("Suspend / Resume adblock")) +if dnsFile1 ~= "" or dnsFile2 ~= "" then + btn.inputtitle = translate("Resume adblock") + btn.inputstyle = "apply" + btn.disabled = false + function btn.write() + luci.sys.call("/etc/init.d/adblock resume >/dev/null 2>&1") + end +else + btn.inputtitle = translate("Suspend adblock") + btn.inputstyle = "reset" + btn.disabled = false + function btn.write() + luci.sys.call("/etc/init.d/adblock suspend >/dev/null 2>&1") + end +end + +o2 = s:option(Value, "adb_iface", translate("Restrict interface trigger to certain interface(s)"), + translate("Space separated list of interfaces that trigger adblock processing. ".. + "To disable event driven (re-)starts remove all entries.")) +o2.rmempty = true + +o3 = s:option(Value, "adb_triggerdelay", translate("Trigger delay"), + translate("Additional trigger delay in seconds before adblock processing begins.")) +o3.default = 2 +o3.datatype = "range(1,90)" +o3.rmempty = false + +o4 = s:option(Flag, "adb_debug", translate("Enable verbose debug logging")) +o4.default = o4.disabled +o4.rmempty = false + +-- Runtime information + +ds = s:option(DummyValue, "_dummy", translate("Runtime information")) +ds.template = "cbi/nullsection" + +dv1 = s:option(DummyValue, "status", translate("Status")) +dv1.template = "adblock/runtime" +if parse == nil then + dv1.value = translate("n/a") +elseif parse.data.blocked_domains == "0" then + dv1.value = translate("no domains blocked") +elseif dnsFile1 ~= "" or dnsFile2 ~= "" then + dv1.value = translate("suspended") +else + dv1.value = translate("active") +end +dv2 = s:option(DummyValue, "adblock_version", translate("Adblock version")) +dv2.template = "adblock/runtime" +if parse ~= nil then + dv2.value = parse.data.adblock_version or translate("n/a") +else + dv2.value = translate("n/a") +end + +dv3 = s:option(DummyValue, "fetch_info", translate("Download Utility (SSL Library)"), + translate("For SSL protected blocklist sources you need a suitable SSL library, e.g. 'libustream-ssl' or the wget 'built-in'.")) +dv3.template = "adblock/runtime" +if parse ~= nil then + dv3.value = parse.data.fetch_info or translate("n/a") +else + dv3.value = translate("n/a") +end + +dv4 = s:option(DummyValue, "dns_backend", translate("DNS backend")) +dv4.template = "adblock/runtime" +if parse ~= nil then + dv4.value = parse.data.dns_backend or translate("n/a") +else + dv4.value = translate("n/a") +end + +dv5 = s:option(DummyValue, "blocked_domains", translate("Blocked domains (overall)")) +dv5.template = "adblock/runtime" +if parse ~= nil then + dv5.value = parse.data.blocked_domains or translate("n/a") +else + dv5.value = translate("n/a") +end + +dv6 = s:option(DummyValue, "last_rundate", translate("Last rundate")) +dv6.template = "adblock/runtime" +if parse ~= nil then + dv6.value = parse.data.last_rundate or translate("n/a") +else + dv6.value = translate("n/a") +end + +-- Blocklist table + +bl = m:section(TypedSection, "source", translate("Blocklist sources"), + translate("Available blocklist sources. ") + .. translate("Note that list URLs and Shallalist category selections are configurable in the 'Advanced' section.")) +bl.template = "cbi/tblsection" + +name = bl:option(Flag, "enabled", translate("Enabled")) +name.rmempty = false + +ssl = bl:option(DummyValue, "adb_src", translate("SSL req.")) +function ssl.cfgvalue(self, section) + local source = self.map:get(section, "adb_src") + if source and source:match("https://") then + return translate("Yes") + else + return translate("No") + end +end + +des = bl:option(DummyValue, "adb_src_desc", translate("Description")) + +-- Extra options + +e = m:section(NamedSection, "global", "adblock", translate("Extra options"), + translate("Options for further tweaking in case the defaults are not suitable for you.")) + +e1 = e:option(Flag, "adb_forcedns", translate("Force local DNS"), + translate("Redirect all DNS queries to the local resolver.")) +e1.default = e1.disabled +e1.rmempty = false + +e2 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"), + translate("Enable memory intense overall sort / duplicate removal on low memory devices (< 64 MB RAM)")) +e2.default = e2.disabled +e2.rmempty = false + +e3 = e:option(Flag, "adb_backup", translate("Enable blocklist backup")) +e3.default = e3.disabled +e3.rmempty = false + +e4 = e:option(Value, "adb_backupdir", translate("Backup directory")) +e4.datatype = "directory" +e4.rmempty = false + +return m diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua new file mode 100644 index 000000000..23c99a977 --- /dev/null +++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua @@ -0,0 +1,39 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local util = require("luci.util") +local uci = require("uci") +local adbinput = uci.get("adblock", "global", "adb_whitelist") or "/etc/adblock/adblock.whitelist" + +if not nixio.fs.access(adbinput) then + m = SimpleForm("error", nil, translate("Input file not found, please check your configuration.")) + return m +end + +m = SimpleForm("input", nil) +m:append(Template("adblock/config_css")) +m.reset = false + +s = m:section(SimpleSection, nil, + translatef("This form allows you to modify the content of the adblock whitelist (%s).<br />", adbinput) + .. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not.")) + +f = s:option(TextValue, "data") +f.datatype = "string" +f.rows = 20 +f.rmempty = true + +function f.cfgvalue() + return nixio.fs.readfile(adbinput) or "" +end + +function f.write(self, section, data) + return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n") +end + +function s.handle(self, state, data) + return true +end + +return m diff --git a/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm b/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm new file mode 100644 index 000000000..53493a18f --- /dev/null +++ b/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm @@ -0,0 +1,10 @@ +<style type="text/css"> + textarea + { + border: 1px solid #cccccc; + padding: 5px; + font-size: 12px; + font-family: monospace; + resize: none; + } +</style> diff --git a/applications/luci-app-adblock/luasrc/view/adblock/logread.htm b/applications/luci-app-adblock/luasrc/view/adblock/logread.htm new file mode 100644 index 000000000..5e25a549c --- /dev/null +++ b/applications/luci-app-adblock/luasrc/view/adblock/logread.htm @@ -0,0 +1,14 @@ +<%# +Copyright 2017 Dirk Brenken (dev@brenken.org) +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-descr"><%:This form shows the syslog output, pre-filtered for adblock 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> +<%+footer%> diff --git a/applications/luci-app-adblock/luasrc/view/adblock/query.htm b/applications/luci-app-adblock/luasrc/view/adblock/query.htm new file mode 100644 index 000000000..ce706e40a --- /dev/null +++ b/applications/luci-app-adblock/luasrc/view/adblock/query.htm @@ -0,0 +1,65 @@ +<%# +Copyright 2017 Dirk Brenken (dev@brenken.org) +This is free software, licensed under the Apache License, Version 2.0 +-%> + +<%+header%> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript"> +//<![CDATA[ + var stxhr = new XHR(); + + function update_status(data) + { + var domain = data.value; + var input = document.getElementById('query_input'); + var output = document.getElementById('query_output'); + + if (input && output) + { + output.innerHTML = + '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' + + '<%:Waiting for command to complete...%>' + ; + input.parentNode.style.display = 'block'; + input.style.display = 'inline'; + stxhr.post('<%=luci.dispatcher.build_url('admin/services/adblock/advanced/result/')%>' + domain, { token: '<%=token%>' }, + function(x) + { + if (x.responseText) + { + input.style.display = 'none'; + output.innerHTML = String.format('<pre>%h</pre>', x.responseText); + } + else + { + input.style.display = 'none'; + output.innerHTML = '<span class="error"><%:Invalid domain specified!%></span>'; + } + } + ); + } + } +//]]> +</script> + +<form method="post" action="<%=REQUEST_URI%>"> + <div class="cbi-map"> + <fieldset class="cbi-section"> + <div class="cbi-section-descr"><%:This form allows you to query active block lists for certain domains, e.g. for whitelisting.%></div> + <div style="width:33%; float:left;"> + <input style="margin: 5px 0" type="text" value="www.lede-project.org" name="input" /> + <input type="button" value="<%:Query%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.input)" /> + </div> + <br style="clear:both" /> + <br /> + </fieldset> + </div> + <fieldset class="cbi-section" style="display:none"> + <legend id="query_input"><%:Collecting data...%></legend> + <span id="query_output"></span> + </fieldset> +</form> + +<%+footer%> diff --git a/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm b/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm new file mode 100644 index 000000000..ee3a4553a --- /dev/null +++ b/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm @@ -0,0 +1,10 @@ +<%# +Copyright 2017 Dirk Brenken (dev@brenken.org) +This is free software, licensed under the Apache License, Version 2.0 +-%> + +<%+cbi/valueheader%> + +<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="border: none; box-shadow: none; background-color: #ffffff; color: #0069d6;" value="<%=self:cfgvalue(section)%>" disabled="disabled" /> + +<%+cbi/valuefooter%> diff --git a/applications/luci-app-adblock/po/ja/adblock.po b/applications/luci-app-adblock/po/ja/adblock.po new file mode 100644 index 000000000..6c89c5e80 --- /dev/null +++ b/applications/luci-app-adblock/po/ja/adblock.po @@ -0,0 +1,364 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.1\n" +"Language: ja\n" + +msgid "." +msgstr "。" + +msgid "Adblock" +msgstr "Adblock" + +msgid "Adblock Domain Query" +msgstr "Adblock ドメイン検索" + +msgid "Adblock Logfile" +msgstr "Adblock ログファイル" + +msgid "Adblock version" +msgstr "Adblock バージョン" + +msgid "Additional trigger delay in seconds before adblock processing begins." +msgstr "Adblock の処理が開始されるまでの、追加の遅延時間(秒)です。" + +msgid "Advanced" +msgstr "詳細設定" + +msgid "Available blocklist sources." +msgstr "利用可能なブロックリスト提供元です。" + +msgid "Backup directory" +msgstr "バックアップ先 ディレクトリ" + +msgid "Blocked domains (overall)" +msgstr "ブロック済みドメイン(全体)" + +msgid "Blocklist sources" +msgstr "ブロックリスト提供元" + +msgid "Collecting data..." +msgstr "データ収集中です..." + +msgid "" +"Configuration of the adblock package to block ad/abuse domains by using DNS." +msgstr "" +"DNS の利用によって広告/不正ドメインをブロックする、Adblock パッケージの設定で" +"す。" + +msgid "DNS backend" +msgstr "DNS バックエンド" + +msgid "Description" +msgstr "説明" + +msgid "Download Utility (SSL Library)" +msgstr "ダウンロード ユーティリティ(SSL ライブラリ)" + +msgid "Edit Blacklist" +msgstr "ブラックリストの編集" + +msgid "Edit Configuration" +msgstr "設定の編集" + +msgid "Edit Whitelist" +msgstr "ホワイトリストの編集" + +msgid "Enable adblock" +msgstr "Adblock の有効化" + +msgid "Enable blocklist backup" +msgstr "ブロックリスト バックアップの有効化" + +msgid "" +"Enable memory intense overall sort / duplicate removal on low memory devices " +"(< 64 MB RAM)" +msgstr "" +"メモリー容量の少ないデバイス(RAM 64MB 未満)において、一時ファイル内の全体的" +"なソート及び重複の除去を有効にします。" + +msgid "Enable verbose debug logging" +msgstr "詳細なデバッグ ログの有効化" + +msgid "Enabled" +msgstr "有効" + +msgid "Extra options" +msgstr "拡張設定" + +msgid "" +"For SSL protected blocklist sources you need a suitable SSL library, e.g. " +"'libustream-ssl' or the wget 'built-in'." +msgstr "" +"SSLで保護されているブロックリストの取得には、適切なSSL ライブラリが必要です。" +"例: 'libustream-ssl' または wget 'ビルトイン'" + +msgid "For further information" +msgstr "詳細な情報は" + +msgid "Force Overall Sort" +msgstr "全体ソートの強制" + +msgid "Force local DNS" +msgstr "ローカル DNS の強制" + +msgid "Input file not found, please check your configuration." +msgstr "入力ファイルが見つかりません。設定を確認してください。" + +msgid "Invalid domain specified!" +msgstr "無効なドメインが指定されています!" + +msgid "Last rundate" +msgstr "最終実行日時" + +msgid "Loading" +msgstr "読込中" + +msgid "No" +msgstr "いいえ" + +msgid "" +"Note that list URLs and Shallalist category selections are configurable in " +"the 'Advanced' section." +msgstr "" +"リストの URL 及び \"Shalla\" リストのカテゴリー設定は、'詳細設定' セクション" +"で設定することができます。" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。" + +msgid "Overview" +msgstr "概要" + +msgid "" +"Please add only one domain per line. Comments introduced with '#' are " +"allowed - ip addresses, wildcards and regex are not." +msgstr "" +"1行に1つのドメインを追加してください。'#' から始まるコメントを記述できます" +"が、IP アドレスやワイルドカード、正規表現を設定値として使用することはできませ" +"ん。" + +msgid "Query" +msgstr "検索" + +msgid "Query domains" +msgstr "ドメインの検索" + +msgid "Redirect all DNS queries to the local resolver." +msgstr "全ての DNS クエリをローカル リゾルバにリダイレクトします。" + +msgid "Restrict interface trigger to certain interface(s)" +msgstr "インターフェース トリガーを特定のインターフェースに限定する" + +msgid "Resume adblock" +msgstr "Adblock の再開" + +msgid "Runtime information" +msgstr "実行情報" + +msgid "SSL req." +msgstr "SSL 必須" + +msgid "" +"Space separated list of interfaces that trigger adblock processing. To " +"disable event driven (re-)starts remove all entries." +msgstr "" +"Adblock の処理のトリガーとなる、スペースで区切られたインターフェースのリスト" +"です。処理を発生させるイベントを無効にするには、全てのエントリーを削除して空" +"欄にします。" + +msgid "Status" +msgstr "ステータス" + +msgid "Suspend / Resume adblock" +msgstr "Adblock の一時停止/再開" + +msgid "Suspend adblock" +msgstr "Adblock の一時停止" + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"<br />" +msgstr "" +"このフォームでは、Adblock ブラックリスト (%s) の内容を変更することができま" +"す。<br />" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"<br />" +msgstr "" +"このフォームでは、Adblock ホワイトリスト (%s) の内容を変更することができま" +"す。<br />" + +msgid "" +"This form allows you to modify the content of the main adblock configuration " +"file (/etc/config/adblock)." +msgstr "" +"このフォームでは、メインのAdblock 設定ファイル (/etc/config/adblock) の内容を" +"変更することができます。" + +msgid "" +"This form allows you to query active block lists for certain domains, e.g. " +"for whitelisting." +msgstr "" +"このフォームでは、現在有効なリスト内で特定のドメインを検索することができま" +"す。例: ホワイトリスト内" + +msgid "" +"This form shows the syslog output, pre-filtered for adblock related messages " +"only." +msgstr "" +"このフォームには、システムログ内の Adblock に関連するメッセージのみが表示され" +"ます。" + +msgid "Trigger delay" +msgstr "トリガー遅延" + +msgid "View Logfile" +msgstr "ログファイルを見る" + +msgid "Waiting for command to complete..." +msgstr "コマンドの完了をお待ちください..." + +msgid "Yes" +msgstr "はい" + +msgid "active" +msgstr "動作中" + +msgid "n/a" +msgstr "利用不可" + +msgid "no domains blocked" +msgstr "ブロックされたドメインはありません" + +msgid "see online documentation" +msgstr "オンライン ドキュメントを確認してください" + +msgid "suspended" +msgstr "一時停止中" + +#~ msgid "Backup options" +#~ msgstr "バックアップ オプション" + +#~ msgid "Restrict interface reload trigger to certain interface(s)" +#~ msgstr "リロード トリガを特定のインターフェースに限定する" + +#~ msgid "" +#~ "Space separated list of interfaces that trigger a reload action. To " +#~ "disable reload trigger at all remove all entries." +#~ msgstr "" +#~ "リロードのトリガとなる、スペースで区切られたインターフェースのリストです。" +#~ "リロード トリガを無効にするには、全てのエントリーを削除して空欄にします。" + +#~ msgid "" +#~ "Space separated list of interfaces that trigger a reload action. To " +#~ "disable reload trigger at all set it to 'false'." +#~ msgstr "" +#~ "リロードのトリガとなる、スペースで区切られたインターフェースのリストで" +#~ "す。'false' に設定した場合、全てのリロード トリガは無効になります。" + +#~ msgid "" +#~ "Please add only one domain per line. Comments introduced with '#' are " +#~ "allowed - ip addresses, wildcards & regex are not." +#~ msgstr "" +#~ "一行に一つのドメインを追加してください。'#' から始まるコメントを記述できま" +#~ "すが、IPアドレスやワイルドカード、正規表現を設定値として使用することはでき" +#~ "ません。" + +#~ msgid "" +#~ "). Note that list URLs and Shallalist category selections are not " +#~ "configurable via Luci." +#~ msgstr "" +#~ ")。これらのリストのURLおよびshallaリストの選択済みカテゴリーは、Luciを通" +#~ "して設定することができません。" + +#~ msgid "Available blocklist sources (" +#~ msgstr "利用可能なブロックリスト提供元です(" + +#~ msgid "" +#~ "File with whitelisted hosts/domains that are allowed despite being on a " +#~ "blocklist." +#~ msgstr "" +#~ "ホワイトリスト ファイル内のホスト/ドメインは、ブロックリストの登録に関わら" +#~ "ず許可されます。" + +#~ msgid "Global options" +#~ msgstr "一般設定" + +#~ msgid "Restrict reload trigger to certain interface(s)" +#~ msgstr "リロードトリガを特定のインターフェースに限定する" + +#~ msgid "" +#~ "Space separated list of wan interfaces that trigger reload action. To " +#~ "disable reload trigger set it to 'false'. Default: empty" +#~ msgstr "" +#~ "リロード実行のトリガとなる、スペースで区切られたWANインターフェースのリス" +#~ "トです。リロードトリガを無効にするには、 false を設定します。デフォルト:" +#~ "(空)" + +#~ msgid "Whitelist file" +#~ msgstr "ホワイトリスト ファイル" + +#~ msgid "see list details" +#~ msgstr "リストの詳細を見る" + +#~ msgid "Count" +#~ msgstr "カウント" + +#~ msgid "Do not write status info to flash" +#~ msgstr "ステータス情報をフラッシュに書き込まない" + +#~ msgid "Last update of the blocklists" +#~ msgstr "ブロックリストの最終更新日時" + +#~ msgid "List date/state" +#~ msgstr "リスト日時/状態" + +#~ msgid "Name of the logical lan interface" +#~ msgstr "論理LANインターフェース名" + +#~ msgid "Percentage of blocked packets (before last update, IPv4/IPv6)" +#~ msgstr "ブロック済みパケットの割合(最終更新以前、IPv4/IPv6)" + +#~ msgid "Port of the adblock uhttpd instance" +#~ msgstr "adblock uhttpdインスタンスのポート" + +#~ msgid "Port of the adblock uhttpd instance for https links" +#~ msgstr "httpsリンク用adblock uhttpdインスタンスのポート" + +#~ msgid "Redirect all DNS queries to the local resolver" +#~ msgstr "全てのDNSクエリをローカルリゾルバにリダイレクト" + +#~ msgid "" +#~ "Skip writing update status information to the config file. Status fields " +#~ "on this page will not be updated." +#~ msgstr "" +#~ "更新ステータス情報をコンフィグファイルに書き込まず、スキップします。この" +#~ "ページのステータス画面は更新されなくなります。" + +#~ msgid "Statistics" +#~ msgstr "ステータス" + +#~ msgid "Timeout for blocklist fetch (seconds)" +#~ msgstr "ブロックリスト取得の制限時間(秒)" + +#~ msgid "Total count of blocked domains" +#~ msgstr "ブロック済みドメインの合計" + +#~ msgid "" +#~ "When adblock is active, all DNS queries are redirected to the local " +#~ "resolver in this server by default. You can disable that to allow queries " +#~ "to external DNS servers." +#~ msgstr "" +#~ "adblockがアクティブである時、全てのDNSクエリは既定でこのサーバー上のリゾル" +#~ "バにリダイレクトされます。外部DNSサーバーへのクエリを許可する場合、この設" +#~ "定を無効にすることもできます。" diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po new file mode 100644 index 000000000..05002b7d6 --- /dev/null +++ b/applications/luci-app-adblock/po/pt-br/adblock.po @@ -0,0 +1,268 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "." +msgstr "" + +msgid "Adblock" +msgstr "Adblock" + +msgid "Adblock Domain Query" +msgstr "" + +msgid "Adblock Logfile" +msgstr "" + +msgid "Adblock version" +msgstr "" + +msgid "Additional trigger delay in seconds before adblock processing begins." +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Available blocklist sources." +msgstr "" + +msgid "Backup directory" +msgstr "Diretório da cópia de segurança" + +msgid "Blocked domains (overall)" +msgstr "" + +msgid "Blocklist sources" +msgstr "Fontes de listas de bloqueio" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configuration of the adblock package to block ad/abuse domains by using DNS." +msgstr "" +"Configuração do pacote adblock para bloquear, usando o DNS, domínios que " +"distribuem propagandas abusivas." + +msgid "DNS backend" +msgstr "" + +msgid "Description" +msgstr "Descrição" + +msgid "Download Utility (SSL Library)" +msgstr "" + +msgid "Edit Blacklist" +msgstr "" + +msgid "Edit Configuration" +msgstr "" + +msgid "Edit Whitelist" +msgstr "" + +msgid "Enable adblock" +msgstr "Habilitar adblock" + +msgid "Enable blocklist backup" +msgstr "Habilitar cópia de segurança da lista de bloqueio" + +msgid "" +"Enable memory intense overall sort / duplicate removal on low memory devices " +"(< 64 MB RAM)" +msgstr "" + +msgid "Enable verbose debug logging" +msgstr "Habilite registros detalhados para depuração" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "Extra options" +msgstr "Opções adicionais" + +msgid "" +"For SSL protected blocklist sources you need a suitable SSL library, e.g. " +"'libustream-ssl' or the wget 'built-in'." +msgstr "" + +msgid "For further information" +msgstr "" + +msgid "Force Overall Sort" +msgstr "" + +msgid "Force local DNS" +msgstr "" + +msgid "Input file not found, please check your configuration." +msgstr "" + +msgid "Invalid domain specified!" +msgstr "" + +msgid "Last rundate" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "No" +msgstr "" + +msgid "" +"Note that list URLs and Shallalist category selections are configurable in " +"the 'Advanced' section." +msgstr "" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "" +"Opções para aprimoramentos adicionais caso as opções padrão não sejam " +"suficientes para você." + +msgid "Overview" +msgstr "" + +msgid "" +"Please add only one domain per line. Comments introduced with '#' are " +"allowed - ip addresses, wildcards and regex are not." +msgstr "" + +msgid "Query" +msgstr "" + +msgid "Query domains" +msgstr "" + +msgid "Redirect all DNS queries to the local resolver." +msgstr "" + +msgid "Restrict interface trigger to certain interface(s)" +msgstr "" + +msgid "Resume adblock" +msgstr "" + +msgid "Runtime information" +msgstr "" + +msgid "SSL req." +msgstr "" + +msgid "" +"Space separated list of interfaces that trigger adblock processing. To " +"disable event driven (re-)starts remove all entries." +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Suspend / Resume adblock" +msgstr "" + +msgid "Suspend adblock" +msgstr "" + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"<br />" +msgstr "" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"<br />" +msgstr "" + +msgid "" +"This form allows you to modify the content of the main adblock configuration " +"file (/etc/config/adblock)." +msgstr "" + +msgid "" +"This form allows you to query active block lists for certain domains, e.g. " +"for whitelisting." +msgstr "" + +msgid "" +"This form shows the syslog output, pre-filtered for adblock related messages " +"only." +msgstr "" + +msgid "Trigger delay" +msgstr "" + +msgid "View Logfile" +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "active" +msgstr "" + +msgid "n/a" +msgstr "" + +msgid "no domains blocked" +msgstr "" + +msgid "see online documentation" +msgstr "" + +msgid "suspended" +msgstr "" + +#~ msgid "Backup options" +#~ msgstr "Opções da cópia de segurança" + +#~ msgid "" +#~ "). Note that list URLs and Shallalist category selections are not " +#~ "configurable via Luci." +#~ msgstr "" +#~ "). Note que a lista de URL e as seleções de categoria da Shallalist não " +#~ "são configuráveis pelo Luci." + +#~ msgid "Available blocklist sources (" +#~ msgstr "Fontes de listas de bloqueio disponíveis (" + +#~ msgid "" +#~ "File with whitelisted hosts/domains that are allowed despite being on a " +#~ "blocklist." +#~ msgstr "" +#~ "Arquivo com a lista branca dos equipamentos/domínios que serão " +#~ "autorizados mesmo estando na lista de bloqueio." + +#~ msgid "Global options" +#~ msgstr "Opções Globais" + +#~ msgid "Restrict reload trigger to certain interface(s)" +#~ msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)" + +#~ msgid "" +#~ "Space separated list of wan interfaces that trigger reload action. To " +#~ "disable reload trigger set it to 'false'. Default: empty" +#~ msgstr "" +#~ "Lista das interfaces WAN, separadas por espaço, que podem disparar uma " +#~ "ação de recarga. Para desabilitar este gatilho, defina-o como 'false'. " +#~ "Padrão: em branco" + +#~ msgid "Whitelist file" +#~ msgstr "Arquivo da lista branca" + +#~ msgid "see list details" +#~ msgstr "veja os detalhes da lista" diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po index 9c0ca21f1..7a19f872f 100644 --- a/applications/luci-app-adblock/po/sv/adblock.po +++ b/applications/luci-app-adblock/po/sv/adblock.po @@ -1,47 +1,79 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8\n" -msgid "" -"). Note that list URLs and Shallalist category selections are not " -"configurable via Luci." -msgstr "" +msgid "." +msgstr "." msgid "Adblock" -msgstr "Blockering av annonser" +msgstr "Adblock" + +msgid "Adblock Domain Query" +msgstr "" + +msgid "Adblock Logfile" +msgstr "Adblock's loggfil" + +msgid "Adblock version" +msgstr "Version för Adblock" + +msgid "Additional trigger delay in seconds before adblock processing begins." +msgstr "" -msgid "Available blocklist sources (" -msgstr "Tillgängliga källor för blockeringslistor (" +msgid "Advanced" +msgstr "Avancerat" + +msgid "Available blocklist sources." +msgstr "Tillgängliga källor för blockeringslistor" msgid "Backup directory" msgstr "Säkerhetskopiera mapp" -msgid "Backup options" -msgstr "Alternativ för säkerhetskopiering" +msgid "Blocked domains (overall)" +msgstr "Blockerade domäner (övergripande)" msgid "Blocklist sources" msgstr "Källor för blockeringslistor" +msgid "Collecting data..." +msgstr "Samlar in data..." + msgid "" "Configuration of the adblock package to block ad/abuse domains by using DNS." msgstr "" -"Konfiguration av paket adblock för att blockera annons/otillåtna domäner " -"genom att användning DNS." +"Konfiguration av paketet adblock för att blockera annons/otillåtna domäner genom att använda DNS." -msgid "Count" -msgstr "Räkna" +msgid "DNS backend" +msgstr "Bakände för DNS" msgid "Description" msgstr "Beskrivning" -msgid "Do not write status info to flash" -msgstr "Skriv inte status info till flash" +msgid "Download Utility (SSL Library)" +msgstr "Nerladdningsprogram (SSL-bibliotek)" + +msgid "Edit Blacklist" +msgstr "Redigera svartlista" + +msgid "Edit Configuration" +msgstr Redigerar konfigurationen"" + +msgid "Edit Whitelist" +msgstr "Redigera vitlista" msgid "Enable adblock" -msgstr "Aktivera abblock" +msgstr "Aktivera adblock" msgid "Enable blocklist backup" msgstr "Aktivera säkerhetskopiering av blockeringslistan" +msgid "" +"Enable memory intense overall sort / duplicate removal on low memory devices " +"(< 64 MB RAM)" +msgstr "" + +msgid "Enable verbose debug logging" +msgstr "" + msgid "Enabled" msgstr "Aktiverad" @@ -49,66 +81,158 @@ msgid "Extra options" msgstr "Extra alternativ" msgid "" -"File with whitelisted hosts/domains that are allowed despite being on a " -"blocklist." +"For SSL protected blocklist sources you need a suitable SSL library, e.g. " +"'libustream-ssl' or the wget 'built-in'." msgstr "" -msgid "Global options" -msgstr "Globala alternativ" +msgid "For further information" +msgstr "För mer information" -msgid "IPv4 blackhole ip address" +msgid "Force Overall Sort" msgstr "" -msgid "IPv6 blackhole ip address" -msgstr "" +msgid "Force local DNS" +msgstr "Tvinga lokal DNS" -msgid "Last update of the blocklists" -msgstr "" +msgid "Input file not found, please check your configuration." +msgstr "Inmatningsfilen hittades inte, var vänlig och kontrollera din konfiguration." + +msgid "Invalid domain specified!" +msgstr "Ogiltig domän angiven!" -msgid "List date/state" +msgid "Last rundate" msgstr "" -msgid "Name of the logical lan interface" +msgid "Loading" +msgstr "Laddar" + +msgid "No" +msgstr "Nej" + +msgid "" +"Note that list URLs and Shallalist category selections are configurable in " +"the 'Advanced' section." msgstr "" msgid "" "Options for further tweaking in case the defaults are not suitable for you." msgstr "" -msgid "Percentage of blocked packets (before last update, IPv4/IPv6)" +msgid "Overview" +msgstr "Översikt" + +msgid "" +"Please add only one domain per line. Comments introduced with '#' are " +"allowed - ip addresses, wildcards and regex are not." +msgstr "" + +msgid "Query" +msgstr "" + +msgid "Query domains" msgstr "" -msgid "Port of the adblock uhttpd instance" +msgid "Redirect all DNS queries to the local resolver." msgstr "" -msgid "Port of the adblock uhttpd instance for https links" +msgid "Restrict interface trigger to certain interface(s)" msgstr "" -msgid "Redirect all DNS queries to the local resolver" -msgstr "Dirigera om alla DNS-förfrågning till den lokala resolvern" +msgid "Resume adblock" +msgstr "Återuppta adblock" + +msgid "Runtime information" +msgstr "Information om kör-tid" + +msgid "SSL req." +msgstr "" msgid "" -"Skip writing update status information to the config file. Status fields on " -"this page will not be updated." +"Space separated list of interfaces that trigger adblock processing. To " +"disable event driven (re-)starts remove all entries." msgstr "" -msgid "Statistics" +msgid "Status" +msgstr "Status" + +msgid "Suspend / Resume adblock" +msgstr "Upphäv / Återuppta adblock" + +msgid "Suspend adblock" +msgstr "Upphäv adblock" + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"<br />" msgstr "" -msgid "Timeout for blocklist fetch (seconds)" +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"<br />" msgstr "" -msgid "Total count of blocked domains" +msgid "" +"This form allows you to modify the content of the main adblock configuration " +"file (/etc/config/adblock)." +msgstr "" + +msgid "" +"This form allows you to query active block lists for certain domains, e.g. " +"for whitelisting." msgstr "" msgid "" -"When adblock is active, all DNS queries are redirected to the local resolver " -"in this server by default. You can disable that to allow queries to external " -"DNS servers." +"This form shows the syslog output, pre-filtered for adblock related messages " +"only." msgstr "" -msgid "Whitelist file" -msgstr "Vitlista fil" +msgid "Trigger delay" +msgstr "" + +msgid "View Logfile" +msgstr "Visa loggfil" + +msgid "Waiting for command to complete..." +msgstr "Väntar på att kommandot ska slutföras..." + +msgid "Yes" +msgstr "Ja" + +msgid "active" +msgstr "aktiv" + +msgid "n/a" +msgstr "n/a" + +msgid "no domains blocked" +msgstr "inga domäner blockerades" + +msgid "see online documentation" +msgstr "" + +msgid "suspended" +msgstr "upphävd" + +#~ msgid "Backup options" +#~ msgstr "Alternativ för säkerhetskopiering" + +#~ msgid "Available blocklist sources (" +#~ msgstr "Tillgängliga källor för blockeringslistor (" + +#~ msgid "Global options" +#~ msgstr "Globala alternativ" + +#~ msgid "Whitelist file" +#~ msgstr "Vitlista fil" + +#~ msgid "see list details" +#~ msgstr "se listans detaljer" + +#~ msgid "Count" +#~ msgstr "Räkna" + +#~ msgid "Do not write status info to flash" +#~ msgstr "Skriv inte status info till flash" -msgid "see list details" -msgstr "se listans detaljer" +#~ msgid "Redirect all DNS queries to the local resolver" +#~ msgstr "Dirigera om alla DNS-förfrågning till den lokala resolvern" diff --git a/applications/luci-app-adblock/po/templates/adblock.pot b/applications/luci-app-adblock/po/templates/adblock.pot index eeb0d975b..c75544616 100644 --- a/applications/luci-app-adblock/po/templates/adblock.pot +++ b/applications/luci-app-adblock/po/templates/adblock.pot @@ -1,37 +1,62 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -msgid "" -"). Note that list URLs and Shallalist category selections are not " -"configurable via Luci." +msgid "." msgstr "" msgid "Adblock" msgstr "" -msgid "Available blocklist sources (" +msgid "Adblock Domain Query" +msgstr "" + +msgid "Adblock Logfile" +msgstr "" + +msgid "Adblock version" +msgstr "" + +msgid "Additional trigger delay in seconds before adblock processing begins." +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Available blocklist sources." msgstr "" msgid "Backup directory" msgstr "" -msgid "Backup options" +msgid "Blocked domains (overall)" msgstr "" msgid "Blocklist sources" msgstr "" +msgid "Collecting data..." +msgstr "" + msgid "" "Configuration of the adblock package to block ad/abuse domains by using DNS." msgstr "" -msgid "Count" +msgid "DNS backend" msgstr "" msgid "Description" msgstr "" -msgid "Do not write status info to flash" +msgid "Download Utility (SSL Library)" +msgstr "" + +msgid "Edit Blacklist" +msgstr "" + +msgid "Edit Configuration" +msgstr "" + +msgid "Edit Whitelist" msgstr "" msgid "Enable adblock" @@ -40,6 +65,14 @@ msgstr "" msgid "Enable blocklist backup" msgstr "" +msgid "" +"Enable memory intense overall sort / duplicate removal on low memory devices " +"(< 64 MB RAM)" +msgstr "" + +msgid "Enable verbose debug logging" +msgstr "" + msgid "Enabled" msgstr "" @@ -47,66 +80,134 @@ msgid "Extra options" msgstr "" msgid "" -"File with whitelisted hosts/domains that are allowed despite being on a " -"blocklist." +"For SSL protected blocklist sources you need a suitable SSL library, e.g. " +"'libustream-ssl' or the wget 'built-in'." +msgstr "" + +msgid "For further information" msgstr "" -msgid "Global options" +msgid "Force Overall Sort" msgstr "" -msgid "IPv4 blackhole ip address" +msgid "Force local DNS" msgstr "" -msgid "IPv6 blackhole ip address" +msgid "Input file not found, please check your configuration." msgstr "" -msgid "Last update of the blocklists" +msgid "Invalid domain specified!" msgstr "" -msgid "List date/state" +msgid "Last rundate" msgstr "" -msgid "Name of the logical lan interface" +msgid "Loading" +msgstr "" + +msgid "No" +msgstr "" + +msgid "" +"Note that list URLs and Shallalist category selections are configurable in " +"the 'Advanced' section." msgstr "" msgid "" "Options for further tweaking in case the defaults are not suitable for you." msgstr "" -msgid "Percentage of blocked packets (before last update, IPv4/IPv6)" +msgid "Overview" +msgstr "" + +msgid "" +"Please add only one domain per line. Comments introduced with '#' are " +"allowed - ip addresses, wildcards and regex are not." +msgstr "" + +msgid "Query" +msgstr "" + +msgid "Query domains" +msgstr "" + +msgid "Redirect all DNS queries to the local resolver." +msgstr "" + +msgid "Restrict interface trigger to certain interface(s)" +msgstr "" + +msgid "Resume adblock" +msgstr "" + +msgid "Runtime information" +msgstr "" + +msgid "SSL req." +msgstr "" + +msgid "" +"Space separated list of interfaces that trigger adblock processing. To " +"disable event driven (re-)starts remove all entries." msgstr "" -msgid "Port of the adblock uhttpd instance" +msgid "Status" msgstr "" -msgid "Port of the adblock uhttpd instance for https links" +msgid "Suspend / Resume adblock" msgstr "" -msgid "Redirect all DNS queries to the local resolver" +msgid "Suspend adblock" msgstr "" msgid "" -"Skip writing update status information to the config file. Status fields on " -"this page will not be updated." +"This form allows you to modify the content of the adblock blacklist (%s)." +"<br />" msgstr "" -msgid "Statistics" +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"<br />" msgstr "" -msgid "Timeout for blocklist fetch (seconds)" +msgid "" +"This form allows you to modify the content of the main adblock configuration " +"file (/etc/config/adblock)." msgstr "" -msgid "Total count of blocked domains" +msgid "" +"This form allows you to query active block lists for certain domains, e.g. " +"for whitelisting." msgstr "" msgid "" -"When adblock is active, all DNS queries are redirected to the local resolver " -"in this server by default. You can disable that to allow queries to external " -"DNS servers." +"This form shows the syslog output, pre-filtered for adblock related messages " +"only." +msgstr "" + +msgid "Trigger delay" +msgstr "" + +msgid "View Logfile" +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "active" +msgstr "" + +msgid "n/a" +msgstr "" + +msgid "no domains blocked" msgstr "" -msgid "Whitelist file" +msgid "see online documentation" msgstr "" -msgid "see list details" +msgid "suspended" msgstr "" diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po index e57921daa..7ef853b07 100644 --- a/applications/luci-app-adblock/po/zh-cn/adblock.po +++ b/applications/luci-app-adblock/po/zh-cn/adblock.po @@ -1,56 +1,90 @@ +# liushuyu <liushuyu_011@163.com>, 2017. msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: kuoruan@gmail.com\n" -"Language-Team: none\n" +"PO-Revision-Date: 2017-04-15 21:35-0600\n" +"Last-Translator: liushuyu <liushuyu011@gmail.com>\n" +"Language-Team: Chinese <kde-i18n-doc@kde.org>\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.5\n" +"X-Generator: Poedit 2.0.1\n" "Plural-Forms: nplurals=1; plural=0;\n" -msgid "" -"). Note that list URLs and Shallalist category selections are not " -"configurable via Luci." -msgstr ")。需要注意的是列表URL和列表类别选项无法通过Luci设置。" +msgid "." +msgstr "." msgid "Adblock" msgstr "Adblock" -msgid "Available blocklist sources (" -msgstr "可用拦截列表来源(" +msgid "Adblock Domain Query" +msgstr "" + +msgid "Adblock Logfile" +msgstr "Adblock 日志文件" + +msgid "Adblock version" +msgstr "Adblock 版本" + +msgid "Additional trigger delay in seconds before adblock processing begins." +msgstr "" + +msgid "Advanced" +msgstr "高级" + +msgid "Available blocklist sources." +msgstr "可用的 blocklist 来源" msgid "Backup directory" msgstr "备份目录" -msgid "Backup options" -msgstr "备份选项" +msgid "Blocked domains (overall)" +msgstr "" msgid "Blocklist sources" msgstr "拦截列表来源" +msgid "Collecting data..." +msgstr "正在收集数据..." + msgid "" "Configuration of the adblock package to block ad/abuse domains by using DNS." msgstr "Adblock 配置工具,通过 DNS 来拦截广告和阻止域名。" -msgid "Count" -msgstr "数量" +msgid "DNS backend" +msgstr "DNS 后端" msgid "Description" msgstr "描述" -msgid "Do not write status info to flash" +msgid "Download Utility (SSL Library)" msgstr "" +msgid "Edit Blacklist" +msgstr "编辑黑名单" + +msgid "Edit Configuration" +msgstr "编辑设置" + +msgid "Edit Whitelist" +msgstr "编辑白名单" + msgid "Enable adblock" msgstr "启用Adblock" msgid "Enable blocklist backup" msgstr "启用拦截规则备份" +msgid "" +"Enable memory intense overall sort / duplicate removal on low memory devices " +"(< 64 MB RAM)" +msgstr "" + +msgid "Enable verbose debug logging" +msgstr "启用详细调试输出" + msgid "Enabled" msgstr "启用" @@ -58,68 +92,194 @@ msgid "Extra options" msgstr "额外选项" msgid "" -"File with whitelisted hosts/domains that are allowed despite being on a " -"blocklist." -msgstr "允许的主机/域名列表" +"For SSL protected blocklist sources you need a suitable SSL library, e.g. " +"'libustream-ssl' or the wget 'built-in'." +msgstr "" -msgid "Global options" -msgstr "全局选项" +msgid "For further information" +msgstr "更多信息" -msgid "IPv4 blackhole ip address" -msgstr "IPv4禁止列表" +msgid "Force Overall Sort" +msgstr "" + +msgid "Force local DNS" +msgstr "" + +msgid "Input file not found, please check your configuration." +msgstr "" -msgid "IPv6 blackhole ip address" -msgstr "IPv6禁止列表" +msgid "Invalid domain specified!" +msgstr "无效域名!" -msgid "Last update of the blocklists" +msgid "Last rundate" msgstr "" -msgid "List date/state" -msgstr "列表日期/状态" +msgid "Loading" +msgstr "加载中" -msgid "Name of the logical lan interface" -msgstr "LAN接口名称" +msgid "No" +msgstr "否" + +msgid "" +"Note that list URLs and Shallalist category selections are configurable in " +"the 'Advanced' section." +msgstr "" msgid "" "Options for further tweaking in case the defaults are not suitable for you." msgstr "在默认设置并不适合你时的额外选项。" -msgid "Percentage of blocked packets (before last update, IPv4/IPv6)" +msgid "Overview" +msgstr "总览" + +msgid "" +"Please add only one domain per line. Comments introduced with '#' are " +"allowed - ip addresses, wildcards and regex are not." msgstr "" -msgid "Port of the adblock uhttpd instance" -msgstr "Adblock uhttpd端口" +msgid "Query" +msgstr "查询" + +msgid "Query domains" +msgstr "" + +msgid "Redirect all DNS queries to the local resolver." +msgstr "" -msgid "Port of the adblock uhttpd instance for https links" +msgid "Restrict interface trigger to certain interface(s)" msgstr "" -msgid "Redirect all DNS queries to the local resolver" -msgstr "将所有DNS查询都重定向到本地解析器" +msgid "Resume adblock" +msgstr "恢复 Adblock" + +msgid "Runtime information" +msgstr "运行信息" + +msgid "SSL req." +msgstr "" msgid "" -"Skip writing update status information to the config file. Status fields on " -"this page will not be updated." +"Space separated list of interfaces that trigger adblock processing. To " +"disable event driven (re-)starts remove all entries." msgstr "" -msgid "Statistics" +msgid "Status" +msgstr "状态" + +msgid "Suspend / Resume adblock" +msgstr "暂停/恢复 Adblock" + +msgid "Suspend adblock" +msgstr "暂停 Adblock" + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"<br />" msgstr "" -msgid "Timeout for blocklist fetch (seconds)" -msgstr "列表查询超时时间(秒)" +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"<br />" +msgstr "" -msgid "Total count of blocked domains" -msgstr "阻止域名总数" +msgid "" +"This form allows you to modify the content of the main adblock configuration " +"file (/etc/config/adblock)." +msgstr "" + +msgid "" +"This form allows you to query active block lists for certain domains, e.g. " +"for whitelisting." +msgstr "" msgid "" -"When adblock is active, all DNS queries are redirected to the local resolver " -"in this server by default. You can disable that to allow queries to external " -"DNS servers." +"This form shows the syslog output, pre-filtered for adblock related messages " +"only." msgstr "" -"当Adblock处于活动状态时,默认情况下会将所有的DNS查询重定向到此服务器的本地解" -"析器。您可以禁用以允许查询外部DNS服务器。" -msgid "Whitelist file" -msgstr "白名单文件" +msgid "Trigger delay" +msgstr "触发延迟" + +msgid "View Logfile" +msgstr "查看日志文件" + +msgid "Waiting for command to complete..." +msgstr "正在执行命令..." + +msgid "Yes" +msgstr "是" + +msgid "active" +msgstr "已启用" + +msgid "n/a" +msgstr "" + +msgid "no domains blocked" +msgstr "没有被拦截的域名" + +msgid "see online documentation" +msgstr "查看在线文档" + +msgid "suspended" +msgstr "已暂停" + +#~ msgid "Backup options" +#~ msgstr "备份选项" + +#~ msgid "" +#~ "). Note that list URLs and Shallalist category selections are not " +#~ "configurable via Luci." +#~ msgstr ")。需要注意的是列表URL和列表类别选项无法通过Luci设置。" + +#~ msgid "Available blocklist sources (" +#~ msgstr "可用拦截列表来源(" + +#~ msgid "" +#~ "File with whitelisted hosts/domains that are allowed despite being on a " +#~ "blocklist." +#~ msgstr "允许的主机/域名列表" + +#~ msgid "Global options" +#~ msgstr "全局选项" + +#~ msgid "Whitelist file" +#~ msgstr "白名单文件" + +#~ msgid "see list details" +#~ msgstr "查看列表详情" + +#~ msgid "Count" +#~ msgstr "数量" + +#~ msgid "IPv4 blackhole ip address" +#~ msgstr "IPv4禁止列表" + +#~ msgid "IPv6 blackhole ip address" +#~ msgstr "IPv6禁止列表" + +#~ msgid "List date/state" +#~ msgstr "列表日期/状态" + +#~ msgid "Name of the logical lan interface" +#~ msgstr "LAN接口名称" + +#~ msgid "Port of the adblock uhttpd instance" +#~ msgstr "Adblock uhttpd端口" + +#~ msgid "Redirect all DNS queries to the local resolver" +#~ msgstr "将所有DNS查询都重定向到本地解析器" + +#~ msgid "Timeout for blocklist fetch (seconds)" +#~ msgstr "列表查询超时时间(秒)" + +#~ msgid "Total count of blocked domains" +#~ msgstr "阻止域名总数" -msgid "see list details" -msgstr "查看列表详情" +#~ msgid "" +#~ "When adblock is active, all DNS queries are redirected to the local " +#~ "resolver in this server by default. You can disable that to allow queries " +#~ "to external DNS servers." +#~ msgstr "" +#~ "当Adblock处于活动状态时,默认情况下会将所有的DNS查询重定向到此服务器的本地" +#~ "解析器。您可以禁用以允许查询外部DNS服务器。" diff --git a/applications/luci-app-ahcp/po/pt-br/ahcp.po b/applications/luci-app-ahcp/po/pt-br/ahcp.po index 55ec29cdc..741c14572 100644 --- a/applications/luci-app-ahcp/po/pt-br/ahcp.po +++ b/applications/luci-app-ahcp/po/pt-br/ahcp.po @@ -1,20 +1,20 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2014-03-29 23:07+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2017-02-17 17:07-0200\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"POT-Creation-Date: \n" msgid "AHCP Server" msgstr "Servidor AHCP" -#, fuzzy msgid "" "AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " "networks designed to be used in place of router discovery or DHCP on " diff --git a/applications/luci-app-aria2/po/pt-br/aria2.po b/applications/luci-app-aria2/po/pt-br/aria2.po new file mode 100644 index 000000000..1bb413744 --- /dev/null +++ b/applications/luci-app-aria2/po/pt-br/aria2.po @@ -0,0 +1,236 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "\"Falloc\" is not available in all cases." +msgstr "\"Falloc\" não está disponível em todas as classes." + +msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled" +msgstr "" +"<abbr title=\"Distributed Hash Table/Tabla de disperção distribuída\">DHT</" +"abbr> habilitado" + +msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled" +msgstr "" +"<abbr title=\"Local Peer Discovery/Descoberta de Parceiros Locais\">LPD</" +"abbr> habilitado" + +msgid "Additional Bt tracker enabled" +msgstr "Rastreadores BitTorrent adicionais habilitado" + +msgid "Aria2" +msgstr "Aria2" + +msgid "Aria2 Settings" +msgstr "Configurações do Aria2" + +msgid "Aria2 Status" +msgstr "Estado do Aria2" + +msgid "" +"Aria2 is a multi-protocol & multi-source download utility, here you can " +"configure the settings." +msgstr "" +"Aria2 é um utilitário de transferência multi-protocolo de múltiplas fontes, " +"aqui você pode configurá-lo." + +msgid "Autosave session interval" +msgstr "Intervalo para autossalvamento da sessão" + +msgid "BitTorrent Settings" +msgstr "Configurações do BitTorrent" + +msgid "BitTorrent listen port" +msgstr "Porta de escuta do BitTorrent" + +msgid "Collecting data..." +msgstr "Coletando dados..." + +msgid "Config file directory" +msgstr "Diretório dos arquivos de configuração" + +msgid "Debug" +msgstr "Depuração" + +msgid "Default download directory" +msgstr "Diretório padrão de arquivos baixados" + +msgid "Disk cache" +msgstr "Cache em Disco" + +msgid "Enable log" +msgstr "Habilitar registros" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "Error" +msgstr "Erro" + +msgid "Extra Settings" +msgstr "Configurações Adicionais" + +msgid "Falloc" +msgstr "Falloc" + +msgid "Files and Locations" +msgstr "Arquivos e Locais" + +msgid "Follow torrent" +msgstr "Seguir torrent" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "Generate Randomly" +msgstr "Gerar aleatoriamente" + +msgid "Info" +msgstr "Informações" + +msgid "List of additional Bt tracker" +msgstr "Lista de rastreadores BitTorrent adicionais" + +msgid "List of extra settings" +msgstr "Lista de configurações adicionais" + +msgid "Log file is in the config file dir." +msgstr "" +"Arquivo de registro (log) está no diretório do arquivo de configuração." + +msgid "Log level" +msgstr "Nível do registro" + +msgid "Max concurrent downloads" +msgstr "Número máximo de transferencias simultâneas" + +msgid "Max connection per server" +msgstr "Numero máximo de conexões por servidor" + +msgid "Max number of peers per torrent" +msgstr "Numero máximo de parceiros por torrent" + +msgid "Max number of split" +msgstr "Numero máximo de divisões" + +msgid "Min split size" +msgstr "Tamanho mínimo da divisão" + +msgid "No Authentication" +msgstr "Sem Autenticação" + +msgid "Notice" +msgstr "Aviso" + +msgid "Off" +msgstr "Desligado" + +msgid "Open WebUI-Aria2" +msgstr "Abrir WebUI-Aria2" + +msgid "Open YAAW" +msgstr "Abrir YAAW" + +msgid "Overall download limit" +msgstr "Limite global para baixar" + +msgid "Overall speed limit enabled" +msgstr "Limite da taxa de transferência global habilitado" + +msgid "Overall upload limit" +msgstr "Limite global para subir" + +msgid "Per task download limit" +msgstr "Limite por tarefa para baixar" + +msgid "Per task speed limit enabled" +msgstr "Limite da taxa de transferência por tarefa habilitado" + +msgid "Per task upload limit" +msgstr "Limite por tarefa para subir" + +msgid "Prealloc" +msgstr "Pré-alocação" + +msgid "Preallocation" +msgstr "Pré-alocação" + +msgid "Prefix of peer ID" +msgstr "Prefixo da identificação do paceiro" + +msgid "RPC Token" +msgstr "" +"Chave eletrônica do <abbr title=\"Remote Procedure Call/Chamada de " +"Procedimento Remoto\">RPC</abbr>" + +msgid "RPC authentication method" +msgstr "" +"Método de autenticação do <abbr title=\"Remote Procedure Call/Chamada de " +"Procedimento Remoto\">RPC</abbr>" + +msgid "RPC password" +msgstr "" +"Senha do <abbr title=\"Remote Procedure Call/Chamada de Procedimento Remoto" +"\">RPC</abbr>" + +msgid "RPC port" +msgstr "" +"Porta do <abbr title=\"Remote Procedure Call/Chamada de Procedimento Remoto" +"\">RPC</abbr>" + +msgid "RPC username" +msgstr "" +"Nome do usuario do <abbr title=\"Remote Procedure Call/Chamada de " +"Procedimento Remoto\">RPC</abbr>" + +msgid "Run daemon as user" +msgstr "Executar serviço como usuário" + +msgid "Sec" +msgstr "Segurança" + +msgid "Task Settings" +msgstr "Configurações das tarefas" + +msgid "The Aria2 service is not running." +msgstr "O serviço Aria2 está parado." + +msgid "The Aria2 service is running." +msgstr "O serviço Aria2 está em execução." + +msgid "Token" +msgstr "Chave eletrônica" + +msgid "Trunc" +msgstr "Truncar" + +msgid "Use WebSocket" +msgstr "Use WebSockets" + +msgid "User agent value" +msgstr "Valor da identificação do agente do usuário" + +msgid "Username & Password" +msgstr "Usuário & Senha" + +msgid "View Json-RPC URL" +msgstr "Visualizar URL do JSON-RPC" + +msgid "Warn" +msgstr "Atenção" + +msgid "in bytes, You can append K or M." +msgstr "em bytes. Você pode sufixar com K (quilo) ou M (mega)." + +msgid "in bytes/sec, You can append K or M." +msgstr "em bytes por segundo. Você pode sufixar com K (quilo) ou M (mega)." diff --git a/applications/luci-app-bcp38/Makefile b/applications/luci-app-bcp38/Makefile new file mode 100644 index 000000000..9ab5a6701 --- /dev/null +++ b/applications/luci-app-bcp38/Makefile @@ -0,0 +1,18 @@ +# +# Copyright (C) 2010 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=BCP38 LuCI interface +LUCI_DEPENDS:=+luci-mod-admin-full +bcp38 + +PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk> +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-bcp38/luasrc/controller/bcp38.lua b/applications/luci-app-bcp38/luasrc/controller/bcp38.lua new file mode 100644 index 000000000..7ea22835d --- /dev/null +++ b/applications/luci-app-bcp38/luasrc/controller/bcp38.lua @@ -0,0 +1,7 @@ +module("luci.controller.bcp38", package.seeall) + +function index() + entry({"admin", "network", "firewall", "bcp38"}, + cbi("bcp38"), + _("BCP38"), 50).dependent = false +end diff --git a/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua b/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua new file mode 100644 index 000000000..632074a56 --- /dev/null +++ b/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua @@ -0,0 +1,60 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright 2014 Toke Høiland-Jørgensen <toke@toke.dk> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ +]]-- + +local wa = require "luci.tools.webadmin" +local net = require "luci.model.network".init() +local ifaces = net:get_interfaces() + +m = Map("bcp38", translate("BCP38"), + translate("This function blocks packets with private address destinations " .. + "from going out onto the internet as per " .. + "<a href=\"http://tools.ietf.org/html/bcp38\">BCP 38</a>. " .. + "For IPv6, only source specific default routes are installed, so " .. + "no BCP38 firewall routes are needed.")) + +s = m:section(TypedSection, "bcp38", translate("BCP38 config")) +s.anonymous = true +-- BASIC +e = s:option(Flag, "enabled", translate("Enable")) +e.rmempty = false + +a = s:option(Flag, "detect_upstream", translate("Auto-detect upstream IP"), + translate("Attempt to automatically detect if the upstream IP " .. + "will be blocked by the configuration, and add an exception if it will. " .. + "If this does not work correctly, you can add exceptions manually below.")) +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 +end +n.rmempty = false + +ma = s:option(DynamicList, "match", + translate("Blocked IP ranges")) + +ma.datatype = "ip4addr" + +nm = s:option(DynamicList, "nomatch", + translate("Allowed IP ranges"), translate("Takes precedence over blocked ranges. ".. + "Use to whitelist your upstream network if you're behind a double NAT " .. + "and the auto-detection doesn't work.")) + +nm.datatype = "ip4addr" + + +return m diff --git a/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38 b/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38 new file mode 100755 index 000000000..c204236e3 --- /dev/null +++ b/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38 @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@bcp38[-1] + add ucitrack bcp38 + add_list ucitrack.@bcp38[0].affects=firewall + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/applications/luci-app-clamav/Makefile b/applications/luci-app-clamav/Makefile new file mode 100644 index 000000000..f91e692af --- /dev/null +++ b/applications/luci-app-clamav/Makefile @@ -0,0 +1,18 @@ +# +# Copyright (C) 2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=ClamAV LuCI interface +LUCI_DEPENDS:=+luci-mod-admin-full +clamav + +PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-clamav/luasrc/controller/clamav.lua b/applications/luci-app-clamav/luasrc/controller/clamav.lua new file mode 100644 index 000000000..02f3bfc4b --- /dev/null +++ b/applications/luci-app-clamav/luasrc/controller/clamav.lua @@ -0,0 +1,22 @@ +--[[ + +LuCI ClamAV module + +Copyright (C) 2015, Itus Networks, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + Luka Perkov <luka.perkov@sartura.hr> + +]]-- + +module("luci.controller.clamav", package.seeall) + +function index() + entry({"admin", "services", "clamav"}, cbi("clamav"), _("ClamAV")) +end diff --git a/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua b/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua new file mode 100644 index 000000000..ff98139d4 --- /dev/null +++ b/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua @@ -0,0 +1,178 @@ +--[[ + +LuCI ClamAV module + +Copyright (C) 2015, Itus Networks, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + Luka Perkov <luka.perkov@sartura.hr> + +]]-- + +local fs = require "nixio.fs" +local sys = require "luci.sys" +require "ubus" + +m = Map("clamav", translate("ClamAV")) +m.on_after_commit = function() luci.sys.call("/etc/init.d/clamav restart") end + +s = m:section(TypedSection, "clamav") +s.anonymous = true +s.addremove = false + +s:tab("tab_advanced", translate("Settings")) +s:tab("tab_logs", translate("Log")) + +--------------- Settings -------------- + +LogFileMaxSize = s:taboption("tab_advanced", Value, "LogFileMaxSize", translate("Max size of log file")) +LogFileMaxSize:value("512K", translate("512K")) +LogFileMaxSize:value("1M", translate("1M")) +LogFileMaxSize:value("2M", translate("2M")) +LogFileMaxSize.default = "1M" + +LogTime = s:taboption("tab_advanced", ListValue, "LogTime", translate("Log time with each message")) +LogTime:value("no", translate("No")) +LogTime:value("yes", translate("Yes")) +LogTime.default = "no" + +LogVerbose = s:taboption("tab_advanced", ListValue, "LogVerbose", translate("Enable verbose logging")) +LogVerbose:value("no", translate("No")) +LogVerbose:value("yes", translate("Yes")) +LogVerbose.default = "no" + +ExtendedDetectionInfo = s:taboption("tab_advanced", ListValue, "ExtendedDetectionInfo", translate("Log additional infection info")) +ExtendedDetectionInfo:value("no", translate("No")) +ExtendedDetectionInfo:value("yes", translate("Yes")) +ExtendedDetectionInfo.default = "no" + +dummy3 = s:taboption("tab_advanced", DummyValue, "") +dummy4 = s:taboption("tab_advanced", DummyValue, "") + +MaxDirectoryRecursion = s:taboption("tab_advanced", Value, "MaxDirectoryRecursion", translate("Max directory scan depth")) +MaxDirectoryRecursion:value("15", translate("15")) +MaxDirectoryRecursion:value("20", translate("20")) +MaxDirectoryRecursion.default = "15" + +FollowDirectorySymlink = s:taboption("tab_advanced", ListValue, "FollowDirectorySymlink", translate("Follow directory symlinks")) +FollowDirectorySymlink:value("no", translate("No")) +FollowDirectorySymlink:value("yes", translate("Yes")) +FollowDirectorySymlink.default = "no" + +FollowFileSymlinks = s:taboption("tab_advanced", ListValue, "FollowFileSymlinks", translate("Follow file symlinks")) +FollowFileSymlinks:value("no", translate("No")) +FollowFileSymlinks:value("yes", translate("Yes")) +FollowFileSymlinks.default = "no" + +DetectPUA = s:taboption("tab_advanced", ListValue, "DetectPUA", translate("Detect possibly unwanted apps")) +DetectPUA:value("no", translate("No")) +DetectPUA:value("yes", translate("Yes")) +DetectPUA.default = "no" + +ScanPE = s:taboption("tab_advanced", ListValue, "ScanPE", translate("Scan portable executables")) +ScanPE:value("no", translate("No")) +ScanPE:value("yes", translate("Yes")) +ScanPE.default = "yes" + +ScanELF = s:taboption("tab_advanced", ListValue, "ScanELF", translate("Scan ELF files")) +ScanELF:value("no", translate("No")) +ScanELF:value("yes", translate("Yes")) +ScanELF.default = "yes" + +DetectBrokenExecutables = s:taboption("tab_advanced", ListValue, "DetectBrokenExecutables", translate("Detect broken executables")) +DetectBrokenExecutables:value("no", translate("No")) +DetectBrokenExecutables:value("yes", translate("Yes")) +DetectBrokenExecutables.default = "no" + +ScanOLE2 = s:taboption("tab_advanced", ListValue, "ScanOLE2", translate("Scan MS Office and .msi files")) +ScanOLE2:value("no", translate("No")) +ScanOLE2:value("yes", translate("Yes")) +ScanOLE2.default = "yes" + +ScanPDF = s:taboption("tab_advanced", ListValue, "ScanPDF", translate("Scan pdf files")) +ScanPDF:value("no", translate("No")) +ScanPDF:value("yes", translate("Yes")) +ScanPDF.default = "yes" + +ScanSWF = s:taboption("tab_advanced", ListValue, "ScanSWF", translate("Scan swf files")) +ScanSWF:value("no", translate("No")) +ScanSWF:value("yes", translate("Yes")) +ScanSWF.default = "yes" + +ScanMail = s:taboption("tab_advanced", ListValue, "ScanMail", translate("Scan emails")) +ScanMail:value("no", translate("No")) +ScanMail:value("yes", translate("Yes")) +ScanMail.default = "yes" + +ScanPartialMessages = s:taboption("tab_advanced", ListValue, "ScanPartialMessages", translate("Scan RFC1341 messages split over many emails")) +ScanPartialMessages:value("no", translate("No")) +ScanPartialMessages:value("yes", translate("Yes")) +ScanPartialMessages.default = "no" + +ScanArchive = s:taboption("tab_advanced", ListValue, "ScanArchive", translate("Scan archives")) +ScanArchive:value("no", translate("No")) +ScanArchive:value("yes", translate("Yes")) +ScanArchive.default = "yes" + +ArchiveBlockEncrypted = s:taboption("tab_advanced", ListValue, "ArchiveBlockEncrypted", translate("Block encrypted archives")) +ArchiveBlockEncrypted:value("no", translate("No")) +ArchiveBlockEncrypted:value("yes", translate("Yes")) +ArchiveBlockEncrypted.default = "no" + +dummy5 = s:taboption("tab_advanced", DummyValue, "") +dummy6 = s:taboption("tab_advanced", DummyValue, "") + +StreamMinPort = s:taboption("tab_advanced", Value, "StreamMinPort", translate("Port range, lowest port")) +StreamMinPort.datatype = "portrange" +StreamMinPort:value("1024",translate("1024")) +StreamMinPort.default = "1024" + +StreamMaxPort = s:taboption("tab_advanced", Value, "StreamMaxPort", translate("Port range, highest port")) +StreamMaxPort.datatype = "portrange" +StreamMaxPort:value("2048",translate("2048")) +StreamMaxPort.default = "2048" + +MaxThreads = s:taboption("tab_advanced", Value, "MaxThreads", translate("Max number of threads")) +MaxThreads.datatype = "and(uinteger,min(1))" +MaxThreads:value("10",translate("10")) +MaxThreads:value("20",translate("20")) +MaxThreads.default = "10" + +SelfCheck = s:taboption("tab_advanced", Value, "SelfCheck", translate("Database check every N sec")) +SelfCheck.datatype = "and(uinteger,min(1))" +SelfCheck:value("600",translate("600")) +SelfCheck.default = "600" + +MaxFileSize = s:taboption("tab_advanced", Value, "MaxFileSize", translate("Max size of scanned file")) +MaxFileSize.datatype = "string" +MaxFileSize:value("150M",translate("150M")) +MaxFileSize:value("50M",translate("50M")) +MaxFileSize.default = "150M" + +------------------ Log -------------------- + +clamav_logfile = s:taboption("tab_logs", TextValue, "lines", "") +clamav_logfile.wrap = "off" +clamav_logfile.rows = 25 +clamav_logfile.rmempty = true + +function clamav_logfile.cfgvalue() + local uci = require "luci.model.uci".cursor_state() + local file = "/tmp/clamd.log" + if file then + return fs.readfile(file) or "" + else + return "" + end +end + +function clamav_logfile.write() +end + +return m diff --git a/applications/luci-app-clamav/po/ja/clamav.po b/applications/luci-app-clamav/po/ja/clamav.po new file mode 100644 index 000000000..c54c7b18a --- /dev/null +++ b/applications/luci-app-clamav/po/ja/clamav.po @@ -0,0 +1,130 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.12\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ja\n" + +msgid "10" +msgstr "10" + +msgid "1024" +msgstr "1024" + +msgid "15" +msgstr "15" + +msgid "150M" +msgstr "150M" + +msgid "1M" +msgstr "1M" + +msgid "20" +msgstr "20" + +msgid "2048" +msgstr "2048" + +msgid "2M" +msgstr "2M" + +msgid "50M" +msgstr "50M" + +msgid "512K" +msgstr "512K" + +msgid "600" +msgstr "600" + +msgid "Block encrypted archives" +msgstr "暗号化されたアーカイブのブロック" + +msgid "ClamAV" +msgstr "ClamAV" + +msgid "Database check every N sec" +msgstr "データベース チェック間隔(秒)" + +msgid "Detect broken executables" +msgstr "破損した実行ファイルの検出" + +msgid "Detect possibly unwanted apps" +msgstr "不必要と思われるアプリケーションの検出" + +msgid "Enable verbose logging" +msgstr "詳細なログの有効化" + +msgid "Follow directory symlinks" +msgstr "ディレクトリ シンボリックリンクに従う" + +msgid "Follow file symlinks" +msgstr "ファイル シンボリックリンクに従う" + +msgid "Log" +msgstr "ログ" + +msgid "Log additional infection info" +msgstr "追加の感染情報ログ" + +msgid "Log time with each message" +msgstr "ログ メッセージ毎に時刻を付加" + +msgid "Max directory scan depth" +msgstr "ディレクトリ スキャンの最大深度" + +msgid "Max number of threads" +msgstr "スレッドの最大数" + +msgid "Max size of log file" +msgstr "ログの最大サイズ" + +msgid "Max size of scanned file" +msgstr "" + +msgid "No" +msgstr "いいえ" + +msgid "Port range, highest port" +msgstr "ポート範囲(上限)" + +msgid "Port range, lowest port" +msgstr "ポート範囲(下限)" + +msgid "Scan ELF files" +msgstr "ELF ファイルのスキャン" + +msgid "Scan MS Office and .msi files" +msgstr "MS Office と .msi ファイルのスキャン" + +msgid "Scan RFC1341 messages split over many emails" +msgstr "" + +msgid "Scan archives" +msgstr "アーカイブのスキャン" + +msgid "Scan emails" +msgstr "E-mailのスキャン" + +msgid "Scan pdf files" +msgstr "PDF ファイルのスキャン" + +msgid "Scan portable executables" +msgstr "ポータブル 実行ファイルのスキャン" + +msgid "Scan swf files" +msgstr "SWF ファイルのスキャン" + +msgid "Settings" +msgstr "設定" + +msgid "Yes" +msgstr "はい" diff --git a/applications/luci-app-clamav/po/templates/clamav.pot b/applications/luci-app-clamav/po/templates/clamav.pot new file mode 100644 index 000000000..768f73093 --- /dev/null +++ b/applications/luci-app-clamav/po/templates/clamav.pot @@ -0,0 +1,119 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "10" +msgstr "" + +msgid "1024" +msgstr "" + +msgid "15" +msgstr "" + +msgid "150M" +msgstr "" + +msgid "1M" +msgstr "" + +msgid "20" +msgstr "" + +msgid "2048" +msgstr "" + +msgid "2M" +msgstr "" + +msgid "50M" +msgstr "" + +msgid "512K" +msgstr "" + +msgid "600" +msgstr "" + +msgid "Block encrypted archives" +msgstr "" + +msgid "ClamAV" +msgstr "" + +msgid "Database check every N sec" +msgstr "" + +msgid "Detect broken executables" +msgstr "" + +msgid "Detect possibly unwanted apps" +msgstr "" + +msgid "Enable verbose logging" +msgstr "" + +msgid "Follow directory symlinks" +msgstr "" + +msgid "Follow file symlinks" +msgstr "" + +msgid "Log" +msgstr "" + +msgid "Log additional infection info" +msgstr "" + +msgid "Log time with each message" +msgstr "" + +msgid "Max directory scan depth" +msgstr "" + +msgid "Max number of threads" +msgstr "" + +msgid "Max size of log file" +msgstr "" + +msgid "Max size of scanned file" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Port range, highest port" +msgstr "" + +msgid "Port range, lowest port" +msgstr "" + +msgid "Scan ELF files" +msgstr "" + +msgid "Scan MS Office and .msi files" +msgstr "" + +msgid "Scan RFC1341 messages split over many emails" +msgstr "" + +msgid "Scan archives" +msgstr "" + +msgid "Scan emails" +msgstr "" + +msgid "Scan pdf files" +msgstr "" + +msgid "Scan portable executables" +msgstr "" + +msgid "Scan swf files" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Yes" +msgstr "" diff --git a/applications/luci-app-clamav/po/zh-cn/clamav.po b/applications/luci-app-clamav/po/zh-cn/clamav.po new file mode 100644 index 000000000..6a2c5dfd5 --- /dev/null +++ b/applications/luci-app-clamav/po/zh-cn/clamav.po @@ -0,0 +1,131 @@ +# liushuyu <liushuyu_011@163.com>, 2017. +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2017-04-15 21:37-0600\n" +"Language-Team: Chinese <kde-i18n-doc@kde.org>\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.1\n" +"Last-Translator: liushuyu <liushuyu011@gmail.com>\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: zh_CN\n" + +msgid "10" +msgstr "10" + +msgid "1024" +msgstr "1024" + +msgid "15" +msgstr "15" + +msgid "150M" +msgstr "150M" + +msgid "1M" +msgstr "1M" + +msgid "20" +msgstr "20" + +msgid "2048" +msgstr "2048" + +msgid "2M" +msgstr "2M" + +msgid "50M" +msgstr "50M" + +msgid "512K" +msgstr "512K" + +msgid "600" +msgstr "600" + +msgid "Block encrypted archives" +msgstr "拦截加密的归档文件" + +msgid "ClamAV" +msgstr "ClamAV" + +msgid "Database check every N sec" +msgstr "每 N 秒检测一次数据库" + +msgid "Detect broken executables" +msgstr "检测破损的可执行文件" + +msgid "Detect possibly unwanted apps" +msgstr "检测不受欢迎的软件" + +msgid "Enable verbose logging" +msgstr "启用详细日志输出" + +msgid "Follow directory symlinks" +msgstr "跟随目录符号链接" + +msgid "Follow file symlinks" +msgstr "跟随文件符号链接" + +msgid "Log" +msgstr "日志" + +msgid "Log additional infection info" +msgstr "记录详细的感染信息" + +msgid "Log time with each message" +msgstr "记录消息时间戳" + +msgid "Max directory scan depth" +msgstr "最大扫描深度" + +msgid "Max number of threads" +msgstr "最大线程数" + +msgid "Max size of log file" +msgstr "最大日志大小" + +msgid "Max size of scanned file" +msgstr "最大可扫描的文件大小" + +msgid "No" +msgstr "否" + +msgid "Port range, highest port" +msgstr "端口范围,最大端口" + +msgid "Port range, lowest port" +msgstr "端口范围,最小端口" + +msgid "Scan ELF files" +msgstr "扫描 ELF 文件" + +msgid "Scan MS Office and .msi files" +msgstr "扫描 MS Office 文档和 .msi 安装包文件" + +msgid "Scan RFC1341 messages split over many emails" +msgstr "扫描符合 RFC1341 邮件分离规范的邮件" + +msgid "Scan archives" +msgstr "扫描归档文件" + +msgid "Scan emails" +msgstr "扫描电子邮件" + +msgid "Scan pdf files" +msgstr "扫描 PDF 文件" + +msgid "Scan portable executables" +msgstr "扫描 PE (Windows) 可执行文件" + +msgid "Scan swf files" +msgstr "扫描 SWF 文件" + +msgid "Settings" +msgstr "设置" + +msgid "Yes" +msgstr "是" diff --git a/applications/luci-app-commands/luasrc/controller/commands.lua b/applications/luci-app-commands/luasrc/controller/commands.lua index 16528d117..ca91813b1 100644 --- a/applications/luci-app-commands/luasrc/controller/commands.lua +++ b/applications/luci-app-commands/luasrc/controller/commands.lua @@ -153,8 +153,8 @@ local function parse_cmdline(cmdid, args) end end -function action_run(...) - local fs = require "nixio.fs" +function execute_command(callback, ...) + local fs = require "nixio.fs" local argv = parse_cmdline(...) if argv then local outfile = os.tmpname() @@ -169,8 +169,8 @@ function action_run(...) local binary = not not (stdout:match("[%z\1-\8\14-\31]")) - luci.http.prepare_content("application/json") - luci.http.write_json({ + callback({ + ok = true, command = table.concat(argv, " "), stdout = not binary and stdout, stderr = stderr, @@ -178,10 +178,41 @@ function action_run(...) binary = binary }) else - luci.http.status(404, "No such command") + callback({ + ok = false, + code = 404, + reason = "No such command" + }) + end +end + +function return_json(result) + if result.ok then + luci.http.prepare_content("application/json") + luci.http.write_json(result) + else + luci.http.status(result.code, result.reason) end end +function action_run(...) + execute_command(return_json, ...) +end + +function return_html(result) + if result.ok then + require("luci.template") + luci.template.render("commands_public", { + exitcode = result.exitcode, + stdout = result.stdout, + stderr = result.stderr + }) + else + luci.http.status(result.code, result.reason) + end + +end + function action_download(...) local fs = require "nixio.fs" local argv = parse_cmdline(...) @@ -192,11 +223,11 @@ function action_download(...) local name if chunk:match("[%z\1-\8\14-\31]") then luci.http.header("Content-Disposition", "attachment; filename=%s" - % fs.basename(argv[1]):gsub("%W+", ".") .. ".bin") + % fs.basename(argv[1]):gsub("%W+", ".") .. ".bin") luci.http.prepare_content("application/octet-stream") else luci.http.header("Content-Disposition", "attachment; filename=%s" - % fs.basename(argv[1]):gsub("%W+", ".") .. ".txt") + % fs.basename(argv[1]):gsub("%W+", ".") .. ".txt") luci.http.prepare_content("text/plain") end @@ -214,14 +245,24 @@ function action_download(...) end end + function action_public(cmdid, args) + local disp = false + if string.sub(cmdid, -1) == "s" then + disp = true + cmdid = string.sub(cmdid, 1, -2) + end local uci = require "luci.model.uci".cursor() if cmdid and - uci:get("luci", cmdid) == "command" and - uci:get("luci", cmdid, "public") == "1" - then - action_download(cmdid, args) - else - luci.http.status(403, "Access to command denied") + uci:get("luci", cmdid) == "command" and + uci:get("luci", cmdid, "public") == "1" + then + if disp then + execute_command(return_html, cmdid, args) + else + action_download(cmdid, args) + end + else + luci.http.status(403, "Access to command denied") + end end -end diff --git a/applications/luci-app-commands/luasrc/view/commands.htm b/applications/luci-app-commands/luasrc/view/commands.htm index 73b9e6a2c..f094e186d 100644 --- a/applications/luci-app-commands/luasrc/view/commands.htm +++ b/applications/luci-app-commands/luasrc/view/commands.htm @@ -108,16 +108,19 @@ if (legend && output) { - var link = location.protocol + '//' + location.hostname + + var prefix = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '') + - location.pathname.split(';')[0] + 'command/' + - id + (args ? '/' + args : ''); - + location.pathname.split(';')[0] + 'command/'; + var suffix = (args ? '/' + args : ''); + + var link = prefix + id + suffix; + var link_nodownload = prefix + id + "s" + suffix; + legend.style.display = 'none'; output.parentNode.style.display = 'block'; output.innerHTML = String.format( - '<div class="alert-message"><%:Access command with%> <a href="%s">%s</a></div>', - link, link + '<div class="alert-message"><p><%:Download execution result%> <a href="%s">%s</a></p><p><%:Or display result%> <a href="%s">%s</a></p></div>', + link, link, link_nodownload, link_nodownload ); location.hash = '#output'; diff --git a/applications/luci-app-commands/luasrc/view/commands_public.htm b/applications/luci-app-commands/luasrc/view/commands_public.htm new file mode 100644 index 000000000..f20799d40 --- /dev/null +++ b/applications/luci-app-commands/luasrc/view/commands_public.htm @@ -0,0 +1,50 @@ +<%# + Copyright 2016 t123yh <t123yh@outlook.com> + Licensed to the public under the Apache License 2.0. +-%> + +<% css = [[ +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} + +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +]] -%> + +<%+header%> + +<% if exitcode == 0 then %> + <div class="alert alert-success" role="alert"> <%:Command executed successfully.%> </div> +<% else %> + <div class="alert alert-warning" role="alert"> <%:Command exited with status code %> <%= exitcode %> </div> +<% end %> + +<% if stdout ~= "" then %> + <h3><%:Standard Output%></h3> + <pre><%= stdout %></pre> +<% end %> + +<% if stderr ~= "" then %> + <h3><%:Standard Error%></h3> + <pre><%= stderr %></pre> +<% end %> + +<script> + <%# Display top bar on mobile devices -%> + document.getElementsByClassName('brand')[0].style.setProperty("display", "block", "important"); +</script> + +<%+footer%>
\ No newline at end of file diff --git a/applications/luci-app-commands/po/ca/commands.po b/applications/luci-app-commands/po/ca/commands.po index 9dc23b2f4..11ea8960d 100644 --- a/applications/luci-app-commands/po/ca/commands.po +++ b/applications/luci-app-commands/po/ca/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Una breva descripció textual de l'ordre configurat" -msgid "Access command with" -msgstr "Accedeix l'ordre amb" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -42,6 +39,12 @@ msgstr "Recollint dades..." msgid "Command" msgstr "Ordre" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "L'ordre ha fallat" @@ -72,6 +75,9 @@ msgstr "Descripció" msgid "Download" msgstr "Baixa" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "L'execució de l'ordre ha fallat!" @@ -81,12 +87,21 @@ msgstr "Enllaç" msgid "Loading" msgstr "Carregant" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Accés públic" msgid "Run" msgstr "Executa" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -96,3 +111,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Esperant que l'ordre acabi..." + +#~ msgid "Access command with" +#~ msgstr "Accedeix l'ordre amb" diff --git a/applications/luci-app-commands/po/cs/commands.po b/applications/luci-app-commands/po/cs/commands.po index 64949bdef..f6aa3cc44 100644 --- a/applications/luci-app-commands/po/cs/commands.po +++ b/applications/luci-app-commands/po/cs/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Krátky popis nastaveného příkazu" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -40,6 +37,12 @@ msgstr "Sbírání dat..." msgid "Command" msgstr "Příkaz" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Příkaz selhal" @@ -70,6 +73,9 @@ msgstr "Popis" msgid "Download" msgstr "Stáhnout" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "Chyba při zpracování příkazu!" @@ -79,12 +85,21 @@ msgstr "Odkaz" msgid "Loading" msgstr "Nahrávám" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Veřejný přístup" msgid "Run" msgstr "Spustit" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." diff --git a/applications/luci-app-commands/po/de/commands.po b/applications/luci-app-commands/po/de/commands.po index 2b7c631ac..e67404afa 100644 --- a/applications/luci-app-commands/po/de/commands.po +++ b/applications/luci-app-commands/po/de/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Kurze Beschreibung des abgespeicherten Kommandos" -msgid "Access command with" -msgstr "Kommando aufrufen mit" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -42,6 +39,12 @@ msgstr "Sammle Daten..." msgid "Command" msgstr "Kommando" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Kommando fehlgeschlagen" @@ -72,6 +75,9 @@ msgstr "Beschreibung" msgid "Download" msgstr "Herunterladen" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "Kommando konnte nicht ausgeführt werden!" @@ -81,12 +87,21 @@ msgstr "Link" msgid "Loading" msgstr "Lade" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Öffentlicher Zugriff" msgid "Run" msgstr "Ausführen" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -96,3 +111,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Warte auf die Ausführung des Kommandos..." + +#~ msgid "Access command with" +#~ msgstr "Kommando aufrufen mit" diff --git a/applications/luci-app-commands/po/el/commands.po b/applications/luci-app-commands/po/el/commands.po index 0e9e65d26..48b18366f 100644 --- a/applications/luci-app-commands/po/el/commands.po +++ b/applications/luci-app-commands/po/el/commands.po @@ -11,9 +11,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -37,6 +34,12 @@ msgstr "" msgid "Command" msgstr "" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "" @@ -67,6 +70,9 @@ msgstr "" msgid "Download" msgstr "" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "" @@ -76,12 +82,21 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "" msgid "Run" msgstr "" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." diff --git a/applications/luci-app-commands/po/en/commands.po b/applications/luci-app-commands/po/en/commands.po index 754a229c1..ec192e4c1 100644 --- a/applications/luci-app-commands/po/en/commands.po +++ b/applications/luci-app-commands/po/en/commands.po @@ -1,19 +1,20 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Last-Translator: Automatically generated\n" +"Project-Id-Version: \n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language-Team: none\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language: en\n" +"X-Generator: Poedit 1.8.11\n" msgid "A short textual description of the configured command" msgstr "A short textual description of the configured command" -msgid "Access command with" -msgstr "Access command with" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -39,6 +40,12 @@ msgstr "Collecting data..." msgid "Command" msgstr "Command" +msgid "Command executed successfully." +msgstr "Command executed successfully." + +msgid "Command exited with status code" +msgstr "Command exited with status code" + msgid "Command failed" msgstr "Command failed" @@ -69,6 +76,9 @@ msgstr "Description" msgid "Download" msgstr "Download" +msgid "Download execution result" +msgstr "Download execution result" + msgid "Failed to execute command!" msgstr "Failed to execute command!" @@ -78,12 +88,21 @@ msgstr "Link" msgid "Loading" msgstr "Loading" +msgid "Or display result" +msgstr "Or display result" + msgid "Public access" msgstr "Public access" msgid "Run" msgstr "Run" +msgid "Standard Error" +msgstr "Standard Error" + +msgid "Standard Output" +msgstr "Standard Output" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -93,3 +112,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Waiting for command to complete..." + +#~ msgid "Command exited with status code " +#~ msgstr "Command exited with status code " diff --git a/applications/luci-app-commands/po/es/commands.po b/applications/luci-app-commands/po/es/commands.po index 80524529b..b9029b904 100644 --- a/applications/luci-app-commands/po/es/commands.po +++ b/applications/luci-app-commands/po/es/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Descripción breve del comando a configurar" -msgid "Access command with" -msgstr "Acceder al comando con" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -41,6 +38,12 @@ msgstr "Recuperando datos..." msgid "Command" msgstr "Comando" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Falló" @@ -71,6 +74,9 @@ msgstr "Descripción" msgid "Download" msgstr "Descarga" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "¡Error al ejecutar el comando!" @@ -80,12 +86,21 @@ msgstr "Enlace" msgid "Loading" msgstr "Cargando" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Acceso público" msgid "Run" msgstr "Ejecutar" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -95,3 +110,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Esperando a que termine el comando..." + +#~ msgid "Access command with" +#~ msgstr "Acceder al comando con" diff --git a/applications/luci-app-commands/po/fr/commands.po b/applications/luci-app-commands/po/fr/commands.po index fac1aff9c..f348326a0 100644 --- a/applications/luci-app-commands/po/fr/commands.po +++ b/applications/luci-app-commands/po/fr/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Une courte description de la commande configurée" -msgid "Access command with" -msgstr "Accéder à la commande par" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -44,6 +41,12 @@ msgstr "Récupération des données ..." msgid "Command" msgstr "Commande" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Echec de la commande" @@ -74,6 +77,9 @@ msgstr "Description" msgid "Download" msgstr "Télécharger" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "Echec de l'exécution de la commande ! " @@ -83,12 +89,21 @@ msgstr "Lien" msgid "Loading" msgstr "Chargement" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Accès public" msgid "Run" msgstr "Exécuter" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -98,3 +113,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "En attente de la commande pour finir..." + +#~ msgid "Access command with" +#~ msgstr "Accéder à la commande par" diff --git a/applications/luci-app-commands/po/he/commands.po b/applications/luci-app-commands/po/he/commands.po index 0e9e65d26..48b18366f 100644 --- a/applications/luci-app-commands/po/he/commands.po +++ b/applications/luci-app-commands/po/he/commands.po @@ -11,9 +11,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -37,6 +34,12 @@ msgstr "" msgid "Command" msgstr "" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "" @@ -67,6 +70,9 @@ msgstr "" msgid "Download" msgstr "" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "" @@ -76,12 +82,21 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "" msgid "Run" msgstr "" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." diff --git a/applications/luci-app-commands/po/hu/commands.po b/applications/luci-app-commands/po/hu/commands.po index 5cd0ec743..a9c759b9a 100644 --- a/applications/luci-app-commands/po/hu/commands.po +++ b/applications/luci-app-commands/po/hu/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "A beállított parancs rövid szöveges leírása" -msgid "Access command with" -msgstr "Parancs hozzáférése" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -42,6 +39,12 @@ msgstr "Adatgyűjtés..." msgid "Command" msgstr "Paracs" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Parancs végrehajtás sikertelen" @@ -72,6 +75,9 @@ msgstr "Leírás" msgid "Download" msgstr "Letöltés" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "Parancs végrehajtása sikertelen!" @@ -81,12 +87,21 @@ msgstr "Link" msgid "Loading" msgstr "Betöltés" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Nyilvános hozzáférés" msgid "Run" msgstr "Futtatás" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -96,3 +111,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Várakozás a parancs befejezésére..." + +#~ msgid "Access command with" +#~ msgstr "Parancs hozzáférése" diff --git a/applications/luci-app-commands/po/it/commands.po b/applications/luci-app-commands/po/it/commands.po index c14b910fc..8155a07ef 100644 --- a/applications/luci-app-commands/po/it/commands.po +++ b/applications/luci-app-commands/po/it/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Una breve descrizione testuale del comando configurato" -msgid "Access command with" -msgstr "Accesso comando con" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -43,6 +40,12 @@ msgstr "Raccolta dei dati..." msgid "Command" msgstr "Comando" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Comando fallito" @@ -73,6 +76,9 @@ msgstr "Descrizione" msgid "Download" msgstr "Download" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "Impossibile eseguire il comando!" @@ -82,12 +88,21 @@ msgstr "Collegamento" msgid "Loading" msgstr "Caricamento" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Accesso Pubblico" msgid "Run" msgstr "Esegui" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -97,3 +112,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "In attesa del comando da completare..." + +#~ msgid "Access command with" +#~ msgstr "Accesso comando con" diff --git a/applications/luci-app-commands/po/ja/commands.po b/applications/luci-app-commands/po/ja/commands.po index 3b01a35cf..307951c9c 100644 --- a/applications/luci-app-commands/po/ja/commands.po +++ b/applications/luci-app-commands/po/ja/commands.po @@ -1,26 +1,24 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2013-10-05 17:15+0200\n" -"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2017-01-21 18:09+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language-Team: none\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"POT-Creation-Date: \n" msgid "A short textual description of the configured command" msgstr "設定したコマンドの簡単な説明文を記載します" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" -msgstr "" +msgstr "事前認証無しでのコマンドの実行と、結果出力のダウンロードを許可します。" msgid "Allow the user to provide additional command line arguments" msgstr "コマンドラインに対する引数の追記を許可するか設定します" @@ -40,6 +38,12 @@ msgstr "データ収集中です..." msgid "Command" msgstr "コマンド" +msgid "Command executed successfully." +msgstr "コマンドの実行に成功しました。" + +msgid "Command exited with status code" +msgstr "コマンドは次のステータス コードで終了しました:" + msgid "Command failed" msgstr "コマンド失敗" @@ -70,6 +74,9 @@ msgstr "説明" msgid "Download" msgstr "ダウンロード" +msgid "Download execution result" +msgstr "実行結果のダウンロード:" + msgid "Failed to execute command!" msgstr "コマンドの実行に失敗しました!" @@ -79,16 +86,30 @@ msgstr "リンク" msgid "Loading" msgstr "読み込み中" +msgid "Or display result" +msgstr "または結果の表示:" + msgid "Public access" msgstr "パブリック・アクセス" msgid "Run" msgstr "実行" +msgid "Standard Error" +msgstr "標準エラー" + +msgid "Standard Output" +msgstr "標準出力" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." -msgstr "このページでは、ウェブインターフェースから簡単にシェル・コマンドを実行することができます。" +msgstr "" +"このページでは、ウェブインターフェースから簡単にシェル・コマンドを実行するこ" +"とができます。" msgid "Waiting for command to complete..." msgstr "コマンド実行中です..." + +#~ msgid "Access command with" +#~ msgstr "コマンドへのアクセス" diff --git a/applications/luci-app-commands/po/ms/commands.po b/applications/luci-app-commands/po/ms/commands.po index 6fbb9834e..ad2f1518a 100644 --- a/applications/luci-app-commands/po/ms/commands.po +++ b/applications/luci-app-commands/po/ms/commands.po @@ -10,9 +10,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -36,6 +33,12 @@ msgstr "" msgid "Command" msgstr "" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "" @@ -66,6 +69,9 @@ msgstr "" msgid "Download" msgstr "" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "" @@ -75,12 +81,21 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "" msgid "Run" msgstr "" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." diff --git a/applications/luci-app-commands/po/no/commands.po b/applications/luci-app-commands/po/no/commands.po index 29b76e5a2..593c9764f 100644 --- a/applications/luci-app-commands/po/no/commands.po +++ b/applications/luci-app-commands/po/no/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "En kort tekstlig beskrivelse av den konfigurerte kommandoen" -msgid "Access command with" -msgstr "Åpne kommandoen med" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -42,6 +39,12 @@ msgstr "Henter data..." msgid "Command" msgstr "Kommando" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Kommando feilet" @@ -72,6 +75,9 @@ msgstr "Beskrivelse" msgid "Download" msgstr "Nedlasting" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "Kunne ikke utføre kommandoen!" @@ -81,12 +87,21 @@ msgstr "Link" msgid "Loading" msgstr "Laster" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Tilgjengelig for alle" msgid "Run" msgstr "Kjør" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -96,3 +111,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Venter på at kommandoen fullføres..." + +#~ msgid "Access command with" +#~ msgstr "Åpne kommandoen med" diff --git a/applications/luci-app-commands/po/pl/commands.po b/applications/luci-app-commands/po/pl/commands.po index 6f660ba12..7c62eb05c 100644 --- a/applications/luci-app-commands/po/pl/commands.po +++ b/applications/luci-app-commands/po/pl/commands.po @@ -15,9 +15,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Krótki opis konfigurowanej komendy" -msgid "Access command with" -msgstr "Dostęp do komendy przez" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -43,6 +40,12 @@ msgstr "Zbieram dane:" msgid "Command" msgstr "Komenda" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Zła komenda" @@ -73,6 +76,9 @@ msgstr "Opis" msgid "Download" msgstr "Download" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "Nie można wykonać komendy!" @@ -82,12 +88,21 @@ msgstr "Łącze" msgid "Loading" msgstr "Ładowanie" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Publiczny dostęp" msgid "Run" msgstr "Uruchom" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -97,3 +112,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Czekanie na wykonanie komendy..." + +#~ msgid "Access command with" +#~ msgstr "Dostęp do komendy przez" diff --git a/applications/luci-app-commands/po/pt-br/commands.po b/applications/luci-app-commands/po/pt-br/commands.po index 83c7bd5db..4d04bffbc 100644 --- a/applications/luci-app-commands/po/pt-br/commands.po +++ b/applications/luci-app-commands/po/pt-br/commands.po @@ -1,22 +1,20 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2014-03-15 22:02+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2017-02-20 17:39-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"POT-Creation-Date: \n" msgid "A short textual description of the configured command" msgstr "Uma pequena descrição textual do comando configurado" -msgid "Access command with" -msgstr "Acessar o comando com" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -42,6 +40,12 @@ msgstr "Adquirindo dados..." msgid "Command" msgstr "Comando" +msgid "Command executed successfully." +msgstr "O comando executou com sucesso." + +msgid "Command exited with status code" +msgstr "O comando encerrou com um estado de erro" + msgid "Command failed" msgstr "O comando falhou" @@ -72,6 +76,9 @@ msgstr "Descrição" msgid "Download" msgstr "Baixar" +msgid "Download execution result" +msgstr "Baixar os resultados da execução" + msgid "Failed to execute command!" msgstr "Falha ao executar comando!" @@ -81,12 +88,21 @@ msgstr "Endereço" msgid "Loading" msgstr "Carregando" +msgid "Or display result" +msgstr "Ou mostre o resultado" + msgid "Public access" msgstr "Acesso público" msgid "Run" msgstr "Executar" +msgid "Standard Error" +msgstr "Saída de Erro" + +msgid "Standard Output" +msgstr "Saída Padrão" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -96,3 +112,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Aguardando a conclusão do comando..." + +#~ msgid "Access command with" +#~ msgstr "Acessar o comando com" diff --git a/applications/luci-app-commands/po/pt/commands.po b/applications/luci-app-commands/po/pt/commands.po index a46b7d21b..b2ad0ae44 100644 --- a/applications/luci-app-commands/po/pt/commands.po +++ b/applications/luci-app-commands/po/pt/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Uma pequena descrição textual do comando configurado" -msgid "Access command with" -msgstr "Aceder ao comando com" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -43,6 +40,12 @@ msgstr "A obter dados..." msgid "Command" msgstr "Comando" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "O comando falhou" @@ -73,6 +76,9 @@ msgstr "Descrição" msgid "Download" msgstr "Descarregar" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "Falha ao executar comando!" @@ -82,12 +88,21 @@ msgstr "Link" msgid "Loading" msgstr "A carregar" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Acesso público" msgid "Run" msgstr "Executar" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -97,3 +112,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "A aguardar que o comando termine..." + +#~ msgid "Access command with" +#~ msgstr "Aceder ao comando com" diff --git a/applications/luci-app-commands/po/ro/commands.po b/applications/luci-app-commands/po/ro/commands.po index 05c4574b9..57d1f7bb2 100644 --- a/applications/luci-app-commands/po/ro/commands.po +++ b/applications/luci-app-commands/po/ro/commands.po @@ -15,9 +15,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "O scurta descriere textuala a comenzii configurate" -msgid "Access command with" -msgstr "Acces la comanda cu" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -43,6 +40,12 @@ msgstr "Colectare date..." msgid "Command" msgstr "Comandă" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Comandă eşuată" @@ -73,6 +76,9 @@ msgstr "Descriere" msgid "Download" msgstr "Descarca" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "S-a esuat executarea comenzii!!" @@ -82,12 +88,21 @@ msgstr "Link" msgid "Loading" msgstr "Se incarca" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Access public" msgid "Run" msgstr "Ruleaza" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -97,3 +112,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Astept finalizarea comenzii..." + +#~ msgid "Access command with" +#~ msgstr "Acces la comanda cu" diff --git a/applications/luci-app-commands/po/ru/commands.po b/applications/luci-app-commands/po/ru/commands.po index 6197231c1..0c035ab73 100644 --- a/applications/luci-app-commands/po/ru/commands.po +++ b/applications/luci-app-commands/po/ru/commands.po @@ -15,9 +15,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Короткое текстовое описание команды" -msgid "Access command with" -msgstr "Доступ к команде через" - #, fuzzy msgid "" "Allow executing the command and downloading its output without prior " @@ -46,6 +43,12 @@ msgstr "Сбор данных..." msgid "Command" msgstr "Команда" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Команда не выполнена" @@ -76,6 +79,9 @@ msgstr "Описание" msgid "Download" msgstr "Скачать" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "Ошибка выполнения команды!" @@ -85,12 +91,21 @@ msgstr "Ссылка" msgid "Loading" msgstr "Загрузка" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Публичный доступ" msgid "Run" msgstr "Запуск" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -100,3 +115,6 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "Ожидание завершения команды..." + +#~ msgid "Access command with" +#~ msgstr "Доступ к команде через" diff --git a/applications/luci-app-commands/po/sk/commands.po b/applications/luci-app-commands/po/sk/commands.po index 4133dfb2d..17bed402d 100644 --- a/applications/luci-app-commands/po/sk/commands.po +++ b/applications/luci-app-commands/po/sk/commands.po @@ -11,9 +11,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -37,6 +34,12 @@ msgstr "" msgid "Command" msgstr "" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "" @@ -67,6 +70,9 @@ msgstr "" msgid "Download" msgstr "" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "" @@ -76,12 +82,21 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "" msgid "Run" msgstr "" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." diff --git a/applications/luci-app-commands/po/sv/commands.po b/applications/luci-app-commands/po/sv/commands.po index 9fbe0afee..5a4c255e4 100644 --- a/applications/luci-app-commands/po/sv/commands.po +++ b/applications/luci-app-commands/po/sv/commands.po @@ -12,9 +12,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -38,6 +35,12 @@ msgstr "" msgid "Command" msgstr "" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "" @@ -68,6 +71,9 @@ msgstr "" msgid "Download" msgstr "" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "" @@ -77,12 +83,21 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "" msgid "Run" msgstr "" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." diff --git a/applications/luci-app-commands/po/templates/commands.pot b/applications/luci-app-commands/po/templates/commands.pot index 5d2ffae6d..31df11dc1 100644 --- a/applications/luci-app-commands/po/templates/commands.pot +++ b/applications/luci-app-commands/po/templates/commands.pot @@ -4,9 +4,6 @@ msgstr "Content-Type: text/plain; charset=UTF-8" msgid "A short textual description of the configured command" msgstr "" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -30,6 +27,12 @@ msgstr "" msgid "Command" msgstr "" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "" @@ -60,6 +63,9 @@ msgstr "" msgid "Download" msgstr "" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "" @@ -69,12 +75,21 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "" msgid "Run" msgstr "" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." diff --git a/applications/luci-app-commands/po/tr/commands.po b/applications/luci-app-commands/po/tr/commands.po index 413227402..587bc2b84 100644 --- a/applications/luci-app-commands/po/tr/commands.po +++ b/applications/luci-app-commands/po/tr/commands.po @@ -11,9 +11,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -37,6 +34,12 @@ msgstr "" msgid "Command" msgstr "" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "" @@ -67,6 +70,9 @@ msgstr "" msgid "Download" msgstr "" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "" @@ -76,12 +82,21 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "" msgid "Run" msgstr "" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." diff --git a/applications/luci-app-commands/po/uk/commands.po b/applications/luci-app-commands/po/uk/commands.po index 74a19f374..f72fc9354 100644 --- a/applications/luci-app-commands/po/uk/commands.po +++ b/applications/luci-app-commands/po/uk/commands.po @@ -16,9 +16,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "Короткий опис команд налаштування" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -43,6 +40,12 @@ msgstr "Збирання даних..." msgid "Command" msgstr "" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "Команда не виконана" @@ -74,6 +77,9 @@ msgstr "Опис" msgid "Download" msgstr "Завантажити" +msgid "Download execution result" +msgstr "" + #, fuzzy msgid "Failed to execute command!" msgstr "Помилка під час запуску команди!" @@ -84,12 +90,21 @@ msgstr "" msgid "Loading" msgstr "Триває завантаження" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "Відкритий доступ" msgid "Run" msgstr "Запустити" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + #, fuzzy msgid "" "This page allows you to configure custom shell commands which can be easily " diff --git a/applications/luci-app-commands/po/vi/commands.po b/applications/luci-app-commands/po/vi/commands.po index 413227402..587bc2b84 100644 --- a/applications/luci-app-commands/po/vi/commands.po +++ b/applications/luci-app-commands/po/vi/commands.po @@ -11,9 +11,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "" -msgid "Access command with" -msgstr "" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -37,6 +34,12 @@ msgstr "" msgid "Command" msgstr "" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "" @@ -67,6 +70,9 @@ msgstr "" msgid "Download" msgstr "" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "" @@ -76,12 +82,21 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "" msgid "Run" msgstr "" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." diff --git a/applications/luci-app-commands/po/zh-cn/commands.po b/applications/luci-app-commands/po/zh-cn/commands.po index 8b2b032b6..90f1dbed2 100644 --- a/applications/luci-app-commands/po/zh-cn/commands.po +++ b/applications/luci-app-commands/po/zh-cn/commands.po @@ -1,22 +1,20 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2013-10-08 15:47+0200\n" -"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2017-01-21 09:34+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language-Team: none\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"POT-Creation-Date: \n" msgid "A short textual description of the configured command" msgstr "简短描述命令用途" -msgid "Access command with" -msgstr "访问命令" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -40,6 +38,12 @@ msgstr "收集数据:" msgid "Command" msgstr "命令" +msgid "Command executed successfully." +msgstr "命令成功执行。" + +msgid "Command exited with status code" +msgstr "命令退出,状态码:" + msgid "Command failed" msgstr "执行命令失败" @@ -70,6 +74,9 @@ msgstr "描述" msgid "Download" msgstr "下载" +msgid "Download execution result" +msgstr "下载执行结果" + msgid "Failed to execute command!" msgstr "执行命令失败!" @@ -79,12 +86,21 @@ msgstr "连接" msgid "Loading" msgstr "加载中" +msgid "Or display result" +msgstr "显示执行结果" + msgid "Public access" msgstr "公共访问" msgid "Run" msgstr "运行" +msgid "Standard Error" +msgstr "标准错误流" + +msgid "Standard Output" +msgstr "标准输出流" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -92,3 +108,6 @@ msgstr "此页面允许您配置自定义Shell命令,并可以从Web界面调 msgid "Waiting for command to complete..." msgstr "等待命令执行完成... ..." + +#~ msgid "Command exited with status code " +#~ msgstr "命令退出,状态码:" diff --git a/applications/luci-app-commands/po/zh-tw/commands.po b/applications/luci-app-commands/po/zh-tw/commands.po index 4377ead46..f1f452518 100644 --- a/applications/luci-app-commands/po/zh-tw/commands.po +++ b/applications/luci-app-commands/po/zh-tw/commands.po @@ -14,9 +14,6 @@ msgstr "" msgid "A short textual description of the configured command" msgstr "以短文描述設定指令" -msgid "Access command with" -msgstr "存取指令" - msgid "" "Allow executing the command and downloading its output without prior " "authentication" @@ -40,6 +37,12 @@ msgstr "收集資料中..." msgid "Command" msgstr "指令" +msgid "Command executed successfully." +msgstr "" + +msgid "Command exited with status code" +msgstr "" + msgid "Command failed" msgstr "命令失敗" @@ -70,6 +73,9 @@ msgstr "描述" msgid "Download" msgstr "下載" +msgid "Download execution result" +msgstr "" + msgid "Failed to execute command!" msgstr "執行指令失敗!" @@ -79,12 +85,21 @@ msgstr "連結" msgid "Loading" msgstr "掛載" +msgid "Or display result" +msgstr "" + msgid "Public access" msgstr "公用存取" msgid "Run" msgstr "執行" +msgid "Standard Error" +msgstr "" + +msgid "Standard Output" +msgstr "" + msgid "" "This page allows you to configure custom shell commands which can be easily " "invoked from the web interface." @@ -92,3 +107,6 @@ msgstr "只要可以從web介輕易調用, 這頁面允許你自定shell指令." msgid "Waiting for command to complete..." msgstr "等待完整命令中..." + +#~ msgid "Access command with" +#~ msgstr "存取指令" diff --git a/applications/luci-app-wshaper/Makefile b/applications/luci-app-cshark/Makefile index 63e63aba2..40b0e9fb7 100644 --- a/applications/luci-app-wshaper/Makefile +++ b/applications/luci-app-cshark/Makefile @@ -1,13 +1,16 @@ # -# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org> +# Copyright (C) 2017 Dan Luedtke <mail@danrl.com> # # This is free software, licensed under the Apache License, Version 2.0 . # include $(TOPDIR)/rules.mk -LUCI_TITLE:=LuCI Support for wshaper -LUCI_DEPENDS:=+wshaper +LUCI_TITLE:=Cloudshark capture tool Web UI +LUCI_DEPENDS:=+cshark +LUCI_PKGARCH:=all + +PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org> include ../../luci.mk diff --git a/applications/luci-app-cshark/luasrc/controller/cshark.lua b/applications/luci-app-cshark/luasrc/controller/cshark.lua new file mode 100644 index 000000000..4d9bbba29 --- /dev/null +++ b/applications/luci-app-cshark/luasrc/controller/cshark.lua @@ -0,0 +1,125 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright (C) 2014, QA Cafe, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +]]-- + +module("luci.controller.cshark", package.seeall) + +function index() + page = node("admin", "network", "cloudshark") + page.target = cbi("admin_network/cshark") + page.title = _("CloudShark") + page.order = 70 + + page = entry({"admin", "network", "cshark_iface_dump_start"}, call("cshark_iface_dump_start"), nil) + page.leaf = true + + page = entry({"admin", "network", "cshark_iface_dump_stop"}, call("cshark_iface_dump_stop"), nil) + page.leaf = true + + page = entry({"admin", "network", "cshark_check_status"}, call("cshark_check_status"), nil) + page.leaf = true + + page = entry({"admin", "network", "cshark_link_list_get"}, call("cshark_link_list_get"), nil) + page.leaf = true + + page = entry({"admin", "network", "cshark_link_list_clear"}, call("cshark_link_list_clear"), nil) + page.leaf = true +end + +function cshark_iface_dump_start(ifname, value, flag, filter) + if ifname == nil or ifname == '' then + ifname = 'any' + end + if tonumber(value) == nil + then + value = '0' + end + if filter == nil or filter == '' then + filter = '' + end + + if flag == nil or flag == '' then + filter = 'T' + end + + luci.http.prepare_content("text/plain") + + local res = os.execute("(/sbin/cshark -i " .. ifname .. " -" .. flag .. " " .. value .. " -p /tmp/cshark-luci.pid " .. filter .. " > /tmp/cshark-luci.out 2>&1) &") + luci.http.write(tostring(res)) +end + +function cshark_iface_dump_stop() + luci.http.prepare_content("text/plain") + + local f = io.open("/tmp/cshark-luci.pid", "rb") + local pid = f:read("*all") + io.close(f) + + local res = os.execute("kill -TERM " .. pid) + luci.http.write(tostring(res)) +end + +function cshark_check_status() + + local msg = ""; + local status; + local f = io.open("/tmp/cshark-luci.pid","r") + if f ~= nil then + status = 1; + io.close(f) + else + status = 0; + end + + f = io.open("/tmp/cshark-luci.out","r") + if f ~= nil then + msg = f:read("*all") + io.close(f) + if msg ~= '' then + os.remove('/tmp/cshark-luci.out') + end + end + + luci.http.prepare_content("application/json") + + local res = {} + res["status"] = status; + res["msg"] = msg; + + luci.http.write_json(res) +end + +function cshark_link_list_get() + local uci = require("uci").cursor() + + luci.http.prepare_content("application/json") + + luci.http.write("[") + + local t = uci:get("cshark", "cshark", "entry") + if (t ~= nil) then + for i = #t, 1, -1 do + luci.http.write("[\"" .. t[i] .. "\"],") + end + end + + luci.http.write("[]]") +end + +function cshark_link_list_clear() + local uci = require("uci").cursor() + + uci:delete("cshark", "cshark", "entry") + uci:commit("cshark"); + + luci.http.status(200, "OK") +end diff --git a/applications/luci-app-cshark/luasrc/model/cbi/admin_network/cshark.lua b/applications/luci-app-cshark/luasrc/model/cbi/admin_network/cshark.lua new file mode 100644 index 000000000..8db95596f --- /dev/null +++ b/applications/luci-app-cshark/luasrc/model/cbi/admin_network/cshark.lua @@ -0,0 +1,30 @@ +--[[ +LuCI - Lua Configuration Interface + +Copyright (C) 2014, QA Cafe, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ +]]-- + +local fs = require "nixio.fs" + +m = Map("cshark", translate("CloudShark")) + +if fs.access("/etc/config/cshark") then + m:section(SimpleSection).template = "cshark" + + s = m:section(TypedSection, "cshark", translate("Options")) + s.anonymous = true + s.addremove = false + + s:option(Value, "url", translate("CloudShark URL")) + s:option(Value, "token", translate("CloudShark API token")) +end + +return m diff --git a/applications/luci-app-cshark/luasrc/view/cshark.htm b/applications/luci-app-cshark/luasrc/view/cshark.htm new file mode 100644 index 000000000..bc67f806c --- /dev/null +++ b/applications/luci-app-cshark/luasrc/view/cshark.htm @@ -0,0 +1,291 @@ +<%# +LuCI - Lua Configuration Interface + +Copyright (C) 2014, QA Cafe, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +-%> + +<fieldset class="cbi-section"> + <legend><%:Start network capture%></legend> + <div class="cbi-section-node"> + <table class="cbi-section-table"> + <tr> + <th><%:Interface%></th> + <th colspan='2'><%:seconds, packets, bytes%></th> + <th><%:Filter%></th> + <th><%:Actions%></th> + </tr> + <tr> + <td> + <select title="<%:Interface%>" style="width:auto" id="s_interfaces"> + <% + local nixio = require "nixio" + for k, v in ipairs(nixio.getifaddrs()) do + if v.family == "packet" then + %> + <option value="<%=v.name%>"><%=v.name%> </option> + <% + end + end + %> + <option value="any"><%:any%></option> + </select> + </td> + <td colspan='2'> + <input id="tx_value" type="text" value="0" /> + <select title="<%:timeout, bytes, seconds%>" id="s_value_type" style="width:auto"> + <option value="T"><%:seconds%></option> + <option value="P"><%:packets%></option> + <option value="S"><%:bytes%></option> + </select> + </td> + <td> + <input style="margin: 5px 0" type="text" title="<%:Filter%>" placeholder="filter" id="i_filter" /> + </td> + <td> + <input type="button" id="bt_action" data-action="start" value="<%:Start capture%>" class="cbi-button" /> + </td> + </tr> + </table> + </div> +</fieldset> + +<fieldset class="cbi-section"> + <span id="cshark-rc-output"></span> +</fieldset> + +<hr/> + +<fieldset class="cbi-section"> + <legend><%:Capture links%></legend> + <div class="cbi-section-node"> + <table id="t_link_list" class="cbi-section-table"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell"><%:Capture URL%></th> + <th class="cbi-section-table-cell"><%:Capture time%></th> + </tr> + </table> + </div> +</fieldset> + +<fieldset class="cbi-section"> + <a href="https://support.cloudshark.org/openwrt/openwrt-cloudshark.html" target="_blank">Visit support.cloudshark.org for help.</a> +</fieldset> + +<hr/> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + + var capture_running = 0; + var pid_file = 0; + var bt_action = document.getElementById('bt_action'); + var a_clear_links = document.getElementById('a_clear_links'); + var output = document.getElementById('cshark-rc-output'); + var loader = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> '; + var msg = { 'start' : '<%:Waiting for capture to complete...%>', 'stop' : '<%:Waiting for upload to complete...%>' }; + var status_msg = msg['start']; + + function get_date(timestamp) + { + function pad_str(str) + { + return (str < 10) ? "0" + str : str; + } + + var current_date = new Date(timestamp * 1000); + return current_date.getFullYear() + "-" + + pad_str(current_date.getMonth() + 1) + "-" + + pad_str(current_date.getDate()) + " " + + pad_str(current_date.getHours()) + ":" + + pad_str(current_date.getMinutes()) + ":" + + pad_str(current_date.getSeconds()); + } + + bt_action.onclick = function() + { + var action = this.getAttribute("data-action"); + var csxhr = new XHR(); + + if (action == "stop") + { + update_status(action); + + bt_action.disabled = true; + + csxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_iface_dump_stop', null, + function(x) + { + if (!x || x.responseText.trim() != "0") + { + update_status("failed", "Invalid response on stop."); + } + }); + + } + else if (action == "start") + { + + var s_interfaces = document.getElementById('s_interfaces'); + var s_value_type = document.getElementById('s_value_type'); + var i_filter = document.getElementById('i_filter'); + + var if_n = s_interfaces.selectedIndex; + var t_n = s_value_type.selectedIndex; + var ifname = s_interfaces.options[if_n].value.trim(); + var filter_val = i_filter.value.trim(); + var tx_val = document.getElementById('tx_value').value.trim(); + var type_val = s_value_type.options[t_n].value.trim(); + + if (type_val != 'P' && type_val != 'T' && type_val != 'S') type_val = 'T'; + + if (!ifname || !type_val) return; + + if (isNaN(tx_val)) return alert("<%:value for [seconds, packets, bytes] must be Integer%>"); + + update_status(action); + + csxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_iface_dump_start/' + ifname + '/' + tx_val + '/' + type_val + '/'+ filter_val, null, + function(x) + { + if (!x) + update_status("failed", "Invalid response on start."); + else + update_status("running"); + }); + } + } + + function update_status(status, message) + { + switch (status) + { + case 'start': + case 'stop': + status_msg = msg[status]; + output.innerHTML = loader + status_msg; + break + + case 'running': + if (capture_running) break;; + + output.innerHTML = loader + status_msg; + + bt_action.value = '<%:Stop capture%>'; + bt_action.setAttribute('data-action', 'stop'); + capture_running = 1; + break; + + case 'completed': + case 'failed': + if (!capture_running) break; + + if (status == "completed") + { + link_list_update(); + } + + output.innerHTML = "<pre>" + message + "</pre>"; + bt_action.value = '<%:Start capture%>'; + bt_action.setAttribute('data-action', 'start'); + bt_action.disabled = false; + capture_running = 0; + break; + } + } + + + function check_status() + { + + XHR.poll(3, '<%=luci.dispatcher.build_url("admin", "network")%>/cshark_check_status', null, + function(x, data) + { + if (!x) + { + if (capture_running) + update_status("failed", "Invalid response when fetching status."); + + return; + } + console.log(data) + + update_status( (data.status == 1) && "running" || "completed", data.msg); + }) + } + + function link_list_clear() + { + var csxhr_del = new XHR(); + csxhr_del.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_link_list_clear', null, + function(x) + { + if (!x) + return false; + + link_list_update(); + }); + } + + + function link_list_update() + { + var t_link = document.getElementById("t_link_list"); + if (!t_link) return; + + var row_count = t_link.rows.length; + while(--row_count) t_link.deleteRow(row_count); + + var cell = t_link.insertRow(-1).insertCell(0); + cell.colSpan = 2; + cell.innerHTML = loader; + + var csxhr_link = new XHR(); + csxhr_link.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_link_list_get', null, + function(x, entries) + { + var row = t_link.deleteRow(1); + + if (!x) return; + + if (!entries || !entries.length) + { + var cell = t_link.insertRow(-1).insertCell(0); + cell.colSpan = 2; + cell.innerHTML = '<em><br />There are no captures available yet.</em>'; + + return; + } + + for (var i = 0, len = entries.length; i < len ; i++) + { + var entry = entries[i][0]; + if (!entry) continue; + + var data = entry.split(","); + var url = data[0]; + var timestamp = data[1]; + + var row = t_link.insertRow(-1); + row.insertCell(0).innerHTML = '<a href="'+url+'" target="_blank">'+url+'</a>'; + row.insertCell(1).innerHTML = get_date(timestamp); + } + + var cell = t_link.insertRow(-1).insertCell(0); + cell.colSpan = 2; + cell.style.textAlign="center"; + cell.innerHTML = '<input type="button" onclick="link_list_clear()" class="cbi-button" value ="<%:Clear list%>" />'; + }) + } + + check_status(); + link_list_update(); +//]]></script> diff --git a/applications/luci-app-ddns/Makefile b/applications/luci-app-ddns/Makefile index 88c905a41..69f9880d4 100644 --- a/applications/luci-app-ddns/Makefile +++ b/applications/luci-app-ddns/Makefile @@ -2,7 +2,7 @@ # Copyright 2008 Steven Barth <steven@midlink.org> # Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> # Copyright 2013 Manuel Munz <freifunk at somakoma dot de> -# Copyright 2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> +# Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> # # This is free software, licensed under the Apache License, Version 2.0 @@ -16,7 +16,7 @@ PKG_VERSION:=2.4.8 # Release == build # increase on changes of translation files -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_LICENSE:=Apache-2.0 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com> diff --git a/applications/luci-app-ddns/luasrc/controller/ddns.lua b/applications/luci-app-ddns/luasrc/controller/ddns.lua index 63bb8bf4b..1dfa62554 100755 --- a/applications/luci-app-ddns/luasrc/controller/ddns.lua +++ b/applications/luci-app-ddns/luasrc/controller/ddns.lua @@ -1,7 +1,7 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> -- Copyright 2013 Manuel Munz <freifunk at somakoma dot de> --- Copyright 2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> +-- Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Licensed to the public under the Apache License 2.0. module("luci.controller.ddns", package.seeall) @@ -24,7 +24,7 @@ local srv_ver_min = "2.7.6" -- minimum version of service required local srv_ver_cmd = luci_helper .. [[ -V | awk {'print $2'}]] local app_name = "luci-app-ddns" local app_title = "Dynamic DNS" -local app_version = "2.4.8-1" +local app_version = "2.4.8-2" function index() local nxfs = require "nixio.fs" -- global definitions not available @@ -180,12 +180,10 @@ local function _get_status() end -- get/set monitored interface and IP version - local iface = s["interface"] or "_nonet_" + local iface = s["interface"] or "wan" local use_ipv6 = tonumber(s["use_ipv6"]) or 0 - if iface ~= "_nonet_" then - local ipv = (use_ipv6 == 1) and "IPv6" or "IPv4" - iface = ipv .. " / " .. iface - end + local ipv = (use_ipv6 == 1) and "IPv6" or "IPv4" + iface = ipv .. " / " .. iface -- try to get registered IP local lookup_host = s["lookup_host"] or "_nolookup_" diff --git a/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm b/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm index 0bcfd4428..b69d780ea 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm @@ -14,6 +14,7 @@ c = c + 1 %> <input class="cbi-input-radio" onclick="cbi_d_update(this.id)" onchange="cbi_d_update(this.id)" type="radio"<%= attr("id", cbid..c) .. attr("name", cbid) .. attr("value", key) .. ifattr((self:cfgvalue(section) or self.default) == key, "checked", "checked") %> /> + <label<%= attr("for", cbid..c) %>></label> <label<%= attr("for", cbid..c) %>><%=self.vallist[i]%></label> <% if c == self.size then c = 0 %><% if self.orientation == "horizontal" then %> <% else %><br /><% end %> <% end end %> diff --git a/applications/luci-app-ddns/luasrc/view/ddns/overview_enabled.htm b/applications/luci-app-ddns/luasrc/view/ddns/overview_enabled.htm index 64b3dae45..2efc125fc 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/overview_enabled.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/overview_enabled.htm @@ -10,6 +10,7 @@ attr("id", cbid) .. attr("name", cbid) .. attr("value", self.enabled or 1) .. ifattr((self:cfgvalue(section) or self.default) == self.enabled, "checked", "checked") %> /> +<label<%= attr("for", cbid)%>></label> <%+cbi/valuefooter%> <!-- ++ END ++ Dynamic DNS ++ overview_enabled.htm ++ --> diff --git a/applications/luci-app-ddns/po/pt-br/ddns.po b/applications/luci-app-ddns/po/pt-br/ddns.po index 497084651..ab22837b2 100644 --- a/applications/luci-app-ddns/po/pt-br/ddns.po +++ b/applications/luci-app-ddns/po/pt-br/ddns.po @@ -2,15 +2,15 @@ msgid "" msgstr "" "Project-Id-Version: luci-app-ddns 2.4.0-1\n" "POT-Creation-Date: 2016-01-30 11:07+0100\n" -"PO-Revision-Date: 2016-07-01 22:40-0300\n" -"Last-Translator: Matheus Dal Mago <matheusdalmago10@gmail.com>\n" +"PO-Revision-Date: 2017-02-20 17:41-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language-Team: \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 1.8.8\n" +"X-Generator: Poedit 1.8.11\n" msgid "&" msgstr "&" @@ -228,7 +228,7 @@ msgid "Error Retry Interval" msgstr "Intervalo de tentativas em Erro" msgid "Event Network" -msgstr "" +msgstr "Rede de Evento" msgid "File" msgstr "Arquivo" @@ -438,16 +438,16 @@ msgid "No certificates found" msgstr "Nenhum certificado encontrado" msgid "No data" -msgstr "" +msgstr "Sem dados" msgid "No logging" -msgstr "" +msgstr "Sem registros" msgid "Non-public and by default blocked IP's" msgstr "IPs não públicos e bloqueados por padrão" msgid "Notice" -msgstr "" +msgstr "Aviso" msgid "Number of last lines stored in log files" msgstr "Número das últimas linhas salvas nos arquivos de log" @@ -475,7 +475,7 @@ msgstr "" "Em Erro, o script irá para a execução após um número definido de tentativas" msgid "OpenWrt Wiki" -msgstr "" +msgstr "Wiki do OpenWRT" msgid "Optional Encoded Parameter" msgstr "Parâmetro Opcionalmente Codificado" @@ -490,7 +490,7 @@ msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" msgstr "Opcional: Substitui [PARAMOPT] na URL de atualização" msgid "Overview" -msgstr "" +msgstr "Visão Geral" msgid "PROXY-Server" msgstr "servidor PROXY" @@ -575,7 +575,7 @@ msgid "There is no service configured." msgstr "Não há serviço configurado" msgid "Timer Settings" -msgstr "" +msgstr "Configurações do Controlador de Tempo" msgid "To change global settings click here" msgstr "Clique aqui para mudar configurações globais" diff --git a/applications/luci-app-diag-devinfo/Makefile b/applications/luci-app-diag-devinfo/Makefile index 0424fffa0..1505b6212 100644 --- a/applications/luci-app-diag-devinfo/Makefile +++ b/applications/luci-app-diag-devinfo/Makefile @@ -9,6 +9,10 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Diagnostics Tools (Device Info) LUCI_DEPENDS:=+luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo @BROKEN +define Package/luci-app-diag-devinfo/conffiles +/etc/config/luci_devinfo +endef + include ../../luci.mk # call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-dynapoint/Makefile b/applications/luci-app-dynapoint/Makefile new file mode 100644 index 000000000..83512dba5 --- /dev/null +++ b/applications/luci-app-dynapoint/Makefile @@ -0,0 +1,17 @@ +# +# Copyright (C) 2016 The LuCI Team <luci@lists.subsignal.org> +# +# This is free software, licensed under the GNU General Public License v3. +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for DynaPoint +LUCI_DEPENDS:=+dynapoint + +PKG_LICENSE:=GPL-3.0+ +PKG_MAINTAINER:=Tobias Ilte <tobias.ilte@campus.tu-berlin.de> +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/applications/luci-app-dynapoint/luasrc/controller/dynapoint.lua b/applications/luci-app-dynapoint/luasrc/controller/dynapoint.lua new file mode 100644 index 000000000..65348632e --- /dev/null +++ b/applications/luci-app-dynapoint/luasrc/controller/dynapoint.lua @@ -0,0 +1,9 @@ +module("luci.controller.dynapoint", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/dynapoint") then + return + end + entry({"admin", "services", "dynapoint"}, cbi("dynapoint"), _("DynaPoint")) +end + diff --git a/applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua b/applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua new file mode 100644 index 000000000..e6871a5bc --- /dev/null +++ b/applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua @@ -0,0 +1,99 @@ +local uci = require "luci.model.uci".cursor() +local a = require "luci.model.ipkg" +local DISP = require "luci.dispatcher" + +local wlcursor = luci.model.uci.cursor_state() +local wireless = wlcursor:get_all("wireless") +local ifaces = {} + +for k, v in pairs(wireless) do + if v[".type"] == "wifi-iface" then + table.insert(ifaces, v) + end +end + +m = Map("dynapoint") +m:chain("wireless") + +s = m:section(NamedSection, "internet", "rule", translate("Configuration"), translate("Check Internet connectivity via HTTP header download")) + +hosts = s:option(DynamicList, "hosts", translate("List of host addresses"), translate("List of host addresses (url or IP) to track and request http headers from")) +hosts.datatype = "string" + +interval = s:option(Value, "interval", translate("Test-run interval"), translate("Time interval in seconds to re-start a new test run")) +interval.datatype = "uinteger" +interval.default = "30" + +offline_treshold = s:option(Value, "offline_threshold", translate("Switch_to_offline threshold"), translate("Failure counter after how many failed download attempts, the state is considered as offline")) +offline_treshold.datatype = "uinteger" +offline_treshold.default = "1" + +add_hostname_to_ssid = s:option(Flag, "add_hostname_to_ssid", translate("Append hostname to ssid"), translate("Append the router's hostname to the SSID when connectivity check fails")) +add_hostname_to_ssid.rmempty = false + + +if (a.installed("curl") == true) then + use_curl = s:option(Flag, "use_curl", translate("Use curl"), translate("Use curl instead of wget for testing the connectivity.")) + use_curl.rmempty = false + + curl_interface = s:option(Value, "curl_interface", translate("Used interface"), translate("Which interface should curl use. (Use ifconfig to find out)")) + curl_interface.datatype = "string" + curl_interface:depends("use_curl","1") + curl_interface.placeholder = "eth0" +else + use_curl = s:option(Flag, "use_curl", translate("Use curl instead of wget"), translate("Curl is currently not installed.") + .." Please install the package in the " + ..[[<a href="]] .. DISP.build_url("admin", "system", "packages") + .. "?display=available&query=curl"..[[">]] + .. "Software Section" .. [[</a>]] + .. "." + ) + use_curl.rmempty = false + use_curl.template = "dynapoint/cbi_checkbox" +end + +m1 = Map("wireless", "DynaPoint", translate("Dynamic Access Point Manager")) + +aps = m1:section(TypedSection, "wifi-iface", translate("List of Wireless Virtual Interfaces (wVIF)")) +aps.addremove = false +aps.anonymous = true +aps.template = "cbi/tblsection" + +status = aps:option(DummyValue, "disabled", translate("WiFi Status")) +status.template = "dynapoint/cbi_color" + +function status.cfgvalue(self,section) + local val = m1:get(section, "disabled") + if val == "1" then return translate("Disabled") end + if (val == nil or val == "0") then return translate("Enabled") end + return val +end + +device = aps:option(DummyValue, "device", translate("Device")) +function device.cfgvalue(self,section) + local dev = m1:get(section, "device") + local val = m1:get(dev, "hwmode") + if val == "11a" then return dev .. " (5 GHz)" else + return dev .. " (2,4 GHz)" + end + return val +end + + + + + +mode = aps:option(DummyValue, "mode", translate("Mode")) + +ssid = aps:option(DummyValue, "ssid", translate("SSID")) + + +action = aps:option(ListValue, "dynapoint_rule", translate("Activate this wVIF if status is:")) +action.widget="select" +action:value("internet",translate("Online")) +action:value("!internet",translate("Offline")) +action:value("",translate("Not used by DynaPoint")) +action.default = "" + +return m1,m + diff --git a/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_checkbox.htm b/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_checkbox.htm new file mode 100644 index 000000000..5f8bcd5ee --- /dev/null +++ b/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_checkbox.htm @@ -0,0 +1,6 @@ +<%+cbi/valueheader%> + +<input class="cbi-input-checkbox" disabled data-update="click change" type="checkbox" id="cbid.dynapoint.internet.use_curl" name="cbid.dynapoint.internet.use_curl" value="1" /> + + +<%+cbi/valuefooter%> diff --git a/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_color.htm b/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_color.htm new file mode 100644 index 000000000..bfc710e23 --- /dev/null +++ b/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_color.htm @@ -0,0 +1,18 @@ +<%+cbi/valueheader%> + + +<% +if (self:cfgvalue(section) == translate("Disabled")) then +%> + +<span id="<%=cbid%>.disabled" style="background-color:red;"><%=self:cfgvalue(section)%></span> + +<% +else +%> +<span id="<%=cbid%>.disabled" style="background-color:lime;"><%=self:cfgvalue(section)%></span> +<% +end +%> + +<%+cbi/valuefooter%> diff --git a/applications/luci-app-dynapoint/po/de/dynapoint.po b/applications/luci-app-dynapoint/po/de/dynapoint.po new file mode 100644 index 000000000..e2507e493 --- /dev/null +++ b/applications/luci-app-dynapoint/po/de/dynapoint.po @@ -0,0 +1,106 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2016-08-31 15:51+0200\n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Activate this wVIF if status is:" +msgstr "Aktiviere diese drahtlose Schnittstelle wenn:" + +msgid "Append hostname to ssid" +msgstr "Anfügen des hostname zur SSID" + +msgid "Append the router's hostname to the SSID when connectivity check fails" +msgstr "" +"Fügt den hostname des routers zur SSID an, wenn die Verbindungsüberprüfung " +"fehl schlägt" + +msgid "Check Internet connectivity via HTTP header download" +msgstr "Testen der Internetverfügbarkeit via HTTP header download" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "Curl is currently not installed." +msgstr "Curl ist momentan nicht installiert." + +msgid "Device" +msgstr "Gerät" + +msgid "Disabled" +msgstr "Deaktiviert" + +msgid "DynaPoint" +msgstr "" + +msgid "Dynamic Access Point Manager" +msgstr "" + +msgid "Enabled" +msgstr "Aktiviert" + +msgid "" +"Failure counter after how many failed download attempts, the state is " +"considered as offline" +msgstr "" +"Anzahl der fehlgeschlagenen Downloadversuche, nach denen die Verbindung als offline angesehen wird" + +msgid "List of Wireless Virtual Interfaces (wVIF)" +msgstr "Liste der Drahtlosen virtuellen Schnittstellen" + +msgid "List of host addresses" +msgstr "Liste der Zieladressen" + +msgid "" +"List of host addresses (url or IP) to track and request http headers from" +msgstr "Liste der Zieladressen (URL oder IP) für den HTTP header download" + +msgid "Mode" +msgstr "Modus" + +msgid "Not used by DynaPoint" +msgstr "Nicht von DynaPoint benutzt" + +msgid "Offline" +msgstr "Offline" + +msgid "Online" +msgstr "Online" + +msgid "SSID" +msgstr "" + +msgid "Switch_to_offline threshold" +msgstr "Offline-Schwelle" + +msgid "Test-run interval" +msgstr "Testlaufintervall" + +msgid "Time interval in seconds to re-start a new test run" +msgstr "Zeitintervall in Sekunden für einen Testlauf" + +msgid "Use curl" +msgstr "Curl benutzen" + +msgid "Use curl instead of wget" +msgstr "Curl anstatt wget benutzen" + +msgid "Use curl instead of wget for testing the connectivity." +msgstr "Curl anstatt wget benutzen, um die Internetverbindung zu überprüfen." + +msgid "Used interface" +msgstr "Benutztes interface" + +msgid "Which interface should curl use. (Use ifconfig to find out)" +msgstr "" +"Welches Interface von curl benutzt werden soll. (ifconfig benutzen, um das " +"herauszufinden" + +msgid "WiFi Status" +msgstr "" + diff --git a/applications/luci-app-dynapoint/po/ja/dynapoint.po b/applications/luci-app-dynapoint/po/ja/dynapoint.po new file mode 100644 index 000000000..75031985f --- /dev/null +++ b/applications/luci-app-dynapoint/po/ja/dynapoint.po @@ -0,0 +1,108 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ja\n" + +msgid "Activate this wVIF if status is:" +msgstr "wVIFを有効化する接続ステータス:" + +msgid "Append hostname to ssid" +msgstr "ホスト名をSSIDに追加する" + +msgid "Append the router's hostname to the SSID when connectivity check fails" +msgstr "接続性のチェックが失敗した場合、ルーターのホスト名をSSIDに追加します。" + +msgid "Check Internet connectivity via HTTP header download" +msgstr "" +"HTTP ヘッダーのダウンロードを通して、インターネットの接続性をチェックします。" + +msgid "Configuration" +msgstr "設定" + +msgid "Curl is currently not installed." +msgstr "curl は現在インストールされていません。" + +msgid "Device" +msgstr "デバイス" + +msgid "Disabled" +msgstr "無効" + +msgid "DynaPoint" +msgstr "DynaPoint" + +msgid "Dynamic Access Point Manager" +msgstr "ダイナミック アクセスポイント マネージャー" + +msgid "Enabled" +msgstr "有効" + +msgid "" +"Failure counter after how many failed download attempts, the state is " +"considered as offline" +msgstr "状態をオフラインと見なすまでの、ダウンロード試行の失敗回数です。" + +msgid "List of Wireless Virtual Interfaces (wVIF)" +msgstr "無線仮想インターフェース (wVIF) のリスト" + +msgid "List of host addresses" +msgstr "ホストアドレスのリスト" + +msgid "" +"List of host addresses (url or IP) to track and request http headers from" +msgstr "" +"HTTP ヘッダーの追跡およびリクエストを行う、ホスト アドレス(URLまたはIP)のリ" +"ストです。" + +msgid "Mode" +msgstr "モード" + +msgid "Not used by DynaPoint" +msgstr "DynaPointで使用しない" + +msgid "Offline" +msgstr "オフライン" + +msgid "Online" +msgstr "オンライン" + +msgid "SSID" +msgstr "SSID" + +msgid "Switch_to_offline threshold" +msgstr "オフライン化閾値" + +msgid "Test-run interval" +msgstr "テスト実行間隔" + +msgid "Time interval in seconds to re-start a new test run" +msgstr "接続性テストを再実行するまでの時間間隔(秒)です。" + +msgid "Use curl" +msgstr "curl を使用する" + +msgid "Use curl instead of wget" +msgstr "wget の代わりに curl を使用する" + +msgid "Use curl instead of wget for testing the connectivity." +msgstr "接続性のテストの際、wget の代わりに curl を使用します。" + +msgid "Used interface" +msgstr "使用するインターフェース" + +msgid "Which interface should curl use. (Use ifconfig to find out)" +msgstr "" +"curl が使用するインターフェースです。ifconfigを使用してインターフェース名を確" +"認します。" + +msgid "WiFi Status" +msgstr "無線ステータス" diff --git a/applications/luci-app-dynapoint/po/pt-br/dynapoint.po b/applications/luci-app-dynapoint/po/pt-br/dynapoint.po new file mode 100644 index 000000000..59b02629a --- /dev/null +++ b/applications/luci-app-dynapoint/po/pt-br/dynapoint.po @@ -0,0 +1,107 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Activate this wVIF if status is:" +msgstr "Aivar este wVIF se o estado for:" + +msgid "Append hostname to ssid" +msgstr "Sufixar o nome do equipamento ao SSID" + +msgid "Append the router's hostname to the SSID when connectivity check fails" +msgstr "" +"Sufixar o nome do roteador ao SSID quando a verificação da conectividade " +"falhar" + +msgid "Check Internet connectivity via HTTP header download" +msgstr "Cerifique a conectividade com a internet baixando o cabeçalho HTTP " + +msgid "Configuration" +msgstr "Configuração" + +msgid "Curl is currently not installed." +msgstr "O cURL não está instalado." + +msgid "Device" +msgstr "Dispositivo" + +msgid "Disabled" +msgstr "Desabilitado" + +msgid "DynaPoint" +msgstr "DynaPoint" + +msgid "Dynamic Access Point Manager" +msgstr "Gerenciamento do Ponto de Acesso Dinâmico" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "" +"Failure counter after how many failed download attempts, the state is " +"considered as offline" +msgstr "Numero de falhar para considerar como inalcançável" + +msgid "List of Wireless Virtual Interfaces (wVIF)" +msgstr "Lista de Interfaces Virtuais Wireless (wVIF)" + +msgid "List of host addresses" +msgstr "Lista de endereços dos equipamentos" + +msgid "" +"List of host addresses (url or IP) to track and request http headers from" +msgstr "" +"Lista de endereços dos equipamentos (URL ou endereço IP) para requisitar " +"cabeçalhos HTTP" + +msgid "Mode" +msgstr "Modo" + +msgid "Not used by DynaPoint" +msgstr "Não usado pelo DynaPoint" + +msgid "Offline" +msgstr "Desconectado" + +msgid "Online" +msgstr "Conectado" + +msgid "SSID" +msgstr "SSID" + +msgid "Switch_to_offline threshold" +msgstr "Limiar para mudar para desconectado" + +msgid "Test-run interval" +msgstr "Intervalo para execução do teste" + +msgid "Time interval in seconds to re-start a new test run" +msgstr "Intervalo, em segundos, para reiniciar um nova execução do teste" + +msgid "Use curl" +msgstr "Usar cURL" + +msgid "Use curl instead of wget" +msgstr "Usar cURL ao invés do wget" + +msgid "Use curl instead of wget for testing the connectivity." +msgstr "Usar cURL ao invés do wget para testar a conectividade." + +msgid "Used interface" +msgstr "Dispositivos usadas" + +msgid "Which interface should curl use. (Use ifconfig to find out)" +msgstr "Qual dispositivo o cURL deve usar. (Use ifconfig para listá-las)" + +msgid "WiFi Status" +msgstr "Estado da WiFi" diff --git a/applications/luci-app-dynapoint/po/templates/dynapoint.pot b/applications/luci-app-dynapoint/po/templates/dynapoint.pot new file mode 100644 index 000000000..f352425be --- /dev/null +++ b/applications/luci-app-dynapoint/po/templates/dynapoint.pot @@ -0,0 +1,92 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Activate this wVIF if status is:" +msgstr "" + +msgid "Append hostname to ssid" +msgstr "" + +msgid "Append the router's hostname to the SSID when connectivity check fails" +msgstr "" + +msgid "Check Internet connectivity via HTTP header download" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Curl is currently not installed." +msgstr "" + +msgid "Device" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "DynaPoint" +msgstr "" + +msgid "Dynamic Access Point Manager" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Failure counter after how many failed download attempts, the state is " +"considered as offline" +msgstr "" + +msgid "List of Wireless Virtual Interfaces (wVIF)" +msgstr "" + +msgid "List of host addresses" +msgstr "" + +msgid "" +"List of host addresses (url or IP) to track and request http headers from" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Not used by DynaPoint" +msgstr "" + +msgid "Offline" +msgstr "" + +msgid "Online" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "Switch_to_offline threshold" +msgstr "" + +msgid "Test-run interval" +msgstr "" + +msgid "Time interval in seconds to re-start a new test run" +msgstr "" + +msgid "Use curl" +msgstr "" + +msgid "Use curl instead of wget" +msgstr "" + +msgid "Use curl instead of wget for testing the connectivity." +msgstr "" + +msgid "Used interface" +msgstr "" + +msgid "Which interface should curl use. (Use ifconfig to find out)" +msgstr "" + +msgid "WiFi Status" +msgstr "" diff --git a/applications/luci-app-dynapoint/root/etc/uci-defaults/40_luci-dynapoint b/applications/luci-app-dynapoint/root/etc/uci-defaults/40_luci-dynapoint new file mode 100644 index 000000000..7287ccd42 --- /dev/null +++ b/applications/luci-app-dynapoint/root/etc/uci-defaults/40_luci-dynapoint @@ -0,0 +1,13 @@ +#!/bin/sh + +# needed for "Save and Apply" to restart dynapoint +uci -q batch <<-EOF >/dev/null + delete ucitrack.@dynapoint[-1] + add ucitrack dynapoint + set ucitrack.@dynapoint[-1].init="dynapoint" + commit dynapoint +EOF + +rm -f /tmp/luci-indexcache +exit 0 + diff --git a/applications/luci-app-e2guardian/Makefile b/applications/luci-app-e2guardian/Makefile new file mode 100644 index 000000000..c3ac02988 --- /dev/null +++ b/applications/luci-app-e2guardian/Makefile @@ -0,0 +1,18 @@ +# +# Copyright (C) 2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=E2Guardian LuCI Interface +LUCI_DEPENDS:=+luci-mod-admin-full +e2guardian + +PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-e2guardian/luasrc/controller/e2guardian.lua b/applications/luci-app-e2guardian/luasrc/controller/e2guardian.lua new file mode 100644 index 000000000..dd545f50b --- /dev/null +++ b/applications/luci-app-e2guardian/luasrc/controller/e2guardian.lua @@ -0,0 +1,22 @@ +--[[ + +LuCI E2Guardian module + +Copyright (C) 2015, Itus Networks, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + Luka Perkov <luka.perkov@sartura.hr> + +]]-- + +module("luci.controller.e2guardian", package.seeall) + +function index() + entry({"admin", "services", "e2guardian"}, cbi("e2guardian"), _("E2Guardian")) +end diff --git a/applications/luci-app-e2guardian/luasrc/model/cbi/e2guardian.lua b/applications/luci-app-e2guardian/luasrc/model/cbi/e2guardian.lua new file mode 100644 index 000000000..b62132108 --- /dev/null +++ b/applications/luci-app-e2guardian/luasrc/model/cbi/e2guardian.lua @@ -0,0 +1,399 @@ +--[[ + +LuCI E2Guardian module + +Copyright (C) 2015, Itus Networks, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + Luka Perkov <luka.perkov@sartura.hr> + +]]-- + +local fs = require "nixio.fs" +local sys = require "luci.sys" + +m = Map("e2guardian", translate("E2Guardian")) +m.on_after_commit = function() luci.sys.call("/etc/init.d/e2guardian restart") end + +s = m:section(TypedSection, "e2guardian") +s.anonymous = true +s.addremove = false + +s:tab("tab_general", translate("General Settings")) +s:tab("tab_additional", translate("Additional Settings")) +s:tab("tab_logs", translate("Logs")) + + +----------------- General Settings Tab ----------------------- + +filterip = s:taboption("tab_general", Value, "filterip", translate("IP that E2Guardian listens")) +filterip.datatype = "ip4addr" + +filterports = s:taboption("tab_general", Value, "filterports", translate("Port that E2Guardian listens")) +filterports.datatype = "portrange" +filterports.placeholder = "0-65535" + +proxyip = s:taboption("tab_general", Value, "proxyip", translate("IP address of the proxy")) +proxyip.datatype = "ip4addr" +proxyip.default = "127.0.0.1" + +proxyport = s:taboption("tab_general", Value, "proxyport", translate("Port of the proxy")) +proxyport.datatype = "portrange" +proxyport.placeholder = "0-65535" + +languagedir = s:taboption("tab_general", Value, "languagedir", translate("Language dir")) +languagedir.datatype = "string" +languagedir.default = "/usr/share/e2guardian/languages" + +language = s:taboption("tab_general", Value, "language", translate("Language to use")) +language.datatype = "string" +language.default = "ukenglish" + +loglevel = s:taboption("tab_general", ListValue, "loglevel", translate("Logging Settings")) +loglevel:value("0", translate("none")) +loglevel:value("1", translate("just denied")) +loglevel:value("2", translate("all text based")) +loglevel:value("3", translate("all requests")) +loglevel.default = "2" + +logexceptionhits = s:taboption("tab_general", ListValue, "logexceptionhits", translate("Log Exception Hits")) +logexceptionhits:value("0", translate("never")) +logexceptionhits:value("1", translate("log, but don't mark as exceptions")) +logexceptionhits:value("2", translate("log and mark")) +logexceptionhits.default = "2" + +logfileformat = s:taboption("tab_general", ListValue, "logfileformat", translate("Log File Format")) +logfileformat:value("1", translate("DansgGuardian format, space delimited")) +logfileformat:value("2", translate("CSV-style format")) +logfileformat:value("3", translate("Squid Log File Format")) +logfileformat:value("4", translate("Tab delimited")) +logfileformat:value("5", translate("Protex format")) +logfileformat:value("6", translate("Protex format with server field blanked")) +logfileformat.default = "1" + +accessdeniedaddress = s:taboption("tab_general", Value, "accessdeniedaddress", translate("Access denied address"), +translate("Server to which the cgi e2guardian reporting script was copied. Reporting levels 1 and 2 only")) +accessdeniedaddress.datatype = "string" +accessdeniedaddress.default = "http://YOURSERVER.YOURDOMAIN/cgi-bin/e2guardian.pl" + +usecustombannedimage = s:taboption("tab_general", ListValue, "usecustombannedimage", translate("Banned image replacement")) +usecustombannedimage:value("on", translate("Yes")) +usecustombannedimage:value("off", translate("No")) +usecustombannedimage.default = "on" + +custombannedimagefile = s:taboption("tab_general", Value, "custombannedimagefile", translate("Custom banned image file")) +custombannedimagefile.datatype = "string" +custombannedimagefile.default = "/usr/share/e2guardian/transparent1x1.gif" + +usecustombannedflash = s:taboption("tab_general", ListValue, "usecustombannedflash", translate("Banned flash replacement")) +usecustombannedflash:value("on", translate("Yes")) +usecustombannedflash:value("off", translate("No")) +usecustombannedflash.default = "on" + +custombannedflashfile = s:taboption("tab_general", Value, "custombannedflashfile", translate("Custom banned flash file")) +custombannedflashfile.datatype = "string" +custombannedflashfile.default = "/usr/share/e2guardian/blockedflash.swf" + +filtergroups = s:taboption("tab_general", Value, "filtergroups", translate("Number of filter groups")) +filtergroups.datatype = "and(uinteger,min(1))" +filtergroups.default = "1" + +filtergroupslist = s:taboption("tab_general", Value, "filtergroupslist", translate("List of filter groups")) +filtergroupslist.datatype = "string" +filtergroupslist.default = "/etc/e2guardian/lists/filtergroupslist" + +bannediplist = s:taboption("tab_general", Value, "bannediplist", translate("List of banned IPs")) +bannediplist.datatype = "string" +bannediplist.default = "/etc/e2guardian/lists/bannediplist" + +exceptioniplist = s:taboption("tab_general", Value, "exceptioniplist", translate("List of IP exceptions")) +exceptioniplist.datatype = "string" +exceptioniplist.default = "/etc/e2guardian/lists/exceptioniplist" + +perroomblockingdirectory = s:taboption("tab_general", Value, "perroomblockingdirectory", translate("Per-Room blocking definition directory")) +perroomblockingdirectory.datatype = "string" +perroomblockingdirectory.default = "/etc/e2guardian/lists/bannedrooms/" + +showweightedfound = s:taboption("tab_general", ListValue, "showweightedfound", translate("Show weighted phrases found")) +showweightedfound:value("on", translate("Yes")) +showweightedfound:value("off", translate("No")) +showweightedfound.default = "on" + +weightedphrasemode = s:taboption("tab_general", ListValue, "weightedphrasemode", translate("Weighted phrase mode")) +weightedphrasemode:value("0", translate("off")) +weightedphrasemode:value("1", translate("on, normal operation")) +weightedphrasemode:value("2", translate("on, phrase found only counts once on a page")) +weightedphrasemode.default = "2" + +urlcachenumber = s:taboption("tab_general", Value, "urlcachenumber", translate("Clean result caching for URLs")) +urlcachenumber.datatype = "and(uinteger,min(0))" +urlcachenumber.default = "1000" + +urlcacheage = s:taboption("tab_general", Value, "urlcacheage", translate("Age before they should be ignored in seconds")) +urlcacheage.datatype = "and(uinteger,min(0))" +urlcacheage.default = "900" + +scancleancache = s:taboption("tab_general", ListValue, "scancleancache", translate("Cache for content (AV) scans as 'clean'")) +scancleancache:value("on", translate("Yes")) +scancleancache:value("off", translate("No")) +scancleancache.default = "on" + +phrasefiltermode = s:taboption("tab_general", ListValue, "phrasefiltermode", translate("Filtering options")) +phrasefiltermode:value("0", translate("raw")) +phrasefiltermode:value("1", translate("smart")) +phrasefiltermode:value("2", translate("both raw and smart")) +phrasefiltermode:value("3", translate("meta/title")) +phrasefiltermode.default = "2" + +preservecase = s:taboption("tab_general", ListValue, "perservecase", translate("Lower caseing options")) +preservecase:value("0", translate("force lower case")) +preservecase:value("1", translate("don't change")) +preservecase:value("2", translate("scan fist in lower, then in original")) +preservecase.default = "0" + +hexdecodecontent = s:taboption("tab_general", ListValue, "hexdecodecontent", translate("Hex decoding options")) +hexdecodecontent:value("on", translate("Yes")) +hexdecodecontent:value("off", translate("No")) +hexdecodecontent.default = "off" + +forcequicksearch = s:taboption("tab_general", ListValue, "forcequicksearch", translate("Quick search")) +forcequicksearch:value("on", translate("Yes")) +forcequicksearch:value("off", translate("No")) +forcequicksearch.default = "off" + +reverseaddresslookups= s:taboption("tab_general", ListValue, "reverseaddresslookups", translate("Reverse lookups for banned site and URLs")) +reverseaddresslookups:value("on", translate("Yes")) +reverseaddresslookups:value("off", translate("No")) +reverseaddresslookups.default = "off" + +reverseclientiplookups = s:taboption("tab_general", ListValue, "reverseclientiplookups", translate("Reverse lookups for banned and exception IP lists")) +reverseclientiplookups:value("on", translate("Yes")) +reverseclientiplookups:value("off", translate("No")) +reverseclientiplookups.default = "off" + +logclienthostnames = s:taboption("tab_general", ListValue, "logclienthostnames", translate("Perform reverse lookups on client IPs for successful requests")) +logclienthostnames:value("on", translate("Yes")) +logclienthostnames:value("off", translate("No")) +logclienthostnames.default = "off" + +createlistcachefiles = s:taboption("tab_general", ListValue, "createlistcachefiles", translate("Build bannedsitelist and bannedurllist cache files")) +createlistcachefiles:value("on",translate("Yes")) +createlistcachefiles:value("off",translate("No")) +createlistcachefiles.default = "on" + +prefercachedlists = s:taboption("tab_general", ListValue, "prefercachedlists", translate("Prefer cached list files")) +prefercachedlists:value("on", translate("Yes")) +prefercachedlists:value("off", translate("No")) +prefercachedlists.default = "off" + +maxuploadsize = s:taboption("tab_general", Value, "maxuploadsize", translate("Max upload size (in Kbytes)")) +maxuploadsize:value("-1", translate("no blocking")) +maxuploadsize:value("0", translate("complete block")) +maxuploadsize.default = "-1" + +maxcontentfiltersize = s:taboption("tab_general", Value, "maxcontentfiltersize", translate("Max content filter size"), +translate("The value must not be higher than max content ram cache scan size or 0 to match it")) +maxcontentfiltersize.datatype = "and(uinteger,min(0))" +maxcontentfiltersize.default = "256" + +maxcontentramcachescansize = s:taboption("tab_general", Value, "maxcontentramcachescansize", translate("Max content ram cache scan size"), +translate("This is the max size of file that DG will download and cache in RAM")) +maxcontentramcachescansize.datatype = "and(uinteger,min(0))" +maxcontentramcachescansize.default = "2000" + +maxcontentfilecachescansize = s:taboption("tab_general", Value, "maxcontentfilecachescansize", translate("Max content file cache scan size")) +maxcontentfilecachescansize.datatype = "and(uinteger,min(0))" +maxcontentfilecachescansize.default = "20000" + +proxytimeout = s:taboption("tab_general", Value, "proxytimeout", translate("Proxy timeout (5-100)")) +proxytimeout.datatype = "range(5,100)" +proxytimeout.default = "20" + +proxyexchange = s:taboption("tab_general", Value, "proxyexchange", translate("Proxy header excahnge (20-300)")) +proxyexchange.datatype = "range(20,300)" +proxyexchange.default = "20" + +pcontimeout = s:taboption("tab_general", Value, "pcontimeout", translate("Pconn timeout"), +translate("How long a persistent connection will wait for other requests")) +pcontimeout.datatype = "range(5,300)" +pcontimeout.default = "55" + +filecachedir = s:taboption("tab_general", Value, "filecachedir", translate("File cache directory")) +filecachedir.datatype = "string" +filecachedir.default = "/tmp" + +deletedownloadedtempfiles = s:taboption("tab_general", ListValue, "deletedownloadedtempfiles", translate("Delete file cache after user completes download")) +deletedownloadedtempfiles:value("on", translate("Yes")) +deletedownloadedtempfiles:value("off", translate("No")) +deletedownloadedtempfiles.default = "on" + +initialtrickledelay = s:taboption("tab_general", Value, "initialtrickledelay", translate("Initial Trickle delay"), +translate("Number of seconds a browser connection is left waiting before first being sent *something* to keep it alive")) +initialtrickledelay.datatype = "and(uinteger,min(0))" +initialtrickledelay.default = "20" + +trickledelay = s:taboption("tab_general", Value, "trickledelay", translate("Trickle delay"), +translate("Number of seconds a browser connection is left waiting before being sent more *something* to keep it alive")) +trickledelay.datatype = "and(uinteger,min(0))" +trickledelay.default = "10" + +downloadmanager = s:taboption("tab_general", Value, "downloadmanager", translate("Download manager")) +downloadmanager.datatype = "string" +downloadmanager.default = "/etc/e2guardian/downloadmanagers/default.conf" + +contentscannertimeout = s:taboption("tab_general", Value, "contentscannertimeout", translate("Content scanner timeout")) +contentscannertimeout.datatype = "and(uinteger,min(0))" +contentscannertimeout.default = "60" + +contentscanexceptions = s:taboption("tab_general", ListValue, "contentscanexceptions", translate("Content scan exceptions")) +contentscanexceptions:value("on", translate("Yes")) +contentscanexceptions:value("off", translate("No")) +contentscanexceptions.default = "off" + +recheckreplacedurls = s:taboption("tab_general", ListValue, "recheckreplacedurls", translate("e-check replaced URLs")) +recheckreplacedurls:value("on", translate("Yes")) +recheckreplacedurls:value("off", translate("No")) +recheckreplacedurls.default = "off" + +forwardedfor = s:taboption("tab_general", ListValue, "forwardedfor", translate("Misc setting: forwardedfor"), +translate("If on, it may help solve some problem sites that need to know the source ip.")) +forwardedfor:value("on", translate("Yes")) +forwardedfor:value("off", translate("No")) +forwardedfor.default = "off" + +usexforwardedfor = s:taboption("tab_general", ListValue, "usexforwardedfor", translate("Misc setting: usexforwardedfor"), +translate("This is for when you have squid between the clients and E2Guardian")) +usexforwardedfor:value("on", translate("Yes")) +usexforwardedfor:value("off", translate("No")) +usexforwardedfor.default = "off" + +logconnectionhandlingerrors = s:taboption("tab_general", ListValue, "logconnectionhandlingerrors", translate("Log debug info about log()ing and accept()ing")) +logconnectionhandlingerrors:value("on", translate("Yes")) +logconnectionhandlingerrors:value("off", translate("No")) +logconnectionhandlingerrors.default = "on" + +logchildprocesshandling = s:taboption("tab_general", ListValue, "logchildprocesshandling", translate("Log child process handling")) +logchildprocesshandling:value("on", translate("Yes")) +logchildprocesshandling:value("off", translate("No")) +logchildprocesshandling.default = "off" + +maxchildren = s:taboption("tab_general", Value, "maxchildren", translate("Max number of processes to spawn")) +maxchildren.datatype = "and(uinteger,min(0))" +maxchildren.default = "180" + +minchildren = s:taboption("tab_general", Value, "minchildren", translate("Min number of processes to spawn")) +minchildren.datatype = "and(uinteger,min(0))" +minchildren.default = "20" + +minsparechildren = s:taboption("tab_general", Value, "minsparechildren", translate("Min number of processes to keep ready")) +minsparechildren.datatype = "and(uinteger,min(0))" +minsparechildren.default = "16" + +preforkchildren = s:taboption("tab_general", Value, "preforkchildren", translate("Sets minimum nuber of processes when it runs out")) +preforkchildren.datatype = "and(uinteger,min(0))" +preforkchildren.default = "10" + +maxsparechildren = s:taboption("tab_general", Value, "maxsparechildren", translate("Sets the maximum number of processes to have doing nothing")) +maxsparechildren.datatype = "and(uinteger,min(0))" +maxsparechildren.default = "32" + +maxagechildren = s:taboption("tab_general", Value, "maxagechildren", translate("Max age of child process")) +maxagechildren.datatype = "and(uinteger,min(0))" +maxagechildren.default = "500" + +maxips = s:taboption("tab_general", Value, "maxips", translate("Max number of clinets allowed to connect")) +maxips:value("0", translate("no limit")) +maxips.default = "0" + +ipipcfilename = s:taboption("tab_general", Value, "ipipcfilename", translate("IP list IPC server directory and filename")) +ipipcfilename.datatype = "string" +ipipcfilename.default = "/tmp/.dguardianipc" + +urlipcfilename = s:taboption("tab_general", Value, "urlipcfilename", translate("Defines URL list IPC server directory and filename used to communicate with the URL cache process")) +urlipcfilename.datatype = "string" +urlipcfilename.default = "/tmp/.dguardianurlipc" + +ipcfilename = s:taboption("tab_general", Value, "ipcfilename", translate("Defines URL list IPC server directory and filename used to communicate with the URL cache process")) +ipcfilename.datatype = "string" +ipcfilename.default = "/tmp/.dguardianipipc" + +nodeamon = s:taboption("tab_general", ListValue, "nodeamon", translate("Disable deamoning")) +nodeamon:value("on", translate("Yes")) +nodeamon:value("off", translate("No")) +nodeamon.default = "off" + +nologger = s:taboption("tab_general", ListValue, "nologger", translate("Disable logger")) +nologger:value("on", translate("Yes")) +nologger:value("off", translate("No")) +nologger.default = "off" + +logadblock = s:taboption("tab_general", ListValue, "logadblock", translate("Enable logging of ADs")) +logadblock:value("on", translate("Yes")) +logadblock:value("off", translate("No")) +logadblock.default = "off" + +loguseragent = s:taboption("tab_general", ListValue, "loguseragent", translate("Enable logging of client user agent")) +loguseragent:value("on", translate("Yes")) +loguseragent:value("off", translate("No")) +loguseragent.default = "off" + +softrestart = s:taboption("tab_general", ListValue, "softrestart", translate("Enable soft restart")) +softrestart:value("on", translate("Yes")) +softrestart:value("off", translate("No")) +softrestart.default = "off" + + +------------------------ Additional Settings Tab ---------------------------- + +e2guardian_config_file = s:taboption("tab_additional", TextValue, "_data", "") +e2guardian_config_file.wrap = "off" +e2guardian_config_file.rows = 25 +e2guardian_config_file.rmempty = false + +function e2guardian_config_file.cfgvalue() + local uci = require "luci.model.uci".cursor_state() + file = "/etc/e2guardian/e2guardianf1.conf" + if file then + return fs.readfile(file) or "" + else + return "" + end +end + +function e2guardian_config_file.write(self, section, value) + if value then + local uci = require "luci.model.uci".cursor_state() + file = "/etc/e2guardian/e2guardianf1.conf" + fs.writefile(file, value:gsub("\r\n", "\n")) + end +end + + +---------------------------- Logs Tab ----------------------------- + +e2guardian_logfile = s:taboption("tab_logs", TextValue, "lines", "") +e2guardian_logfile.wrap = "off" +e2guardian_logfile.rows = 25 +e2guardian_logfile.rmempty = true + +function e2guardian_logfile.cfgvalue() + local uci = require "luci.model.uci".cursor_state() + file = "/tmp/e2guardian/access.log" + if file then + return fs.readfile(file) or "" + else + return "Can't read log file" + end +end + +function e2guardian_logfile.write() + return "" +end + +return m diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua index 968ac3624..2b3cee328 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua @@ -22,6 +22,10 @@ end function o.write(self, section, value) value = value:gsub("\r\n?", "\n") fs.writefile("/etc/firewall.user", value) + require("luci.sys").call("/etc/init.d/firewall restart >/dev/null 2<&1") + require("nixio").syslog('info', 'Restarting firewall on custom /etc/firewall.user change') end +f.submit = translate("Restart Firewall") + return f 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 22f1c7716..17a49483d 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 @@ -73,7 +73,7 @@ o = s:option(Value, "src_ip", translate("Source IP address"), translate("Only match incoming traffic from this IP or range.")) o.rmempty = true -o.datatype = "neg(ip4addr)" +o.datatype = "neg(ipmask4)" o.placeholder = translate("any") luci.sys.net.ipv4_hints(function(ip, name) @@ -99,7 +99,7 @@ end) o.rmempty = true -o.datatype = "neg(ip4addr)" +o.datatype = "neg(ipmask4)" o.placeholder = translate("any") @@ -119,7 +119,7 @@ o.template = "cbi/firewall_zonelist" o = s:option(Value, "dest_ip", translate("Internal IP address"), translate("Redirect matched incoming traffic to the specified \ internal host")) -o.datatype = "ip4addr" +o.datatype = "ipmask4" luci.sys.net.ipv4_hints(function(ip, name) o:value(ip, "%s (%s)" %{ ip, name }) 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 97e93ae05..1c838888f 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 @@ -99,7 +99,7 @@ elseif rule_type == "redirect" then o = s:option(Value, "src_ip", translate("Source IP address")) o.rmempty = true - o.datatype = "neg(ipaddr)" + o.datatype = "neg(ipmask4)" o.placeholder = translate("any") luci.sys.net.ipv4_hints(function(ip, name) @@ -123,7 +123,7 @@ elseif rule_type == "redirect" then o = s:option(Value, "dest_ip", translate("Destination IP address")) - o.datatype = "neg(ip4addr)" + o.datatype = "neg(ipmask4)" luci.sys.net.ipv4_hints(function(ip, name) o:value(ip, "%s (%s)" %{ ip, name }) @@ -269,7 +269,7 @@ else o = s:option(Value, "src_ip", translate("Source address")) - o.datatype = "neg(ipaddr)" + o.datatype = "neg(ipmask)" o.placeholder = translate("any") luci.sys.net.ipv4_hints(function(ip, name) @@ -290,7 +290,7 @@ else o = s:option(Value, "dest_ip", translate("Destination address")) - o.datatype = "neg(ipaddr)" + o.datatype = "neg(ipmask)" o.placeholder = translate("any") luci.sys.net.ipv4_hints(function(ip, name) diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua index c8b8f22bd..500d1bf32 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua @@ -126,7 +126,7 @@ msrc = s:taboption("advanced", DynamicList, "masq_src", translate("Restrict Masquerading to given source subnets")) msrc.optional = true -msrc.datatype = "list(neg(or(uciname,hostname,ip4addr)))" +msrc.datatype = "list(neg(or(uciname,hostname,ipmask4)))" msrc.placeholder = "0.0.0.0/0" msrc:depends("family", "") msrc:depends("family", "ipv4") @@ -135,7 +135,7 @@ mdest = s:taboption("advanced", DynamicList, "masq_dest", translate("Restrict Masquerading to given destination subnets")) mdest.optional = true -mdest.datatype = "list(neg(or(uciname,hostname,ip4addr)))" +mdest.datatype = "list(neg(or(uciname,hostname,ipmask4)))" mdest.placeholder = "0.0.0.0/0" mdest:depends("family", "") mdest:depends("family", "ipv4") 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 694bbd872..500e5078f 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua @@ -19,7 +19,6 @@ s.addremove = false s:option(Flag, "syn_flood", translate("Enable SYN-flood protection")) o = s:option(Flag, "drop_invalid", translate("Drop invalid packets")) -o.default = o.enabled p = { s:option(ListValue, "input", translate("Input")), diff --git a/applications/luci-app-firewall/po/ca/firewall.po b/applications/luci-app-firewall/po/ca/firewall.po index 5d62f0265..913fb759e 100644 --- a/applications/luci-app-firewall/po/ca/firewall.po +++ b/applications/luci-app-firewall/po/ca/firewall.po @@ -295,6 +295,9 @@ msgstr "Redirigeix trànsit entrant coincidit al port donat en el host intern" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Redirigeix trànsit entrant coincidit al host intern especificat" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "Restringeix la mascarada a les subxarxes de destí donades" diff --git a/applications/luci-app-firewall/po/cs/firewall.po b/applications/luci-app-firewall/po/cs/firewall.po index 2d4b251d3..1ab1360f5 100644 --- a/applications/luci-app-firewall/po/cs/firewall.po +++ b/applications/luci-app-firewall/po/cs/firewall.po @@ -292,6 +292,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Přesměrovat vybraný příchozí provoz na uvedeného vnitřního hostitele." +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "Omezit maškarádování na uvedené cílové podsítě" diff --git a/applications/luci-app-firewall/po/de/firewall.po b/applications/luci-app-firewall/po/de/firewall.po index c9237d7d4..448f951fa 100644 --- a/applications/luci-app-firewall/po/de/firewall.po +++ b/applications/luci-app-firewall/po/de/firewall.po @@ -292,6 +292,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Gefilterte Verbindungen an den angegeben internen Host weiterleiten" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "NAT auf die angegebenen Ziel-Subnetze beschränken" diff --git a/applications/luci-app-firewall/po/el/firewall.po b/applications/luci-app-firewall/po/el/firewall.po index f54e3d617..2229bf09f 100644 --- a/applications/luci-app-firewall/po/el/firewall.po +++ b/applications/luci-app-firewall/po/el/firewall.po @@ -285,6 +285,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/en/firewall.po b/applications/luci-app-firewall/po/en/firewall.po index 6e3b9eb5e..9dc277dbe 100644 --- a/applications/luci-app-firewall/po/en/firewall.po +++ b/applications/luci-app-firewall/po/en/firewall.po @@ -285,6 +285,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Redirect matched incoming traffic to the specified internal host" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/es/firewall.po b/applications/luci-app-firewall/po/es/firewall.po index 4a3e18226..670b4db6f 100644 --- a/applications/luci-app-firewall/po/es/firewall.po +++ b/applications/luci-app-firewall/po/es/firewall.po @@ -294,6 +294,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Redirigir el tráfico de entrada que coincida a la máquina interna" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "Restringir enmascaramiento a las subredes destino" diff --git a/applications/luci-app-firewall/po/fr/firewall.po b/applications/luci-app-firewall/po/fr/firewall.po index 6d3111a28..cdff28296 100644 --- a/applications/luci-app-firewall/po/fr/firewall.po +++ b/applications/luci-app-firewall/po/fr/firewall.po @@ -290,6 +290,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Rediriger le trafic entrant correspondant vers l'hôte interne spécifié" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" "Restreindre la substitution d'adresses (Masquerade) à ces sous-réseaux " diff --git a/applications/luci-app-firewall/po/he/firewall.po b/applications/luci-app-firewall/po/he/firewall.po index 54316ad11..ce0ad0405 100644 --- a/applications/luci-app-firewall/po/he/firewall.po +++ b/applications/luci-app-firewall/po/he/firewall.po @@ -275,6 +275,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/hu/firewall.po b/applications/luci-app-firewall/po/hu/firewall.po index 78c4b2693..c201e3da8 100644 --- a/applications/luci-app-firewall/po/hu/firewall.po +++ b/applications/luci-app-firewall/po/hu/firewall.po @@ -296,6 +296,9 @@ msgstr "Átirányítja az egyező bejövő forgalmat a belső gép megadott port msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Átirányítja az egyező bejövő forgalmat a megadott belső géphez" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "Álcázás korlátozása a megadott cél alhálózatokra" diff --git a/applications/luci-app-firewall/po/it/firewall.po b/applications/luci-app-firewall/po/it/firewall.po index 064f63d50..88535243b 100644 --- a/applications/luci-app-firewall/po/it/firewall.po +++ b/applications/luci-app-firewall/po/it/firewall.po @@ -272,8 +272,10 @@ msgstr "" msgid "" "Port forwarding allows remote computers on the Internet to connect to a " "specific computer or service within the private LAN." -msgstr "L'inoltro delle porte permette ai computer in remoto su Internet di" -"connettersi a uno specifico computer o servizio presente nella tua LAN privata" +msgstr "" +"L'inoltro delle porte permette ai computer in remoto su Internet " +"diconnettersi a uno specifico computer o servizio presente nella tua LAN " +"privata" msgid "Protocol" msgstr "Protocollo" @@ -285,6 +287,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" @@ -380,8 +385,9 @@ msgstr "" msgid "" "The firewall creates zones over your network interfaces to control network " "traffic flow." -msgstr "Il firewall crea delle zone nelle tue interfacce di rete per controllare" -"il flusso del traffico." +msgstr "" +"Il firewall crea delle zone nelle tue interfacce di rete per controllareil " +"flusso del traffico." msgid "" "The options below control the forwarding policies between this zone (%s) and " diff --git a/applications/luci-app-firewall/po/ja/firewall.po b/applications/luci-app-firewall/po/ja/firewall.po index 4e88189eb..0e8d71c6b 100644 --- a/applications/luci-app-firewall/po/ja/firewall.po +++ b/applications/luci-app-firewall/po/ja/firewall.po @@ -1,26 +1,26 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-30 17:00+0200\n" -"PO-Revision-Date: 2012-11-14 17:32+0200\n" -"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2016-12-24 02:55+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "%s in %s" -msgstr "" +msgstr "%s (%s)" msgid "%s%s with %s" msgstr "%s%s ,%s" msgid "%s, %s in %s" -msgstr "" +msgstr "%s, %s (%s)" msgid "(Unnamed Entry)" msgstr "(名前設定の無いエントリー)" @@ -142,10 +142,10 @@ msgid "Forward" msgstr "転送" msgid "Forward to" -msgstr "" +msgstr "転送先" msgid "Friday" -msgstr "" +msgstr "金曜日" msgid "From %s in %s" msgstr "送信元 %s (%s)" @@ -199,7 +199,7 @@ msgid "Masquerading" msgstr "マスカレード" msgid "Match" -msgstr "" +msgstr "対象" msgid "Match ICMP type" msgstr "ICMPタイプの一致" @@ -224,10 +224,10 @@ msgstr "" "フィックと一致したトラフィックが対象になります。" msgid "Monday" -msgstr "" +msgstr "月曜日" msgid "Month Days" -msgstr "" +msgstr "月間" msgid "Name" msgstr "名前" @@ -301,6 +301,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "ルールに一致した受信トラフィックを、設定された内部ホストへ転送します" +msgid "Restart Firewall" +msgstr "ファイアウォールの再起動" + msgid "Restrict Masquerading to given destination subnets" msgstr "設定された宛先サブネットへのマスカレードを制限する" @@ -334,7 +337,7 @@ msgid "SNAT port" msgstr "SNAT ポート" msgid "Saturday" -msgstr "" +msgstr "土曜日" # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # @@ -394,19 +397,19 @@ msgid "Source zone" msgstr "送信元ゾーン" msgid "Start Date (yyyy-mm-dd)" -msgstr "" +msgstr "開始日 (yyyy-mm-dd)" msgid "Start Time (hh:mm:ss)" -msgstr "" +msgstr "開始時刻 (hh:mm:ss)" msgid "Stop Date (yyyy-mm-dd)" -msgstr "" +msgstr "停止日 (yyyy-mm-dd)" msgid "Stop Time (hh:mm:ss)" -msgstr "" +msgstr "停止時刻 (hh:mm:ss)" msgid "Sunday" -msgstr "" +msgstr "日曜日" msgid "" "The firewall creates zones over your network interfaces to control network " @@ -444,7 +447,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 " @@ -459,10 +461,10 @@ msgstr "" "のゾーンに属するかを設定します。" 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>)" @@ -495,19 +497,19 @@ msgstr "" "設定することができます。" msgid "Tuesday" -msgstr "" +msgstr "火曜日" msgid "Via %s" -msgstr "" +msgstr "経由 %s" msgid "Via %s at %s" -msgstr "" +msgstr "経由 %s , %s" msgid "Wednesday" -msgstr "" +msgstr "水曜日" msgid "Week Days" -msgstr "" +msgstr "曜日" msgid "" "You may specify multiple by selecting \"-- custom --\" and then entering " @@ -550,4 +552,4 @@ msgid "reject" msgstr "拒否" msgid "traffic" -msgstr "" +msgstr "トラフィック" diff --git a/applications/luci-app-firewall/po/ko/firewall.po b/applications/luci-app-firewall/po/ko/firewall.po new file mode 100644 index 000000000..f43fdc882 --- /dev/null +++ b/applications/luci-app-firewall/po/ko/firewall.po @@ -0,0 +1,505 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2012-11-14 17:32+0200\n" +"Last-Translator: Weongyo Jeong <weongyo@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "%s%s ,%s" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "<var>%d</var> pkts. per <var>%s</var>" +msgstr "" + +msgid "<var>%d</var> pkts. per <var>%s</var>, burst <var>%d</var> pkts." +msgstr "" + +msgid "<var>%s</var> and limit to %s" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "추가 후 수정..." + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from <em>source zones</em>:" +msgstr "<em>Source zone</em> 로부터의 forward 허용:" + +msgid "Allow forward to <em>destination zones</em>:" +msgstr "<em>Destination zone</em> 으로 forward 허용:" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "Custom Rule" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Custom rule 은 방화벽 UI 로 해결이 되지 않는 임의의 iptables 명령을 실행할 " +"수 있도록 합니다. 입력된 명령어들은 매 방화벽 재시작시 실행되는데 default " +"ruleset 이 load 된 후 시점입니다." + +msgid "Destination IP address" +msgstr "Destination IP 주소" + +msgid "Destination address" +msgstr "Destination 주소" + +msgid "Destination port" +msgstr "" + +msgid "Destination zone" +msgstr "" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "" + +msgid "Enable" +msgstr "활성화" + +msgid "Enable NAT Loopback" +msgstr "NAT Loopback 활성화" + +msgid "Enable SYN-flood protection" +msgstr "SYN-flood protection 활성화" + +msgid "Enable logging on this zone" +msgstr "zone 의 logging 활성화" + +msgid "External IP address" +msgstr "외부 IP 주소" + +msgid "External port" +msgstr "외부 port" + +msgid "External zone" +msgstr "외부 zone" + +msgid "Extra arguments" +msgstr "추가 argument" + +msgid "Firewall" +msgstr "방화벽" + +msgid "Firewall - Custom Rules" +msgstr "방화벽 - Custom Rules" + +msgid "Firewall - Port Forwards" +msgstr "방화벽 - Port Forwards" + +msgid "Firewall - Traffic Rules" +msgstr "방화벽 - Traffic Rules" + +msgid "Firewall - Zone Settings" +msgstr "방화벽 - Zone 설정" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "금요일" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "내부 IP 주소" + +msgid "Internal port" +msgstr "내부 port" + +msgid "Internal zone" +msgstr "내부 zone" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +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 " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "월요일" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "이름" + +msgid "New SNAT rule" +msgstr "새로운 SNAT rule" + +msgid "New forward rule" +msgstr "새로운 forward rule" + +msgid "New input rule" +msgstr "새로운 input rule" + +msgid "New port forward" +msgstr "새로운 port forward" + +msgid "New source NAT" +msgstr "새로운 source NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "iptables 명령에 추가 인자들을 더합니다. 조심해 사용하세요!" + +msgid "Port Forwards" +msgstr "Port Forward" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"Port forwarding 기능은 인터넷 상의 원격 컴퓨터가 내부 LAN 에 속한 특정 컴퓨터" +"나 서비스에 접속할 수 있도록 합니다." + +msgid "Protocol" +msgstr "" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "주어진 destination subnet 으로 Masquerading 제한" + +msgid "Restrict Masquerading to given source subnets" +msgstr "주어진 source subnet 으로 Masquerading 제한" + +msgid "Restrict to address family" +msgstr "Address family 제한" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "토요일" + +msgid "Source IP address" +msgstr "Source IP 주소" + +msgid "Source MAC address" +msgstr "Source MAC 주소" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"Source NAT 기능은 masquerading 의 한 형태로써 outgoing 트래픽이 사용할 " +"source IP 를 세밀하게 제어할 수 있습니다. 예를 들어 다수의 WAN 주소들을 내" +"부 subnet 에 매핑(mapping) 할 경우 사용됩니다." + +msgid "Source address" +msgstr "Source 주소" + +msgid "Source port" +msgstr "" + +msgid "Source zone" +msgstr "" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "시작 날짜 (yyyy-mm-dd)" + +msgid "Start Time (hh:mm:ss)" +msgstr "시작 시간 (hh:mm:ss)" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "종료 날짜 (yyyy-mm-dd)" + +msgid "Stop Time (hh:mm:ss)" +msgstr "종료 시간 (hh:mm:ss)" + +msgid "Sunday" +msgstr "일요일" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"방화벽 기능을 이용하여 네트워크 인터페이스와 연결된 zone 을 생성할 수 있고 이" +"를 이용하여 네트워크 traffic flow 를 제어할 수 있습니다." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. <em>Destination zones</em> cover forwarded traffic " +"<strong>originating from %q</strong>. <em>Source zones</em> match forwarded " +"traffic from other zones <strong>targeted at %q</strong>. The forwarding " +"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 "" +"이 zone (%s) 과 다른 zone 들 사이의 forwarding 정책을 제어하는 옵션들입니다. " +"<em>Destination zones</em> 은 <strong>%q 에서 출발한 </strong> forward " +"traffic 을 뜻하고, <em>Source zones</em> 은 다른 zone 들에서 <strong>%q 로 전" +"달되는</strong> forward traffic 을 뜻합니다. Forwarding rule 은 " +"<em>unidirectional</em> 인데, 예를 들어 LAN 에서 WAN 으로의 forward 규칙이 " +"WAN 에서 LAN 으로의 forward 를 허락하는 것이 아닙니다." + +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 "" +"이 메뉴에서는 port forwarding 의 고급 설정 정보를 변경할 수 있습니다. 대부분" +"의 경우 이 설정을 수정할 일이 없습니다." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"이 메뉴에서는 traffic rule 항목의 고급 설정, 예를 들어 source host 와 " +"destination host 매칭, 을 변경할 수 있습니다." + +#, 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 " +"leaving this zone while the <em>forward</em> option describes the policy for " +"forwarded traffic between different networks within the zone. <em>Covered " +"networks</em> specifies which available networks are members of this zone." +msgstr "" +"이 섹션은 %q 의 공통 속성을 설정할 수 있습니다. <em>input</em> 과 " +"<em>output</em> 옵션은 이 zone 으로 전달되어 들오거나 나가는 트래픽에 대한 기" +"본 정책을 뜻합니다. <em>forward</em> 옵션은 zone 내에서 다른 네트워크들 사이" +"를 오가는 forward traffic 에 대한 정책을 뜻합니다. <em>Covered networks</em> " +"에서는 zone 의 영향을 받을 네트워크들을 지정할 수 있습니다." + +msgid "Thursday" +msgstr "목요일" + +msgid "Time in UTC" +msgstr "UTC 기준시" + +msgid "To %s at %s on <var>this device</var>" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on <var>this device</var>" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "Traffic Rule" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Traffic rule 은 서로 다른 zone 사이를 오가는 패킷들에 대한 정책을 정의합니" +"다. 예를 들어 특정 host 들 사이의 트래픽을 차단하거나 공유기의 WAN port 를 " +"open 할때 사용됩니다." + +msgid "Tuesday" +msgstr "화요일" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "수요일" + +msgid "Week Days" +msgstr "주일" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "Zone 내역" + +msgid "accept" +msgstr "" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "" + +msgid "traffic" +msgstr "" diff --git a/applications/luci-app-firewall/po/ms/firewall.po b/applications/luci-app-firewall/po/ms/firewall.po index 185aeb936..b82e2c116 100644 --- a/applications/luci-app-firewall/po/ms/firewall.po +++ b/applications/luci-app-firewall/po/ms/firewall.po @@ -274,6 +274,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/no/firewall.po b/applications/luci-app-firewall/po/no/firewall.po index e39eee7e4..59167db54 100644 --- a/applications/luci-app-firewall/po/no/firewall.po +++ b/applications/luci-app-firewall/po/no/firewall.po @@ -291,6 +291,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Viderekoble matchet innkommende trafikk til den angitte interne vert" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "Begrens Masquerading til oppgitt destinasjons subnett" diff --git a/applications/luci-app-firewall/po/pl/firewall.po b/applications/luci-app-firewall/po/pl/firewall.po index 7a598d808..2eea8c31f 100644 --- a/applications/luci-app-firewall/po/pl/firewall.po +++ b/applications/luci-app-firewall/po/pl/firewall.po @@ -300,6 +300,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Przekieruj ruch przychodzący do wskazanego hosta w sieci wewnętrznej" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "Ogranicz maskaradę do wskazanych sieci docelowych" diff --git a/applications/luci-app-firewall/po/pt-br/firewall.po b/applications/luci-app-firewall/po/pt-br/firewall.po index c1cfb4287..ab714b50b 100644 --- a/applications/luci-app-firewall/po/pt-br/firewall.po +++ b/applications/luci-app-firewall/po/pt-br/firewall.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-30 17:00+0200\n" -"PO-Revision-Date: 2014-06-21 19:03+0200\n" -"Last-Translator: Éder <eder.grigorio@openmailbox.org>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-20 17:43-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "%s in %s" msgstr "%s in %s" @@ -143,7 +143,7 @@ msgid "Forward to" msgstr "Encaminhar para" msgid "Friday" -msgstr "" +msgstr "Sexta-feira" msgid "From %s in %s" msgstr "Vindo de %s em %s" @@ -222,10 +222,10 @@ msgstr "" "equipamento cliente." msgid "Monday" -msgstr "" +msgstr "Segunda-Feira" msgid "Month Days" -msgstr "" +msgstr "Dias do mês" msgid "Name" msgstr "Nome" @@ -295,6 +295,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Redireciona tráfego entrante para o computador interno especificado" +msgid "Restart Firewall" +msgstr "Reiniciar o Firewall" + msgid "Restrict Masquerading to given destination subnets" msgstr "Restringe o mascaramento para uma subrede de destino específica" @@ -327,7 +330,7 @@ msgid "SNAT port" msgstr "Porta da SNAT" msgid "Saturday" -msgstr "" +msgstr "Sábado" msgid "Source IP address" msgstr "Endereço IP de origem" @@ -357,19 +360,19 @@ msgid "Source zone" msgstr "Zona de origem" msgid "Start Date (yyyy-mm-dd)" -msgstr "" +msgstr "Dia inicial (aaaa-mm-dd)" msgid "Start Time (hh:mm:ss)" -msgstr "" +msgstr "Hora inicial (hh:mm:ss)" msgid "Stop Date (yyyy-mm-dd)" -msgstr "" +msgstr "Dia final (aaaa-mm-dd)" msgid "Stop Time (hh:mm:ss)" -msgstr "" +msgstr "Hora final (hh:mm:ss)" msgid "Sunday" -msgstr "" +msgstr "Domingo" msgid "" "The firewall creates zones over your network interfaces to control network " @@ -408,7 +411,6 @@ msgstr "" "Esta página permite que você mude propriedades avançadas da entrada da regra " "de tráfego, como os equipamentos de origem e destino." -#, 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 " @@ -424,10 +426,10 @@ msgstr "" "zona." msgid "Thursday" -msgstr "" +msgstr "Quita-feira" msgid "Time in UTC" -msgstr "" +msgstr "Hora em UTC" msgid "To %s at %s on <var>this device</var>" msgstr "Para %s em %s <var>neste dispositivo</var>" @@ -460,7 +462,7 @@ msgstr "" "ou abrir portas WAN no roteador." msgid "Tuesday" -msgstr "" +msgstr "Terça-feira" msgid "Via %s" msgstr "Via %s" @@ -469,10 +471,10 @@ msgid "Via %s at %s" msgstr "Via %s at %s" msgid "Wednesday" -msgstr "" +msgstr "Quarta-feira" msgid "Week Days" -msgstr "" +msgstr "Dias da semana" msgid "" "You may specify multiple by selecting \"-- custom --\" and then entering " diff --git a/applications/luci-app-firewall/po/pt/firewall.po b/applications/luci-app-firewall/po/pt/firewall.po index 70bf2fa3e..f55261671 100644 --- a/applications/luci-app-firewall/po/pt/firewall.po +++ b/applications/luci-app-firewall/po/pt/firewall.po @@ -297,6 +297,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Redirecionar o tráfego de entrada correspondente para o host interno" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/ro/firewall.po b/applications/luci-app-firewall/po/ro/firewall.po index 432a41b89..69b911e17 100644 --- a/applications/luci-app-firewall/po/ro/firewall.po +++ b/applications/luci-app-firewall/po/ro/firewall.po @@ -279,6 +279,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/ru/firewall.po b/applications/luci-app-firewall/po/ru/firewall.po index 294d9db6d..98bc92dd6 100644 --- a/applications/luci-app-firewall/po/ru/firewall.po +++ b/applications/luci-app-firewall/po/ru/firewall.po @@ -300,6 +300,9 @@ msgstr "Перенаправить входящий трафик на указа msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Перенаправить входящий трафик на указанный хост внутренней сети" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "Использовать маскарадинг только для указанных подсетей-получателей" diff --git a/applications/luci-app-firewall/po/sk/firewall.po b/applications/luci-app-firewall/po/sk/firewall.po index 59613a89a..f45e74b14 100644 --- a/applications/luci-app-firewall/po/sk/firewall.po +++ b/applications/luci-app-firewall/po/sk/firewall.po @@ -275,6 +275,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/sv/firewall.po b/applications/luci-app-firewall/po/sv/firewall.po index 79af5a2e8..2e169fb92 100644 --- a/applications/luci-app-firewall/po/sv/firewall.po +++ b/applications/luci-app-firewall/po/sv/firewall.po @@ -276,6 +276,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/templates/firewall.pot b/applications/luci-app-firewall/po/templates/firewall.pot index 7ea06e0bb..d1e8eeca1 100644 --- a/applications/luci-app-firewall/po/templates/firewall.pot +++ b/applications/luci-app-firewall/po/templates/firewall.pot @@ -268,6 +268,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/tr/firewall.po b/applications/luci-app-firewall/po/tr/firewall.po index 89cbfe152..1b5444f0f 100644 --- a/applications/luci-app-firewall/po/tr/firewall.po +++ b/applications/luci-app-firewall/po/tr/firewall.po @@ -275,6 +275,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/uk/firewall.po b/applications/luci-app-firewall/po/uk/firewall.po index b946d6b95..1c4117f3f 100644 --- a/applications/luci-app-firewall/po/uk/firewall.po +++ b/applications/luci-app-firewall/po/uk/firewall.po @@ -295,6 +295,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "Переспрямувати відповідний вхідний трафік на заданий внутрішній вузол" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "Обмежити підміну заданими підмережами призначення" diff --git a/applications/luci-app-firewall/po/vi/firewall.po b/applications/luci-app-firewall/po/vi/firewall.po index 93d6d6658..6c00a6f29 100644 --- a/applications/luci-app-firewall/po/vi/firewall.po +++ b/applications/luci-app-firewall/po/vi/firewall.po @@ -285,6 +285,9 @@ msgstr "" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "" diff --git a/applications/luci-app-firewall/po/zh-cn/firewall.po b/applications/luci-app-firewall/po/zh-cn/firewall.po index 48d22b03e..d36eeeaa6 100644 --- a/applications/luci-app-firewall/po/zh-cn/firewall.po +++ b/applications/luci-app-firewall/po/zh-cn/firewall.po @@ -282,6 +282,9 @@ msgstr "重定向匹配的入站流量到内部主机的端口" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "重定向匹配的入站流量到的内部主机" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "要限制IP动态伪装的目标子网" diff --git a/applications/luci-app-firewall/po/zh-tw/firewall.po b/applications/luci-app-firewall/po/zh-tw/firewall.po index b768d43b0..b89cfab7f 100644 --- a/applications/luci-app-firewall/po/zh-tw/firewall.po +++ b/applications/luci-app-firewall/po/zh-tw/firewall.po @@ -280,6 +280,9 @@ msgstr "重導向已匹配傳入流量到內部主機上的指定埠" msgid "Redirect matched incoming traffic to the specified internal host" msgstr "重導向已匹配傳入流量到內部主機上" +msgid "Restart Firewall" +msgstr "" + msgid "Restrict Masquerading to given destination subnets" msgstr "限制偽裝到已給予的目標子網路" diff --git a/applications/luci-app-fwknopd/Makefile b/applications/luci-app-fwknopd/Makefile index 3fbd88ad6..ba7a8568e 100644 --- a/applications/luci-app-fwknopd/Makefile +++ b/applications/luci-app-fwknopd/Makefile @@ -8,8 +8,6 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=Fwknopd config - web config for the firewall knock daemon LUCI_DEPENDS:=+fwknopd +qrencode -PKG_VERSION:=1.0 -PKG_RELEASE:=1 PKG_LICENSE:=GPLv2 PKG_MAINTAINER:=Jonathan Bennett <JBennett@incomsystems.biz> include ../../luci.mk diff --git a/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua b/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua index 096724f73..435837444 100644 --- a/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua +++ b/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua @@ -1,19 +1,19 @@ -- Copyright 2015 Jonathan Bennett <jbennett@incomsystems.biz> -- Licensed to the public under the GNU General Public License v2. - +tmp = 0 m = Map("fwknopd", translate("Firewall Knock Operator")) s = m:section(TypedSection, "global", translate("Enable Uci/Luci control")) -- Set uci control on or off s.anonymous=true s:option(Flag, "uci_enabled", translate("Enable config overwrite"), translate("When unchecked, the config files in /etc/fwknopd will be used as is, ignoring any settings here.")) -qr = s:option(DummyValue, "note0", "dummy") -qr.template = "fwknopd-qr" -qr:depends("uci_enabled", "1") s = m:section(TypedSection, "access", translate("access.conf stanzas")) -- set the access.conf settings s.anonymous=true s.addremove=true -s.dynamic=true +qr = s:option(DummyValue, "note0", "dummy") +qr.tmp = tmp +qr.template = "fwknopd-qr" +qr:depends("uci_enabled", "1") s:option(Value, "SOURCE", "SOURCE", translate("Use ANY for any source ip")) k1 = s:option(Value, "KEY", "KEY", translate("Define the symmetric key used for decrypting an incoming SPA packet that is encrypted by the fwknop client with Rijndael.")) k1:depends("keytype", translate("Normal Key")) @@ -40,15 +40,13 @@ s:option(Value, "REQUIRE_SOURCE_ADDRESS", "REQUIRE_SOURCE_ADDRESS", translate("F This makes it impossible to use the -s command line argument on the fwknop client command line, so either -R \ has to be used to automatically resolve the external address (if the client behind a NAT) or the client must \ know the external IP and set it via the -a argument.")) -s:option(DummyValue, "note1", translate("Enter custom access.conf variables below:")) s = m:section(TypedSection, "config", translate("fwknopd.conf config options")) s.anonymous=true -s.dynamic=true s:option(Value, "MAX_SPA_PACKET_AGE", "MAX_SPA_PACKET_AGE", translate("Maximum age in seconds that an SPA packet will be accepted. defaults to 120 seconds")) s:option(Value, "PCAP_INTF", "PCAP_INTF", translate("Specify the ethernet interface on which fwknopd will sniff packets.")) s:option(Value, "ENABLE_IPT_FORWARDING", "ENABLE_IPT_FORWARDING", translate("Allow SPA clients to request access to services through an iptables firewall instead of just to it.")) -s:option(DummyValue, "note2", translate("Enter custom fwknopd.conf variables below:")) +s:option(Value, "ENABLE_NAT_DNS", "ENABLE_NAT_DNS", translate("Allow SPA clients to request forwarding destination by DNS name.")) return m diff --git a/applications/luci-app-fwknopd/luasrc/view/fwknopd-qr.htm b/applications/luci-app-fwknopd/luasrc/view/fwknopd-qr.htm index 9e6e8185f..5773f523e 100644 --- a/applications/luci-app-fwknopd/luasrc/view/fwknopd-qr.htm +++ b/applications/luci-app-fwknopd/luasrc/view/fwknopd-qr.htm @@ -1 +1,2 @@ -<% print(luci.sys.exec("sh /usr/sbin/gen-qr.sh")) %> +<% print(luci.sys.exec("sh /usr/sbin/gen-qr.sh " .. self.tmp)) %> +<% self.tmp = self.tmp + 1 %> diff --git a/applications/luci-app-fwknopd/po/en/fwknopd.po b/applications/luci-app-fwknopd/po/en/fwknopd.po index d75c99d52..fbdd8d753 100644 --- a/applications/luci-app-fwknopd/po/en/fwknopd.po +++ b/applications/luci-app-fwknopd/po/en/fwknopd.po @@ -17,6 +17,9 @@ msgstr "" "Allow SPA clients to request access to services through an iptables firewall " "instead of just to it." +msgid "Allow SPA clients to request forwarding destination by DNS name." +msgstr "" + msgid "Base 64 key" msgstr "Base 64 key" @@ -55,12 +58,6 @@ msgstr "Enable Uci/Luci control" msgid "Enable config overwrite" msgstr "Enable config overwrite" -msgid "Enter custom access.conf variables below:" -msgstr "Enter custom access.conf variables below:" - -msgid "Enter custom fwknopd.conf variables below:" -msgstr "Enter custom fwknopd.conf variables below:" - msgid "Firewall Knock Daemon" msgstr "Firewall Knock Daemon" @@ -111,3 +108,9 @@ msgstr "access.conf stanzas" msgid "fwknopd.conf config options" msgstr "fwknopd.conf config options" + +#~ msgid "Enter custom access.conf variables below:" +#~ msgstr "Enter custom access.conf variables below:" + +#~ msgid "Enter custom fwknopd.conf variables below:" +#~ msgstr "Enter custom fwknopd.conf variables below:" diff --git a/applications/luci-app-fwknopd/po/pt-br/fwknopd.po b/applications/luci-app-fwknopd/po/pt-br/fwknopd.po new file mode 100644 index 000000000..286b49db3 --- /dev/null +++ b/applications/luci-app-fwknopd/po/pt-br/fwknopd.po @@ -0,0 +1,116 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "" +"Allow SPA clients to request access to services through an iptables firewall " +"instead of just to it." +msgstr "" +"Permitir que clientes SPA requeiram acesso a serviços através de um firewall " +"iptables ao invés de apenas fazê-lo." + +msgid "Allow SPA clients to request forwarding destination by DNS name." +msgstr "" +"Permitir que clientes SPA requeiram encaminhamento de destinos por nome DNS." + +msgid "Base 64 key" +msgstr "Chave em formato base64" + +msgid "" +"Define a set of ports and protocols (tcp or udp) that will be opened if a " +"valid knock sequence is seen. If this entry is not set, fwknopd will attempt " +"to honor any proto/port request specified in the SPA data (unless of it " +"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated." +msgstr "" +"Define um conjunto de porta e protocolos (TCP ou UDP) que serão abertos se " +"uma sequência de batidas for observada. Se esta entrada não estiver " +"definida, fwknopd irá tentar honrar qualquer requisição de protocolo/porta " +"especificada nos dados SPA (a não ser se casar com qualquer entrada de " +"\"RESTRICT_PORTS\"). Múltiplas entradas serão separadas por vírgula." + +msgid "" +"Define the length of time access will be granted by fwknopd through the " +"firewall after a valid knock sequence from a source IP address. If " +"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will " +"automatically be set." +msgstr "" +"Define a duração do tempo de acesso que será concedido pelo fwknopd através " +"do firewall depois de uma sequência de batidas válida de um endereço IP. Se " +"“FW_ACCESS_TIMEOUT” não estiver definido, o valor padrão será de 30 " +"segundos. " + +msgid "" +"Define the symmetric key used for decrypting an incoming SPA packet that is " +"encrypted by the fwknop client with Rijndael." +msgstr "" +"Define a chave simétrica usada para decifrar um pacote SPA entrante que foi " +"cifrado pelo cliente fwknop com o algoritmo Rijndael." + +msgid "Enable Uci/Luci control" +msgstr "Habilitar o controle UCI/Luci" + +msgid "Enable config overwrite" +msgstr "Habilitar a sobrescrita da configuração" + +msgid "Firewall Knock Daemon" +msgstr "Servidor do Firwall Knock" + +msgid "Firewall Knock Operator" +msgstr "Operador do Firewall Knock" + +msgid "" +"Force all SPA packets to contain a real IP address within the encrypted " +"data. This makes it impossible to use the -s command line argument on the " +"fwknop client command line, so either -R has to be used to automatically " +"resolve the external address (if the client behind a NAT) or the client must " +"know the external IP and set it via the -a argument." +msgstr "" +"Forçar que todos os pacotes SPA contenham um endereço IP real dentro do " +"pacote cifrado. Isto torna impossível o uso do argumento de linha de comando " +"'-s' no cliente fwknop. Desta forma, ou o argumento '-R' deve ser usada para " +"resolver os endereços externos automaticamente (se o cliente estiver atrás " +"de uma NAT) ou o ciente deve conhecer o seu endereço IP externo e defini-lo " +"através do argumento '-a'." + +msgid "" +"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 " +"seconds" +msgstr "" +"Idade máxima, em segundos, que um pacote SPA será aceito. Padrão é 120 " +"segundos." + +msgid "Normal Key" +msgstr "Chave Normal" + +msgid "Specify the ethernet interface on which fwknopd will sniff packets." +msgstr "" +"Especifica o dispositivo ethernet no qual o fwknopd irá observar os pacotes." + +msgid "The base64 hmac key" +msgstr "A chave de autenticação HMAC em formato base64" + +msgid "Use ANY for any source ip" +msgstr "Use \"ANY\" para qualquer endereço IP de origem" + +msgid "" +"When unchecked, the config files in /etc/fwknopd will be used as is, " +"ignoring any settings here." +msgstr "" +"Quando desmarcado, os arquivos de configuração em /etc/fwknopd serão usados " +"como estão, ignorando qualquer ajustes feitos aqui." + +msgid "access.conf stanzas" +msgstr "Estâncias do access.conf" + +msgid "fwknopd.conf config options" +msgstr "Opções do fwknopd.conf" diff --git a/applications/luci-app-fwknopd/po/templates/fwknopd.pot b/applications/luci-app-fwknopd/po/templates/fwknopd.pot index 4fb616f25..1010ba70e 100644 --- a/applications/luci-app-fwknopd/po/templates/fwknopd.pot +++ b/applications/luci-app-fwknopd/po/templates/fwknopd.pot @@ -6,6 +6,9 @@ msgid "" "instead of just to it." msgstr "" +msgid "Allow SPA clients to request forwarding destination by DNS name." +msgstr "" + msgid "Base 64 key" msgstr "" @@ -34,12 +37,6 @@ msgstr "" msgid "Enable config overwrite" msgstr "" -msgid "Enter custom access.conf variables below:" -msgstr "" - -msgid "Enter custom fwknopd.conf variables below:" -msgstr "" - msgid "Firewall Knock Daemon" msgstr "" diff --git a/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd b/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd index 01b85de25..65ef01245 100644 --- a/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd +++ b/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd @@ -16,6 +16,7 @@ uci set fwknopd.@access[0].hkeytype='Base 64 key' uci set fwknopd.@access[0].KEY_BASE64=`fwknopd --key-gen | awk '/^KEY/ {print $2;}'` uci set fwknopd.@access[0].HMAC_KEY_BASE64=`fwknopd --key-gen | awk '/^HMAC/ {print $2;}'` uci set fwknopd.@config[0].ENABLE_IPT_FORWARDING='y' +uci set fwknopd.@config[0].ENABLE_NAT_DNS='y' uci commit fwknopd rm -f /tmp/luci-indexcache diff --git a/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh b/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh index 97493dafe..abca5d3e5 100644 --- a/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh +++ b/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh @@ -1,9 +1,13 @@ #!/bin/sh +entry_num=0 +if [ "$1" != "" ]; then +entry_num=$1 +fi -key_base64=$(uci get fwknopd.@access[0].KEY_BASE64) -key=$(uci get fwknopd.@access[0].KEY) -hmac_key_base64=$(uci get fwknopd.@access[0].HMAC_KEY_BASE64) -hmac_key=$(uci get fwknopd.@access[0].HMAC_KEY) +key_base64=$(uci get fwknopd.@access[$entry_num].KEY_BASE64) +key=$(uci get fwknopd.@access[$entry_num].KEY) +hmac_key_base64=$(uci get fwknopd.@access[$entry_num].HMAC_KEY_BASE64) +hmac_key=$(uci get fwknopd.@access[$entry_num].HMAC_KEY) if [ $key_base64 != "" ]; then qr="KEY_BASE64:$key_base64" diff --git a/applications/luci-app-hd-idle/luasrc/controller/hd_idle.lua b/applications/luci-app-hd-idle/luasrc/controller/hd_idle.lua index f273a551d..9a981acac 100644 --- a/applications/luci-app-hd-idle/luasrc/controller/hd_idle.lua +++ b/applications/luci-app-hd-idle/luasrc/controller/hd_idle.lua @@ -10,6 +10,6 @@ function index() local page - page = entry({"admin", "services", "hd_idle"}, cbi("hd_idle"), _("hd-idle"), 60) + page = entry({"admin", "services", "hd_idle"}, cbi("hd_idle"), _("HDD Idle"), 60) page.dependent = true end diff --git a/applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua b/applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua index 70b04af90..c15fdc028 100644 --- a/applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua +++ b/applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua @@ -3,8 +3,8 @@ require("nixio.fs") -m = Map("hd-idle", "hd-idle", - translate("hd-idle is a utility program for spinning-down external " .. +m = Map("hd-idle", translate("HDD Idle"), + translate("HDD Idle is a utility program for spinning-down external " .. "disks after a period of idle time.")) s = m:section(TypedSection, "hd-idle", translate("Settings")) @@ -18,9 +18,9 @@ for dev in nixio.fs.glob("/dev/[sh]d[a-z]") do disk:value(nixio.fs.basename(dev)) end -s:option(Value, "idle_time_interval", translate("Idle-time")).default = 10 +s:option(Value, "idle_time_interval", translate("Idle time")).default = 10 s.rmempty = true -unit = s:option(ListValue, "idle_time_unit", translate("Idle-time unit")) +unit = s:option(ListValue, "idle_time_unit", translate("Idle time unit")) unit.default = "minutes" unit:value("minutes", translate("min")) unit:value("hours", translate("h")) diff --git a/applications/luci-app-hd-idle/po/ca/hd_idle.po b/applications/luci-app-hd-idle/po/ca/hd_idle.po index 29618a896..10ca4cd1c 100644 --- a/applications/luci-app-hd-idle/po/ca/hd_idle.po +++ b/applications/luci-app-hd-idle/po/ca/hd_idle.po @@ -21,10 +21,20 @@ msgstr "Disc" msgid "Enable" msgstr "Habilita" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle és un programa per ralentitzar els discos externs després d'un " +"període de temps inactiu." + +msgid "Idle time" msgstr "Temps d'inactivitat" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Unitat de temps d'inactivitat" msgid "Settings" @@ -34,16 +44,6 @@ msgstr "Ajusts" msgid "h" msgstr "h" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle és un programa per ralentitzar els discos externs després d'un " -"període de temps inactiu." - # Minutes (not minimum) msgid "min" msgstr "min" diff --git a/applications/luci-app-hd-idle/po/cs/hd_idle.po b/applications/luci-app-hd-idle/po/cs/hd_idle.po index e2deb9b20..b77539278 100644 --- a/applications/luci-app-hd-idle/po/cs/hd_idle.po +++ b/applications/luci-app-hd-idle/po/cs/hd_idle.po @@ -21,10 +21,20 @@ msgstr "Disk" msgid "Enable" msgstr "Povolit" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle je utilita pro vypnutí externích pevných disků po určité době " +"nečinnosti." + +msgid "Idle time" msgstr "Čas nečinnosti" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Čas nečinnosti - jednotka" msgid "Settings" @@ -34,16 +44,6 @@ msgstr "Nastavení" msgid "h" msgstr "h" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle je utilita pro vypnutí externích pevných disků po určité době " -"nečinnosti." - # Minut (ne minimum) msgid "min" msgstr "min" diff --git a/applications/luci-app-hd-idle/po/de/hd_idle.po b/applications/luci-app-hd-idle/po/de/hd_idle.po index fa5489657..79fa603f0 100644 --- a/applications/luci-app-hd-idle/po/de/hd_idle.po +++ b/applications/luci-app-hd-idle/po/de/hd_idle.po @@ -19,10 +19,20 @@ msgstr "Festplatte" msgid "Enable" msgstr "Aktivieren" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle ist ein Hilfsprogramm um externe Festplatten nach einer " +"festgelegten Leerlaufzeit herunter zu fahren." + +msgid "Idle time" msgstr "Leerlaufzeit" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Leerlaufzeiteinheit" msgid "Settings" @@ -32,16 +42,6 @@ msgstr "Einstellungen" msgid "h" msgstr "Stunden" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle ist ein Hilfsprogramm um externe Festplatten nach einer festgelegten " -"Leerlaufzeit herunter zu fahren." - # Minutes (not minimum) msgid "min" msgstr "Minuten" diff --git a/applications/luci-app-hd-idle/po/el/hd_idle.po b/applications/luci-app-hd-idle/po/el/hd_idle.po index 4d7c23dfa..e4f006adf 100644 --- a/applications/luci-app-hd-idle/po/el/hd_idle.po +++ b/applications/luci-app-hd-idle/po/el/hd_idle.po @@ -19,10 +19,18 @@ msgstr "Δίσκος" msgid "Enable" msgstr "Ενεργοποίηση" -msgid "Idle-time" +msgid "HDD Idle" msgstr "" -msgid "Idle-time unit" +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" + +msgid "Idle time" +msgstr "" + +msgid "Idle time unit" msgstr "" msgid "Settings" @@ -32,14 +40,6 @@ msgstr "Ρυθμίσεις" msgid "h" msgstr "ω" -msgid "hd-idle" -msgstr "" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" - # Minutes (not minimum) msgid "min" msgstr "λεπτά" diff --git a/applications/luci-app-hd-idle/po/en/hd_idle.po b/applications/luci-app-hd-idle/po/en/hd_idle.po index 7aa4db5fe..3ed519f18 100644 --- a/applications/luci-app-hd-idle/po/en/hd_idle.po +++ b/applications/luci-app-hd-idle/po/en/hd_idle.po @@ -17,11 +17,21 @@ msgstr "Disk" msgid "Enable" msgstr "Enable" -msgid "Idle-time" -msgstr "Idle-time" +msgid "HDD Idle" +msgstr "" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." + +msgid "Idle time" +msgstr "Idle time" -msgid "Idle-time unit" -msgstr "Idle-time unit" +msgid "Idle time unit" +msgstr "Idle time unit" msgid "Settings" msgstr "Settings" @@ -30,16 +40,6 @@ msgstr "Settings" msgid "h" msgstr "h" -msgid "hd-idle" -msgstr "" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." - # Minutes (not minimum) msgid "min" msgstr "min" diff --git a/applications/luci-app-hd-idle/po/es/hd_idle.po b/applications/luci-app-hd-idle/po/es/hd_idle.po index d2bb017a0..09dd3b80d 100644 --- a/applications/luci-app-hd-idle/po/es/hd_idle.po +++ b/applications/luci-app-hd-idle/po/es/hd_idle.po @@ -19,10 +19,20 @@ msgstr "Disco" msgid "Enable" msgstr "Activar" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle es un programa que gestiona el reposo de discos externos tras un " +"tiempo de inactividad." + +msgid "Idle time" msgstr "Tiempo de inactividad" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Unidad de tiempo" msgid "Settings" @@ -32,16 +42,6 @@ msgstr "Configuración" msgid "h" msgstr "h" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle es un programa que gestiona el reposo de discos externos tras un " -"tiempo de inactividad." - # Minutes (not minimum) msgid "min" msgstr "minutos" diff --git a/applications/luci-app-hd-idle/po/fr/hd_idle.po b/applications/luci-app-hd-idle/po/fr/hd_idle.po index 00c092d48..ea30bf192 100644 --- a/applications/luci-app-hd-idle/po/fr/hd_idle.po +++ b/applications/luci-app-hd-idle/po/fr/hd_idle.po @@ -19,10 +19,20 @@ msgstr "Disque" msgid "Enable" msgstr "Activer" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle est un utilitaire pour arrêter la rotation des disques externes " +"après une période d'inactivité." + +msgid "Idle time" msgstr "Temps d'inactivité" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Unité de temps" msgid "Settings" @@ -32,16 +42,6 @@ msgstr "Réglages" msgid "h" msgstr "h" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle est un utilitaire pour arrêter la rotation des disques externes " -"après une période d'inactivité." - # Minutes (not minimum) msgid "min" msgstr "min" diff --git a/applications/luci-app-hd-idle/po/he/hd_idle.po b/applications/luci-app-hd-idle/po/he/hd_idle.po index 0ffde9045..8a73d5f9b 100644 --- a/applications/luci-app-hd-idle/po/he/hd_idle.po +++ b/applications/luci-app-hd-idle/po/he/hd_idle.po @@ -21,10 +21,20 @@ msgstr "כונן" msgid "Enable" msgstr "אפשר" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle הינה תוכנת שירות שמטרתה להקטין את מהירות הסיבוב של כוננים חיצוניים " +"לאחר זמן מסוים של חוסר פעילות." + +msgid "Idle time" msgstr "זמן חוסר פעילות" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "יחידת זמן חוסר פעילות" msgid "Settings" @@ -34,16 +44,6 @@ msgstr "הגדרות" msgid "h" msgstr "ש'" -msgid "hd-idle" -msgstr "" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle הינה תוכנת שירות שמטרתה להקטין את מהירות הסיבוב של כוננים חיצוניים " -"לאחר זמן מסוים של חוסר פעילות." - # Minutes (not minimum) msgid "min" msgstr "דק'" diff --git a/applications/luci-app-hd-idle/po/hu/hd_idle.po b/applications/luci-app-hd-idle/po/hu/hd_idle.po index 543a8fc2c..d902ee0f8 100644 --- a/applications/luci-app-hd-idle/po/hu/hd_idle.po +++ b/applications/luci-app-hd-idle/po/hu/hd_idle.po @@ -21,10 +21,20 @@ msgstr "Lemez" msgid "Enable" msgstr "Engedélyezés" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle egy a külső lemezek adott üresjárati idő után történő leállítására " +"szolgáló segédprogram." + +msgid "Idle time" msgstr "Üresjárati idő" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Üresjárati idő egysége" msgid "Settings" @@ -34,16 +44,6 @@ msgstr "Beállítások" msgid "h" msgstr "óra" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle egy a külső lemezek adott üresjárati idő után történő leállítására " -"szolgáló segédprogram." - # Minutes (not minimum) msgid "min" msgstr "perc" diff --git a/applications/luci-app-hd-idle/po/it/hd_idle.po b/applications/luci-app-hd-idle/po/it/hd_idle.po index ffd118dd1..63751c332 100644 --- a/applications/luci-app-hd-idle/po/it/hd_idle.po +++ b/applications/luci-app-hd-idle/po/it/hd_idle.po @@ -19,10 +19,20 @@ msgstr "Disco" msgid "Enable" msgstr "Abilita" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle è un programma per mettere in standby i dischi esterni dopo un " +"periodo di inattività." + +msgid "Idle time" msgstr "Tempo di inattività" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Unità di misura del tempo di inattività" msgid "Settings" @@ -32,16 +42,6 @@ msgstr "Opzioni" msgid "h" msgstr "ora/e" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"HD-idle è un programma per mettere in standby i dischi esterni dopo un " -"periodo di inattività." - # Minutes (not minimum) msgid "min" msgstr "min" diff --git a/applications/luci-app-hd-idle/po/ja/hd_idle.po b/applications/luci-app-hd-idle/po/ja/hd_idle.po index 9e724ebeb..6023778c8 100644 --- a/applications/luci-app-hd-idle/po/ja/hd_idle.po +++ b/applications/luci-app-hd-idle/po/ja/hd_idle.po @@ -19,10 +19,20 @@ msgstr "ディスク" msgid "Enable" msgstr "有効" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idleはアイドル時に外部ディスクをスピンダウンさせるための、ユーティリティ" +"プログラムです。" + +msgid "Idle time" msgstr "アイドル時間" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "アイドル時間 (単位)" msgid "Settings" @@ -32,16 +42,6 @@ msgstr "設定" msgid "h" msgstr "時" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idleはアイドル時に外部ディスクをスピンダウンさせるための、ユーティリティプ" -"ログラムです。" - # Minutes (not minimum) msgid "min" msgstr "分" diff --git a/applications/luci-app-hd-idle/po/ms/hd_idle.po b/applications/luci-app-hd-idle/po/ms/hd_idle.po index 45402b8c5..361f1ac54 100644 --- a/applications/luci-app-hd-idle/po/ms/hd_idle.po +++ b/applications/luci-app-hd-idle/po/ms/hd_idle.po @@ -18,25 +18,25 @@ msgstr "" msgid "Enable" msgstr "" -msgid "Idle-time" +msgid "HDD Idle" msgstr "" -msgid "Idle-time unit" +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." msgstr "" -msgid "Settings" +msgid "Idle time" msgstr "" -# Hours -msgid "h" +msgid "Idle time unit" msgstr "" -msgid "hd-idle" +msgid "Settings" msgstr "" -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." +# Hours +msgid "h" msgstr "" # Minutes (not minimum) diff --git a/applications/luci-app-hd-idle/po/no/hd_idle.po b/applications/luci-app-hd-idle/po/no/hd_idle.po index dc0c2f890..6482a291e 100644 --- a/applications/luci-app-hd-idle/po/no/hd_idle.po +++ b/applications/luci-app-hd-idle/po/no/hd_idle.po @@ -10,10 +10,20 @@ msgstr "Disk" msgid "Enable" msgstr "Aktiver" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle er et verktøy for å spinne ned eksterne disker etter en periode med " +"inaktivitet." + +msgid "Idle time" msgstr "Tid inaktiv" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Tidsenhet" msgid "Settings" @@ -22,16 +32,6 @@ msgstr "Innstillinger" msgid "h" msgstr "timer" -msgid "hd-idle" -msgstr "Hd-Idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle er et verktøy for å spinne ned eksterne disker etter en periode med " -"inaktivitet." - msgid "min" msgstr "minutter" diff --git a/applications/luci-app-hd-idle/po/pl/hd_idle.po b/applications/luci-app-hd-idle/po/pl/hd_idle.po index c6522c19c..29c286f12 100644 --- a/applications/luci-app-hd-idle/po/pl/hd_idle.po +++ b/applications/luci-app-hd-idle/po/pl/hd_idle.po @@ -20,10 +20,20 @@ msgstr "Dysk" msgid "Enable" msgstr "Włącz" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle jest narzędziem do zwalniania obrotów zewnętrznych dysków po " +"określonym czasie bezczynności." + +msgid "Idle time" msgstr "Czas bezczynności" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Jednostka czasu bezczynności" msgid "Settings" @@ -33,16 +43,6 @@ msgstr "Ustawienia" msgid "h" msgstr "godz." -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle jest narzędziem do zwalniania obrotów zewnętrznych dysków po " -"określonym czasie bezczynności." - # Minutes (not minimum) msgid "min" msgstr "min" diff --git a/applications/luci-app-hd-idle/po/pt-br/hd_idle.po b/applications/luci-app-hd-idle/po/pt-br/hd_idle.po index 0aaca9389..adcf063dc 100644 --- a/applications/luci-app-hd-idle/po/pt-br/hd_idle.po +++ b/applications/luci-app-hd-idle/po/pt-br/hd_idle.po @@ -19,10 +19,20 @@ msgstr "Disco" msgid "Enable" msgstr "Habilitar" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle é um programa utilitário para ativar o modo \"economia de energia" +"\" (spinning-down) de discos externos após um período de ociosidade." + +msgid "Idle time" msgstr "Tempo de ociosidade" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Unidade do tempo da ociosidade" msgid "Settings" @@ -32,16 +42,6 @@ msgstr "Configurações" msgid "h" msgstr "horas" -msgid "hd-idle" -msgstr "Hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"Hd-idle é um programa utilitário para ativar o modo \"economia de energia" -"\" (spinning-down) de discos externos após um período de ociosidade." - # Minutes (not minimum) msgid "min" msgstr "minutos" diff --git a/applications/luci-app-hd-idle/po/pt/hd_idle.po b/applications/luci-app-hd-idle/po/pt/hd_idle.po index 16cb085b1..81a6ae27e 100644 --- a/applications/luci-app-hd-idle/po/pt/hd_idle.po +++ b/applications/luci-app-hd-idle/po/pt/hd_idle.po @@ -19,10 +19,20 @@ msgstr "Disco" msgid "Enable" msgstr "Ativar" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle é um programa utilitário para activar o modo \"economia de energia" +"\" (spinning-down) de discos externos após um período de ociosidade." + +msgid "Idle time" msgstr "Tempo de ociosidade" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Unidade de tempo de ociosidade" msgid "Settings" @@ -32,16 +42,6 @@ msgstr "Configurações" msgid "h" msgstr "h" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle é um programa utilitário para activar o modo \"economia de energia" -"\" (spinning-down) de discos externos após um período de ociosidade." - # Minutes (not minimum) msgid "min" msgstr "min" diff --git a/applications/luci-app-hd-idle/po/ro/hd_idle.po b/applications/luci-app-hd-idle/po/ro/hd_idle.po index ae6a8b090..31311cec0 100644 --- a/applications/luci-app-hd-idle/po/ro/hd_idle.po +++ b/applications/luci-app-hd-idle/po/ro/hd_idle.po @@ -22,10 +22,20 @@ msgstr "Disc" msgid "Enable" msgstr "Activeaza" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle este un utilitar pentru a oprit din rotatie hard disc-urile externe " +"dupa o anumita perioada de inactivitate." + +msgid "Idle time" msgstr "Timp de inactivitate" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Unitatea de timp pentru masurarea inactivitatii" msgid "Settings" @@ -35,16 +45,6 @@ msgstr "Setari" msgid "h" msgstr "ore" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle este un utilitar pentru a oprit din rotatie hard disc-urile externe " -"dupa o anumita perioada de inactivitate." - # Minutes (not minimum) msgid "min" msgstr "minute" diff --git a/applications/luci-app-hd-idle/po/ru/hd_idle.po b/applications/luci-app-hd-idle/po/ru/hd_idle.po index 45d4a519b..e58a32f1d 100644 --- a/applications/luci-app-hd-idle/po/ru/hd_idle.po +++ b/applications/luci-app-hd-idle/po/ru/hd_idle.po @@ -21,10 +21,20 @@ msgstr "Диск" msgid "Enable" msgstr "Включить" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"Утилита HDD Idle позволяет замедлять внешние диски после определённого " +"времени бездействия." + +msgid "Idle time" msgstr "Время бездействия" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Единицы времени бездействия" msgid "Settings" @@ -34,16 +44,6 @@ msgstr "Настройки" msgid "h" msgstr "ч" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"Утилита hd-idle позволяет замедлять внешние диски после определённого " -"времени бездействия." - # Minutes (not minimum) msgid "min" msgstr "мин" diff --git a/applications/luci-app-hd-idle/po/sk/hd_idle.po b/applications/luci-app-hd-idle/po/sk/hd_idle.po index 0ae82d8f9..aa82e966b 100644 --- a/applications/luci-app-hd-idle/po/sk/hd_idle.po +++ b/applications/luci-app-hd-idle/po/sk/hd_idle.po @@ -14,24 +14,24 @@ msgstr "" msgid "Enable" msgstr "" -msgid "Idle-time" +msgid "HDD Idle" msgstr "" -msgid "Idle-time unit" +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." msgstr "" -msgid "Settings" +msgid "Idle time" msgstr "" -msgid "h" +msgid "Idle time unit" msgstr "" -msgid "hd-idle" +msgid "Settings" msgstr "" -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." +msgid "h" msgstr "" msgid "min" diff --git a/applications/luci-app-hd-idle/po/sv/hd_idle.po b/applications/luci-app-hd-idle/po/sv/hd_idle.po index 1d63095c4..f2ce8f101 100644 --- a/applications/luci-app-hd-idle/po/sv/hd_idle.po +++ b/applications/luci-app-hd-idle/po/sv/hd_idle.po @@ -15,24 +15,24 @@ msgstr "" msgid "Enable" msgstr "" -msgid "Idle-time" +msgid "HDD Idle" msgstr "" -msgid "Idle-time unit" +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." msgstr "" -msgid "Settings" +msgid "Idle time" msgstr "" -msgid "h" +msgid "Idle time unit" msgstr "" -msgid "hd-idle" +msgid "Settings" msgstr "" -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." +msgid "h" msgstr "" msgid "min" diff --git a/applications/luci-app-hd-idle/po/templates/hd_idle.pot b/applications/luci-app-hd-idle/po/templates/hd_idle.pot index 56079ed2b..b8aedcd37 100644 --- a/applications/luci-app-hd-idle/po/templates/hd_idle.pot +++ b/applications/luci-app-hd-idle/po/templates/hd_idle.pot @@ -7,24 +7,24 @@ msgstr "" msgid "Enable" msgstr "" -msgid "Idle-time" +msgid "HDD Idle" msgstr "" -msgid "Idle-time unit" +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." msgstr "" -msgid "Settings" +msgid "Idle time" msgstr "" -msgid "h" +msgid "Idle time unit" msgstr "" -msgid "hd-idle" +msgid "Settings" msgstr "" -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." +msgid "h" msgstr "" msgid "min" diff --git a/applications/luci-app-hd-idle/po/tr/hd_idle.po b/applications/luci-app-hd-idle/po/tr/hd_idle.po index f9ace872a..aed11b6c8 100644 --- a/applications/luci-app-hd-idle/po/tr/hd_idle.po +++ b/applications/luci-app-hd-idle/po/tr/hd_idle.po @@ -21,10 +21,20 @@ msgstr "Disk" msgid "Enable" msgstr "Kullanıma Aç" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "Harddisk-Park" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"Harddisk-Park belirli bir zaman sonra diskleri beklemeye alan bir yardımcı " +"programdır" + +msgid "Idle time" msgstr "Bekleme Zamanı" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "bekleme zamanı birimi" msgid "Settings" @@ -34,16 +44,6 @@ msgstr "Ayarlar" msgid "h" msgstr "s" -msgid "hd-idle" -msgstr "Harddisk-Park" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"Harddisk-Park belirli bir zaman sonra diskleri beklemeye alan bir yardımcı " -"programdır" - # Minutes (not minimum) msgid "min" msgstr "d" diff --git a/applications/luci-app-hd-idle/po/uk/hd_idle.po b/applications/luci-app-hd-idle/po/uk/hd_idle.po index 129fd7b4b..3d8e45c91 100644 --- a/applications/luci-app-hd-idle/po/uk/hd_idle.po +++ b/applications/luci-app-hd-idle/po/uk/hd_idle.po @@ -22,10 +22,19 @@ msgstr "Диск" msgid "Enable" msgstr "Активувати" -msgid "Idle-time" +#, fuzzy +msgid "HDD Idle" +msgstr "HD-простій" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" + +msgid "Idle time" msgstr "Час простою" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "" msgid "Settings" @@ -35,15 +44,6 @@ msgstr "Налаштування" msgid "h" msgstr "" -#, fuzzy -msgid "hd-idle" -msgstr "HD-простій" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" - # Minutes (not minimum) msgid "min" msgstr "хв" diff --git a/applications/luci-app-hd-idle/po/vi/hd_idle.po b/applications/luci-app-hd-idle/po/vi/hd_idle.po index 03ee2c1ba..a5d4ffeea 100644 --- a/applications/luci-app-hd-idle/po/vi/hd_idle.po +++ b/applications/luci-app-hd-idle/po/vi/hd_idle.po @@ -20,12 +20,22 @@ msgstr "Ổ đĩa" msgid "Enable" msgstr "Kích hoạt debug" +msgid "HDD Idle" +msgstr "HDD Idle" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "" +"HDD Idle là một chương trình tiện ích để quay các đĩa ngoài sau một khoảng " +"thời gian idle." + #, fuzzy -msgid "Idle-time" +msgid "Idle time" msgstr "Thời gian Idle" #, fuzzy -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "Đơn vị thời gian Idle" msgid "Settings" @@ -35,16 +45,6 @@ msgstr "Sắp đặt" msgid "h" msgstr "" -msgid "hd-idle" -msgstr "hd-idle" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "" -"hd-idle là một chương trình tiện ích để quay các đĩa ngoài sau một khoảng " -"thời gian idle." - # Minutes (not minimum) msgid "min" msgstr "" diff --git a/applications/luci-app-hd-idle/po/zh-cn/hd_idle.po b/applications/luci-app-hd-idle/po/zh-cn/hd_idle.po index 8bc14dcc8..d67abfd59 100644 --- a/applications/luci-app-hd-idle/po/zh-cn/hd_idle.po +++ b/applications/luci-app-hd-idle/po/zh-cn/hd_idle.po @@ -19,10 +19,18 @@ msgstr "硬盘" msgid "Enable" msgstr "开启" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "硬盘休眠" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "硬盘休眠是一个让硬盘在空闲一段时间后休眠的工具" + +msgid "Idle time" msgstr "空闲时间" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "空闲时间单位" msgid "Settings" @@ -32,14 +40,6 @@ msgstr "设置" msgid "h" msgstr "小时" -msgid "hd-idle" -msgstr "硬盘休眠" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "硬盘休眠是一个让硬盘在空闲一段时间后休眠的工具" - # Minutes (not minimum) msgid "min" msgstr "分钟" diff --git a/applications/luci-app-hd-idle/po/zh-tw/hd_idle.po b/applications/luci-app-hd-idle/po/zh-tw/hd_idle.po index bd69785e3..dee14cb08 100644 --- a/applications/luci-app-hd-idle/po/zh-tw/hd_idle.po +++ b/applications/luci-app-hd-idle/po/zh-tw/hd_idle.po @@ -17,10 +17,18 @@ msgstr "磁碟" msgid "Enable" msgstr "啟用" -msgid "Idle-time" +msgid "HDD Idle" +msgstr "硬碟休眠" + +msgid "" +"HDD Idle is a utility program for spinning-down external disks after a " +"period of idle time." +msgstr "硬碟休眠是控制當硬碟閒置一段時間後進入休眠模式的工具" + +msgid "Idle time" msgstr "休眠時間" -msgid "Idle-time unit" +msgid "Idle time unit" msgstr "休眠時間單位" msgid "Settings" @@ -29,14 +37,6 @@ msgstr "設定" msgid "h" msgstr "小時" -msgid "hd-idle" -msgstr "硬碟休眠" - -msgid "" -"hd-idle is a utility program for spinning-down external disks after a period " -"of idle time." -msgstr "硬碟休眠是控制當硬碟閒置一段時間後進入休眠模式的工具" - msgid "min" msgstr "分鐘" diff --git a/applications/luci-app-lxc/Makefile b/applications/luci-app-lxc/Makefile new file mode 100644 index 000000000..9f313dfb1 --- /dev/null +++ b/applications/luci-app-lxc/Makefile @@ -0,0 +1,17 @@ +# +# Copyright (C) 2017 Dan Luedtke <mail@danrl.com> +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LXC management Web UI +LUCI_DEPENDS:=+luci-mod-admin-full +lxc +lxc-create +liblxc +rpcd-mod-lxc +getopt +xz +LUCI_PKGARCH:=all + +PKG_MAINTAINER:=Petar Koretic <petar.koretic@sartura.hr> + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif Binary files differnew file mode 100644 index 000000000..d09febf12 --- /dev/null +++ b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif diff --git a/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif Binary files differnew file mode 100644 index 000000000..f0d68cc8b --- /dev/null +++ b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif diff --git a/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif Binary files differnew file mode 100644 index 000000000..c1b39bbed --- /dev/null +++ b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif diff --git a/applications/luci-app-lxc/luasrc/controller/lxc.lua b/applications/luci-app-lxc/luasrc/controller/lxc.lua new file mode 100644 index 000000000..ea7adbafb --- /dev/null +++ b/applications/luci-app-lxc/luasrc/controller/lxc.lua @@ -0,0 +1,167 @@ +--[[ + +LuCI LXC module + +Copyright (C) 2014, Cisco Systems, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Author: Petar Koretic <petar.koretic@sartura.hr> + +]]-- + +module("luci.controller.lxc", package.seeall) + +require "ubus" +local conn = ubus.connect() +if not conn then + error("Failed to connect to ubus") +end + + +function fork_exec(command) + local pid = nixio.fork() + if pid > 0 then + return + elseif pid == 0 then + -- change to root dir + nixio.chdir("/") + + -- patch stdin, out, err to /dev/null + local null = nixio.open("/dev/null", "w+") + if null then + nixio.dup(null, nixio.stderr) + nixio.dup(null, nixio.stdout) + nixio.dup(null, nixio.stdin) + if null:fileno() > 2 then + null:close() + end + end + + -- replace with target command + nixio.exec("/bin/sh", "-c", command) + end +end + +function index() + page = node("admin", "services", "lxc") + page.target = cbi("lxc") + page.title = _("LXC Containers") + page.order = 70 + + page = entry({"admin", "services", "lxc_create"}, call("lxc_create"), nil) + page.leaf = true + + page = entry({"admin", "services", "lxc_action"}, call("lxc_action"), nil) + page.leaf = true + + page = entry({"admin", "services", "lxc_get_downloadable"}, call("lxc_get_downloadable"), nil) + page.leaf = true + + page = entry({"admin", "services", "lxc_configuration_get"}, call("lxc_configuration_get"), nil) + page.leaf = true + + page = entry({"admin", "services", "lxc_configuration_set"}, call("lxc_configuration_set"), nil) + page.leaf = true + +end + +function lxc_get_downloadable() + luci.http.prepare_content("application/json") + + local f = io.popen('uname -m', 'r') + local target = f:read('*a') + f:close() + target = target:gsub("^%s*(.-)%s*$", "%1") + + local templates = {} + + local f = io.popen('lxc-create -n just_want_to_list_available_lxc_templates -t download -- --list', 'r') + + for line in f:lines() do + local dist,version = line:match("^(%S+)%s+(%S+)%s+" .. target .. "%s+default%s+%S+$") + if dist~=nil and version~=nil then templates[#templates + 1] = dist .. ":" .. version end + end + + f:close() + luci.http.write_json(templates) +end + +function lxc_create(lxc_name, lxc_template) + luci.http.prepare_content("text/plain") + + local uci = require("uci").cursor() + + local url = uci:get("lxc", "lxc", "url") + + if not pcall(dofile, "/etc/openwrt_release") then + return luci.http.write("1") + end + + local f = io.popen('uname -m', 'r') + local target = f:read('*a') + f:close() + target = target:gsub("^%s*(.-)%s*$", "%1") + + local lxc_dist = lxc_template:gsub("(.*):(.*)", '%1') + local lxc_release = lxc_template:gsub("(.*):(.*)", '%2') + + local data = conn:call("lxc", "create", { name = lxc_name, template = "download", args = { "--server", url, "--no-validate", "--dist", lxc_dist, "--release", lxc_release, "--arch", target } } ) + + luci.http.write(data) +end + +function lxc_action(lxc_action, lxc_name) + luci.http.prepare_content("application/json") + + local data, ec = conn:call("lxc", lxc_action, lxc_name and { name = lxc_name} or {} ) + + luci.http.write_json(ec and {} or data) +end + +function lxc_get_config_path() + local f = io.open("/etc/lxc/lxc.conf", "r") + local content = f:read("*all") + f:close() + local ret = content:match('^%s*lxc.lxcpath%s*=%s*([^%s]*)') + if ret then + return ret .. "/" + else + return "/srv/lxc/" + end +end + +function lxc_configuration_get(lxc_name) + luci.http.prepare_content("text/plain") + + local f = io.open(lxc_get_config_path() .. lxc_name .. "/config", "r") + local content = f:read("*all") + f:close() + + luci.http.write(content) +end + +function lxc_configuration_set(lxc_name) + luci.http.prepare_content("text/plain") + + local lxc_configuration = luci.http.formvalue("lxc_configuration") + + if lxc_configuration == nil then + return luci.http.write("1") + end + + local f, err = io.open(lxc_get_config_path() .. lxc_name .. "/config","w+") + if not f then + return luci.http.write("2") + end + + f:write(lxc_configuration) + f:close() + + luci.http.write("0") +end + diff --git a/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua b/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua new file mode 100644 index 000000000..ac0fdff33 --- /dev/null +++ b/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua @@ -0,0 +1,31 @@ +--[[ + +LuCI LXC module + +Copyright (C) 2014, Cisco Systems, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Author: Petar Koretic <petar.koretic@sartura.hr> + +]]-- + +local fs = require "nixio.fs" + +m = Map("lxc", translate("LXC Containers")) + +if fs.access("/etc/config/lxc") then + m:section(SimpleSection).template = "lxc" + + s = m:section(TypedSection, "lxc", translate("Options")) + s.anonymous = true + s.addremove = false + + s:option(Value, "url", translate("Containers URL")) +end + +return m diff --git a/applications/luci-app-lxc/luasrc/view/lxc.htm b/applications/luci-app-lxc/luasrc/view/lxc.htm new file mode 100644 index 000000000..edfff8e06 --- /dev/null +++ b/applications/luci-app-lxc/luasrc/view/lxc.htm @@ -0,0 +1,458 @@ +<%# + +LuCI LXC module + +Copyright (C) 2014, Cisco Systems, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Author: Petar Koretic <petar.koretic@sartura.hr> + +-%> + +<fieldset class="cbi-section"> + <legend><%:Available Containers%></legend> + <div class="cbi-section-node"> + <table id="t_lxc_list" class="cbi-section-table"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell"><%:Name%></th> + <th class="cbi-section-table-cell"><%:Status%></th> + <th class="cbi-section-table-cell"><%:Actions%></th> + </tr> + </table> + </div> +</fieldset> + +<fieldset class="cbi-section"> + <span id="lxc-list-output"></span> +</fieldset> + +<hr/> +<fieldset class="cbi-section"> + <legend><%:Create New Container%></legend> + <div class="cbi-section-node"> + <table id="t_lxc_create" class="cbi-section-table"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell"><%:Name%></th> + <th class="cbi-section-table-cell"><%:Template%></th> + <th class="cbi-section-table-cell"><%:Actions%></th> + </tr> + <tr id="tr_holder"> + <td> + <input type="text" id="tx_name" placeholder="<%:Enter new name%>" value='' /> + </td> + <td> + <select id="s_template" class="cbi-input-select cbi-button"> + </select> + </td> + <td> + <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create(tr_holder)" class="cbi-button cbi-button-add" /> + <span id="lxc-add-loader" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span> + </td> + </tr> + </table> + </div> +</fieldset> + +<fieldset class="cbi-section"> + <span id="lxc-add-output"></span> +</fieldset> + +<hr/> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + + window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" } + window.states = { "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple"} + + var t_lxc_list = document.getElementById('t_lxc_list'); + var loader_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> '; + var timeout_msg = 0 + var output_list = document.getElementById("lxc-list-output") + var output_add = document.getElementById("lxc-add-output") + var loader_add = document.getElementById("lxc-add-loader") + + function lxc_create(tr) + { + var lxc_name = tr.querySelector("#tx_name").value.trim() + var lxc_template = tr.querySelector("#s_template").value + var bt_create = tr.querySelector("#bt_create") + + if (t_lxc_list.querySelector("[data-id='" + lxc_name + "']") != null) + return info_message(output_add, "Container with that name already exists!", 4000) + + bt_create.disabled = true + output_add.innerHTML = '' + + if (!lxc_name || !lxc_name.length) + { + bt_create.disabled = false + return info_message(output_add, "Name cannot be empty!", 4000) + } + + loading(loader_add) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_create/' + '%h/%h'.format(lxc_name, lxc_template) , null, + function(x) + { + bt_create.disabled = false + loading(loader_add, 0) + + if (!x) + info_message(output_add, "Container creation failed!") + }) + } + + function lxc_create_template(lxc_name, lxc_state) + { + var info_row = t_lxc_list.querySelector("#empty") + if (info_row) + t_lxc_list.deleteRow(1) + + var actions = '' + actions += '<input type="button" onclick="action_handler(this)" data-action="start" value="<%:Start%>" class="cbi-button cbi-button-apply" />' + actions+= '<input type="button" onclick="action_handler(this)" data-action="stop" value="<%:Stop%>" class="cbi-button cbi-button-reset" />' + actions+= '<input type="button" onclick="action_handler(this)" data-action="destroy" value="<%:Delete%>" class="cbi-button cbi-button-remove" />' + actions+= ' <select class="cbi-input-select cbi-button" onchange="action_more_handler(this)">\ + <option selected disabled>more</option>\ + <option>configure</option>\ + <option>freeze</option>\ + <option>unfreeze</option>\ + <option>reboot</option>\ + </select>' + actions+= '<span data-loader style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>' + + var row = t_lxc_list.insertRow(-1) + var cell = row.insertCell(-1) + cell.innerHTML = '%q%h%q'.format("<strong>", lxc_name, "</strong>") + cell.width = "30%" + cell.setAttribute("data-id", lxc_name) + + cell = row.insertCell(-1) + cell.width = "20%" + cell.innerHTML = "<img src='"+window.img[lxc_state]+"'/>" + + cell = row.insertCell(-1) + cell.width = "50%" + cell.innerHTML = actions + } + + function action_handler(self) + { + var action = self.getAttribute("data-action"); + + var bt_action = self + var lxc_name = self.parentNode.parentNode.children[0].getAttribute('data-id') + var status_img = self.parentNode.parentNode.querySelector('img') + var loader = self.parentNode.querySelector('[data-loader]') + + bt_action.disabled = true + + if (action == "stop") + { + loading(loader) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + bt_action.disabled = false + + if (!x || ec) + return info_message(output_list,"Action failed!") + + set_status(status_img, "red") + + }); + } + + else if (action == "start") + { + loading(loader) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null, + function(x, data) + { + loading(loader, 0) + bt_action.disabled = false + + //FIXME: uncomment after fixing 'lxc-start' + if (!x /*|| ec */) + return info_message(output_list,"Action failed!") + + //FIXME: uncomment after fixing 'lxc-start' + //set_status(status_img, "green") + }); + } + + else if (action == "destroy") + { + if (!confirm("This will completely remove LXC container from the disk. Are you sure? (container will be stopped if running)")) + return + + loading(loader) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + bt_action.disabled = false + + if (!x || ec) + return info_message(output_list,"Action failed!") + + var row = self.parentNode.parentNode + row.parentNode.removeChild(row) + + }); + } + } + + function lxc_configure_handler(self) + { + var td = self.parentNode + var textarea = td.querySelector('[data-id]') + var lxc_name = textarea.getAttribute('data-id') + var lxc_configuration = textarea.value + + new XHR().post('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_set/' + lxc_name, "lxc_configuration=" + encodeURIComponent(lxc_configuration) , + function(x) + { + if (!x || x.responseText != "0") + return info_message(output_list,"Action failed!") + + info_message(output_list,"LXC configuration updated") + var row = td.parentNode + row.parentNode.removeChild(row) + }) + } + + function lxc_rename_template(lxc_name) + { + var h = '\ + <input data-id="'+ lxc_name + '" type="text" placeholder="Enter new name" /> \ + <input data-id="bt_confirm" onclick="lxc_rename_handler(this)" type="button" class="cbi-button" value="Confirm" />' + + return h + } + + function lxc_configure_template(lxc_name, lxc_configuration) + { + var h = '\ + <textarea data-id="'+ lxc_name + '" rows="20" style="width:100%">'+ lxc_configuration +'</textarea> \ + <input data-id="bt_confirm" onclick="lxc_configure_handler(this)" type="button" class="cbi-button" value="Confirm" />' + + return h + } + + function action_more_handler(self) + { + var lxc_name = self.parentNode.parentNode.querySelector('[data-id]').getAttribute('data-id') + var loader = self.parentNode.parentNode.querySelector('[data-loader]') + + var option = self.options[self.selectedIndex].text + + self.value = "more" + + switch (option) + { + case "configure": + var tr = document.createElement('tr') + var row = self.parentNode.parentNode + var next_row = row.nextSibling + if (next_row && next_row.getAttribute('data-action') !== null) + row.parentNode.removeChild(next_row) + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_get/' + lxc_name, null, + function(x) + { + tr.innerHTML="<td colspan='" + row.cells.length + "'>" + lxc_configure_template(lxc_name, x.responseText) + "</td>" + tr.setAttribute('data-action','') + row.parentNode.insertBefore(tr, row.nextSibling) + }) + + break + + case "freeze": + var tr = self.parentNode.parentNode + var img = tr.querySelector('img') + if(img.getAttribute('src') != window.img["green"]) + return info_message(output_list,"Container is not running!") + + loading(loader) + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + if (!x || ec) + return info_message(output_list,"Action failed!") + + set_status(img, "purple") + }) + + break + + case "unfreeze": + var tr = self.parentNode.parentNode + var img = tr.querySelector('img') + + if(img.getAttribute('src') != window.img["purple"]) + return info_message(output_list,"Container is not frozen!") + + loading(loader) + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + if (!x || ec) + return info_message(output_list,"Action failed!") + + set_status(img, "green") + }) + + break + + case "reboot": + var tr = self.parentNode.parentNode + var img = tr.querySelector('img') + if(img.getAttribute('src') != window.img["green"]) + return info_message(output_list,"Container is not running!") + + if (!confirm("Are you sure?")) + return + + loading(loader) + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null, + function(x, ec) + { + loading(loader, 0) + if (!x || ec) + return info_message(output_list,"Action failed!") + + info_message(output_list,"LXC rebooted") + }) + break + } + + } + + function set_empty(t_lxc_list) + { + if (document.getElementById('empty') !== null) + return + + var row_count = t_lxc_list.rows.length; + while(--row_count) t_lxc_list.deleteRow(row_count); + + var row = t_lxc_list.insertRow(-1); + row.id = 'empty' + var cell = row.insertCell(0); + cell.colSpan = 4; + cell.innerHTML = '<em><br />There are no containers available yet.</em>'; + } + + function lxc_list_update() + { + XHR.poll(4, '<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/list', null, + function(x, data) + { + if (!x) return; + + var lxc_count = Object.keys(data).length + if (!data || !lxc_count) + return set_empty(t_lxc_list) + + if (document.getElementById('empty') !== null) + t_lxc_list.deleteRow(1); + + var lxcs = t_lxc_list.querySelectorAll('td[data-id]') + var lxc_name_table = {} + for (var i = 0, len = lxcs.length; i < len; i++) + { + var lxc_name = lxcs[i].getAttribute('data-id') + if (!(lxc_name in data)) + { + var row = t_lxc_list.querySelector("[data-id='" + lxc_name + "']").parentNode + row.parentNode.removeChild(row) + continue + } + + lxc_name_table[lxc_name] = lxcs[i].parentNode.querySelector('img') + } + + for(var key in data) + { + var lxc_name = key + var state = window.states[data[key]] + + if (!(lxc_name in lxc_name_table)) + lxc_create_template(lxc_name, state) + + else if (state != get_status(lxc_name_table[lxc_name])) + set_status(lxc_name_table[lxc_name], state) + } + + }) + } + + function loading(elem, state) + { + state = (typeof state === 'undefined') ? 1 : state + + if (state === 1) + elem.innerHTML = loader_html + else + setTimeout(function() { elem.innerHTML = ''}, 1000) + } + + function set_status(elem, state) + { + state = (typeof state === 'undefined') ? 1 : state + + setTimeout(function() { elem.setAttribute('src', window.img[state])}, 300) + } + + function get_status(elem) + { + var src = elem.getAttribute('src') + + for (var i in img) + { + if (img[i] == src) + return i + } + } + + function info_message(output, msg, timeout) + { + timeout = timeout || 3000 + output.innerHTML = msg + clearTimeout(timeout_msg) + timeout_msg = setTimeout(function(){ output.innerHTML=""}, timeout); + } + + lxc_list_update() + + new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_get_downloadable', null, + function(x, data) + { + if (!x) return; + + var lxc_count = Object.keys(data).length + if (!data || !lxc_count) return; + var select = document.getElementById("s_template"); + for(var key in data) + { + var option = document.createElement('option'); + option.value = data[key]; + option.text = data[key].replace(/[_:]/g, ' '); + select.add(option, -1); + } + }) + +//]]></script> diff --git a/applications/luci-app-lxc/root/etc/config/lxc b/applications/luci-app-lxc/root/etc/config/lxc new file mode 100644 index 000000000..5572c735f --- /dev/null +++ b/applications/luci-app-lxc/root/etc/config/lxc @@ -0,0 +1,6 @@ +# +# lxc uci configuration +# + +config lxc 'lxc' + option url 'virtualwrt.org/containers/' diff --git a/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua b/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua index 68f7a5a25..62ce25eff 100644 --- a/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua +++ b/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua @@ -103,10 +103,7 @@ uci:foreach("wireless", "wifi-device", function(section) -- Channel selection - if hwtype == "atheros" then - local cc = util.trim(sys.exec("grep -i '" .. syscc .. "' /lib/wifi/cc_translate.txt |cut -d ' ' -f 2")) or 0 - sys.exec('"echo " .. cc .. " > /proc/sys/dev/" .. device .. "/countrycode"') - elseif hwtype == "mac80211" then + if hwtype == "mac80211" then sys.exec("iw reg set " .. syscc) elseif hwtype == "broadcom" then sys.exec ("wlc country " .. syscc) diff --git a/applications/luci-app-meshwizard/po/pt-br/meshwizard.po b/applications/luci-app-meshwizard/po/pt-br/meshwizard.po index a2238e52e..9421e0253 100644 --- a/applications/luci-app-meshwizard/po/pt-br/meshwizard.po +++ b/applications/luci-app-meshwizard/po/pt-br/meshwizard.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-10-11 00:23+0200\n" -"PO-Revision-Date: 2014-03-17 10:01+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-20 18:00-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "Activate or deactivate IPv6 config globally." msgstr "Habilita e desabilita a configuração IPv6 globalmente." @@ -70,7 +70,6 @@ msgstr "Endereço IPv6 da rede em malha" msgid "Mesh Wizard" msgstr "Assistente de Configuração da Rede em Malha" -#, fuzzy msgid "" "Note: this will set up this interface for mesh operation, i.e. add it to " "zone 'freifunk' and enable olsr." diff --git a/applications/luci-app-minidlna/root/etc/uci-defaults/40_luci-minidlna b/applications/luci-app-minidlna/root/etc/uci-defaults/40_luci-minidlna index df43c1b37..47570307b 100755 --- a/applications/luci-app-minidlna/root/etc/uci-defaults/40_luci-minidlna +++ b/applications/luci-app-minidlna/root/etc/uci-defaults/40_luci-minidlna @@ -1,10 +1,5 @@ #!/bin/sh -/etc/init.d/minidlna enabled && { - /etc/init.d/minidlna stop - /etc/init.d/minidlna disable -} - uci -q batch <<-EOF >/dev/null delete ucitrack.minidlna set ucitrack.minidlna=minidlna diff --git a/applications/luci-app-mjpg-streamer/po/ja/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/ja/mjpg-streamer.po new file mode 100644 index 000000000..7da344461 --- /dev/null +++ b/applications/luci-app-mjpg-streamer/po/ja/mjpg-streamer.po @@ -0,0 +1,171 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"X-Generator: Poedit 1.8.11\n" + +msgid "Allow ringbuffer to exceed limit by this amount" +msgstr "リングバッファーがこの量だけ制限を超過することを許可します。" + +msgid "Ask for username and password on connect" +msgstr "接続時にユーザー名とパスワードを確認します。" + +msgid "Authentication required" +msgstr "認証が必要" + +msgid "Auto" +msgstr "自動" + +msgid "Automatic disabling of MJPEG mode" +msgstr "MJPEGモードの自動無効化" + +msgid "Blink" +msgstr "点滅" + +msgid "Check to save the stream to an mjpeg file" +msgstr "MJPEGファイルに保存するにはチェックします。" + +msgid "Command to run" +msgstr "実行するコマンド" + +msgid "Device" +msgstr "デバイス" + +msgid "Do not initalize dynctrls of Linux-UVC driver" +msgstr "Linux-UVCドライバのdynctrlsを初期化しません。" + +msgid "Don't initalize dynctrls" +msgstr "dynctrlsを初期化しない" + +msgid "Drop frames smaller then this limit" +msgstr "この制限よりも小さいフレームをドロップする" + +msgid "Enable MJPG-streamer" +msgstr "MJPG-streamerを有効化します。" + +msgid "Enable YUYV format" +msgstr "YUYV形式を有効化" + +msgid "Enabled" +msgstr "有効" + +msgid "Exceed" +msgstr "超過" + +msgid "" +"Execute command after saving picture. Mjpg-streamer parse the filename as " +"first parameter to your script." +msgstr "" +"画像保存後にコマンドを実行します。Mjpg-streamerは、ファイル名をスクリプトの最" +"初の引数として解釈します。" + +msgid "File input" +msgstr "ファイル入力" + +msgid "File output" +msgstr "ファイル出力" + +msgid "Folder" +msgstr "フォルダー" + +msgid "Folder that contains webpages" +msgstr "ウェブページを含むフォルダー" + +msgid "Frames per second" +msgstr "1秒当たりのフレーム数" + +msgid "General" +msgstr "一般設定" + +msgid "HTTP output" +msgstr "HTTP 出力" + +msgid "Input plugin" +msgstr "入力プラグイン" + +msgid "Interval between saving pictures" +msgstr "画像の保存間隔" + +msgid "JPEG compression quality" +msgstr "JPEG 圧縮品質" + +msgid "Led control" +msgstr "LED 制御" + +msgid "MJPG-streamer" +msgstr "MJPG-streamer" + +msgid "Max. number of pictures to hold" +msgstr "保持する画像の最大数です。" + +msgid "Mjpeg output" +msgstr "MJPEG 出力" + +msgid "Off" +msgstr "消灯" + +msgid "On" +msgstr "点灯" + +msgid "Output plugin" +msgstr "出力プラグイン" + +msgid "Password" +msgstr "パスワード" + +msgid "Plugin settings" +msgstr "プラグイン設定" + +msgid "Port" +msgstr "ポート" + +msgid "Resolution" +msgstr "解像度" + +msgid "Ring buffer size" +msgstr "リングバッファー サイズ" + +msgid "Set folder to save pictures" +msgstr "画像を保存するフォルダーを設定します。" + +msgid "Set the inteval in millisecond" +msgstr "間隔をミリ秒で設定します。" + +msgid "" +"Set the minimum size if the webcam produces small-sized garbage frames. May " +"happen under low light conditions" +msgstr "" +"もしウェブカメラが小さなサイズの余分なフレームを生成する場合は、最小サイズを" +"設定します。光量の低い条件下で発生することがあります。" + +msgid "" +"Set the quality in percent. This setting activates YUYV format, disables " +"MJPEG" +msgstr "" +"品質をパーセントで設定します。この設定はYUYV形式を有効にし、MJPEGを無効にしま" +"す。" + +msgid "TCP port for this HTTP server" +msgstr "このHTTPサーバーのTCPポートです。" + +msgid "UVC input" +msgstr "UVC 入力" + +msgid "Username" +msgstr "ユーザー名" + +msgid "WWW folder" +msgstr "WWW フォルダー" + +msgid "" +"mjpg streamer is a streaming application for Linux-UVC compatible webcams" +msgstr "" +"Mjpg streamerは、Linux-UVC互換ウェブカメラのためのストリーミング アプリケー" +"ションです。" diff --git a/applications/luci-app-mjpg-streamer/po/pt-br/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/pt-br/mjpg-streamer.po new file mode 100644 index 000000000..28bfa186b --- /dev/null +++ b/applications/luci-app-mjpg-streamer/po/pt-br/mjpg-streamer.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Allow ringbuffer to exceed limit by this amount" +msgstr "Permitir que o buffer em anel exceda o limite por essa quantidade" + +msgid "Ask for username and password on connect" +msgstr "Pergunte por um usuário e senha na conexão" + +msgid "Authentication required" +msgstr "Requer autenticação" + +msgid "Auto" +msgstr "Automático" + +msgid "Automatic disabling of MJPEG mode" +msgstr "Desativação automática do modo MJPEG" + +msgid "Blink" +msgstr "Pisca" + +msgid "Check to save the stream to an mjpeg file" +msgstr "Marque para salvar o fluxo em um arquivo MJPEG" + +msgid "Command to run" +msgstr "Comando para executar:" + +msgid "Device" +msgstr "Dispositivo" + +msgid "Do not initalize dynctrls of Linux-UVC driver" +msgstr "Não inicie o dynctrls do driver do Linux-UVC" + +msgid "Don't initalize dynctrls" +msgstr "Não inicia o dynctrls" + +msgid "Drop frames smaller then this limit" +msgstr "Descarte quadros menores que este limite" + +msgid "Enable MJPG-streamer" +msgstr "Ativa o MJPG-streamer" + +msgid "Enable YUYV format" +msgstr "Ativar Formato YUYV" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "Exceed" +msgstr "Ultrapassado" + +msgid "" +"Execute command after saving picture. Mjpg-streamer parse the filename as " +"first parameter to your script." +msgstr "" +"Execute o comando depois de salvar a imagem. Mjpg-streamer passa o nome do " +"arquivo como primeiro parâmetro para o comando." + +msgid "File input" +msgstr "Entrada do arquivo" + +msgid "File output" +msgstr "Saída do arquivo" + +msgid "Folder" +msgstr "Pasta" + +msgid "Folder that contains webpages" +msgstr "Pasta que contém páginas web" + +msgid "Frames per second" +msgstr "Quadros por segundos" + +msgid "General" +msgstr "Geral" + +msgid "HTTP output" +msgstr "Saída HTTP" + +msgid "Input plugin" +msgstr "Plugins de entrada" + +msgid "Interval between saving pictures" +msgstr "Intervalo entre o salvamento das imagens" + +msgid "JPEG compression quality" +msgstr "Qualidade da compressão JPEG" + +msgid "Led control" +msgstr "Controle de LED" + +msgid "MJPG-streamer" +msgstr "MJPG-streamer" + +msgid "Max. number of pictures to hold" +msgstr "Número máximo de imagens a serem mantidas" + +msgid "Mjpeg output" +msgstr "Saída Mjpeg" + +msgid "Off" +msgstr "Desligado" + +msgid "On" +msgstr "Ligado" + +msgid "Output plugin" +msgstr "Plugin de saída" + +msgid "Password" +msgstr "Senha" + +msgid "Plugin settings" +msgstr "Configurações do Plugin" + +msgid "Port" +msgstr "Porta" + +msgid "Resolution" +msgstr "Resolução" + +msgid "Ring buffer size" +msgstr "Tamanho do buffer em anel" + +msgid "Set folder to save pictures" +msgstr "Definir pasta para salvas as imagens" + +msgid "Set the inteval in millisecond" +msgstr "Defina o intervalo em milisegundos" + +msgid "" +"Set the minimum size if the webcam produces small-sized garbage frames. May " +"happen under low light conditions" +msgstr "" +"Defina o tamanho mínimo se a webcam produz quadros lixo de tamanho pequeno. " +"Pode acontecer sob condições de pouca luz" + +msgid "" +"Set the quality in percent. This setting activates YUYV format, disables " +"MJPEG" +msgstr "" +"Defina a qualidade em porcentagem. Esta definição ativa o formato YUYV, " +"desativa MJPEG" + +msgid "TCP port for this HTTP server" +msgstr "Porta TCP para este servidor HTTP" + +msgid "UVC input" +msgstr "Dispositivo UVC de entrada" + +msgid "Username" +msgstr "Usuário" + +msgid "WWW folder" +msgstr "Pasta WWW" + +msgid "" +"mjpg streamer is a streaming application for Linux-UVC compatible webcams" +msgstr "" +"Mjpg streamer é uma aplicação de streaming para webcams compatíveis com o " +"Linux-UVC" diff --git a/applications/luci-app-mwan3/Makefile b/applications/luci-app-mwan3/Makefile new file mode 100644 index 000000000..d65cd3af1 --- /dev/null +++ b/applications/luci-app-mwan3/Makefile @@ -0,0 +1,19 @@ +# +# Copyright (C) 2017 Dan Luedtke <mail@danrl.com> +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for the MWAN3 multiwan hotplug script +LUCI_DEPENDS:=+mwan3 +luci-mod-admin-full +luci-app-firewall +luci-lib-nixio +LUCI_PKGARCH:=all +PKG_LICENSE:=GPLv2 + +PKG_MAINTAINER:=Aedan Renner <chipdankly@gmail.com> \ + Florian Eckert <fe@dev.tdt.de> + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-mwan3/luasrc/controller/mwan3.lua b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua new file mode 100644 index 000000000..d3fd15069 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua @@ -0,0 +1,331 @@ +module("luci.controller.mwan3", package.seeall) + +sys = require "luci.sys" +ut = require "luci.util" + +ip = "/usr/bin/ip -4 " + +function index() + if not nixio.fs.access("/etc/config/mwan3") then + return + end + + entry({"admin", "network", "mwan"}, + alias("admin", "network", "mwan", "overview"), + _("Load Balancing"), 600) + + entry({"admin", "network", "mwan", "overview"}, + alias("admin", "network", "mwan", "overview", "overview_interface"), + _("Overview"), 10) + entry({"admin", "network", "mwan", "overview", "overview_interface"}, + template("mwan/overview_interface")) + entry({"admin", "network", "mwan", "overview", "interface_status"}, + call("interfaceStatus")) + entry({"admin", "network", "mwan", "overview", "overview_detailed"}, + template("mwan/overview_detailed")) + entry({"admin", "network", "mwan", "overview", "detailed_status"}, + call("detailedStatus")) + + entry({"admin", "network", "mwan", "configuration"}, + alias("admin", "network", "mwan", "configuration", "interface"), + _("Configuration"), 20) + entry({"admin", "network", "mwan", "configuration", "interface"}, + arcombine(cbi("mwan/interface"), cbi("mwan/interfaceconfig")), + _("Interfaces"), 10).leaf = true + entry({"admin", "network", "mwan", "configuration", "member"}, + arcombine(cbi("mwan/member"), cbi("mwan/memberconfig")), + _("Members"), 20).leaf = true + entry({"admin", "network", "mwan", "configuration", "policy"}, + arcombine(cbi("mwan/policy"), cbi("mwan/policyconfig")), + _("Policies"), 30).leaf = true + entry({"admin", "network", "mwan", "configuration", "rule"}, + arcombine(cbi("mwan/rule"), cbi("mwan/ruleconfig")), + _("Rules"), 40).leaf = true + + entry({"admin", "network", "mwan", "advanced"}, + alias("admin", "network", "mwan", "advanced", "hotplugscript"), + _("Advanced"), 100) + entry({"admin", "network", "mwan", "advanced", "hotplugscript"}, + form("mwan/advanced_hotplugscript")) + entry({"admin", "network", "mwan", "advanced", "mwanconfig"}, + form("mwan/advanced_mwanconfig")) + entry({"admin", "network", "mwan", "advanced", "networkconfig"}, + form("mwan/advanced_networkconfig")) + entry({"admin", "network", "mwan", "advanced", "wirelessconfig"}, + form("mwan/advanced_wirelessconfig")) + entry({"admin", "network", "mwan", "advanced", "diagnostics"}, + template("mwan/advanced_diagnostics")) + entry({"admin", "network", "mwan", "advanced", "diagnostics_display"}, + call("diagnosticsData"), nil).leaf = true + entry({"admin", "network", "mwan", "advanced", "troubleshooting"}, + template("mwan/advanced_troubleshooting")) + entry({"admin", "network", "mwan", "advanced", "troubleshooting_display"}, + call("troubleshootingData")) +end + +function getInterfaceStatus(ruleNumber, interfaceName) + if ut.trim(sys.exec("uci -q -p /var/state get mwan3." .. interfaceName .. ".enabled")) == "1" then + if ut.trim(sys.exec(ip .. "route list table " .. ruleNumber)) ~= "" then + if ut.trim(sys.exec("uci -q -p /var/state get mwan3." .. interfaceName .. ".track_ip")) ~= "" then + return "online" + else + return "notMonitored" + end + else + return "offline" + end + else + return "notEnabled" + end +end + +function getInterfaceName() + local ruleNumber, status = 0, "" + uci.cursor():foreach("mwan3", "interface", + function (section) + ruleNumber = ruleNumber+1 + status = status .. section[".name"] .. "[" .. getInterfaceStatus(ruleNumber, section[".name"]) .. "]" + end + ) + return status +end + +function interfaceStatus() + local ntm = require "luci.model.network".init() + + local mArray = {} + + -- overview status + local statusString = getInterfaceName() + if statusString ~= "" then + mArray.wans = {} + wansid = {} + + for wanName, interfaceState in string.gfind(statusString, "([^%[]+)%[([^%]]+)%]") do + local wanInterfaceName = ut.trim(sys.exec("uci -q -p /var/state get network." .. wanName .. ".ifname")) + if wanInterfaceName == "" then + wanInterfaceName = "X" + end + local wanDeviceLink = ntm:get_interface(wanInterfaceName) + wanDeviceLink = wanDeviceLink and wanDeviceLink:get_network() + wanDeviceLink = wanDeviceLink and wanDeviceLink:adminlink() or "#" + wansid[wanName] = #mArray.wans + 1 + mArray.wans[wansid[wanName]] = { name = wanName, link = wanDeviceLink, ifname = wanInterfaceName, status = interfaceState } + end + end + + -- overview status log + local mwanLog = ut.trim(sys.exec("logread | grep mwan3 | tail -n 50 | sed 'x;1!H;$!d;x' 2>/dev/null")) + if mwanLog ~= "" then + mArray.mwanlog = { mwanLog } + end + + luci.http.prepare_content("application/json") + luci.http.write_json(mArray) +end + +function detailedStatus() + local mArray = {} + + -- detailed mwan status + local detailStatusInfo = ut.trim(sys.exec("/usr/sbin/mwan3 status")) + if detailStatusInfo ~= "" then + mArray.mwandetail = { detailStatusInfo } + end + + luci.http.prepare_content("application/json") + luci.http.write_json(mArray) +end + +function diagnosticsData(interface, tool, task) + function getInterfaceNumber() + local number = 0 + uci.cursor():foreach("mwan3", "interface", + function (section) + number = number+1 + if section[".name"] == interface then + interfaceNumber = number + end + end + ) + end + + local mArray = {} + + local results = "" + if tool == "service" then + os.execute("/usr/sbin/mwan3 " .. task) + if task == "restart" then + results = "MWAN3 restarted" + elseif task == "stop" then + results = "MWAN3 stopped" + else + results = "MWAN3 started" + end + else + local interfaceDevice = ut.trim(sys.exec("uci -q -p /var/state get network." .. interface .. ".ifname")) + if interfaceDevice ~= "" then + if tool == "ping" then + local gateway = ut.trim(sys.exec("route -n | awk '{if ($8 == \"" .. interfaceDevice .. "\" && $1 == \"0.0.0.0\" && $3 == \"0.0.0.0\") print $2}'")) + if gateway ~= "" then + if task == "gateway" then + local pingCommand = "ping -c 3 -W 2 -I " .. interfaceDevice .. " " .. gateway + results = pingCommand .. "\n\n" .. sys.exec(pingCommand) + else + local tracked = ut.trim(sys.exec("uci -q -p /var/state get mwan3." .. interface .. ".track_ip")) + if tracked ~= "" then + for z in tracked:gmatch("[^ ]+") do + local pingCommand = "ping -c 3 -W 2 -I " .. interfaceDevice .. " " .. z + results = results .. pingCommand .. "\n\n" .. sys.exec(pingCommand) .. "\n\n" + end + else + results = "No tracking IP addresses configured on " .. interface + end + end + else + results = "No default gateway for " .. interface .. " found. Default route does not exist or is configured incorrectly" + end + elseif tool == "rulechk" then + getInterfaceNumber() + local rule1 = sys.exec(ip .. "rule | grep $(echo $((" .. interfaceNumber .. " + 1000)))") + local rule2 = sys.exec(ip .. "rule | grep $(echo $((" .. interfaceNumber .. " + 2000)))") + if rule1 ~= "" and rule2 ~= "" then + results = "All required interface IP rules found:\n\n" .. rule1 .. rule2 + elseif rule1 ~= "" or rule2 ~= "" then + results = "Missing 1 of the 2 required interface IP rules\n\n\nRules found:\n\n" .. rule1 .. rule2 + else + results = "Missing both of the required interface IP rules" + end + elseif tool == "routechk" then + getInterfaceNumber() + local routeTable = sys.exec(ip .. "route list table " .. interfaceNumber) + if routeTable ~= "" then + results = "Interface routing table " .. interfaceNumber .. " was found:\n\n" .. routeTable + else + results = "Missing required interface routing table " .. interfaceNumber + end + elseif tool == "hotplug" then + if task == "ifup" then + os.execute("/usr/sbin/mwan3 ifup " .. interface) + results = "Hotplug ifup sent to interface " .. interface .. "..." + else + os.execute("/usr/sbin/mwan3 ifdown " .. interface) + results = "Hotplug ifdown sent to interface " .. interface .. "..." + end + end + else + results = "Unable to perform diagnostic tests on " .. interface .. ". There is no physical or virtual device associated with this interface" + end + end + if results ~= "" then + results = ut.trim(results) + mArray.diagnostics = { results } + end + + luci.http.prepare_content("application/json") + luci.http.write_json(mArray) +end + +function troubleshootingData() + local ver = require "luci.version" + + local mArray = {} + + -- software versions + local wrtRelease = ut.trim(ver.distversion) + if wrtRelease ~= "" then + wrtRelease = "OpenWrt - " .. wrtRelease + else + wrtRelease = "OpenWrt - unknown" + end + local luciRelease = ut.trim(ver.luciversion) + if luciRelease ~= "" then + luciRelease = "\nLuCI - " .. luciRelease + else + luciRelease = "\nLuCI - unknown" + end + local mwanVersion = ut.trim(sys.exec("opkg info mwan3 | grep Version | awk '{print $2}'")) + if mwanVersion ~= "" then + mwanVersion = "\n\nmwan3 - " .. mwanVersion + else + mwanVersion = "\n\nmwan3 - unknown" + end + local mwanLuciVersion = ut.trim(sys.exec("opkg info luci-app-mwan3 | grep Version | awk '{print $2}'")) + if mwanLuciVersion ~= "" then + mwanLuciVersion = "\nmwan3-luci - " .. mwanLuciVersion + else + mwanLuciVersion = "\nmwan3-luci - unknown" + end + mArray.versions = { wrtRelease .. luciRelease .. mwanVersion .. mwanLuciVersion } + + -- mwan config + local mwanConfig = ut.trim(sys.exec("cat /etc/config/mwan3")) + if mwanConfig == "" then + mwanConfig = "No data found" + end + mArray.mwanconfig = { mwanConfig } + + -- network config + local networkConfig = ut.trim(sys.exec("cat /etc/config/network | sed -e 's/.*username.*/ USERNAME HIDDEN/' -e 's/.*password.*/ PASSWORD HIDDEN/'")) + if networkConfig == "" then + networkConfig = "No data found" + end + mArray.netconfig = { networkConfig } + + -- wireless config + local wirelessConfig = ut.trim(sys.exec("cat /etc/config/wireless | sed -e 's/.*username.*/ USERNAME HIDDEN/' -e 's/.*password.*/ PASSWORD HIDDEN/' -e 's/.*key.*/ KEY HIDDEN/'")) + if wirelessConfig == "" then + wirelessConfig = "No data found" + end + mArray.wificonfig = { wirelessConfig } + + -- ifconfig + local ifconfig = ut.trim(sys.exec("ifconfig")) + if ifconfig == "" then + ifconfig = "No data found" + end + mArray.ifconfig = { ifconfig } + + -- route -n + local routeShow = ut.trim(sys.exec("route -n")) + if routeShow == "" then + routeShow = "No data found" + end + mArray.routeshow = { routeShow } + + -- ip rule show + local ipRuleShow = ut.trim(sys.exec(ip .. "rule show")) + if ipRuleShow == "" then + ipRuleShow = "No data found" + end + mArray.iprule = { ipRuleShow } + + -- ip route list table 1-250 + local routeList, routeString = ut.trim(sys.exec(ip .. "rule | sed 's/://g' 2>/dev/null | awk '$1>=2001 && $1<=2250' | awk '{print $NF}'")), "" + if routeList ~= "" then + for line in routeList:gmatch("[^\r\n]+") do + routeString = routeString .. line .. "\n" .. sys.exec(ip .. "route list table " .. line) + end + routeString = ut.trim(routeString) + else + routeString = "No data found" + end + mArray.routelist = { routeString } + + -- default firewall output policy + local firewallOut = ut.trim(sys.exec("uci -q -p /var/state get firewall.@defaults[0].output")) + if firewallOut == "" then + firewallOut = "No data found" + end + mArray.firewallout = { firewallOut } + + -- iptables + local iptables = ut.trim(sys.exec("iptables -L -t mangle -v -n")) + if iptables == "" then + iptables = "No data found" + end + mArray.iptables = { iptables } + + luci.http.prepare_content("application/json") + luci.http.write_json(mArray) +end diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua new file mode 100644 index 000000000..0e7b8b11d --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua @@ -0,0 +1,55 @@ +-- ------ hotplug script configuration ------ -- + +fs = require "nixio.fs" +sys = require "luci.sys" +ut = require "luci.util" + +script = "/etc/hotplug.d/iface/16-mwancustom" +scriptBackup = "/etc/hotplug.d/iface/16-mwancustombak" + +if luci.http.formvalue("cbid.luci.1._restorebak") then -- restore button has been clicked + luci.http.redirect(luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript") .. "?restore=yes") +elseif luci.http.formvalue("restore") == "yes" then -- restore script from backup + os.execute("cp -f " .. scriptBackup .. " " .. script) +end + + +m5 = SimpleForm("luci", nil) + m5:append(Template("mwan/advanced_hotplugscript")) -- highlight current tab + +f = m5:section(SimpleSection, nil, + translate("This section allows you to modify the contents of /etc/hotplug.d/iface/16-mwancustom<br />" .. + "This is useful for running system commands and/or scripts based on interface ifup or ifdown hotplug events<br /><br />" .. + "Notes:<br />" .. + "The first line of the script must be "#!/bin/sh" without quotes<br />" .. + "Lines beginning with # are comments and are not executed<br /><br />" .. + "Available variables:<br />" .. + "$ACTION is the hotplug event (ifup, ifdown)<br />" .. + "$INTERFACE is the interface name (wan1, wan2, etc.)<br />" .. + "$DEVICE is the device name attached to the interface (eth0.1, eth1, etc.)")) + + +restore = f:option(Button, "_restorebak", translate("Restore default hotplug script")) + restore.inputtitle = translate("Restore...") + restore.inputstyle = "apply" + +t = f:option(TextValue, "lines") + t.rmempty = true + t.rows = 20 + + function t.cfgvalue() + local hps = fs.readfile(script) + if not hps or hps == "" then -- if script does not exist or is blank restore from backup + sys.call("cp -f " .. scriptBackup .. " " .. script) + return fs.readfile(script) + else + return hps + end + end + + function t.write(self, section, data) -- format and write new data to script + return fs.writefile(script, ut.trim(data:gsub("\r\n", "\n")) .. "\n") + end + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_mwanconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_mwanconfig.lua new file mode 100644 index 000000000..e0a99e836 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_mwanconfig.lua @@ -0,0 +1,32 @@ +-- ------ mwan configuration ------ -- + +ut = require "luci.util" + +mwanConfig = "/etc/config/mwan3" + + +m5 = SimpleForm("luci", nil) + m5:append(Template("mwan/advanced_mwanconfig")) -- highlight current tab + + +f = m5:section(SimpleSection, nil, + translate("This section allows you to modify the contents of /etc/config/mwan3")) + +t = f:option(TextValue, "lines") + t.rmempty = true + t.rows = 20 + + function t.cfgvalue() + return nixio.fs.readfile(mwanConfig) or "" + end + + function t.write(self, section, data) -- format and write new data to script + return nixio.fs.writefile(mwanConfig, "\n" .. ut.trim(data:gsub("\r\n", "\n")) .. "\n") + end + + function f.handle(self, state, data) + return true + end + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_networkconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_networkconfig.lua new file mode 100644 index 000000000..b93d89751 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_networkconfig.lua @@ -0,0 +1,32 @@ +-- ------ network configuration ------ -- + +ut = require "luci.util" + +networkConfig = "/etc/config/network" + + +m5 = SimpleForm("networkconf", nil) + m5:append(Template("mwan/advanced_networkconfig")) -- highlight current tab + + +f = m5:section(SimpleSection, nil, + translate("This section allows you to modify the contents of /etc/config/network")) + +t = f:option(TextValue, "lines") + t.rmempty = true + t.rows = 20 + + function t.cfgvalue() + return nixio.fs.readfile(networkConfig) or "" + end + + function t.write(self, section, data) -- format and write new data to script + return nixio.fs.writefile(networkConfig, "\n" .. ut.trim(data:gsub("\r\n", "\n")) .. "\n") + end + + function f.handle(self, state, data) + return true + end + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_wirelessconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_wirelessconfig.lua new file mode 100644 index 000000000..95e9f7c7e --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_wirelessconfig.lua @@ -0,0 +1,32 @@ +-- ------ wireless configuration ------ -- + +ut = require "luci.util" + +wirelessConfig = "/etc/config/wireless" + + +m5 = SimpleForm("wirelessconf", nil) + m5:append(Template("mwan/advanced_wirelessconfig")) -- highlight current tab + + +f = m5:section(SimpleSection, nil, + translate("This section allows you to modify the contents of /etc/config/wireless")) + +t = f:option(TextValue, "lines") + t.rmempty = true + t.rows = 20 + + function t.cfgvalue() + return nixio.fs.readfile(wirelessConfig) or "" + end + + function t.write(self, section, data) -- format and write new data to script + return nixio.fs.writefile(wirelessConfig, "\n" .. ut.trim(data:gsub("\r\n", "\n")) .. "\n") + end + + function f.handle(self, state, data) + return true + end + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua new file mode 100644 index 000000000..7e863a371 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua @@ -0,0 +1,266 @@ +-- ------ extra functions ------ -- + +function interfaceCheck() -- find issues with too many interfaces, reliability and metric + uci.cursor():foreach("mwan3", "interface", + function (section) + local interfaceName = section[".name"] + interfaceNumber = interfaceNumber+1 -- count number of mwan interfaces configured + -- create list of metrics for none and duplicate checking + local metricValue = ut.trim(sys.exec("uci -p /var/state get network." .. interfaceName .. ".metric")) + if metricValue == "" then + errorFound = 1 + errorNoMetricList = errorNoMetricList .. interfaceName .. " " + else + metricList = metricList .. interfaceName .. " " .. metricValue .. "\n" + end + -- check if any interfaces have a higher reliability requirement than tracking IPs configured + local trackingNumber = tonumber(ut.trim(sys.exec("echo $(uci -p /var/state get mwan3." .. interfaceName .. ".track_ip) | wc -w"))) + if trackingNumber > 0 then + local reliabilityNumber = tonumber(ut.trim(sys.exec("uci -p /var/state get mwan3." .. interfaceName .. ".reliability"))) + if reliabilityNumber and reliabilityNumber > trackingNumber then + errorFound = 1 + errorReliabilityList = errorReliabilityList .. interfaceName .. " " + end + end + -- check if any interfaces are not properly configured in /etc/config/network or have no default route in main routing table + if ut.trim(sys.exec("uci -p /var/state get network." .. interfaceName)) == "interface" then + local interfaceDevice = ut.trim(sys.exec("uci -p /var/state get network." .. interfaceName .. ".ifname")) + if interfaceDevice == "uci: Entry not found" or interfaceDevice == "" then + errorFound = 1 + errorNetConfigList = errorNetConfigList .. interfaceName .. " " + errorRouteList = errorRouteList .. interfaceName .. " " + else + local routeCheck = ut.trim(sys.exec("route -n | awk '{if ($8 == \"" .. interfaceDevice .. "\" && $1 == \"0.0.0.0\" && $3 == \"0.0.0.0\") print $1}'")) + if routeCheck == "" then + errorFound = 1 + errorRouteList = errorRouteList .. interfaceName .. " " + end + end + else + errorFound = 1 + errorNetConfigList = errorNetConfigList .. interfaceName .. " " + errorRouteList = errorRouteList .. interfaceName .. " " + end + end + ) + -- check if any interfaces have duplicate metrics + local metricDuplicateNumbers = sys.exec("echo '" .. metricList .. "' | awk '{print $2}' | uniq -d") + if metricDuplicateNumbers ~= "" then + errorFound = 1 + local metricDuplicates = "" + for line in metricDuplicateNumbers:gmatch("[^\r\n]+") do + metricDuplicates = sys.exec("echo '" .. metricList .. "' | grep '" .. line .. "' | awk '{print $1}'") + errorDuplicateMetricList = errorDuplicateMetricList .. metricDuplicates + end + errorDuplicateMetricList = sys.exec("echo '" .. errorDuplicateMetricList .. "' | tr '\n' ' '") + end +end + +function interfaceWarnings() -- display status and warning messages at the top of the page + local warnings = "" + if interfaceNumber <= 250 then + warnings = "<strong>" .. translatef("There are currently %d of 250 supported interfaces configured", interfaceNumber) .. "</strong>" + else + warnings = "<font color=\"ff0000\"><strong>" .. translatef("WARNING: %d interfaces are configured exceeding the maximum of 250!", interfaceNumber) .. "</strong></font>" + end + if errorReliabilityList ~= " " then + warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: some interfaces have a higher reliability requirement than there are tracking IP addresses!") .. "</strong></font>" + end + if errorRouteList ~= " " then + warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: some interfaces have no default route in the main routing table!") .. "</strong></font>" + end + if errorNetConfigList ~= " " then + warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: some interfaces are configured incorrectly or not at all in /etc/config/network!") .. "</strong></font>" + end + if errorNoMetricList ~= " " then + warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: some interfaces have no metric configured in /etc/config/network!") .. "</strong></font>" + end + if errorDuplicateMetricList ~= " " then + warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: some interfaces have duplicate metrics configured in /etc/config/network!") .. "</strong></font>" + end + return warnings +end + +-- ------ interface configuration ------ -- + +dsp = require "luci.dispatcher" +sys = require "luci.sys" +ut = require "luci.util" + +interfaceNumber = 0 +metricList = "" +errorFound = 0 +errorDuplicateMetricList = " " +errorNetConfigList = " " +errorNoMetricList = " " +errorReliabilityList = " " +errorRouteList = " " +interfaceCheck() + + +m5 = Map("mwan3", translate("MWAN Interface Configuration"), + interfaceWarnings()) + m5:append(Template("mwan/config_css")) + + +mwan_interface = m5:section(TypedSection, "interface", translate("Interfaces"), + translate("MWAN supports up to 250 physical and/or logical interfaces<br />" .. + "MWAN requires that all interfaces have a unique metric configured in /etc/config/network<br />" .. + "Names must match the interface name found in /etc/config/network (see advanced tab)<br />" .. + "Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />" .. + "Interfaces may not share the same name as configured members, policies or rules")) + mwan_interface.addremove = true + mwan_interface.dynamic = false + mwan_interface.sectionhead = "Interface" + mwan_interface.sortable = true + mwan_interface.template = "cbi/tblsection" + mwan_interface.extedit = dsp.build_url("admin", "network", "mwan", "configuration", "interface", "%s") + function mwan_interface.create(self, section) + TypedSection.create(self, section) + m5.uci:save("mwan3") + luci.http.redirect(dsp.build_url("admin", "network", "mwan", "configuration", "interface", section)) + end + + +enabled = mwan_interface:option(DummyValue, "enabled", translate("Enabled")) + enabled.rawhtml = true + function enabled.cfgvalue(self, s) + if self.map:get(s, "enabled") == "1" then + return "Yes" + else + return "No" + end + end + +track_ip = mwan_interface:option(DummyValue, "track_ip", translate("Tracking IP")) + track_ip.rawhtml = true + function track_ip.cfgvalue(self, s) + tracked = self.map:get(s, "track_ip") + if tracked then + local ipList = "" + for k,v in pairs(tracked) do + ipList = ipList .. v .. "<br />" + end + return ipList + else + return "—" + end + end + +reliability = mwan_interface:option(DummyValue, "reliability", translate("Tracking reliability")) + reliability.rawhtml = true + function reliability.cfgvalue(self, s) + if tracked then + return self.map:get(s, "reliability") or "—" + else + return "—" + end + end + +count = mwan_interface:option(DummyValue, "count", translate("Ping count")) + count.rawhtml = true + function count.cfgvalue(self, s) + if tracked then + return self.map:get(s, "count") or "—" + else + return "—" + end + end + +timeout = mwan_interface:option(DummyValue, "timeout", translate("Ping timeout")) + timeout.rawhtml = true + function timeout.cfgvalue(self, s) + if tracked then + local timeoutValue = self.map:get(s, "timeout") + if timeoutValue then + return timeoutValue .. "s" + else + return "—" + end + else + return "—" + end + end + +interval = mwan_interface:option(DummyValue, "interval", translate("Ping interval")) + interval.rawhtml = true + function interval.cfgvalue(self, s) + if tracked then + local intervalValue = self.map:get(s, "interval") + if intervalValue then + return intervalValue .. "s" + else + return "—" + end + else + return "—" + end + end + +down = mwan_interface:option(DummyValue, "down", translate("Interface down")) + down.rawhtml = true + function down.cfgvalue(self, s) + if tracked then + return self.map:get(s, "down") or "—" + else + return "—" + end + end + +up = mwan_interface:option(DummyValue, "up", translate("Interface up")) + up.rawhtml = true + function up.cfgvalue(self, s) + if tracked then + return self.map:get(s, "up") or "—" + else + return "—" + end + end + +metric = mwan_interface:option(DummyValue, "metric", translate("Metric")) + metric.rawhtml = true + function metric.cfgvalue(self, s) + local metricValue = sys.exec("uci -p /var/state get network." .. s .. ".metric") + if metricValue ~= "" then + return metricValue + else + return "—" + end + end + +errors = mwan_interface:option(DummyValue, "errors", translate("Errors")) + errors.rawhtml = true + function errors.cfgvalue(self, s) + if errorFound == 1 then + local mouseOver, lineBreak = "", "" + if string.find(errorReliabilityList, " " .. s .. " ") then + mouseOver = "Higher reliability requirement than there are tracking IP addresses" + lineBreak = " " + end + if string.find(errorRouteList, " " .. s .. " ") then + mouseOver = mouseOver .. lineBreak .. "No default route in the main routing table" + lineBreak = " " + end + if string.find(errorNetConfigList, " " .. s .. " ") then + mouseOver = mouseOver .. lineBreak .. "Configured incorrectly or not at all in /etc/config/network" + lineBreak = " " + end + if string.find(errorNoMetricList, " " .. s .. " ") then + mouseOver = mouseOver .. lineBreak .. "No metric configured in /etc/config/network" + lineBreak = " " + end + if string.find(errorDuplicateMetricList, " " .. s .. " ") then + mouseOver = mouseOver .. lineBreak .. "Duplicate metric configured in /etc/config/network" + end + if mouseOver == "" then + return "" + else + return "<span title=\"" .. mouseOver .. "\"><img src=\"/luci-static/resources/cbi/reset.gif\" alt=\"error\"></img></span>" + end + else + return "" + end + end + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua new file mode 100644 index 000000000..e7c16fdfd --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua @@ -0,0 +1,250 @@ +-- ------ extra functions ------ -- + +function interfaceCheck() + metricValue = ut.trim(sys.exec("uci -p /var/state get network." .. arg[1] .. ".metric")) + if metricValue == "" then -- no metric + errorNoMetric = 1 + else -- if metric exists create list of interface metrics to compare against for duplicates + uci.cursor():foreach("mwan3", "interface", + function (section) + local metricValue = ut.trim(sys.exec("uci -p /var/state get network." .. section[".name"] .. ".metric")) + metricList = metricList .. section[".name"] .. " " .. metricValue .. "\n" + end + ) + -- compare metric against list + local metricDuplicateNumbers, metricDuplicates = sys.exec("echo '" .. metricList .. "' | awk '{print $2}' | uniq -d"), "" + for line in metricDuplicateNumbers:gmatch("[^\r\n]+") do + metricDuplicates = sys.exec("echo '" .. metricList .. "' | grep '" .. line .. "' | awk '{print $1}'") + errorDuplicateMetricList = errorDuplicateMetricList .. metricDuplicates + end + if sys.exec("echo '" .. errorDuplicateMetricList .. "' | grep -w " .. arg[1]) ~= "" then + errorDuplicateMetric = 1 + end + end + -- check if this interface has a higher reliability requirement than track IPs configured + local trackingNumber = tonumber(ut.trim(sys.exec("echo $(uci -p /var/state get mwan3." .. arg[1] .. ".track_ip) | wc -w"))) + if trackingNumber > 0 then + local reliabilityNumber = tonumber(ut.trim(sys.exec("uci -p /var/state get mwan3." .. arg[1] .. ".reliability"))) + if reliabilityNumber and reliabilityNumber > trackingNumber then + errorReliability = 1 + end + end + -- check if any interfaces are not properly configured in /etc/config/network or have no default route in main routing table + if ut.trim(sys.exec("uci -p /var/state get network." .. arg[1])) == "interface" then + local interfaceDevice = ut.trim(sys.exec("uci -p /var/state get network." .. arg[1] .. ".ifname")) + if interfaceDevice == "uci: Entry not found" or interfaceDevice == "" then + errorNetConfig = 1 + errorRoute = 1 + else + local routeCheck = ut.trim(sys.exec("route -n | awk '{if ($8 == \"" .. interfaceDevice .. "\" && $1 == \"0.0.0.0\" && $3 == \"0.0.0.0\") print $1}'")) + if routeCheck == "" then + errorRoute = 1 + end + end + else + errorNetConfig = 1 + errorRoute = 1 + end +end + +function interfaceWarnings() -- display warning messages at the top of the page + local warns, lineBreak = "", "" + if errorReliability == 1 then + warns = "<font color=\"ff0000\"><strong>" .. translate("WARNING: this interface has a higher reliability requirement than there are tracking IP addresses!") .. "</strong></font>" + lineBreak = "<br /><br />" + end + if errorRoute == 1 then + warns = warns .. lineBreak .. "<font color=\"ff0000\"><strong>" .. translate("WARNING: this interface has no default route in the main routing table!") .. "</strong></font>" + lineBreak = "<br /><br />" + end + if errorNetConfig == 1 then + warns = warns .. lineBreak .. "<font color=\"ff0000\"><strong>" .. translate("WARNING: this interface is configured incorrectly or not at all in /etc/config/network!") .. "</strong></font>" + lineBreak = "<br /><br />" + end + if errorNoMetric == 1 then + warns = warns .. lineBreak .. "<font color=\"ff0000\"><strong>" .. translate("WARNING: this interface has no metric configured in /etc/config/network!") .. "</strong></font>" + elseif errorDuplicateMetric == 1 then + warns = warns .. lineBreak .. "<font color=\"ff0000\"><strong>" .. translate("WARNING: this and other interfaces have duplicate metrics configured in /etc/config/network!") .. "</strong></font>" + end + return warns +end + +-- ------ interface configuration ------ -- + +dsp = require "luci.dispatcher" +sys = require "luci.sys" +ut = require "luci.util" +arg[1] = arg[1] or "" + +metricValue = "" +metricList = "" +errorDuplicateMetricList = "" +errorNoMetric = 0 +errorDuplicateMetric = 0 +errorRoute = 0 +errorNetConfig = 0 +errorReliability = 0 +interfaceCheck() + + +m5 = Map("mwan3", translatef("MWAN Interface Configuration - %s", arg[1]), + interfaceWarnings()) + m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "interface") + + +mwan_interface = m5:section(NamedSection, arg[1], "interface", "") + mwan_interface.addremove = false + mwan_interface.dynamic = false + + +enabled = mwan_interface:option(ListValue, "enabled", translate("Enabled")) + enabled.default = "1" + enabled:value("1", translate("Yes")) + enabled:value("0", translate("No")) + +family = mwan_interface:option(ListValue, "family", translate("Internet Protocol")) + family.default = "ipv4" + family:value("ipv4", translate("IPv4")) + family:value("ipv6", translate("IPv6")) + +track_ip = mwan_interface:option(DynamicList, "track_ip", translate("Tracking IP"), + translate("This IP address will be pinged to dermine if the link is up or down. Leave blank to assume interface is always online")) + track_ip.datatype = "ipaddr" + +reliability = mwan_interface:option(Value, "reliability", translate("Tracking reliability"), + translate("Acceptable values: 1-100. This many Tracking IP addresses must respond for the link to be deemed up")) + reliability.datatype = "range(1, 100)" + reliability.default = "1" + +count = mwan_interface:option(ListValue, "count", translate("Ping count")) + count.default = "1" + count:value("1") + count:value("2") + count:value("3") + count:value("4") + count:value("5") + +size = mwan_interface:option(Value, "size", translate("Ping size")) + size.default = "56" + size:value("8") + size:value("24") + size:value("56") + size:value("120") + size:value("248") + size:value("504") + size:value("1016") + size:value("1472") + size:value("2040") + size.datatype = "range(1, 65507)" + size.rmempty = false + size.optional = false + +timeout = mwan_interface:option(ListValue, "timeout", translate("Ping timeout")) + timeout.default = "2" + timeout:value("1", translatef("%d second", 1)) + timeout:value("2", translatef("%d seconds", 2)) + timeout:value("3", translatef("%d seconds", 3)) + timeout:value("4", translatef("%d seconds", 4)) + timeout:value("5", translatef("%d seconds", 5)) + timeout:value("6", translatef("%d seconds", 6)) + timeout:value("7", translatef("%d seconds", 7)) + timeout:value("8", translatef("%d seconds", 8)) + timeout:value("9", translatef("%d seconds", 9)) + timeout:value("10", translatef("%d seconds", 10)) + +interval = mwan_interface:option(ListValue, "interval", translate("Ping interval")) + interval.default = "5" + interval:value("1", translatef("%d second", 1)) + interval:value("3", translatef("%d seconds", 3)) + interval:value("5", translatef("%d seconds", 5)) + interval:value("10", translatef("%d seconds", 10)) + interval:value("20", translatef("%d seconds", 20)) + interval:value("30", translatef("%d seconds", 30)) + interval:value("60", translatef("%d minute", 1)) + interval:value("300", translatef("%d minutes", 5)) + interval:value("600", translatef("%d minutes", 10)) + interval:value("900", translatef("%d minutes", 15)) + interval:value("1800", translatef("%d minutes", 30)) + interval:value("3600", translatef("%d hour", 1)) + +failure = mwan_interface:option(Value, "failure_interval", translate("Failure interval"), + translate("Ping interval during failure detection")) + failure.default = "5" + failure:value("1", translatef("%d second", 1)) + failure:value("3", translatef("%d seconds", 3)) + failure:value("5", translatef("%d seconds", 5)) + failure:value("10", translatef("%d seconds", 10)) + failure:value("20", translatef("%d seconds", 20)) + failure:value("30", translatef("%d seconds", 30)) + failure:value("60", translatef("%d minute", 1)) + failure:value("300", translatef("%d minutes", 5)) + failure:value("600", translatef("%d minutes", 10)) + failure:value("900", translatef("%d minutes", 15)) + failure:value("1800", translatef("%d minutes", 30)) + failure:value("3600", translatef("%d hour", 1)) + +recovery = mwan_interface:option(Value, "recovery_interval", translate("Recovery interval"), + translate("Ping interval during failure recovering")) + recovery.default = "5" + recovery:value("1", translatef("%d second", 1)) + recovery:value("3", translatef("%d seconds", 3)) + recovery:value("5", translatef("%d seconds", 5)) + recovery:value("10", translatef("%d seconds", 10)) + recovery:value("20", translatef("%d seconds", 20)) + recovery:value("30", translatef("%d seconds", 30)) + recovery:value("60", translatef("%d minute", 1)) + recovery:value("300", translatef("%d minutes", 5)) + recovery:value("600", translatef("%d minutes", 10)) + recovery:value("900", translatef("%d minutes", 15)) + recovery:value("1800", translatef("%d minutes", 30)) + recovery:value("3600", translatef("%d hour", 1)) + +down = mwan_interface:option(ListValue, "down", translate("Interface down"), + translate("Interface will be deemed down after this many failed ping tests")) + down.default = "3" + down:value("1") + down:value("2") + down:value("3") + down:value("4") + down:value("5") + down:value("6") + down:value("7") + down:value("8") + down:value("9") + down:value("10") + +up = mwan_interface:option(ListValue, "up", translate("Interface up"), + translate("Downed interface will be deemed up after this many successful ping tests")) + up.default = "3" + up:value("1") + up:value("2") + up:value("3") + up:value("4") + up:value("5") + up:value("6") + up:value("7") + up:value("8") + up:value("9") + up:value("10") + +flush = mwan_interface:option(ListValue, "flush_conntrack", translate("Flush conntrack table"), + translate("Flush global firewall conntrack table on interface events")) + flush.default = "never" + flush:value("ifup", translate("ifup")) + flush:value("ifdown", translate("ifdown")) + flush:value("never", translate("never")) + flush:value("always", translate("always")) + +metric = mwan_interface:option(DummyValue, "metric", translate("Metric"), + translate("This displays the metric assigned to this interface in /etc/config/network")) + metric.rawhtml = true + function metric.cfgvalue(self, s) + if errorNoMetric == 0 then + return metricValue + else + return "—" + end + end + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua new file mode 100644 index 000000000..3bccbd942 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua @@ -0,0 +1,46 @@ +-- ------ member configuration ------ -- + +ds = require "luci.dispatcher" + + +m5 = Map("mwan3", translate("MWAN Member Configuration")) + m5:append(Template("mwan/config_css")) + + +mwan_member = m5:section(TypedSection, "member", translate("Members"), + translate("Members are profiles attaching a metric and weight to an MWAN interface<br />" .. + "Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />" .. + "Members may not share the same name as configured interfaces, policies or rules")) + mwan_member.addremove = true + mwan_member.dynamic = false + mwan_member.sectionhead = "Member" + mwan_member.sortable = true + mwan_member.template = "cbi/tblsection" + mwan_member.extedit = ds.build_url("admin", "network", "mwan", "configuration", "member", "%s") + function mwan_member.create(self, section) + TypedSection.create(self, section) + m5.uci:save("mwan3") + luci.http.redirect(ds.build_url("admin", "network", "mwan", "configuration", "member", section)) + end + + +interface = mwan_member:option(DummyValue, "interface", translate("Interface")) + interface.rawhtml = true + function interface.cfgvalue(self, s) + return self.map:get(s, "interface") or "—" + end + +metric = mwan_member:option(DummyValue, "metric", translate("Metric")) + metric.rawhtml = true + function metric.cfgvalue(self, s) + return self.map:get(s, "metric") or "1" + end + +weight = mwan_member:option(DummyValue, "weight", translate("Weight")) + weight.rawhtml = true + function weight.cfgvalue(self, s) + return self.map:get(s, "weight") or "1" + end + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua new file mode 100644 index 000000000..eb6f417af --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua @@ -0,0 +1,47 @@ +-- ------ extra functions ------ -- + +function cbi_add_interface(field) + uci.cursor():foreach("mwan3", "interface", + function (section) + field:value(section[".name"]) + end + ) +end + +-- ------ member configuration ------ -- + +dsp = require "luci.dispatcher" +arg[1] = arg[1] or "" + + +m5 = Map("mwan3", translatef("MWAN Member Configuration - %s", arg[1])) + m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "member") + + +mwan_member = m5:section(NamedSection, arg[1], "member", "") + mwan_member.addremove = false + mwan_member.dynamic = false + + +interface = mwan_member:option(Value, "interface", translate("Interface")) + cbi_add_interface(interface) + +metric = mwan_member:option(Value, "metric", translate("Metric"), + translate("Acceptable values: 1-1000. Defaults to 1 if not set")) + metric.datatype = "range(1, 1000)" + +weight = mwan_member:option(Value, "weight", translate("Weight"), + translate("Acceptable values: 1-1000. Defaults to 1 if not set")) + weight.datatype = "range(1, 1000)" + + +-- ------ currently configured interfaces ------ -- + +mwan_interface = m5:section(TypedSection, "interface", translate("Currently Configured Interfaces")) + mwan_interface.addremove = false + mwan_interface.dynamic = false + mwan_interface.sortable = false + mwan_interface.template = "cbi/tblsection" + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua new file mode 100644 index 000000000..08c3f69de --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua @@ -0,0 +1,95 @@ +-- ------ extra functions ------ -- + +function policyCheck() -- check to see if any policy names exceed the maximum of 15 characters + uci.cursor():foreach("mwan3", "policy", + function (section) + if string.len(section[".name"]) > 15 then + nameTooLong = 1 + err_name_list = err_name_list .. section[".name"] .. " " + end + end + ) +end + +function policyWarn() -- display status and warning messages at the top of the page + if nameTooLong == 1 then + return "<font color=\"ff0000\"><strong>" .. translate("WARNING: Some policies have names exceeding the maximum of 15 characters!") .. "</strong></font>" + else + return "" + end +end + +-- ------ policy configuration ------ -- + +ds = require "luci.dispatcher" +sys = require "luci.sys" + +nameTooLong = 0 +err_name_list = " " +policyCheck() + + +m5 = Map("mwan3", translate("MWAN Policy Configuration"), + policyWarn()) + m5:append(Template("mwan/config_css")) + + +mwan_policy = m5:section(TypedSection, "policy", translate("Policies"), + translate("Policies are profiles grouping one or more members controlling how MWAN distributes traffic<br />" .. + "Member interfaces with lower metrics are used first. Interfaces with the same metric load-balance<br />" .. + "Load-balanced member interfaces distribute more traffic out those with higher weights<br />" .. + "Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be 15 characters or less<br />" .. + "Policies may not share the same name as configured interfaces, members or rules")) + mwan_policy.addremove = true + mwan_policy.dynamic = false + mwan_policy.sectionhead = "Policy" + mwan_policy.sortable = true + mwan_policy.template = "cbi/tblsection" + mwan_policy.extedit = ds.build_url("admin", "network", "mwan", "configuration", "policy", "%s") + function mwan_policy.create(self, section) + TypedSection.create(self, section) + m5.uci:save("mwan3") + luci.http.redirect(ds.build_url("admin", "network", "mwan", "configuration", "policy", section)) + end + + +use_member = mwan_policy:option(DummyValue, "use_member", translate("Members assigned")) + use_member.rawhtml = true + function use_member.cfgvalue(self, s) + local memberConfig, memberList = self.map:get(s, "use_member"), "" + if memberConfig then + for k,v in pairs(memberConfig) do + memberList = memberList .. v .. "<br />" + end + return memberList + else + return "—" + end + + end + +last_resort = mwan_policy:option(DummyValue, "last_resort", translate("Last resort")) + last_resort.rawhtml = true + function last_resort.cfgvalue(self, s) + local action = self.map:get(s, "last_resort") + if action == "blackhole" then + return "blackhole (drop)" + elseif action == "default" then + return "default (use main routing table)" + else + return "unreachable (reject)" + end + end + +errors = mwan_policy:option(DummyValue, "errors", translate("Errors")) + errors.rawhtml = true + function errors.cfgvalue(self, s) + if not string.find(err_name_list, " " .. s .. " ") then + return "" + else + return "<span title=\"Name exceeds 15 characters\"><img src=\"/luci-static/resources/cbi/reset.gif\" alt=\"error\"></img></span>" + end + end + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua new file mode 100644 index 000000000..06a0fec66 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua @@ -0,0 +1,65 @@ +-- ------ extra functions ------ -- + +function policyCheck() -- check to see if this policy's name exceed the maximum of 15 characters + policyNameLength = string.len(arg[1]) + if policyNameLength > 15 then + nameTooLong = 1 + end +end + +function policyWarn() -- display status and warning messages at the top of the page + if nameTooLong == 1 then + return "<font color=\"ff0000\"><strong>" .. translatef("WARNING: this policy's name is %d characters exceeding the maximum of 15!", policyNameLength) .. "</strong></font>" + else + return "" + end +end + +function cbiAddMember(field) + uci.cursor():foreach("mwan3", "member", + function (section) + field:value(section[".name"]) + end + ) +end + +-- ------ policy configuration ------ -- + +dsp = require "luci.dispatcher" +arg[1] = arg[1] or "" + +nameTooLong = 0 +policyCheck() + + +m5 = Map("mwan3", translatef("MWAN Policy Configuration - %s", arg[1]), + policyWarn()) + m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "policy") + + +mwan_policy = m5:section(NamedSection, arg[1], "policy", "") + mwan_policy.addremove = false + mwan_policy.dynamic = false + + +use_member = mwan_policy:option(DynamicList, "use_member", translate("Member used")) + cbiAddMember(use_member) + +last_resort = mwan_policy:option(ListValue, "last_resort", translate("Last resort"), + translate("When all policy members are offline use this behavior for matched traffic")) + last_resort.default = "unreachable" + last_resort:value("unreachable", translate("unreachable (reject)")) + last_resort:value("blackhole", translate("blackhole (drop)")) + last_resort:value("default", translate("default (use main routing table)")) + + +-- ------ currently configured members ------ -- + +mwan_member = m5:section(TypedSection, "member", translate("Currently Configured Members")) + mwan_member.addremove = false + mwan_member.dynamic = false + mwan_member.sortable = false + mwan_member.template = "cbi/tblsection" + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua new file mode 100644 index 000000000..412f369eb --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua @@ -0,0 +1,141 @@ +-- ------ extra functions ------ -- + +function ruleCheck() -- determine if rules needs a proper protocol configured + uci.cursor():foreach("mwan3", "rule", + function (section) + local sourcePort = ut.trim(sys.exec("uci -p /var/state get mwan3." .. section[".name"] .. ".src_port")) + local destPort = ut.trim(sys.exec("uci -p /var/state get mwan3." .. section[".name"] .. ".dest_port")) + if sourcePort ~= "" or destPort ~= "" then -- ports configured + local protocol = ut.trim(sys.exec("uci -p /var/state get mwan3." .. section[".name"] .. ".proto")) + if protocol == "" or protocol == "all" then -- no or improper protocol + error_protocol_list = error_protocol_list .. section[".name"] .. " " + end + end + end + ) +end + +function ruleWarn() -- display warning messages at the top of the page + if error_protocol_list ~= " " then + return "<font color=\"ff0000\"><strong>" .. translate("WARNING: some rules have a port configured with no or improper protocol specified! Please configure a specific protocol!") .. "</strong></font>" + else + return "" + end +end + +-- ------ rule configuration ------ -- + +dsp = require "luci.dispatcher" +sys = require "luci.sys" +ut = require "luci.util" + +error_protocol_list = " " +ruleCheck() + + +m5 = Map("mwan3", translate("MWAN Rule Configuration"), + ruleWarn()) + m5:append(Template("mwan/config_css")) + + +mwan_rule = m5:section(TypedSection, "rule", translate("Traffic Rules"), + translate("Rules specify which traffic will use a particular MWAN policy based on IP address, port or protocol<br />" .. + "Rules are matched from top to bottom. Rules below a matching rule are ignored. Traffic not matching any rule is routed using the main routing table<br />" .. + "Traffic destined for known (other than default) networks is handled by the main routing table. Traffic matching a rule, but all WAN interfaces for that policy are down will be blackholed<br />" .. + "Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />" .. + "Rules may not share the same name as configured interfaces, members or policies")) + mwan_rule.addremove = true + mwan_rule.anonymous = false + mwan_rule.dynamic = false + mwan_rule.sectionhead = "Rule" + mwan_rule.sortable = true + mwan_rule.template = "cbi/tblsection" + mwan_rule.extedit = dsp.build_url("admin", "network", "mwan", "configuration", "rule", "%s") + function mwan_rule.create(self, section) + TypedSection.create(self, section) + m5.uci:save("mwan3") + luci.http.redirect(dsp.build_url("admin", "network", "mwan", "configuration", "rule", section)) + end + + +src_ip = mwan_rule:option(DummyValue, "src_ip", translate("Source address")) + src_ip.rawhtml = true + function src_ip.cfgvalue(self, s) + return self.map:get(s, "src_ip") or "—" + end + +src_port = mwan_rule:option(DummyValue, "src_port", translate("Source port")) + src_port.rawhtml = true + function src_port.cfgvalue(self, s) + return self.map:get(s, "src_port") or "—" + end + +dest_ip = mwan_rule:option(DummyValue, "dest_ip", translate("Destination address")) + dest_ip.rawhtml = true + function dest_ip.cfgvalue(self, s) + return self.map:get(s, "dest_ip") or "—" + end + +dest_port = mwan_rule:option(DummyValue, "dest_port", translate("Destination port")) + dest_port.rawhtml = true + function dest_port.cfgvalue(self, s) + return self.map:get(s, "dest_port") or "—" + end + +proto = mwan_rule:option(DummyValue, "proto", translate("Protocol")) + proto.rawhtml = true + function proto.cfgvalue(self, s) + return self.map:get(s, "proto") or "all" + end + +sticky = mwan_rule:option(DummyValue, "sticky", translate("Sticky")) + sticky.rawhtml = true + function sticky.cfgvalue(self, s) + if self.map:get(s, "sticky") == "1" then + stickied = 1 + return "Yes" + else + stickied = nil + return "No" + end + end + +timeout = mwan_rule:option(DummyValue, "timeout", translate("Sticky timeout")) + timeout.rawhtml = true + function timeout.cfgvalue(self, s) + if stickied then + local timeoutValue = self.map:get(s, "timeout") + if timeoutValue then + return timeoutValue .. "s" + else + return "600s" + end + else + return "—" + end + end + +ipset = mwan_rule:option(DummyValue, "ipset", translate("IPset")) + ipset.rawhtml = true + function ipset.cfgvalue(self, s) + return self.map:get(s, "ipset") or "—" + end + +use_policy = mwan_rule:option(DummyValue, "use_policy", translate("Policy assigned")) + use_policy.rawhtml = true + function use_policy.cfgvalue(self, s) + return self.map:get(s, "use_policy") or "—" + end + +errors = mwan_rule:option(DummyValue, "errors", translate("Errors")) + errors.rawhtml = true + function errors.cfgvalue(self, s) + if not string.find(error_protocol_list, " " .. s .. " ") then + return "" + else + return "<span title=\"No protocol specified\"><img src=\"/luci-static/resources/cbi/reset.gif\" alt=\"error\"></img></span>" + end + end + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua new file mode 100644 index 000000000..25a96f5c8 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua @@ -0,0 +1,113 @@ +-- ------ extra functions ------ -- + +function ruleCheck() -- determine if rule needs a protocol specified + local sourcePort = ut.trim(sys.exec("uci -p /var/state get mwan3." .. arg[1] .. ".src_port")) + local destPort = ut.trim(sys.exec("uci -p /var/state get mwan3." .. arg[1] .. ".dest_port")) + if sourcePort ~= "" or destPort ~= "" then -- ports configured + local protocol = ut.trim(sys.exec("uci -p /var/state get mwan3." .. arg[1] .. ".proto")) + if protocol == "" or protocol == "all" then -- no or improper protocol + error_protocol = 1 + end + end +end + +function ruleWarn() -- display warning message at the top of the page + if error_protocol == 1 then + return "<font color=\"ff0000\"><strong>" .. translate("WARNING: this rule is incorrectly configured with no or improper protocol specified! Please configure a specific protocol!") .. "</strong></font>" + else + return "" + end +end + +function cbiAddPolicy(field) + uci.cursor():foreach("mwan3", "policy", + function (section) + field:value(section[".name"]) + end + ) +end + +function cbiAddProtocol(field) + local protocols = ut.trim(sys.exec("cat /etc/protocols | grep ' # ' | awk '{print $1}' | grep -vw -e 'ip' -e 'tcp' -e 'udp' -e 'icmp' -e 'esp' | grep -v 'ipv6' | sort | tr '\n' ' '")) + for p in string.gmatch(protocols, "%S+") do + field:value(p) + end +end + +-- ------ rule configuration ------ -- + +dsp = require "luci.dispatcher" +sys = require "luci.sys" +ut = require "luci.util" +arg[1] = arg[1] or "" + +error_protocol = 0 +ruleCheck() + + +m5 = Map("mwan3", translatef("MWAN Rule Configuration - %s", arg[1]), + ruleWarn()) + m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "rule") + + +mwan_rule = m5:section(NamedSection, arg[1], "rule", "") + mwan_rule.addremove = false + mwan_rule.dynamic = false + + +src_ip = mwan_rule:option(Value, "src_ip", translate("Source address"), + translate("Supports CIDR notation (eg \"192.168.100.0/24\") without quotes")) + src_ip.datatype = ipaddr + +src_port = mwan_rule:option(Value, "src_port", translate("Source port"), + translate("May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or as a portrange (eg \"1024:2048\") without quotes")) + +dest_ip = mwan_rule:option(Value, "dest_ip", translate("Destination address"), + translate("Supports CIDR notation (eg \"192.168.100.0/24\") without quotes")) + dest_ip.datatype = ipaddr + +dest_port = mwan_rule:option(Value, "dest_port", translate("Destination port"), + translate("May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or as a portrange (eg \"1024:2048\") without quotes")) + +proto = mwan_rule:option(Value, "proto", translate("Protocol"), + translate("View the contents of /etc/protocols for protocol descriptions")) + proto.default = "all" + proto.rmempty = false + proto:value("all") + proto:value("ip") + proto:value("tcp") + proto:value("udp") + proto:value("icmp") + proto:value("esp") + cbiAddProtocol(proto) + +sticky = mwan_rule:option(ListValue, "sticky", translate("Sticky"), + translate("Traffic from the same source IP address that previously matched this rule within the sticky timeout period will use the same WAN interface")) + sticky.default = "0" + sticky:value("1", translate("Yes")) + sticky:value("0", translate("No")) + +timeout = mwan_rule:option(Value, "timeout", translate("Sticky timeout"), + translate("Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set")) + timeout.datatype = "range(1, 1000000)" + +ipset = mwan_rule:option(Value, "ipset", translate("IPset"), + translate("Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/youtube.com/youtube\")")) + +use_policy = mwan_rule:option(Value, "use_policy", translate("Policy assigned")) + cbiAddPolicy(use_policy) + use_policy:value("unreachable", translate("unreachable (reject)")) + use_policy:value("blackhole", translate("blackhole (drop)")) + use_policy:value("default", translate("default (use main routing table)")) + + +-- ------ currently configured policies ------ -- + +mwan_policy = m5:section(TypedSection, "policy", translate("Currently Configured Policies")) + mwan_policy.addremove = false + mwan_policy.dynamic = false + mwan_policy.sortable = false + mwan_policy.template = "cbi/tblsection" + + +return m5 diff --git a/applications/luci-app-mwan3/luasrc/view/admin_status/index/mwan.htm b/applications/luci-app-mwan3/luasrc/view/admin_status/index/mwan.htm new file mode 100644 index 000000000..53b997af9 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/admin_status/index/mwan.htm @@ -0,0 +1 @@ +<%+mwan/openwrt_overview_status%> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm new file mode 100644 index 000000000..14d404bc7 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm @@ -0,0 +1,129 @@ +<%+header%> + +<ul class="cbi-tabmenu"> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li> + <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li> +</ul> + +<% + local uci = require "luci.model.uci" + + interfaceNames = "" + uci.cursor():foreach("mwan3", "interface", + function (section) + interfaceNames = interfaceNames .. section[".name"] .. " " + end + ) +%> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + var stxhr = new XHR(); + + function update_status(tool, task) + { + var iface = document.getElementById('mwaniface').value; + var output = document.getElementById('diag_output'); + + if (tool == "service") + { + output.innerHTML = + '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' + + "Waiting for MWAN to " + task + "..." + ; + } + else + { + output.innerHTML = + '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' + + "Waiting for diagnostic results..." + ; + } + + output.parentNode.style.display = 'block'; + output.style.display = 'inline'; + + stxhr.get('<%=luci.dispatcher.build_url("admin", "network", "mwan", "advanced")%>/diagnostics_display' + '/' + iface + '/' + tool + '/' + task, null, + function(x, mArray) + { + if (mArray.diagnostics) + { + output.innerHTML = String.format('<pre id="diag_output_css">%h</pre>', mArray.diagnostics[0]); + } + else + { + output.innerHTML = '<pre id="diag_output_css"><strong>No diagnostic results returned</strong></pre>'; + } + } + ); + } +//]]></script> + +<div id="mwan_diagnostics" class="cbi-map"> + <fieldset id="diag_select" class="cbi-section"> + <legend><%:MWAN Interface Diagnostics%></legend> + <select id="mwaniface"> + <% for z in interfaceNames:gmatch("[^ ]+") do -%><option value="<%=z%>"><%=z%></option><%- end %> + </select> + <div id="buttoncss"> + <input type="button" value="<%:Ping default gateway%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'gateway')" /> + <input type="button" value="<%:Ping tracking IP%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'track_ip')" /> + <input type="button" value="<%:Check IP rules%>" class="cbi-button cbi-button-apply" onclick="update_status('rulechk', null)" /> + <input type="button" value="<%:Check routing table%>" class="cbi-button cbi-button-apply" onclick="update_status('routechk', null)" /> + <input type="button" value="<%:Hotplug ifup%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifup')" /> + <input type="button" value="<%:Hotplug ifdown%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifdown')" /> + </div> + </fieldset> + <fieldset id="diag_select" class="cbi-section"> + <legend><%:MWAN Service Control%></legend> + <div id="buttoncss"> + <input type="button" value="<%:Restart MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'restart')" /> + <input type="button" value="<%:Stop MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'stop')" /> + <input type="button" value="<%:Start MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'start')" /> + </div> + </fieldset> + <fieldset class="cbi-section" style="display:none"> + <legend><%:Diagnostic Results%></legend> + <div id="diag_output"></div> + </fieldset> +</div> + +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: none; + margin-left: 30px; + padding-right: 30px; + width: auto; + } + #mwan_diagnostics { + background-color: #FFFFFF; + border: 1px dotted #555555; + padding: 20px; + } + #diag_select { + padding: 12px 20px 20px 20px; + } + #mwaniface { + float: left; + margin: 8px 20px 0px 0px; + } + #buttoncss { + display: table; + float: left; + text-align: left; + } + .cbi-button { + margin: 8px 20px 0px 0px; + min-width: 153px; + } + #diag_output_css { + padding: 20px; + text-align: left; + } +</style> + +<%+footer%> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm new file mode 100644 index 000000000..4c2a0dc20 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm @@ -0,0 +1,24 @@ +<ul class="cbi-tabmenu"> + <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li> +</ul> + +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: none; + margin: 0px 0px 0px 30px; + padding-right: 30px; + width: auto; + } + .cbi-section-node { + margin-top: 20px; + } + .cbi-section { + border: 1px dotted #555555; + padding: 20px; + } +</style> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm new file mode 100644 index 000000000..fba3fa694 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm @@ -0,0 +1,24 @@ +<ul class="cbi-tabmenu"> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li> + <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li> +</ul> + +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: none; + margin: 0px 0px 0px 30px; + padding-right: 30px; + width: auto; + } + .cbi-section-node { + margin-top: 20px; + } + .cbi-section { + border: 1px dotted #555555; + padding: 20px; + } +</style> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm new file mode 100644 index 000000000..cf9011207 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm @@ -0,0 +1,24 @@ +<ul class="cbi-tabmenu"> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li> + <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li> +</ul> + +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: none; + margin: 0px 0px 0px 30px; + padding-right: 30px; + width: auto; + } + .cbi-section-node { + margin-top: 20px; + } + .cbi-section { + border: 1px dotted #555555; + padding: 20px; + } +</style> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm new file mode 100644 index 000000000..0a1249689 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm @@ -0,0 +1,74 @@ +<%+header%> + +<ul class="cbi-tabmenu"> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li> + <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li> +</ul> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "advanced", "troubleshooting_display")%>', null, + function(x, mArray) + { + var tshoot = document.getElementById('troubleshoot_text'); + if (mArray.versions) + { + var versions = '<span class="description">Software versions : </span><br /><br />'; + var mwanConfig = '<br /><br /><span class="description">Output of "cat /etc/config/mwan3" : </span><br /><br />'; + var netConfig = '<br /><br /><span class="description">Output of "cat /etc/config/network" : </span><br /><br />'; + var wifiConfig = '<br /><br /><span class="description">Output of "cat /etc/config/wireless" : </span><br /><br />'; + var ifconfig = '<br /><br /><span class="description">Output of "ifconfig" : </span><br /><br />'; + var ipRoute = '<br /><br /><span class="description">Output of "route -n" : </span><br /><br />'; + var ipRuleShow = '<br /><br /><span class="description">Output of "ip rule show" : </span><br /><br />'; + var routeListTable = '<br /><br /><span class="description">Output of "ip route list table 1-250" : </span><br /><br />'; + var firewallOut = '<br /><br /><span class="description">Firewall default output policy (must be ACCEPT) : </span><br /><br />'; + var iptables = '<br /><br /><span class="description">Output of "iptables -L -t mangle -v -n" : </span><br /><br />'; + tshoot.innerHTML = String.format( + '<pre>%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s</pre>', + versions, mArray.versions[0], mwanConfig, mArray.mwanconfig[0], netConfig, mArray.netconfig[0], + wifiConfig, mArray.wificonfig[0], ifconfig, mArray.ifconfig[0], ipRoute, mArray.routeshow[0], + ipRuleShow, mArray.iprule[0], routeListTable, mArray.routelist[0], firewallOut, mArray.firewallout[0], + iptables, mArray.iptables[0] + ); + } + else + { + tshoot.innerHTML = '<strong>Error collecting troubleshooting information</strong>'; + } + } + ); +//]]></script> + +<div id="troubleshoot"> + <fieldset class="cbi-section"> + <legend><%:Troubleshooting Data%></legend> + <div id="troubleshoot_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div> + </fieldset> +</div> + +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: none; + margin-left: 30px; + padding-right: 30px; + width: auto; + } + #troubleshoot { + background-color: #FFFFFF; + border: 1px dotted #555555; + padding: 20px; + } + #troubleshoot_text { + padding: 20px; + text-align: left; + } + .description { + background-color: rgb(78, 186, 241); + } +</style> + +<%+footer%> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm new file mode 100644 index 000000000..507767418 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm @@ -0,0 +1,24 @@ +<ul class="cbi-tabmenu"> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li> + <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li> +</ul> + +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: none; + margin: 0px 0px 0px 30px; + padding-right: 30px; + width: auto; + } + .cbi-section-node { + margin-top: 20px; + } + .cbi-section { + border: 1px dotted #555555; + padding: 20px; + } +</style> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm b/applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm new file mode 100644 index 000000000..99da4875b --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm @@ -0,0 +1,34 @@ +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: none; + margin-left: 30px; + padding-right: 30px; + width: auto; + } + table td { /* cells showing the configuration values */ + padding: 0px; + text-align: center; + vertical-align: middle; + } + table th { /* column for configuration section name */ + padding: 0px; + text-align: center; + vertical-align: middle; + } + table tbody th { /* column for configuration section name */ + padding: 0px; + vertical-align: middle; + } + .cbi-section-node table div { /* rows */ + padding-top: 5px; + } + table.cbi-section-table td.cbi-section-table-cell { /* sort buttons column */ + text-align: center; + } + .cbi-section h3 { + color: rgb(85, 85, 85); + font-family: Trebuchet MS,Verdana,sans-serif; + font-style: italic; + font-weight: normal; + } +</style> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm b/applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm new file mode 100644 index 000000000..9329b9273 --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm @@ -0,0 +1,83 @@ +<script type="text/javascript">//<![CDATA[ + XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "overview", "interface_status")%>', null, + function(x, mArray) + { + var status = document.getElementById('mwan_status_text'); + if (mArray.wans) + { + var temp = ''; + for ( var i = 0; i < mArray.wans.length; i++ ) + { + var stat = ''; + var cssc = ''; + switch (mArray.wans[i].status) + { + case 'online': + stat = 'Online (tracking active)'; + cssc = 'wanon'; + break; + case 'notMonitored': + stat = 'Online (tracking off)'; + cssc = 'wanon'; + break; + case 'offline': + stat = 'Offline'; + cssc = 'wanoff'; + break; + case 'notEnabled': + stat = 'Disabled'; + cssc = 'wanoff'; + break; + } + temp += String.format( + '<span class="%s"><strong>%s (<a href="%q">%s</a>)</strong><br />%s</span>', + cssc, mArray.wans[i].name, mArray.wans[i].link, mArray.wans[i].ifname, stat + ); + } + status.innerHTML = temp; + } + else + { + status.innerHTML = '<strong>No MWAN interfaces found</strong>'; + } + } + ); +//]]></script> + +<fieldset id="interface_field" class="cbi-section"> + <legend><%:MWAN Interface Live Status%></legend> + <div id="mwan_status_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div> +</fieldset> + +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: 1044px; + } + #interface_field { + padding: 12px 20px 20px 20px; + } + #mwan_status_text { + display: table; + font-size: 14px; + margin: auto; + max-width: 1044px; + min-width: 246px; + width: 100%; + } + .wanon { + background-color: rgb(144, 240, 144); + } + .wanoff { + background-color: rgb(240, 144, 144); + } + .wanon, .wanoff { + border-radius: 60px; + box-shadow: 0px 2px 5px -3px; + float: left; + margin: 8px 3px 0px 3px; + min-height: 30px; + min-width: 235px; + padding: 5px 10px 8px 10px; + text-align: center; + } +</style> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm b/applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm new file mode 100644 index 000000000..b80b9f3ac --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm @@ -0,0 +1,51 @@ +<%+header%> + +<ul class="cbi-tabmenu"> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview")%>"><%:Interface Status%></a></li> + <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview/overview_detailed")%>"><%:Detailed Status%></a></li> +</ul> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "overview", "detailed_status")%>', null, + function(x, mArray) + { + var status = document.getElementById('mwan_detail_text'); + if (mArray.mwandetail) + { + status.innerHTML = String.format('<pre>%s</pre>', mArray.mwandetail[0]); + } + else + { + status.innerHTML = '<strong>No detailed status information available</strong>'; + } + } + ); +//]]></script> + +<div id="mwan_detail_status"> + <fieldset class="cbi-section"> + <legend><%:MWAN Detailed Status%></legend> + <div id="mwan_detail_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div> + </fieldset> +</div> + +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: none; + margin-left: 30px; + padding-right: 30px; + width: auto; + } + #mwan_detail_status { + border: 1px dotted #555555; + background-color: #FFFFFF; + padding: 20px; + } + #mwan_detail_text { + padding: 20px; + text-align: left; + } +</style> + +<%+footer%> diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm b/applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm new file mode 100644 index 000000000..472c7ce7f --- /dev/null +++ b/applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm @@ -0,0 +1,122 @@ +<%+header%> + +<ul class="cbi-tabmenu"> + <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview")%>"><%:Interface Status%></a></li> + <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview/overview_detailed")%>"><%:Detailed Status%></a></li> +</ul> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "overview", "interface_status")%>', null, + function(x, mArray) + { + var statusDiv = document.getElementById('mwan_status_text'); + if (mArray.wans) + { + var interfaceStatus = ''; + for ( var i = 0; i < mArray.wans.length; i++ ) + { + var status = ''; + var css = ''; + switch (mArray.wans[i].status) + { + case 'online': + status = 'Online (tracking active)'; + css = 'wanon'; + break; + case 'notMonitored': + status = 'Online (tracking off)'; + css = 'wanon'; + break; + case 'offline': + status = 'Offline'; + css = 'wanoff'; + break; + case 'notEnabled': + status = 'Disabled'; + css = 'wanoff'; + break; + } + interfaceStatus += String.format( + '<span class="%s"><strong>%s (<a href="%q">%s</a>)</strong><br />%s</span>', + css, mArray.wans[i].name, mArray.wans[i].link, mArray.wans[i].ifname, status + ); + } + statusDiv.innerHTML = interfaceStatus; + } + else + { + statusDiv.innerHTML = '<strong>No MWAN interfaces found</strong>'; + } + + var logs = document.getElementById('mwan_statuslog_text'); + if (mArray.mwanlog) + { + var mwanLog = 'Last 50 MWAN systemlog entries. Newest entries sorted at the top :'; + logs.innerHTML = String.format('<pre>%s<br /><br />%s</pre>', mwanLog, mArray.mwanlog[0]); + } + else + { + logs.innerHTML = '<strong>No MWAN systemlog history found</strong>'; + } + } + ); +//]]></script> + +<div id="mwan_interface_status"> + <fieldset id="interface_field" class="cbi-section"> + <legend><%:MWAN Interface Live Status%></legend> + <div id="mwan_status_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div> + </fieldset> + <fieldset class="cbi-section"> + <legend><%:MWAN Interface Systemlog%></legend> + <div id="mwan_statuslog_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div> + </fieldset> +</div> + +<style type="text/css"> + .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */ + max-width: none; + margin-left: 30px; + padding-right: 30px; + width: auto; + } + #mwan_interface_status { + background-color: #FFFFFF; + border: 1px dotted #555555; + padding: 20px; + } + #interface_field { + padding: 12px 20px 20px 20px; + } + #mwan_status_text { + display: table; + font-size: 14px; + margin: auto; + max-width: 1044px; + min-width: 246px; + width: 100%; + } + .wanon { + background-color: rgb(144, 240, 144); + } + .wanoff { + background-color: rgb(240, 144, 144); + } + .wanon, .wanoff { + border-radius: 60px; + box-shadow: 0px 2px 5px -3px; + float: left; + margin: 8px 3px 0px 3px; + min-height: 30px; + min-width: 235px; + padding: 5px 10px 8px 10px; + text-align: center; + } + #mwan_statuslog_text { + padding: 20px; + text-align: left; + } +</style> + +<%+footer%> diff --git a/applications/luci-app-mwan3/po/ja/mwan3.po b/applications/luci-app-mwan3/po/ja/mwan3.po new file mode 100644 index 000000000..cae45b8a2 --- /dev/null +++ b/applications/luci-app-mwan3/po/ja/mwan3.po @@ -0,0 +1,562 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ja\n" + +msgid "%d hour" +msgstr "%d 時間" + +msgid "%d minute" +msgstr "%d 分" + +msgid "%d minutes" +msgstr "%d 分" + +msgid "%d second" +msgstr "%d 秒" + +msgid "%d seconds" +msgstr "%d 秒" + +msgid "" +"Acceptable values: 1-100. This many Tracking IP addresses must respond for " +"the link to be deemed up" +msgstr "" +"利用可能な値: 1-100。上記の追跡 IP の合計個数のうち、Up 状態と判定するために" +"に必要な、レスポンスが返された追跡 IP アドレスの個数です。" + +msgid "Acceptable values: 1-1000. Defaults to 1 if not set" +msgstr "利用可能な値: 1-1000。空欄の場合のデフォルトは1です。" + +msgid "Advanced" +msgstr "詳細設定" + +msgid "Check IP rules" +msgstr "IP ルールのチェック" + +msgid "Check routing table" +msgstr "ルーティング テーブルのチェック" + +msgid "Configuration" +msgstr "設定" + +msgid "Currently Configured Interfaces" +msgstr "設定済みインターフェース" + +msgid "Currently Configured Members" +msgstr "設定済みメンバー" + +msgid "Currently Configured Policies" +msgstr "設定済みポリシー" + +msgid "Destination address" +msgstr "宛先アドレス" + +msgid "Destination port" +msgstr "宛先ポート" + +msgid "Detailed Status" +msgstr "詳細ステータス" + +msgid "Diagnostic Results" +msgstr "診断結果" + +msgid "Diagnostics" +msgstr "診断機能" + +msgid "" +"Downed interface will be deemed up after this many successful ping tests" +msgstr "" +"Down 状態のインターフェースが Up 状態と判断されるまでに要する ping テストの成" +"功回数です。" + +msgid "Enabled" +msgstr "有効" + +msgid "Errors" +msgstr "エラー" + +msgid "Failure interval" +msgstr "障害検出 インターバル" + +msgid "Flush conntrack table" +msgstr "" + +msgid "Flush global firewall conntrack table on interface events" +msgstr "" + +msgid "Hotplug Script" +msgstr "ホットプラグ スクリプト" + +msgid "Hotplug ifdown" +msgstr "ホットプラグ ifdown" + +msgid "Hotplug ifup" +msgstr "ホットプラグ ifup" + +msgid "IPset" +msgstr "IPset" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Interface Status" +msgstr "インターフェース ステータス" + +msgid "Interface down" +msgstr "インターフェース Down" + +msgid "Interface up" +msgstr "インターフェース Up" + +msgid "Interface will be deemed down after this many failed ping tests" +msgstr "" +"インターフェースが Down 状態と判断されるまでに要する ping テストの失敗回数で" +"す。" + +msgid "Interfaces" +msgstr "インターフェース" + +msgid "Internet Protocol" +msgstr "インターネット プロトコル" + +msgid "Last resort" +msgstr "最終手段" + +msgid "Load Balancing" +msgstr "負荷分散" + +msgid "Loading" +msgstr "読込中" + +msgid "MWAN Config" +msgstr "MWAN 設定" + +msgid "MWAN Detailed Status" +msgstr "MWAN 詳細ステータス" + +msgid "MWAN Interface Configuration" +msgstr "MWAN インターフェース設定" + +msgid "MWAN Interface Configuration - %s" +msgstr "MWAN インターフェース設定 - %s" + +msgid "MWAN Interface Diagnostics" +msgstr "MWAN インターフェース診断" + +msgid "MWAN Interface Live Status" +msgstr "MWAN インターフェース Live ステータス" + +msgid "MWAN Interface Systemlog" +msgstr "MWAN インターフェース システムログ" + +msgid "MWAN Member Configuration" +msgstr "MWAN メンバー設定" + +msgid "MWAN Member Configuration - %s" +msgstr "MWAN メンバー設定 - %s" + +msgid "MWAN Policy Configuration" +msgstr "MWAN ポリシー設定" + +msgid "MWAN Policy Configuration - %s" +msgstr "MWAN ポリシー設定 - %s" + +msgid "MWAN Rule Configuration" +msgstr "MWAN ルール設定" + +msgid "MWAN Rule Configuration - %s" +msgstr "MWAN ルール設定 - %s" + +msgid "MWAN Service Control" +msgstr "MWAN サービス コントロール" + +msgid "" +"MWAN supports up to 250 physical and/or logical interfaces<br />MWAN " +"requires that all interfaces have a unique metric configured in /etc/config/" +"network<br />Names must match the interface name found in /etc/config/" +"network (see advanced tab)<br />Names may contain characters A-Z, a-z, 0-9, " +"_ and no spaces<br />Interfaces may not share the same name as configured " +"members, policies or rules" +msgstr "" +"MWAN は、250個までの物理または論理、あるいは両方のインターフェースをサポート" +"します。<br />MWAN は、全てのインターフェースが /etc/config/network で設定さ" +"れるユニークなメトリックを持つことを必要とします。<br />下記 \"インターフェー" +"ス\" の名前は、 /etc/config/network に存在するインターフェース名と同じでなけ" +"ればなりません(詳細設定タブを確認)。<br />名前は A-Z, a-z, 0-9, _ を含むこ" +"とができますが、スペースは使用できません。<br />インターフェースには、設定済" +"みのメンバーやポリシー、ルールと同じ名前を使用することはできません。" + +msgid "" +"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or " +"as a portrange (eg \"1024:2048\") without quotes" +msgstr "" +"単一または複数のポート(例: \"22\" または \"80,443\")、あるいはポートの範囲" +"(例: \"1024:2048\")を、クオーテーション無しで指定することができます。" + +msgid "Member used" +msgstr "使用されるメンバー" + +msgid "Members" +msgstr "メンバー" + +msgid "" +"Members are profiles attaching a metric and weight to an MWAN interface<br /" +">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Members " +"may not share the same name as configured interfaces, policies or rules" +msgstr "" +"メンバーは、MWAN インターフェースのメトリックおよびウエイトを関連付けたプロ" +"ファイルです。<br />名前は A-Z, a-z, 0-9, _ を含むことができますが、スペース" +"は使用できません。<br />メンバーには、設定済みのインターフェースやポリシー、" +"ルールと同じ名前を使用することはできません。" + +msgid "Members assigned" +msgstr "アサイン済みメンバー" + +msgid "Metric" +msgstr "メトリック" + +msgid "" +"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/" +"youtube.com/youtube\")" +msgstr "" +"IPset ルールの名前です。このルールは、 /etc/dnsmasq.conf で必要です。(例: " +"\"ipset=/youtube.com/youtube\")" + +msgid "Network Config" +msgstr "ネットワーク設定" + +msgid "No" +msgstr "いいえ" + +msgid "Overview" +msgstr "概要" + +msgid "Ping count" +msgstr "Ping 回数" + +msgid "Ping default gateway" +msgstr "Ping デフォルト ゲートウェイ" + +msgid "Ping interval" +msgstr "Ping インターバル" + +msgid "Ping interval during failure detection" +msgstr "障害検出動作中の Ping 実行間隔です。" + +msgid "Ping interval during failure recovering" +msgstr "障害復旧中の Ping 実行間隔です。" + +msgid "Ping size" +msgstr "Ping サイズ" + +msgid "Ping timeout" +msgstr "Ping タイムアウト" + +msgid "Ping tracking IP" +msgstr "Ping トラッキング IP" + +msgid "Policies" +msgstr "ポリシー" + +msgid "" +"Policies are profiles grouping one or more members controlling how MWAN " +"distributes traffic<br />Member interfaces with lower metrics are used " +"first. Interfaces with the same metric load-balance<br />Load-balanced " +"member interfaces distribute more traffic out those with higher weights<br /" +">Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be " +"15 characters or less<br />Policies may not share the same name as " +"configured interfaces, members or rules" +msgstr "" +"ポリシーは、MWANがどのようにトラフィックの分配を行うかを制御する、1つ以上のメ" +"ンバーをグループ化するプロファイルです。<br />最小のメトリックを持つメンバー " +"インターフェースが最初に使用されます。同じメトリックを持つ複数のインター" +"フェースでは、負荷分散を行います。<br />負荷分散に設定されたメンバー インター" +"フェースでは、ウェイトの値が大きい方により多くのトラフィックを分配します。" +"<br />名前は A-Z, a-z, 0-9, _ を含むことができますが、スペースは使用できませ" +"ん。また、15文字以内でなければなりません。<br />ポリシーでは、設定済みのイン" +"ターフェースやメンバー、ルールと同じ名前を使用することはできません。" + +msgid "Policy assigned" +msgstr "アサイン済みポリシー" + +msgid "Protocol" +msgstr "プロトコル" + +msgid "Recovery interval" +msgstr "障害復旧 インターバル" + +msgid "Restart MWAN" +msgstr "MWAN の再起動" + +msgid "Restore default hotplug script" +msgstr "デフォルトのホットプラグ スクリプトの復元" + +msgid "Restore..." +msgstr "復元..." + +msgid "Rules" +msgstr "ルール" + +msgid "" +"Rules specify which traffic will use a particular MWAN policy based on IP " +"address, port or protocol<br />Rules are matched from top to bottom. Rules " +"below a matching rule are ignored. Traffic not matching any rule is routed " +"using the main routing table<br />Traffic destined for known (other than " +"default) networks is handled by the main routing table. Traffic matching a " +"rule, but all WAN interfaces for that policy are down will be blackholed<br /" +">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Rules may " +"not share the same name as configured interfaces, members or policies" +msgstr "" +"ルールは IP アドレスやポート、プロトコルを基に、トラフィックがどの MWAN ポリ" +"シーを使用するかを設定します。<br />ルールは上から下へマッチングが行われ、合" +"致したルールより下のルールは無視されます。全てのルールに合致しないトラフィッ" +"クは、メインのルーティング テーブルを使用してルートが決定されます。<br />既知" +"(デフォルト以外)のネットワークへのトラフィックは、メインのルーティング テー" +"ブルによって制御されます。ルールに合致したトラフィックでも、当該ポリシーの全 " +"WAN インターフェースが Down 状態の場合は blackhole 状態となります。<br />名前" +"は A-Z, a-z, 0-9, _ を含むことができますが、スペースは使用できません。<br />" +"ルールは、設定済みのインターフェースやメンバー、ポリシーと同じ名前を使用する" +"ことはできません。" + +msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set" +msgstr "秒。利用可能な値: 1-1000000。空欄の場合のデフォルト値は600です。" + +msgid "Source address" +msgstr "送信元アドレス" + +msgid "Source port" +msgstr "送信元ポート" + +msgid "Start MWAN" +msgstr "MWAN の起動" + +msgid "Sticky" +msgstr "Sticky" + +msgid "Sticky timeout" +msgstr "Sticky タイムアウト" + +msgid "Stop MWAN" +msgstr "MWAN の停止" + +msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes" +msgstr "CIDR 表記のサポート(例: \"192.168.100.0/24\")" + +msgid "There are currently %d of 250 supported interfaces configured" +msgstr "現在、250個中 %d 個のサポートされたインターフェースが設定済みです。" + +msgid "" +"This IP address will be pinged to dermine if the link is up or down. Leave " +"blank to assume interface is always online" +msgstr "" +"これらは、リンクの Up または Down を判定するために Ping が送信されるIP アドレ" +"スです。常にオンラインとする場合、空欄のままにします。" + +msgid "" +"This displays the metric assigned to this interface in /etc/config/network" +msgstr "" +"/etc/config/network で、このインターフェースに割り当てられたメトリックです。" + +msgid "This section allows you to modify the contents of /etc/config/mwan3" +msgstr "" +"このセクションでは、 /etc/config/mwan3 の内容を変更することができます。" + +msgid "This section allows you to modify the contents of /etc/config/network" +msgstr "" +"このセクションでは、 /etc/config/network の内容を変更することができます。" + +msgid "This section allows you to modify the contents of /etc/config/wireless" +msgstr "" +"このセクションでは、 /etc/config/wireless の内容を変更することができます。" + +msgid "" +"This section allows you to modify the contents of /etc/hotplug.d/iface/16-" +"mwancustom<br />This is useful for running system commands and/or scripts " +"based on interface ifup or ifdown hotplug events<br /><br />Notes:<br />The " +"first line of the script must be "#!/bin/sh" without quotes<br /" +">Lines beginning with # are comments and are not executed<br /><br /" +">Available variables:<br />$ACTION is the hotplug event (ifup, ifdown)<br />" +"$INTERFACE is the interface name (wan1, wan2, etc.)<br />$DEVICE is the " +"device name attached to the interface (eth0.1, eth1, etc.)" +msgstr "" +"このセクションでは、 /etc/hotplug.d/iface/16-mwancustom の内容を変更すること" +"ができます。<br />これは、インターフェースの ifup または ifdown ホットプラグ " +"イベント時にシステムコマンドまたはスクリプト、もしくはその両方を実行すること" +"に役立ちます。<br /><br />注意:<br />スクリプトの1行目は、"#!bin/sh" " +"である必要があります(クオーテーション不要)。<br /># で始まる行はコメントと" +"して認識され、実行されません。<br /><br />利用可能な変数:<br />$ACTION - ホッ" +"トプラグ イベント (ifup, ifdown)<br />$INTERFACE - インターフェース名(wan1, " +"wan2, その他)<br />$DEVICE - インターフェースにアタッチされたデバイスの名前" +"(eth0.1, eth1, その他)" + +msgid "Tracking IP" +msgstr "追跡 IP" + +msgid "Tracking reliability" +msgstr "追跡の信頼性" + +msgid "Traffic Rules" +msgstr "トラフィック ルール" + +msgid "" +"Traffic from the same source IP address that previously matched this rule " +"within the sticky timeout period will use the same WAN interface" +msgstr "" +"以前このルールにマッチした同じアクセス元 IP アドレスからのトラフィックが、再" +"度 Sticky 制限時間内にマッチした場合には、同じ WAN インターフェースが使用され" +"ます。" + +msgid "Troubleshooting" +msgstr "トラブルシューティング" + +msgid "Troubleshooting Data" +msgstr "トラブルシューティング データ" + +msgid "View the contents of /etc/protocols for protocol descriptions" +msgstr "プロトコルの説明については、 /etc/protocols の内容を確認してください。" + +msgid "WARNING: %d interfaces are configured exceeding the maximum of 250!" +msgstr "" +"警告: %d 個のインターフェースが、最大個数の 250個 を超えて設定されています!" + +msgid "" +"WARNING: Some policies have names exceeding the maximum of 15 characters!" +msgstr "" +"警告: 最大文字数の 15 文字を超える名前が設定されているポリシーがあります!" + +msgid "" +"WARNING: some interfaces are configured incorrectly or not at all in /etc/" +"config/network!" +msgstr "" +"警告: 設定を誤っているか、もしくは完全に設定されていないインターフェースがあ" +"ります!" + +msgid "" +"WARNING: some interfaces have a higher reliability requirement than there " +"are tracking IP addresses!" +msgstr "" +"警告: 追跡 IP アドレスの個数より大きい追跡信頼性の値が設定されたインター" +"フェースがあります!" + +msgid "" +"WARNING: some interfaces have duplicate metrics configured in /etc/config/" +"network!" +msgstr "" +"警告: /etc/config/network で、重複するメトリックを設定されているインター" +"フェースがあります!" + +msgid "" +"WARNING: some interfaces have no default route in the main routing table!" +msgstr "" +"警告: メインのルーティング テーブルで、デフォルト ルートを設定されていないイ" +"ンターフェースがあります!" + +msgid "" +"WARNING: some interfaces have no metric configured in /etc/config/network!" +msgstr "" +"警告: /etc/config/network で、メトリックを設定されていないインターフェースが" +"あります!" + +msgid "" +"WARNING: some rules have a port configured with no or improper protocol " +"specified! Please configure a specific protocol!" +msgstr "" +"警告: 不適切なプロトコルが指定されている、または何も指定されていないポートを" +"設定されたルールがあります!プロトコルを指定し直してください!" + +msgid "" +"WARNING: this and other interfaces have duplicate metrics configured in /etc/" +"config/network!" +msgstr "" +"警告: これと他のインターフェースで重複するメトリックが /etc/config/network に" +"設定されています!" + +msgid "" +"WARNING: this interface has a higher reliability requirement than there are " +"tracking IP addresses!" +msgstr "" +"警告: このインターフェースは、追跡 IP アドレスの個数より大きい追跡信頼性の値" +"を設定されています!" + +msgid "WARNING: this interface has no default route in the main routing table!" +msgstr "" +"警告: このインターフェースは、メインのルーティング テーブルにデフォルト ルー" +"トが設定されていません!" + +msgid "" +"WARNING: this interface has no metric configured in /etc/config/network!" +msgstr "" +"警告: このインターフェースは、 /etc/config/network でメトリックが設定されてい" +"ません!" + +msgid "" +"WARNING: this interface is configured incorrectly or not at all in /etc/" +"config/network!" +msgstr "" +"警告: このインターフェースは /etc/config/network で設定が誤っているか、もしく" +"は完全に設定されていません!" + +msgid "" +"WARNING: this policy's name is %d characters exceeding the maximum of 15!" +msgstr "" +"警告: このポリシーの名前は、最大文字数 15 文字を超える %d 文字が設定されてい" +"ます!" + +msgid "" +"WARNING: this rule is incorrectly configured with no or improper protocol " +"specified! Please configure a specific protocol!" +msgstr "" +"警告: このルールは不適切なプロトコルが指定されているか、または何も指定されて" +"いません!プロトコルを指定し直してください!" + +msgid "Weight" +msgstr "ウエイト" + +msgid "" +"When all policy members are offline use this behavior for matched traffic" +msgstr "" +"ポリシーの全メンバーがオフラインの場合、合致したトラフィックに対してこのふる" +"まいが使用されます。" + +msgid "Wireless Config" +msgstr "無線設定" + +msgid "Yes" +msgstr "はい" + +msgid "always" +msgstr "always" + +msgid "blackhole (drop)" +msgstr "blackhole (drop)" + +msgid "default (use main routing table)" +msgstr "デフォルト(メインのルーティング テーブルを使用)" + +msgid "ifdown" +msgstr "ifdown" + +msgid "ifup" +msgstr "ifup" + +msgid "never" +msgstr "never" + +msgid "unreachable (reject)" +msgstr "unreachable (reject)" diff --git a/applications/luci-app-mwan3/po/templates/mwan3.pot b/applications/luci-app-mwan3/po/templates/mwan3.pot new file mode 100644 index 000000000..0bda248fa --- /dev/null +++ b/applications/luci-app-mwan3/po/templates/mwan3.pot @@ -0,0 +1,464 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "%d hour" +msgstr "" + +msgid "%d minute" +msgstr "" + +msgid "%d minutes" +msgstr "" + +msgid "%d second" +msgstr "" + +msgid "%d seconds" +msgstr "" + +msgid "" +"Acceptable values: 1-100. This many Tracking IP addresses must respond for " +"the link to be deemed up" +msgstr "" + +msgid "Acceptable values: 1-1000. Defaults to 1 if not set" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Check IP rules" +msgstr "" + +msgid "Check routing table" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Currently Configured Interfaces" +msgstr "" + +msgid "Currently Configured Members" +msgstr "" + +msgid "Currently Configured Policies" +msgstr "" + +msgid "Destination address" +msgstr "" + +msgid "Destination port" +msgstr "" + +msgid "Detailed Status" +msgstr "" + +msgid "Diagnostic Results" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"Downed interface will be deemed up after this many successful ping tests" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Errors" +msgstr "" + +msgid "Failure interval" +msgstr "" + +msgid "Flush conntrack table" +msgstr "" + +msgid "Flush global firewall conntrack table on interface events" +msgstr "" + +msgid "Hotplug Script" +msgstr "" + +msgid "Hotplug ifdown" +msgstr "" + +msgid "Hotplug ifup" +msgstr "" + +msgid "IPset" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Status" +msgstr "" + +msgid "Interface down" +msgstr "" + +msgid "Interface up" +msgstr "" + +msgid "Interface will be deemed down after this many failed ping tests" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Internet Protocol" +msgstr "" + +msgid "Last resort" +msgstr "" + +msgid "Load Balancing" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "MWAN Config" +msgstr "" + +msgid "MWAN Detailed Status" +msgstr "" + +msgid "MWAN Interface Configuration" +msgstr "" + +msgid "MWAN Interface Configuration - %s" +msgstr "" + +msgid "MWAN Interface Diagnostics" +msgstr "" + +msgid "MWAN Interface Live Status" +msgstr "" + +msgid "MWAN Interface Systemlog" +msgstr "" + +msgid "MWAN Member Configuration" +msgstr "" + +msgid "MWAN Member Configuration - %s" +msgstr "" + +msgid "MWAN Policy Configuration" +msgstr "" + +msgid "MWAN Policy Configuration - %s" +msgstr "" + +msgid "MWAN Rule Configuration" +msgstr "" + +msgid "MWAN Rule Configuration - %s" +msgstr "" + +msgid "MWAN Service Control" +msgstr "" + +msgid "" +"MWAN supports up to 250 physical and/or logical interfaces<br />MWAN " +"requires that all interfaces have a unique metric configured in /etc/config/" +"network<br />Names must match the interface name found in /etc/config/" +"network (see advanced tab)<br />Names may contain characters A-Z, a-z, 0-9, " +"_ and no spaces<br />Interfaces may not share the same name as configured " +"members, policies or rules" +msgstr "" + +msgid "" +"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or " +"as a portrange (eg \"1024:2048\") without quotes" +msgstr "" + +msgid "Member used" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "" +"Members are profiles attaching a metric and weight to an MWAN interface<br /" +">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Members " +"may not share the same name as configured interfaces, policies or rules" +msgstr "" + +msgid "Members assigned" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "" +"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/" +"youtube.com/youtube\")" +msgstr "" + +msgid "Network Config" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Ping count" +msgstr "" + +msgid "Ping default gateway" +msgstr "" + +msgid "Ping interval" +msgstr "" + +msgid "Ping interval during failure detection" +msgstr "" + +msgid "Ping interval during failure recovering" +msgstr "" + +msgid "Ping size" +msgstr "" + +msgid "Ping timeout" +msgstr "" + +msgid "Ping tracking IP" +msgstr "" + +msgid "Policies" +msgstr "" + +msgid "" +"Policies are profiles grouping one or more members controlling how MWAN " +"distributes traffic<br />Member interfaces with lower metrics are used " +"first. Interfaces with the same metric load-balance<br />Load-balanced " +"member interfaces distribute more traffic out those with higher weights<br /" +">Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be " +"15 characters or less<br />Policies may not share the same name as " +"configured interfaces, members or rules" +msgstr "" + +msgid "Policy assigned" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Recovery interval" +msgstr "" + +msgid "Restart MWAN" +msgstr "" + +msgid "Restore default hotplug script" +msgstr "" + +msgid "Restore..." +msgstr "" + +msgid "Rules" +msgstr "" + +msgid "" +"Rules specify which traffic will use a particular MWAN policy based on IP " +"address, port or protocol<br />Rules are matched from top to bottom. Rules " +"below a matching rule are ignored. Traffic not matching any rule is routed " +"using the main routing table<br />Traffic destined for known (other than " +"default) networks is handled by the main routing table. Traffic matching a " +"rule, but all WAN interfaces for that policy are down will be blackholed<br /" +">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Rules may " +"not share the same name as configured interfaces, members or policies" +msgstr "" + +msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set" +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "Source port" +msgstr "" + +msgid "Start MWAN" +msgstr "" + +msgid "Sticky" +msgstr "" + +msgid "Sticky timeout" +msgstr "" + +msgid "Stop MWAN" +msgstr "" + +msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes" +msgstr "" + +msgid "There are currently %d of 250 supported interfaces configured" +msgstr "" + +msgid "" +"This IP address will be pinged to dermine if the link is up or down. Leave " +"blank to assume interface is always online" +msgstr "" + +msgid "" +"This displays the metric assigned to this interface in /etc/config/network" +msgstr "" + +msgid "This section allows you to modify the contents of /etc/config/mwan3" +msgstr "" + +msgid "This section allows you to modify the contents of /etc/config/network" +msgstr "" + +msgid "This section allows you to modify the contents of /etc/config/wireless" +msgstr "" + +msgid "" +"This section allows you to modify the contents of /etc/hotplug.d/iface/16-" +"mwancustom<br />This is useful for running system commands and/or scripts " +"based on interface ifup or ifdown hotplug events<br /><br />Notes:<br />The " +"first line of the script must be "#!/bin/sh" without quotes<br /" +">Lines beginning with # are comments and are not executed<br /><br /" +">Available variables:<br />$ACTION is the hotplug event (ifup, ifdown)<br />" +"$INTERFACE is the interface name (wan1, wan2, etc.)<br />$DEVICE is the " +"device name attached to the interface (eth0.1, eth1, etc.)" +msgstr "" + +msgid "Tracking IP" +msgstr "" + +msgid "Tracking reliability" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic from the same source IP address that previously matched this rule " +"within the sticky timeout period will use the same WAN interface" +msgstr "" + +msgid "Troubleshooting" +msgstr "" + +msgid "Troubleshooting Data" +msgstr "" + +msgid "View the contents of /etc/protocols for protocol descriptions" +msgstr "" + +msgid "WARNING: %d interfaces are configured exceeding the maximum of 250!" +msgstr "" + +msgid "" +"WARNING: Some policies have names exceeding the maximum of 15 characters!" +msgstr "" + +msgid "" +"WARNING: some interfaces are configured incorrectly or not at all in /etc/" +"config/network!" +msgstr "" + +msgid "" +"WARNING: some interfaces have a higher reliability requirement than there " +"are tracking IP addresses!" +msgstr "" + +msgid "" +"WARNING: some interfaces have duplicate metrics configured in /etc/config/" +"network!" +msgstr "" + +msgid "" +"WARNING: some interfaces have no default route in the main routing table!" +msgstr "" + +msgid "" +"WARNING: some interfaces have no metric configured in /etc/config/network!" +msgstr "" + +msgid "" +"WARNING: some rules have a port configured with no or improper protocol " +"specified! Please configure a specific protocol!" +msgstr "" + +msgid "" +"WARNING: this and other interfaces have duplicate metrics configured in /etc/" +"config/network!" +msgstr "" + +msgid "" +"WARNING: this interface has a higher reliability requirement than there are " +"tracking IP addresses!" +msgstr "" + +msgid "WARNING: this interface has no default route in the main routing table!" +msgstr "" + +msgid "" +"WARNING: this interface has no metric configured in /etc/config/network!" +msgstr "" + +msgid "" +"WARNING: this interface is configured incorrectly or not at all in /etc/" +"config/network!" +msgstr "" + +msgid "" +"WARNING: this policy's name is %d characters exceeding the maximum of 15!" +msgstr "" + +msgid "" +"WARNING: this rule is incorrectly configured with no or improper protocol " +"specified! Please configure a specific protocol!" +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When all policy members are offline use this behavior for matched traffic" +msgstr "" + +msgid "Wireless Config" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "always" +msgstr "" + +msgid "blackhole (drop)" +msgstr "" + +msgid "default (use main routing table)" +msgstr "" + +msgid "ifdown" +msgstr "" + +msgid "ifup" +msgstr "" + +msgid "never" +msgstr "" + +msgid "unreachable (reject)" +msgstr "" diff --git a/applications/luci-app-mwan3/po/zh-cn/mwan3.po b/applications/luci-app-mwan3/po/zh-cn/mwan3.po new file mode 100644 index 000000000..b8948b316 --- /dev/null +++ b/applications/luci-app-mwan3/po/zh-cn/mwan3.po @@ -0,0 +1,510 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"Last-Translator: Hsing-Wang Liao <kuoruan@gmail.com>\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: zh_CN\n" + +msgid "%d hour" +msgstr "%d 小时" + +msgid "%d minute" +msgstr "%d 分钟" + +msgid "%d minutes" +msgstr "%d 分钟" + +msgid "%d second" +msgstr "%d 秒" + +msgid "%d seconds" +msgstr "%d 秒" + +msgid "" +"Acceptable values: 1-100. This many Tracking IP addresses must respond for " +"the link to be deemed up" +msgstr "" +"接受的值: 1-100。这个设置项指定了当多少个IP地址能够连通时接口会被认为在线" + +msgid "Acceptable values: 1-1000. Defaults to 1 if not set" +msgstr "接受的值: 1-100。如果不填写,默认值为 1" + +msgid "Advanced" +msgstr "高级" + +msgid "Check IP rules" +msgstr "检查IP规则" + +msgid "Check routing table" +msgstr "检查路由表" + +msgid "Configuration" +msgstr "配置" + +msgid "Currently Configured Interfaces" +msgstr "当前配置的接口" + +msgid "Currently Configured Members" +msgstr "当前配置的成员" + +msgid "Currently Configured Policies" +msgstr "当前配置的策略" + +msgid "Destination address" +msgstr "目标地址" + +msgid "Destination port" +msgstr "目标端口" + +msgid "Detailed Status" +msgstr "详细状态" + +msgid "Diagnostic Results" +msgstr "诊断结果" + +msgid "Diagnostics" +msgstr "诊断" + +msgid "" +"Downed interface will be deemed up after this many successful ping tests" +msgstr "当 Ping 成功次数达到这个数值后,已经被认为离线的接口将会重新上线" + +msgid "Enabled" +msgstr "启用" + +msgid "Errors" +msgstr "错误" + +msgid "Failure interval" +msgstr "故障检测间隔" + +msgid "Flush conntrack table" +msgstr "刷新连接跟踪表" + +msgid "Flush global firewall conntrack table on interface events" +msgstr "在接口事件触发时刷新全局防火墙连接跟踪表" + +msgid "Hotplug Script" +msgstr "Hotplug 脚本" + +msgid "Hotplug ifdown" +msgstr "Hotplug ifdown" + +msgid "Hotplug ifup" +msgstr "Hotplug ifup" + +msgid "IPset" +msgstr "IPset" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "Interface" +msgstr "接口" + +msgid "Interface Status" +msgstr "接口状态" + +msgid "Interface down" +msgstr "接口离线" + +msgid "Interface up" +msgstr "接口上线" + +msgid "Interface will be deemed down after this many failed ping tests" +msgstr "当 Ping 失败次数达到这个数值后接口会被认为离线" + +msgid "Interfaces" +msgstr "接口" + +msgid "Internet Protocol" +msgstr "互联网协议" + +msgid "Last resort" +msgstr "备用成员" + +msgid "Load Balancing" +msgstr "负载均衡" + +msgid "Loading" +msgstr "载入中" + +msgid "MWAN Config" +msgstr "MWAN 配置文件" + +msgid "MWAN Detailed Status" +msgstr "MWAN 详细状态" + +msgid "MWAN Interface Configuration" +msgstr "MWAN 接口配置" + +msgid "MWAN Interface Configuration - %s" +msgstr "MWAN 接口配置 - %s" + +msgid "MWAN Interface Diagnostics" +msgstr "MWAN 接口诊断" + +msgid "MWAN Interface Live Status" +msgstr "MWAN 接口实时状态" + +msgid "MWAN Interface Systemlog" +msgstr "MWAN 接口系统日志" + +msgid "MWAN Member Configuration" +msgstr "MWAN 成员配置" + +msgid "MWAN Member Configuration - %s" +msgstr "MWAN 成员配置 - %s" + +msgid "MWAN Policy Configuration" +msgstr "MWAN 策略配置" + +msgid "MWAN Policy Configuration - %s" +msgstr "MWAN 策略配置 - %s" + +msgid "MWAN Rule Configuration" +msgstr "MWAN 规则配置" + +msgid "MWAN Rule Configuration - %s" +msgstr "MWAN 规则配置 - %s" + +msgid "MWAN Service Control" +msgstr "MWAN 服务控制" + +msgid "" +"MWAN supports up to 250 physical and/or logical interfaces<br />MWAN " +"requires that all interfaces have a unique metric configured in /etc/config/" +"network<br />Names must match the interface name found in /etc/config/" +"network (see advanced tab)<br />Names may contain characters A-Z, a-z, 0-9, " +"_ and no spaces<br />Interfaces may not share the same name as configured " +"members, policies or rules" +msgstr "" +"MWAN 支持最多 250 个物理或逻辑接口。<br />MWAN 要求所有接口必须在 /etc/" +"config/network 中设定唯一的网关跃点。<br />名称必须与 /etc/config/network 中" +"的接口名称匹配。(可查看“高级”选项卡)<br />名称允许包括A-Z、a-z、0-9、_ 但是不" +"能有空格。<br />接口不应该与成员、策略、规则中的任意一个设置项使用相同的名称" + +msgid "" +"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or " +"as a portrange (eg \"1024:2048\") without quotes" +msgstr "" +"可以输入一个或多个端口 (例如 \"22\" 或者 \"80,443\") 或者是一个端口范围 (例" +"如 \"1024:2048\") 不含引号" + +msgid "Member used" +msgstr "使用的成员" + +msgid "Members" +msgstr "成员" + +msgid "" +"Members are profiles attaching a metric and weight to an MWAN interface<br /" +">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Members " +"may not share the same name as configured interfaces, policies or rules" +msgstr "" +"“成员”用来设置每一个 MWAN 接口的跃点数 (即接口优先级) 和所占比重。<br />名称" +"允许包括 A-Z、 a-、0-9、_ 但是不能有空格。<br />成员不应该与接口、策略、规则" +"中的任意一个设置项使用相同的名称" + +msgid "Members assigned" +msgstr "分配的成员" + +msgid "Metric" +msgstr "跃点数" + +msgid "" +"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/" +"youtube.com/youtube\")" +msgstr "" +"匹配 IPset 规则列表名称。需要先配置 /etc/dnsmasq.conf 中的 IPset 规则 (例如: " +"\"ipset=/youtube.com/youtube\")" + +msgid "Network Config" +msgstr "网络配置文件" + +msgid "No" +msgstr "否" + +msgid "Overview" +msgstr "概况" + +msgid "Ping count" +msgstr "Ping 计数" + +msgid "Ping default gateway" +msgstr "Ping 默认网关" + +msgid "Ping interval" +msgstr "Ping 间隔" + +msgid "Ping interval during failure detection" +msgstr "故障检测期间的 Ping 间隔" + +msgid "Ping interval during failure recovering" +msgstr "故障恢复期间的 Ping 间隔" + +msgid "Ping size" +msgstr "Ping 大小" + +msgid "Ping timeout" +msgstr "Ping 超时" + +msgid "Ping tracking IP" +msgstr "Ping 跟踪 IP" + +msgid "Policies" +msgstr "策略" + +msgid "" +"Policies are profiles grouping one or more members controlling how MWAN " +"distributes traffic<br />Member interfaces with lower metrics are used " +"first. Interfaces with the same metric load-balance<br />Load-balanced " +"member interfaces distribute more traffic out those with higher weights<br /" +">Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be " +"15 characters or less<br />Policies may not share the same name as " +"configured interfaces, members or rules" +msgstr "" +"“策略”把成员进行分组,告诉 MWAN 如何分配“规则”中使用这一策略的流量<br />拥有" +"较低跃点数的成员将会被优先使用。拥有相同跃点数的成员把流量进行负载均衡。<br /" +">进行负载均衡的成员之间拥有较高比重的成员将会被分配到更多流量。<br />名称允许" +"包括A-Z、a-z、0-9、_ 但是不能有空格。名称应该在 15 个字符以内<br />策略不应该" +"与接口、成员、规则中的任意一个设置项使用相同的名称" + +msgid "Policy assigned" +msgstr "分配的策略" + +msgid "Protocol" +msgstr "通信协议" + +msgid "Recovery interval" +msgstr "故障恢复间隔" + +msgid "Restart MWAN" +msgstr "重启 MWAN" + +msgid "Restore default hotplug script" +msgstr "恢复默认的 hotplug 脚本" + +msgid "Restore..." +msgstr "恢复..." + +msgid "Rules" +msgstr "规则" + +msgid "" +"Rules specify which traffic will use a particular MWAN policy based on IP " +"address, port or protocol<br />Rules are matched from top to bottom. Rules " +"below a matching rule are ignored. Traffic not matching any rule is routed " +"using the main routing table<br />Traffic destined for known (other than " +"default) networks is handled by the main routing table. Traffic matching a " +"rule, but all WAN interfaces for that policy are down will be blackholed<br /" +">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Rules may " +"not share the same name as configured interfaces, members or policies" +msgstr "" +"“规则”基于 IP 地址、协议、端口把流量划分到指定的“策略”中。<br />规则按照从上" +"到下的顺序进行匹配。除了第一条能够匹配一次通信的规则以外,其它规则将被忽略。" +"不匹配任何规则的通信将会由系统默认路由表进行。<br />来自已知的网络的转发流量" +"由系统默认路由表接手,然后 MWAN 从中匹配出相应的流量并转移到 MWAN 自己的路由" +"表。但是所有被划分到一个无法使用的策略的流量将会无法正常进行路由。<br />名称" +"允许包括A-Z、a-z、0-9、_ 但是不能有空格。<br />规则不应该与接口、成员、策略中" +"的任意一个设置项使用相同的名称" + +msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set" +msgstr "单位为秒。接受的值: 1-1000000。留空则使用默认值 600 秒" + +msgid "Source address" +msgstr "源地址" + +msgid "Source port" +msgstr "源端口" + +msgid "Start MWAN" +msgstr "启动 MWAN" + +msgid "Sticky" +msgstr "粘滞模式" + +msgid "Sticky timeout" +msgstr "粘滞超时" + +msgid "Stop MWAN" +msgstr "停止 MWAN" + +msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes" +msgstr "支持 CIDR 记法 (例如: \"192.168.100.0/24\") 不含引号" + +msgid "There are currently %d of 250 supported interfaces configured" +msgstr "" + +msgid "" +"This IP address will be pinged to dermine if the link is up or down. Leave " +"blank to assume interface is always online" +msgstr "" +"MWAN 将会通过 Ping 这些 IP 地址来确定接口是否上线。如果留空,则 MWAN 认为该接" +"口永远在线" + +msgid "" +"This displays the metric assigned to this interface in /etc/config/network" +msgstr "这里显示了这个接口在 /etc/config/network 中配置的跃点数" + +msgid "This section allows you to modify the contents of /etc/config/mwan3" +msgstr "这里允许你修改 /etc/config/mwan3 的内容" + +msgid "This section allows you to modify the contents of /etc/config/network" +msgstr "这里允许你修改 /etc/config/network 的内容" + +msgid "This section allows you to modify the contents of /etc/config/wireless" +msgstr "这里允许你修改 /etc/config/wireless 的内容" + +msgid "" +"This section allows you to modify the contents of /etc/hotplug.d/iface/16-" +"mwancustom<br />This is useful for running system commands and/or scripts " +"based on interface ifup or ifdown hotplug events<br /><br />Notes:<br />The " +"first line of the script must be "#!/bin/sh" without quotes<br /" +">Lines beginning with # are comments and are not executed<br /><br /" +">Available variables:<br />$ACTION is the hotplug event (ifup, ifdown)<br />" +"$INTERFACE is the interface name (wan1, wan2, etc.)<br />$DEVICE is the " +"device name attached to the interface (eth0.1, eth1, etc.)" +msgstr "" +"这里允许你修改/etc/hotplug.d/iface/16-mwancustom 的内容<br />这可以在接口 " +"ifup 或 ifdown Hotplug 事件时运行系统命令或脚本<br /><br />注意:<br />脚本的" +"第一行必须是 "#!/bin/sh" 不含引号<br />以#开头的行是注释,不会执行" +"<br /><br />可用变量:<br />$ACTION 是 Hotplug 事件 (ifup, ifdown)<br />" +"$INTERFACE 是接口名称 (wan1、wan2 等)<br />$DEVICE 是连接到接口的设备名称 " +"(eth0.1、eth1 等)" + +msgid "Tracking IP" +msgstr "跟踪的 IP" + +msgid "Tracking reliability" +msgstr "跟踪可靠性" + +msgid "Traffic Rules" +msgstr "流量规则" + +msgid "" +"Traffic from the same source IP address that previously matched this rule " +"within the sticky timeout period will use the same WAN interface" +msgstr "" +"来自相同源 IP 的流量,如果已经匹配过此规则并且在粘滞超时时间内,将会使用相同" +"的 WAN 接口" + +msgid "Troubleshooting" +msgstr "故障排除" + +msgid "Troubleshooting Data" +msgstr "故障排除数据" + +msgid "View the contents of /etc/protocols for protocol descriptions" +msgstr "请查看 /etc/protocols 获取可选协议详情" + +msgid "WARNING: %d interfaces are configured exceeding the maximum of 250!" +msgstr "" + +msgid "" +"WARNING: Some policies have names exceeding the maximum of 15 characters!" +msgstr "" + +msgid "" +"WARNING: some interfaces are configured incorrectly or not at all in /etc/" +"config/network!" +msgstr "" + +msgid "" +"WARNING: some interfaces have a higher reliability requirement than there " +"are tracking IP addresses!" +msgstr "" + +msgid "" +"WARNING: some interfaces have duplicate metrics configured in /etc/config/" +"network!" +msgstr "" + +msgid "" +"WARNING: some interfaces have no default route in the main routing table!" +msgstr "" + +msgid "" +"WARNING: some interfaces have no metric configured in /etc/config/network!" +msgstr "" + +msgid "" +"WARNING: some rules have a port configured with no or improper protocol " +"specified! Please configure a specific protocol!" +msgstr "" + +msgid "" +"WARNING: this and other interfaces have duplicate metrics configured in /etc/" +"config/network!" +msgstr "" + +msgid "" +"WARNING: this interface has a higher reliability requirement than there are " +"tracking IP addresses!" +msgstr "" + +msgid "WARNING: this interface has no default route in the main routing table!" +msgstr "" + +msgid "" +"WARNING: this interface has no metric configured in /etc/config/network!" +msgstr "" + +msgid "" +"WARNING: this interface is configured incorrectly or not at all in /etc/" +"config/network!" +msgstr "" + +msgid "" +"WARNING: this policy's name is %d characters exceeding the maximum of 15!" +msgstr "" + +msgid "" +"WARNING: this rule is incorrectly configured with no or improper protocol " +"specified! Please configure a specific protocol!" +msgstr "" + +msgid "Weight" +msgstr "比重" + +msgid "" +"When all policy members are offline use this behavior for matched traffic" +msgstr "当所有策略成员都无法使用的时候,对使用该策略的流量使用这个操作" + +msgid "Wireless Config" +msgstr "无线配置" + +msgid "Yes" +msgstr "是" + +msgid "always" +msgstr "总是" + +msgid "blackhole (drop)" +msgstr "黑洞 (丢弃)" + +msgid "default (use main routing table)" +msgstr "默认 (使用主路由表)" + +msgid "ifdown" +msgstr "ifdown" + +msgid "ifup" +msgstr "ifup" + +msgid "never" +msgstr "从不" + +msgid "unreachable (reject)" +msgstr "不可达 (拒绝)" diff --git a/applications/luci-app-mwan3/root/etc/hotplug.d/iface/16-mwancustombak b/applications/luci-app-mwan3/root/etc/hotplug.d/iface/16-mwancustombak new file mode 100755 index 000000000..6e2875e3d --- /dev/null +++ b/applications/luci-app-mwan3/root/etc/hotplug.d/iface/16-mwancustombak @@ -0,0 +1,38 @@ +#!/bin/sh + +# to enable this script uncomment the case loop at the bottom +# to report mwan status on interface hotplug ifup/ifdown events modify the lines in the send_alert function + +send_alert() +{ + # variable "$1" stores the MWAN status information + # insert your code here to send the contents of "$1" + echo "$1" +} + +gather_event_info() +{ + # create event information message + local EVENT_INFO="Interface [ "$INTERFACE" ($DEVICE) ] on router [ "$(uci -p /var/state get system.@system[0].hostname)" ] has triggered a hotplug [ "$ACTION" ] event on "$(date +"%a %b %d %Y %T %Z")"" + + # get current interface, policy and rule status + local CURRENT_STATUS="$(/usr/sbin/mwan3 status)" + + # get last 50 MWAN systemlog messages + local MWAN_LOG="$(echo -e "Last 50 MWAN systemlog entries. Newest entries sorted at the top:\n$(logread | grep mwan3 | tail -n 50 | sed 'x;1!H;$!d;x')")" + + # pass event info to send_alert function + send_alert "$(echo -e "$EVENT_INFO\n\n$CURRENT_STATUS\n\n$MWAN_LOG")" +} + +#case "$ACTION" in +# ifup) +# gather_event_info +# ;; +# +# ifdown) +# gather_event_info +# ;; +#esac + +exit 0 diff --git a/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3 b/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3 new file mode 100755 index 000000000..ff9a229ed --- /dev/null +++ b/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3 @@ -0,0 +1,14 @@ +#!/bin/sh + +# replace existing mwan ucitrack entry +uci -q batch <<-EOF >/dev/null + del ucitrack.@mwan3[-1] + add ucitrack mwan3 + set ucitrack.@mwan3[-1].exec="/usr/sbin/mwan3 restart" + commit ucitrack +EOF + +# remove LuCI cache +rm -rf /tmp/luci-indexcache /tmp/luci-modulecache + +exit 0 diff --git a/applications/luci-app-olsr/luasrc/controller/olsr.lua b/applications/luci-app-olsr/luasrc/controller/olsr.lua index 9a997bdc1..0564bd4ea 100644 --- a/applications/luci-app-olsr/luasrc/controller/olsr.lua +++ b/applications/luci-app-olsr/luasrc/controller/olsr.lua @@ -87,8 +87,8 @@ function action_json() local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 9090 local v6_port = uci:get("olsrd6", "olsrd_jsoninfo", "port") or 9090 - jsonreq4 = utl.exec("(echo /status | nc 127.0.0.1 " .. v4_port .. ") 2>/dev/null" ) - jsonreq6 = utl.exec("(echo /status | nc ::1 " .. v6_port .. ") 2>/dev/null") + jsonreq4 = utl.exec("(echo /status | nc 127.0.0.1 " .. v4_port .. " | sed -n '/^[}{ ]/p') 2>/dev/null" ) + jsonreq6 = utl.exec("(echo /status | nc ::1 " .. v6_port .. " | sed -n '/^[}{ ]/p') 2>/dev/null") http.prepare_content("application/json") if not jsonreq4 or jsonreq4 == "" then jsonreq4 = "{}" @@ -375,8 +375,8 @@ function fetch_jsoninfo(otable) local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 9090 local v6_port = uci:get("olsrd6", "olsrd_jsoninfo", "port") or 9090 - jsonreq4 = utl.exec("(echo /" .. otable .. " | nc 127.0.0.1 " .. v4_port .. ") 2>/dev/null") - jsonreq6 = utl.exec("(echo /" .. otable .. " | nc ::1 " .. v6_port .. ") 2>/dev/null") + jsonreq4 = utl.exec("(echo /" .. otable .. " | nc 127.0.0.1 " .. v4_port .. " | sed -n '/^[}{ ]/p') 2>/dev/null") + jsonreq6 = utl.exec("(echo /" .. otable .. " | nc ::1 " .. v6_port .. " | sed -n '/^[}{ ]/p') 2>/dev/null") local jsondata4 = {} local jsondata6 = {} local data4 = {} diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm index 31dd7d05a..c077c2048 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm @@ -12,8 +12,8 @@ local i = 1 if luci.http.formvalue("status") == "1" then local rv = {} for k, link in ipairs(links) do - link.linkCost = tonumber(link.linkCost)/1024 or 0 - if link.linkCost == 4096 then + link.linkCost = tonumber(link.linkCost) or 0 + if link.linkCost == 4194304 then link.linkCost = 0 end local color = olsrtools.etx_color(link.linkCost) @@ -129,8 +129,8 @@ end <tbody id="olsr_neigh_table"> <% local i = 1 for k, link in ipairs(links) do - link.linkCost = tonumber(link.linkCost)/1024 or 0 - if link.linkCost == 4096 then + link.linkCost = tonumber(link.linkCost) or 0 + if link.linkCost == 4194304 then link.linkCost = 0 end diff --git a/applications/luci-app-olsr/po/pt-br/olsr.po b/applications/luci-app-olsr/po/pt-br/olsr.po index 1461c1dd8..499176c16 100644 --- a/applications/luci-app-olsr/po/pt-br/olsr.po +++ b/applications/luci-app-olsr/po/pt-br/olsr.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:41+0200\n" -"PO-Revision-Date: 2014-06-21 19:36+0200\n" -"Last-Translator: Éder <eder.grigorio@openmailbox.org>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-20 18:01-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "Active MID announcements" msgstr "" @@ -59,7 +59,6 @@ msgstr "" "Somente pode ser um endereço IPv4 ou IPv6 válidos ou um endereço 'padrão'" # 20140621: edersg: tradução -#, fuzzy msgid "Can only be a valid IPv6 address or 'default'" msgstr "" "Somente pode ser um endereço IPv4 ou IPv6 válidos ou um endereço 'padrão'" @@ -173,7 +172,6 @@ msgstr "" "Validade do <abbr title=\"Host and network association, Associação de " "equipamentos e redes\">HNA</abbr>" -#, fuzzy msgid "HNA6 Announcements" msgstr "" "Anúncios do <abbr title=\"Host and network association, Associação de " @@ -215,7 +213,6 @@ msgstr "" "Equipamentos em uma rede roteada por OLSR podem anunciar conectividade para " "redes externas usando mensagens HNA." -#, fuzzy msgid "" "Hosts in a OLSR routed network can announce connecitivity to external " "networks using HNA6 messages." @@ -496,7 +493,6 @@ msgstr "" "> reduzir LQ para todos os nós nesta interface em 20%: padrão 0.8" # 20140621: edersg: tradução -#, fuzzy msgid "" "Multiply routes with the factor given here. Allowed values are between 0.01 " "and 1.0. It is only used when LQ-Level is greater than 0. Examples:<br /" @@ -551,7 +547,6 @@ msgstr "" "OLSR - Anúncios <abbr title=\"Host and network association, Associação de " "equipamentos e redes\">HNA</abbr>" -#, fuzzy msgid "OLSR - HNA6-Announcements" msgstr "" "OLSR - Anúncios <abbr title=\"Host and network association, Associação de " @@ -654,7 +649,6 @@ msgstr "" "durante o funcionamento do olsrd. O padrão é 0.0.0.0, que faz com que o " "endereço da primeira interface seja usado." -#, fuzzy msgid "" "Sets the main IP (originator ip) of the router. This IP will NEVER change " "during the uptime of olsrd. Default is ::, which triggers usage of the IP of " @@ -857,7 +851,6 @@ msgstr "" "and network association, Associação de equipamentos e redes\">HNA</abbr> " "local de 0.0.0.0/0, ::ffff:0:0/96 ou 2000::/3. O padrão é \"ambos\"." -#, fuzzy msgid "" "Which kind of uplink is exported to the other mesh nodes. An uplink is " "detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua index 1bbee83c3..7865881cb 100644 --- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua +++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua @@ -7,192 +7,721 @@ require("luci.model.uci") local knownParams = { -- - -- Widget Name Default(s) Description Option(s) - -- + --Widget + -- Name + -- Default(s) + -- Description + -- Option(s) { "Service", { - -- initialisation and daemon options - { ListValue, "verb", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, translate("Set output verbosity") }, - { Flag, "mlock", 0, translate("Disable Paging") }, - { Flag, "disable_occ", 0, translate("Disable options consistency check") }, - -- { Value, "user", "root", translate("Set UID to user") }, - -- { Value, "group", "root", translate("Set GID to group") }, - { Value, "cd", "/etc/openvpn", translate("Change to directory before initialization") }, - { Value, "chroot", "/var/run", translate("Chroot to directory after initialization") }, - -- { Value, "daemon", "Instance-Name", translate("Daemonize after initialization") }, - -- { Value, "syslog", "Instance-Name", translate("Output to syslog and do not daemonize") }, - { Flag, "passtos", 0, translate("TOS passthrough (applies to IPv4 only)") }, - -- { Value, "inetd", "nowait Instance-Name", translate("Run as an inetd or xinetd server") }, - { Value, "log", "/var/log/openvpn.log", translate("Write log to file") }, - { Value, "log_append", "/var/log/openvpn.log", translate("Append log to file") }, - { Flag, "suppress_timestamps", 0, translate("Don't log timestamps") }, - -- { Value, "writepid", "/var/run/openvpn.pid", translate("Write process ID to file") }, - { Value, "nice", 0, translate("Change process priority") }, - { Flag, "fast_io", 0, translate("Optimize TUN/TAP/UDP writes") }, - { Value, "echo", "some params echoed to log", translate("Echo parameters to log") }, - { ListValue, "remap_usr1", { "SIGHUP", "SIGTERM" }, translate("Remap SIGUSR1 signals") }, - { Value, "status", "/var/run/openvpn.status 5", translate("Write status to file every n seconds") }, - { Value, "status_version", { 1, 2 }, translate("Status file format version") }, -- status - { Value, "mute", 5, translate("Limit repeated log messages") }, - - { Value, "up", "/usr/bin/ovpn-up", translate("Shell cmd to execute after tun device open") }, - { Value, "up_delay", 5, translate("Delay tun/tap open and up script execution") }, - { Value, "down", "/usr/bin/ovpn-down", translate("Shell cmd to run after tun device close") }, - { Flag, "down_pre", 0, translate("Call down cmd/script before TUN/TAP close") }, - { Flag, "up_restart", 0, translate("Run up/down scripts for all restarts") }, - { Value, "route_up", "/usr/bin/ovpn-routeup", translate("Execute shell cmd after routes are added") }, - { Value, "ipchange", "/usr/bin/ovpn-ipchange", translate("Execute shell command on remote ip change"), { mode="p2p" } }, - { DynamicList, "setenv", { "VAR1 value1", "VAR2 value2" }, translate("Pass environment variables to script") }, - { Value, "tls_verify", "/usr/bin/ovpn-tlsverify", translate("Shell command to verify X509 name") }, - { Value, "client_connect", "/usr/bin/ovpn-clientconnect", translate("Run script cmd on client connection") }, - { Flag, "client_disconnect", 0, translate("Run script cmd on client disconnection") }, - { Value, "learn_address", "/usr/bin/ovpn-learnaddress", translate("Executed in server mode whenever an IPv4 address/route or MAC address is added to OpenVPN's internal routing table") }, - { Value, "auth_user_pass_verify", "/usr/bin/ovpn-userpass via-env", translate("Executed in server mode on new client connections, when the client is still untrusted") }, - { ListValue, "script_security", { 0, 1, 2, 3 }, translate("Policy level over usage of external programs and scripts") }, + -- initialisation and daemon options + { ListValue, + "verb", + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, + translate("Set output verbosity") }, + { Flag, + "mlock", + 0, + translate("Disable Paging") }, + { Flag, + "disable_occ", + 0, + translate("Disable options consistency check") }, + -- { Value, + -- "user", + -- "root", + -- translate("Set UID to user") }, + -- { Value, + -- "group", + -- "root", + -- translate("Set GID to group") }, + { Value, + "cd", + "/etc/openvpn", + translate("Change to directory before initialization") }, + { Value, + "chroot", + "/var/run", + translate("Chroot to directory after initialization") }, + -- { Value, + -- "daemon", + -- "Instance-Name", + -- translate("Daemonize after initialization") }, + -- { Value, + -- "syslog", + -- "Instance-Name", + -- translate("Output to syslog and do not daemonize") }, + { Flag, + "passtos", + 0, + translate("TOS passthrough (applies to IPv4 only)") }, + -- { Value, + -- "inetd", + -- "nowait Instance-Name", + -- translate("Run as an inetd or xinetd server") }, + { Value, + "log", + "/var/log/openvpn.log", + translate("Write log to file") }, + { Value, + "log_append", + "/var/log/openvpn.log", + translate("Append log to file") }, + { Flag, + "suppress_timestamps", + 0, + translate("Don't log timestamps") }, + -- { Value, + -- "writepid", + -- "/var/run/openvpn.pid", + -- translate("Write process ID to file") }, + { Value, + "nice", + 0, + translate("Change process priority") }, + { Flag, + "fast_io", + 0, + translate("Optimize TUN/TAP/UDP writes") }, + { Value, + "echo", + "some params echoed to log", + translate("Echo parameters to log") }, + { ListValue, + "remap_usr1", + { "SIGHUP", "SIGTERM" }, + translate("Remap SIGUSR1 signals") }, + { Value, + "status", + "/var/run/openvpn.status 5", + translate("Write status to file every n seconds") }, + { Value, + "status_version", + { 1, 2 }, + translate("Status file format version") }, -- status + { Value, + "mute", + 5, + translate("Limit repeated log messages") }, + { Value, + "up", + "/usr/bin/ovpn-up", + translate("Shell cmd to execute after tun device open") }, + { Value, + "up_delay", + 5, + translate("Delay tun/tap open and up script execution") }, + { Value, + "down", + "/usr/bin/ovpn-down", + translate("Shell cmd to run after tun device close") }, + { Flag, + "down_pre", + 0, + translate("Call down cmd/script before TUN/TAP close") }, + { Flag, + "up_restart", + 0, + translate("Run up/down scripts for all restarts") }, + { Value, + "route_up", + "/usr/bin/ovpn-routeup", + translate("Execute shell cmd after routes are added") }, + { Value, + "ipchange", + "/usr/bin/ovpn-ipchange", + translate("Execute shell command on remote ip change"), + { mode="p2p" } }, + { DynamicList, + "setenv", + { "VAR1 value1", "VAR2 value2" }, + translate("Pass environment variables to script") }, + { Value, + "tls_verify", + "/usr/bin/ovpn-tlsverify", + translate("Shell command to verify X509 name") }, + { Value, + "client_connect", + "/usr/bin/ovpn-clientconnect", + translate("Run script cmd on client connection") }, + { Flag, + "client_disconnect", + 0, + translate("Run script cmd on client disconnection") }, + { Value, + "learn_address", + "/usr/bin/ovpn-learnaddress", + translate("Executed in server mode whenever an IPv4 address/route or MAC address is added to OpenVPN's internal routing table") }, + { Value, + "auth_user_pass_verify", + "/usr/bin/ovpn-userpass via-env", + translate("Executed in server mode on new client connections, when the client is still untrusted") }, + { ListValue, + "script_security", + { 0, 1, 2, 3 }, + translate("Policy level over usage of external programs and scripts") }, } }, { "Networking", { - -- socket config - { ListValue, "mode", { "p2p", "server" }, translate("Major mode") }, - { Value, "local", "0.0.0.0", translate("Local host name or ip address") }, - { Value, "port", 1194, translate("TCP/UDP port # for both local and remote") }, - { Value, "lport", 1194, translate("TCP/UDP port # for local (default=1194)") }, - { Value, "rport", 1194, translate("TCP/UDP port # for remote (default=1194)") }, - { Flag, "float", 0, translate("Allow remote to change its IP or port") }, - { Flag, "nobind", 0, translate("Do not bind to local address and port") }, - - { Value, "dev", "tun0", translate("tun/tap device") }, - { ListValue, "dev_type", { "tun", "tap" }, translate("Type of used device") }, - { Value, "dev_node", "/dev/net/tun", translate("Use tun/tap device node") }, - { Flag, "tun_ipv6", 0, translate("Make tun device IPv6 capable") }, - - { Value, "ifconfig", "10.200.200.3 10.200.200.1", translate("Set tun/tap adapter parameters") }, - { Flag, "ifconfig_noexec", 0, translate("Don't actually execute ifconfig") }, - { Flag, "ifconfig_nowarn", 0, translate("Don't warn on ifconfig inconsistencies") }, - - { DynamicList, "route", "10.123.0.0 255.255.0.0", translate("Add route after establishing connection") }, - { Value, "route_gateway", "10.234.1.1", translate("Specify a default gateway for routes") }, - { Value, "route_delay", 0, translate("Delay n seconds after connection") }, - { Flag, "route_noexec", 0, translate("Don't add routes automatically") }, - { Flag, "route_nopull", 0, translate("Don't pull routes automatically") }, - - { ListValue, "mtu_disc", { "yes", "maybe", "no" }, translate("Enable Path MTU discovery") }, - { Flag, "mtu_test", 0, translate("Empirically measure MTU") }, - { ListValue, "comp_lzo", { "yes", "no", "adaptive" }, translate("Use fast LZO compression") }, - { Flag, "comp_noadapt", 0, translate("Don't use adaptive lzo compression"), { comp_lzo=1 } }, - { Value, "link_mtu", 1500, translate("Set TCP/UDP MTU") }, - { Value, "tun_mtu", 1500, translate("Set tun/tap device MTU") }, - { Value, "tun_mtu_extra", 1500, translate("Set tun/tap device overhead") }, - { Value, "fragment", 1500, translate("Enable internal datagram fragmentation"), { proto="udp" } }, - { Value, "mssfix", 1500, translate("Set upper bound on TCP MSS"), { proto="udp" } }, - { Value, "sndbuf", 65536, translate("Set the TCP/UDP send buffer size") }, - { Value, "rcvbuf", 65536, translate("Set the TCP/UDP receive buffer size") }, - { Value, "txqueuelen", 100, translate("Set tun/tap TX queue length") }, - { Value, "shaper", 10240, translate("Shaping for peer bandwidth") }, - - { Value, "inactive", 240, translate("tun/tap inactivity timeout") }, - { Value, "keepalive", "10 60", translate("Helper directive to simplify the expression of --ping and --ping-restart in server mode configurations") }, - { Value, "ping", 30, translate("Ping remote every n seconds over TCP/UDP port") }, - { Value, "ping_exit", 120, translate("Remote ping timeout") }, - { Value, "ping_restart", 60, translate("Restart after remote ping timeout") }, - { Flag, "ping_timer_rem", 0, translate("Only process ping timeouts if routes exist") }, - - { Flag, "persist_tun", 0, translate("Keep tun/tap device open on restart") }, - { Flag, "persist_key", 0, translate("Don't re-read key on restart") }, - { Flag, "persist_local_ip", 0, translate("Keep local IP address on restart") }, - { Flag, "persist_remote_ip", 0, translate("Keep remote IP address on restart") }, - - -- management channel - { Value, "management", "127.0.0.1 31194 /etc/openvpn/mngmt-pwds", translate("Enable management interface on <em>IP</em> <em>port</em>") }, - { Flag, "management_query_passwords", 0, translate("Query management channel for private key") }, -- management - { Flag, "management_hold", 0, translate("Start OpenVPN in a hibernating state") }, -- management - { Value, "management_log_cache", 100, translate("Number of lines for log file history") }, -- management - { ListValue, "topology", { "net30", "p2p", "subnet" }, translate("'net30', 'p2p', or 'subnet'"), {dev_type="tun" } }, + -- socket config + { ListValue, + "mode", + { "p2p", "server" }, + translate("Major mode") }, + { Value, + "local", + "0.0.0.0", + translate("Local host name or ip address") }, + { Value, + "port", + 1194, + translate("TCP/UDP port # for both local and remote") }, + { Value, + "lport", + 1194, + translate("TCP/UDP port # for local (default=1194)") }, + { Value, + "rport", + 1194, + translate("TCP/UDP port # for remote (default=1194)") }, + { Flag, + "float", + 0, + translate("Allow remote to change its IP or port") }, + { Flag, + "nobind", + 0, + translate("Do not bind to local address and port") }, + { Value, + "dev", + "tun0", + translate("tun/tap device") }, + { ListValue, + "dev_type", + { "tun", "tap" }, + translate("Type of used device") }, + { Value, + "dev_node", + "/dev/net/tun", + translate("Use tun/tap device node") }, + { Flag, + "tun_ipv6", + 0, + translate("Make tun device IPv6 capable") }, + { Value, + "ifconfig", + "10.200.200.3 10.200.200.1", + translate("Set tun/tap adapter parameters") }, + { Flag, + "ifconfig_noexec", + 0, + translate("Don't actually execute ifconfig") }, + { Flag, + "ifconfig_nowarn", + 0, + translate("Don't warn on ifconfig inconsistencies") }, + { DynamicList, + "route", + "10.123.0.0 255.255.0.0", + translate("Add route after establishing connection") }, + { Value, + "route_gateway", + "10.234.1.1", + translate("Specify a default gateway for routes") }, + { Value, + "route_delay", + 0, + translate("Delay n seconds after connection") }, + { Flag, + "route_noexec", + 0, + translate("Don't add routes automatically") }, + { Flag, + "route_nopull", + 0, + translate("Don't pull routes automatically") }, + { ListValue, + "mtu_disc", + { "yes", "maybe", "no" }, + translate("Enable Path MTU discovery") }, + { Flag, + "mtu_test", + 0, + translate("Empirically measure MTU") }, + { ListValue, + "comp_lzo", + { "yes", "no", "adaptive" }, + translate("Use fast LZO compression") }, + { Flag, + "comp_noadapt", + 0, + translate("Don't use adaptive lzo compression"), + { comp_lzo=1 } }, + { Value, + "link_mtu", + 1500, + translate("Set TCP/UDP MTU") }, + { Value, + "tun_mtu", + 1500, + translate("Set tun/tap device MTU") }, + { Value, + "tun_mtu_extra", + 1500, + translate("Set tun/tap device overhead") }, + { Value, + "fragment", + 1500, + translate("Enable internal datagram fragmentation"), + { proto="udp" } }, + { Value, + "mssfix", + 1500, + translate("Set upper bound on TCP MSS"), + { proto="udp" } }, + { Value, + "sndbuf", + 65536, + translate("Set the TCP/UDP send buffer size") }, + { Value, + "rcvbuf", + 65536, + translate("Set the TCP/UDP receive buffer size") }, + { Value, + "txqueuelen", + 100, + translate("Set tun/tap TX queue length") }, + { Value, + "shaper", + 10240, + translate("Shaping for peer bandwidth") }, + { Value, + "inactive", + 240, + translate("tun/tap inactivity timeout") }, + { Value, + "keepalive", + "10 60", + translate("Helper directive to simplify the expression of --ping and --ping-restart in server mode configurations") }, + { Value, + "ping", + 30, + translate("Ping remote every n seconds over TCP/UDP port") }, + { Value, + "ping_exit", + 120, + translate("Remote ping timeout") }, + { Value, + "ping_restart", + 60, + translate("Restart after remote ping timeout") }, + { Flag, + "ping_timer_rem", + 0, + translate("Only process ping timeouts if routes exist") }, + { Flag, + "persist_tun", + 0, + translate("Keep tun/tap device open on restart") }, + { Flag, + "persist_key", + 0, + translate("Don't re-read key on restart") }, + { Flag, + "persist_local_ip", + 0, + translate("Keep local IP address on restart") }, + { Flag, + "persist_remote_ip", + 0, + translate("Keep remote IP address on restart") }, + -- management channel + { Value, + "management", + "127.0.0.1 31194 /etc/openvpn/mngmt-pwds", + translate("Enable management interface on <em>IP</em> <em>port</em>") }, + -- management + { Flag, + "management_query_passwords", + 0, + translate("Query management channel for private key") }, + -- management + { Flag, + "management_hold", + 0, + translate("Start OpenVPN in a hibernating state") }, + -- management + { Value, + "management_log_cache", + 100, + translate("Number of lines for log file history") }, + { ListValue, + "topology", + { "net30", "p2p", "subnet" }, + translate("'net30', 'p2p', or 'subnet'"), + {dev_type="tun" } }, } }, { "VPN", { - { Value, "server", "10.200.200.0 255.255.255.0", translate("Configure server mode"), { server_mode="1" } }, - { Value, "server_bridge", "10.200.200.1 255.255.255.0 10.200.200.200 10.200.200.250", translate("Configure server bridge"), { server_mode="1" } }, - { DynamicList, "push", { "redirect-gateway", "comp-lzo" }, translate("Push options to peer"), { server_mode="1" } }, - { Flag, "push_reset", 0, translate("Don't inherit global push options"), { server_mode="1" } }, - { Flag, "disable", 0, translate("Client is disabled"), { server_mode="1" } }, - { Value, "ifconfig_pool", "10.200.200.100 10.200.200.150 255.255.255.0", translate("Set aside a pool of subnets"), { server_mode="1" } }, - { Value, "ifconfig_pool_persist", "/etc/openvpn/ipp.txt 600", translate("Persist/unpersist ifconfig-pool"), { server_mode="1" } }, --- { Flag, "ifconfig_pool_linear", 0, translate("Use individual addresses rather than /30 subnets"), { server_mode="1" } }, -- deprecated and replaced by --topology p2p - { Value, "ifconfig_push", "10.200.200.1 255.255.255.255", translate("Push an ifconfig option to remote"), { server_mode="1" } }, - { Value, "iroute", "10.200.200.0 255.255.255.0", translate("Route subnet to client"), { server_mode="1" } }, - { Flag, "client_to_client", 0, translate("Allow client-to-client traffic"), { server_mode="1" } }, - { Flag, "duplicate_cn", 0, translate("Allow multiple clients with same certificate"), { server_mode="1" } }, - { Value, "client_config_dir", "/etc/openvpn/ccd", translate("Directory for custom client config files"), { server_mode="1" } }, - { Flag, "ccd_exclusive", 0, translate("Refuse connection if no custom client config"), { server_mode="1" } }, - { Value, "tmp_dir", "/var/run/openvpn", translate("Temporary directory for client-connect return file"), { server_mode="1" } }, - { Value, "hash_size", "256 256", translate("Set size of real and virtual address hash tables"), { server_mode="1" } }, - { Value, "bcast_buffers", 256, translate("Number of allocated broadcast buffers"), { server_mode="1" } }, - { Value, "tcp_queue_limit", 64, translate("Maximum number of queued TCP output packets"), { server_mode="1" } }, - { Value, "max_clients", 10, translate("Allowed maximum of connected clients"), { server_mode="1" } }, - { Value, "max_routes_per_client", 256, translate("Allowed maximum of internal"), { server_mode="1" } }, - { Value, "connect_freq", "3 10", translate("Allowed maximum of new connections"), { server_mode="1" } }, - { Flag, "client_cert_not_required", 0, translate("Don't require client certificate"), { server_mode="1" } }, - { Flag, "username_as_common_name", 0, translate("Use username as common name"), { server_mode="1" } }, - { Flag, "client", 0, translate("Configure client mode"), { server_mode="0" }, { server_mode="" } }, - { Flag, "pull", 0, translate("Accept options pushed from server"), { client="1" } }, - { Value, "auth_user_pass", "/etc/openvpn/userpass.txt", translate("Authenticate using username/password"), { client="1" } }, - { ListValue, "auth_retry", { "none", "nointeract", "interact" }, translate("Handling of authentication failures"), { client="1" } }, - { Value, "explicit_exit_notify", 1, translate("Send notification to peer on disconnect"), { client="1" } }, - { DynamicList, "remote", "1.2.3.4", translate("Remote host name or ip address"), { client="1" } }, - { Flag, "remote_random", 1, translate("Randomly choose remote server"), { client="1" } }, - { ListValue, "proto", { "udp", "tcp-client", "tcp-server" }, translate("Use protocol"), { client="1" } }, - { Value, "connect_retry", 5, translate("Connection retry interval"), { proto="tcp-client" }, { client="1" } }, - { Value, "http_proxy", "192.168.1.100 8080", translate("Connect to remote host through an HTTP proxy"), { client="1" } }, - { Flag, "http_proxy_retry", 0, translate("Retry indefinitely on HTTP proxy errors"), { client="1" } }, - { Value, "http_proxy_timeout", 5, translate("Proxy timeout in seconds"), { client="1" } }, - { DynamicList, "http_proxy_option", { "VERSION 1.0", "AGENT OpenVPN/2.0.9" }, translate("Set extended HTTP proxy options"), { client="1" } }, - { Value, "socks_proxy", "192.168.1.200 1080", translate("Connect through Socks5 proxy"), { client="1" } }, - { Value, "socks_proxy_retry", 5, translate("Retry indefinitely on Socks proxy errors"), { client="1" } }, -- client && socks_proxy - { Value, "resolv_retry", "infinite", translate("If hostname resolve fails, retry"), { client="1" } }, - { ListValue, "redirect_gateway", { "", "local", "def1", "local def1" }, translate("Automatically redirect default route"), { client="1" } }, + { Value, + "server", + "10.200.200.0 255.255.255.0", + translate("Configure server mode"), + { client="0" }, { client="" } }, + { Value, + "server_bridge", + "10.200.200.1 255.255.255.0 10.200.200.200 10.200.200.250", + translate("Configure server bridge"), + { client="0" }, { client="" } }, + { DynamicList, + "push", + { "redirect-gateway", "comp-lzo" }, + translate("Push options to peer"), + { client="0" }, { client="" } }, + { Flag, + "push_reset", + 0, + translate("Don't inherit global push options"), + { client="0" }, { client="" } }, + { Flag, + "disable", + 0, + translate("Client is disabled"), + { client="0" }, { client="" } }, + { Value, + "ifconfig_pool", + "10.200.200.100 10.200.200.150 255.255.255.0", + translate("Set aside a pool of subnets"), + { client="0" }, { client="" } }, + { Value, + "ifconfig_pool_persist", + "/etc/openvpn/ipp.txt 600", + translate("Persist/unpersist ifconfig-pool"), + { client="0" }, { client="" } }, + -- deprecated and replaced by --topology p2p + -- { Flag, + -- "ifconfig_pool_linear", + -- 0, + -- translate("Use individual addresses rather than /30 subnets"), + -- { client="0" }, { client="" } }, + { Value, + "ifconfig_push", + "10.200.200.1 255.255.255.255", + translate("Push an ifconfig option to remote"), + { client="0" }, { client="" } }, + { Value, + "iroute", + "10.200.200.0 255.255.255.0", + translate("Route subnet to client"), + { client="0" }, { client="" } }, + { Flag, + "client_to_client", + 0, + translate("Allow client-to-client traffic"), + { client="0" }, { client="" } }, + { Flag, + "duplicate_cn", + 0, + translate("Allow multiple clients with same certificate"), + { client="0" }, { client="" } }, + { Value, + "client_config_dir", + "/etc/openvpn/ccd", + translate("Directory for custom client config files"), + { client="0" }, { client="" } }, + { Flag, + "ccd_exclusive", + 0, + translate("Refuse connection if no custom client config"), + { client="0" }, { client="" } }, + { Value, + "tmp_dir", + "/var/run/openvpn", + translate("Temporary directory for client-connect return file"), + { client="0" }, { client="" } }, + { Value, + "hash_size", + "256 256", + translate("Set size of real and virtual address hash tables"), + { client="0" }, { client="" } }, + { Value, + "bcast_buffers", + 256, + translate("Number of allocated broadcast buffers"), + { client="0" }, { client="" } }, + { Value, + "tcp_queue_limit", + 64, + translate("Maximum number of queued TCP output packets"), + { client="0" }, { client="" } }, + { Value, + "max_clients", + 10, + translate("Allowed maximum of connected clients"), + { client="0" }, { client="" } }, + { Value, + "max_routes_per_client", + 256, + translate("Allowed maximum of internal"), + { client="0" }, { client="" } }, + { Value, + "connect_freq", + "3 10", + translate("Allowed maximum of new connections"), + { client="0" }, { client="" } }, + { Flag, + "client_cert_not_required", + 0, + translate("Don't require client certificate"), + { client="0" }, { client="" } }, + { Flag, + "username_as_common_name", + 0, + translate("Use username as common name"), + { client="0" }, { client="" } }, + { Flag, + "client", + 0, + translate("Configure client mode") }, + { Flag, + "pull", + 0, + translate("Accept options pushed from server"), + { client="1" } }, + { Value, + "auth_user_pass", + "/etc/openvpn/userpass.txt", + translate("Authenticate using username/password"), + { client="1" } }, + { ListValue, + "auth_retry", + { "none", "nointeract", "interact" }, + translate("Handling of authentication failures"), + { client="1" } }, + { Value, + "explicit_exit_notify", + 1, + translate("Send notification to peer on disconnect"), + { client="1" } }, + { DynamicList, + "remote", + "1.2.3.4", + translate("Remote host name or ip address"), + { client="1" } }, + { Flag, + "remote_random", + 0, + translate("Randomly choose remote server"), + { client="1" } }, + { ListValue, + "proto", + { "udp", "tcp-client", "tcp-server" }, + translate("Use protocol"), + { client="1" } }, + { Value, + "connect_retry", + 5, + translate("Connection retry interval"), + { proto="tcp-client" }, { client="1" } }, + { Value, + "http_proxy", + "192.168.1.100 8080", + translate("Connect to remote host through an HTTP proxy"), + { client="1" } }, + { Flag, + "http_proxy_retry", + 0, + translate("Retry indefinitely on HTTP proxy errors"), + { client="1" } }, + { Value, + "http_proxy_timeout", + 5, + translate("Proxy timeout in seconds"), + { client="1" } }, + { DynamicList, + "http_proxy_option", + { "VERSION 1.0", "AGENT OpenVPN/2.0.9" }, + translate("Set extended HTTP proxy options"), + { client="1" } }, + { Value, + "socks_proxy", + "192.168.1.200 1080", + translate("Connect through Socks5 proxy"), + { client="1" } }, + -- client && socks_proxy + { Value, + "socks_proxy_retry", + 5, + translate("Retry indefinitely on Socks proxy errors"), + { client="1" } }, + { Value, + "resolv_retry", + "infinite", + translate("If hostname resolve fails, retry"), + { client="1" } }, + { ListValue, + "redirect_gateway", + { "", "local", "def1", "local def1" }, + translate("Automatically redirect default route"), + { client="1" } }, } }, { "Cryptography", { - { FileUpload, "secret", "/etc/openvpn/secret.key", translate("Enable Static Key encryption mode (non-TLS)") }, - { Value, "auth", "SHA1", translate("HMAC authentication for packets") }, -- parse - { Value, "cipher", "BF-CBC", translate("Encryption cipher for packets") }, -- parse - { Value, "keysize", 1024, translate("Size of cipher key") }, -- parse - { Value, "engine", "dynamic", translate("Enable OpenSSL hardware crypto engines") }, -- parse - { Flag, "no_replay", 0, translate("Disable replay protection") }, - { Value, "replay_window", "64 15", translate("Replay protection sliding window size") }, - { Flag, "mute_replay_warnings", 0, translate("Silence the output of replay warnings") }, - { Value, "replay_persist", "/var/run/openvpn-replay-state", translate("Persist replay-protection state") }, - { Flag, "no_iv", 0, translate("Disable cipher initialisation vector") }, - { Flag, "tls_server", 0, translate("Enable TLS and assume server role"), { tls_client="" }, { tls_client="0" } }, - { Flag, "tls_client", 0, translate("Enable TLS and assume client role"), { tls_server="" }, { tls_server="0" } }, - { FileUpload, "ca", "/etc/easy-rsa/keys/ca.crt", translate("Certificate authority") }, - { FileUpload, "dh", "/etc/easy-rsa/keys/dh1024.pem", translate("Diffie Hellman parameters") }, - { FileUpload, "cert", "/etc/easy-rsa/keys/some-client.crt", translate("Local certificate") }, - { FileUpload, "key", "/etc/easy-rsa/keys/some-client.key", translate("Local private key") }, - { FileUpload, "pkcs12", "/etc/easy-rsa/keys/some-client.pk12", translate("PKCS#12 file containing keys") }, - { ListValue, "key_method", { 1, 2 }, translate("Enable TLS and assume client role") }, - { Value, "tls_cipher", "DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC4-SHA:RC4-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5", - translate("TLS cipher") }, - { Value, "tls_timeout", 2, translate("Retransmit timeout on TLS control channel") }, - { Value, "reneg_bytes", 1024, translate("Renegotiate data chan. key after bytes") }, - { Value, "reneg_pkts", 100, translate("Renegotiate data chan. key after packets") }, - { Value, "reneg_sec", 3600, translate("Renegotiate data chan. key after seconds") }, - { Value, "hand_window", 60, translate("Timeframe for key exchange") }, - { Value, "tran_window", 3600, translate("Key transition window") }, - { Flag, "single_session", 0, translate("Allow only one session") }, - { Flag, "tls_exit", 0, translate("Exit on TLS negotiation failure") }, - { Value, "tls_auth", "/etc/openvpn/tlsauth.key", translate("Additional authentication over TLS") }, - --{ Value, "askpass", "[file]", translate("Get PEM password from controlling tty before we daemonize") }, - { Flag, "auth_nocache", 0, translate("Don't cache --askpass or --auth-user-pass passwords") }, - { Value, "tls_remote", "remote_x509_name", translate("Only accept connections from given X509 name") }, - { ListValue, "ns_cert_type", { "client", "server" }, translate("Require explicit designation on certificate") }, - { ListValue, "remote_cert_tls", { "client", "server" }, translate("Require explicit key usage on certificate") }, - { Value, "crl_verify", "/etc/easy-rsa/keys/crl.pem", translate("Check peer certificate against a CRL") }, - { Value, "tls_version_min", "1.0", translate("The lowest supported TLS version") }, - { Value, "tls_version_max", "1.2", translate("The highest supported TLS version") }, - { Value, "key_direction", "1", translate("The key direction for 'tls-auth' and 'secret' options") }, - } } + { FileUpload, + "secret", + "/etc/openvpn/secret.key", + translate("Enable Static Key encryption mode (non-TLS)") }, + -- parse + { Value, + "auth", + "SHA1", + translate("HMAC authentication for packets") }, + -- parse + { Value, + "cipher", + "BF-CBC", + translate("Encryption cipher for packets") }, + -- parse + { Value, + "keysize", + 1024, + translate("Size of cipher key") }, + -- parse + { Value, + "engine", + "dynamic", + translate("Enable OpenSSL hardware crypto engines") }, + { Flag, + "no_replay", + 0, + translate("Disable replay protection") }, + { Value, + "replay_window", + "64 15", + translate("Replay protection sliding window size") }, + { Flag, + "mute_replay_warnings", + 0, + translate("Silence the output of replay warnings") }, + { Value, + "replay_persist", + "/var/run/openvpn-replay-state", + translate("Persist replay-protection state") }, + { Flag, + "no_iv", + 0, + translate("Disable cipher initialisation vector") }, + { Flag, + "tls_server", + 0, + translate("Enable TLS and assume server role"), + { tls_client="" }, { tls_client="0" } }, + { Flag, + "tls_client", + 0, + translate("Enable TLS and assume client role"), + { tls_server="" }, { tls_server="0" } }, + { FileUpload, + "ca", + "/etc/easy-rsa/keys/ca.crt", + translate("Certificate authority") }, + { FileUpload, + "dh", + "/etc/easy-rsa/keys/dh1024.pem", + translate("Diffie Hellman parameters") }, + { FileUpload, + "cert", + "/etc/easy-rsa/keys/some-client.crt", + translate("Local certificate") }, + { FileUpload, + "key", + "/etc/easy-rsa/keys/some-client.key", + translate("Local private key") }, + { FileUpload, + "pkcs12", + "/etc/easy-rsa/keys/some-client.pk12", + translate("PKCS#12 file containing keys") }, + { ListValue, + "key_method", + { 1, 2 }, + translate("Enable TLS and assume client role") }, + { Value, + "tls_cipher", + "DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC4-SHA:RC4-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5", + translate("TLS cipher") }, + { Value, + "tls_timeout", + 2, + translate("Retransmit timeout on TLS control channel") }, + { Value, + "reneg_bytes", + 1024, + translate("Renegotiate data chan. key after bytes") }, + { Value, + "reneg_pkts", + 100, + translate("Renegotiate data chan. key after packets") }, + { Value, + "reneg_sec", + 3600, + translate("Renegotiate data chan. key after seconds") }, + { Value, + "hand_window", + 60, + translate("Timeframe for key exchange") }, + { Value, + "tran_window", + 3600, + translate("Key transition window") }, + { Flag, + "single_session", + 0, + translate("Allow only one session") }, + { Flag, + "tls_exit", + 0, + translate("Exit on TLS negotiation failure") }, + { Value, + "tls_auth", + "/etc/openvpn/tlsauth.key", + translate("Additional authentication over TLS") }, + -- { Value, + -- "askpass", + -- "[file]", + -- translate("Get PEM password from controlling tty before we daemonize") }, + { Flag, + "auth_nocache", + 0, + translate("Don't cache --askpass or --auth-user-pass passwords") }, + { Value, + "tls_remote", + "remote_x509_name", + translate("Only accept connections from given X509 name") }, + { ListValue, + "ns_cert_type", + { "client", "server" }, + translate("Require explicit designation on certificate") }, + { ListValue, + "remote_cert_tls", + { "client", "server" }, + translate("Require explicit key usage on certificate") }, + { Value, + "crl_verify", + "/etc/easy-rsa/keys/crl.pem", + translate("Check peer certificate against a CRL") }, + { Value, + "tls_version_min", + "1.0", + translate("The lowest supported TLS version") }, + { Value, + "tls_version_max", + "1.2", + translate("The highest supported TLS version") }, + { Value, + "key_direction", + "1", + translate("The key direction for 'tls-auth' and 'secret' options") }, + } } } diff --git a/applications/luci-app-openvpn/po/pt-br/openvpn.po b/applications/luci-app-openvpn/po/pt-br/openvpn.po index 916370e7f..84b054058 100644 --- a/applications/luci-app-openvpn/po/pt-br/openvpn.po +++ b/applications/luci-app-openvpn/po/pt-br/openvpn.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:41+0200\n" -"PO-Revision-Date: 2014-03-29 23:19+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-20 18:04-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "%s" msgstr "%s" @@ -154,7 +154,7 @@ msgid "Don't log timestamps" msgstr "Não registar a data/hora" msgid "Don't pull routes automatically" -msgstr "" +msgstr "Não puxe as rotas automaticamente" msgid "Don't re-read key on restart" msgstr "Não reler a chave entre os reinícios" @@ -505,13 +505,13 @@ msgid "Temporary directory for client-connect return file" msgstr "Diretório temporário para arquivo de retorno de conexão-cliente" msgid "The highest supported TLS version" -msgstr "" +msgstr "A mais alta versão suporta do TLS" msgid "The key direction for 'tls-auth' and 'secret' options" -msgstr "" +msgstr "A direção da chave para as opções 'tls-auth' e 'secret'" msgid "The lowest supported TLS version" -msgstr "" +msgstr "A mais baixa versão suporta do TLS" msgid "Timeframe for key exchange" msgstr "Janela temporal para troca de chaves" diff --git a/applications/luci-app-openvpn/po/zh-cn/openvpn.po b/applications/luci-app-openvpn/po/zh-cn/openvpn.po index 899b4d238..3904ac4bf 100644 --- a/applications/luci-app-openvpn/po/zh-cn/openvpn.po +++ b/applications/luci-app-openvpn/po/zh-cn/openvpn.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-19 19:35+0200\n" -"PO-Revision-Date: 2013-10-10 06:09+0200\n" -"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n" +"PO-Revision-Date: 2017-04-14 17:26-0600\n" +"Last-Translator: liushuyu <liushuyu011@gmail.com>\n" "Language-Team: QQ Group 75543259 <axishero@foxmail.com>\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 2.0.1\n" msgid "%s" msgstr "%s" @@ -498,13 +498,13 @@ msgid "Temporary directory for client-connect return file" msgstr "客户端连接返回文件的临时目录" msgid "The highest supported TLS version" -msgstr "" +msgstr "最高支持的 TLS 版本" msgid "The key direction for 'tls-auth' and 'secret' options" msgstr "" msgid "The lowest supported TLS version" -msgstr "" +msgstr "最低支持的 TLS 版本" msgid "Timeframe for key exchange" msgstr "密钥交换时间表" diff --git a/applications/luci-app-p910nd/po/ja/p910nd.po b/applications/luci-app-p910nd/po/ja/p910nd.po index 42335cefa..28ffc3817 100644 --- a/applications/luci-app-p910nd/po/ja/p910nd.po +++ b/applications/luci-app-p910nd/po/ja/p910nd.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-19 19:36+0200\n" -"PO-Revision-Date: 2011-11-04 18:11+0200\n" -"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2016-12-22 01:08+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.4\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "Bidirectional mode" msgstr "双方向モード" @@ -27,7 +27,7 @@ msgstr "" "るためのパッケージをインストールしてください。" msgid "Interface" -msgstr "" +msgstr "インターフェース" msgid "Port" msgstr "ポート番号" @@ -36,7 +36,7 @@ msgid "Settings" msgstr "設定" msgid "Specifies the interface to listen on." -msgstr "" +msgstr "待ち受けるインターフェースを指定します。" msgid "TCP listener port." msgstr "TCP接続待ちポート" diff --git a/applications/luci-app-privoxy/po/pt-br/privoxy.po b/applications/luci-app-privoxy/po/pt-br/privoxy.po new file mode 100644 index 000000000..8d3eee20d --- /dev/null +++ b/applications/luci-app-privoxy/po/pt-br/privoxy.po @@ -0,0 +1,516 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "" +"A URL to be displayed in the error page that users will see if access to an " +"untrusted page is denied." +msgstr "" +"A URL a ser exibida na página de erro que os usuários verão se o acesso a " +"uma página não confiável é negado." + +msgid "" +"A URL to documentation about the local Privoxy setup, configuration or " +"policies." +msgstr "" +"A URL para a documentação sobre o Privoxy local, configuração ou políticas." + +msgid "A directory where Privoxy can create temporary files." +msgstr "Um diretório onde Privoxy pode criar arquivos temporários." + +msgid "Access Control" +msgstr "Controle de Acesso" + +msgid "Actions that are applied to all sites and maybe overruled later on." +msgstr "" +"Ações que são aplicadas a todos as páginas e talvez descartado mais tarde." + +msgid "An alternative directory where the templates are loaded from." +msgstr "Um diretório alternativo de onde os modelos são carregados." + +msgid "An email address to reach the Privoxy administrator." +msgstr "Um endereço de e-mail para alcançar o administrador do Privoxy." + +msgid "" +"Assumed server-side keep-alive timeout (in seconds) if not specified by the " +"server." +msgstr "" +"Tempo limite, em segundos, da manutenção da conexão (keep-alive) do servidor " +"se não for especificado." + +msgid "Boot delay" +msgstr "Atraso de iniciação" + +msgid "CGI user interface" +msgstr "Interface de usuário CGI" + +msgid "Common Log Format" +msgstr "Formato de registros (log) comum" + +msgid "" +"Configure here the routing of HTTP requests through a chain of multiple " +"proxies. Note that parent proxies can severely decrease your privacy level. " +"Also specified here are SOCKS proxies." +msgstr "" +"Configure aqui o encaminhamento de pedidos HTTP através de uma cadeia de " +"múltiplos proxies. Note-se que proxies pai pode diminuir muito o nível de " +"privacidade. Também serão aceitos proxies SOCKS." + +msgid "Debug GIF de-animation" +msgstr "Depurar de-animação GIF" + +msgid "Debug force feature" +msgstr "Recurso de depuração forçado" + +msgid "Debug redirects" +msgstr "Redirecionamentos de depuração" + +msgid "Debug regular expression filters" +msgstr "Depuração de filtros de expressão regular" + +msgid "Delay (in seconds) during system boot before Privoxy start" +msgstr "" +"Atraso (em segundos) durante a inicialização do sistema antes do Privoxy " +"iniciar" + +msgid "Directory does not exist!" +msgstr "O diretório não existe!" + +msgid "Disabled == Transparent Proxy Mode" +msgstr "Desativado == Modo Proxy Transparente" + +msgid "Documentation" +msgstr "Documentação" + +msgid "During delay ifup-events are not monitored !" +msgstr "Durante a espera, eventos ifup não serão monitorados!" + +msgid "Enable proxy authentication forwarding" +msgstr "Habilitar o encaminhamento de autenticação de proxy" + +msgid "" +"Enable/Disable autostart of Privoxy on system startup and interface events" +msgstr "" +"Ativar/Desativar a iniciação automática do Privoxy junto com a iniciação do " +"sistema ou eventos de interface" + +msgid "Enable/Disable filtering when Privoxy starts." +msgstr "Ativar / Desativar filtragem quando Privoxy iniciar." + +msgid "Enabled" +msgstr "Habilitado" + +msgid "" +"Enabling this option is NOT recommended if there is no parent proxy that " +"requires authentication!" +msgstr "" +"A ativação dessa opção não é recomendado se não houver nenhum proxy pai que " +"requer autenticação!" + +msgid "File '%s' not found inside Configuration Directory" +msgstr "O arquivo '%s' não foi encontrado dentro do Diretório de Configuração" + +msgid "File not found or empty" +msgstr "Arquivo não encontrado ou vazio" + +msgid "Files and Directories" +msgstr "Arquivos e diretórios" + +msgid "For help use link at the relevant option" +msgstr "Para ajuda, use o link na respectiva opção" + +msgid "Forwarding" +msgstr "Encaminhando" + +msgid "" +"If enabled, Privoxy hides the 'go there anyway' link. The user obviously " +"should not be able to bypass any blocks." +msgstr "" +"Se ativado, Privoxy esconde o link \"ir lá de qualquer maneira\". O usuário, " +"obviamente, não deve ser capaz de contornar qualquer bloqueio." + +msgid "" +"If you intend to operate Privoxy for more users than just yourself, it might " +"be a good idea to let them know how to reach you, what you block and why you " +"do that, your policies, etc." +msgstr "" +"Se você pretende operar Privoxy para mais usuários do que apenas a si mesmo, " +"pode ser uma boa ideia para que eles saibam como falar com você, o que você " +"bloquear e por que você faz isso, as suas políticas, etc." + +msgid "Invalid email address" +msgstr "Endereço de e-mail inválido" + +msgid "It is NOT recommended for the casual user." +msgstr "Não é recomendado para o usuário casual." + +msgid "Location of the Privoxy User Manual." +msgstr "Localização do Manual do Usuário do Privoxy." + +msgid "Log File Viewer" +msgstr "Visualizador de arquivo de registros (log)" + +msgid "Log all data read from the network" +msgstr "Registrar todos os dados lidos da rede" + +msgid "Log all data written to the network" +msgstr "Registrar todos os dados gravados na rede" + +msgid "Log the applying actions" +msgstr "Registrar as ações aplicadas" + +msgid "" +"Log the destination for each request Privoxy let through. See also 'Debug " +"1024'." +msgstr "" +"Registrar o destino para cada pedido que o Privoxy deixou passar. Consulte " +"também 'Debug 1024'." + +msgid "" +"Log the destination for requests Privoxy didn't let through, and the reason " +"why." +msgstr "" +"Registrar o destino para os pedidos que o Privoxy não deixou passar, e a " +"razão pela qual." + +msgid "Logging" +msgstr "Registrando (logging)" + +msgid "Main actions file" +msgstr "Arquivo principal de ações" + +msgid "Mandatory Input: No Data given!" +msgstr "Entrada obrigatória: Dados não foram informados!" + +msgid "Mandatory Input: No Directory given!" +msgstr "Entrada obrigatória: Nenhum Diretório foi informado!" + +msgid "Mandatory Input: No File given!" +msgstr "Entrada obrigatória: Nenhum Arquivo foi informado!" + +msgid "Mandatory Input: No Port given!" +msgstr "Entrada obrigatória: Nenhuma Porta foi informado!" + +msgid "Mandatory Input: No files given!" +msgstr "Entrada obrigatória: Nenhum Arquivo foi informado!" + +msgid "Mandatory Input: No valid IPv4 address or host given!" +msgstr "" +"Entrada obrigatória: Nenhum endereço IPv4 ou nome de equipamento válido foi " +"fornecido!" + +msgid "Mandatory Input: No valid IPv6 address given!" +msgstr "Entrada obrigatória: Nenhum endereço IPv6 válido foi informado!" + +msgid "Mandatory Input: No valid Port given!" +msgstr "Entrada obrigatória: Nenhuma porta válida foi informada!" + +msgid "Maximum number of client connections that will be served." +msgstr "O número máximo de conexões de cliente que será aceito." + +msgid "Maximum size (in KB) of the buffer for content filtering." +msgstr "Tamanho máximo (em KB) do buffer para filtragem de conteúdo." + +msgid "Miscellaneous" +msgstr "Diversos" + +msgid "NOT installed" +msgstr "NÃO instalado" + +msgid "No trailing '/', please." +msgstr "Sem '/' final, por favor." + +msgid "Non-fatal errors - *we highly recommended enabling this*" +msgstr "Erros não fatais - *é altamente recomendado ativar isto*" + +msgid "" +"Number of seconds after which a socket times out if no data is received." +msgstr "" +"Número de segundos após o qual uma conexão expira se nenhum dado for " +"recebido." + +msgid "" +"Number of seconds after which an open connection will no longer be reused." +msgstr "" +"Número de segundos após o qual uma conexão aberta deixará de ser reutilizada." + +msgid "" +"Only when using 'external filters', Privoxy has to create temporary files." +msgstr "" +"Somente quando for usado os \"filtros externos\". O Privoxy tem que criar " +"arquivos temporários." + +msgid "Please install current version !" +msgstr "Por favor, instale a versão atual!" + +msgid "Please press [Read] button" +msgstr "Por favor, pressione o botão [Ler]" + +msgid "Please read Privoxy manual for details!" +msgstr "Por favor, leia o manual do Privoxy para mais detalhes!" + +msgid "Please update to the current version!" +msgstr "Por favor, atualize para a versão atual!" + +msgid "Privoxy WEB proxy" +msgstr "Privoxy Web Proxy" + +msgid "" +"Privoxy can (and normally does) use a number of other files for additional " +"configuration, help and logging. This section of the configuration file " +"tells Privoxy where to find those other files." +msgstr "" +"Privoxy pode (e normalmente o faz) utilizar uma série de outros arquivos de " +"configuração, ajuda e de registros. Esta seção do arquivo de configuração " +"informa o Privoxy onde encontrar os outros arquivos." + +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" +"Privoxy é um proxy web sem cache com capacidades avançadas de filtragem para " +"aumentar a privacidade, modificar dados de páginas web e cabeçalhos HTTP, " +"controlar o acesso e remover anúncios e outras porcarias detestável da " +"Internet." + +msgid "Read / Reread log file" +msgstr "Ler / Ler novamente o arquivo de registros (log)" + +msgid "Show I/O status" +msgstr "Mostrar status de Entrada/Saída" + +msgid "Show each connection status" +msgstr "Mostrar cada estado de conexão" + +msgid "Show header parsing" +msgstr "Mostrar análise do cabeçalho" + +msgid "Software package '%s' is not installed." +msgstr "O pacote de software '%s' não está instalado." + +msgid "Software package '%s' is outdated." +msgstr "O pacote '%' está desatualizado." + +msgid "Start" +msgstr "Iniciar" + +msgid "Start / Stop" +msgstr "Iniciar / Parar" + +msgid "Start/Stop Privoxy WEB Proxy" +msgstr "Inicia / Para o Privoxy Web Proxy" + +msgid "Startup banner and warnings." +msgstr "Mensagens e avisos iniciais." + +msgid "Syntax:" +msgstr "Sintaxe:" + +msgid "Syntax: Client header names delimited by spaces." +msgstr "Sintaxe: nomes de cabeçalho do cliente delimitados por espaços." + +msgid "Syntax: target_pattern http_parent[:port]" +msgstr "Sintaxe: padrão_alvo http_superior[:porta]" + +msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]" +msgstr "Sintaxe: padrão_alvo proxy_socks[:porta] http_superior[:porta]" + +msgid "System" +msgstr "Sistema" + +msgid "" +"The actions file(s) to use. Multiple actionsfile lines are permitted, and " +"are in fact recommended!" +msgstr "" +"O(s) arquivo(s) ações a ser usado. Várias linhas no arquivo são permitidas, " +"e são, de fato, recomendadas!" + +msgid "" +"The address and TCP port on which Privoxy will listen for client requests." +msgstr "" +"O endereço e porta TCP em que Privoxy vai esperar por pedidos dos clientes." + +msgid "" +"The compression level that is passed to the zlib library when compressing " +"buffered content." +msgstr "" +"O nível de compressão que é passada para a biblioteca zlib ao comprimir o " +"conteúdo em buffer." + +msgid "" +"The directory where all logging takes place (i.e. where the logfile is " +"located)." +msgstr "" +"O diretório onde todos os registros ocorrem (ex: onde o arquivo de log está " +"localizado)." + +msgid "The directory where the other configuration files are located." +msgstr "O diretório onde os outros arquivos de configuração estão localizados." + +msgid "" +"The filter files contain content modification rules that use regular " +"expressions." +msgstr "" +"Os arquivos de filtro contêm regras de modificação de conteúdo que usam " +"expressões regulares." + +msgid "The hostname shown on the CGI pages." +msgstr "O nome da máquina mostrado nas páginas de CGI." + +msgid "The log file to use. File name, relative to log directory." +msgstr "" +"O arquivo de registros a ser usado. O nome do arquivo, relativo ao diretório " +"de log." + +msgid "The order in which client headers are sorted before forwarding them." +msgstr "" +"A ordem em que os cabeçalhos dos clientes são classificados antes de " +"encaminhá-los." + +msgid "" +"The status code Privoxy returns for pages blocked with +handle-as-empty-" +"document." +msgstr "" +"O código de status Privoxy retorna para páginas bloqueadas com +handle-as-" +"empty-document." + +msgid "" +"The trust mechanism is an experimental feature for building white-lists and " +"should be used with care." +msgstr "" +"O mecanismo de confiança é um recurso experimental para a construção de " +"listas de destinos confiáveis e deve ser usado com cuidado." + +msgid "" +"The value of this option only matters if the experimental trust mechanism " +"has been activated." +msgstr "" +"O valor desta opção só importa se o mecanismo de confiança experimental foi " +"ativado." + +msgid "" +"This option is only there for debugging purposes. It will drastically reduce " +"performance." +msgstr "" +"Esta opção só está lá para fins de depuração. Ele irá reduzir drasticamente " +"o desempenho." + +msgid "" +"This option will be removed in future releases as it has been obsoleted by " +"the more general header taggers." +msgstr "" +"Esta opção será removida em versões futuras, uma vez que ficou obsoleta " +"pelos marcadores de cabeçalho mais genéricos." + +msgid "" +"This tab controls the security-relevant aspects of Privoxy's configuration." +msgstr "" +"Esta guia controla os aspectos da configuração do Privoxy relevantes para a " +"segurança." + +msgid "" +"Through which SOCKS proxy (and optionally to which parent HTTP proxy) " +"specific requests should be routed." +msgstr "" +"Através de qual Proxy SOCKS (e, opcionalmente, para o qual proxy HTTP " +"superior) pedidos específicos devem ser encaminhados." + +msgid "To which parent HTTP proxy specific requests should be routed." +msgstr "" +"Para qual proxy HTTP superior os pedidos específicos devem ser encaminhados." + +msgid "User customizations" +msgstr "Personalizações do usuário" + +msgid "Value is not a number" +msgstr "O valor não é um número" + +msgid "Value not between 0 and 300" +msgstr "Valor não está entre 0 e 300" + +msgid "Value not between 0 and 9" +msgstr "Valor não está entre 0 e 9" + +msgid "Value not between 1 and 4096" +msgstr "Valor não entre 1 e 4096" + +msgid "Value not greater 0 or empty" +msgstr "Valor não é maior que 0 ou vazio" + +msgid "Value range 1 to 4096, no entry defaults to 4096" +msgstr "Faixa do valor de 1 até 4096. Se vazio, será 4096" + +msgid "Version" +msgstr "Versão" + +msgid "Version Information" +msgstr "Informação da Versão" + +msgid "Whether intercepted requests should be treated as valid." +msgstr "Se as solicitações interceptados deve ser tratadas como válidas." + +msgid "" +"Whether or not Privoxy recognizes special HTTP headers to change toggle " +"state." +msgstr "" +"Se o Privoxy deve reconhecer cabeçalhos HTTP especiais para mudar de " +"alternância do estado." + +msgid "Whether or not buffered content is compressed before delivery." +msgstr "Se o conteúdo em buffer é comprimido antes da entrega." + +msgid "" +"Whether or not outgoing connections that have been kept alive should be " +"shared between different incoming connections." +msgstr "" +"Se as conexões de saída que foram mantidas vivas devem ser compartilhadas " +"entre diferentes conexões de entrada." + +msgid "Whether or not pipelined requests should be served." +msgstr "Se os pedidos de pipeline deve ser aceitos." + +msgid "Whether or not proxy authentication through Privoxy should work." +msgstr "Se a autenticação de proxy através do Privoxy deve funcionar." + +msgid "Whether or not the web-based actions file editor may be used." +msgstr "Se o editor de arquivos de ações baseadas na web deve ser utilizado." + +msgid "Whether or not the web-based toggle feature may be used." +msgstr "Se deve ser usado o recurso de alternância baseado na web." + +msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected." +msgstr "" +"Se as solicitações para páginas CGI do Privoxy podem ser bloqueadas ou " +"redirecionadas." + +msgid "" +"Whether the CGI interface should stay compatible with broken HTTP clients." +msgstr "" +"Se a interface CGI deve se manter compatível com clientes HTTP mal " +"implementados." + +msgid "Whether to run only one server thread." +msgstr "Se deseja executar o servidor como apenas uma thread." + +msgid "Who can access what." +msgstr "Quem pode acessar o quê." + +msgid "installed" +msgstr "instalado" + +msgid "or higher" +msgstr "ou maior" + +msgid "required" +msgstr "necessário" diff --git a/applications/luci-app-privoxy/po/zh-cn/privoxy.po b/applications/luci-app-privoxy/po/zh-cn/privoxy.po index 75d1a921c..778422b8b 100644 --- a/applications/luci-app-privoxy/po/zh-cn/privoxy.po +++ b/applications/luci-app-privoxy/po/zh-cn/privoxy.po @@ -2,14 +2,14 @@ msgid "" msgstr "" "Project-Id-Version: luci-app-privoxy\n" "POT-Creation-Date: 2015-06-10 20:16+0100\n" -"PO-Revision-Date: 2015-06-10 20:16+0100\n" +"PO-Revision-Date: 2017-01-05 18:01+0800\n" "Last-Translator: maz-1 <ohmygod19993 at gmail dotcom>\n" "Language-Team: \n" -"Language: zh-cn\n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.11\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-SourceCharset: UTF-8\n" @@ -21,10 +21,10 @@ msgstr "当用户试图访问不受信任的页面时,错误页面所显示的 msgid "" "A URL to documentation about the local Privoxy setup, configuration or " "policies." -msgstr "指向Privoxy安装、设置和规则说明文档的URL" +msgstr "指向 Privoxy 安装、设置和规则说明文档的 URL" msgid "A directory where Privoxy can create temporary files." -msgstr "Privoxy存放临时文件的目录。" +msgstr "Privoxy 存放临时文件的目录。" msgid "Access Control" msgstr "访问控制" @@ -36,18 +36,18 @@ msgid "An alternative directory where the templates are loaded from." msgstr "可选的目录,放在里面的模板会被加载。" msgid "An email address to reach the Privoxy administrator." -msgstr "用于联系privoxy管理员的邮箱地址。" +msgstr "用于联系 Privoxy 管理员的邮箱地址。" msgid "" "Assumed server-side keep-alive timeout (in seconds) if not specified by the " "server." -msgstr "当服务端没有指定超时时间时假定的超时时间(单位秒)。" +msgstr "当服务端没有指定超时时间时假定的超时时间(单位:秒)。" msgid "Boot delay" -msgstr "" +msgstr "启动延时" msgid "CGI user interface" -msgstr "CGI用户界面" +msgstr "CGI 用户界面" msgid "Common Log Format" msgstr "通用日志格式" @@ -57,14 +57,14 @@ msgid "" "proxies. Note that parent proxies can severely decrease your privacy level. " "Also specified here are SOCKS proxies." msgstr "" -"在这里设置http请求所经过的多重代理链。注意父级代理可能严重降低你的隐私安全" -"度。在这里还可以设置SOCKS代理。" +"在这里设置 HTTP 请求所经过的多重代理链。注意:父级代理可能严重降低你的隐私安" +"全度。在这里还可以设置 SOCKS 代理。" msgid "Debug GIF de-animation" msgstr "GIF动画日志" msgid "Debug force feature" -msgstr "force feature日志" +msgstr "Force feature 日志" msgid "Debug redirects" msgstr "重定向日志" @@ -73,7 +73,7 @@ msgid "Debug regular expression filters" msgstr "正则表达式日志" msgid "Delay (in seconds) during system boot before Privoxy start" -msgstr "" +msgstr "Privoxy 自启动延迟时间(单位:秒)" msgid "Directory does not exist!" msgstr "目录不存在!" @@ -82,20 +82,20 @@ msgid "Disabled == Transparent Proxy Mode" msgstr "禁用 == 透明代理模式" msgid "Documentation" -msgstr "" +msgstr "记录信息" msgid "During delay ifup-events are not monitored !" -msgstr "" +msgstr "在延迟期间无法检测到 ifup 事件!" msgid "Enable proxy authentication forwarding" msgstr "允许转发代理认证" msgid "" "Enable/Disable autostart of Privoxy on system startup and interface events" -msgstr "开启/关闭Privoxy在系统启动或者设置界面更改时自动启动。" +msgstr "开启/关闭 Privoxy 在系统启动或接口事件时自动启动。" msgid "Enable/Disable filtering when Privoxy starts." -msgstr "Privoxy启动时开启/关闭过滤。" +msgstr "Privoxy 启动时开启/关闭过滤。" msgid "Enabled" msgstr "已开启" @@ -103,10 +103,10 @@ msgstr "已开启" msgid "" "Enabling this option is NOT recommended if there is no parent proxy that " "requires authentication!" -msgstr "父级代理不需要认证时不推荐开启这个选项!" +msgstr "如果没有需要认证的父级代理时,不推荐开启这个选项!" msgid "File '%s' not found inside Configuration Directory" -msgstr "文件 '%s' 没有在设置目录中找到!" +msgstr "在设置目录中未找到文件 '%S'!" msgid "File not found or empty" msgstr "文件不存在或为空" @@ -115,7 +115,7 @@ msgid "Files and Directories" msgstr "文件和目录" msgid "For help use link at the relevant option" -msgstr "在相应选项下的连接可获取帮助。" +msgstr "点击相应选项的连接可获取帮助。" msgid "Forwarding" msgstr "转发" @@ -123,15 +123,15 @@ msgstr "转发" msgid "" "If enabled, Privoxy hides the 'go there anyway' link. The user obviously " "should not be able to bypass any blocks." -msgstr "如果启用,Privoxy会隐藏'go there anyway'链接。用户显然不应能绕过屏蔽。" +msgstr "如果启用,Privoxy 会隐藏 'go there anyway' 链接,用户就不能绕过屏蔽。" msgid "" "If you intend to operate Privoxy for more users than just yourself, it might " "be a good idea to let them know how to reach you, what you block and why you " "do that, your policies, etc." msgstr "" -"如果除了你还有其他用户通过privoxy连接,让他们知道如何联系你、什么内容被屏蔽" -"了、你为什么要这么做、你所制定的规范等等是一个好主意。" +"如果除了你还有其他用户使用 Privoxy 连接,最好让他们知道如何联系你,你屏蔽什" +"么,你为什么这样做,你的政策等等。" msgid "Invalid email address" msgstr "邮箱地址无效" @@ -140,29 +140,29 @@ msgid "It is NOT recommended for the casual user." msgstr "不推荐新手使用。" msgid "Location of the Privoxy User Manual." -msgstr "Privoxy用户手册位置" +msgstr "Privoxy 用户手册位置" msgid "Log File Viewer" msgstr "日志查看器" msgid "Log all data read from the network" -msgstr "记录所有从网络接收的数据" +msgstr "记录所有接收的网络数据" msgid "Log all data written to the network" -msgstr "记录所有发送给网络的数据" +msgstr "记录所有发送的网络数据" msgid "Log the applying actions" -msgstr "记录被应用的规则" +msgstr "记录配置保存动作" msgid "" "Log the destination for each request Privoxy let through. See also 'Debug " "1024'." -msgstr "记录Privoxy所允许的所有请求。另请参考'Debug 1024'。" +msgstr "记录 Privoxy 允许的所有请求。另请参考 'Debug 1024'。" msgid "" "Log the destination for requests Privoxy didn't let through, and the reason " "why." -msgstr "记录被Privoxy拒绝的请求目标以及拒绝原因。" +msgstr "记录 Privoxy 拒绝的请求目标以及拒绝原因。" msgid "Logging" msgstr "日志" @@ -198,40 +198,40 @@ msgid "Maximum number of client connections that will be served." msgstr "客户端数量上限。" msgid "Maximum size (in KB) of the buffer for content filtering." -msgstr "内容过滤的最大缓冲(单位KB)。" +msgstr "内容过滤的最大缓冲(单位:KB)。" msgid "Miscellaneous" msgstr "杂项" msgid "NOT installed" -msgstr "" +msgstr "未安装" msgid "No trailing '/', please." -msgstr "路径结尾不要加'/' ." +msgstr "路径结尾不要加 '/' 。" msgid "Non-fatal errors - *we highly recommended enabling this*" -msgstr "非致命性错误 - * 建议开启 *" +msgstr "非致命性错误 - * 强烈建议开启 *" msgid "" "Number of seconds after which a socket times out if no data is received." -msgstr "socket连接未收到数据的超时时间。" +msgstr "Socket 连接未收到数据的超时时间。" msgid "" "Number of seconds after which an open connection will no longer be reused." -msgstr "一个开放的连接不再重复使用的超时时间。" +msgstr "开放的连接不再重复使用的超时时间。" msgid "" "Only when using 'external filters', Privoxy has to create temporary files." -msgstr "只有使用外置规则时,privoxy才需要创建临时文件。" +msgstr "只有使用外置规则时,Privoxy 才需要创建临时文件。" msgid "Please install current version !" -msgstr "" +msgstr "请安装当前版本!" msgid "Please press [Read] button" -msgstr "请点击[读取]按钮" +msgstr "请点击 [读取] 按钮" msgid "Please read Privoxy manual for details!" -msgstr "请阅读Privoxy手册以了解详情!" +msgstr "请阅读 Privoxy 手册以了解详情!" msgid "Please update to the current version!" msgstr "请升级到当前版本!" @@ -244,16 +244,16 @@ msgid "" "configuration, help and logging. This section of the configuration file " "tells Privoxy where to find those other files." msgstr "" -"Privoxy可以使用其他一些文件用于附加设置,帮助和日志。这个区域用来告诉Privoxy" -"从哪里找到这些文件。" +"Privoxy 可以使用其他一些文件用于附加设置,帮助和日志。这个区域用来告诉 " +"Privoxy 从哪里找到这些文件。" msgid "" "Privoxy is a non-caching web proxy with advanced filtering capabilities for " "enhancing privacy, modifying web page data and HTTP headers, controlling " "access, and removing ads and other obnoxious Internet junk." msgstr "" -"Privoxy是一个无缓存的网络代理,具有高级过滤功能,能够修改网页数据和HTTP头,控" -"制访问,移除广告等。" +"Privoxy 是一个无缓存的网络代理,具有高级过滤功能,能够修改网页数据和 HTTP 请" +"求头,控制访问,移除广告等。" msgid "Read / Reread log file" msgstr "读取/刷新日志文件" @@ -265,13 +265,13 @@ msgid "Show each connection status" msgstr "显示每个连接的状态" msgid "Show header parsing" -msgstr "Show header parsing" +msgstr "显示请求头 解析" msgid "Software package '%s' is not installed." -msgstr "" +msgstr "软件包 '%s' 未安装" msgid "Software package '%s' is outdated." -msgstr "" +msgstr "软件包 '%s' 已过时" msgid "Start" msgstr "启动" @@ -289,7 +289,7 @@ msgid "Syntax:" msgstr "格式:" msgid "Syntax: Client header names delimited by spaces." -msgstr "格式: Client header names delimited by spaces." +msgstr "格式: 由空格分隔的客户端请求头名称。" msgid "Syntax: target_pattern http_parent[:port]" msgstr "格式: target_pattern http_parent[:port]" @@ -298,7 +298,7 @@ msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]" msgstr "格式: target_pattern socks_proxy[:port] http_parent[:port]" msgid "System" -msgstr "" +msgstr "系统" msgid "" "The actions file(s) to use. Multiple actionsfile lines are permitted, and " @@ -307,12 +307,12 @@ msgstr "所使用的规则文件。允许并且推荐使用多个规则文件。 msgid "" "The address and TCP port on which Privoxy will listen for client requests." -msgstr "Privoxy接收客户端请求时监听的地址和TCP端口。" +msgstr "Privoxy 接收客户端请求时监听的地址和 TCP 端口。" msgid "" "The compression level that is passed to the zlib library when compressing " "buffered content." -msgstr "使用zlib压缩缓冲内容时的压缩级别。" +msgstr "使用 zlib 压缩缓冲内容时的压缩级别。" msgid "" "The directory where all logging takes place (i.e. where the logfile is " @@ -334,14 +334,14 @@ msgid "The log file to use. File name, relative to log directory." msgstr "日志文件名称,与日志路径相对。" msgid "The order in which client headers are sorted before forwarding them." -msgstr "转发数据前,client headers的排序。" +msgstr "转发数据前,客户端请求头的排序。" msgid "" "The status code Privoxy returns for pages blocked with +handle-as-empty-" "document." msgstr "" -"当页面因为handle-as-empty-document规则被阻止时返回的状态码(选上为200 OK,不" -"选上为403 Forbidden)" +"当页面因为 handle-as-empty-document 规则被阻止时返回的状态码(选上为 200 OK," +"不选上为 403 Forbidden)" msgid "" "The trust mechanism is an experimental feature for building white-lists and " @@ -361,19 +361,20 @@ msgstr "这个选项仅用于调试,开启后会极大地降低性能。" msgid "" "This option will be removed in future releases as it has been obsoleted by " "the more general header taggers." -msgstr "这个选项在以后的版本中将被移除,因为它被header taggers所取代了。" +msgstr "这个选项在以后的版本中将被移除,因为它被 header taggers 所取代了。" msgid "" "This tab controls the security-relevant aspects of Privoxy's configuration." -msgstr "这个标签用于设置与安全相关的Privoxy选项。" +msgstr "这个标签用于设置与安全相关的 Privoxy 选项。" msgid "" "Through which SOCKS proxy (and optionally to which parent HTTP proxy) " "specific requests should be routed." -msgstr "指定的请求应该通过哪一个SOCKS代理(并且通过哪一个HTTP父代理,可选)" +msgstr "" +"指定的请求应该通过哪一个 SOCKS 代理(并且通过哪一个 HTTP 父代理,可选)" msgid "To which parent HTTP proxy specific requests should be routed." -msgstr "请求应转发至哪一个父级HTTP代理。" +msgstr "请求应转发至哪一个父级 HTTP 代理。" msgid "User customizations" msgstr "用户自定义" @@ -382,10 +383,10 @@ msgid "Value is not a number" msgstr "输入值不是数字" msgid "Value not between 0 and 300" -msgstr "" +msgstr "输入值不在0和300之间" msgid "Value not between 0 and 9" -msgstr "输入值不在0和9之间。" +msgstr "输入值不在0和9之间" msgid "Value not between 1 and 4096" msgstr "输入值不在1和4096之间" @@ -408,7 +409,7 @@ msgstr "被拦截的请求是否应被当作有效的。" msgid "" "Whether or not Privoxy recognizes special HTTP headers to change toggle " "state." -msgstr "Privoxy是否识别特殊的HTTP头以切换状态。" +msgstr "Privoxy 是否识别特殊的 HTTP 请求头以切换状态。" msgid "Whether or not buffered content is compressed before delivery." msgstr "缓冲内容在传递之前是否压缩。" @@ -422,7 +423,7 @@ msgid "Whether or not pipelined requests should be served." msgstr "是否处理管道化的请求。" msgid "Whether or not proxy authentication through Privoxy should work." -msgstr "是否可以通过Privoxy进行代理验证。" +msgstr "是否可以通过 Privoxy 进行代理验证。" msgid "Whether or not the web-based actions file editor may be used." msgstr "是否使用基于网页的规则编辑器。" @@ -431,11 +432,11 @@ msgid "Whether or not the web-based toggle feature may be used." msgstr "是否启用基于网页的切换功能。" msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected." -msgstr "访问Privoxy CGI页面的请求是否可以被拦截或重定向。" +msgstr "访问 Privoxy CGI 页面的请求是否可以被拦截或重定向。" msgid "" "Whether the CGI interface should stay compatible with broken HTTP clients." -msgstr "CGI界面是否应兼容过时的HTTP客户端。" +msgstr "CGI 界面是否应兼容过时的HTTP客户端。" msgid "Whether to run only one server thread." msgstr "是否只运行一个服务线程。" diff --git a/applications/luci-app-qos/po/ja/qos.po b/applications/luci-app-qos/po/ja/qos.po index deeb23f60..a81a6e1ad 100644 --- a/applications/luci-app-qos/po/ja/qos.po +++ b/applications/luci-app-qos/po/ja/qos.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-25 22:10+0100\n" -"PO-Revision-Date: 2011-10-28 11:02+0200\n" -"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2016-12-22 01:54+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.4\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "Calculate overhead" msgstr "オーバーヘッドを考慮する" @@ -23,7 +23,7 @@ msgid "Classification group" msgstr "区分グループ" msgid "Comment" -msgstr "" +msgstr "コメント" msgid "Destination host" msgstr "宛先ホスト" @@ -50,7 +50,7 @@ msgid "Protocol" msgstr "プロトコル" msgid "QoS" -msgstr "" +msgstr "QoS" msgid "Quality of Service" msgstr "Quality of Service" diff --git a/applications/luci-app-radicale/po/pt-br/radicale.po b/applications/luci-app-radicale/po/pt-br/radicale.po new file mode 100644 index 000000000..67bf58690 --- /dev/null +++ b/applications/luci-app-radicale/po/pt-br/radicale.po @@ -0,0 +1,432 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "" +"'AUTO' selects the highest protocol version that client and server support." +msgstr "'AUTO' seleciona a versão mais alto protocolo que o cliente e o servidor suportar." + +msgid "" +"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on" +msgstr "'NomeDoEquipamento:porta' ou 'IPv4:Porta' ou '[IPv6]:Porta' em que o Radicale deve escutar" + +msgid "AUTO" +msgstr "AUTO" + +msgid "Access-Control-Allow-Headers" +msgstr "Access-Control-Allow-Headers" + +msgid "Access-Control-Allow-Methods" +msgstr "Access-Control-Allow-Methods" + +msgid "Access-Control-Allow-Origin" +msgstr "Access-Control-Allow-Origin" + +msgid "Access-Control-Expose-Headers" +msgstr "Access-Control-Expose-Headers" + +msgid "Additional HTTP headers" +msgstr "Additional HTTP headers" + +msgid "Address:Port" +msgstr "Endereço: Porta" + +#, fuzzy +msgid "Authentication" +msgstr "Autenticação" + +msgid "" +"Authentication login is matched against the 'user' key, and collection's " +"path is matched against the 'collection' key." +msgstr "O nome do usuário na autenticação é comparado com a chave do 'user', e o caminho da coleção é comparado com a chave 'coleção'." + +msgid "Authentication method" +msgstr "Método de autenticação" + +msgid "Authentication method to allow access to Radicale server." +msgstr "Método de autenticação para permitir o acesso ao servidor Radicale." + +msgid "Auto-start" +msgstr "Iniciar automaticamente" + +msgid "Boot delay" +msgstr "Atraso na iniciação" + +msgid "CalDAV/CardDAV" +msgstr "CalDAV/CardDAV" + +msgid "" +"Calendars and address books are available for both local and remote access, " +"possibly limited through authentication policies." +msgstr "Agendas e contados estão disponíveis tanto para acesso local como remoto, possivelmente limitado através das políticas de autenticação." + +msgid "Certificate file" +msgstr "Arquivo do certificado" + +msgid "" +"Change here the encoding Radicale will use instead of 'UTF-8' for responses " +"to the client and/or to store data inside collections." +msgstr "Mude aqui a codificação que o Radicale usará em vez de 'UTF-8' para respostas a clientes ou para armazenar dados dentro das coleções." + +msgid "Ciphers" +msgstr "Cifras" + +msgid "Console Log level" +msgstr "Nível de detalhamento dos registros (log)" + +msgid "Control the access to data collections." +msgstr "Controlar o acesso às coleções de dados." + +#, fuzzy +msgid "Critical" +msgstr "Crítico" + +msgid "" +"Cross-origin resource sharing (CORS) is a mechanism that allows restricted " +"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from " +"another domain outside the domain from which the resource originated." +msgstr "O compartilhamento de recursos de origem cruzada (CORS) é um mecanismo que permite que os recursos de acesso restrito (por exemplo, fontes, JavaScript, etc.) em uma página web ser solicitado de outro domínio fora do domínio a partir do qual o recurso foi originado." + +msgid "Custom" +msgstr "Personalizadas" + +msgid "Database" +msgstr "Banco de Dados" + +#, fuzzy +msgid "Debug" +msgstr "Depuração" + +msgid "Delay (in seconds) during system boot before Radicale start" +msgstr "Atraso (em segundos) durante a inicialização do sistema antes do Radicale iniciar" + +#, fuzzy +msgid "Directory" +msgstr "Diretório" + +msgid "Directory not exists/found !" +msgstr "O diretório não foi encontrado!" + +msgid "Directory required !" +msgstr "O diretório é necessário!" + +msgid "Directory where the rotating log-files are stored" +msgstr "O diretório onde os registros(log) rotativos são armazenados" + +msgid "During delay ifup-events are not monitored !" +msgstr "Durante a espera, eventos ifup não serão monitorados!" + +msgid "Enable HTTPS" +msgstr "Ativar HTTPS" + +msgid "" +"Enable/Disable auto-start of Radicale on system start-up and interface events" +msgstr "Ativar/Desativar iniciação automática do Radicale na iniciação do sistema e em eventos de interface" + +msgid "Encoding" +msgstr "Codificação" + +msgid "Encoding for responding requests." +msgstr "Codificação para responder pedidos." + +msgid "Encoding for storing local collections." +msgstr "Codificação para armazenar coleções locais." + +msgid "Encryption method" +msgstr "Método de criptografia" + +#, fuzzy +msgid "Error" +msgstr "Erro" + +msgid "File '%s' not found !" +msgstr "Arquivo '%s' não encontrado!" + +msgid "File Log level" +msgstr "Nível de detalhamento dos registos(log) em arquivos" + +msgid "File not found !" +msgstr "Arquivo não encontrado!" + +msgid "File-system" +msgstr "Sistema de arquivos" + +msgid "" +"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' " +"means 'anybody' (including anonymous users)." +msgstr "Por exemplo, para a chave 'user', '.+' Significa 'usuário autenticado' e '.*' Significa 'qualquer um' (incluindo usuários anônimos)." + +msgid "Full access for Owner only" +msgstr "Acesso completo somente para o proprietário" + +msgid "Full access for authenticated Users" +msgstr "Acesso completo para usuários autenticados" + +msgid "Full access for everybody (including anonymous)" +msgstr "Acesso completo para todos (incluindo anônimo)" + +msgid "Full path and file name of certificate" +msgstr "Caminho completo e nome do arquivo do certificado" + +msgid "Full path and file name of private key" +msgstr "Caminho e arquivo nome completo da chave privada" + +#, fuzzy +msgid "Info" +msgstr "Informações" + +msgid "Keep in mind to use the correct hashing algorithm !" +msgstr "Fique atento para usar o algoritmo de resumo digital(hash) correto!" + +msgid "Leading or ending slashes are trimmed from collection's path." +msgstr "Barras inicias e finais serão removidas do caminho da coleção." + +msgid "Log-backup Count" +msgstr "Contagem Registro(log) de Backup" + +msgid "Log-file Viewer" +msgstr "Visualizador de Arquivo de Registros(log)" + +msgid "Log-file directory" +msgstr "Diretório do arquivo de registros(log)" + +msgid "Log-file size" +msgstr "Tamanho do arquivo de registros(log)" + +#, fuzzy +msgid "Logging" +msgstr "Registrando os eventos" + +msgid "Logon message" +msgstr "Mensagem de entrada" + +msgid "Maximum size of each rotation log-file." +msgstr "Tamanho máximo para a rotação do arquivo de registros(log)" + +msgid "Message displayed in the client when a password is needed." +msgstr "Mensagem exibida para o cliente quando uma senha é necessária." + +#, fuzzy +msgid "NOT installed" +msgstr "NÃO instalado" + +#, fuzzy +msgid "None" +msgstr "Nada" + +msgid "Number of backup files of log to create." +msgstr "Número de backups dos arquivos de registros(log) a serem criados." + +msgid "OPTIONAL: See python's ssl module for available ciphers" +msgstr "Opcional: veja o módulo SSL do python para conhecer as cifras disponíveis" + +msgid "One or more missing/invalid fields on tab" +msgstr "Um ou campos inválidos/ausentes na aba" + +msgid "Owner allow write, authenticated users allow read" +msgstr "O proprietário pode escrever, os usuários autenticados podem ler" + +msgid "Path/File required !" +msgstr "O caminho/arquivo é necessário!" + +msgid "" +"Place here the 'user:password' pairs for your users which should have access " +"to Radicale." +msgstr "Coloque aqui os pares 'usuário:senha' para os seus usuários que devem ter acesso a Radicale." + +msgid "Please install current version !" +msgstr "Por favor, instale a versão atual!" + +msgid "Please press [Reload] button below to reread the file." +msgstr "Por favor, pressione o botão [Recarregar] abaixo para reler o arquivo." + +msgid "Please update to current version !" +msgstr "Por favor, atualize para a versão atual!" + +msgid "Port numbers below 1024 (Privileged ports) are not supported" +msgstr "Os porta abaixo de 1024 (portas privilegiadas) não são suportadas" + +msgid "Private key file" +msgstr "Arquivo da chave privada" + +msgid "Radicale CalDAV/CardDAV Server" +msgstr "Radicale Servidor CalDAV/CardDAV" + +msgid "Radicale uses '/etc/radicale/rights' as regexp-based file." +msgstr "Radicale usa o '/etc/radicale/rights' como arquivo baseado em expressão regular." + +msgid "Radicale uses '/etc/radicale/users' as htpasswd file." +msgstr "Radicale usa o '/etc/radicale/users' como o arquivo htpasswd." + +msgid "Read only!" +msgstr "Somente leitura!" + +msgid "RegExp file" +msgstr "Arquivo de expressões regulares" + +msgid "Reload" +msgstr "Recarregar" + +msgid "Response Encoding" +msgstr "Codificação da Resposta" + +msgid "Rights" +msgstr "Direitos" + +msgid "Rights are based on a regexp-based file" +msgstr "Os direitos são baseados em um arquivo baseado em expressões regulares" + +msgid "Rights backend" +msgstr "Serviço de Direitos" + +msgid "SHA-1" +msgstr "SHA-1" + +msgid "SSL Protocol" +msgstr "Protocolo SSL" + +#, fuzzy +msgid "Save" +msgstr "Salvar" + +msgid "Section names are only used for naming the rule." +msgstr "Os nomes das seção são usados apenas para nomear a regra." + +#, fuzzy +msgid "Server" +msgstr "Servidor" + +msgid "Setting this parameter to '0' will disable rotation of log-file." +msgstr "Definindo este parâmetro para '0' irá desativar a rotação dos arquivos de registros(log)." + +msgid "Software package '%s' is not installed." +msgstr "O pacote de software '%s' não está instalado." + +msgid "Software package '%s' is outdated." +msgstr "O pacote '%' está desatualizado." + +#, fuzzy +msgid "Software update required" +msgstr "A atualização do software é necessária" + +#, fuzzy +msgid "Start" +msgstr "Iniciar" + +#, fuzzy +msgid "Start / Stop" +msgstr "Iniciar / Parar" + +msgid "Start/Stop Radicale server" +msgstr "Iniciar/Parar o servidor Radicale" + +msgid "Storage" +msgstr "Armazenamento" + +msgid "Storage Encoding" +msgstr "Codificação do Armazenamento" + +msgid "Storage backend" +msgstr "Serviço de armazenamento" + +msgid "Syslog Log level" +msgstr "Nível de detalhamento do serviço de registro (syslog)" + +#, fuzzy +msgid "System" +msgstr "Sistema" + +msgid "" +"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) " +"server solution." +msgstr "O Projeto Radicale é uma solução completa de CalDAV (agenda) e CardDAV (contatos)." + +msgid "" +"They can be viewed and edited by calendar and contact clients on mobile " +"phones or computers." +msgstr "Eles podem ser visualizados e editados pelos clientes de agenda e de contatos em telefones celulares ou computadores." + +msgid "To edit the file follow this link!" +msgstr "Para editar o arquivo, siga este link!" + +msgid "To view latest log file follow this link!" +msgstr "Para visualizar mais recente arquivo de registros(log), siga este link!" + +msgid "Value is not a number" +msgstr "O valor não é um número" + +msgid "Value is not an Integer >= 0 !" +msgstr "O valor não é um número natural (>=0)!" + +msgid "Value not between 0 and 300" +msgstr "Valor não está entre 0 e 300" + +msgid "Value required ! Integer >= 0 !" +msgstr "O valor é necessário! Número natural (>=0)!" + +#, fuzzy +msgid "Version" +msgstr "Versão" + +#, fuzzy +msgid "Version Information" +msgstr "Informação da Versão" + +msgid "" +"WARNING: Only 'File-system' is documented and tested by Radicale development" +msgstr "AVISO: Apenas 'Sistema de Arquivos "está documentado e testado pelo desenvolvimento do Radicale" + +#, fuzzy +msgid "Warning" +msgstr "Alerta" + +msgid "" +"You can also get groups from the user regex in the collection with {0}, {1}, " +"etc." +msgstr "Você também pode obter grupos a partir da expressão regular do usuário na coleção com {0}, {1} , etc." + +msgid "" +"You can use Python's ConfigParser interpolation values %(login)s and " +"%(path)s." +msgstr "Você pode usar a interpolação de valores %(login)s e %(path)s do ConfigParser do Python." + +msgid "crypt" +msgstr "cifrar" + +msgid "custom" +msgstr "personalizado" + +msgid "htpasswd file" +msgstr "arquivo htpasswd" + +#, fuzzy +msgid "installed" +msgstr "instalado" + +msgid "no valid path given!" +msgstr "Nenhum caminho válido foi informado!" + +#, fuzzy +msgid "or higher" +msgstr "ou maior" + +msgid "plain" +msgstr "plano" + +#, fuzzy +msgid "required" +msgstr "necessário" + +msgid "salted SHA-1" +msgstr "SHA-1 com salto" + diff --git a/applications/luci-app-samba/luasrc/model/cbi/samba.lua b/applications/luci-app-samba/luasrc/model/cbi/samba.lua index 721191a7e..68a5b3a9b 100644 --- a/applications/luci-app-samba/luasrc/model/cbi/samba.lua +++ b/applications/luci-app-samba/luasrc/model/cbi/samba.lua @@ -13,9 +13,10 @@ s:tab("template", translate("Edit Template")) s:taboption("general", Value, "name", translate("Hostname")) s:taboption("general", Value, "description", translate("Description")) s:taboption("general", Value, "workgroup", translate("Workgroup")) -s:taboption("general", Value, "homes", translate("Share home-directories"), +h = s:taboption("general", Flag, "homes", translate("Share home-directories"), translate("Allow system users to reach their home directories via " .. "network shares")) +h.rmempty = false tmpl = s:taboption("template", Value, "_tmpl", translate("Edit the template that is used for generating the samba configuration."), @@ -53,6 +54,12 @@ ro.rmempty = false ro.enabled = "yes" ro.disabled = "no" +br = s:option(Flag, "browseable", translate("Browseable")) +br.rmempty = false +br.default = "yes" +br.enabled = "yes" +br.disabled = "no" + go = s:option(Flag, "guest_ok", translate("Allow guests")) go.rmempty = false go.enabled = "yes" diff --git a/applications/luci-app-samba/po/ca/samba.po b/applications/luci-app-samba/po/ca/samba.po index 0668b1b14..fadcbdfdb 100644 --- a/applications/luci-app-samba/po/ca/samba.po +++ b/applications/luci-app-samba/po/ca/samba.po @@ -26,6 +26,9 @@ msgstr "" msgid "Allowed users" msgstr "Usuaris permesos" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Crea màscara" diff --git a/applications/luci-app-samba/po/cs/samba.po b/applications/luci-app-samba/po/cs/samba.po index fefb7ff87..4a00124fb 100644 --- a/applications/luci-app-samba/po/cs/samba.po +++ b/applications/luci-app-samba/po/cs/samba.po @@ -22,6 +22,9 @@ msgstr "" msgid "Allowed users" msgstr "Povolení uživatelé" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Vytvořit masku" diff --git a/applications/luci-app-samba/po/de/samba.po b/applications/luci-app-samba/po/de/samba.po index a5ceb056c..1bcac0c9b 100644 --- a/applications/luci-app-samba/po/de/samba.po +++ b/applications/luci-app-samba/po/de/samba.po @@ -24,6 +24,9 @@ msgstr "" msgid "Allowed users" msgstr "Legitimierte Benutzer" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Berechtigungsmaske für neue Dateien" diff --git a/applications/luci-app-samba/po/el/samba.po b/applications/luci-app-samba/po/el/samba.po index 7cc722d59..9a15ad1e0 100644 --- a/applications/luci-app-samba/po/el/samba.po +++ b/applications/luci-app-samba/po/el/samba.po @@ -22,6 +22,9 @@ msgstr "" msgid "Allowed users" msgstr "" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "" diff --git a/applications/luci-app-samba/po/en/samba.po b/applications/luci-app-samba/po/en/samba.po index f524c1448..94cfdb516 100644 --- a/applications/luci-app-samba/po/en/samba.po +++ b/applications/luci-app-samba/po/en/samba.po @@ -22,6 +22,9 @@ msgstr "Allow system users to reach their home directories via network shares" msgid "Allowed users" msgstr "Allowed users" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Create mask" diff --git a/applications/luci-app-samba/po/es/samba.po b/applications/luci-app-samba/po/es/samba.po index 950a81797..c14ebd2c3 100644 --- a/applications/luci-app-samba/po/es/samba.po +++ b/applications/luci-app-samba/po/es/samba.po @@ -24,6 +24,9 @@ msgstr "" msgid "Allowed users" msgstr "Usuarios permitidos" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Crear máscara" diff --git a/applications/luci-app-samba/po/fr/samba.po b/applications/luci-app-samba/po/fr/samba.po index 88779009c..ff040b50d 100644 --- a/applications/luci-app-samba/po/fr/samba.po +++ b/applications/luci-app-samba/po/fr/samba.po @@ -24,6 +24,9 @@ msgstr "" msgid "Allowed users" msgstr "Utilisateurs autorisés" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Maque de création" diff --git a/applications/luci-app-samba/po/he/samba.po b/applications/luci-app-samba/po/he/samba.po index dd21a4a54..620f56cf8 100644 --- a/applications/luci-app-samba/po/he/samba.po +++ b/applications/luci-app-samba/po/he/samba.po @@ -17,6 +17,9 @@ msgstr "" msgid "Allowed users" msgstr "" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "" diff --git a/applications/luci-app-samba/po/hu/samba.po b/applications/luci-app-samba/po/hu/samba.po index 64d1e22a5..38a9a0843 100644 --- a/applications/luci-app-samba/po/hu/samba.po +++ b/applications/luci-app-samba/po/hu/samba.po @@ -22,6 +22,9 @@ msgstr "" msgid "Allowed users" msgstr "Engedélyezett felhasználók" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Létrehozási maszk" diff --git a/applications/luci-app-samba/po/it/samba.po b/applications/luci-app-samba/po/it/samba.po index 464578251..a2bb9b673 100644 --- a/applications/luci-app-samba/po/it/samba.po +++ b/applications/luci-app-samba/po/it/samba.po @@ -24,6 +24,9 @@ msgstr "" msgid "Allowed users" msgstr "Utenti ammessi" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Mask di creazione dei file" diff --git a/applications/luci-app-samba/po/ja/samba.po b/applications/luci-app-samba/po/ja/samba.po index c5275075a..9f338defb 100644 --- a/applications/luci-app-samba/po/ja/samba.po +++ b/applications/luci-app-samba/po/ja/samba.po @@ -22,6 +22,9 @@ msgstr "sambaを介してユーザーのホームディレクトリへのアク msgid "Allowed users" msgstr "許可されたユーザー" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "マスクの作成" diff --git a/applications/luci-app-samba/po/ms/samba.po b/applications/luci-app-samba/po/ms/samba.po index e29133e1b..de4ed7c36 100644 --- a/applications/luci-app-samba/po/ms/samba.po +++ b/applications/luci-app-samba/po/ms/samba.po @@ -16,6 +16,9 @@ msgstr "" msgid "Allowed users" msgstr "" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "" diff --git a/applications/luci-app-samba/po/no/samba.po b/applications/luci-app-samba/po/no/samba.po index 1c5c8077f..7059d7748 100644 --- a/applications/luci-app-samba/po/no/samba.po +++ b/applications/luci-app-samba/po/no/samba.po @@ -13,6 +13,9 @@ msgstr "Tillat systembrukere å nå sine hjemmekataloger via nettverks mapper." msgid "Allowed users" msgstr "Tillatte brukere" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Opprett Maske" diff --git a/applications/luci-app-samba/po/pl/samba.po b/applications/luci-app-samba/po/pl/samba.po index 74826227b..bf54e78c3 100644 --- a/applications/luci-app-samba/po/pl/samba.po +++ b/applications/luci-app-samba/po/pl/samba.po @@ -23,6 +23,9 @@ msgstr "" msgid "Allowed users" msgstr "Użytkownicy z prawem dostępu" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Utwórz maskę" diff --git a/applications/luci-app-samba/po/pt-br/samba.po b/applications/luci-app-samba/po/pt-br/samba.po index a7531522d..43ea3b9b9 100644 --- a/applications/luci-app-samba/po/pt-br/samba.po +++ b/applications/luci-app-samba/po/pt-br/samba.po @@ -24,6 +24,9 @@ msgstr "" msgid "Allowed users" msgstr "Usuários permitidos" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Máscara de criação" diff --git a/applications/luci-app-samba/po/pt/samba.po b/applications/luci-app-samba/po/pt/samba.po index 4c5a2cd24..6d4f00386 100644 --- a/applications/luci-app-samba/po/pt/samba.po +++ b/applications/luci-app-samba/po/pt/samba.po @@ -24,6 +24,9 @@ msgstr "" msgid "Allowed users" msgstr "Utilizadores Permitidos" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Criar Máscara" diff --git a/applications/luci-app-samba/po/ro/samba.po b/applications/luci-app-samba/po/ro/samba.po index 4bc341557..78c55e4eb 100644 --- a/applications/luci-app-samba/po/ro/samba.po +++ b/applications/luci-app-samba/po/ro/samba.po @@ -23,6 +23,9 @@ msgstr "" msgid "Allowed users" msgstr "Utilizatori acceptati" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Creaza masca" diff --git a/applications/luci-app-samba/po/ru/samba.po b/applications/luci-app-samba/po/ru/samba.po index 82906e36e..4823dc46d 100644 --- a/applications/luci-app-samba/po/ru/samba.po +++ b/applications/luci-app-samba/po/ru/samba.po @@ -25,6 +25,9 @@ msgstr "" msgid "Allowed users" msgstr "Разрешённые пользователи" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Создать маску" diff --git a/applications/luci-app-samba/po/sk/samba.po b/applications/luci-app-samba/po/sk/samba.po index 66ec9e030..2c511c815 100644 --- a/applications/luci-app-samba/po/sk/samba.po +++ b/applications/luci-app-samba/po/sk/samba.po @@ -17,6 +17,9 @@ msgstr "" msgid "Allowed users" msgstr "" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "" diff --git a/applications/luci-app-samba/po/sv/samba.po b/applications/luci-app-samba/po/sv/samba.po index b83dec506..549a69c5c 100644 --- a/applications/luci-app-samba/po/sv/samba.po +++ b/applications/luci-app-samba/po/sv/samba.po @@ -18,6 +18,9 @@ msgstr "Tillåt systemanvändare att nå deras hem-mappar via nätverksdelningar msgid "Allowed users" msgstr "Tillåtna användare" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Skapa mask" diff --git a/applications/luci-app-samba/po/templates/samba.pot b/applications/luci-app-samba/po/templates/samba.pot index d91400b0c..9e4ab7ff1 100644 --- a/applications/luci-app-samba/po/templates/samba.pot +++ b/applications/luci-app-samba/po/templates/samba.pot @@ -10,6 +10,9 @@ msgstr "" msgid "Allowed users" msgstr "" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "" diff --git a/applications/luci-app-samba/po/tr/samba.po b/applications/luci-app-samba/po/tr/samba.po index fda2f6e26..486768f2e 100644 --- a/applications/luci-app-samba/po/tr/samba.po +++ b/applications/luci-app-samba/po/tr/samba.po @@ -17,6 +17,9 @@ msgstr "" msgid "Allowed users" msgstr "" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "" diff --git a/applications/luci-app-samba/po/uk/samba.po b/applications/luci-app-samba/po/uk/samba.po index 6f2a92091..077315e21 100644 --- a/applications/luci-app-samba/po/uk/samba.po +++ b/applications/luci-app-samba/po/uk/samba.po @@ -23,6 +23,9 @@ msgstr "" msgid "Allowed users" msgstr "Дозволені користувачі" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "Створити маску" diff --git a/applications/luci-app-samba/po/vi/samba.po b/applications/luci-app-samba/po/vi/samba.po index 4e5638da2..c5f6e02df 100644 --- a/applications/luci-app-samba/po/vi/samba.po +++ b/applications/luci-app-samba/po/vi/samba.po @@ -28,6 +28,9 @@ msgstr "" msgid "Allowed users" msgstr "Người sử dụng được cho phép" +msgid "Browseable" +msgstr "" + #, fuzzy msgid "Create mask" msgstr "Tạo Mask" diff --git a/applications/luci-app-samba/po/zh-cn/samba.po b/applications/luci-app-samba/po/zh-cn/samba.po index 4ff671b85..2294b611a 100644 --- a/applications/luci-app-samba/po/zh-cn/samba.po +++ b/applications/luci-app-samba/po/zh-cn/samba.po @@ -22,6 +22,9 @@ msgstr "允许系统用户通过网络共享访问他们的主目录" msgid "Allowed users" msgstr "允许用户" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "创建权限" diff --git a/applications/luci-app-samba/po/zh-tw/samba.po b/applications/luci-app-samba/po/zh-tw/samba.po index 6ec99ee20..bfa2d7d6d 100644 --- a/applications/luci-app-samba/po/zh-tw/samba.po +++ b/applications/luci-app-samba/po/zh-tw/samba.po @@ -20,6 +20,9 @@ msgstr "允許系統使用者透過網路分享家目錄" msgid "Allowed users" msgstr "允許使用者" +msgid "Browseable" +msgstr "" + msgid "Create mask" msgstr "建立權限" @@ -70,7 +73,9 @@ msgid "" "your samba configuration will be generated. Values enclosed by pipe symbols " "('|') should not be changed. They get their values from the 'General " "Settings' tab." -msgstr "建立Samba設定的 \"/etc/samba/smb.conf.template\" 檔案內容。被('|')包圍的值可以在基本設定中進行設定" +msgstr "" +"建立Samba設定的 \"/etc/samba/smb.conf.template\" 檔案內容。被('|')包圍的值可" +"以在基本設定中進行設定" msgid "Workgroup" msgstr "工作群組" diff --git a/applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po b/applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po new file mode 100644 index 000000000..f2b18e374 --- /dev/null +++ b/applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Access Control" +msgstr "Controle de Acesso" + +msgid "Allow all except listed" +msgstr "Permitir todos, exceto os listados" + +msgid "Allow listed only" +msgstr "Permitir somente os listados" + +msgid "Bypassed IP" +msgstr "Endereços IP Ignorados" + +msgid "Connection Timeout" +msgstr "Tempo limite de conexão" + +msgid "Custom" +msgstr "Personalizado" + +msgid "Disabled" +msgstr "Desabilitado" + +msgid "Enable" +msgstr "Ativar" + +msgid "Enabled" +msgstr "Ativado" + +msgid "Encrypt Method" +msgstr "Método de Cifragem" + +msgid "Forwarded IP" +msgstr "Endereço IP Encaminhado" + +msgid "Forwarding Tunnel" +msgstr "Tunel para Encaminhamento" + +msgid "Global Setting" +msgstr "Opções Globais" + +msgid "Ignore List" +msgstr "Lista de Ignorados" + +msgid "LAN" +msgstr "LAN" + +msgid "LAN IP List" +msgstr "Lista de endereços IP da LAN" + +msgid "Local Port" +msgstr "Porta Local" + +msgid "Password" +msgstr "Senha" + +msgid "Relay Mode" +msgstr "Modo de Retransmissor" + +msgid "Server Address" +msgstr "Endereço do Servidor" + +msgid "Server Port" +msgstr "Porta do servidor" + +msgid "ShadowSocks-libev" +msgstr "ShadowSocks-libev" + +msgid "ShadowSocks-libev is not running" +msgstr "O serviço ShadowSocks-libev está parado" + +msgid "ShadowSocks-libev is running" +msgstr "O serviço ShadowSocks-libev está em execução." + +msgid "UDP Forward" +msgstr "Encaminhamento UDP" + +msgid "UDP Local Port" +msgstr "Porta Local UDP" + +msgid "UDP Relay" +msgstr "Retransmissão UDP" + +msgid "WAN" +msgstr "WAN" diff --git a/applications/luci-app-shairplay/po/ja/shairplay.po b/applications/luci-app-shairplay/po/ja/shairplay.po new file mode 100644 index 000000000..07fa7be6e --- /dev/null +++ b/applications/luci-app-shairplay/po/ja/shairplay.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2017-01-03 15:06+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Language-Team: \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "AO Device ID" +msgstr "オーディオ出力 デバイスID" + +msgid "AO Device Name" +msgstr "オーディオ出力 デバイス名" + +msgid "AO Driver" +msgstr "オーディオ出力 デバイスドライバー" + +msgid "Airport Name" +msgstr "Airport名" + +msgid "Default" +msgstr "デフォルト" + +msgid "Enabled" +msgstr "有効" + +msgid "HW Address" +msgstr "ハードウェア アドレス" + +msgid "Password" +msgstr "パスワード" + +msgid "Port" +msgstr "ポート" + +msgid "Respawn" +msgstr "リスポーン" + +msgid "Shairplay" +msgstr "" + +msgid "" +"Shairplay is a simple AirPlay server implementation, here you can configure " +"the settings." +msgstr "" +"Shairplayは、シンプルなAirPlay サーバー実装です。ここでは、設定を行うことがで" +"きます。" diff --git a/applications/luci-app-shairplay/po/pt-br/shairplay.po b/applications/luci-app-shairplay/po/pt-br/shairplay.po new file mode 100644 index 000000000..c7d0ab18a --- /dev/null +++ b/applications/luci-app-shairplay/po/pt-br/shairplay.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" +"X-Poedit-Bookmarks: -1,5,-1,-1,-1,-1,-1,-1,-1,-1\n" + +msgid "AO Device ID" +msgstr "Identificador do dispositivo AO" + +msgid "AO Device Name" +msgstr "Nome do dispositivo AO" + +msgid "AO Driver" +msgstr "Driver do AO" + +msgid "Airport Name" +msgstr "Nome do Airport" + +msgid "Default" +msgstr "Padrão" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "HW Address" +msgstr "Endereço de Hardware" + +msgid "Password" +msgstr "Senha" + +msgid "Port" +msgstr "Porta" + +msgid "Respawn" +msgstr "Redisparar" + +msgid "Shairplay" +msgstr "Shairplay" + +msgid "" +"Shairplay is a simple AirPlay server implementation, here you can configure " +"the settings." +msgstr "" +"Shairplay é uma implementação simples de um servidor AirPlay. Aqui você pode " +"configurá-lo." diff --git a/applications/luci-app-shairplay/po/templates/shairplay.pot b/applications/luci-app-shairplay/po/templates/shairplay.pot new file mode 100644 index 000000000..b3da99e0b --- /dev/null +++ b/applications/luci-app-shairplay/po/templates/shairplay.pot @@ -0,0 +1,40 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "AO Device ID" +msgstr "" + +msgid "AO Device Name" +msgstr "" + +msgid "AO Driver" +msgstr "" + +msgid "Airport Name" +msgstr "" + +msgid "Default" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "HW Address" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Respawn" +msgstr "" + +msgid "Shairplay" +msgstr "" + +msgid "" +"Shairplay is a simple AirPlay server implementation, here you can configure " +"the settings." +msgstr "" diff --git a/applications/luci-app-simple-adblock/po/ja/simple-adblock.po b/applications/luci-app-simple-adblock/po/ja/simple-adblock.po new file mode 100644 index 000000000..7926595b6 --- /dev/null +++ b/applications/luci-app-simple-adblock/po/ja/simple-adblock.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.12\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ja\n" + +msgid "Blacklisted Domain URLs" +msgstr "ドメイン ブラックリストのURL" + +msgid "Blacklisted Domains" +msgstr "ブラックリスト ドメイン" + +msgid "Blacklisted Hosts URLs" +msgstr "hosts ブラックリストのURL" + +msgid "Controls system log and console output verbosity" +msgstr "システム ログとコンソール出力の冗長性を設定します。" + +msgid "Enable/start service" +msgstr "サービスの有効化/開始" + +msgid "Force Router DNS" +msgstr "ルーターDNSの強制" + +msgid "Force Router DNS server to all local devices" +msgstr "全ローカル デバイスにルーター DNSサーバーの使用を強制" + +msgid "Forces Router DNS use on local devices, also known as DNS Hijacking" +msgstr "" +"ローカル デバイスに対し、ルーター上のDNSサーバーの使用を強制します。これは、" +"DNS ハイジャックとしても知られています。" + +msgid "Individual domains to be blacklisted" +msgstr "ブラックリストに登録する、個々のドメインです。" + +msgid "Individual domains to be whitelisted" +msgstr "ホワイトリストに登録する、個々のドメインです。" + +msgid "LED to indicate status" +msgstr "ステータスを表示するLED" + +msgid "Let local devices use their own DNS servers if set" +msgstr "DNSサーバーの使用を強制しない" + +msgid "Output Verbosity Setting" +msgstr "出力詳細度の設定" + +msgid "Pick the LED not already used in" +msgstr "右の設定で既に使用されていないLEDを選択します:" + +msgid "Simple AdBlock" +msgstr "Simple AdBlock" + +msgid "Simple AdBlock Settings" +msgstr "Simple AdBlock 設定" + +msgid "Some output" +msgstr "軽量出力" + +msgid "Suppress output" +msgstr "出力の抑制" + +msgid "System LED Configuration" +msgstr "LED 設定" + +msgid "URLs to lists of domains to be blacklisted" +msgstr "ブラックリストに登録するドメインのリストのURLです。" + +msgid "URLs to lists of domains to be whitelisted" +msgstr "ホワイトリストに登録するドメインのリストのURLです。" + +msgid "URLs to lists of hosts to be blacklisted" +msgstr "ブラックリストに登録するドメインが列挙された、hostsファイルのURLです。" + +msgid "Verbose output" +msgstr "詳細出力" + +msgid "Whitelisted Domain URLs" +msgstr "ドメイン ホワイトリストのURL" + +msgid "Whitelisted Domains" +msgstr "ホワイトリスト ドメイン" + +msgid "none" +msgstr "なし" diff --git a/applications/luci-app-splash/Makefile b/applications/luci-app-splash/Makefile index 345f8910f..5740aa5f7 100644 --- a/applications/luci-app-splash/Makefile +++ b/applications/luci-app-splash/Makefile @@ -9,6 +9,12 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=Freifunk DHCP-Splash application LUCI_DEPENDS:=+luci-lib-nixio +tc +kmod-sched +iptables-mod-nat-extra +iptables-mod-ipopt +define Package/luci-app-splash/conffiles +/etc/config/luci_splash +/usr/lib/luci-splash/splashtext.html +/usr/lib/luci-splash/splashtextinclude.html +endef + include ../../luci.mk # call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-squid/Makefile b/applications/luci-app-squid/Makefile new file mode 100644 index 000000000..82802c0e5 --- /dev/null +++ b/applications/luci-app-squid/Makefile @@ -0,0 +1,18 @@ +# +# Copyright (C) 2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Squid LuCI Interface +LUCI_DEPENDS:=+luci-mod-admin-full +squid + +PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr> +PKG_LICENSE:=Apache-2.0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-squid/luasrc/controller/squid.lua b/applications/luci-app-squid/luasrc/controller/squid.lua new file mode 100644 index 000000000..09946a151 --- /dev/null +++ b/applications/luci-app-squid/luasrc/controller/squid.lua @@ -0,0 +1,21 @@ +--[[ + +LuCI Squid module + +Copyright (C) 2015, OpenWrt.org + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + +]]-- + +module("luci.controller.squid", package.seeall) + +function index() + entry({"admin", "services", "squid"}, cbi("squid"), _("Squid")) +end diff --git a/applications/luci-app-squid/luasrc/model/cbi/squid.lua b/applications/luci-app-squid/luasrc/model/cbi/squid.lua new file mode 100644 index 000000000..0ac554a3e --- /dev/null +++ b/applications/luci-app-squid/luasrc/model/cbi/squid.lua @@ -0,0 +1,67 @@ +--[[ + +LuCI Squid module + +Copyright (C) 2015, OpenWrt.org + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Author: Marko Ratkaj <marko.ratkaj@sartura.hr> + +]]-- + +local fs = require "nixio.fs" +local sys = require "luci.sys" +require "ubus" + +m = Map("squid", translate("Squid")) +m.on_after_commit = function() luci.sys.call("/etc/init.d/squid restart") end + +s = m:section(TypedSection, "squid") +s.anonymous = true +s.addremove = false + +s:tab("general", translate("General Settings")) + +http_port = s:taboption("general", Value, "http_port", translate("Port")) +http_port.datatype = "portrange" +http_port.placeholder = "0-65535" + +visible_hostname = s:taboption("general", Value, "visible_hostname", translate("Visible Hostname")) +visible_hostname.datatype="string" +visible_hostname.placeholder = "OpenWrt" + +coredump_dir = s:taboption("general", Value, "coredump_dir", translate("Coredump files directory")) +coredump_dir.datatype="string" +coredump_dir.placeholder = "/tmp/squid" + +s:tab("advanced", translate("Advanced Settings")) + +squid_config_file = s:taboption("advanced", TextValue, "_data", "") +squid_config_file.wrap = "off" +squid_config_file.rows = 25 +squid_config_file.rmempty = false + +function squid_config_file.cfgvalue() + local uci = require "luci.model.uci".cursor_state() + local file = uci:get("squid", "squid", "config_file") + if file then + return fs.readfile(file) or "" + else + return "" + end +end + +function squid_config_file.write(self, section, value) + if value then + local uci = require "luci.model.uci".cursor_state() + local file = uci:get("squid", "squid", "config_file") + fs.writefile(file, value:gsub("\r\n", "\n")) + end +end + +return m diff --git a/applications/luci-app-statistics/Makefile b/applications/luci-app-statistics/Makefile index 6c0121e96..008792a5d 100644 --- a/applications/luci-app-statistics/Makefile +++ b/applications/luci-app-statistics/Makefile @@ -12,6 +12,10 @@ LUCI_DEPENDS:= \ +collectd-mod-cpu +collectd-mod-memory \ +collectd-mod-interface +collectd-mod-load +collectd-mod-network +define Package/luci-app-statistics/conffiles +/etc/config/luci_statistics +endef + include ../../luci.mk # call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua index 36c5554d3..1bc0714de 100644 --- a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua +++ b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua @@ -24,6 +24,7 @@ function index() s_network = _("Network plugins"), conntrack = _("Conntrack"), + contextswitch = _("Context Switches"), cpu = _("Processor"), cpufreq = _("CPU Frequency"), csv = _("CSV Output"), @@ -58,7 +59,7 @@ function index() -- our collectd menu local collectd_menu = { output = { "csv", "network", "rrdtool", "unixsock" }, - general = { "cpu", "cpufreq", "df", "disk", "email", + general = { "contextswitch", "cpu", "cpufreq", "df", "disk", "email", "entropy", "exec", "irq", "load", "memory", "nut", "processes", "sensors", "thermal", "uptime" }, network = { "conntrack", "dns", "interface", "iptables", diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/contextswitch.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/contextswitch.lua new file mode 100644 index 000000000..7ae6b24ba --- /dev/null +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/contextswitch.lua @@ -0,0 +1,14 @@ +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("CPU Context Switches Plugin Configuration"), + translate("This plugin collects statistics about the processor context switches.")) + +-- collectd_contextswitch config section +s = m:section( NamedSection, "collectd_contextswitch", "luci_statistics" ) + +-- collectd_contextswitch.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +return m diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua index f31fb2093..fa00bbbf5 100644 --- a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua @@ -19,7 +19,12 @@ enable = s:option( Flag, "enable", translate("Enable this plugin") ) enable.default = 1 -- collectd_rrdtool.datadir (DataDir) -datadir = s:option( Value, "DataDir", translate("Storage directory") ) +datadir = s:option( Value, "DataDir", + translate("Storage directory"), + translate("Note: as pages are rendered by user 'nobody', the *.rrd files, " .. + "the storage directory and all its parent directories need " .. + "to be world readable." + )) datadir.default = "/tmp" datadir.rmempty = true datadir.optional = true diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/contextswitch.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/contextswitch.lua new file mode 100644 index 000000000..6826e12ad --- /dev/null +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/contextswitch.lua @@ -0,0 +1,23 @@ +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.contextswitch",package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Context switches", + alt_autoscale = true, + vlabel = "Switches/s", + number_format = "%5.0lf", + data = { + types = { "contextswitch" }, + sources = { + contextswitch = { "value" } + }, + options = { + contextswitch = { color = "0000ff", title = "Context switches", noarea=true, overlay=true } + } + } + } +end + diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/df.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/df.lua index fbc3884b4..b5633c15f 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/df.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/df.lua @@ -8,7 +8,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) return { title = "%H: Disk space usage on %pi", vlabel = "Bytes", - per_instance = true, number_format = "%5.1lf%sB", data = { diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/processes.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/processes.lua index d48441abd..323c3c230 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/processes.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/processes.lua @@ -12,17 +12,18 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) data = { instances = { ps_state = { - "sleeping", "running", "paging", "blocked", "stopped", "zombies" + "sleeping", "running", "paging", + "blocked", "stopped", "zombies" } }, options = { - ps_state_sleeping = { color = "0000ff" }, - ps_state_running = { color = "008000" }, - ps_state_paging = { color = "ffff00" }, - ps_state_blocked = { color = "ff5000" }, - ps_state_stopped = { color = "555555" }, - ps_state_zombies = { color = "ff0000" } + ps_state_sleeping = { color = "0000ff", title = "Sleeping" }, + ps_state_running = { color = "008000", title = "Running" }, + ps_state_paging = { color = "ffff00", title = "Paging" }, + ps_state_blocked = { color = "ff5000", title = "Blocked" }, + ps_state_stopped = { color = "555555", title = "Stopped" }, + ps_state_zombies = { color = "ff0000", title = "Zombies" } } } }, @@ -38,11 +39,13 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) options = { ps_cputime__user = { color = "0000ff", + title = "User", overlay = true }, ps_cputime__syst = { color = "ff0000", + title = "System", overlay = true } } @@ -59,15 +62,15 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) }, options = { - ps_count__threads = { color = "00ff00" }, - ps_count__processes = { color = "0000bb" } + ps_count__threads = { color = "00ff00", title = "Threads" }, + ps_count__processes = { color = "0000bb", title = "Processes" } } } }, { title = "%H: Page faults in %pi", - vlabel = "Pagefaults", + vlabel = "Page faults", detail = true, data = { sources = { @@ -75,14 +78,14 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) }, options = { - ps_pagefaults__minflt = { color = "ff0000" }, - ps_pagefaults__majflt = { color = "ff5500" } + ps_pagefaults__minflt = { color = "0000ff", title = "Minor" }, + ps_pagefaults__majflt = { color = "ff0000", title = "Major" } } } }, { - title = "%H: Virtual memory size of %pi", + title = "%H: Resident segment size (RSS) of %pi", vlabel = "Bytes", detail = true, number_format = "%5.1lf%sB", @@ -90,7 +93,21 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) types = { "ps_rss" }, options = { - ps_rss = { color = "0000ff" } + ps_rss = { color = "0000ff", title = "Resident segment" } + } + } + }, + + { + title = "%H: Virtual memory size (VSZ) of %pi", + vlabel = "Bytes", + detail = true, + number_format = "%5.1lf%sB", + data = { + types = { "ps_vm" }, + + options = { + ps_vm = { color = "0000ff", title = "Virtual memory" } } } } diff --git a/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm b/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm index ebc78badb..85a20d993 100644 --- a/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm +++ b/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm @@ -29,9 +29,7 @@ <div style="text-align: center"> <% for i, img in ipairs(images) do %> - <% if is_index then %><a href="<%=pcdata(images[img])%>"><% end %> <img src="<%=REQUEST_URI%>?img=<%=img%>&host=<%=current_host%>" /> - <% if is_index then %></a><% end %> <br /> <% end %> </div> diff --git a/applications/luci-app-statistics/po/ca/statistics.po b/applications/luci-app-statistics/po/ca/statistics.po index 2c648ceca..33d5051f4 100644 --- a/applications/luci-app-statistics/po/ca/statistics.po +++ b/applications/luci-app-statistics/po/ca/statistics.po @@ -39,6 +39,15 @@ msgstr "Directori base" msgid "Basic monitoring" msgstr "Monitoreig bàsic" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "Configuració del connector de CPU" @@ -84,6 +93,9 @@ msgstr "Conntrack" msgid "Conntrack Plugin Configuration" msgstr "Configuració del connector Conntrack" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Configuració del connector DF" @@ -129,6 +141,9 @@ msgstr "Configuració del connector d'adreça electrònica" msgid "Email" msgstr "Adreça electrònica" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Activa aquest connector" @@ -268,6 +283,9 @@ msgstr "Monitoritza tots els ports locals que reben connexions" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Monitoritza dispositius" @@ -319,6 +337,11 @@ msgstr "Connectors de xarxa" msgid "Network protocol" msgstr "Protocol de xarxa" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Número de fils de recol·lecció de dades" @@ -658,6 +681,12 @@ msgstr "" "els ports seleccionats." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -667,6 +696,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/cs/statistics.po b/applications/luci-app-statistics/po/cs/statistics.po index 2a725461e..849831607 100644 --- a/applications/luci-app-statistics/po/cs/statistics.po +++ b/applications/luci-app-statistics/po/cs/statistics.po @@ -35,6 +35,15 @@ msgstr "Základní adresář" msgid "Basic monitoring" msgstr "Základní sledování" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "Nastavení CPU pluginu" @@ -80,6 +89,9 @@ msgstr "Conntrack" msgid "Conntrack Plugin Configuration" msgstr "Nastavení pluginu Conntrack" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Nastavení pluginu DF" @@ -125,6 +137,9 @@ msgstr "Nastavení E-Mail pluginu" msgid "Email" msgstr "Email" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Povolit tento plugin" @@ -263,6 +278,9 @@ msgstr "Monitorovat všechny naslouchající porty" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Sledovat zařízení" @@ -314,6 +332,11 @@ msgstr "Síťové pluginy" msgid "Network protocol" msgstr "Síťový protokol" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Počet vláken pro sběr dat" @@ -644,6 +667,12 @@ msgstr "" "vybraných portech." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -653,6 +682,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/de/statistics.po b/applications/luci-app-statistics/po/de/statistics.po index 51697bfd5..196433e50 100644 --- a/applications/luci-app-statistics/po/de/statistics.po +++ b/applications/luci-app-statistics/po/de/statistics.po @@ -37,6 +37,15 @@ msgstr "Basisverzeichnis" msgid "Basic monitoring" msgstr "Schnittstellen einfach überwachen" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "CPU Plugin Konfiguration" @@ -82,6 +91,9 @@ msgstr "Conntrack" msgid "Conntrack Plugin Configuration" msgstr "Conntrack Plugin Einstellungen" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "DF Plugin Konfiguration" @@ -127,6 +139,9 @@ msgstr "E-Mail Plugin Konfiguration" msgid "Email" msgstr "Email" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Plugin aktivieren" @@ -270,6 +285,9 @@ msgstr "Alle durch lokale Dienste genutzten Ports überwachen" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Geräte überwachen" @@ -321,6 +339,11 @@ msgstr "Netzwerkplugins" msgid "Network protocol" msgstr "Netzwerkprotokoll" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Anzahl paralleler Sammelprozesse" @@ -663,6 +686,12 @@ msgstr "" "ausgewählten Ports." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -672,6 +701,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/el/statistics.po b/applications/luci-app-statistics/po/el/statistics.po index 3388ea510..da54cdac6 100644 --- a/applications/luci-app-statistics/po/el/statistics.po +++ b/applications/luci-app-statistics/po/el/statistics.po @@ -38,6 +38,15 @@ msgstr "Κατάλογος βάσης" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -83,6 +92,9 @@ msgstr "Conntrack" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -129,6 +141,9 @@ msgstr "" msgid "Email" msgstr "Ηλ. Ταχυδρομείο" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "" @@ -261,6 +276,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -312,6 +330,11 @@ msgstr "Πρόσθετα δικτύου" msgid "Network protocol" msgstr "" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Αριθμός νημάτων για τη συλλογή δεδομένων" @@ -606,6 +629,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -613,6 +642,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/en/statistics.po b/applications/luci-app-statistics/po/en/statistics.po index fe1f8beb9..d9ab59ce0 100644 --- a/applications/luci-app-statistics/po/en/statistics.po +++ b/applications/luci-app-statistics/po/en/statistics.po @@ -37,6 +37,15 @@ msgstr "Base Directory" msgid "Basic monitoring" msgstr "Basic monitoring" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "CPU Plugin Configuration" @@ -82,6 +91,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "DF Plugin Configuration" @@ -127,6 +139,9 @@ msgstr "E-Mail Plugin Configuration" msgid "Email" msgstr "Email" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Enable this plugin" @@ -266,6 +281,9 @@ msgstr "Monitor all local listen ports" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Monitor devices" @@ -317,6 +335,11 @@ msgstr "Network plugins" msgid "Network protocol" msgstr "Network protocol" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Number of threads for data collection" @@ -646,6 +669,12 @@ msgstr "" "selected ports." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -655,6 +684,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/es/statistics.po b/applications/luci-app-statistics/po/es/statistics.po index 0d47b659c..18c25819a 100644 --- a/applications/luci-app-statistics/po/es/statistics.po +++ b/applications/luci-app-statistics/po/es/statistics.po @@ -37,6 +37,15 @@ msgstr "Directorio Base" msgid "Basic monitoring" msgstr "Monitorización básica" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "Configuración del plugin de CPU" @@ -82,6 +91,9 @@ msgstr "Seguimiento" msgid "Conntrack Plugin Configuration" msgstr "Configuración del seguimiento" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Configuración del plugin DF" @@ -127,6 +139,9 @@ msgstr "Configuración del plugin email" msgid "Email" msgstr "Correo electrónico" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Activar este plugin" @@ -265,6 +280,9 @@ msgstr "Monitorizar todos los puertos de escucha locales" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Dispositivos a monitonizar" @@ -316,6 +334,11 @@ msgstr "Plugins de red" msgid "Network protocol" msgstr "Protocolo de red" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Número de hilos para recolección de datos" @@ -659,6 +682,12 @@ msgstr "" "puertos seleccionados." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -668,6 +697,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/fr/statistics.po b/applications/luci-app-statistics/po/fr/statistics.po index b7ace0cac..b657bd38f 100644 --- a/applications/luci-app-statistics/po/fr/statistics.po +++ b/applications/luci-app-statistics/po/fr/statistics.po @@ -37,6 +37,15 @@ msgstr "Répertoire de base" msgid "Basic monitoring" msgstr "Surveillance de base" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "Configuration du greffon sur le CPU" @@ -82,6 +91,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Configuration du greffon DF" @@ -127,6 +139,9 @@ msgstr "Configuration du greffon des courriels" msgid "Email" msgstr "Courriel" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Activer ce greffon" @@ -267,6 +282,9 @@ msgstr "Surveiller tous les ports en écoute locaux" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Périphériques à surveiller" @@ -318,6 +336,11 @@ msgstr "Greffons liés au réseau" msgid "Network protocol" msgstr "Protocole réseau" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Nombre de fils pour la récupération des données" @@ -654,6 +677,12 @@ msgstr "" "de connexions TCP sur les ports spécifiés." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -661,6 +690,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/he/statistics.po b/applications/luci-app-statistics/po/he/statistics.po index a5da218a2..6f40a47a2 100644 --- a/applications/luci-app-statistics/po/he/statistics.po +++ b/applications/luci-app-statistics/po/he/statistics.po @@ -37,6 +37,15 @@ msgstr "" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -79,6 +88,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -124,6 +136,9 @@ msgstr "" msgid "Email" msgstr "" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "" @@ -256,6 +271,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -307,6 +325,11 @@ msgstr "" msgid "Network protocol" msgstr "" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "" @@ -601,6 +624,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -608,6 +637,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/hu/statistics.po b/applications/luci-app-statistics/po/hu/statistics.po index bf4dd53a0..979c72f0f 100644 --- a/applications/luci-app-statistics/po/hu/statistics.po +++ b/applications/luci-app-statistics/po/hu/statistics.po @@ -35,6 +35,15 @@ msgstr "Alapkönyvtár" msgid "Basic monitoring" msgstr "Általános figyelés" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "CPU bővítmény beállítása" @@ -80,6 +89,9 @@ msgstr "Conntrack" msgid "Conntrack Plugin Configuration" msgstr "Conntrack bővítmény beállítása" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "DF bővítmény beállítása" @@ -125,6 +137,9 @@ msgstr "E-Mail bővítmény beállítása" msgid "Email" msgstr "E-mail" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Bővítmény engedélyezése" @@ -268,6 +283,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Eszközök figyelése" @@ -319,6 +337,11 @@ msgstr "Hálózati bővítmények" msgid "Network protocol" msgstr "Hálózati protokoll" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Az adatgyűjtő szálak száma" @@ -646,6 +669,12 @@ msgstr "" "információkat." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -655,6 +684,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/it/statistics.po b/applications/luci-app-statistics/po/it/statistics.po index 131333612..b0ae3d6b7 100644 --- a/applications/luci-app-statistics/po/it/statistics.po +++ b/applications/luci-app-statistics/po/it/statistics.po @@ -37,6 +37,15 @@ msgstr "" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -82,6 +91,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -127,6 +139,9 @@ msgstr "" msgid "Email" msgstr "" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Abilita questo plugin" @@ -266,6 +281,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -317,6 +335,11 @@ msgstr "" msgid "Network protocol" msgstr "" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "" @@ -611,6 +634,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -618,6 +647,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/ja/statistics.po b/applications/luci-app-statistics/po/ja/statistics.po index 7469fe68a..690d9207d 100644 --- a/applications/luci-app-statistics/po/ja/statistics.po +++ b/applications/luci-app-statistics/po/ja/statistics.po @@ -1,59 +1,68 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-19 19:36+0200\n" -"PO-Revision-Date: 2012-04-20 08:55+0200\n" -"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-01-24 15:08+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.4\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "Action (target)" -msgstr "" +msgstr "アクション(対象)" msgid "Add command for reading values" -msgstr "" +msgstr "値読み取りコマンドの追加" msgid "Add matching rule" -msgstr "" +msgstr "マッチング規則の追加" msgid "Add multiple hosts separated by space." -msgstr "" +msgstr "スペースで区切られた複数のホストを追加します。" msgid "Add notification command" -msgstr "" +msgstr "通知コマンドの追加" msgid "Aggregate number of connected users" -msgstr "" +msgstr "接続ユーザー数の総計" msgid "Base Directory" msgstr "ベース・ディレクトリ" msgid "Basic monitoring" +msgstr "基本モニタリング" + +msgid "CPU Context Switches Plugin Configuration" msgstr "" +msgid "CPU Frequency" +msgstr "CPU 周波数" + +msgid "CPU Frequency Plugin Configuration" +msgstr "CPU 周波数プラグイン設定" + msgid "CPU Plugin Configuration" -msgstr "" +msgstr "CPU プラグイン設定" msgid "CSV Output" -msgstr "" +msgstr "CSV 出力" msgid "CSV Plugin Configuration" msgstr "CSV プラグイン設定" msgid "Cache collected data for" -msgstr "" +msgstr "収集されたデータをキャッシュする" msgid "Cache flush interval" msgstr "" msgid "Chain" -msgstr "" +msgstr "チェイン" msgid "CollectLinks" msgstr "" @@ -72,11 +81,16 @@ msgid "" "different plugins. On this page you can change general settings for the " "collectd daemon." msgstr "" +"Collectd は、様々なソースから別々のプラグインを通してデータを収集する軽量デー" +"モンです。" msgid "Conntrack" -msgstr "" +msgstr "Conntrack" msgid "Conntrack Plugin Configuration" +msgstr "Conntrack プラグイン設定" + +msgid "Context Switches" msgstr "" msgid "DF Plugin Configuration" @@ -86,7 +100,7 @@ msgid "DNS" msgstr "DNS" msgid "DNS Plugin Configuration" -msgstr "" +msgstr "DNS プラグイン設定" msgid "Data collection interval" msgstr "データの収集間隔" @@ -95,7 +109,7 @@ msgid "Datasets definition file" msgstr "データベース定義ファイル" msgid "Destination ip range" -msgstr "" +msgstr "対象IPの範囲" msgid "Directory for collectd plugins" msgstr "collectd プラグインディレクトリ" @@ -107,13 +121,13 @@ msgid "Disk Plugin Configuration" msgstr "ディスクプラグイン設定" msgid "Disk Space Usage" -msgstr "" +msgstr "ディスクスペース使用量" msgid "Disk Usage" -msgstr "" +msgstr "ディスクの使用" msgid "Display Host »" -msgstr "" +msgstr "ホストを表示 »" msgid "Display timespan »" msgstr "時間帯表示 »" @@ -124,20 +138,23 @@ msgstr "E-メールプラグイン設定" msgid "Email" msgstr "Eメール" +msgid "Empty value = monitor all" +msgstr "空の値 = 全てをモニターする" + msgid "Enable this plugin" msgstr "プラグイン設定を有効にする" msgid "Entropy" -msgstr "" +msgstr "エントロピー" msgid "Entropy Plugin Configuration" -msgstr "" +msgstr "エントロピー プラグイン設定" msgid "Exec" msgstr "" msgid "Exec Plugin Configuration" -msgstr "" +msgstr "Exec プラグイン設定" msgid "Filter class monitoring" msgstr "" @@ -155,10 +172,10 @@ msgid "Gather compression statistics" msgstr "" msgid "General plugins" -msgstr "" +msgstr "一般プラグイン" msgid "Generate a separate graph for each logged user" -msgstr "" +msgstr "ログインユーザーごとの分離されたグラフを生成します。" msgid "Graphs" msgstr "グラフ" @@ -170,23 +187,30 @@ msgid "" "Here you can define external commands which will be started by collectd in " "order to read certain values. The values will be read from stdout." msgstr "" +"ここでは、特定の値を読み込むためにcollectによって順番に開始される外部コマンド" +"を設定することができます。値は標準出力から読み込まれます。" msgid "" "Here you can define external commands which will be started by collectd when " "certain threshold values have been reached. The values leading to invokation " "will be feeded to the the called programs stdin." msgstr "" +"ここでは、特定の閾値に到達したときにcollectによって開始される外部コマンドを設" +"定することができます。呼び出しにつながる値は、呼び出されたプログラムの標準入" +"力に送られます。" msgid "" "Here you can define various criteria by which the monitored iptables rules " "are selected." msgstr "" +"ここでは、モニターするiptable規則が選択される様々な基準を設定することができま" +"す。" msgid "Hold Ctrl to select multiple items or to deselect entries." -msgstr "" +msgstr "複数の項目を選択または解除するには、Ctrlキーを押したままにします。" msgid "Host" -msgstr "" +msgstr "ホスト" msgid "Hostname" msgstr "ホスト名" @@ -198,96 +222,102 @@ msgid "IRQ Plugin Configuration" msgstr "IRQ プラグイン設定" msgid "Ignore source addresses" -msgstr "" +msgstr "無視するアクセス元アドレス" msgid "Incoming interface" -msgstr "" +msgstr "着信インターフェース" msgid "Interface Plugin Configuration" -msgstr "" +msgstr "インターフェース プラグイン設定" msgid "Interfaces" -msgstr "" +msgstr "インターフェース" msgid "Interrupts" -msgstr "" +msgstr "割込み" msgid "Interval for pings" -msgstr "" +msgstr "ping間隔" msgid "Iptables Plugin Configuration" -msgstr "" +msgstr "Iptables プラグイン設定" msgid "Leave unselected to automatically determine interfaces to monitor." msgstr "" +"モニターするインターフェースを自動的に決定するには、未選択のままにします。" msgid "Listen host" -msgstr "" +msgstr "待ち受けホスト" msgid "Listen port" -msgstr "" +msgstr "待ち受けポート" msgid "Listener interfaces" -msgstr "" +msgstr "待ち受けインターフェース" msgid "Load Plugin Configuration" -msgstr "" +msgstr "負荷プラグイン設定" msgid "" "Max values for a period can be used instead of averages when not using 'only " "average RRAs'" msgstr "" +"'RRAの平均のみ' を使用しないとき、平均値の代わりに一定期間の最大値を使用でき" +"ます。" msgid "Maximum allowed connections" -msgstr "" +msgstr "許可された最大接続数" msgid "Memory" -msgstr "" +msgstr "メモリー" msgid "Memory Plugin Configuration" -msgstr "" +msgstr "メモリー プラグイン設定" msgid "Monitor all except specified" msgstr "設定値以外の全てのインターフェースをモニターする" msgid "Monitor all local listen ports" -msgstr "" +msgstr "ローカルの全待ち受けポートをモニターする" msgid "Monitor all sensors" +msgstr "全てのセンサーをモニターする" + +msgid "Monitor device(s) / thermal zone(s)" msgstr "" msgid "Monitor devices" -msgstr "" +msgstr "デバイスをモニターする" msgid "Monitor disks and partitions" -msgstr "" +msgstr "ディスクとパーティションをモニターする" msgid "Monitor filesystem types" -msgstr "" +msgstr "ファイルシステム タイプをモニターする" msgid "Monitor hosts" -msgstr "" +msgstr "ホストをモニターする" msgid "Monitor interfaces" msgstr "モニターするインターフェースの設定" msgid "Monitor interrupts" -msgstr "" +msgstr "割込みをモニターする" msgid "Monitor local ports" -msgstr "" +msgstr "ローカルのポートをモニターする" msgid "Monitor mount points" -msgstr "" +msgstr "マウントポイントをモニターする" msgid "Monitor processes" -msgstr "" +msgstr "プロセスをモニターする" msgid "Monitor remote ports" -msgstr "" +msgstr "リモートのポートをモニターする" msgid "Name of the rule" -msgstr "" +msgstr "ルール名" msgid "Netlink" msgstr "Netlink" @@ -307,6 +337,14 @@ msgstr "ネットワークプラグイン" msgid "Network protocol" msgstr "ネットワークプロトコル" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" +"注意: ページは 'nobody' ユーザーとしてレンダリングされます。*.rrd ファイルと" +"保存先ディレクトリ、およびそのペアレントディレクトリは、worldアクセス権が " +"\"読み取り可能\" に設定されている必要があります。" + msgid "Number of threads for data collection" msgstr "データ収集用スレッド数" @@ -320,19 +358,19 @@ msgid "Only create average RRAs" msgstr "平均値のRRAsのみ作成する" msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" msgid "OpenVPN Plugin Configuration" -msgstr "" +msgstr "OpenVPN プラグイン設定" msgid "OpenVPN status files" -msgstr "" +msgstr "OpenVPN ステータスファイル" msgid "Options" msgstr "オプション" msgid "Outgoing interface" -msgstr "" +msgstr "送信インターフェース" msgid "Output plugins" msgstr "出力プラグイン" @@ -347,28 +385,28 @@ msgid "Port" msgstr "ポート" msgid "Processes" -msgstr "" +msgstr "プロセス" msgid "Processes Plugin Configuration" -msgstr "" +msgstr "プロセス プラグイン設定" msgid "Processes to monitor separated by space" -msgstr "" +msgstr "スペースで区切られた、モニターするプロセスです。" msgid "Processor" -msgstr "" +msgstr "プロセッサー" msgid "Qdisc monitoring" -msgstr "" +msgstr "Qdisc モニタリング" msgid "RRD XFiles Factor" msgstr "" msgid "RRD heart beat interval" -msgstr "" +msgstr "RRD ハートビート間隔" msgid "RRD step interval" -msgstr "" +msgstr "RRD stepインターバル" msgid "RRDTool" msgstr "RRDTool" @@ -386,46 +424,46 @@ msgid "Seconds" msgstr "秒" msgid "Sensor list" -msgstr "" +msgstr "センサー一覧" msgid "Sensors" -msgstr "" +msgstr "センサー" msgid "Sensors Plugin Configuration" -msgstr "" +msgstr "センサー プラグイン設定" msgid "Server host" -msgstr "" +msgstr "サーバー ホスト" msgid "Server port" -msgstr "" +msgstr "サーバー ポート" msgid "Setup" -msgstr "" +msgstr "設定" msgid "Shaping class monitoring" msgstr "" msgid "Show max values instead of averages" -msgstr "" +msgstr "平均値の代わりに最大値を表示する" msgid "Socket file" -msgstr "" +msgstr "ソケット ファイル" msgid "Socket group" -msgstr "" +msgstr "ソケット グループ" msgid "Socket permissions" -msgstr "" +msgstr "ソケット パーミッション" msgid "Source ip range" -msgstr "" +msgstr "ソースIPの範囲" msgid "Specifies what information to collect about links." -msgstr "" +msgstr "リンクについて、どのような情報を収集するか設定します。" msgid "Specifies what information to collect about routes." -msgstr "" +msgstr "ルートについて、どのような情報を収集するか設定します。" msgid "Specifies what information to collect about the global topology." msgstr "" @@ -437,40 +475,40 @@ msgid "Splash Leases Plugin Configuration" msgstr "" msgid "Statistics" -msgstr "" +msgstr "統計" msgid "Storage directory" msgstr "保存先ディレクトリ" msgid "Storage directory for the csv files" -msgstr "" +msgstr "CSVファイルの保存先ディレクトリ" msgid "Store data values as rates instead of absolute values" -msgstr "" +msgstr "データ値を絶対値の代わりにレートとして保存します。" msgid "Stored timespans" -msgstr "" +msgstr "保存する期間の範囲" msgid "System Load" -msgstr "" +msgstr "システム負荷" msgid "TCP Connections" -msgstr "" +msgstr "TCP 接続" msgid "TCPConns Plugin Configuration" -msgstr "" +msgstr "TCP接続プラグイン設定" msgid "TTL for network packets" -msgstr "" +msgstr "ネットワークパケットのTTL" msgid "TTL for ping packets" -msgstr "" +msgstr "pingパケットのTTL" msgid "Table" -msgstr "" +msgstr "テーブル" msgid "The NUT plugin reads information about Uninterruptible Power Supplies." -msgstr "" +msgstr "NUT プラグインは、無停電電源装置についての情報を読み取ります。" msgid "" "The OLSRd plugin reads information about meshed networks from the txtinfo " @@ -481,34 +519,43 @@ msgid "" "The OpenVPN plugin gathers information about the current vpn connection " "status." msgstr "" +"OpenVPN プラグインは、現在のVPN接続ステータスについての情報を収集します。" msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." -msgstr "" +msgstr "Conntrack プラグインは、追跡された接続の数についての統計を収集します。" msgid "The cpu plugin collects basic statistics about the processor usage." -msgstr "" +msgstr "CPU プラグインは、プロセッサー使用についての基本的な統計を収集します。" msgid "" "The csv plugin stores collected data in csv file format for further " "processing by external programs." msgstr "" +"CSV プラグインは、外部プログラムがさらに利用するために、収集されたデータをCSV" +"ファイル形式で保存します。" msgid "" "The df plugin collects statistics about the disk space usage on different " "devices, mount points or filesystem types." msgstr "" +"df プラグインは、個別のデバイスまたはマウントポイント、ファイルシステム形式の" +"ディスク使用量についての統計を収集します。" msgid "" "The disk plugin collects detailled usage statistics for selected partitions " "or whole disks." msgstr "" +"ディスク プラグインは、選択されたパーティションまたはディスク全体の詳細な使用" +"統計を収集します。" msgid "" "The dns plugin collects detailled statistics about dns related traffic on " "selected interfaces." msgstr "" +"DNS プラグインは、選択されたインターフェースでのDNSに関連したトラフィックにつ" +"いての詳細な統計を収集します。" msgid "" "The email plugin creates a unix socket which can be used to transmit email-" @@ -516,14 +563,21 @@ msgid "" "to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " "be used in other ways as well." msgstr "" +"Eメール プラグインは、実行中のcollectd デーモンへの電子メール統計の送信に利用" +"可能なUNIX ソケットを作成するプラグインです。このプラグインは、メール、" +"SpamAssasin、プラグイン、Collectdを一緒に使うことを主に意図していますが、ほか" +"の方法にも同様に使用することができます。" msgid "The entropy plugin collects statistics about the available entropy." msgstr "" +"エントロピー プラグインは、利用可能なエントロピーについての統計を収集します。" msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." msgstr "" +"Exec プラグインは、特定の閾値に到達したときに外部プロセスから値の読み込み、も" +"しくは外部プロセスへ通知する外部コマンドを開始します。" msgid "" "The interface plugin collects traffic statistics on selected interfaces." @@ -535,11 +589,15 @@ msgid "" "The iptables plugin will monitor selected firewall rules and collect " "informations about processed bytes and packets per rule." msgstr "" +"iptables プラグインは、選択されたファイアウォール規をモニターし、規則ごとの処" +"理されたバイト数とパケット数についての情報を収集します。" msgid "" "The irq plugin will monitor the rate of issues per second for each selected " "interrupt. If no interrupt is selected then all interrupts are monitored." msgstr "" +"IRQ プラグインは、選択された割り込みごとに1秒当たりの発行レートをモニターしま" +"す。選択された割り込みが無い場合、すべての割り込みがモニターされます。" msgid "" "The iwinfo plugin collects statistics about wireless signal strength, noise " @@ -551,12 +609,14 @@ msgid "The load plugin collects statistics about the general system load." msgstr "負荷プラグインは、システム負荷の統計情報を収集します。" msgid "The memory plugin collects statistics about the memory usage." -msgstr "" +msgstr "メモリー プラグインは、メモリー使用についての統計を収集します。" msgid "" "The netlink plugin collects extended informations like qdisc-, class- and " "filter-statistics for selected interfaces." msgstr "" +"Netlink プラグインは、選択されたインターフェースの qdisc- や class- 、filter-" +"statistics のような拡張的な情報を収集します。" msgid "" "The network plugin provides network based communication between different " @@ -564,16 +624,25 @@ msgid "" "client mode locally collected data is transferred to a collectd server " "instance, in server mode the local instance receives data from other hosts." msgstr "" +"ネットワークプラグインは、異なるcollectd間のネットワークベースの通信を提供し" +"ます。collectdは、クライアントモードとサーバーモードの両方で動作することがで" +"きます。クライアントモードでは、ローカルの収集データはcollectdサーバーに転送" +"され、サーバーモードではローカルのインスタンスは他のホストからデータを受信し" +"ます。" msgid "" "The ping plugin will send icmp echo replies to selected hosts and measure " "the roundtrip time for each host." msgstr "" +"ping プラグインは、ICMP Echo Replyを選択されたホストに送信し、各ホストとの往" +"復時間を計測します。" msgid "" "The processes plugin collects informations like cpu time, page faults and " "memory usage of selected processes." msgstr "" +"プロセス プラグインは、選択されたプロセスのCPU時間やページフォルト、メモリー" +"使用率などの情報を収集します。" msgid "" "The rrdtool plugin stores the collected data in rrd database files, the " @@ -581,11 +650,17 @@ msgid "" "values will result in a very high memory consumption in the temporary " "directory. This can render the device unusable!</strong>" msgstr "" +"rrdtool プラグインは、収集したデータをrrd データベースファイルに保存します。" +"これが統計図の基礎です。<br /><br /><strong>警告: 間違った値を設定すると、一" +"時的なディレクトリによってメモリー消費量が非常に高くなります。これはデバイス" +"を使用不能にする可能性があります!</strong>" msgid "" "The sensors plugin uses the Linux Sensors framework to gather environmental " "statistics." msgstr "" +"センサー プラグインは、環境統計の収集に Linux センサーフレームワークを使用し" +"ます。" msgid "" "The splash leases plugin uses libuci to collect statistics about splash " @@ -597,52 +672,82 @@ msgid "" "to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " "render diagram images." msgstr "" +"statistics パッケージは、データの収集に<a href=\"https://collectd.org/" +"\">Collectd</a>を、統計図のレンダリングに<a href=\"http://oss.oetiker.ch/" +"rrdtool/\">RRDtool</a>を使用します。" msgid "" "The tcpconns plugin collects informations about open tcp connections on " "selected ports." msgstr "" +"TCP接続プラグインは、選択されたポートにおいてオープンなTCP接続についての情報" +"を収集します。" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "サーマル プラグインは、システムの温度をモニターします。" msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" +"unixsock プラグインは、実行中のcollectd インスタンスから収集データの読み取り" +"に使用可能なUNIX ソケットを作成します。" msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "稼働時間 プラグインは、システムの稼働時間についての統計を収集します。" + +msgid "Thermal" +msgstr "サーマル" + +msgid "Thermal Plugin Configuration" +msgstr "サーマル プラグイン設定" + +msgid "This plugin collects statistics about the processor context switches." msgstr "" +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" +"このプラグインは、プロセッサー周波数スケーリングについての統計を収集します。" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." msgstr "" +"このセクションでは、collectdが着信接続を待ち受けるインターフェースを設定しま" +"す。" msgid "" "This section defines to which servers the locally collected data is sent to." msgstr "" +"このセクションでは、ローカルに収集されたデータを送信するサーバーを設定しま" +"す。" msgid "Try to lookup fully qualified hostname" msgstr "" msgid "UPS" -msgstr "" +msgstr "UPS" msgid "UPS Plugin Configuration" -msgstr "" +msgstr "UPS プラグイン設定" msgid "UPS name in NUT ups@host format" -msgstr "" +msgstr "ups@host 形式のNUT内のUPS名" msgid "UnixSock" -msgstr "" +msgstr "UnixSock" msgid "Unixsock Plugin Configuration" -msgstr "" +msgstr "Unixsock プラグイン設定" msgid "Uptime" -msgstr "" +msgstr "稼働時間" msgid "Uptime Plugin Configuration" -msgstr "" +msgstr "稼働時間プラグイン設定" msgid "Use improved naming schema" msgstr "" @@ -651,13 +756,13 @@ msgid "Used PID file" msgstr "使用するPIDファイルの保存場所" msgid "User" -msgstr "" +msgstr "ユーザー" msgid "Verbose monitoring" -msgstr "" +msgstr "詳細モニタリング" msgid "Wireless" -msgstr "" +msgstr "無線" msgid "Wireless iwinfo Plugin Configuration" msgstr "無線LAN iwinfo プラグイン設定" @@ -665,18 +770,20 @@ msgstr "無線LAN iwinfo プラグイン設定" msgid "" "You can install additional collectd-mod-* plugins to enable more statistics." msgstr "" +"追加の collectd-mod-* プラグインをインストールすることで、より多くの統計を有" +"効にできます。" msgid "e.g. br-ff" -msgstr "" +msgstr "例: br-ff" msgid "e.g. br-lan" -msgstr "" +msgstr "例: br-lan" msgid "e.g. reject-with tcp-reset" -msgstr "" +msgstr "例: reject-with tcp-reset" msgid "max. 16 chars" -msgstr "" +msgstr "最大16文字" msgid "reduces rrd size" msgstr "rrdファイルのサイズを小さくします。" @@ -685,7 +792,7 @@ msgid "seconds; multiple separated by space" msgstr "" msgid "server interfaces" -msgstr "" +msgstr "サーバー インターフェース" #~ msgid "Collectd" #~ msgstr "Collectd" diff --git a/applications/luci-app-statistics/po/ms/statistics.po b/applications/luci-app-statistics/po/ms/statistics.po index 3f32b633b..582314c54 100644 --- a/applications/luci-app-statistics/po/ms/statistics.po +++ b/applications/luci-app-statistics/po/ms/statistics.po @@ -34,6 +34,15 @@ msgstr "" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -76,6 +85,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -121,6 +133,9 @@ msgstr "" msgid "Email" msgstr "" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "" @@ -253,6 +268,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -304,6 +322,11 @@ msgstr "" msgid "Network protocol" msgstr "" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "" @@ -598,6 +621,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -605,6 +634,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/no/statistics.po b/applications/luci-app-statistics/po/no/statistics.po index 945fa79b1..d37bc488f 100644 --- a/applications/luci-app-statistics/po/no/statistics.po +++ b/applications/luci-app-statistics/po/no/statistics.po @@ -28,6 +28,15 @@ msgstr "Hoved Katalog" msgid "Basic monitoring" msgstr "Enkel overvåking" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "CPU plugin konfigurasjon" @@ -73,6 +82,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "DF plugin konfigurasjon" @@ -118,6 +130,9 @@ msgstr "E-Post plugin konfigurasjon" msgid "Email" msgstr "Epost" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Aktiver denne plugin" @@ -255,6 +270,9 @@ msgstr "Overvåk alle lokale lyttende porter" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Overvåk enheter" @@ -306,6 +324,11 @@ msgstr "Nettverks plugin" msgid "Network protocol" msgstr "Nettverks protokoll" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Antall tråder for datainnsamling" @@ -634,6 +657,12 @@ msgstr "" "porter." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -643,6 +672,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/pl/statistics.po b/applications/luci-app-statistics/po/pl/statistics.po index f8176b657..bf2ec9351 100644 --- a/applications/luci-app-statistics/po/pl/statistics.po +++ b/applications/luci-app-statistics/po/pl/statistics.po @@ -38,6 +38,15 @@ msgstr "Główny katalog" msgid "Basic monitoring" msgstr "Podstawowy monitoring" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "Konfiguracja CPU" @@ -83,6 +92,9 @@ msgstr "Conntrack" msgid "Conntrack Plugin Configuration" msgstr "Konfiguracja wtyczki Conntrack" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Konfiguracja wtyczki DF" @@ -128,6 +140,9 @@ msgstr "Konfiguracja wtyczki E-mail" msgid "Email" msgstr "E-mail" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Włącz tę wtyczkę" @@ -269,6 +284,9 @@ msgstr "Monitoruj wszystkie lokalne otwarte porty" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Monitoruj urządzenia" @@ -320,6 +338,11 @@ msgstr "Wtyczki sieciowe" msgid "Network protocol" msgstr "Protokoły sieciowe" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Liczba wątków do zbierania danych" @@ -654,6 +677,12 @@ msgstr "" "wybranych portów." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -663,6 +692,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/pt-br/statistics.po b/applications/luci-app-statistics/po/pt-br/statistics.po index 92213a8ce..74c4a2603 100644 --- a/applications/luci-app-statistics/po/pt-br/statistics.po +++ b/applications/luci-app-statistics/po/pt-br/statistics.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:41+0200\n" -"PO-Revision-Date: 2014-03-15 22:12+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-02-22 18:27-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "Action (target)" msgstr "Ação (destino)" @@ -29,7 +29,7 @@ msgid "Add notification command" msgstr "Adicionar o comando de notificação" msgid "Aggregate number of connected users" -msgstr "" +msgstr "Numero agregado de usuários conectados" msgid "Base Directory" msgstr "Diretório Base" @@ -37,6 +37,15 @@ msgstr "Diretório Base" msgid "Basic monitoring" msgstr "Monitoramento básico" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "Frequência da CPU" + +msgid "CPU Frequency Plugin Configuration" +msgstr "Configuração do Plugin da Frequência da CPU" + msgid "CPU Plugin Configuration" msgstr "Configuração do plugin CPU" @@ -82,6 +91,9 @@ msgstr "Conntrack" msgid "Conntrack Plugin Configuration" msgstr "Configuração do Plugin do Conntrack" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Configuração do plugin DF" @@ -127,14 +139,17 @@ msgstr "Configuração do plugin E-Mail" msgid "Email" msgstr "Email" +msgid "Empty value = monitor all" +msgstr "Valor vazio = monitore todos" + msgid "Enable this plugin" msgstr "Habilitar este plugin" msgid "Entropy" -msgstr "" +msgstr "Entropia" msgid "Entropy Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin de Entropia" msgid "Exec" msgstr "Exec" @@ -156,13 +171,13 @@ msgstr "" "Encaminhamento entre o endereço de escuta e os endereços dos servidores" msgid "Gather compression statistics" -msgstr "" +msgstr "Obter estatísticas sobre a compressão" msgid "General plugins" -msgstr "" +msgstr "Plugins Gerais" msgid "Generate a separate graph for each logged user" -msgstr "" +msgstr "Gerar um gráfico separado para cada usuário conectado" msgid "Graphs" msgstr "Gráficos" @@ -195,6 +210,7 @@ msgstr "" msgid "Hold Ctrl to select multiple items or to deselect entries." msgstr "" +"Segure o Ctrl para selecionar múltiplos itens ou para retirar entradas. " msgid "Host" msgstr "Equipamento" @@ -250,6 +266,8 @@ msgid "" "Max values for a period can be used instead of averages when not using 'only " "average RRAs'" msgstr "" +"Valores máximos para um período podem ser usados em vez de médias quando não " +"estiver usando 'somente RRAs de médias'" msgid "Maximum allowed connections" msgstr "Máximo de conexões permitidas" @@ -267,7 +285,10 @@ msgid "Monitor all local listen ports" msgstr "Monitorar todas as portas locais" msgid "Monitor all sensors" -msgstr "" +msgstr "Monitorar todas os sensores" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "Dispositivo(s) de monitoramento / zona(s) térmica(s)" msgid "Monitor devices" msgstr "Monitorar dispositivos" @@ -320,6 +341,14 @@ msgstr "Plugins de rede" msgid "Network protocol" msgstr "Protocolo de rede" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" +"Nota: como as páginas são renderizadas pelo usuário 'nobody', os arquivos * ." +"rrd, o diretório de armazenamento e todos os seus diretórios superiores " +"precisam ser legíveis a todos." + msgid "Number of threads for data collection" msgstr "Número de threads para o coletor de dados" @@ -333,13 +362,13 @@ msgid "Only create average RRAs" msgstr "Somente criar RRAs de média" msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" msgid "OpenVPN Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin do OpenVPN" msgid "OpenVPN status files" -msgstr "" +msgstr "Arquivos de estado do OpenVPN" msgid "Options" msgstr "Opções" @@ -399,13 +428,13 @@ msgid "Seconds" msgstr "Segundos" msgid "Sensor list" -msgstr "" +msgstr "Lista de sensores" msgid "Sensors" -msgstr "" +msgstr "Sensores" msgid "Sensors Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin de Sensores" msgid "Server host" msgstr "Endereço do servidor" @@ -414,13 +443,13 @@ msgid "Server port" msgstr "Porta do servidor" msgid "Setup" -msgstr "" +msgstr "Configuração" msgid "Shaping class monitoring" msgstr "Monitoramento das Classes de Shaping" msgid "Show max values instead of averages" -msgstr "" +msgstr "Mostrar valores máximos em vez de médias" msgid "Socket file" msgstr "Arquivo do socket" @@ -444,10 +473,10 @@ msgid "Specifies what information to collect about the global topology." msgstr "Especifica quais informações serão coletadas sobre a topologia global." msgid "Splash Leases" -msgstr "" +msgstr "Concessões do Splash" msgid "Splash Leases Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin das Concessões do Splash" msgid "Statistics" msgstr "Estatística" @@ -496,6 +525,7 @@ msgid "" "The OpenVPN plugin gathers information about the current vpn connection " "status." msgstr "" +"O plugin OpenVPN reúne informações sobre o status atual da conexão VPN." msgid "" "The conntrack plugin collects statistics about the number of tracked " @@ -548,7 +578,7 @@ msgstr "" "Plugin::Collectd mas pode ser utilizado de outras maneiras também." msgid "The entropy plugin collects statistics about the available entropy." -msgstr "" +msgstr "O plugin de entropia coleta estatísticas sobre a entropia disponível." msgid "" "The exec plugin starts external commands to read values from or to notify " @@ -639,17 +669,24 @@ msgid "" "The sensors plugin uses the Linux Sensors framework to gather environmental " "statistics." msgstr "" +"O plugin de sensores usa a estrutura de sensores do Linux para coletar " +"estatísticas ambientais." msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" +"O plug-in de concessões splash usa o libuci para coletar estatísticas sobre " +"concessões de splash." msgid "" "The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " "to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " "render diagram images." msgstr "" +"O pacote de estatísticas usa <a href=\"https://collectd.org/\"> Collectd </" +"a> para coletar dados e <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</" +"a> para desenhar os gráficos." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -659,6 +696,15 @@ msgstr "" "portas selecionadas." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" +"O plugin térmico monitorará a temperatura do sistema. Os dados são " +"tipicamente lidos de /sys/class/thermal/*/temp ('*' indica o dispositivo " +"térmico a ser lido, ex:, thermal_zone1)" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -667,6 +713,22 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +"O plugin de tempo de atividade coleta estatísticas sobre o tempo de " +"atividade do sistema." + +msgid "Thermal" +msgstr "Térmico" + +msgid "Thermal Plugin Configuration" +msgstr "Configuração do Plugin Térmico" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" +"Este plugin coleta as estatísticas sobre o escalonamento da frequência do " +"processador." msgid "" "This section defines on which interfaces collectd will wait for incoming " @@ -700,13 +762,13 @@ msgid "Unixsock Plugin Configuration" msgstr "Configuração do plugin Unixsock" msgid "Uptime" -msgstr "" +msgstr "Tempo de atividade" msgid "Uptime Plugin Configuration" -msgstr "" +msgstr "Configuração do Plugin de Tempo de Atividade" msgid "Use improved naming schema" -msgstr "" +msgstr "Use um esquema de nomeação melhorado" msgid "Used PID file" msgstr "Arquivo PID usado" @@ -726,6 +788,8 @@ msgstr "Configuração do Plugin iwinfo da Rede Sem Fio (Wireless)" msgid "" "You can install additional collectd-mod-* plugins to enable more statistics." msgstr "" +"Você pode instalar plugins adicionais (collectd-mod-*) para habilitar mais " +"estatísticas." msgid "e.g. br-ff" msgstr "ex: br-ff" diff --git a/applications/luci-app-statistics/po/pt/statistics.po b/applications/luci-app-statistics/po/pt/statistics.po index e215df87d..79c7bd03e 100644 --- a/applications/luci-app-statistics/po/pt/statistics.po +++ b/applications/luci-app-statistics/po/pt/statistics.po @@ -37,6 +37,15 @@ msgstr "Diretório Base" msgid "Basic monitoring" msgstr "Monitoramento básico" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "Configuração do plugin CPU" @@ -82,6 +91,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Configuração do plugin DF" @@ -127,6 +139,9 @@ msgstr "Configuração do plugin E-Mail" msgid "Email" msgstr "Email" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Habilitar este plugin" @@ -268,6 +283,9 @@ msgstr "Monitorar todas as portas locais" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Monitorar dispositivos" @@ -319,6 +337,11 @@ msgstr "Plugins de rede" msgid "Network protocol" msgstr "Protocolo de rede" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Número de threads para o coletor de dados" @@ -652,6 +675,12 @@ msgstr "" "portas selecionadas." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -661,6 +690,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/ro/statistics.po b/applications/luci-app-statistics/po/ro/statistics.po index a8042b435..c5dfcfe55 100644 --- a/applications/luci-app-statistics/po/ro/statistics.po +++ b/applications/luci-app-statistics/po/ro/statistics.po @@ -38,6 +38,15 @@ msgstr "Directorul de baza" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "Configurarea pluginului CPU" @@ -83,6 +92,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -128,6 +140,9 @@ msgstr "" msgid "Email" msgstr "Email" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "" @@ -260,6 +275,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -311,6 +329,11 @@ msgstr "Pluginuri de retea" msgid "Network protocol" msgstr "" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Numarul de threaduri pentru colectarea datelor" @@ -607,6 +630,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -614,6 +643,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/ru/statistics.po b/applications/luci-app-statistics/po/ru/statistics.po index 41f811082..3a418dec7 100644 --- a/applications/luci-app-statistics/po/ru/statistics.po +++ b/applications/luci-app-statistics/po/ru/statistics.po @@ -39,6 +39,15 @@ msgstr "Базовая директория" msgid "Basic monitoring" msgstr "Базовая статистика" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "Конфигурация модуля CPU" @@ -83,6 +92,9 @@ msgstr "Отслеживание подключения (Conntrack)" msgid "Conntrack Plugin Configuration" msgstr "Настройка плагина Conntrack" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Конфигурация модуля DF" @@ -128,6 +140,9 @@ msgstr "Конфигурация модуля E-Mail" msgid "Email" msgstr "E-mail" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Включить этот модуль" @@ -270,6 +285,9 @@ msgstr "Собирать статистику со всех портов, ожи msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Собирать статистику с устройств" @@ -321,6 +339,11 @@ msgstr "Сетевые модули" msgid "Network protocol" msgstr "Сетевой протокол" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Количество потоков сбора данных" @@ -650,6 +673,12 @@ msgstr "" "портах." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -659,6 +688,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/sk/statistics.po b/applications/luci-app-statistics/po/sk/statistics.po index c8100e3e7..6dba7d09b 100644 --- a/applications/luci-app-statistics/po/sk/statistics.po +++ b/applications/luci-app-statistics/po/sk/statistics.po @@ -32,6 +32,15 @@ msgstr "" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -74,6 +83,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -119,6 +131,9 @@ msgstr "" msgid "Email" msgstr "" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "" @@ -251,6 +266,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -302,6 +320,11 @@ msgstr "" msgid "Network protocol" msgstr "" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "" @@ -596,6 +619,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -603,6 +632,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/sv/statistics.po b/applications/luci-app-statistics/po/sv/statistics.po index a7443b307..bef0f2d6c 100644 --- a/applications/luci-app-statistics/po/sv/statistics.po +++ b/applications/luci-app-statistics/po/sv/statistics.po @@ -33,6 +33,15 @@ msgstr "Basmapp" msgid "Basic monitoring" msgstr "Standardövervakning" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -78,6 +87,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Konfiguration av insticksprogrammet DF" @@ -123,6 +135,9 @@ msgstr "Konfiguration av insticksprogrammet E-post" msgid "Email" msgstr "E-post" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Aktivera det här insticksprogrammet" @@ -256,6 +271,9 @@ msgstr "Övervaka alla lokala lyssningsportar" msgid "Monitor all sensors" msgstr "Övervaka alla sensorer" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Övervaka enheter" @@ -307,6 +325,11 @@ msgstr "Insticksprogram för nätverket" msgid "Network protocol" msgstr "Nätverksprotokoll" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Antalet trådar för insamling av data" @@ -601,6 +624,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -608,6 +637,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/templates/statistics.pot b/applications/luci-app-statistics/po/templates/statistics.pot index c07f4dc4a..c57a85b76 100644 --- a/applications/luci-app-statistics/po/templates/statistics.pot +++ b/applications/luci-app-statistics/po/templates/statistics.pot @@ -25,6 +25,15 @@ msgstr "" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -67,6 +76,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -112,6 +124,9 @@ msgstr "" msgid "Email" msgstr "" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "" @@ -244,6 +259,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -295,6 +313,11 @@ msgstr "" msgid "Network protocol" msgstr "" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "" @@ -589,6 +612,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -596,6 +625,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/tr/statistics.po b/applications/luci-app-statistics/po/tr/statistics.po index 235ad1cc0..6d7056f3b 100644 --- a/applications/luci-app-statistics/po/tr/statistics.po +++ b/applications/luci-app-statistics/po/tr/statistics.po @@ -33,6 +33,15 @@ msgstr "" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -75,6 +84,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -120,6 +132,9 @@ msgstr "" msgid "Email" msgstr "" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "" @@ -252,6 +267,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -303,6 +321,11 @@ msgstr "" msgid "Network protocol" msgstr "" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "" @@ -597,6 +620,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -604,6 +633,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/uk/statistics.po b/applications/luci-app-statistics/po/uk/statistics.po index 0be5b367b..de17a3caf 100644 --- a/applications/luci-app-statistics/po/uk/statistics.po +++ b/applications/luci-app-statistics/po/uk/statistics.po @@ -38,6 +38,15 @@ msgstr "" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -80,6 +89,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -125,6 +137,9 @@ msgstr "" msgid "Email" msgstr "" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "" @@ -257,6 +272,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -308,6 +326,11 @@ msgstr "" msgid "Network protocol" msgstr "Мережевий протокол" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "" @@ -602,6 +625,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -609,6 +638,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/vi/statistics.po b/applications/luci-app-statistics/po/vi/statistics.po index ef99e551a..bdb7f1a3a 100644 --- a/applications/luci-app-statistics/po/vi/statistics.po +++ b/applications/luci-app-statistics/po/vi/statistics.po @@ -38,6 +38,15 @@ msgstr "Thư mục Cơ sở" msgid "Basic monitoring" msgstr "Monitoring căn bản" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "Cấu hình Plugin CPU" @@ -83,6 +92,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "Cấu hình DF plugin" @@ -128,6 +140,9 @@ msgstr "Cấu hình e-mail plugin" msgid "Email" msgstr "Email" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "Kích hoạt plugin này" @@ -267,6 +282,9 @@ msgstr "Monitor tất cả local listen port" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "Monitor devices" @@ -318,6 +336,11 @@ msgstr "Network plugins" msgid "Network protocol" msgstr "Network protocol" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "Số lượng các chủ đề để thu thập dữ liệu" @@ -652,6 +675,12 @@ msgstr "" "chọn." msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -661,6 +690,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/po/zh-cn/rrdtool.po b/applications/luci-app-statistics/po/zh-cn/rrdtool.po index 4e6ee4b4d..d55398ace 100644 --- a/applications/luci-app-statistics/po/zh-cn/rrdtool.po +++ b/applications/luci-app-statistics/po/zh-cn/rrdtool.po @@ -2,16 +2,17 @@ # generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2014-07-23 02:08+0200\n" -"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2017-04-15 21:41-0600\n" +"Last-Translator: liushuyu <liushuyu011@gmail.com>\n" "Language-Team: none\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 2.0.1\n" +"POT-Creation-Date: \n" #. %H: Wireless - Signal Noise Ratio #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 @@ -36,12 +37,12 @@ msgstr "信号强度" #. %H: Wireless - Signal Quality #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 msgid "stat_dg_title_wireless__signal_quality" -msgstr "无线信号质量" +msgstr "%H: 无线 - 信号质量" #. n #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 msgid "stat_dg_label_wireless__signal_quality" -msgstr "无线信号质量" +msgstr "n" #. Signal Quality #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 @@ -51,7 +52,7 @@ msgstr "信号质量" #. %H: ICMP Roundtrip Times #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 msgid "stat_dg_title_ping" -msgstr "ping" +msgstr "%H: ICMP 往返时间" #. ms #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 @@ -61,299 +62,299 @@ msgstr "响应" #. %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 msgid "stat_ds_ping" -msgstr "ping" +msgstr "%di" #. %H: Firewall - Processed Packets #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 msgid "stat_dg_title_iptables__ipt_packets" -msgstr "iptables包" +msgstr "%H: 防火墙 - 已处理的数据包" #. Packets/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 msgid "stat_dg_label_iptables__ipt_packets" -msgstr "" +msgstr "Packets/s" #. Chain \"%di\" #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 msgid "stat_ds_ipt_packets" -msgstr "" +msgstr "Chain \\\"%di\\\"" #. %H: Netlink - Transfer on %pi #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 msgid "stat_dg_title_netlink__if_octets" -msgstr "" +msgstr "%H: Netlink - %pi 上的数据传输" #. Bytes/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 msgid "stat_dg_label_netlink__if_octets" -msgstr "" +msgstr "字节/秒" #. Bytes (%ds) #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 msgid "stat_ds_if_octets" -msgstr "" +msgstr "字节 (%ds)" #. %H: Netlink - Packets on %pi #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 msgid "stat_dg_title_netlink__if_packets" -msgstr "" +msgstr "%H: Netlink - %pi 的数据包" #. Packets/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 msgid "stat_dg_label_netlink__if_packets" -msgstr "" +msgstr "Packets/s" #. Processed (%ds) #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 msgid "stat_ds_if_packets" -msgstr "" +msgstr "已处理 (%ds)" #. Dropped (%ds) #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 msgid "stat_ds_if_dropped" -msgstr "" +msgstr "丢弃 (%ds)" #. Errors (%ds) #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 msgid "stat_ds_if_errors" -msgstr "" +msgstr "错误 (%ds)" #. %H: Netlink - Multicast on %pi #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 msgid "stat_dg_title_netlink__if_multicast" -msgstr "" +msgstr "%H: Netlink - %pi 上的多播" #. Packets/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 msgid "stat_dg_label_netlink__if_multicast" -msgstr "" +msgstr "Packets/s" #. Packets #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 msgid "stat_ds_if_multicast" -msgstr "" +msgstr "数据包" #. %H: Netlink - Collisions on %pi #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 msgid "stat_dg_title_netlink__if_collisions" -msgstr "" +msgstr "%H: Netlink - %pi 上的 Collisions" #. Collisions/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 msgid "stat_dg_label_netlink__if_collisions" -msgstr "" +msgstr "Collisions/s" #. Collisions #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 msgid "stat_ds_if_collisions" -msgstr "" +msgstr "Collisions" #. %H: Netlink - Errors on %pi #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 msgid "stat_dg_title_netlink__if_tx_errors" -msgstr "" +msgstr "%H: Netlink - %pi 上发生的错误" #. Errors/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 msgid "stat_dg_label_netlink__if_tx_errors" -msgstr "" +msgstr "错误/秒" #. %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 msgid "stat_ds_if_tx_errors" -msgstr "" +msgstr "%di" #. %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 msgid "stat_ds_if_rx_errors" -msgstr "" +msgstr "%di" #. %H: Processes #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 msgid "stat_dg_title_processes" -msgstr "" +msgstr "%H: 进程" #. Processes/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 msgid "stat_dg_label_processes" -msgstr "" +msgstr "进程/秒" #. %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 msgid "stat_ds_ps_state" -msgstr "" +msgstr "%di" #. %H: Process %pi - used cpu time #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 msgid "stat_dg_title_processes__ps_cputime" -msgstr "" +msgstr "%H: 进程 %s - 占用的 CPU 时间" #. Jiffies #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 msgid "stat_dg_label_processes__ps_cputime" -msgstr "" +msgstr "Jiffies" #. system #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 msgid "stat_ds_ps_cputime__syst" -msgstr "" +msgstr "系统" #. user #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 msgid "stat_ds_ps_cputime__user" -msgstr "" +msgstr "用户" #. %H: Process %pi - threads and processes #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 msgid "stat_dg_title_processes__ps_count" -msgstr "" +msgstr "%H: 进程 %pi - 进程与线程" #. Count #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 msgid "stat_dg_label_processes__ps_count" -msgstr "" +msgstr "个" #. %ds #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 msgid "stat_ds_ps_count" -msgstr "" +msgstr "%ds" #. %H: Process %pi - page faults #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 msgid "stat_dg_title_processes__ps_pagefaults" -msgstr "" +msgstr "%H: 进程 %pi - 分页错误" #. Pagefaults #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 msgid "stat_dg_label_processes__ps_pagefaults" -msgstr "" +msgstr "分页错误" #. page faults #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 msgid "stat_ds_ps_pagefaults" -msgstr "" +msgstr "分页错误" #. %H: Process %pi - virtual memory size #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 msgid "stat_dg_title_processes__ps_rss" -msgstr "" +msgstr "%H: 进程 %pi - 虚拟内存大小" #. Bytes #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 msgid "stat_dg_label_processes__ps_rss" -msgstr "" +msgstr "字节" #. virtual memory #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 msgid "stat_ds_ps_rss" -msgstr "" +msgstr "虚拟内存" #. %H: Usage on Processor #%pi #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 msgid "stat_dg_title_cpu" -msgstr "" +msgstr "%H: 对处理器 #%pi 的占用" #. % #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 msgid "stat_dg_label_cpu" -msgstr "" +msgstr "%" #. %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 msgid "stat_ds_cpu" -msgstr "" +msgstr "%di" #. %H: Transfer on %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 msgid "stat_dg_title_interface__if_octets" -msgstr "" +msgstr "%H: %di 上的数据传输情况" #. Bytes/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 msgid "stat_dg_label_interface__if_octets" -msgstr "" +msgstr "字节/秒" #. %H: Packets on %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 msgid "stat_dg_title_interface__if_packets" -msgstr "" +msgstr "%H: %di 上的数据包" #. Packets/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 msgid "stat_dg_label_interface__if_packets" -msgstr "" +msgstr "Packets/s" #. %H: TCP-Connections to Port %pi #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 msgid "stat_dg_title_tcpconns" -msgstr "" +msgstr "%H: 到端口 %pi 的 TCP 连接" #. Connections/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 msgid "stat_dg_label_tcpconns" -msgstr "" +msgstr "连接/秒" #. %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 msgid "stat_ds_tcp_connections" -msgstr "" +msgstr "%di" #. %H: Disk Space Usage on %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 msgid "stat_dg_title_df" -msgstr "" +msgstr "%H: %di 上的磁盘占用情况" #. Bytes #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 msgid "stat_dg_label_df" -msgstr "" +msgstr "字节" #. %ds #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 msgid "stat_ds_df__free" -msgstr "" +msgstr "%ds" #. %ds #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 msgid "stat_ds_df__used" -msgstr "" +msgstr "%ds" #. %H: Interrupts #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 msgid "stat_dg_title_irq" -msgstr "" +msgstr "%H: 中断" #. Issues/s #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 msgid "stat_dg_label_irq" -msgstr "" +msgstr "Issues/s" #. IRQ %di #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 msgid "stat_ds_irq" -msgstr "" +msgstr "IRQ %di" #. %H: System Load #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 msgid "stat_dg_title_load" -msgstr "" +msgstr "%H: 系统负载" #. Load #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 msgid "stat_dg_label_load" -msgstr "" +msgstr "负载" #. 1 min #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 msgid "stat_ds_load__shortterm" -msgstr "" +msgstr "1 分钟" #. 5 min #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 msgid "stat_ds_load__midterm" -msgstr "" +msgstr "5 分钟" #. 15 min #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 msgid "stat_ds_load__longterm" -msgstr "" +msgstr "15 分钟" diff --git a/applications/luci-app-statistics/po/zh-cn/statistics.po b/applications/luci-app-statistics/po/zh-cn/statistics.po index 7b3bbfc0c..46cf59fee 100644 --- a/applications/luci-app-statistics/po/zh-cn/statistics.po +++ b/applications/luci-app-statistics/po/zh-cn/statistics.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:40+0200\n" -"PO-Revision-Date: 2014-06-13 15:04+0200\n" -"Last-Translator: phantasm131 <phantasm131@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2017-04-15 21:46-0600\n" +"Last-Translator: liushuyu <liushuyu011@gmail.com>\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 2.0.1\n" +"Language-Team: \n" msgid "Action (target)" msgstr "动作(目标)" @@ -37,6 +37,15 @@ msgstr "基本目录" msgid "Basic monitoring" msgstr "基本监控" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "CPU 频率" + +msgid "CPU Frequency Plugin Configuration" +msgstr "CPU 频率插件配置" + msgid "CPU Plugin Configuration" msgstr "CPU插件配置" @@ -81,6 +90,9 @@ msgstr "Conntrack" msgid "Conntrack Plugin Configuration" msgstr "Conntrack插件设置" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "DF插件设置" @@ -126,14 +138,17 @@ msgstr "E-Mail插件配置" msgid "Email" msgstr "电子邮件" +msgid "Empty value = monitor all" +msgstr "留空 = 监控所有" + msgid "Enable this plugin" msgstr "启用该插件" msgid "Entropy" -msgstr "" +msgstr "熵" msgid "Entropy Plugin Configuration" -msgstr "" +msgstr "熵值插件配置" msgid "Exec" msgstr "Exec" @@ -157,7 +172,7 @@ msgid "Gather compression statistics" msgstr "" msgid "General plugins" -msgstr "" +msgstr "通用插件" msgid "Generate a separate graph for each logged user" msgstr "" @@ -189,7 +204,7 @@ msgid "" msgstr "在这里,你可以定义各种监控iptables规则临界值。" msgid "Hold Ctrl to select multiple items or to deselect entries." -msgstr "" +msgstr "按住 Ctrl 键来选择或取消选择多个项目。" msgid "Host" msgstr "主机" @@ -260,7 +275,10 @@ msgid "Monitor all local listen ports" msgstr "监测所有本地监听端口" msgid "Monitor all sensors" -msgstr "" +msgstr "监控所有传感器" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "监控设备/温感区域" msgid "Monitor devices" msgstr "监测设备" @@ -313,6 +331,13 @@ msgstr "Network插件" msgid "Network protocol" msgstr "Network协议" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" +"注意:由于页面是以 'nobody' 身份生成的,因此 *.rrd 文件以及包含此文件的所有父" +"目录必须全局可读。" + msgid "Number of threads for data collection" msgstr "收集程序使用线程数" @@ -326,13 +351,13 @@ msgid "Only create average RRAs" msgstr "仅创建平均RRAs" msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" msgid "OpenVPN Plugin Configuration" -msgstr "" +msgstr "OpenVPN 插件配置" msgid "OpenVPN status files" -msgstr "" +msgstr "OpenVPN 状态文件" msgid "Options" msgstr "选项" @@ -392,13 +417,13 @@ msgid "Seconds" msgstr "秒" msgid "Sensor list" -msgstr "" +msgstr "传感器列表" msgid "Sensors" -msgstr "" +msgstr "传感器" msgid "Sensors Plugin Configuration" -msgstr "" +msgstr "传感器插件配置" msgid "Server host" msgstr "服务器主机" @@ -407,7 +432,7 @@ msgid "Server port" msgstr "服务器端口" msgid "Setup" -msgstr "" +msgstr "设置" msgid "Shaping class monitoring" msgstr "整形类监控" @@ -486,7 +511,7 @@ msgstr "OLSRd插件通过txtinfo获取meshed网络信息。" msgid "" "The OpenVPN plugin gathers information about the current vpn connection " "status." -msgstr "" +msgstr "OpenVPN 插件可以获取 VPN 连接当前状态" msgid "" "The conntrack plugin collects statistics about the number of tracked " @@ -612,6 +637,9 @@ msgid "" "to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " "render diagram images." msgstr "" +"Statistics 软件包使用 <a href=\"https://collectd.org/\">Collectd</a> 来收集数" +"据,并用 <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> 生成统计图" +"表。" msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -619,6 +647,14 @@ msgid "" msgstr "tcpconns插件,收集选定端口TCP连接信息。" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" +"温感插件将会监控系统温度。数据主要取自 /sys/class/thermal/*/temp ('*' 表示温" +"感设备的名字,比如 thermal_zone1) 。" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "unixsock插件,创建一个unix套接字可用于读取Collectd实例的收集信息。" @@ -626,6 +662,18 @@ msgstr "unixsock插件,创建一个unix套接字可用于读取Collectd实例 msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "温感" + +msgid "Thermal Plugin Configuration" +msgstr "温感插件配置" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "此插件会获取 CPU 频率调整的数据。" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." @@ -654,13 +702,13 @@ msgid "Unixsock Plugin Configuration" msgstr "Unixsock插件配置" msgid "Uptime" -msgstr "" +msgstr "运行时间" msgid "Uptime Plugin Configuration" -msgstr "" +msgstr "运行时间插件配置" msgid "Use improved naming schema" -msgstr "" +msgstr "使用更高级的命名规则" msgid "Used PID file" msgstr "正在使用的PID文件" @@ -679,7 +727,7 @@ msgstr "无线iwinfo插件配置" msgid "" "You can install additional collectd-mod-* plugins to enable more statistics." -msgstr "" +msgstr "您可以安装更多的 collectd-mod-* 插件以获得更多的统计数据。" msgid "e.g. br-ff" msgstr "例如:br-ff" diff --git a/applications/luci-app-statistics/po/zh-tw/statistics.po b/applications/luci-app-statistics/po/zh-tw/statistics.po index 9a9ca34a1..cbd6d9d38 100644 --- a/applications/luci-app-statistics/po/zh-tw/statistics.po +++ b/applications/luci-app-statistics/po/zh-tw/statistics.po @@ -31,6 +31,15 @@ msgstr "" msgid "Basic monitoring" msgstr "" +msgid "CPU Context Switches Plugin Configuration" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + msgid "CPU Plugin Configuration" msgstr "" @@ -73,6 +82,9 @@ msgstr "" msgid "Conntrack Plugin Configuration" msgstr "" +msgid "Context Switches" +msgstr "" + msgid "DF Plugin Configuration" msgstr "" @@ -118,6 +130,9 @@ msgstr "" msgid "Email" msgstr "" +msgid "Empty value = monitor all" +msgstr "" + msgid "Enable this plugin" msgstr "" @@ -250,6 +265,9 @@ msgstr "" msgid "Monitor all sensors" msgstr "" +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -301,6 +319,11 @@ msgstr "" msgid "Network protocol" msgstr "" +msgid "" +"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage " +"directory and all its parent directories need to be world readable." +msgstr "" + msgid "Number of threads for data collection" msgstr "" @@ -595,6 +618,12 @@ msgid "" msgstr "" msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" "The unixsock plugin creates a unix socket which can be used to read " "collected data from a running collectd instance." msgstr "" @@ -602,6 +631,18 @@ msgstr "" msgid "The uptime plugin collects statistics about the uptime of the system." msgstr "" +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor context switches." +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + msgid "" "This section defines on which interfaces collectd will wait for incoming " "connections." diff --git a/applications/luci-app-statistics/root/etc/config/luci_statistics b/applications/luci-app-statistics/root/etc/config/luci_statistics index 774a8382e..c081a8e72 100644 --- a/applications/luci-app-statistics/root/etc/config/luci_statistics +++ b/applications/luci-app-statistics/root/etc/config/luci_statistics @@ -52,6 +52,9 @@ config statistics 'collectd_unixsock' config statistics 'collectd_conntrack' option enable '0' +config statistics 'collectd_contextswitch' + option enable '0' + config statistics 'collectd_cpu' option enable '1' diff --git a/applications/luci-app-statistics/root/usr/bin/stat-genconfig b/applications/luci-app-statistics/root/usr/bin/stat-genconfig index df9af1526..090344cee 100755 --- a/applications/luci-app-statistics/root/usr/bin/stat-genconfig +++ b/applications/luci-app-statistics/root/usr/bin/stat-genconfig @@ -279,6 +279,12 @@ plugins = { { } }, + contextswitch = { + { }, + { }, + { } + }, + csv = { { "DataDir" }, { "StoreRates" }, @@ -349,12 +355,6 @@ plugins = { { } }, - madwifi = { - { "WatchSet" }, - { }, - { "Interfaces", "WatchAdds" } - }, - memory = { { }, { }, diff --git a/applications/luci-app-travelmate/Makefile b/applications/luci-app-travelmate/Makefile index f4b1b0a4e..6170f9d4c 100644 --- a/applications/luci-app-travelmate/Makefile +++ b/applications/luci-app-travelmate/Makefile @@ -1,11 +1,11 @@ -# -# This is free software, licensed under the Apache License, Version 2.0 . +# Copyright 2017 Dirk Brenken (dev@brenken.org) +# This is free software, licensed under the Apache License, Version 2.0 # include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI support for Travelmate -LUCI_DEPENDS:=+travelmate +LUCI_DEPENDS:=+travelmate +luci-lib-jsonc LUCI_PKGARCH:=all include ../../luci.mk diff --git a/applications/luci-app-travelmate/luasrc/controller/travelmate.lua b/applications/luci-app-travelmate/luasrc/controller/travelmate.lua index 27c19c4e5..86382f6ae 100644 --- a/applications/luci-app-travelmate/luasrc/controller/travelmate.lua +++ b/applications/luci-app-travelmate/luasrc/controller/travelmate.lua @@ -1,11 +1,28 @@ --- Licensed to the public under the Apache License 2.0. +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 module("luci.controller.travelmate", package.seeall) +local fs = require("nixio.fs") +local util = require("luci.util") +local template = require("luci.template") +local i18n = require("luci.i18n") + function index() if not nixio.fs.access("/etc/config/travelmate") then return end + entry({"admin", "services", "travelmate"}, firstchild(), _("Travelmate"), 40).dependent = false + entry({"admin", "services", "travelmate", "tab_from_cbi"}, cbi("travelmate/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true + entry({"admin", "services", "travelmate", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true + entry({"admin", "services", "travelmate", "advanced"}, firstchild(), _("Advanced"), 100) + entry({"admin", "services", "travelmate", "advanced", "configuration"}, cbi("travelmate/configuration_tab"), _("Edit Travelmate Configuration"), 110).leaf = true + entry({"admin", "services", "travelmate", "advanced", "cfg_wireless"}, cbi("travelmate/cfg_wireless_tab"), _("Edit Wireless Configuration"), 120).leaf = true + entry({"admin", "services", "travelmate", "advanced", "cfg_network"}, cbi("travelmate/cfg_network_tab"), _("Edit Network Configuration"), 130).leaf = true + entry({"admin", "services", "travelmate", "advanced", "cfg_firewall"}, cbi("travelmate/cfg_firewall_tab"), _("Edit Firewall Configuration"), 140).leaf = true +end - entry({"admin", "services", "travelmate"}, cbi("travelmate"), _("Travelmate"), 60) +function logread() + local logfile = util.trim(util.exec("logread -e 'travelmate'")) + template.render("travelmate/logread", {title = i18n.translate("Travelmate Logfile"), content = logfile}) end diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua deleted file mode 100644 index 9050ae968..000000000 --- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua +++ /dev/null @@ -1,53 +0,0 @@ --- Licensed to the public under the Apache License 2.0. - -m = Map("travelmate", translate("Travelmate"), - translate("Configuration of the Travelmate package to enable travel router functionality. ") .. [[</p>]] .. - translate("Brief advice: Create a wwan interface, configure it to use dhcp and " .. - "add it to the wan zone in firewall. Create the wifi interfaces to be used ('client' mode, " .. - "assigned to wwan network, left as disabled). Travelmate will try " .. - "to connect to the known wifi client interfaces in the defined order. ") .. - [[<a href="https://github.com/openwrt/packages/tree/master/net/travelmate/files/README.md" target="_blank">]] - .. translate("Link to detailed advice") - .. [[</a>]] ) - --- General options - -s = m:section(NamedSection, "global", "travelmate", translate("Global options")) - -o = s:option(Flag, "trm_enabled", translate("Enable Travelmate")) -o.rmempty = false -o.default = 0 - -o = s:option(Value, "trm_loop", translate("Loop timeout in seconds for wlan monitoring"), - translate("Default 30, range 5-60")) -o.rmempty = false -o.default = 30 -o.datatype = "range(5,60)" - -o = s:option(Value, "trm_maxretry", translate("Max. number of connection retries to an uplink"), - translate("Default 3, range 0-10. Set to 0 to allow unlimited retries")) -o.rmempty = false -o.default = 3 -o.datatype = "range(0,10)" - --- Extra options - -e = m:section(NamedSection, "global", "travelmate", translate("Extra options")) - -a = e:option(Flag, "trm_debug", translate("Debug logging")) -a.rmempty = true -a.default = a.disabled - -a = e:option(Value, "trm_device", translate("Use only one radio, e.g. 'radio0'"), - translate("Default: empty = use all radios.")) -a.rmempty = true -a.default = "" -a.datatype = "uciname" - -a = e:option(Flag, "trm_iw", translate("Use iw for scanning"), - translate("Disable this if you want to use iwinfo instead of iw")) -a.rmempty = true -a.default = a.enabled - -return m - diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua new file mode 100644 index 000000000..009ed805d --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua @@ -0,0 +1,36 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local util = require("luci.util") +local trminput = "/etc/config/firewall" + +if not nixio.fs.access(trminput) then + m = SimpleForm("error", nil, translate("Input file not found, please check your configuration.")) + return m +end + +m = SimpleForm("input", nil) +m:append(Template("travelmate/config_css")) +m.reset = false + +s = m:section(SimpleSection, nil, + translate("This form allows you to modify the content of the main firewall configuration file (/etc/config/firewall).")) + +f = s:option(TextValue, "data") +f.rows = 20 +f.rmempty = true + +function f.cfgvalue() + return nixio.fs.readfile(trminput) or "" +end + +function f.write(self, section, data) + return nixio.fs.writefile(trminput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n") +end + +function s.handle(self, state, data) + return true +end + +return m diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua new file mode 100644 index 000000000..4d43637d9 --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua @@ -0,0 +1,36 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local util = require("luci.util") +local trminput = "/etc/config/network" + +if not nixio.fs.access(trminput) then + m = SimpleForm("error", nil, translate("Input file not found, please check your configuration.")) + return m +end + +m = SimpleForm("input", nil) +m:append(Template("travelmate/config_css")) +m.reset = false + +s = m:section(SimpleSection, nil, + translate("This form allows you to modify the content of the main network configuration file (/etc/config/network).")) + +f = s:option(TextValue, "data") +f.rows = 20 +f.rmempty = true + +function f.cfgvalue() + return nixio.fs.readfile(trminput) or "" +end + +function f.write(self, section, data) + return nixio.fs.writefile(trminput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n") +end + +function s.handle(self, state, data) + return true +end + +return m diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua new file mode 100644 index 000000000..a025c1379 --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua @@ -0,0 +1,36 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local util = require("luci.util") +local trminput = "/etc/config/wireless" + +if not nixio.fs.access(trminput) then + m = SimpleForm("error", nil, translate("Input file not found, please check your configuration.")) + return m +end + +m = SimpleForm("input", nil) +m:append(Template("travelmate/config_css")) +m.reset = false + +s = m:section(SimpleSection, nil, + translate("This form allows you to modify the content of the main wireless configuration file (/etc/config/wireless).")) + +f = s:option(TextValue, "data") +f.rows = 20 +f.rmempty = true + +function f.cfgvalue() + return nixio.fs.readfile(trminput) or "" +end + +function f.write(self, section, data) + return nixio.fs.writefile(trminput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n") +end + +function s.handle(self, state, data) + return true +end + +return m diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua new file mode 100644 index 000000000..4233da6ac --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua @@ -0,0 +1,38 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local util = require("luci.util") +local trminput = "/etc/config/travelmate" + +if not nixio.fs.access(trminput) then + m = SimpleForm("error", nil, translate("Input file not found, please check your configuration.")) + m.reset = false + m.submit = false + return m +end + +m = SimpleForm("input", nil) +m:append(Template("travelmate/config_css")) +m.reset = false + +s = m:section(SimpleSection, nil, + translate("This form allows you to modify the content of the main travelmate configuration file (/etc/config/travelmate).")) + +f = s:option(TextValue, "data") +f.rows = 20 +f.rmempty = true + +function f.cfgvalue() + return nixio.fs.readfile(trminput) or "" +end + +function f.write(self, section, data) + return nixio.fs.writefile(trminput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n") +end + +function s.handle(self, state, data) + return true +end + +return m diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua new file mode 100644 index 000000000..6b07aabae --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua @@ -0,0 +1,165 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local fs = require("nixio.fs") +local uci = require("uci") +local json = require("luci.jsonc") +local nw = require("luci.model.network").init() +local fw = require("luci.model.firewall").init() +local uplink = uci.get("network", "trm_wwan") or "" +local trminput = uci.get("travelmate", "global", "trm_rtfile") or "/tmp/trm_runtime.json" +local parse = json.parse(fs.readfile(trminput) or "") + +m = Map("travelmate", translate("Travelmate"), + translate("Configuration of the travelmate package to to enable travel router functionality. ") + .. translatef("For further information " + .. "<a href=\"%s\" target=\"_blank\">" + .. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md")) + +-- Main travelmate options + +s = m:section(NamedSection, "global", "travelmate") + +o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate")) +o1.default = o1.disabled +o1.rmempty = false + +o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"), + translate("Keep travelmate in an active state.")) +o2.default = o2.enabled +o2.rmempty = false + +o3 = s:option(Value, "trm_iface", translate("Restrict interface trigger to certain interface(s)"), + translate("Space separated list of interfaces that trigger travelmate processing. ".. + "To disable event driven (re-)starts remove all entries.")) +o3.rmempty = true + +o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"), + translate("Additional trigger delay in seconds before travelmate processing begins.")) +o4.default = 2 +o4.datatype = "range(1,90)" +o4.rmempty = false + +o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging")) +o5.default = o5.disabled +o5.rmempty = false + +-- Interface setup + +if uplink == "" then + dv = s:option(DummyValue, "_dummy", translate("Interface Setup")) + dv.template = "cbi/nullsection" + btn = s:option(Button, "", translate("Create Uplink Interface"), + translate("Automatically create a new wireless wan uplink interface 'trm_wwan', configure it to use dhcp and ") + .. translate("add it to the wan zone of the firewall. This step has only to be done once.")) + btn.inputtitle = translate("Add Interface") + btn.inputstyle = "apply" + btn.disabled = false + function btn.write() + local name = "trm_wwan" + local net = nw:add_network(name, { proto = "dhcp" }) + if net then + nw:save("network") + nw:commit("network") + local zone = fw:get_zone_by_network("wan") + if zone then + zone:add_network(name) + fw:save("firewall") + fw:commit("firewall") + end + luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate")) + end + end +else + dv = s:option(DummyValue, "_dummy", translate("Interface Setup"), + translate("<br /> Network Interface 'trm_wwan' created successfully. ") + .. translatef("Scan & Add new wireless stations via standard " + .. "<a href=\"%s\">" + .. "Wireless Setup</a>", luci.dispatcher.build_url("admin/network/wireless"))) + dv.template = "cbi/nullsection" +end + +-- Runtime information + +ds = s:option(DummyValue, "_dummy", translate("Runtime information")) +ds.template = "cbi/nullsection" + +dv1 = s:option(DummyValue, "status", translate("Online Status")) +dv1.template = "travelmate/runtime" +if parse == nil then + dv1.value = translate("n/a") +elseif parse.data.station_connection == "true" then + dv1.value = translate("connected") +else + dv1.value = translate("not connected") +end + +dv2 = s:option(DummyValue, "travelmate_version", translate("Travelmate version")) +dv2.template = "travelmate/runtime" +if parse ~= nil then + dv2.value = parse.data.travelmate_version or translate("n/a") +else + dv2.value = translate("n/a") +end + +dv3 = s:option(DummyValue, "station_ssid", translate("Station SSID")) +dv3.template = "travelmate/runtime" +if parse ~= nil then + dv3.value = parse.data.station_ssid or translate("n/a") +else + dv3.value = translate("n/a") +end + +dv4 = s:option(DummyValue, "station_interface", translate("Station Interface")) +dv4.template = "travelmate/runtime" +if parse ~= nil then + dv4.value = parse.data.station_interface or translate("n/a") +else + dv4.value = translate("n/a") +end + +dv5 = s:option(DummyValue, "station_radio", translate("Station Radio")) +dv5.template = "travelmate/runtime" +if parse ~= nil then + dv5.value = parse.data.station_radio or translate("n/a") +else + dv5.value = translate("n/a") +end + +dv6 = s:option(DummyValue, "last_rundate", translate("Last rundate")) +dv6.template = "travelmate/runtime" +if parse ~= nil then + dv6.value = parse.data.last_rundate or translate("n/a") +else + dv6.value = translate("n/a") +end + +-- Extra options + +e = m:section(NamedSection, "global", "travelmate", translate("Extra options"), +translate("Options for further tweaking in case the defaults are not suitable for you.")) + +e1 = e:option(Value, "trm_radio", translate("Radio selection"), + translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'")) +e1.rmempty = true + +e2 = e:option(Value, "trm_maxretry", translate("Connection Limit"), + translate("How many times should travelmate try to connect to an Uplink")) +e2.default = 3 +e2.datatype = "range(1,10)" +e2.rmempty = false + +e3 = e:option(Value, "trm_maxwait", translate("Interface Timeout"), + translate("How long should travelmate wait for a successful wlan interface reload")) +e3.default = 30 +e3.datatype = "range(5,60)" +e3.rmempty = false + +e4 = e:option(Value, "trm_timeout", translate("Overall Timeout"), + translate("Timeout in seconds between retries in 'automatic' mode")) +e4.default = 60 +e4.datatype = "range(5,300)" +e4.rmempty = false + +return m diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm new file mode 100644 index 000000000..53493a18f --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm @@ -0,0 +1,10 @@ +<style type="text/css"> + textarea + { + border: 1px solid #cccccc; + padding: 5px; + font-size: 12px; + font-family: monospace; + resize: none; + } +</style> diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm new file mode 100644 index 000000000..7f6ff7776 --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm @@ -0,0 +1,15 @@ +<%# +Copyright 2017 Dirk Brenken (dev@brenken.org) +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-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> + +<%+footer%> diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm new file mode 100644 index 000000000..ee3a4553a --- /dev/null +++ b/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm @@ -0,0 +1,10 @@ +<%# +Copyright 2017 Dirk Brenken (dev@brenken.org) +This is free software, licensed under the Apache License, Version 2.0 +-%> + +<%+cbi/valueheader%> + +<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="border: none; box-shadow: none; background-color: #ffffff; color: #0069d6;" value="<%=self:cfgvalue(section)%>" disabled="disabled" /> + +<%+cbi/valuefooter%> diff --git a/applications/luci-app-travelmate/po/ja/travelmate.po b/applications/luci-app-travelmate/po/ja/travelmate.po new file mode 100644 index 000000000..edb041e2b --- /dev/null +++ b/applications/luci-app-travelmate/po/ja/travelmate.po @@ -0,0 +1,298 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.1\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ja\n" + +msgid "." +msgstr "。" + +msgid "" +"Additional trigger delay in seconds before travelmate processing begins." +msgstr "Travelmate の処理が開始されるまでの、追加の遅延時間(秒)です。" + +msgid "Advanced" +msgstr "詳細設定" + +msgid "" +"Automatically create a new wireless wan interface, configure it to use dhcp " +"and add it to the wan zone of the firewall. This step has only to be done " +"once." +msgstr "" +"新しい無線 WAN インターフェースを自動的に作成し、DHCP を使用するよう構成して" +"ファイアウォールの wan ゾーンに追加します。このステップは、一度だけ実行する必" +"要があります。" + +msgid "" +"Configuration of the travelmate package to to enable travel router " +"functionality." +msgstr "" +"トラベル ルーター機能を有効化するための、 Travelmate パッケージの設定です。" + +msgid "Connection Limit" +msgstr "接続制限" + +msgid "Direct Link: <a href=\"%s\">Wireless Setup</a>" +msgstr "ダイレクト リンク: <a href=\"%s\">無線設定</a>" + +msgid "Edit Firewall Configuration" +msgstr "ファイアウォール設定の編集" + +msgid "Edit Network Configuration" +msgstr "ネットワーク設定の編集" + +msgid "Edit Travelmate Configuration" +msgstr "Travelmate 設定の編集" + +msgid "Edit Wireless Configuration" +msgstr "無線設定の編集" + +msgid "Enable 'automatic' mode" +msgstr "'automatic' モードの有効化" + +msgid "Enable travelmate" +msgstr "Travelmate の有効化" + +msgid "Enable verbose debug logging" +msgstr "詳細なデバッグ ログの有効化" + +msgid "Extra options" +msgstr "拡張オプション" + +msgid "For further information" +msgstr "詳細情報は" + +msgid "How long should travelmate wait for a successful wlan interface reload" +msgstr "" +"無線LAN インターフェースのリロードが成功するまでの、Travelmate の待機時間で" +"す。" + +msgid "How many times should travelmate try to connect to an Uplink" +msgstr "Travelmate がアップリンクに対して接続を試行する回数です。" + +msgid "Input file not found, please check your configuration." +msgstr "入力ファイルが見つかりません。設定を確認してください。" + +msgid "Interface Setup" +msgstr "インターフェース設定" + +msgid "Interface Timeout" +msgstr "インターフェース タイムアウト" + +msgid "Keep travelmate in an active state." +msgstr "Travelmate をアクティブ状態で維持します。" + +msgid "Last rundate" +msgstr "最終実行日時" + +msgid "Name of the new wireless wan interface" +msgstr "新しい無線 WAN のインターフェース名" + +msgid "" +"Network Interface '%s' created successfully. Feel free to scan & add new " +"stations via standard wireless setup." +msgstr "" +"ネットワーク インターフェース '%s' の作成に成功しました。通常の無線設定にて、" +"スキャン及び新規ステーションの追加が可能です。" + +msgid "Online Status" +msgstr "オンライン ステータス" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "デフォルトの設定が適切でない場合、さらに設定するためのオプションです。" + +msgid "Overall Timeout" +msgstr "全体タイムアウト" + +msgid "Overview" +msgstr "概要" + +msgid "Radio selection" +msgstr "無線の選択" + +msgid "Restrict interface trigger to certain interface(s)" +msgstr "インターフェース トリガーを特定のインターフェースに限定する" + +msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'" +msgstr "Travelmate が特定の無線に接続するようにします。例: 'radio0'" + +msgid "Runtime information" +msgstr "実行情報" + +msgid "Setup WWAN Interface" +msgstr "WWAN インターフェース設定" + +msgid "" +"Space separated list of interfaces that trigger travelmate processing. To " +"disable event driven (re-)starts remove all entries." +msgstr "" +"Travelmate の処理のトリガーとなる、スペースで区切られたインターフェースのリス" +"トです。処理を発生させるイベントを無効にするには、全てのエントリーを削除して" +"空欄にします。" + +msgid "Station Interface" +msgstr "ステーション インターフェース" + +msgid "Station Radio" +msgstr "ステーション 無線" + +msgid "Station SSID" +msgstr "ステーション SSID" + +msgid "" +"The allowed characters are: <code>A-Z</code>, <code>a-z</code>, <code>0-9</" +"code> and <code>_</code> (3-15 characters)." +msgstr "" +"使用可能文字: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> and " +"<code>_</code>(3 - 15文字)" + +msgid "The given network interface name already exist" +msgstr "入力されたネットワーク インターフェース名は、既に存在しています。" + +msgid "" +"This form allows you to modify the content of the main firewall " +"configuration file (/etc/config/firewall)." +msgstr "" +"このフォームでは、ファイアウォール 設定ファイル (/etc/config/firewall) の内容" +"を変更することができます。" + +msgid "" +"This form allows you to modify the content of the main network configuration " +"file (/etc/config/network)." +msgstr "" +"このフォームでは、ネットワーク 設定ファイル (/etc/config/network) の内容を変" +"更することができます。" + +msgid "" +"This form allows you to modify the content of the main travelmate " +"configuration file (/etc/config/travelmate)." +msgstr "" +"このフォームでは、 Travelmate 設定ファイル (/etc/config/travelmate) の内容を" +"変更することができます。" + +msgid "" +"This form allows you to modify the content of the main wireless " +"configuration file (/etc/config/wireless)." +msgstr "" +"このフォームでは、無線 設定ファイル (/etc/config/wireless) の内容を変更するこ" +"とができます。" + +msgid "" +"This form shows the syslog output, pre-filtered for travelmate related " +"messages only." +msgstr "" +"このフォームには、システムログ内の Travelmate に関するメッセージのみが表示さ" +"れます。" + +msgid "Timeout in seconds between retries in 'automatic' mode" +msgstr "'automatic' モード時に接続を再試行する間隔(秒)です。" + +msgid "Travelmate" +msgstr "Travelmate" + +msgid "Travelmate Logfile" +msgstr "Travelmate ログファイル" + +msgid "Travelmate version" +msgstr "Travelmate バージョン" + +msgid "Trigger delay" +msgstr "トリガー遅延" + +msgid "View Logfile" +msgstr "ログファイルの確認" + +msgid "connected" +msgstr "接続済み" + +msgid "n/a" +msgstr "利用不可" + +msgid "not connected" +msgstr "未接続" + +msgid "see online documentation" +msgstr "オンライン ドキュメントを確認してください" + +#~ msgid "" +#~ "Brief advice: Create a wwan interface, configure it to use dhcp and add " +#~ "it to the wan zone in firewall. Create the wifi interfaces to be used " +#~ "('client' mode, assigned to wwan network, left as disabled). Travelmate " +#~ "will try to connect to the known wifi client interfaces in the defined " +#~ "order." +#~ msgstr "" +#~ "簡単な解説: 予めWWANインターフェースを作成し、DHCPを使用するよう構成して" +#~ "ファイアウォールのWANゾーンに追加します。また、使用される無線インター" +#~ "フェースを作成しておきます(\"クライアント\" モード、WWANに割り当て、無効" +#~ "状態)。Travelmateは、登録されている順序で既知の無線クライアント インター" +#~ "フェースへの接続を試行します。" + +#~ msgid "" +#~ "Configuration of the Travelmate package to enable travel router " +#~ "functionality." +#~ msgstr "トラベル ルータ機能を有効にする、Travelmate パッケージの設定です。" + +#~ msgid "Debug logging" +#~ msgstr "デバッグ ログ" + +#~ msgid "Default 20, range 10-60" +#~ msgstr "既定値 20、範囲 10 - 60" + +#~ msgid "Default 3, range 1-10" +#~ msgstr "既定値 3、範囲 1 - 10" + +#~ msgid "Disable this if you want to use iwinfo instead of iw" +#~ msgstr "iw の代わりに iwinfo を使用したい場合、この設定を無効にします。" + +#~ msgid "Enable Travelmate" +#~ msgstr "Travelmateの有効化" + +#~ msgid "Global options" +#~ msgstr "全般オプション" + +#~ msgid "Link to detailed advice" +#~ msgstr "詳細な解説へのリンク" + +#~ msgid "Max. number of connection retries to an uplink" +#~ msgstr "確立までの接続試行回数" + +#~ msgid "Max. timeout in seconds for wlan interface reload" +#~ msgstr "無線LANインターフェース リロード時の最大待機時間(秒)" + +#~ msgid "Restrict reload trigger to certain interface(s)" +#~ msgstr "リロード トリガを特定のインターフェースに限定する" + +#~ msgid "" +#~ "Space separated list of wwan interfaces that trigger reload action. To " +#~ "disable reload trigger set it to 'false'. Default: empty" +#~ msgstr "" +#~ "リロード動作のトリガとなる、スペースで区切られたWWAN インターフェースのリ" +#~ "ストです。リロードのトリガを無効にするには、'false' を設定します。既定値:" +#~ "(空)" + +#~ msgid "Use iw for scanning" +#~ msgstr "スキャンに iw を使用する" + +#~ msgid "Default 3, range 0-10. Set to 0 to allow unlimited retries" +#~ msgstr "既定値 3、範囲 0 - 10。再試行回数を制限しない場合、0 に設定します。" + +#~ msgid "Default 30, range 5-60" +#~ msgstr "既定値 30、範囲 5 - 60" + +#~ msgid "Default: empty = use all radios." +#~ msgstr "デフォルト:(空)= 全ての無線を使用" + +#~ msgid "Loop timeout in seconds for wlan monitoring" +#~ msgstr "無線LAN モニターのループ タイムアウト(秒)" + +#~ msgid "Use only one radio, e.g. 'radio0'" +#~ msgstr "単一の無線のみ使用する 例: 'radio0'" diff --git a/applications/luci-app-travelmate/po/pt-br/travelmate.po b/applications/luci-app-travelmate/po/pt-br/travelmate.po new file mode 100644 index 000000000..906c698dd --- /dev/null +++ b/applications/luci-app-travelmate/po/pt-br/travelmate.po @@ -0,0 +1,262 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "." +msgstr "" + +msgid "" +"Additional trigger delay in seconds before travelmate processing begins." +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "" +"Automatically create a new wireless wan interface, configure it to use dhcp " +"and add it to the wan zone of the firewall. This step has only to be done " +"once." +msgstr "" + +msgid "" +"Configuration of the travelmate package to to enable travel router " +"functionality." +msgstr "" + +msgid "Connection Limit" +msgstr "" + +msgid "Direct Link: <a href=\"%s\">Wireless Setup</a>" +msgstr "" + +msgid "Edit Firewall Configuration" +msgstr "" + +msgid "Edit Network Configuration" +msgstr "" + +msgid "Edit Travelmate Configuration" +msgstr "" + +msgid "Edit Wireless Configuration" +msgstr "" + +msgid "Enable 'automatic' mode" +msgstr "" + +msgid "Enable travelmate" +msgstr "" + +msgid "Enable verbose debug logging" +msgstr "" + +msgid "Extra options" +msgstr "Opções adicionais" + +msgid "For further information" +msgstr "" + +msgid "How long should travelmate wait for a successful wlan interface reload" +msgstr "" + +msgid "How many times should travelmate try to connect to an Uplink" +msgstr "" + +msgid "Input file not found, please check your configuration." +msgstr "" + +msgid "Interface Setup" +msgstr "" + +msgid "Interface Timeout" +msgstr "" + +msgid "Keep travelmate in an active state." +msgstr "" + +msgid "Last rundate" +msgstr "" + +msgid "Name of the new wireless wan interface" +msgstr "" + +msgid "" +"Network Interface '%s' created successfully. Feel free to scan & add new " +"stations via standard wireless setup." +msgstr "" + +msgid "Online Status" +msgstr "" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "" + +msgid "Overall Timeout" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Radio selection" +msgstr "" + +msgid "Restrict interface trigger to certain interface(s)" +msgstr "" + +msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'" +msgstr "" + +msgid "Runtime information" +msgstr "" + +msgid "Setup WWAN Interface" +msgstr "" + +msgid "" +"Space separated list of interfaces that trigger travelmate processing. To " +"disable event driven (re-)starts remove all entries." +msgstr "" + +msgid "Station Interface" +msgstr "" + +msgid "Station Radio" +msgstr "" + +msgid "Station SSID" +msgstr "" + +msgid "" +"The allowed characters are: <code>A-Z</code>, <code>a-z</code>, <code>0-9</" +"code> and <code>_</code> (3-15 characters)." +msgstr "" + +msgid "The given network interface name already exist" +msgstr "" + +msgid "" +"This form allows you to modify the content of the main firewall " +"configuration file (/etc/config/firewall)." +msgstr "" + +msgid "" +"This form allows you to modify the content of the main network configuration " +"file (/etc/config/network)." +msgstr "" + +msgid "" +"This form allows you to modify the content of the main travelmate " +"configuration file (/etc/config/travelmate)." +msgstr "" + +msgid "" +"This form allows you to modify the content of the main wireless " +"configuration file (/etc/config/wireless)." +msgstr "" + +msgid "" +"This form shows the syslog output, pre-filtered for travelmate related " +"messages only." +msgstr "" + +msgid "Timeout in seconds between retries in 'automatic' mode" +msgstr "" + +msgid "Travelmate" +msgstr "Travelmate" + +msgid "Travelmate Logfile" +msgstr "" + +msgid "Travelmate version" +msgstr "" + +msgid "Trigger delay" +msgstr "" + +msgid "View Logfile" +msgstr "" + +msgid "connected" +msgstr "" + +msgid "n/a" +msgstr "" + +msgid "not connected" +msgstr "" + +msgid "see online documentation" +msgstr "" + +#~ msgid "" +#~ "Brief advice: Create a wwan interface, configure it to use dhcp and add " +#~ "it to the wan zone in firewall. Create the wifi interfaces to be used " +#~ "('client' mode, assigned to wwan network, left as disabled). Travelmate " +#~ "will try to connect to the known wifi client interfaces in the defined " +#~ "order." +#~ msgstr "" +#~ "Breve conselho: Crie uma interface wwan, configure-a para usar DHCP e " +#~ "adicione-a à zona wan no firewall. Crie as interfaces wifi a serem usadas " +#~ "(modo 'cliente', atribuído à rede wwan, deixado como desativado). O " +#~ "Travelmate tentará se conectar às interfaces de cliente wifi conhecidas " +#~ "na ordem definida." + +#~ msgid "" +#~ "Configuration of the Travelmate package to enable travel router " +#~ "functionality." +#~ msgstr "" +#~ "Configuração do pacote Travelmate para permitir a funcionalidade de " +#~ "roteador de viagem." + +#~ msgid "Debug logging" +#~ msgstr "Registros(log) para depuração" + +#~ msgid "Default 20, range 10-60" +#~ msgstr "Padrão 20, faixa 10-60" + +#~ msgid "Default 3, range 1-10" +#~ msgstr "Padrão 3, faixa 1-10" + +#~ msgid "Disable this if you want to use iwinfo instead of iw" +#~ msgstr "Desabilite isto se você quer usar o iwinfo ao invés do iw" + +#~ msgid "Enable Travelmate" +#~ msgstr "Habilitar o Travelmate" + +#~ msgid "Global options" +#~ msgstr "Opções Globais" + +#~ msgid "Link to detailed advice" +#~ msgstr "Endereço para conselhos detalhados" + +#~ msgid "Max. number of connection retries to an uplink" +#~ msgstr "Máximo número de tentativas de conexão para um enlace" + +#~ msgid "Max. timeout in seconds for wlan interface reload" +#~ msgstr "Tempo limite máximo em segundos para recarregar a interface wlan" + +#~ msgid "Restrict reload trigger to certain interface(s)" +#~ msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)" + +#~ msgid "" +#~ "Space separated list of wwan interfaces that trigger reload action. To " +#~ "disable reload trigger set it to 'false'. Default: empty" +#~ msgstr "" +#~ "Lista separada por espaços de interfaces wwan que acionam a ação de " +#~ "recarga. Para desabilitar o gatilho de recarga, defina-o como 'false'. " +#~ "Padrão: vazio" + +#~ msgid "Use iw for scanning" +#~ msgstr "Use o iw para escaneamento" diff --git a/applications/luci-app-travelmate/po/templates/travelmate.pot b/applications/luci-app-travelmate/po/templates/travelmate.pot index 533b3e263..4542ec85e 100644 --- a/applications/luci-app-travelmate/po/templates/travelmate.pot +++ b/applications/luci-app-travelmate/po/templates/travelmate.pot @@ -1,56 +1,190 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" +msgid "." +msgstr "" + msgid "" -"Brief advice: Create a wwan interface, configure it to use dhcp and add it " -"to the wan zone in firewall. Create the wifi interfaces to be used ('client' " -"mode, assigned to wwan network, left as disabled). Travelmate will try to " -"connect to the known wifi client interfaces in the defined order." +"Additional trigger delay in seconds before travelmate processing begins." +msgstr "" + +msgid "Advanced" msgstr "" msgid "" -"Configuration of the Travelmate package to enable travel router " +"Automatically create a new wireless wan interface, configure it to use dhcp " +"and add it to the wan zone of the firewall. This step has only to be done " +"once." +msgstr "" + +msgid "" +"Configuration of the travelmate package to to enable travel router " "functionality." msgstr "" -msgid "Debug logging" +msgid "Connection Limit" +msgstr "" + +msgid "Direct Link: <a href=\"%s\">Wireless Setup</a>" +msgstr "" + +msgid "Edit Firewall Configuration" msgstr "" -msgid "Default 3, range 0-10. Set to 0 to allow unlimited retries" +msgid "Edit Network Configuration" msgstr "" -msgid "Default 30, range 5-60" +msgid "Edit Travelmate Configuration" msgstr "" -msgid "Default: empty = use all radios." +msgid "Edit Wireless Configuration" msgstr "" -msgid "Disable this if you want to use iwinfo instead of iw" +msgid "Enable 'automatic' mode" msgstr "" -msgid "Enable Travelmate" +msgid "Enable travelmate" +msgstr "" + +msgid "Enable verbose debug logging" msgstr "" msgid "Extra options" msgstr "" -msgid "Global options" +msgid "For further information" +msgstr "" + +msgid "How long should travelmate wait for a successful wlan interface reload" +msgstr "" + +msgid "How many times should travelmate try to connect to an Uplink" +msgstr "" + +msgid "Input file not found, please check your configuration." +msgstr "" + +msgid "Interface Setup" +msgstr "" + +msgid "Interface Timeout" +msgstr "" + +msgid "Keep travelmate in an active state." +msgstr "" + +msgid "Last rundate" +msgstr "" + +msgid "Name of the new wireless wan interface" +msgstr "" + +msgid "" +"Network Interface '%s' created successfully. Feel free to scan & add new " +"stations via standard wireless setup." +msgstr "" + +msgid "Online Status" +msgstr "" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "" + +msgid "Overall Timeout" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Radio selection" +msgstr "" + +msgid "Restrict interface trigger to certain interface(s)" +msgstr "" + +msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'" +msgstr "" + +msgid "Runtime information" +msgstr "" + +msgid "Setup WWAN Interface" +msgstr "" + +msgid "" +"Space separated list of interfaces that trigger travelmate processing. To " +"disable event driven (re-)starts remove all entries." +msgstr "" + +msgid "Station Interface" +msgstr "" + +msgid "Station Radio" +msgstr "" + +msgid "Station SSID" +msgstr "" + +msgid "" +"The allowed characters are: <code>A-Z</code>, <code>a-z</code>, <code>0-9</" +"code> and <code>_</code> (3-15 characters)." +msgstr "" + +msgid "The given network interface name already exist" +msgstr "" + +msgid "" +"This form allows you to modify the content of the main firewall " +"configuration file (/etc/config/firewall)." msgstr "" -msgid "Link to detailed advice" +msgid "" +"This form allows you to modify the content of the main network configuration " +"file (/etc/config/network)." msgstr "" -msgid "Loop timeout in seconds for wlan monitoring" +msgid "" +"This form allows you to modify the content of the main travelmate " +"configuration file (/etc/config/travelmate)." msgstr "" -msgid "Max. number of connection retries to an uplink" +msgid "" +"This form allows you to modify the content of the main wireless " +"configuration file (/etc/config/wireless)." +msgstr "" + +msgid "" +"This form shows the syslog output, pre-filtered for travelmate related " +"messages only." +msgstr "" + +msgid "Timeout in seconds between retries in 'automatic' mode" msgstr "" msgid "Travelmate" msgstr "" -msgid "Use iw for scanning" +msgid "Travelmate Logfile" +msgstr "" + +msgid "Travelmate version" +msgstr "" + +msgid "Trigger delay" +msgstr "" + +msgid "View Logfile" +msgstr "" + +msgid "connected" +msgstr "" + +msgid "n/a" +msgstr "" + +msgid "not connected" msgstr "" -msgid "Use only one radio, e.g. 'radio0'" +msgid "see online documentation" msgstr "" diff --git a/applications/luci-app-uhttpd/Makefile b/applications/luci-app-uhttpd/Makefile index 9a2cf462e..301477066 100644 --- a/applications/luci-app-uhttpd/Makefile +++ b/applications/luci-app-uhttpd/Makefile @@ -11,16 +11,9 @@ LUCI_TITLE:=uHTTPd Webserver Configuration LUCI_DEPENDS:=+uhttpd LUCI_PKGARCH:=all -PKG_NAME:=luci-app-uhttpd -PKG_VERSION:=1.0.0 -PKG_RELEASE:=1 PKG_LICENSE:=Apache-2.0 PKG_MAINTAINER:=Daniel Dickinson <openwrt@daniel.thecshore.com> -PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - LUA_TARGET:=source include ../../luci.mk diff --git a/applications/luci-app-uhttpd/po/ja/uhttpd.po b/applications/luci-app-uhttpd/po/ja/uhttpd.po new file mode 100644 index 000000000..572903404 --- /dev/null +++ b/applications/luci-app-uhttpd/po/ja/uhttpd.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2017-01-01 18:11+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Language-Team: \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "" +"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)" +msgstr "" +"(/old/path=/new/path) または (just /old/path which becomes /cgi-prefix/old/" +"path)" + +msgid "404 Error" +msgstr "404 エラー" + +msgid "A lightweight single-threaded HTTP(S) server" +msgstr "軽量なシングル スレッド HTTP(S) サーバーです。" + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Aliases" +msgstr "エイリアス" + +msgid "Base directory for files to be served" +msgstr "サーバーがホストするファイルのベースディレクトリです。" + +msgid "Bind to specific interface:port (by specifying interface address" +msgstr "" +"インターフェースのアドレスを使用して、特定のインターフェースとポートに関連付" +"けます。" + +msgid "CGI filetype handler" +msgstr "CGIファイル形式 ハンドラー" + +msgid "CGI is disabled if not present." +msgstr "指定しない場合、CGIは無効になります。" + +msgid "Config file (e.g. for credentials for Basic Auth)" +msgstr "設定ファイル(例: 基本認証用の資格情報)" + +msgid "Connection reuse" +msgstr "接続の再使用" + +msgid "Country" +msgstr "国" + +msgid "Disable JSON-RPC authorization via ubus session API" +msgstr "ubus セッションAPI経由のJSON-RPC認証を無効にする" + +msgid "Do not follow symlinks outside document root" +msgstr "ドキュメント ルート外へのシンボリックリンクを追随しない" + +msgid "Do not generate directory listings." +msgstr "ディレクトリの待ち受けを生成しない" + +msgid "Document root" +msgstr "ドキュメント ルート" + +msgid "E.g specify with index.html and index.php when using PHP" +msgstr "index.html や、PHPを使用しているときは index.php を設定します。" + +msgid "Embedded Lua interpreter is disabled if not present." +msgstr "指定しない場合、組込みLua インタープリタは無効になります。" + +msgid "Enable JSON-RPC Cross-Origin Resource Support" +msgstr "" + +msgid "For settings primarily geared to serving more than the web UI" +msgstr "主に、Web UI以上のものを提供することを対象とした設定です。" + +msgid "Full Web Server Settings" +msgstr "完全なWebサーバー設定" + +msgid "Full real path to handler for Lua scripts" +msgstr "Lua スクリプトへの絶対パス" + +msgid "General Settings" +msgstr "一般設定" + +msgid "HTTP listeners (address:port)" +msgstr "HTTP 待ち受け(アドレス:ポート)" + +msgid "HTTPS Certificate (DER Encoded)" +msgstr "HTTPS 証明書(DER エンコード)" + +msgid "HTTPS Private Key (DER Encoded)" +msgstr "HTTPS 秘密鍵(DER エンコード)" + +msgid "HTTPS listener (address:port)" +msgstr "HTTPS 待ち受け(アドレス:ポート)" + +msgid "Ignore private IPs on public interface" +msgstr "公開側インターフェースでのプライベートIPを無視する" + +msgid "Index page(s)" +msgstr "インデックス ページ" + +msgid "" +"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/" +"usr/bin/php-cgi')" +msgstr "" +"ファイル拡張子に関連付けるインタープリタです。('suffix=handler'、例: '.php=/" +"usr/bin/php-cgi')" + +msgid "Length of key in bits" +msgstr "鍵のビット数" + +msgid "Location" +msgstr "場所" + +msgid "Maximum number of connections" +msgstr "最大接続数" + +msgid "Maximum number of script requests" +msgstr "スクリプトの最大リクエスト数" + +msgid "Maximum wait time for Lua, CGI, or ubus execution" +msgstr "LuaやCGI、ubus実行の最大待機時間" + +msgid "Maximum wait time for network activity" +msgstr "ネットワークアクティビティの最大待機時間" + +msgid "Override path for ubus socket" +msgstr "ubus ソケットのパスを上書きする" + +msgid "Path prefix for CGI scripts" +msgstr "CGI スクリプトのパスプレフィクス" + +msgid "" +"Prevent access from private (RFC1918) IPs on an interface if it has an " +"public IP address" +msgstr "" +"グローバル IPアドレスを持つインターフェースでは、プライベート IP (RFC1918) か" +"らのアクセスをブロックします。" + +msgid "Realm for Basic Auth" +msgstr "基本認証の領域名" + +msgid "Redirect all HTTP to HTTPS" +msgstr "全てのHTTPをHTTPSにリダイレクトする" + +msgid "Remove configuration for certificate and key" +msgstr "証明書と鍵の設定を削除する" + +msgid "Remove old certificate and key" +msgstr "古い証明書と鍵を削除する" + +msgid "Server Hostname" +msgstr "サーバー ホスト名" + +msgid "" +"Settings which are either rarely needed or which affect serving the WebUI" +msgstr "まれに必要とされる設定、またはWeb UIに影響する設定です。" + +msgid "State" +msgstr "ステータス" + +msgid "TCP Keepalive" +msgstr "TCP キープアライブ" + +msgid "This permanently deletes the cert, key, and configuration to use same." +msgstr "" + +msgid "Valid for # of Days" +msgstr "有効日数" + +msgid "" +"Virtual URL or CGI script to display on status '404 Not Found'. Must begin " +"with '/'" +msgstr "" + +msgid "Virtual path prefix for Lua scripts" +msgstr "Lua スクリプトへの仮想パスプレフィクス" + +msgid "Virtual path prefix for ubus via JSON-RPC integration" +msgstr "" + +msgid "Will not use HTTP authentication if not present" +msgstr "指定しない場合、HTTP 認証は使用されません。" + +msgid "a.k.a CommonName" +msgstr "共通名" + +msgid "uHTTPd" +msgstr "uHTTPd" + +msgid "uHTTPd Self-signed Certificate Parameters" +msgstr "uHTTPd 自己署名証明書 パラメーター" + +msgid "" +"uHTTPd will generate a new self-signed certificate using the configuration " +"shown below." +msgstr "uHTTPd は、以下に表示した設定で新しい自己署名証明書を生成します。" + +msgid "ubus integration is disabled if not present" +msgstr "" + +#~ msgid "" +#~ "Virtual URL or CGI script to display on status '404 Not Found'. Must " +#~ "begin with '/'" +#~ msgstr "" +#~ "'404 Not Found' ステータスを表示する、仮想URLまたはCGIスクリプトです。'/' " +#~ "から始まる必要があります。" diff --git a/applications/luci-app-uhttpd/po/pt-br/uhttpd.po b/applications/luci-app-uhttpd/po/pt-br/uhttpd.po new file mode 100644 index 000000000..af68b9e14 --- /dev/null +++ b/applications/luci-app-uhttpd/po/pt-br/uhttpd.po @@ -0,0 +1,208 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "" +"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)" +msgstr "" +"(/old/path=/new/path) ou (just /old/path que se torna /cgi-prefix/old/path)" + +msgid "404 Error" +msgstr "Erro 404" + +msgid "A lightweight single-threaded HTTP(S) server" +msgstr "Um servidor HTTP(S) leve de únida thread." + +msgid "Advanced Settings" +msgstr "Opções Avançadas" + +msgid "Aliases" +msgstr "Pseudônimos (Aliases)" + +msgid "Base directory for files to be served" +msgstr "Diretório Base para publicar arquivos" + +msgid "Bind to specific interface:port (by specifying interface address" +msgstr "" +"Escute em uma interface:porta específica (especificando o endereço da " +"interface" + +msgid "CGI filetype handler" +msgstr "Interpretador de tipo de arquivo CGI" + +msgid "CGI is disabled if not present." +msgstr "O CGI estará desabilitado se não presente." + +msgid "Config file (e.g. for credentials for Basic Auth)" +msgstr "Arquivo de configuração (ex: credenciais para autenticação básica)" + +msgid "Connection reuse" +msgstr "Reutilizar conexão" + +msgid "Country" +msgstr "País" + +msgid "Disable JSON-RPC authorization via ubus session API" +msgstr "Desabilita a autorização JSON-RPC através da API de sessão ubus" + +msgid "Do not follow symlinks outside document root" +msgstr "Não siga ligações simbólicas (symlinks) para fora do documento raiz" + +msgid "Do not generate directory listings." +msgstr "Não gere listagens de diretórios" + +msgid "Document root" +msgstr "Documento Raiz" + +msgid "E.g specify with index.html and index.php when using PHP" +msgstr "Ex: use index.html e index.php quando usar PHP" + +msgid "Embedded Lua interpreter is disabled if not present." +msgstr "O interpretador Lua embutido será desabilitado se não presente." + +msgid "Enable JSON-RPC Cross-Origin Resource Support" +msgstr "Habilite o suporte para recursos JSON-RPC de origem cruzada" + +msgid "For settings primarily geared to serving more than the web UI" +msgstr "Para ajustes envolvidos com mais do que prover a interface web" + +msgid "Full Web Server Settings" +msgstr "Configurações Completas do Servidor Web" + +msgid "Full real path to handler for Lua scripts" +msgstr "Caminho completo para o interpretador de scripts Lua" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "HTTP listeners (address:port)" +msgstr "Escutas do HTTP (endereço:porta)" + +msgid "HTTPS Certificate (DER Encoded)" +msgstr "Certificado do HTTPS (codificado em formato PEM)" + +msgid "HTTPS Private Key (DER Encoded)" +msgstr "Chave Privada do HTTPS (codificado como DER)" + +msgid "HTTPS listener (address:port)" +msgstr "Escuta do HTTPS (endereço:porta)" + +msgid "Ignore private IPs on public interface" +msgstr "Ignore endereços IP privados na interface pública" + +msgid "Index page(s)" +msgstr "Página(s) Índice(s)" + +msgid "" +"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/" +"usr/bin/php-cgi')" +msgstr "" +"Interpretador para associar com extensões de arquivos " +"('extensão=interpretador', ex: '.php=/usr/bin/php-cgi')" + +msgid "Length of key in bits" +msgstr "Comprimento da chave em bits" + +msgid "Location" +msgstr "Localização" + +msgid "Maximum number of connections" +msgstr "Número máximo de requisições para script" + +msgid "Maximum number of script requests" +msgstr "Número máximo de requisições para script" + +msgid "Maximum wait time for Lua, CGI, or ubus execution" +msgstr "Tempo máximo de espera para execuções de Lua, CGI ou ubus" + +msgid "Maximum wait time for network activity" +msgstr "Tempo máximo de espera para atividade na rede" + +msgid "Override path for ubus socket" +msgstr "Sobrescrever o caminho do socket ubus" + +msgid "Path prefix for CGI scripts" +msgstr "Prefixo do caminho para scripts CGI" + +msgid "" +"Prevent access from private (RFC1918) IPs on an interface if it has an " +"public IP address" +msgstr "" +"Evite acesso de endereços privados (RFC1918) na interface que tem um " +"endereço IP público" + +msgid "Realm for Basic Auth" +msgstr "Reino para Autenticação Simples" + +msgid "Redirect all HTTP to HTTPS" +msgstr "Redirecionar todo tráfego HTTP para HTTPS" + +msgid "Remove configuration for certificate and key" +msgstr "Remove a configuração para o certificado e chave" + +msgid "Remove old certificate and key" +msgstr "Remove os certificados e chaves antigas" + +msgid "Server Hostname" +msgstr "Nome do Servidor" + +msgid "" +"Settings which are either rarely needed or which affect serving the WebUI" +msgstr "Ajustes que são raramente usadas ou que afetam a interface web" + +msgid "State" +msgstr "Estado" + +msgid "TCP Keepalive" +msgstr "Manter conexões TCP abertas (Keepalive)" + +msgid "This permanently deletes the cert, key, and configuration to use same." +msgstr "Isto apaga permanentemente o certificado, a chave e a configuração." + +msgid "Valid for # of Days" +msgstr "Valido por # dias" + +msgid "" +"Virtual URL or CGI script to display on status '404 Not Found'. Must begin " +"with '/'" +msgstr "" +"URL virtual ou script CGI para mostrar quando ocorrer erro '404 Não " +"Encontrado'. Deve começar com '/'" + +msgid "Virtual path prefix for Lua scripts" +msgstr "Prefixo do caminho virtual para scripts Lua" + +msgid "Virtual path prefix for ubus via JSON-RPC integration" +msgstr "Prefixo do caminho virtual para o ubus através da integração JSON-RPC" + +msgid "Will not use HTTP authentication if not present" +msgstr "Não usar autenticação HTTP se não presente" + +msgid "a.k.a CommonName" +msgstr "também conhecido como Nome Comum" + +msgid "uHTTPd" +msgstr "uHTTPd" + +msgid "uHTTPd Self-signed Certificate Parameters" +msgstr "Parâmetros do Certificado Auto-assinado do uHTTPd" + +msgid "" +"uHTTPd will generate a new self-signed certificate using the configuration " +"shown below." +msgstr "" +"o uHTTPd gerará um certificado auto-assinado usando a configuração mostrada " +"abaixo." + +msgid "ubus integration is disabled if not present" +msgstr "A integração com o ubus será desativada se não presente" diff --git a/applications/luci-app-uhttpd/po/templates/uhttpd.pot b/applications/luci-app-uhttpd/po/templates/uhttpd.pot new file mode 100644 index 000000000..5503450e0 --- /dev/null +++ b/applications/luci-app-uhttpd/po/templates/uhttpd.pot @@ -0,0 +1,186 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)" +msgstr "" + +msgid "404 Error" +msgstr "" + +msgid "A lightweight single-threaded HTTP(S) server" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Aliases" +msgstr "" + +msgid "Base directory for files to be served" +msgstr "" + +msgid "Bind to specific interface:port (by specifying interface address" +msgstr "" + +msgid "CGI filetype handler" +msgstr "" + +msgid "CGI is disabled if not present." +msgstr "" + +msgid "Config file (e.g. for credentials for Basic Auth)" +msgstr "" + +msgid "Connection reuse" +msgstr "" + +msgid "Country" +msgstr "" + +msgid "Disable JSON-RPC authorization via ubus session API" +msgstr "" + +msgid "Do not follow symlinks outside document root" +msgstr "" + +msgid "Do not generate directory listings." +msgstr "" + +msgid "Document root" +msgstr "" + +msgid "E.g specify with index.html and index.php when using PHP" +msgstr "" + +msgid "Embedded Lua interpreter is disabled if not present." +msgstr "" + +msgid "Enable JSON-RPC Cross-Origin Resource Support" +msgstr "" + +msgid "For settings primarily geared to serving more than the web UI" +msgstr "" + +msgid "Full Web Server Settings" +msgstr "" + +msgid "Full real path to handler for Lua scripts" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "HTTP listeners (address:port)" +msgstr "" + +msgid "HTTPS Certificate (DER Encoded)" +msgstr "" + +msgid "HTTPS Private Key (DER Encoded)" +msgstr "" + +msgid "HTTPS listener (address:port)" +msgstr "" + +msgid "Ignore private IPs on public interface" +msgstr "" + +msgid "Index page(s)" +msgstr "" + +msgid "" +"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/" +"usr/bin/php-cgi')" +msgstr "" + +msgid "Length of key in bits" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Maximum number of connections" +msgstr "" + +msgid "Maximum number of script requests" +msgstr "" + +msgid "Maximum wait time for Lua, CGI, or ubus execution" +msgstr "" + +msgid "Maximum wait time for network activity" +msgstr "" + +msgid "Override path for ubus socket" +msgstr "" + +msgid "Path prefix for CGI scripts" +msgstr "" + +msgid "" +"Prevent access from private (RFC1918) IPs on an interface if it has an " +"public IP address" +msgstr "" + +msgid "Realm for Basic Auth" +msgstr "" + +msgid "Redirect all HTTP to HTTPS" +msgstr "" + +msgid "Remove configuration for certificate and key" +msgstr "" + +msgid "Remove old certificate and key" +msgstr "" + +msgid "Server Hostname" +msgstr "" + +msgid "" +"Settings which are either rarely needed or which affect serving the WebUI" +msgstr "" + +msgid "State" +msgstr "" + +msgid "TCP Keepalive" +msgstr "" + +msgid "This permanently deletes the cert, key, and configuration to use same." +msgstr "" + +msgid "Valid for # of Days" +msgstr "" + +msgid "" +"Virtual URL or CGI script to display on status '404 Not Found'. Must begin " +"with '/'" +msgstr "" + +msgid "Virtual path prefix for Lua scripts" +msgstr "" + +msgid "Virtual path prefix for ubus via JSON-RPC integration" +msgstr "" + +msgid "Will not use HTTP authentication if not present" +msgstr "" + +msgid "a.k.a CommonName" +msgstr "" + +msgid "uHTTPd" +msgstr "" + +msgid "uHTTPd Self-signed Certificate Parameters" +msgstr "" + +msgid "" +"uHTTPd will generate a new self-signed certificate using the configuration " +"shown below." +msgstr "" + +msgid "ubus integration is disabled if not present" +msgstr "" diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua index 22f020021..847c98a3e 100644 --- a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua @@ -1,29 +1,33 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> -- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Copyright 2016 Dan Luedtke <mail@danrl.com> -- Licensed to the public under the Apache License 2.0. m = Map("unbound", translate("Recursive DNS"), translate("Unbound is a validating, recursive, and caching DNS resolver.")) - -s = m:section(TypedSection, "unbound", translate("Unbound Settings")) -s.addremove = false -s.anonymous = true -s:tab("service", translate("Unbound Service")) -s:tab("resource", translate("Unbound Resources")) -s:tab("dnsmasq", translate("Dnsmasq Link")) +s1 = m:section(TypedSection, "unbound") +s1.addremove = false +s1.anonymous = true +s1:tab("service", translate("Basic Settings")) +s1:tab("advanced", translate("Advanced Settings")) +s1:tab("resource", translate("Resource Settings")) ---Enable Unbound +--LuCI or Not -e = s:taboption("service", Flag, "enabled", translate("Enable Unbound:"), +ena = s1:taboption("service", Flag, "enabled", translate("Enable Unbound:"), translate("Enable the initialization scripts for Unbound")) -e.rmempty = false +ena.rmempty = false -function e.cfgvalue(self, section) +mcf = s1:taboption("service", Flag, "manual_conf", translate("Manual Conf:"), + translate("Skip UCI and use /etc/unbound/unbound.conf")) +mcf.rmempty = false + +function ena.cfgvalue(self, section) return luci.sys.init.enabled("unbound") and self.enabled or self.disabled end -function e.write(self, section, value) +function ena.write(self, section, value) if value == "1" then luci.sys.init.enable("unbound") luci.sys.call("/etc/init.d/unbound start >/dev/null") @@ -35,61 +39,136 @@ function e.write(self, section, value) return Flag.write(self, section, value) end ---Service Tab - -mcf = s:taboption("service", Flag, "manual_conf", translate("Manual Conf:"), - translate("Skip UCI and use /etc/unbound/unbound.conf")) -mcf.rmempty = false +--Basic Tab -lsv = s:taboption("service", Flag, "localservice", translate("Local Service:"), +lsv = s1:taboption("service", Flag, "localservice", translate("Local Service:"), translate("Accept queries only from local subnets")) lsv.rmempty = false -qry = s:taboption("service", Flag, "query_minimize", translate("Query Minimize:"), - translate("Break down query components for small added privacy")) -qry.rmempty = false - -rlh = s:taboption("service", Flag, "rebind_localhost", translate("Block Localhost Rebind:"), +rlh = s1:taboption("service", Flag, "rebind_localhost", translate("Block Localhost Rebind:"), translate("Prevent upstream response of 127.0.0.0/8")) rlh.rmempty = false -rpv = s:taboption("service", Flag, "rebind_protection", translate("Block Private Rebind:"), +rpv = s1:taboption("service", Flag, "rebind_protection", translate("Block Private Rebind:"), translate("Prevent upstream response of RFC1918 ranges")) rpv.rmempty = false -vld = s:taboption("service", Flag, "validator", translate("Enable DNSSEC:"), +vld = s1:taboption("service", Flag, "validator", translate("Enable DNSSEC:"), translate("Enable the DNSSEC validator module")) vld.rmempty = false -nvd = s:taboption("service", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"), +nvd = s1:taboption("service", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"), translate("Break the loop where DNSSEC needs NTP and NTP needs DNS")) nvd.rmempty = false +nvd:depends({ validator = true }) -eds = s:taboption("service", Value, "edns_size", translate("EDNS Size:"), +eds = s1:taboption("service", Value, "edns_size", translate("EDNS Size:"), translate("Limit extended DNS packet size")) eds.datatype = "and(uinteger,min(512),max(4096))" eds.rmempty = false -prt = s:taboption("service", Value, "listen_port", translate("Listening Port:"), +prt = s1:taboption("service", Value, "listen_port", translate("Listening Port:"), translate("Choose Unbounds listening port")) prt.datatype = "port" prt.rmempty = false -tlm = s:taboption("service", Value, "ttl_min", translate("TTL Minimum:"), +tlm = s1:taboption("service", Value, "ttl_min", translate("TTL Minimum:"), translate("Prevent excessively short cache periods")) tlm.datatype = "and(uinteger,min(0),max(600))" tlm.rmempty = false +--Advanced Tab + +ctl = s1:taboption("advanced", Flag, "unbound_control", translate("Unbound Control App:"), + translate("Enable unecrypted localhost access for unbound-control")) +ctl.rmempty = false + +dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"), + translate("Link to supported programs to load DHCP into DNS")) +dlk:value("none", translate("No Link")) +dlk:value("dnsmasq", "dnsmasq") +dlk:value("odhcpd", "odhcpd") +dlk.rmempty = false + +dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"), + translate("Domain suffix for this router and DHCP clients")) +dom.placeholder = "lan" +dom:depends({ dhcp_link = "none" }) +dom:depends({ dhcp_link = "odhcpd" }) + +dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"), + translate("How to treat queries of this local domain")) +dty:value("deny", translate("Ignored")) +dty:value("refuse", translate("Refused")) +dty:value("static", translate("Only Local")) +dty:value("transparent", translate("Also Forwarded")) +dty:depends({ dhcp_link = "none" }) +dty:depends({ dhcp_link = "odhcpd" }) + +lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"), + translate("How to enter the LAN or local network router in DNS")) +lfq:value("0", translate("No DNS")) +lfq:value("1", translate("Hostname, Primary Address")) +lfq:value("2", translate("Hostname, All Addresses")) +lfq:value("3", translate("Host FQDN, All Addresses")) +lfq:value("4", translate("Interface FQDN, All Addresses")) +lfq:depends({ dhcp_link = "none" }) +lfq:depends({ dhcp_link = "odhcpd" }) + +wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"), + translate("Override the WAN side router entry in DNS")) +wfq:value("0", translate("Upstream")) +wfq:value("1", translate("Hostname, Primary Address")) +wfq:value("2", translate("Hostname, All Addresses")) +wfq:value("3", translate("Host FQDN, All Addresses")) +wfq:value("4", translate("Interface FQDN, All Addresses")) +wfq:depends({ dhcp_link = "none" }) +wfq:depends({ dhcp_link = "odhcpd" }) + +ctl = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"), + translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)")) +ctl.rmempty = false + +d64 = s1:taboption("advanced", Flag, "dns64", translate("Enable DNS64:"), + translate("Enable the DNS64 module")) +d64.rmempty = false + +pfx = s1:taboption("advanced", Value, "dns64_prefix", translate("DNS64 Prefix:"), + translate("Prefix for generated DNS64 addresses")) +pfx.datatype = "ip6addr" +pfx.placeholder = "64:ff9b::/96" +pfx.optional = true +pfx:depends({ dns64 = true }) + +qry = s1:taboption("advanced", Flag, "query_minimize", translate("Query Minimize:"), + translate("Break down query components for limited added privacy")) +qry.rmempty = false + +qrs = s1:taboption("advanced", Flag, "query_min_strict", translate("Strict Minimize:"), + translate("Strict version of 'query minimize' but it can break DNS")) +qrs.rmempty = false +qrs:depends({ query_minimize = true }) + +--TODO: dnsmasq needs to not reference resolve-file and get off port 53. + --Resource Tuning Tab -rsn = s:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"), +pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"), + translate("Chose the protocol recursion queries leave on")) +pro:value("mixed", translate("IP4 and IP6")) +pro:value("ip6_prefer", translate("IP6 Preferred")) +pro:value("ip4_only", translate("IP4 Only")) +pro:value("ip6_only", translate("IP6 Only")) +pro.rmempty = false + +rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"), translate("Recursion activity affects memory growth and CPU load")) rsn:value("aggressive", translate("Aggressive")) rsn:value("default", translate("Default")) rsn:value("passive", translate("Passive")) rsn.rmempty = false -rsc = s:taboption("resource", ListValue, "resource", translate("Memory Resource:"), +rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"), translate("Use menu System/Processes to observe any memory growth")) rsc:value("large", translate("Large")) rsc:value("medium", translate("Medium")) @@ -97,27 +176,14 @@ rsc:value("small", translate("Small")) rsc:value("tiny", translate("Tiny")) rsc.rmempty = false -age = s:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"), +ag2 = s1:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"), translate("Limit days between RFC5011 to reduce flash writes")) -age.datatype = "and(uinteger,min(1),max(99))" -age:value("14", "14") -age:value("28", "28 ("..translate("default")..")") -age:value("45", "45") -age:value("90", "90") -age:value("99", "99 ("..translate("never")..")") - ---Dnsmasq Link Tab - -dld = s:taboption("dnsmasq", Flag, "dnsmasq_link_dns", translate("Link dnsmasq:"), - translate("Forward queries to dnsmasq for local clients")) -dld.rmempty = false - -dgn = s:taboption("dnsmasq", Flag, "dnsmsaq_gate_name", translate("Local Gateway Name:"), - translate("Also query dnsmasq for this hosts outbound gateway")) -dgn.rmempty = false - ---TODO: Read only repective dnsmasq options and inform user of link requirements. ---TODO: dnsmasq needs to not reference resolve-file and get off port 53. +ag2.datatype = "and(uinteger,min(1),max(99))" +ag2:value("14", "14") +ag2:value("28", "28 ("..translate("default")..")") +ag2:value("45", "45") +ag2:value("90", "90") +ag2:value("99", "99 ("..translate("never")..")") return m diff --git a/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound b/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound new file mode 100644 index 000000000..cc714ac53 --- /dev/null +++ b/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound @@ -0,0 +1,25 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@unbound[-1] + add ucitrack unbound + set ucitrack.@unbound[-1].init=unbound + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +[ ! -x /usr/sbin/unbound-control ] && exit 0 + +uci -q batch <<-EOF >/dev/null + set luci.unboundhosts=command + set luci.unboundhosts.name='Unbound Local Hosts' + set luci.unboundhosts.command='unbound-control -c /var/lib/unbound/unbound.conf list_local_data' + set luci.unboundzones=command + set luci.unboundzones.name='Unbound Local Zones' + set luci.unboundzones.command='unbound-control -c /var/lib/unbound/unbound.conf list_local_zones' + commit luci +EOF + +rm -f /tmp/luci-indexcache +exit 0 + diff --git a/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua b/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua index f1bb450dd..74b9d1d03 100644 --- a/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua +++ b/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua @@ -12,21 +12,21 @@ s.addremove = false s:tab("general", translate("General Settings")) s:tab("advanced", translate("Advanced Settings")) -e = s:taboption("general", Flag, "_init", translate("Start UPnP and NAT-PMP service")) +e = s:taboption("general", Flag, "enabled", translate("Start UPnP and NAT-PMP service")) e.rmempty = false -function e.cfgvalue(self, section) - return luci.sys.init.enabled("miniupnpd") and self.enabled or self.disabled -end +--function e.cfgvalue(self, section) +-- return luci.sys.init.enabled("miniupnpd") and self.enabled or self.disabled +--end function e.write(self, section, value) if value == "1" then - luci.sys.call("/etc/init.d/miniupnpd enable >/dev/null") luci.sys.call("/etc/init.d/miniupnpd start >/dev/null") else luci.sys.call("/etc/init.d/miniupnpd stop >/dev/null") - luci.sys.call("/etc/init.d/miniupnpd disable >/dev/null") end + + return Flag.write(self, section, value) end s:taboption("general", Flag, "enable_upnp", translate("Enable UPnP functionality")).default = "1" diff --git a/applications/luci-app-upnp/po/ja/upnp.po b/applications/luci-app-upnp/po/ja/upnp.po index ec9208d25..f0aff7336 100644 --- a/applications/luci-app-upnp/po/ja/upnp.po +++ b/applications/luci-app-upnp/po/ja/upnp.po @@ -1,17 +1,17 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-19 19:36+0200\n" -"PO-Revision-Date: 2013-10-05 17:27+0200\n" -"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2016-12-24 19:55+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" msgid "" "ACLs specify which external ports may be redirected to which internal " @@ -30,7 +30,7 @@ msgid "Advanced Settings" msgstr "詳細設定" msgid "Allow adding forwards only to requesting ip addresses" -msgstr "" +msgstr "要求元IPアドレスへの転送のみ、追加を許可します。" msgid "Announced model number" msgstr "通知するモデル番号" @@ -136,18 +136,20 @@ msgid "UPnP lease file" msgstr "UPnP リースファイル" msgid "Universal Plug & Play" -msgstr "ユニバーサル プラグ & プレイ" +msgstr "ユニバーサル プラグ & プレイ" msgid "Uplink" msgstr "アップリンク" msgid "Value in KByte/s, informational only" -msgstr "" +msgstr "クライアントへの情報提供のみに使用される、KByte/sの値です。" #~ msgid "" #~ "UPNP allows clients in the local network to automatically configure the " #~ "router." -#~ msgstr "UPnPを使用することで、ローカルネットワーク内のクライアントが自動的にルータを構成することができます。" +#~ msgstr "" +#~ "UPnPを使用することで、ローカルネットワーク内のクライアントが自動的にルータ" +#~ "を構成することができます。" #~ msgid "enable" #~ msgstr "有効" diff --git a/applications/luci-app-upnp/root/etc/uci-defaults/40_luci-miniupnp b/applications/luci-app-upnp/root/etc/uci-defaults/40_luci-miniupnp new file mode 100755 index 000000000..e9636f9a2 --- /dev/null +++ b/applications/luci-app-upnp/root/etc/uci-defaults/40_luci-miniupnp @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@upnpd[-1] + add ucitrack upnpd + set ucitrack.@upnpd[-1].init=miniupnpd + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/applications/luci-app-vpnbypass/Makefile b/applications/luci-app-vpnbypass/Makefile new file mode 100644 index 000000000..0ca74ae38 --- /dev/null +++ b/applications/luci-app-vpnbypass/Makefile @@ -0,0 +1,16 @@ +# Copyright (c) 2017 Stan Grishin (stangri@melmac.net) +# This is free software, licensed under the GNU General Public License v3. + +include $(TOPDIR)/rules.mk + +PKG_LICENSE:=GPL-3.0+ +PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net> + +LUCI_TITLE:=VPN Bypass Web UI +LUCI_DEPENDS:=+vpnbypass +LUCI_PKGARCH:=all +PKG_RELEASE:=1 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-vpnbypass/luasrc/controller/vpnbypass.lua b/applications/luci-app-vpnbypass/luasrc/controller/vpnbypass.lua new file mode 100644 index 000000000..ed6f4f4da --- /dev/null +++ b/applications/luci-app-vpnbypass/luasrc/controller/vpnbypass.lua @@ -0,0 +1,7 @@ +module("luci.controller.vpnbypass", package.seeall) +function index() + if not nixio.fs.access("/etc/config/vpnbypass") then + return + end + entry({"admin", "services", "vpnbypass"}, cbi("vpnbypass"), _("VPN Bypass")) +end diff --git a/applications/luci-app-vpnbypass/luasrc/model/cbi/vpnbypass.lua b/applications/luci-app-vpnbypass/luasrc/model/cbi/vpnbypass.lua new file mode 100644 index 000000000..b35a8e4e0 --- /dev/null +++ b/applications/luci-app-vpnbypass/luasrc/model/cbi/vpnbypass.lua @@ -0,0 +1,61 @@ +readmeURL = "https://github.com/openwrt/packages/blob/master/net/vpnbypass/files/README.md" + +m = Map("vpnbypass", translate("VPN Bypass Settings")) +s = m:section(NamedSection, "config", "vpnbypass") + +-- General options +e = s:option(Flag, "enabled", translate("Enable/start service")) +e.rmempty = false + +function e.cfgvalue(self, section) + return self.map:get(section, "enabled") == "1" and luci.sys.init.enabled("vpnbypass") and self.enabled or self.disabled +end + +function e.write(self, section, value) + if value == "1" then + luci.sys.call("/etc/init.d/vpnbypass enable >/dev/null") + luci.sys.call("/etc/init.d/vpnbypass start >/dev/null") + else + luci.sys.call("/etc/init.d/vpnbypass stop >/dev/null") + end + return Flag.write(self, section, value) +end + +-- Local Ports +p1 = s:option(DynamicList, "localport", translate("Local Ports to Bypass"), translate("Local ports to trigger VPN Bypass")) +p1.datatype = "portrange" +-- p1.placeholder = "0-65535" +p1.addremove = false +p1.optional = false + +-- Remote Ports +p2 = s:option(DynamicList, "remoteport", translate("Remote Ports to Bypass"), translate("Remote ports to trigger VPN Bypass")) +p2.datatype = "portrange" +-- p2.placeholder = "0-65535" +p2.addremove = false +p2.optional = false + +-- Local Subnets +r1 = s:option(DynamicList, "localsubnet", translate("Local IP Addresses to Bypass"), translate("Local IP addresses or subnets with direct internet access (outside of the VPN tunnel)")) +r1.datatype = "ip4addr" +-- r1.placeholder = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr") .. "/" .. uci.cursor():get("network", "lan", "netmask")) +r1.addremove = false +r1.optional = false + +-- Remote Subnets +r2 = s:option(DynamicList, "remotesubnet", translate("Remote IP Addresses to Bypass"), translate("Remote IP addresses or subnets which will be accessed directly (outside of the VPN tunnel)")) +r2.datatype = "ip4addr" +-- r2.placeholder = "0.0.0.0/0" +r2.addremove = false +r2.optional = false + +-- Domains +d = Map("dhcp") +s4 = d:section(TypedSection, "dnsmasq") +s4.anonymous = true +di = s4:option(DynamicList, "ipset", translate("Domains to Bypass"), + translate("Domains to be accessed directly (outside of the VPN tunnel), see ") + .. [[<a href="]] .. readmeURL .. [[#bypass-domains-formatsyntax" target="_blank">]] + .. translate("README") .. [[</a>]] .. translate(" for syntax")) + +return m, d diff --git a/applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po b/applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po new file mode 100644 index 000000000..9f3fa2a67 --- /dev/null +++ b/applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po @@ -0,0 +1,90 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Domains to Bypass" +msgstr "Domínios para evitar a VPN" + +msgid "Domains to be accessed directly (outside of the VPN tunnel), see" +msgstr "" + +msgid "Enable/start service" +msgstr "" + +msgid "Local IP Addresses to Bypass" +msgstr "" + +msgid "" +"Local IP addresses or subnets with direct internet access (outside of the " +"VPN tunnel)" +msgstr "" + +msgid "Local Ports to Bypass" +msgstr "Portas locais para evitar a VPN" + +msgid "Local ports to trigger VPN Bypass" +msgstr "Portas locais para disparar o VPN Bypass" + +msgid "README" +msgstr "" + +msgid "Remote IP Addresses to Bypass" +msgstr "" + +msgid "" +"Remote IP addresses or subnets which will be accessed directly (outside of " +"the VPN tunnel)" +msgstr "" + +msgid "Remote Ports to Bypass" +msgstr "Portas remotas para evitar a VPN" + +msgid "Remote ports to trigger VPN Bypass" +msgstr "Portas remotas para disparar o VPN Bypass" + +msgid "VPN Bypass" +msgstr "VPN Bypass" + +msgid "VPN Bypass Settings" +msgstr "Configurações do VPN Bypass" + +msgid "for syntax" +msgstr "" + +#~ msgid "Enable VPN Bypass" +#~ msgstr "Habilitar o VPN Bypass" + +#~ msgid "Configuration of VPN Bypass Settings" +#~ msgstr "Configurações do VPN Bypass" + +#~ msgid "Domains which will be accessed directly (outside of the VPN tunnel)" +#~ msgstr "Domínios que serão acessados diretamente (fora do túnel VPN)" + +#~ msgid "Local IP Subnets to Bypass" +#~ msgstr "Subredes IP locais para evitar a VPN" + +#~ msgid "" +#~ "Local IP ranges with direct internet access (outside of the VPN tunnel)" +#~ msgstr "" +#~ "Faixa de endereços IP locais que terão acesso internet direto (fora do " +#~ "túnel VPN)" + +#~ msgid "Remote IP Subnets to Bypass" +#~ msgstr "Subredes IP remotas para evitar a VPN" + +#~ msgid "" +#~ "Remote IP ranges which will be accessed directly (outside of the VPN " +#~ "tunnel)" +#~ msgstr "" +#~ "Faixa de endereços IP remotos que serão acessados diretamente (fora do " +#~ "túnel VPN)" diff --git a/applications/luci-app-vpnbypass/po/templates/vpnbypass.pot b/applications/luci-app-vpnbypass/po/templates/vpnbypass.pot new file mode 100644 index 000000000..fd92b5e8a --- /dev/null +++ b/applications/luci-app-vpnbypass/po/templates/vpnbypass.pot @@ -0,0 +1,51 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Domains to Bypass" +msgstr "" + +msgid "Domains to be accessed directly (outside of the VPN tunnel), see" +msgstr "" + +msgid "Enable/start service" +msgstr "" + +msgid "Local IP Addresses to Bypass" +msgstr "" + +msgid "" +"Local IP addresses or subnets with direct internet access (outside of the " +"VPN tunnel)" +msgstr "" + +msgid "Local Ports to Bypass" +msgstr "" + +msgid "Local ports to trigger VPN Bypass" +msgstr "" + +msgid "README" +msgstr "" + +msgid "Remote IP Addresses to Bypass" +msgstr "" + +msgid "" +"Remote IP addresses or subnets which will be accessed directly (outside of " +"the VPN tunnel)" +msgstr "" + +msgid "Remote Ports to Bypass" +msgstr "" + +msgid "Remote ports to trigger VPN Bypass" +msgstr "" + +msgid "VPN Bypass" +msgstr "" + +msgid "VPN Bypass Settings" +msgstr "" + +msgid "for syntax" +msgstr "" diff --git a/applications/luci-app-vpnbypass/root/etc/uci-defaults/40_luci-vpnbypass b/applications/luci-app-vpnbypass/root/etc/uci-defaults/40_luci-vpnbypass new file mode 100644 index 000000000..9455701a0 --- /dev/null +++ b/applications/luci-app-vpnbypass/root/etc/uci-defaults/40_luci-vpnbypass @@ -0,0 +1,11 @@ +#!/bin/sh +uci -q batch <<-EOF >/dev/null + delete ucitrack.@vpnbypass[-1] + add ucitrack vpnbypass + set ucitrack.@vpnbypass[-1].init=vpnbypass + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 + diff --git a/applications/luci-app-watchcat/po/pt-br/watchcat.po b/applications/luci-app-watchcat/po/pt-br/watchcat.po index fe9703637..e37066c3d 100644 --- a/applications/luci-app-watchcat/po/pt-br/watchcat.po +++ b/applications/luci-app-watchcat/po/pt-br/watchcat.po @@ -1,15 +1,16 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2014-03-29 23:20+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" +"Project-Id-Version: \n" +"PO-Revision-Date: 2017-02-20 18:10-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" +"POT-Creation-Date: \n" msgid "Forced reboot delay" msgstr "Atraso para reinício forçado" @@ -51,15 +52,13 @@ msgstr "Período de ping" msgid "Watchcat" msgstr "Watchcat" -#, fuzzy msgid "" "Watchcat allows configuring a periodic reboot when the Internet connection " "has been lost for a certain period of time." msgstr "" -"Watchcat permite que se configure um período para reiniciar e/ou quando a " +"Watchcat permite a configuração de um período para reiniciar e/ou quando a " "conexão com à Internet foi perdida por um ser período de tempo." -#, fuzzy msgid "" "When rebooting the system, the watchcat will trigger a soft reboot. Entering " "a non zero value here will trigger a delayed hard reboot if the soft reboot " diff --git a/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua b/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua index a33c7aab9..261cf36d0 100644 --- a/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua +++ b/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua @@ -12,21 +12,31 @@ -- -- Author: Nils Koenig <openwrt@newk.it> -module("luci.controller.wifischedule.wifi_schedule", package.seeall) +module("luci.controller.wifischedule.wifi_schedule", package.seeall) + +local fs = require "nixio.fs" +local sys = require "luci.sys" +local template = require "luci.template" +local i18n = require "luci.i18n" function index() - entry({"admin", "wifi_schedule"}, firstchild(), "Wifi Schedule", 60).dependent=false - entry({"admin", "wifi_schedule", "tab_from_cbi"}, cbi("wifischedule/wifi_schedule"), "Schedule", 1) - entry({"admin", "wifi_schedule", "wifi_schedule"}, call("wifi_schedule_log"), "View Logfile", 2) - entry({"admin", "wifi_schedule", "cronjob"}, call("view_crontab"), "View Cron Jobs", 3) + if not nixio.fs.access("/etc/config/wifi_schedule") then + return + end + entry({"admin", "services", "wifi_schedule"}, firstchild(), _("Wifi Schedule"), 60).dependent=false + entry({"admin", "services", "wifi_schedule", "tab_from_cbi"}, cbi("wifischedule/wifi_schedule"), _("Schedule"), 1) + entry({"admin", "services", "wifi_schedule", "wifi_schedule"}, call("wifi_schedule_log"), _("View Logfile"), 2) + entry({"admin", "services", "wifi_schedule", "cronjob"}, call("view_crontab"), _("View Cron Jobs"), 3) end function wifi_schedule_log() - local logfile = luci.sys.exec("cat /tmp/log/wifi_schedule.log") - luci.template.render("wifischedule/file_viewer", {title="Wifi Schedule Logfile", content=logfile}) + local logfile = fs.readfile("/tmp/log/wifi_schedule.log") or "" + template.render("wifischedule/file_viewer", + {title = i18n.translate("Wifi Schedule Logfile"), content = logfile}) end function view_crontab() - local crontab = luci.sys.exec("cat /etc/crontabs/root") - luci.template.render("wifischedule/file_viewer", {title="Cron Jobs", content=crontab}) + local crontab = fs.readfile("/etc/crontabs/root") or "" + template.render("wifischedule/file_viewer", + {title = i18n.translate("Cron Jobs"), content = crontab}) end diff --git a/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua b/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua index 2cca476b4..1d301219a 100644 --- a/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua +++ b/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua @@ -12,15 +12,11 @@ -- -- Author: Nils Koenig <openwrt@newk.it> -function file_exists(name) - local f=io.open(name,"r") - if f~=nil then io.close(f) return true else return false end -end - +local fs = require "nixio.fs" +local sys = require "luci.sys" function time_validator(self, value, desc) if value ~= nil then - h_str, m_str = string.match(value, "^(%d%d?):(%d%d?)$") h = tonumber(h_str) m = tonumber(m_str) @@ -32,21 +28,21 @@ function time_validator(self, value, desc) m <= 59) then return value end - end - return nil, translate("The value '" .. desc .. "' is invalid") + end + return nil, translatef("The value %s is invalid", desc) end -- ------------------------------------------------------------------------------------------------- -- BEGIN Map -m = Map("wifi_schedule", translate("Wifi Schedule"), translate("Defines a schedule when to turn on and off wifi.")) +m = Map("wifi_schedule", translate("Wifi Schedule"), translate("Defines a schedule when to turn on and off wifi.")) function m.on_commit(self) - luci.sys.exec("/usr/bin/wifi_schedule.sh cron") + sys.exec("/usr/bin/wifi_schedule.sh cron") end -- END Map -- BEGIN Global Section -global_section = m:section(TypedSection, "global", "Global Settings") +global_section = m:section(TypedSection, "global", translate("Global Settings")) global_section.optional = false global_section.rmempty = false global_section.anonymous = true @@ -54,13 +50,13 @@ global_section.anonymous = true -- BEGIN Global Enable Checkbox global_enable = global_section:option(Flag, "enabled", translate("Enable Wifi Schedule")) -global_enable.optional=false; -global_enable.rmempty = false; +global_enable.optional = false +global_enable.rmempty = false function global_enable.validate(self, value, global_section) if value == "1" then - if ( file_exists("/sbin/wifi") and - file_exists("/usr/bin/wifi_schedule.sh") )then + if ( fs.access("/sbin/wifi") and + fs.access("/usr/bin/wifi_schedule.sh") )then return value else return nil, translate("Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi") @@ -71,39 +67,38 @@ function global_enable.validate(self, value, global_section) end -- END Global Enable Checkbox - -- BEGIN Global Logging Checkbox global_logging = global_section:option(Flag, "logging", translate("Enable logging")) -global_logging.optional=false; -global_logging.rmempty = false; +global_logging.optional = false +global_logging.rmempty = false global_logging.default = 0 -- END Global Enable Checkbox -- BEGIN Global Activate WiFi Button enable_wifi = global_section:option(Button, "enable_wifi", translate("Activate wifi")) function enable_wifi.write() - luci.sys.exec("/usr/bin/wifi_schedule.sh start manual") + sys.exec("/usr/bin/wifi_schedule.sh start manual") end -- END Global Activate Wifi Button -- BEGIN Global Disable WiFi Gracefully Button disable_wifi_gracefully = global_section:option(Button, "disable_wifi_gracefully", translate("Disable wifi gracefully")) function disable_wifi_gracefully.write() - luci.sys.exec("/usr/bin/wifi_schedule.sh stop manual") + sys.exec("/usr/bin/wifi_schedule.sh stop manual") end --- END Global Disable Wifi Gracefully Button +-- END Global Disable Wifi Gracefully Button -- BEGIN Disable WiFi Forced Button disable_wifi_forced = global_section:option(Button, "disable_wifi_forced", translate("Disabled wifi forced")) function disable_wifi_forced.write() - luci.sys.exec("/usr/bin/wifi_schedule.sh forcestop manual") + sys.exec("/usr/bin/wifi_schedule.sh forcestop manual") end -- END Global Disable WiFi Forced Button -- BEGIN Global Unload Modules Checkbox global_unload_modules = global_section:option(Flag, "unload_modules", translate("Unload Modules (experimental; saves more power)")) -global_unload_modules.optional = false; -global_unload_modules.rmempty = false; +global_unload_modules.optional = false +global_unload_modules.rmempty = false global_unload_modules.default = 0 -- END Global Unload Modules Checkbox @@ -111,13 +106,13 @@ global_unload_modules.default = 0 -- BEGIN Modules modules = global_section:option(TextValue, "modules", "") modules:depends("unload_modules", global_unload_modules.enabled); -modules.wrap = "off" -modules.rows = 10 +modules.wrap = "off" +modules.rows = 10 function modules.cfgvalue(self, section) - mod=uci.get("wifi_schedule", section, "modules") + mod = uci.get("wifi_schedule", section, "modules") if mod == nil then - mod="" + mod = "" end return mod:gsub(" ", "\r\n") end @@ -131,45 +126,44 @@ function modules.write(self, section, value) end -- END Modules --- BEGIN Determine Modules +-- BEGIN Determine Modules determine_modules = global_section:option(Button, "determine_modules", translate("Determine Modules Automatically")) determine_modules:depends("unload_modules", global_unload_modules.enabled); function determine_modules.write(self, section) - output = luci.sys.exec("/usr/bin/wifi_schedule.sh getmodules") + output = sys.exec("/usr/bin/wifi_schedule.sh getmodules") modules:write(section, output) end -- END Determine Modules - -- BEGIN Section -d = m:section(TypedSection, "entry", "Schedule events") -d.addremove = true +d = m:section(TypedSection, "entry", translate("Schedule events")) +d.addremove = true --d.anonymous = true -- END Section -- BEGIN Enable Checkbox c = d:option(Flag, "enabled", translate("Enable")) -c.optional=false; c.rmempty = false; +c.optional = false +c.rmempty = false -- END Enable Checkbox - -- BEGIN Day(s) of Week dow = d:option(MultiValue, "daysofweek", translate("Day(s) of Week")) dow.optional = false dow.rmempty = false -dow:value("Monday") -dow:value("Tuesday") -dow:value("Wednesday") -dow:value("Thursday") -dow:value("Friday") -dow:value("Saturday") -dow:value("Sunday") +dow:value("Monday", translate("Monday")) +dow:value("Tuesday", translate("Tuesday")) +dow:value("Wednesday", translate("Wednesday")) +dow:value("Thursday", translate("Thursday")) +dow:value("Friday", translate("Friday")) +dow:value("Saturday", translate("Saturday")) +dow:value("Sunday", translate("Sunday")) -- END Day(s) of Weel -- BEGIN Start Wifi Dropdown starttime = d:option(Value, "starttime", translate("Start WiFi")) -starttime.optional=false; -starttime.rmempty = false; +starttime.optional = false +starttime.rmempty = false starttime:value("00:00") starttime:value("01:00") starttime:value("02:00") @@ -198,14 +192,12 @@ starttime:value("23:00") function starttime.validate(self, value, d) return time_validator(self, value, translate("Start Time")) end - -- END Start Wifi Dropdown - -- BEGIN Stop Wifi Dropdown -stoptime = d:option(Value, "stoptime", translate("Stop WiFi")) -stoptime.optional=false; -stoptime.rmempty = false; +stoptime = d:option(Value, "stoptime", translate("Stop WiFi")) +stoptime.optional = false +stoptime.rmempty = false stoptime:value("00:00") stoptime:value("01:00") stoptime:value("02:00") @@ -236,15 +228,14 @@ function stoptime.validate(self, value, d) end -- END Stop Wifi Dropdown - -- BEGIN Force Wifi Stop Checkbox force_wifi = d:option(Flag, "forcewifidown", translate("Force disabling wifi even if stations associated")) force_wifi.default = false -force_wifi.rmempty = false; +force_wifi.rmempty = false function force_wifi.validate(self, value, d) if value == "0" then - if file_exists("/usr/bin/iwinfo") then + if fs.access("/usr/bin/iwinfo") then return value else return nil, translate("Could not find required programm /usr/bin/iwinfo") @@ -255,5 +246,4 @@ function force_wifi.validate(self, value, d) end -- END Force Wifi Checkbox - return m diff --git a/applications/luci-app-wifischedule/po/ja/wifischedule.po b/applications/luci-app-wifischedule/po/ja/wifischedule.po new file mode 100644 index 000000000..3bc7864ad --- /dev/null +++ b/applications/luci-app-wifischedule/po/ja/wifischedule.po @@ -0,0 +1,112 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Language-Team: \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Activate wifi" +msgstr "WiFiのアクティブ化" + +msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi" +msgstr "必須の /usr/bin/wifi_schedule.sh または /sbin/wifi が見つかりませんでした。" + +msgid "Could not find required programm /usr/bin/iwinfo" +msgstr "必須のプログラム /usr/bin/iwinfo が見つかりませんでした。" + +msgid "Cron Jobs" +msgstr "Cronジョブ" + +msgid "Day(s) of Week" +msgstr "曜日" + +msgid "Defines a schedule when to turn on and off wifi." +msgstr "WiFiのオンとオフを切り替えるスケジュールを設定します。" + +msgid "Determine Modules Automatically" +msgstr "モジュールを自動的に決定する" + +msgid "Disable wifi gracefully" +msgstr "WiFiの通常終了" + +msgid "Disabled wifi forced" +msgstr "WiFiの強制終了" + +msgid "Enable" +msgstr "有効" + +msgid "Enable Wifi Schedule" +msgstr "WiFi スケジュールの有効化" + +msgid "Enable logging" +msgstr "ログの有効化" + +msgid "Force disabling wifi even if stations associated" +msgstr "ステーションが関連付けられていてもWiFiを強制終了する" + +msgid "Friday" +msgstr "金曜日" + +msgid "Global Settings" +msgstr "全体設定" + +msgid "Monday" +msgstr "月曜日" + +msgid "Saturday" +msgstr "土曜日" + +msgid "Schedule" +msgstr "スケジュール" + +msgid "Schedule events" +msgstr "実行スケジュール" + +msgid "Start Time" +msgstr "開始時刻" + +msgid "Start WiFi" +msgstr "WiFiの開始" + +msgid "Stop Time" +msgstr "停止時刻" + +msgid "Stop WiFi" +msgstr "WiFiの停止" + +msgid "Sunday" +msgstr "日曜日" + +msgid "The value %s is invalid" +msgstr "%s の値が無効です" + +msgid "Thursday" +msgstr "木曜日" + +msgid "Tuesday" +msgstr "火曜日" + +msgid "Unload Modules (experimental; saves more power)" +msgstr "モジュールのアンロード(実験的、より省電力)" + +msgid "View Cron Jobs" +msgstr "Cronジョブの確認" + +msgid "View Logfile" +msgstr "ログファイルの確認" + +msgid "Wednesday" +msgstr "水曜日" + +msgid "Wifi Schedule" +msgstr "WiFi スケジュール" + +msgid "Wifi Schedule Logfile" +msgstr "WiFiスケジュール ログファイル" diff --git a/applications/luci-app-wifischedule/po/pt-br/wifischedule.po b/applications/luci-app-wifischedule/po/pt-br/wifischedule.po new file mode 100644 index 000000000..19e31b54c --- /dev/null +++ b/applications/luci-app-wifischedule/po/pt-br/wifischedule.po @@ -0,0 +1,114 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Activate wifi" +msgstr "Ativar a WiFi" + +msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi" +msgstr "" +"Não foi possível localizar os programas necessários '/usr/bin/wifi_schedule." +"sh' ou '/sbin/wifi'." + +msgid "Could not find required programm /usr/bin/iwinfo" +msgstr "Não foi possível localizar o programa necessário '/usr/bin/iwinfo'" + +msgid "Cron Jobs" +msgstr "Tarefas da Cron" + +msgid "Day(s) of Week" +msgstr "Dia(s) da semana" + +msgid "Defines a schedule when to turn on and off wifi." +msgstr "Define um agendamento para quando ligar ou desligar a WiFi." + +msgid "Determine Modules Automatically" +msgstr "Determinar os Módulos Automaticamente" + +msgid "Disable wifi gracefully" +msgstr "Desabilitar a WiFi amistosamente" + +msgid "Disabled wifi forced" +msgstr "WiFi foi desabilitada de forma forçada." + +msgid "Enable" +msgstr "Habilitar" + +msgid "Enable Wifi Schedule" +msgstr "Habilitar o agendamento da WiFi" + +msgid "Enable logging" +msgstr "Habilite os registros (log)" + +msgid "Force disabling wifi even if stations associated" +msgstr "Force a desativação da WiFi mesmo se existirem estações associadas " + +msgid "Friday" +msgstr "Sexta-feira" + +msgid "Global Settings" +msgstr "Configurações Globais" + +msgid "Monday" +msgstr "Segunda-Feira" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Schedule" +msgstr "Agendamento" + +msgid "Schedule events" +msgstr "Eventos do agendamento" + +msgid "Start Time" +msgstr "Hora Inicial" + +msgid "Start WiFi" +msgstr "Iniciar WiFi" + +msgid "Stop Time" +msgstr "Hora Final" + +msgid "Stop WiFi" +msgstr "Parar WiFi" + +msgid "Sunday" +msgstr "Domingo" + +msgid "The value %s is invalid" +msgstr "O valor %s é inválido" + +msgid "Thursday" +msgstr "Quita-feira" + +msgid "Tuesday" +msgstr "Terça-feira" + +msgid "Unload Modules (experimental; saves more power)" +msgstr "Descarregar Módulos (experimental, poupa mais energia)" + +msgid "View Cron Jobs" +msgstr "Visualizar Tarefas da Cron" + +msgid "View Logfile" +msgstr "Visualizar o Arquivo de Registros (log)" + +msgid "Wednesday" +msgstr "Quarta-feira" + +msgid "Wifi Schedule" +msgstr "Agendamento da Wifi" + +msgid "Wifi Schedule Logfile" +msgstr "Arquivo de Registros (log) do Agendamento da Wifi" diff --git a/applications/luci-app-wifischedule/po/templates/wifischedule.pot b/applications/luci-app-wifischedule/po/templates/wifischedule.pot new file mode 100644 index 000000000..639c432e5 --- /dev/null +++ b/applications/luci-app-wifischedule/po/templates/wifischedule.pot @@ -0,0 +1,101 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Activate wifi" +msgstr "" + +msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi" +msgstr "" + +msgid "Could not find required programm /usr/bin/iwinfo" +msgstr "" + +msgid "Cron Jobs" +msgstr "" + +msgid "Day(s) of Week" +msgstr "" + +msgid "Defines a schedule when to turn on and off wifi." +msgstr "" + +msgid "Determine Modules Automatically" +msgstr "" + +msgid "Disable wifi gracefully" +msgstr "" + +msgid "Disabled wifi forced" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable Wifi Schedule" +msgstr "" + +msgid "Enable logging" +msgstr "" + +msgid "Force disabling wifi even if stations associated" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Schedule" +msgstr "" + +msgid "Schedule events" +msgstr "" + +msgid "Start Time" +msgstr "" + +msgid "Start WiFi" +msgstr "" + +msgid "Stop Time" +msgstr "" + +msgid "Stop WiFi" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "The value %s is invalid" +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Unload Modules (experimental; saves more power)" +msgstr "" + +msgid "View Cron Jobs" +msgstr "" + +msgid "View Logfile" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Wifi Schedule" +msgstr "" + +msgid "Wifi Schedule Logfile" +msgstr "" diff --git a/applications/luci-app-wifischedule/po/zh-cn/wifischedule.po b/applications/luci-app-wifischedule/po/zh-cn/wifischedule.po new file mode 100644 index 000000000..ab3a8d0bf --- /dev/null +++ b/applications/luci-app-wifischedule/po/zh-cn/wifischedule.po @@ -0,0 +1,101 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "Activate wifi" +msgstr "激活 WiFi" + +msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi" +msgstr "无法找到必需的 /usr/bin/wifi_schedule.sh 或 /sbin/wifi" + +msgid "Could not find required programm /usr/bin/iwinfo" +msgstr "无法找到必需程序:/usr/bin/iwinfo" + +msgid "Cron Jobs" +msgstr "计划任务" + +msgid "Day(s) of Week" +msgstr "星期" + +msgid "Defines a schedule when to turn on and off wifi." +msgstr "定义自动打开和关闭 WiFi 的计划表" + +msgid "Determine Modules Automatically" +msgstr "自动确定模块" + +msgid "Disable wifi gracefully" +msgstr "正常关闭 WiFi" + +msgid "Disabled wifi forced" +msgstr "强制关闭 WiFi" + +msgid "Enable" +msgstr "启用" + +msgid "Enable Wifi Schedule" +msgstr "启用 WiFi 计划" + +msgid "Enable logging" +msgstr "启用日志" + +msgid "Force disabling wifi even if stations associated" +msgstr "即使有设备连接也强制关闭 WiFi" + +msgid "Friday" +msgstr "星期五" + +msgid "Global Settings" +msgstr "全局设置" + +msgid "Monday" +msgstr "星期一" + +msgid "Saturday" +msgstr "星期六" + +msgid "Schedule" +msgstr "计划表" + +msgid "Schedule events" +msgstr "计划事件" + +msgid "Start Time" +msgstr "启动时间" + +msgid "Start WiFi" +msgstr "启动 WiFi" + +msgid "Stop Time" +msgstr "关闭时间" + +msgid "Stop WiFi" +msgstr "关闭 WiFi" + +msgid "Sunday" +msgstr "星期日" + +msgid "The value %s is invalid" +msgstr "%s 的值无效" + +msgid "Thursday" +msgstr "星期四" + +msgid "Tuesday" +msgstr "星期二" + +msgid "Unload Modules (experimental; saves more power)" +msgstr "卸载模块(实验性的,节省更多电量)" + +msgid "View Cron Jobs" +msgstr "查看计划任务" + +msgid "View Logfile" +msgstr "查看日志文件" + +msgid "Wednesday" +msgstr "星期三" + +msgid "Wifi Schedule" +msgstr "WiFi 计划" + +msgid "Wifi Schedule Logfile" +msgstr "WiFi 计划日志文件" diff --git a/applications/luci-app-wireguard/Makefile b/applications/luci-app-wireguard/Makefile new file mode 100644 index 000000000..92cdcf270 --- /dev/null +++ b/applications/luci-app-wireguard/Makefile @@ -0,0 +1,17 @@ +# +# Copyright (C) 2016-2017 Dan Luedtke <mail@danrl.com> +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=WireGuard Status +LUCI_DEPENDS:=+wireguard-tools +kmod-wireguard +LUCI_PKGARCH:=all + +PKG_MAINTAINER:=Dan Luedtke <mail@danrl.com> + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-wireguard/luasrc/controller/wireguard.lua b/applications/luci-app-wireguard/luasrc/controller/wireguard.lua new file mode 100644 index 000000000..68a82fe5c --- /dev/null +++ b/applications/luci-app-wireguard/luasrc/controller/wireguard.lua @@ -0,0 +1,8 @@ +-- Copyright 2016-2017 Dan Luedtke <mail@danrl.com> +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.wireguard", package.seeall) + +function index() + entry({"admin", "status", "wireguard"}, template("wireguard"), _("WireGuard Status"), 92) +end diff --git a/applications/luci-app-wireguard/luasrc/view/wireguard.htm b/applications/luci-app-wireguard/luasrc/view/wireguard.htm new file mode 100644 index 000000000..5b5d59a96 --- /dev/null +++ b/applications/luci-app-wireguard/luasrc/view/wireguard.htm @@ -0,0 +1,209 @@ +<%# + Copyright 2016-2017 Dan Luedtke <mail@danrl.com> + Licensed to the public under the Apache License 2.0. +-%> + +<% + local data = { } + local last_device = "" + + local wg_dump = io.popen("wg show all dump") + if wg_dump then + local line + for line in wg_dump:lines() do + local line = string.split(line, "\t") + if not (last_device == line[1]) then + last_device = line[1] + data[line[1]] = { + name = line[1], + public_key = line[3], + listen_port = line[5], + fwmark = line[6], + peers = { } + } + else + local peer = { + public_key = line[2], + endpoint = line[3], + allowed_ips = { }, + latest_handshake = line[5], + transfer_rx = line[6], + transfer_tx = line[7], + persistent_keepalive = line[8] + } + if not (line[4] == '(none)') then + for ipkey, ipvalue in pairs(string.split(line[4], ",")) do + if #ipvalue > 0 then + table.insert(peer['allowed_ips'], ipvalue) + end + end + end + table.insert(data[line[1]].peers, peer) + end + end + end + + if luci.http.formvalue("status") == "1" then + luci.http.prepare_content("application/json") + luci.http.write_json(data) + return + end +-%> + +<%+header%> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + + function bytes_to_str(bytes) { + bytes = parseFloat(bytes); + if (bytes < 1) { return "0 B"; } + var sizes = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB']; + var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); + return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i]; + }; + + function timestamp_to_str(timestamp) { + if (timestamp < 1) { + return '<%:Never%>'; + } + var now = new Date(); + var seconds = (now.getTime() / 1000) - timestamp; + var ago = ""; + if (seconds < 60) { + ago = parseInt(seconds) + '<%:s ago%>'; + } else if (seconds < 3600) { + ago = parseInt(seconds / 60) + '<%:m ago%>'; + } else if (seconds < 86401) { + ago = parseInt(seconds / 3600) + '<%:h ago%>'; + } else { + ago = '<%:over a day ago%>'; + } + var t = new Date(timestamp * 1000); + return t.toUTCString() + ' (' + ago + ')'; + } + + XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 }, + function(x, data) { + for (var key in data) { + if (!data.hasOwnProperty(key)) { continue; } + var ifname = key; + var iface = data[key]; + var s = ""; + if (iface.public_key == '(none)') { + s += '<em><%:Interface does not have a public key!%></em>'; + } else { + s += String.format( + '<strong><%:Public Key%>: </strong>%s', + iface.public_key + ); + } + if (iface.listen_port > 0) { + s += String.format( + '<br /><strong><%:Listen Port%>: </strong>%s', + iface.listen_port + ); + } + if (iface.fwmark != 'off') { + s += String.format( + '<br /><strong><%:Firewall Mark%>: </strong>%s', + iface.fwmark + ); + } + document.getElementById(ifname + "_info").innerHTML = s; + for (var i = 0, ilen = iface.peers.length; i < ilen; i++) { + var peer = iface.peers[i]; + var s = String.format( + '<strong><%:Public Key%>: </strong>%s', + peer.public_key + ); + if (peer.endpoint != '(none)') { + s += String.format( + '<br /><strong><%:Endpoint%>: </strong>%s', + peer.endpoint + ); + } + if (peer.allowed_ips.length > 0) { + s += '<br /><strong><%:Allowed IPs%>:</strong>'; + for (var k = 0, klen = peer.allowed_ips.length; k < klen; k++) { + s += '<br /> • ' + peer.allowed_ips[k]; + } + } + if (peer.persistent_keepalive != 'off') { + s += String.format( + '<br /><strong><%:Persistent Keepalive%>: </strong>%ss', + peer.persistent_keepalive + ); + } + var icon = '<img src="<%=resource%>/icons/tunnel_disabled.png" />'; + var now = new Date(); + if (((now.getTime() / 1000) - peer.latest_handshake) < 140) { + icon = '<img src="<%=resource%>/icons/tunnel.png" />'; + } + s += String.format( + '<br /><strong><%:Latest Handshake%>: </strong>%s', + timestamp_to_str(peer.latest_handshake) + ); + s += String.format( + '<br /><strong><%:Data Received%>: </strong>%s' + + '<br /><strong><%:Data Transmitted%>: </strong>%s', + bytes_to_str(peer.transfer_rx), + bytes_to_str(peer.transfer_tx) + ); + document.getElementById(ifname + "_" + peer.public_key + "_icon").innerHTML = icon; + document.getElementById(ifname + "_" + peer.public_key + "_info").innerHTML = s; + } + } + }); +//]]></script> + +<h2>WireGuard Status</h2> + +<fieldset class="cbi-section"> +<%- +for ikey, iface in pairs(data) do + -%> + <legend><%:Interface%> <%=ikey%></legend> + <table width="100%" cellspacing="10"> + <tr> + <td width="33%" style="vertical-align:top"><%:Configuration%></td> + <td> + <table> + <tr> + <td id="<%=ikey%>_icon" style="width:16px; text-align:center; padding:3px"> + + </td> + <td id="<%=ikey%>_info" style="vertical-align:middle; padding: 3px"> + <em><%:Collecting data...%></em> + </td> + </tr></table> + </td> + </tr> + <%- + for pkey, peer in pairs(iface.peers) do + -%> + <tr> + <td width="33%" style="vertical-align:top"><%:Peer%></td> + <td> + <table> + <tr> + <td id="<%=ikey%>_<%=peer.public_key%>_icon" style="width:16px; text-align:center; padding:3px"> + <img src="<%=resource%>/icons/tunnel_disabled.png" /><br /> + <small>?</small> + </td> + <td id="<%=ikey%>_<%=peer.public_key%>_info" style="vertical-align:middle; padding: 3px"> + <em><%:Collecting data...%></em> + </td> + </tr></table> + </td> + </tr> + <%- + end + -%> + </table> + <%- +end +-%> +</fieldset> + +<%+footer%> diff --git a/applications/luci-app-wireguard/po/ja/wireguard.po b/applications/luci-app-wireguard/po/ja/wireguard.po new file mode 100644 index 000000000..5cd7a9003 --- /dev/null +++ b/applications/luci-app-wireguard/po/ja/wireguard.po @@ -0,0 +1,74 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2017-02-28 00:31+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Language-Team: \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.12\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Allowed IPs" +msgstr "許可されたIP" + +msgid "Collecting data..." +msgstr "データ収集中です..." + +msgid "Configuration" +msgstr "設定" + +msgid "Data Received" +msgstr "受信済みデータ" + +msgid "Data Transmitted" +msgstr "送信済みデータ" + +msgid "Endpoint" +msgstr "エンドポイント" + +msgid "Firewall Mark" +msgstr "ファイアウォール マーク" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Interface does not have a public key!" +msgstr "インターフェースに公開鍵がありません!" + +msgid "Latest Handshake" +msgstr "最新のハンドシェイク" + +msgid "Listen Port" +msgstr "待ち受けポート" + +msgid "Never" +msgstr "無し" + +msgid "Peer" +msgstr "ピア" + +msgid "Persistent Keepalive" +msgstr "永続的なキープアライブ" + +msgid "Public Key" +msgstr "公開鍵" + +msgid "WireGuard Status" +msgstr "WireGuard ステータス" + +msgid "h ago" +msgstr "時間前" + +msgid "m ago" +msgstr "分前" + +msgid "over a day ago" +msgstr "1日以上前" + +msgid "s ago" +msgstr "秒前" diff --git a/applications/luci-app-wireguard/po/pt-br/wireguard.po b/applications/luci-app-wireguard/po/pt-br/wireguard.po new file mode 100644 index 000000000..d3b5059d5 --- /dev/null +++ b/applications/luci-app-wireguard/po/pt-br/wireguard.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +msgid "Allowed IPs" +msgstr "Endereços IP autorizados" + +msgid "Collecting data..." +msgstr "Coletando dados..." + +msgid "Configuration" +msgstr "Configuração" + +msgid "Data Received" +msgstr "Dados Recebidos" + +msgid "Data Transmitted" +msgstr "Dados Enviados" + +msgid "Endpoint" +msgstr "Equipamento do ponto final" + +msgid "Firewall Mark" +msgstr "Marca do Firewall" + +msgid "Interface" +msgstr "Interface" + +msgid "Interface does not have a public key!" +msgstr "A interface não tem uma chave pública!" + +msgid "Latest Handshake" +msgstr "Última Negociação" + +msgid "Listen Port" +msgstr "Porta de Escuta" + +msgid "Never" +msgstr "Nunca" + +msgid "Peer" +msgstr "Parceiro" + +msgid "Persistent Keepalive" +msgstr "Manter Conexões Abertas (Keepalive)" + +msgid "Public Key" +msgstr "Chave Pública" + +msgid "WireGuard Status" +msgstr "Estado do WireGuard" + +msgid "h ago" +msgstr "horas atrás" + +msgid "m ago" +msgstr "meses atrás" + +msgid "over a day ago" +msgstr "mais de um dia atrás" + +msgid "s ago" +msgstr "segundos atrás" diff --git a/applications/luci-app-wireguard/po/templates/wireguard.pot b/applications/luci-app-wireguard/po/templates/wireguard.pot new file mode 100644 index 000000000..9ec5c6004 --- /dev/null +++ b/applications/luci-app-wireguard/po/templates/wireguard.pot @@ -0,0 +1,62 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Allowed IPs" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Data Received" +msgstr "" + +msgid "Data Transmitted" +msgstr "" + +msgid "Endpoint" +msgstr "" + +msgid "Firewall Mark" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface does not have a public key!" +msgstr "" + +msgid "Latest Handshake" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Peer" +msgstr "" + +msgid "Persistent Keepalive" +msgstr "" + +msgid "Public Key" +msgstr "" + +msgid "WireGuard Status" +msgstr "" + +msgid "h ago" +msgstr "" + +msgid "m ago" +msgstr "" + +msgid "over a day ago" +msgstr "" + +msgid "s ago" +msgstr "" diff --git a/applications/luci-app-wireguard/po/zh-cn/wireguard.po b/applications/luci-app-wireguard/po/zh-cn/wireguard.po new file mode 100644 index 000000000..e873a8389 --- /dev/null +++ b/applications/luci-app-wireguard/po/zh-cn/wireguard.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.1\n" +"Last-Translator: liushuyu <liushuyu011@gmail.com>\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: zh_CN\n" + +msgid "Allowed IPs" +msgstr "允许的 IP" + +msgid "Collecting data..." +msgstr "正在收集数据..." + +msgid "Configuration" +msgstr "配置" + +msgid "Data Received" +msgstr "已接收" + +msgid "Data Transmitted" +msgstr "已发送" + +msgid "Endpoint" +msgstr "传输端点" + +msgid "Firewall Mark" +msgstr "防火墙标识" + +msgid "Interface" +msgstr "接口" + +msgid "Interface does not have a public key!" +msgstr "接口没有配置公钥!" + +msgid "Latest Handshake" +msgstr "上次握手" + +msgid "Listen Port" +msgstr "监听端口" + +msgid "Never" +msgstr "从不" + +msgid "Peer" +msgstr "对端" + +msgid "Persistent Keepalive" +msgstr "Keepalive 间隔(秒)" + +msgid "Public Key" +msgstr "公钥" + +msgid "WireGuard Status" +msgstr "WireGuard 状态" + +msgid "h ago" +msgstr "小时前" + +msgid "m ago" +msgstr "分钟前" + +msgid "over a day ago" +msgstr "超过一天前" + +msgid "s ago" +msgstr "秒前" diff --git a/applications/luci-app-wol/luasrc/controller/wol.lua b/applications/luci-app-wol/luasrc/controller/wol.lua index 73a9594b2..dbbfdde12 100644 --- a/applications/luci-app-wol/luasrc/controller/wol.lua +++ b/applications/luci-app-wol/luasrc/controller/wol.lua @@ -1,6 +1,6 @@ module("luci.controller.wol", package.seeall) function index() - entry({"admin", "network", "wol"}, cbi("wol"), _("Wake on LAN"), 90) - entry({"mini", "network", "wol"}, cbi("wol"), _("Wake on LAN"), 90) + entry({"admin", "services", "wol"}, cbi("wol"), _("Wake on LAN"), 90) + entry({"mini", "services", "wol"}, cbi("wol"), _("Wake on LAN"), 90) end diff --git a/applications/luci-app-wol/luasrc/model/cbi/wol.lua b/applications/luci-app-wol/luasrc/model/cbi/wol.lua index e87cac3dc..ec6a1be2a 100644 --- a/applications/luci-app-wol/luasrc/model/cbi/wol.lua +++ b/applications/luci-app-wol/luasrc/model/cbi/wol.lua @@ -48,6 +48,13 @@ sys.net.mac_hints(function(mac, name) host:value(mac, "%s (%s)" %{ mac, name }) end) +if has_ewk then + broadcast = s:option(Flag, "broadcast", + translate("Send to broadcast address")) + if has_wol then + broadcast:depends("binary", "/usr/bin/etherwake") + end +end function host.write(self, s, val) local host = luci.http.formvalue("cbid.wol.1.mac") @@ -59,8 +66,10 @@ function host.write(self, s, val) if util == "/usr/bin/etherwake" then local iface = luci.http.formvalue("cbid.wol.1.iface") - cmd = "%s -D%s %q" %{ - util, (iface ~= "" and " -i %q" % iface or ""), host + local broadcast = luci.http.formvalue("cbid.wol.1.broadcast") + cmd = "%s -D%s %s %q" %{ + util, (iface ~= "" and " -i %q" % iface or ""), + (broadcast == "1" and " -b" or ""), host } else cmd = "%s -v %q" %{ util, host } diff --git a/applications/luci-app-wol/po/ca/wol.po b/applications/luci-app-wol/po/ca/wol.po index 42f7cf75a..387b4717c 100644 --- a/applications/luci-app-wol/po/ca/wol.po +++ b/applications/luci-app-wol/po/ca/wol.po @@ -29,6 +29,9 @@ msgstr "Host per a despertar" msgid "Network interface to use" msgstr "Interfície de xarxa per a utilitzar" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/cs/wol.po b/applications/luci-app-wol/po/cs/wol.po index 6ee7f67b8..49488125e 100644 --- a/applications/luci-app-wol/po/cs/wol.po +++ b/applications/luci-app-wol/po/cs/wol.po @@ -27,6 +27,9 @@ msgstr "Adresa zařízení, které má být probuzeno" msgid "Network interface to use" msgstr "Použité síťové rozhraní" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/de/wol.po b/applications/luci-app-wol/po/de/wol.po index 52940efa3..efbd122d4 100644 --- a/applications/luci-app-wol/po/de/wol.po +++ b/applications/luci-app-wol/po/de/wol.po @@ -28,6 +28,9 @@ msgstr "Anzuschaltender Rechner" msgid "Network interface to use" msgstr "Verwendete Schnittstelle" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/el/wol.po b/applications/luci-app-wol/po/el/wol.po index cb7c3b971..422a51b3d 100644 --- a/applications/luci-app-wol/po/el/wol.po +++ b/applications/luci-app-wol/po/el/wol.po @@ -25,6 +25,9 @@ msgstr "" msgid "Network interface to use" msgstr "" +msgid "Send to broadcast address" +msgstr "" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" diff --git a/applications/luci-app-wol/po/en/wol.po b/applications/luci-app-wol/po/en/wol.po index 48c7302a3..877ba34fa 100644 --- a/applications/luci-app-wol/po/en/wol.po +++ b/applications/luci-app-wol/po/en/wol.po @@ -23,6 +23,9 @@ msgstr "Host to wake up" msgid "Network interface to use" msgstr "Network interface to use" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/es/wol.po b/applications/luci-app-wol/po/es/wol.po index f5bcf6bf4..e54ffdc78 100644 --- a/applications/luci-app-wol/po/es/wol.po +++ b/applications/luci-app-wol/po/es/wol.po @@ -27,6 +27,9 @@ msgstr "Máquina a despertar" msgid "Network interface to use" msgstr "Interfaz de red a utilizar" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/fr/wol.po b/applications/luci-app-wol/po/fr/wol.po index 0bed86d8f..848690568 100644 --- a/applications/luci-app-wol/po/fr/wol.po +++ b/applications/luci-app-wol/po/fr/wol.po @@ -27,6 +27,9 @@ msgstr "Hôte à réveiller" msgid "Network interface to use" msgstr "Interface réseau à utiliser" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/he/wol.po b/applications/luci-app-wol/po/he/wol.po index cb7c3b971..422a51b3d 100644 --- a/applications/luci-app-wol/po/he/wol.po +++ b/applications/luci-app-wol/po/he/wol.po @@ -25,6 +25,9 @@ msgstr "" msgid "Network interface to use" msgstr "" +msgid "Send to broadcast address" +msgstr "" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" diff --git a/applications/luci-app-wol/po/hu/wol.po b/applications/luci-app-wol/po/hu/wol.po index f47191cba..3895e92e7 100644 --- a/applications/luci-app-wol/po/hu/wol.po +++ b/applications/luci-app-wol/po/hu/wol.po @@ -29,6 +29,9 @@ msgstr "Felélesztendő gép" msgid "Network interface to use" msgstr "Használandó interfész" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/it/wol.po b/applications/luci-app-wol/po/it/wol.po index 63ac0d8dc..bf23eb8ce 100644 --- a/applications/luci-app-wol/po/it/wol.po +++ b/applications/luci-app-wol/po/it/wol.po @@ -27,6 +27,9 @@ msgstr "Host da \"svegliare\"" msgid "Network interface to use" msgstr "Interfacci di rete da usare" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/ja/wol.po b/applications/luci-app-wol/po/ja/wol.po index c18b83193..bedcbbfc4 100644 --- a/applications/luci-app-wol/po/ja/wol.po +++ b/applications/luci-app-wol/po/ja/wol.po @@ -2,18 +2,18 @@ # msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-04-19 00:29+0200\n" -"PO-Revision-Date: 2013-10-06 17:12+0200\n" -"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n" +"PO-Revision-Date: 2017-01-27 21:03+0900\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language-Team: none\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" +"X-Generator: Poedit 1.8.11\n" msgid "Broadcast on all interfaces" msgstr "全てのインターフェースへブロードキャスト" @@ -27,12 +27,14 @@ msgstr "起動するホストを指定" msgid "Network interface to use" msgstr "使用するネットワークインターフェース" -#, fuzzy +msgid "Send to broadcast address" +msgstr "ブロードキャスト アドレスに送信する" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" -"片方のツールのみが動作する場合があるため、片方が失敗する場合は別のツールを試" -"してみてください。" +"片方のツールのみが動作する場合があるため、片方が失敗する場合は別のツールを" +"試してみてください。" msgid "Specifies the interface the WoL packet is sent on" msgstr "WoLパケットを送信するインタフェースを指定" @@ -46,8 +48,8 @@ msgstr "Wake on LAN" msgid "" "Wake on LAN is a mechanism to remotely boot computers in the local network." msgstr "" -"Wake on LANはローカルネットワーク内のコンピュータを遠隔で起動させることができ" -"る機能です。" +"Wake on LANはローカルネットワーク内のコンピュータを遠隔で起動させることがで" +"きる機能です。" msgid "Wake up host" msgstr "ホストを起動" diff --git a/applications/luci-app-wol/po/ms/wol.po b/applications/luci-app-wol/po/ms/wol.po index 74380f27b..47c335d2e 100644 --- a/applications/luci-app-wol/po/ms/wol.po +++ b/applications/luci-app-wol/po/ms/wol.po @@ -24,6 +24,9 @@ msgstr "" msgid "Network interface to use" msgstr "" +msgid "Send to broadcast address" +msgstr "" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" diff --git a/applications/luci-app-wol/po/no/wol.po b/applications/luci-app-wol/po/no/wol.po index 2f0a8ad63..6dd0c0ea6 100644 --- a/applications/luci-app-wol/po/no/wol.po +++ b/applications/luci-app-wol/po/no/wol.po @@ -18,6 +18,9 @@ msgstr "Vert som skal startes opp" msgid "Network interface to use" msgstr "Nettverksgrensesnitt" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/pl/wol.po b/applications/luci-app-wol/po/pl/wol.po index c599b9ec3..3533e4574 100644 --- a/applications/luci-app-wol/po/pl/wol.po +++ b/applications/luci-app-wol/po/pl/wol.po @@ -28,6 +28,9 @@ msgstr "Host do wybudzenia" msgid "Network interface to use" msgstr "Użyty interfejs sieciowy" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/pt-br/wol.po b/applications/luci-app-wol/po/pt-br/wol.po index 6a21a855b..783ec0bc0 100644 --- a/applications/luci-app-wol/po/pt-br/wol.po +++ b/applications/luci-app-wol/po/pt-br/wol.po @@ -2,18 +2,18 @@ # msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-04-19 00:29+0200\n" -"PO-Revision-Date: 2011-10-11 20:31+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" +"PO-Revision-Date: 2017-02-20 18:13-0300\n" +"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n" "Language-Team: none\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.4\n" +"X-Generator: Poedit 1.8.11\n" msgid "Broadcast on all interfaces" msgstr "Broadcast em todas as interfaces" @@ -27,12 +27,14 @@ msgstr "Computador para acordar" msgid "Network interface to use" msgstr "Interfaces de rede para usar" -#, fuzzy +msgid "Send to broadcast address" +msgstr "Enviar para o endereço de broadcast" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" -"Algumas vezes, somente uma das ferramentas funciona. Se uma delas falhar, " -"tente a outra" +"Algumas vezes, somente uma das duas ferramentas funciona. Se uma delas " +"falhar, tente a outra" msgid "Specifies the interface the WoL packet is sent on" msgstr "Especifica a interface para onde os pacotes de WoL serão enviados" diff --git a/applications/luci-app-wol/po/pt/wol.po b/applications/luci-app-wol/po/pt/wol.po index 540e54369..1cce43086 100644 --- a/applications/luci-app-wol/po/pt/wol.po +++ b/applications/luci-app-wol/po/pt/wol.po @@ -27,6 +27,9 @@ msgstr "Host a acordar" msgid "Network interface to use" msgstr "Interface de rede a usar" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/ro/wol.po b/applications/luci-app-wol/po/ro/wol.po index 154a3f9fb..71a06975c 100644 --- a/applications/luci-app-wol/po/ro/wol.po +++ b/applications/luci-app-wol/po/ro/wol.po @@ -28,6 +28,9 @@ msgstr "Statie pentru \"trezire\"" msgid "Network interface to use" msgstr "Interfata de retea pentru utilizare" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/ru/wol.po b/applications/luci-app-wol/po/ru/wol.po index 9a8436601..9d3e08d56 100644 --- a/applications/luci-app-wol/po/ru/wol.po +++ b/applications/luci-app-wol/po/ru/wol.po @@ -29,6 +29,9 @@ msgstr "Хост, который необходимо разбудить" msgid "Network interface to use" msgstr "Используемый сетевой интерфейс" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/sk/wol.po b/applications/luci-app-wol/po/sk/wol.po index eea59ebc3..bdaf4e70c 100644 --- a/applications/luci-app-wol/po/sk/wol.po +++ b/applications/luci-app-wol/po/sk/wol.po @@ -20,6 +20,9 @@ msgstr "" msgid "Network interface to use" msgstr "" +msgid "Send to broadcast address" +msgstr "" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" diff --git a/applications/luci-app-wol/po/sv/wol.po b/applications/luci-app-wol/po/sv/wol.po index f08f727a8..5b3e92347 100644 --- a/applications/luci-app-wol/po/sv/wol.po +++ b/applications/luci-app-wol/po/sv/wol.po @@ -23,6 +23,9 @@ msgstr "Värd som ska väckas upp" msgid "Network interface to use" msgstr "Nätverksgränssnitt som ska användas" +msgid "Send to broadcast address" +msgstr "" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" diff --git a/applications/luci-app-wol/po/templates/wol.pot b/applications/luci-app-wol/po/templates/wol.pot index 1305c5388..9593dea65 100644 --- a/applications/luci-app-wol/po/templates/wol.pot +++ b/applications/luci-app-wol/po/templates/wol.pot @@ -13,6 +13,9 @@ msgstr "" msgid "Network interface to use" msgstr "" +msgid "Send to broadcast address" +msgstr "" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" diff --git a/applications/luci-app-wol/po/tr/wol.po b/applications/luci-app-wol/po/tr/wol.po index 9be6934cf..684a9ae5f 100644 --- a/applications/luci-app-wol/po/tr/wol.po +++ b/applications/luci-app-wol/po/tr/wol.po @@ -25,6 +25,9 @@ msgstr "" msgid "Network interface to use" msgstr "" +msgid "Send to broadcast address" +msgstr "" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" diff --git a/applications/luci-app-wol/po/uk/wol.po b/applications/luci-app-wol/po/uk/wol.po index c09d144b3..703cd370f 100644 --- a/applications/luci-app-wol/po/uk/wol.po +++ b/applications/luci-app-wol/po/uk/wol.po @@ -30,6 +30,9 @@ msgstr "Комп'ютер, який необхідно розбудити" msgid "Network interface to use" msgstr "Використовувати мережевий інтерфейс" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/vi/wol.po b/applications/luci-app-wol/po/vi/wol.po index 9be6934cf..684a9ae5f 100644 --- a/applications/luci-app-wol/po/vi/wol.po +++ b/applications/luci-app-wol/po/vi/wol.po @@ -25,6 +25,9 @@ msgstr "" msgid "Network interface to use" msgstr "" +msgid "Send to broadcast address" +msgstr "" + msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" msgstr "" diff --git a/applications/luci-app-wol/po/zh-cn/wol.po b/applications/luci-app-wol/po/zh-cn/wol.po index 6d9cc7227..7bbae6117 100644 --- a/applications/luci-app-wol/po/zh-cn/wol.po +++ b/applications/luci-app-wol/po/zh-cn/wol.po @@ -25,6 +25,9 @@ msgstr "选择要唤醒的主机" msgid "Network interface to use" msgstr "选择使用的网络接口" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wol/po/zh-tw/wol.po b/applications/luci-app-wol/po/zh-tw/wol.po index ee290ec2e..553d2d04f 100644 --- a/applications/luci-app-wol/po/zh-tw/wol.po +++ b/applications/luci-app-wol/po/zh-tw/wol.po @@ -23,6 +23,9 @@ msgstr "要喚醒主機清單" msgid "Network interface to use" msgstr "使用的網路介面" +msgid "Send to broadcast address" +msgstr "" + #, fuzzy msgid "" "Sometimes only one of the two tools works. If one fails, try the other one" diff --git a/applications/luci-app-wshaper/luasrc/controller/wshaper.lua b/applications/luci-app-wshaper/luasrc/controller/wshaper.lua deleted file mode 100644 index 2d0fe484f..000000000 --- a/applications/luci-app-wshaper/luasrc/controller/wshaper.lua +++ /dev/null @@ -1,9 +0,0 @@ --- Copyright 2011 Manuel Munz <freifunk somakoma de> --- Licensed to the public under the Apache License 2.0. - -module "luci.controller.wshaper" - -function index() - entry({"admin", "network", "wshaper"}, cbi("wshaper"), _("Wondershaper"), 80) -end - diff --git a/applications/luci-app-wshaper/luasrc/model/cbi/wshaper.lua b/applications/luci-app-wshaper/luasrc/model/cbi/wshaper.lua deleted file mode 100644 index 6bd0255cd..000000000 --- a/applications/luci-app-wshaper/luasrc/model/cbi/wshaper.lua +++ /dev/null @@ -1,46 +0,0 @@ --- Copyright 2011 Manuel Munz <freifunk at somakoma dot de> --- Licensed to the public under the Apache License 2.0. - -require("luci.tools.webadmin") - -m = Map("wshaper", translate("Wondershaper"), - translate("Wondershaper shapes traffic to ensure low latencies for interactive traffic even when your " .. - "internet connection is highly saturated.")) - -s = m:section(NamedSection, "settings", "wshaper", translate("Wondershaper settings")) -s.anonymous = true - -network = s:option(ListValue, "network", translate("Interface")) -luci.tools.webadmin.cbi_add_networks(network) - -uplink = s:option(Value, "uplink", translate("Uplink"), translate("Upstream bandwidth in kbit/s")) -uplink.optional = false -uplink.datatype = "uinteger" -uplink.default = "240" - -uplink = s:option(Value, "downlink", translate("Downlink"), translate("Downstream bandwidth in kbit/s")) -uplink.optional = false -uplink.datatype = "uinteger" -uplink.default = "200" - -nopriohostsrc = s:option(DynamicList, "nopriohostsrc", translate("Low priority hosts (Source)"), translate("Host or Network in CIDR notation.")) -nopriohostsrc.optional = true -nopriohostsrc.datatype = ipaddr -nopriohostsrc.placeholder = "10.0.0.1/32" - -nopriohostdst = s:option(DynamicList, "nopriohostdst", translate("Low priority hosts (Destination)"), translate("Host or Network in CIDR notation.")) -nopriohostdst.optional = true -nopriohostdst.datatype = ipaddr -nopriohostdst.placeholder = "10.0.0.1/32" - -noprioportsrc = s:option(DynamicList, "noprioportsrc", translate("Low priority source ports")) -noprioportsrc.optional = true -noprioportsrc.datatype = "range(0,65535)" -noprioportsrc.placeholder = "21" - -noprioportdst = s:option(DynamicList, "noprioportdst", translate("Low priority destination ports")) -noprioportdst.optional = true -noprioportdst.datatype = "range(0,65535)" -noprioportdst.placeholder = "21" - -return m diff --git a/applications/luci-app-wshaper/po/ca/wshaper.po b/applications/luci-app-wshaper/po/ca/wshaper.po deleted file mode 100644 index 256038332..000000000 --- a/applications/luci-app-wshaper/po/ca/wshaper.po +++ /dev/null @@ -1,59 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-01 22:51+0200\n" -"PO-Revision-Date: 2014-07-01 03:51+0200\n" -"Last-Translator: Alex <alexhenrie24@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: ca\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Pootle 2.0.6\n" - -msgid "Downlink" -msgstr "Enllaç descendent" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Amplada de banda descendent en kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "Host o xarxa en notació CIDR." - -msgid "Interface" -msgstr "Interfície" - -msgid "Low priority destination ports" -msgstr "Ports de destí de baixa prioritat" - -msgid "Low priority hosts (Destination)" -msgstr "Hosts de baixa prioritat (destí)" - -msgid "Low priority hosts (Source)" -msgstr "Hosts de baixa prioritat (origen)" - -msgid "Low priority source ports" -msgstr "Ports d'origen de baixa prioritat" - -msgid "Uplink" -msgstr "Enllaç ascendent" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Amplada de banda ascendent en kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Ajusts del Wondershaper" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondershapter afaiçona el trànsit per assegurar latències baixes per a " -"trànsit interactiu encara que la vostra connexió de Internet estigui " -"altament saturada." diff --git a/applications/luci-app-wshaper/po/cs/wshaper.po b/applications/luci-app-wshaper/po/cs/wshaper.po deleted file mode 100644 index bca6c4e57..000000000 --- a/applications/luci-app-wshaper/po/cs/wshaper.po +++ /dev/null @@ -1,58 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2012-04-24 15:20+0200\n" -"Last-Translator: awm1 <awm1klimes8vladimir@gmail.com>\n" -"Language-Team: none\n" -"Language: cs\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Pootle 2.0.4\n" - -msgid "Downlink" -msgstr "Příchozí rychlost" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Rychlost stahování dat v kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "Adresa počítače nebo sítě v CIDR notaci." - -msgid "Interface" -msgstr "Síťové rozhraní" - -msgid "Low priority destination ports" -msgstr "Cílové porty s nízkou prioritou" - -msgid "Low priority hosts (Destination)" -msgstr "Adresy cílových počítačů s nízkou prioritou" - -msgid "Low priority hosts (Source)" -msgstr "Adresy zdrojových počítačů s nízkou prioritou" - -msgid "Low priority source ports" -msgstr "Zdrojové porty s nízkou prioritou" - -msgid "Uplink" -msgstr "Odchozí rychlost" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Rychlost odesílání dat v kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Nastavení skriptu Wondershaper" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Úkolem skriptu Wondershaper je řízení provozu na daném síťovém rozhraní. " -"Snaží se zajistit nízké přenosové zpoždění pro \"interaktivní\" síťový " -"provoz (např. SSH), a to především v okamžicích, kdy ostatní síťový provoz " -"zahltí linku." diff --git a/applications/luci-app-wshaper/po/de/wshaper.po b/applications/luci-app-wshaper/po/de/wshaper.po deleted file mode 100644 index 39dd61771..000000000 --- a/applications/luci-app-wshaper/po/de/wshaper.po +++ /dev/null @@ -1,58 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2011-10-18 12:28+0200\n" -"Last-Translator: Manuel <freifunk@somakoma.de>\n" -"Language-Team: \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Pootle 2.0.4\n" - -msgid "Downlink" -msgstr "Download" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Download Bandbreite in kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "Rechner oder Netzwerk in CIDR Schreibweise" - -msgid "Interface" -msgstr "Schnittstelle" - -msgid "Low priority destination ports" -msgstr "Zielports mit niedriger Priorität" - -msgid "Low priority hosts (Destination)" -msgstr "Zielrechner mit nideriger Priorität" - -msgid "Low priority hosts (Source)" -msgstr "Quellrechner mit neidriger Priorität" - -msgid "Low priority source ports" -msgstr "Quellports mit niedriger Priorität" - -msgid "Uplink" -msgstr "Upload" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Upload Bandbreite in kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Wondershaper Einstellungen" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondershaper ermöglicht mit Hilfe von Traffic Shaping niedrige Latenzzeiten " -"für interaktiven Internetverkehr selbst wenn die Internetverbindung extrem " -"ausgelastet ist." diff --git a/applications/luci-app-wshaper/po/el/wshaper.po b/applications/luci-app-wshaper/po/el/wshaper.po deleted file mode 100644 index 6d2f09284..000000000 --- a/applications/luci-app-wshaper/po/el/wshaper.po +++ /dev/null @@ -1,55 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-18 17:10+0200\n" -"PO-Revision-Date: 2012-03-18 17:10+0200\n" -"Last-Translator: Vasilis <acinonyx@openwrt.gr>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: el\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Pootle 2.0.4\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "Διεπαφή" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/en/wshaper.po b/applications/luci-app-wshaper/po/en/wshaper.po deleted file mode 100644 index b6858398c..000000000 --- a/applications/luci-app-wshaper/po/en/wshaper.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "" -msgstr "" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Project-Id-Version: LuCI\n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: en\n" -"X-Generator: Poedit 1.6.10\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/es/wshaper.po b/applications/luci-app-wshaper/po/es/wshaper.po deleted file mode 100644 index f562760d5..000000000 --- a/applications/luci-app-wshaper/po/es/wshaper.po +++ /dev/null @@ -1,58 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-04-16 01:00+0200\n" -"PO-Revision-Date: 2012-09-03 18:57+0200\n" -"Last-Translator: José Vicente <josevteg@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Pootle 2.0.6\n" - -msgid "Downlink" -msgstr "Enlace de bajada" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Ancho de banda de bajada en Kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "Máquina o red en notación CIDR." - -msgid "Interface" -msgstr "Interfaz" - -msgid "Low priority destination ports" -msgstr "Puertos de destino de prioridad baja" - -msgid "Low priority hosts (Destination)" -msgstr "Máquinas de prioridad baja (destino)" - -msgid "Low priority hosts (Source)" -msgstr "Máquinas de prioridad baja (origen)" - -msgid "Low priority source ports" -msgstr "Puertos de origen de prioridad baja" - -msgid "Uplink" -msgstr "Enlace de salida" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Ancho de banda de subida en Kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Configuración de Wondershaper" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondershaper modela el tráfico para asegurar latencias bajas al tráfico " -"interactivo incluso cuando la conexión a Internet esté muy saturada." diff --git a/applications/luci-app-wshaper/po/fr/wshaper.po b/applications/luci-app-wshaper/po/fr/wshaper.po deleted file mode 100644 index 2fc9f53c5..000000000 --- a/applications/luci-app-wshaper/po/fr/wshaper.po +++ /dev/null @@ -1,62 +0,0 @@ -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Project-Id-Version: LuCI\n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"X-Generator: Poedit 1.6.10\n" - -msgid "Downlink" -msgstr "Lien descendant (télé-chargement)" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Bande-passante descendante en kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "Hôte ou réseau en notation CIDR." - -msgid "Interface" -msgstr "Interface" - -msgid "Low priority destination ports" -msgstr "Ports-cible à faible priorité" - -msgid "Low priority hosts (Destination)" -msgstr "Hôtes-cible à faible priorité" - -msgid "Low priority hosts (Source)" -msgstr "Hôtes-source à faible priorité" - -msgid "Low priority source ports" -msgstr "Ports-source à faible priorité" - -msgid "Uplink" -msgstr "Lien montant (envois)" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Bande-passante montante en kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Paramètres Wondershaper" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" - -#~ msgid "" -#~ "Wondershaper uses traffic shaping to ensure low latencies for interactive " -#~ "traffic even when your internet connection is highly saturated." -#~ msgstr "" -#~ "Wondershaper gère la priorités entre les flux pour assurer une faible " -#~ "latence au trafic interactif même quand votre connexion Internet est très " -#~ "chargée." diff --git a/applications/luci-app-wshaper/po/he/wshaper.po b/applications/luci-app-wshaper/po/he/wshaper.po deleted file mode 100644 index f03d5df03..000000000 --- a/applications/luci-app-wshaper/po/he/wshaper.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "" -msgstr "" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Project-Id-Version: LuCI\n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: he\n" -"X-Generator: Poedit 1.6.10\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/hu/wshaper.po b/applications/luci-app-wshaper/po/hu/wshaper.po deleted file mode 100644 index 2377fa543..000000000 --- a/applications/luci-app-wshaper/po/hu/wshaper.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Downlink" -msgstr "Letöltés" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Letöltési sebesség kbit/másodberc-ben" - -msgid "Host or Network in CIDR notation." -msgstr "Gép vagy hálózat (CIDR jelöléssel)" - -msgid "Interface" -msgstr "Interfész" - -msgid "Low priority destination ports" -msgstr "Alacsony prioritású cél portok" - -msgid "Low priority hosts (Destination)" -msgstr "Alacson prioritású cél gépek" - -msgid "Low priority hosts (Source)" -msgstr "Alacsony prioritású forrás gépek" - -msgid "Low priority source ports" -msgstr "Alacson prioritású forrás portok" - -msgid "Uplink" -msgstr "Feltöltés" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Feltöltési sebesség kbit/másodperc-ben" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Wondershaper beállítások" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"A Wondershaper 'traffic shaping'-et használatával biztosítja az interaktív " -"forgalom alacsony késleletetését még akkor is ha az internet kapcsolat " -"erősen leterhelt." diff --git a/applications/luci-app-wshaper/po/it/wshaper.po b/applications/luci-app-wshaper/po/it/wshaper.po deleted file mode 100644 index 6a72c7e5d..000000000 --- a/applications/luci-app-wshaper/po/it/wshaper.po +++ /dev/null @@ -1,59 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-28 01:36+0200\n" -"PO-Revision-Date: 2013-02-03 14:07+0200\n" -"Last-Translator: Francesco <3gasas@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Pootle 2.0.6\n" - -msgid "Downlink" -msgstr "Collegamento discendente" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Larghezza di banda in downstream in kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "Host o rete in notazione CIDR." - -msgid "Interface" -msgstr "Interfaccia" - -msgid "Low priority destination ports" -msgstr "Porte di destinazione a bassa priorità" - -msgid "Low priority hosts (Destination)" -msgstr "Hosts a bassa priorità (Destinazione)" - -msgid "Low priority hosts (Source)" -msgstr "Hosts a bassa priorità (Fonte)" - -msgid "Low priority source ports" -msgstr "Porte sorgenti a bassa priorità" - -msgid "Uplink" -msgstr "Uplink" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Larghezza di banda in upstream in kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Impostazioni Wondershaper" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"WonderShaper usa la regolazione del traffico per garantire bassa latenza per " -"il traffico interattivo anche quando la connessione a Internet è molto " -"satura." diff --git a/applications/luci-app-wshaper/po/ja/wshaper.po b/applications/luci-app-wshaper/po/ja/wshaper.po deleted file mode 100644 index d58476cf3..000000000 --- a/applications/luci-app-wshaper/po/ja/wshaper.po +++ /dev/null @@ -1,58 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-17 18:28+0200\n" -"PO-Revision-Date: 2012-03-18 09:07+0200\n" -"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: ja\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.4\n" - -msgid "Downlink" -msgstr "下りリンク" - -msgid "Downstream bandwidth in kbit/s" -msgstr "下りリンク帯域 (kbit/sec)" - -msgid "Host or Network in CIDR notation." -msgstr "ホスト名またはCIDR表記のネットワークアドレス" - -msgid "Interface" -msgstr "インターフェース" - -msgid "Low priority destination ports" -msgstr "低優先度の宛先ポート" - -msgid "Low priority hosts (Destination)" -msgstr "低優先度の宛先ホスト" - -msgid "Low priority hosts (Source)" -msgstr "低優先度の送信元ホスト" - -msgid "Low priority source ports" -msgstr "低優先度の送信元ポート" - -msgid "Uplink" -msgstr "上りリンク" - -msgid "Upstream bandwidth in kbit/s" -msgstr "上りリンク帯域 (kbit/sec)" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Wondershaper 設定" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondweshaperは、インターネット接続が飽和状態の場合でも、低いレイテンシ・円滑" -"な通信を実現するためにトラフィック・シェーピングを行います。" diff --git a/applications/luci-app-wshaper/po/ms/wshaper.po b/applications/luci-app-wshaper/po/ms/wshaper.po deleted file mode 100644 index ede138662..000000000 --- a/applications/luci-app-wshaper/po/ms/wshaper.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "" -msgstr "" -"Plural-Forms: nplurals=1; plural=0;\n" -"Project-Id-Version: LuCI\n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ms\n" -"X-Generator: Poedit 1.6.10\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/no/wshaper.po b/applications/luci-app-wshaper/po/no/wshaper.po deleted file mode 100644 index 1b1ab329e..000000000 --- a/applications/luci-app-wshaper/po/no/wshaper.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "" -msgstr "" -"Language: nn\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Project-Id-Version: LuCI\n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.6.10\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/pl/wshaper.po b/applications/luci-app-wshaper/po/pl/wshaper.po deleted file mode 100644 index a85bf0044..000000000 --- a/applications/luci-app-wshaper/po/pl/wshaper.po +++ /dev/null @@ -1,59 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-04-14 14:15+0200\n" -"PO-Revision-Date: 2012-04-14 17:21+0200\n" -"Last-Translator: Tomecki <przykryweczka@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Pootle 2.0.4\n" - -msgid "Downlink" -msgstr "Downlink" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Przepustowość pobierania w kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "Adres hosta lub adres sieci w notacji CIDR" - -msgid "Interface" -msgstr "Interfejs" - -msgid "Low priority destination ports" -msgstr "Porty docelowe o niskim priorytecie" - -msgid "Low priority hosts (Destination)" -msgstr "Hosty docelowe o niskim priorytecie" - -msgid "Low priority hosts (Source)" -msgstr "Hosty źródłowe o niskim priorytecie" - -msgid "Low priority source ports" -msgstr "Porty źródłowe o niskim priorytecie" - -msgid "Uplink" -msgstr "Uplink" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Przepustowość wysyłania w kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Ustawienia Wondershaper" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondershaper wykorzystuje kształtowanie ruchu aby zapewnić niskie opóźnienia " -"nawet wtedy, gdy Twoje połączenie internetowe jest wysycone." diff --git a/applications/luci-app-wshaper/po/pt-br/wshaper.po b/applications/luci-app-wshaper/po/pt-br/wshaper.po deleted file mode 100644 index f973ebb5c..000000000 --- a/applications/luci-app-wshaper/po/pt-br/wshaper.po +++ /dev/null @@ -1,59 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-18 19:32+0200\n" -"PO-Revision-Date: 2011-10-18 19:39+0200\n" -"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: pt_BR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Pootle 2.0.4\n" - -msgid "Downlink" -msgstr "Velocidade para baixar (downlink)" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Taxa de transferência para baixar em kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "Equipamento ou Rede na notação CIDR." - -msgid "Interface" -msgstr "Interface" - -msgid "Low priority destination ports" -msgstr "Portas de destino de baixa prioridade" - -msgid "Low priority hosts (Destination)" -msgstr "Equipamentos de baixa prioridade (Destino)" - -msgid "Low priority hosts (Source)" -msgstr "Equipamentos de baixa prioridade (Origem)" - -msgid "Low priority source ports" -msgstr "Portas de origem de baixa prioridade" - -msgid "Uplink" -msgstr "Velocidade para subir (uplink)" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Taxa de transferência para subir em kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Configuração do Wondershaper" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondershaper usa o controle de tráfego para garantir baixa latência para " -"tráfego interativo mesmo quando sua conexão com a internet está extremamente " -"saturada." diff --git a/applications/luci-app-wshaper/po/pt/wshaper.po b/applications/luci-app-wshaper/po/pt/wshaper.po deleted file mode 100644 index 96a7be816..000000000 --- a/applications/luci-app-wshaper/po/pt/wshaper.po +++ /dev/null @@ -1,55 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-05-31 12:13+0200\n" -"PO-Revision-Date: 2013-05-31 12:15+0200\n" -"Last-Translator: joao.f.vieira <joao.f.vieira@gmail.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: pt\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Pootle 2.0.6\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "Interface" - -msgid "Low priority destination ports" -msgstr "Porta de destino com baixa prioridade" - -msgid "Low priority hosts (Destination)" -msgstr "Hosts com baixa prioridade (Destino)" - -msgid "Low priority hosts (Source)" -msgstr "Hosts com baixa prioridade (Origem)" - -msgid "Low priority source ports" -msgstr "Portas de origem com baixa prioridade" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/ro/wshaper.po b/applications/luci-app-wshaper/po/ro/wshaper.po deleted file mode 100644 index d2569f6d2..000000000 --- a/applications/luci-app-wshaper/po/ro/wshaper.po +++ /dev/null @@ -1,56 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-28 18:45+0200\n" -"PO-Revision-Date: 2014-06-28 18:46+0200\n" -"Last-Translator: xxvirusxx <condor20_05@yahoo.it>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: ro\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " -"20)) ? 1 : 2);;\n" -"X-Generator: Pootle 2.0.6\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/ru/wshaper.po b/applications/luci-app-wshaper/po/ru/wshaper.po deleted file mode 100644 index 1984aacb6..000000000 --- a/applications/luci-app-wshaper/po/ru/wshaper.po +++ /dev/null @@ -1,61 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: LuCI: wsharper\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-01-26 15:09+0200\n" -"PO-Revision-Date: 2012-08-15 11:53+0300\n" -"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n" -"Language-Team: Russian <x12ozmouse@ya.ru>\n" -"Language: ru\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"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.4\n" -"X-Poedit-SourceCharset: UTF-8\n" - -msgid "Downlink" -msgstr "Нисходящий канал" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Ширина полосы пропускания прямого канала (кбит/с)" - -msgid "Host or Network in CIDR notation." -msgstr "Хост или сеть в нотации CIDR." - -msgid "Interface" -msgstr "Интерфейс" - -msgid "Low priority destination ports" -msgstr "Низкоприоритетные порты назначения" - -msgid "Low priority hosts (Destination)" -msgstr "Низкоприоритетные хосты назначения" - -msgid "Low priority hosts (Source)" -msgstr "Низкоприоритетные хосты источника" - -msgid "Low priority source ports" -msgstr "Низкоприоритетные порты источника" - -msgid "Uplink" -msgstr "Восходящий канал" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Пропускная способность обратного канала (кбит/c)" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Установки Wondershaper" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondershaper использует формирование трафика для обеспечения низких задержек " -"интерактивного трафика даже в случае высокой загруженности интернет-" -"соединения." diff --git a/applications/luci-app-wshaper/po/sk/wshaper.po b/applications/luci-app-wshaper/po/sk/wshaper.po deleted file mode 100644 index 4e03aa8f8..000000000 --- a/applications/luci-app-wshaper/po/sk/wshaper.po +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: PACKAGE VERSION\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/sv/wshaper.po b/applications/luci-app-wshaper/po/sv/wshaper.po deleted file mode 100644 index 4f0fc5346..000000000 --- a/applications/luci-app-wshaper/po/sv/wshaper.po +++ /dev/null @@ -1,53 +0,0 @@ -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: PACKAGE VERSION\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: sv\n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Downlink" -msgstr "Nerladdningslänk" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Nerströms bandbredd i kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "Värd eller Nätverk i CIDR-noteringen" - -msgid "Interface" -msgstr "Gränssnitt" - -msgid "Low priority destination ports" -msgstr "Destinations-portar med låg prioritet" - -msgid "Low priority hosts (Destination)" -msgstr "Värdar med låg prioritet (Destination)" - -msgid "Low priority hosts (Source)" -msgstr "Värdar med låg prioritet (Källa)" - -msgid "Low priority source ports" -msgstr "Käll-portar med låg prioritet" - -msgid "Uplink" -msgstr "Uppladdningslänk" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Bandbredd uppströms i kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Inställningar för Wondershaper" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondershaper formar trafiken för att säkerställa låga latenser för " -"interaktiv trafik även när din internetanslutning är mättad som mest." diff --git a/applications/luci-app-wshaper/po/templates/wshaper.pot b/applications/luci-app-wshaper/po/templates/wshaper.pot deleted file mode 100644 index 42de011b3..000000000 --- a/applications/luci-app-wshaper/po/templates/wshaper.pot +++ /dev/null @@ -1,43 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/tr/wshaper.po b/applications/luci-app-wshaper/po/tr/wshaper.po deleted file mode 100644 index 7c0acb06d..000000000 --- a/applications/luci-app-wshaper/po/tr/wshaper.po +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/uk/wshaper.po b/applications/luci-app-wshaper/po/uk/wshaper.po deleted file mode 100644 index 94d20df99..000000000 --- a/applications/luci-app-wshaper/po/uk/wshaper.po +++ /dev/null @@ -1,58 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2012-04-28 21:54+0200\n" -"Last-Translator: Yurii <yuripet@gmail.com>\n" -"Language-Team: none\n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"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 "Downlink" -msgstr "Прямий канал" - -msgid "Downstream bandwidth in kbit/s" -msgstr "Ширина смуги пропускання прямого каналу (кбіт/с)" - -msgid "Host or Network in CIDR notation." -msgstr "Вузол або мережа в нотації CIDR." - -msgid "Interface" -msgstr "Інтерфейс" - -msgid "Low priority destination ports" -msgstr "Низькопріоритетні порти призначення" - -msgid "Low priority hosts (Destination)" -msgstr "Низькопріоритетні вузли призначення" - -msgid "Low priority hosts (Source)" -msgstr "Низькопріоритетні вузли джерела" - -msgid "Low priority source ports" -msgstr "Низькопріоритетні порти джерела" - -msgid "Uplink" -msgstr "Зворотній канал" - -msgid "Upstream bandwidth in kbit/s" -msgstr "Ширина смуги пропускання зворотного каналу (кбіт/c)" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Налаштування Wondershaper" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondershaper використовує формування трафіку для забезпечення низької " -"затримки інтерактивного трафіку, навіть якщо ваше з'єднання з інтернетом " -"дуже насичене." diff --git a/applications/luci-app-wshaper/po/vi/wshaper.po b/applications/luci-app-wshaper/po/vi/wshaper.po deleted file mode 100644 index e0b8e5324..000000000 --- a/applications/luci-app-wshaper/po/vi/wshaper.po +++ /dev/null @@ -1,54 +0,0 @@ -msgid "" -msgstr "" -"Plural-Forms: nplurals=1; plural=0;\n" -"Project-Id-Version: LuCI\n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: vi\n" -"X-Generator: Poedit 1.6.10\n" - -msgid "Downlink" -msgstr "" - -msgid "Downstream bandwidth in kbit/s" -msgstr "" - -msgid "Host or Network in CIDR notation." -msgstr "" - -msgid "Interface" -msgstr "" - -msgid "Low priority destination ports" -msgstr "" - -msgid "Low priority hosts (Destination)" -msgstr "" - -msgid "Low priority hosts (Source)" -msgstr "" - -msgid "Low priority source ports" -msgstr "" - -msgid "Uplink" -msgstr "" - -msgid "Upstream bandwidth in kbit/s" -msgstr "" - -msgid "Wondershaper" -msgstr "" - -msgid "Wondershaper settings" -msgstr "" - -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" diff --git a/applications/luci-app-wshaper/po/zh-cn/wshaper.po b/applications/luci-app-wshaper/po/zh-cn/wshaper.po deleted file mode 100644 index a35ccd02d..000000000 --- a/applications/luci-app-wshaper/po/zh-cn/wshaper.po +++ /dev/null @@ -1,58 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 08:25+0200\n" -"PO-Revision-Date: 2013-10-10 20:15+0200\n" -"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" - -msgid "Downlink" -msgstr "下载链接" - -msgid "Downstream bandwidth in kbit/s" -msgstr "下载带宽kbit/s" - -msgid "Host or Network in CIDR notation." -msgstr "主机或网络的CIDR标记。" - -msgid "Interface" -msgstr "端口" - -msgid "Low priority destination ports" -msgstr "低优先级目标端口" - -msgid "Low priority hosts (Destination)" -msgstr "低优先级目标主机" - -msgid "Low priority hosts (Source)" -msgstr "低优先级源主机" - -msgid "Low priority source ports" -msgstr "低优先级源端口" - -msgid "Uplink" -msgstr "上联" - -msgid "Upstream bandwidth in kbit/s" -msgstr "上行带宽kbit/s" - -msgid "Wondershaper" -msgstr "Wondershaper" - -msgid "Wondershaper settings" -msgstr "Wondershaper设置" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"Wondershaper通过流量匹配,确保低延时的交互数据包,甚至当你的互联网连接是高度饱" -"和。" diff --git a/applications/luci-app-wshaper/po/zh-tw/wshaper.po b/applications/luci-app-wshaper/po/zh-tw/wshaper.po deleted file mode 100644 index 18148259f..000000000 --- a/applications/luci-app-wshaper/po/zh-tw/wshaper.po +++ /dev/null @@ -1,56 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2014-05-14 12:40+0200\n" -"Last-Translator: omnistack <omnistack@gmail.com>\n" -"Language-Team: none\n" -"Language: zh_TW\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Pootle 2.0.6\n" - -msgid "Downlink" -msgstr "下載" - -msgid "Downstream bandwidth in kbit/s" -msgstr "以 kbit/s表示的下載頻寬" - -msgid "Host or Network in CIDR notation." -msgstr "CIDR無類別域間路由中的主機或網路" - -msgid "Interface" -msgstr "介面" - -msgid "Low priority destination ports" -msgstr "低優先權目地埠號" - -msgid "Low priority hosts (Destination)" -msgstr "低優先權主機(目的地)" - -msgid "Low priority hosts (Source)" -msgstr "低優先權主機(來源)" - -msgid "Low priority source ports" -msgstr "低優先權來源埠號" - -msgid "Uplink" -msgstr "上傳" - -msgid "Upstream bandwidth in kbit/s" -msgstr "以kbit/s表示的上傳頻寬" - -msgid "Wondershaper" -msgstr "Wondershaper頻寬管理" - -msgid "Wondershaper settings" -msgstr "Wondershaper設定值" - -#, fuzzy -msgid "" -"Wondershaper shapes traffic to ensure low latencies for interactive traffic " -"even when your internet connection is highly saturated." -msgstr "" -"既使你的網路連線達到高飽和, Wondershaper採用流量銳化塑形以針對未知的流量保證" -"低延遲" diff --git a/applications/luci-app-wshaper/root/etc/uci-defaults/40_wshaper b/applications/luci-app-wshaper/root/etc/uci-defaults/40_wshaper deleted file mode 100644 index 918dff280..000000000 --- a/applications/luci-app-wshaper/root/etc/uci-defaults/40_wshaper +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@wshaper[-1] - set ucitrack.wshaper="wshaper" - set ucitrack.wshaper.exec='/etc/init.d/wshaper start' - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 |