From: Hannu Nyman
Date: Sun, 6 Aug 2017 05:49:19 +0000 (+0300)
Subject: Merge pull request #1281 from dibdot/travelmate
X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=1dd49b93c768c507e1de8c15295fd6337780107a;hp=4e80499a023fb195c7c897841473f526ffd0c7fa
Merge pull request #1281 from dibdot/travelmate
luci-app-travelmate: bugfix
---
diff --git a/applications/luci-app-adblock/luasrc/controller/adblock.lua b/applications/luci-app-adblock/luasrc/controller/adblock.lua
index 03b9fc20e..efa99b5b8 100644
--- a/applications/luci-app-adblock/luasrc/controller/adblock.lua
+++ b/applications/luci-app-adblock/luasrc/controller/adblock.lua
@@ -5,7 +5,7 @@ module("luci.controller.adblock", package.seeall)
local fs = require("nixio.fs")
local util = require("luci.util")
-local template = require("luci.template")
+local templ = require("luci.template")
local i18n = require("luci.i18n")
function index()
@@ -19,17 +19,13 @@ function index()
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", "query"}, template("adblock/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
-
-function query()
- template.render("adblock/query", {title = i18n.translate("Adblock Domain Query")})
+ templ.render("adblock/logread", {title = i18n.translate("Adblock Logfile"), content = logfile})
end
function queryData(domain)
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
index 59cd1e80f..ef70100e4 100644
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua
@@ -25,6 +25,7 @@ end
m = SimpleForm("input", nil)
m:append(Template("adblock/config_css"))
+m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
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
index 1607f1440..1d89485e7 100644
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua
@@ -14,6 +14,7 @@ end
m = SimpleForm("input", nil)
m:append(Template("adblock/config_css"))
+m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
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
index 68f9c8897..aa5701487 100644
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
@@ -21,6 +21,8 @@ if parse ~= nil then
dnspath = "/var/lib/unbound"
elseif backend == "named" then
dnspath = "/var/lib/bind"
+ elseif backend == "kresd" then
+ dnspath = "/tmp/kresd"
end
end
end
@@ -180,7 +182,7 @@ e2 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
e2.default = e2.disabled
e2.rmempty = false
-e3 = e:option(Flag, "adb_manmode", translate("Manual mode"),
+e3 = e:option(Flag, "adb_manmode", translate("Manual / Backup mode"),
translate("Do not automatically update blocklists during startup, use blocklist backups instead."))
e3.default = e3.disabled
e3.rmempty = false
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
index 10a593859..a3659eb46 100644
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
@@ -24,6 +24,7 @@ end
m = SimpleForm("input", nil)
m:append(Template("adblock/config_css"))
+m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
diff --git a/applications/luci-app-adblock/po/ja/adblock.po b/applications/luci-app-adblock/po/ja/adblock.po
index 07fd783ed..b3e139e12 100644
--- a/applications/luci-app-adblock/po/ja/adblock.po
+++ b/applications/luci-app-adblock/po/ja/adblock.po
@@ -8,15 +8,12 @@ msgstr ""
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.2\n"
+"X-Generator: Poedit 2.0.3\n"
"Language: ja\n"
msgid "Adblock"
msgstr "Adblock"
-msgid "Adblock Domain Query"
-msgstr "Adblock ãã¡ã¤ã³æ¤ç´¢"
-
msgid "Adblock Logfile"
msgstr "Adblock ãã°ãã¡ã¤ã«"
@@ -137,8 +134,8 @@ msgstr "æçµå®è¡æ¥æ"
msgid "Loading"
msgstr "èªè¾¼ä¸"
-msgid "Manual mode"
-msgstr "ããã¥ã¢ã« ã¢ã¼ã"
+msgid "Manual / Backup mode"
+msgstr "æå / ããã¯ã¢ãã ã¢ã¼ã"
msgid "No"
msgstr "ããã"
@@ -189,6 +186,9 @@ msgstr "å®è¡æ
å ±"
msgid "SSL req."
msgstr "SSL å¿
é "
+msgid "Save"
+msgstr "ä¿å"
+
msgid ""
"Space separated list of interfaces that trigger adblock processing. To "
"disable event driven (re-)starts remove all entries."
@@ -201,15 +201,15 @@ msgid "Status"
msgstr "ã¹ãã¼ã¿ã¹"
msgid "Suspend / Resume adblock"
-msgstr "Adblock ã®ä¸æåæ¢/åé"
+msgstr "Adblock ã®ä¸æåæ¢ / åé"
msgid "Suspend adblock"
msgstr "Adblock ã®ä¸æåæ¢"
msgid "The file size is too large for online editing in LuCI (> 512 KB)."
msgstr ""
-"ãã¡ã¤ã« ãµã¤ãºã大ããããããã LuCI ä¸ã§ãªã³ã©ã¤ã³ç·¨éã§ãã¾ããï¼> "
-"512 KBï¼ã"
+"ãã¡ã¤ã« ãµã¤ãºã大ããããï¼512 KBè¶
ï¼ããã LuCI ä¸ã§ãªã³ã©ã¤ã³ç·¨éã§ãã¾ã"
+"ãã"
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
@@ -253,7 +253,7 @@ msgid "View Logfile"
msgstr "ãã°ãã¡ã¤ã«ãè¦ã"
msgid "Waiting for command to complete..."
-msgstr "ã³ãã³ãã®å®äºããå¾
ã¡ãã ãã..."
+msgstr "ã³ãã³ãå®è¡ä¸ã§ã..."
msgid "Yes"
msgstr "ã¯ã"
diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po
index 044352da6..586c31801 100644
--- a/applications/luci-app-adblock/po/pt-br/adblock.po
+++ b/applications/luci-app-adblock/po/pt-br/adblock.po
@@ -15,9 +15,6 @@ msgstr ""
msgid "Adblock"
msgstr "Adblock"
-msgid "Adblock Domain Query"
-msgstr ""
-
msgid "Adblock Logfile"
msgstr ""
@@ -127,7 +124,7 @@ msgstr ""
msgid "Loading"
msgstr ""
-msgid "Manual mode"
+msgid "Manual / Backup mode"
msgstr ""
msgid "No"
@@ -176,6 +173,9 @@ msgstr ""
msgid "SSL req."
msgstr ""
+msgid "Save"
+msgstr ""
+
msgid ""
"Space separated list of interfaces that trigger adblock processing. To "
"disable event driven (re-)starts remove all entries."
diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po
index cf92dbddc..a70a1a1d6 100644
--- a/applications/luci-app-adblock/po/sv/adblock.po
+++ b/applications/luci-app-adblock/po/sv/adblock.po
@@ -4,9 +4,6 @@ msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "Adblock"
msgstr "Adblock"
-msgid "Adblock Domain Query"
-msgstr ""
-
msgid "Adblock Logfile"
msgstr "Adblock's loggfil"
@@ -117,7 +114,7 @@ msgstr ""
msgid "Loading"
msgstr "Laddar"
-msgid "Manual mode"
+msgid "Manual / Backup mode"
msgstr ""
msgid "No"
@@ -164,6 +161,9 @@ msgstr "Information om kör-tid"
msgid "SSL req."
msgstr ""
+msgid "Save"
+msgstr ""
+
msgid ""
"Space separated list of interfaces that trigger adblock processing. To "
"disable event driven (re-)starts remove all entries."
diff --git a/applications/luci-app-adblock/po/templates/adblock.pot b/applications/luci-app-adblock/po/templates/adblock.pot
index 5b5a96866..3b61036e0 100644
--- a/applications/luci-app-adblock/po/templates/adblock.pot
+++ b/applications/luci-app-adblock/po/templates/adblock.pot
@@ -4,9 +4,6 @@ msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "Adblock"
msgstr ""
-msgid "Adblock Domain Query"
-msgstr ""
-
msgid "Adblock Logfile"
msgstr ""
@@ -114,7 +111,7 @@ msgstr ""
msgid "Loading"
msgstr ""
-msgid "Manual mode"
+msgid "Manual / Backup mode"
msgstr ""
msgid "No"
@@ -161,6 +158,9 @@ msgstr ""
msgid "SSL req."
msgstr ""
+msgid "Save"
+msgstr ""
+
msgid ""
"Space separated list of interfaces that trigger adblock processing. To "
"disable event driven (re-)starts remove all entries."
diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po
index 46dc99e66..534e8f5cc 100644
--- a/applications/luci-app-adblock/po/zh-cn/adblock.po
+++ b/applications/luci-app-adblock/po/zh-cn/adblock.po
@@ -16,9 +16,6 @@ msgstr ""
msgid "Adblock"
msgstr "Adblock"
-msgid "Adblock Domain Query"
-msgstr ""
-
msgid "Adblock Logfile"
msgstr "Adblock æ¥å¿æ件"
@@ -126,7 +123,7 @@ msgstr ""
msgid "Loading"
msgstr "å è½½ä¸"
-msgid "Manual mode"
+msgid "Manual / Backup mode"
msgstr ""
msgid "No"
@@ -173,6 +170,9 @@ msgstr "è¿è¡ä¿¡æ¯"
msgid "SSL req."
msgstr ""
+msgid "Save"
+msgstr ""
+
msgid ""
"Space separated list of interfaces that trigger adblock processing. To "
"disable event driven (re-)starts remove all entries."
diff --git a/applications/luci-app-aria2/po/sv/aria2.po b/applications/luci-app-aria2/po/sv/aria2.po
index a7f41f250..3a129364c 100644
--- a/applications/luci-app-aria2/po/sv/aria2.po
+++ b/applications/luci-app-aria2/po/sv/aria2.po
@@ -1,5 +1,5 @@
msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "\"Falloc\" is not available in all cases."
msgstr ""
diff --git a/applications/luci-app-attendedsysupgrade/Makefile b/applications/luci-app-attendedsysupgrade/Makefile
new file mode 100644
index 000000000..32992e19d
--- /dev/null
+++ b/applications/luci-app-attendedsysupgrade/Makefile
@@ -0,0 +1,11 @@
+# See /LICENSE for more information.
+# This is free software, licensed under the GNU General Public License v2.
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI support for attended sysupgrades
+LUCI_DEPENDS:=+luci-base +rpcd-mod-attendedsysupgrade
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua b/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua
new file mode 100644
index 000000000..1bd050af6
--- /dev/null
+++ b/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua
@@ -0,0 +1,5 @@
+module("luci.controller.attendedsysupgrade", package.seeall)
+
+function index()
+ entry({"admin", "system", "attended_sysupgrade"}, template("attendedsysupgrade"), _("Attended Sysupgrade"), 1)
+end
diff --git a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
new file mode 100644
index 000000000..4f8bf7cc9
--- /dev/null
+++ b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
@@ -0,0 +1,266 @@
+<%+header%>
+<%:Attended Sysupgrade%>
+
+
+
+
+
+<%+footer%>
diff --git a/applications/luci-app-clamav/po/sv/clamav.po b/applications/luci-app-clamav/po/sv/clamav.po
index 589d5f9aa..37de249e5 100644
--- a/applications/luci-app-clamav/po/sv/clamav.po
+++ b/applications/luci-app-clamav/po/sv/clamav.po
@@ -1,5 +1,5 @@
msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "10"
msgstr "10"
diff --git a/applications/luci-app-commands/po/sv/commands.po b/applications/luci-app-commands/po/sv/commands.po
index 8cb1923e2..a944fdb63 100644
--- a/applications/luci-app-commands/po/sv/commands.po
+++ b/applications/luci-app-commands/po/sv/commands.po
@@ -104,8 +104,8 @@ msgid ""
"This page allows you to configure custom shell commands which can be easily "
"invoked from the web interface."
msgstr ""
-"Den här sidan tillåter dig att ställa in anpassade skalkommandon som lättast kan "
-"åberopas från webbgränssnittet."
+"Den här sidan tillåter dig att ställa in anpassade skalkommandon som lättast "
+"kan åberopas från webbgränssnittet."
msgid "Waiting for command to complete..."
msgstr "Väntar på att kommandot ska slutföras..."
diff --git a/applications/luci-app-ddns/po/sv/ddns.po b/applications/luci-app-ddns/po/sv/ddns.po
index 780a2f9c8..9373fea3a 100644
--- a/applications/luci-app-ddns/po/sv/ddns.po
+++ b/applications/luci-app-ddns/po/sv/ddns.po
@@ -1,5 +1,5 @@
msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "&"
msgstr "&"
@@ -237,8 +237,8 @@ msgid ""
"GNU Wget will use the IP of given network, cURL will use the physical "
"interface."
msgstr ""
-"GNU Wget kommer att använda IP-adressen för det angivna nätverket, cURL kommer att använda det fysiska "
-"gränssnittet."
+"GNU Wget kommer att använda IP-adressen för det angivna nätverket, cURL "
+"kommer att använda det fysiska gränssnittet."
msgid "Global Settings"
msgstr "Globala inställningar"
@@ -277,7 +277,8 @@ msgid "IPv6-Address"
msgstr "IPv6-adress"
msgid "If both cURL and GNU Wget are installed, Wget is used by default."
-msgstr "Om både cURL och GNU Wget är installerade så används Wget som standard."
+msgstr ""
+"Om både cURL och GNU Wget är installerade så används Wget som standard."
msgid ""
"If this service section is disabled it could not be started.
Neither "
@@ -319,7 +320,9 @@ msgid ""
msgstr ""
msgid "It is NOT recommended for casual users to change settings on this page."
-msgstr "Det är INTE rekommenderat för vanliga användare att ändra inställningar på den här sidan."
+msgstr ""
+"Det är INTE rekommenderat för vanliga användare att ändra inställningar på "
+"den här sidan."
msgid "Last Update"
msgstr "Senaste uppdateringen"
@@ -604,7 +607,9 @@ msgid "cURL without Proxy Support"
msgstr "cURL utan Proxy-stöd"
msgid "can not detect local IP. Please select a different Source combination"
-msgstr "kan inte upptäcka lokal IP-adress. Vänligen välj en annorlunda Käll-kombination"
+msgstr ""
+"kan inte upptäcka lokal IP-adress. Vänligen välj en annorlunda Käll-"
+"kombination"
msgid "can not resolve host:"
msgstr "kan inte avgöra värd:"
diff --git a/applications/luci-app-diag-core/po/sv/diag_core.po b/applications/luci-app-diag-core/po/sv/diag_core.po
index b5679655d..c31433287 100644
--- a/applications/luci-app-diag-core/po/sv/diag_core.po
+++ b/applications/luci-app-diag-core/po/sv/diag_core.po
@@ -29,5 +29,5 @@ msgid ""
"With this menu you can configure network diagnostics, such as network device "
"scans and ping tests."
msgstr ""
-"Med den här menyn så kan du ställa in nätverksdiagnostik så som igenomsökningar och "
-"ping-tester för nätverksenheten."
+"Med den här menyn så kan du ställa in nätverksdiagnostik så som "
+"igenomsökningar och ping-tester för nätverksenheten."
diff --git a/applications/luci-app-mwan3/po/ja/mwan3.po b/applications/luci-app-mwan3/po/ja/mwan3.po
index 925912e3c..f6a70c356 100644
--- a/applications/luci-app-mwan3/po/ja/mwan3.po
+++ b/applications/luci-app-mwan3/po/ja/mwan3.po
@@ -7,7 +7,7 @@ msgstr ""
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.2\n"
+"X-Generator: Poedit 2.0.3\n"
"Last-Translator: INAGAKI Hiroshi \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Language: ja\n"
@@ -47,7 +47,7 @@ msgid "Check routing table"
msgstr "ã«ã¼ãã£ã³ã° ãã¼ãã«ã®ãã§ãã¯"
msgid "Collecting data..."
-msgstr ""
+msgstr "ãã¼ã¿åéä¸ã§ã..."
msgid "Configuration"
msgstr "è¨å®"
@@ -77,7 +77,7 @@ msgid "Diagnostics"
msgstr "診ææ©è½"
msgid "Disabled"
-msgstr ""
+msgstr "ç¡å¹"
msgid ""
"Downed interface will be deemed up after this many successful ping tests"
@@ -89,7 +89,7 @@ msgid "Enabled"
msgstr "æå¹"
msgid "Error collecting troubleshooting information"
-msgstr ""
+msgstr "ãã©ãã«ã·ã¥ã¼ãã£ã³ã°æ
å ±ã®åéã¨ã©ã¼"
msgid "Errors"
msgstr "ã¨ã©ã¼"
@@ -145,7 +145,7 @@ msgid "Internet Protocol"
msgstr "ã¤ã³ã¿ã¼ããã ãããã³ã«"
msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
-msgstr ""
+msgstr "ç´è¿ã® MWAN ã·ã¹ãã ãã°ï¼50è¡ï¼ã§ããä¸çªä¸ãææ°ã®è¡ã§ã:"
msgid "Last resort"
msgstr "æçµæ段"
@@ -222,7 +222,7 @@ msgstr ""
"ï¼ä¾: \"1024:2048\"ï¼ããã¯ãªã¼ãã¼ã·ã§ã³ç¡ãã§æå®ãããã¨ãã§ãã¾ãã"
msgid "Member"
-msgstr ""
+msgstr "ã¡ã³ãã¼"
msgid "Member used"
msgstr "使ç¨ãããã¡ã³ãã¼"
@@ -260,28 +260,28 @@ msgid "No"
msgstr "ããã"
msgid "No MWAN interfaces found"
-msgstr ""
+msgstr "MWAN ã¤ã³ã¿ã¼ãã§ã¼ã¹ãè¦ã¤ããã¾ãã"
msgid "No MWAN systemlog history found"
-msgstr ""
+msgstr "MWAN ã·ã¹ãã ãã°ã®å±¥æ´ãè¦ã¤ããã¾ãã"
msgid "No detailed status information available"
-msgstr ""
+msgstr "詳細ã¹ãã¼ã¿ã¹æ
å ±ã¯å©ç¨ã§ãã¾ãã"
msgid "No diagnostic results returned"
-msgstr ""
+msgstr "診æçµæãããã¾ãã"
msgid "No protocol specified"
-msgstr ""
+msgstr "ãããã³ã«ãè¨å®ããã¦ãã¾ãã"
msgid "Offline"
-msgstr ""
+msgstr "ãªãã©ã¤ã³"
msgid "Online (tracking active)"
-msgstr ""
+msgstr "ãªã³ã©ã¤ã³ï¼è¿½è·¡å®è¡ä¸ï¼"
msgid "Online (tracking off)"
-msgstr ""
+msgstr "ãªã³ã©ã¤ã³ï¼è¿½è·¡ãªãï¼"
msgid "Overview"
msgstr "æ¦è¦"
@@ -332,7 +332,7 @@ msgstr ""
"ã¿ã¼ãã§ã¼ã¹ãã¡ã³ãã¼ãã«ã¼ã«ã¨åãååã使ç¨ãããã¨ã¯ã§ãã¾ããã"
msgid "Policy"
-msgstr ""
+msgstr "ããªã·ã¼"
msgid "Policy assigned"
msgstr "ã¢ãµã¤ã³æ¸ã¿ããªã·ã¼"
@@ -353,7 +353,7 @@ msgid "Restore..."
msgstr "復å
..."
msgid "Rule"
-msgstr ""
+msgstr "ã«ã¼ã«"
msgid "Rules"
msgstr "ã«ã¼ã«"
@@ -575,10 +575,10 @@ msgstr ""
"ãã¾ããï¼ãããã³ã«ãæå®ãç´ãã¦ãã ããï¼"
msgid "Waiting for MWAN to %s..."
-msgstr ""
+msgstr "MWAN ã® %s ãå¾
ã£ã¦ãã¾ã..."
msgid "Waiting for diagnostic results..."
-msgstr ""
+msgstr "診æçµæãå¾
ã£ã¦ãã¾ã..."
msgid "Weight"
msgstr "ã¦ã¨ã¤ã"
@@ -614,13 +614,13 @@ msgid "never"
msgstr "never"
msgid "restart"
-msgstr ""
+msgstr "åèµ·å"
msgid "start"
-msgstr ""
+msgstr "èµ·å"
msgid "stop"
-msgstr ""
+msgstr "åæ¢"
msgid "unreachable (reject)"
msgstr "unreachable (reject)"
diff --git a/applications/luci-app-nlbwmon/Makefile b/applications/luci-app-nlbwmon/Makefile
new file mode 100644
index 000000000..a00177f2c
--- /dev/null
+++ b/applications/luci-app-nlbwmon/Makefile
@@ -0,0 +1,8 @@
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=Netlink based bandwidth accounting
+LUCI_DEPENDS:=+nlbwmon
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-nlbwmon/htdocs/luci-static/resources/nlbw.chart.min.js b/applications/luci-app-nlbwmon/htdocs/luci-static/resources/nlbw.chart.min.js
new file mode 100644
index 000000000..34e302682
--- /dev/null
+++ b/applications/luci-app-nlbwmon/htdocs/luci-static/resources/nlbw.chart.min.js
@@ -0,0 +1,68 @@
+(function(){var p=this,l=p.Chart,e=function(a){this.canvas=a.canvas;this.ctx=a;var b=function(a,b){return a["offset"+b]?a["offset"+b]:document.defaultView.getComputedStyle(a).getPropertyValue(b)};this.width=b(a.canvas,"Width")||a.canvas.width;this.height=b(a.canvas,"Height")||a.canvas.height;this.width=a.canvas.width;this.height=a.canvas.height;this.aspectRatio=this.width/this.height;d.retinaScale(this);return this};e.defaults={global:{animation:!0,animationSteps:60,animationEasing:"easeOutQuart",
+showScale:!0,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleIntegersOnly:!0,scaleBeginAtZero:!1,scaleFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",responsive:!1,maintainAspectRatio:!0,showTooltips:!0,customTooltips:!1,tooltipEvents:["mousemove","touchstart","touchmove","mouseout"],tooltipFillColor:"rgba(0,0,0,0.8)",
+tooltipFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",tooltipFontSize:14,tooltipFontStyle:"normal",tooltipFontColor:"#fff",tooltipTitleFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",tooltipTitleFontSize:14,tooltipTitleFontStyle:"bold",tooltipTitleFontColor:"#fff",tooltipTitleTemplate:"<%= label%>",tooltipYPadding:6,tooltipXPadding:6,tooltipCaretSize:8,tooltipCornerRadius:6,tooltipXOffset:10,tooltipTemplate:"<%if (label){%><%=label%>: <%}%><%= value %>",multiTooltipTemplate:"<%= value %>",
+multiTooltipKeyBackground:"#fff",segmentColorDefault:"#A6CEE3 #1F78B4 #B2DF8A #33A02C #FB9A99 #E31A1C #FDBF6F #FF7F00 #CAB2D6 #6A3D9A #B4B482 #B15928".split(" "),segmentHighlightColorDefaults:"#CEF6FF #47A0DC #DAFFB2 #5BC854 #FFC2C1 #FF4244 #FFE797 #FFA728 #F2DAFE #9265C2 #DCDCAA #D98150".split(" "),onAnimationProgress:function(){},onAnimationComplete:function(){}}};e.types={};var d=e.helpers={},k=d.each=function(a,b,c){var f=Array.prototype.slice.call(arguments,3);if(a)if(a.length===+a.length){var d;
+for(d=0;db)return b}else if(u(c)&&aa.indexOf("e-"))return a.split(".")[1].length;if(0>a.indexOf("."))return parseInt(a.split("e-")[1]);a=a.split(".")[1].split("e-");return a[0].length+parseInt(a[1])}return 0},B=d.radians=function(a){return Math.PI/180*a};d.getAngleFromPoint=function(a,b){var c=b.x-a.x,f=b.y-a.y,d=Math.sqrt(c*c+f*f),m=2*Math.PI+Math.atan2(f,c);0>c&&0>f&&(m+=
+2*Math.PI);return{angle:m,distance:d}};var F=d.aliasPixel=function(a){return 0===a%2?0:.5};d.splineCurve=function(a,b,c,f){var d=Math.sqrt(Math.pow(b.x-a.x,2)+Math.pow(b.y-a.y,2)),m=Math.sqrt(Math.pow(c.x-b.x,2)+Math.pow(c.y-b.y,2)),g=f*d/(d+m);f=f*m/(d+m);return{inner:{x:b.x-g*(c.x-a.x),y:b.y-g*(c.y-a.y)},outer:{x:b.x+f*(c.x-a.x),y:b.y+f*(c.y-a.y)}}};var N=d.calculateOrderOfMagnitude=function(a){return Math.floor(Math.log(a)/Math.LN10)};d.calculateScaleRange=function(a,b,c,f,d){b=Math.floor(b/(1.5*
+c));c=2>=b;var m=[];k(a,function(a){null==a||m.push(a)});var g=w(m),e=y(m);e===g&&(e+=.5,.5<=g&&!f?g-=.5:e+=.5);a=N(Math.abs(e-g));f=f?0:Math.floor(g/(1*Math.pow(10,a)))*Math.pow(10,a);for(var e=Math.ceil(e/(1*Math.pow(10,a)))*Math.pow(10,a)-f,g=Math.pow(10,a),n=Math.round(e/g);(n>b||2*nb)g*=2,n=Math.round(e/g),0!==n%1&&(c=!0);else if(d&&0<=a)if(0===g/2%1)g/=2,n=Math.round(e/g);else break;else g/=2,n=Math.round(e/g);c&&(n=2,g=e/n);return{steps:n,stepValue:g,min:f,max:f+n*g}};var t=d.template=
+function(a,b){if(a instanceof Function)return a(b);var c={},c=/\W/.test(a)?new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');"):c[a]=c[a];return b?c(b):c};d.generateLabels=function(a,b,c,f){var d=Array(b);a&&k(d,function(b,e){d[e]=t(a,{value:c+
+f*(e+1)})});return d};var x=d.easingEffects={linear:function(a){return a},easeInQuad:function(a){return a*a},easeOutQuad:function(a){return-1*a*(a-2)},easeInOutQuad:function(a){return 1>(a/=.5)?.5*a*a:-.5*(--a*(a-2)-1)},easeInCubic:function(a){return a*a*a},easeOutCubic:function(a){return 1*((a=a/1-1)*a*a+1)},easeInOutCubic:function(a){return 1>(a/=.5)?.5*a*a*a:.5*((a-=2)*a*a+2)},easeInQuart:function(a){return a*a*a*a},easeOutQuart:function(a){return-1*((a=a/1-1)*a*a*a-1)},easeInOutQuart:function(a){return 1>
+(a/=.5)?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)},easeInQuint:function(a){return 1*(a/=1)*a*a*a*a},easeOutQuint:function(a){return 1*((a=a/1-1)*a*a*a*a+1)},easeInOutQuint:function(a){return 1>(a/=.5)?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)},easeInSine:function(a){return-1*Math.cos(a/1*(Math.PI/2))+1},easeOutSine:function(a){return 1*Math.sin(a/1*(Math.PI/2))},easeInOutSine:function(a){return-.5*(Math.cos(Math.PI*a/1)-1)},easeInExpo:function(a){return 0===a?1:1*Math.pow(2,10*(a/1-1))},easeOutExpo:function(a){return 1===
+a?1:1*(-Math.pow(2,-10*a/1)+1)},easeInOutExpo:function(a){return 0===a?0:1===a?1:1>(a/=.5)?.5*Math.pow(2,10*(a-1)):.5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return 1<=a?a:-1*(Math.sqrt(1-(a/=1)*a)-1)},easeOutCirc:function(a){return 1*Math.sqrt(1-(a=a/1-1)*a)},easeInOutCirc:function(a){return 1>(a/=.5)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)},easeInElastic:function(a){var b=1.70158,c=0,f=1;if(0===a)return 0;if(1==(a/=1))return 1;c||(c=.3);fa?-.5*f*Math.pow(2,10*--a)*Math.sin(2*
+(1*a-b)*Math.PI/c):f*Math.pow(2,-10*--a)*Math.sin(2*(1*a-b)*Math.PI/c)*.5+1},easeInBack:function(a){return 1*(a/=1)*a*(2.70158*a-1.70158)},easeOutBack:function(a){return 1*((a=a/1-1)*a*(2.70158*a+1.70158)+1)},easeInOutBack:function(a){var b=1.70158;return 1>(a/=.5)?.5*a*a*(((b*=1.525)+1)*a-b):.5*((a-=2)*a*(((b*=1.525)+1)*a+b)+2)},easeInBounce:function(a){return 1-x.easeOutBounce(1-a)},easeOutBounce:function(a){return(a/=1)<1/2.75?7.5625*a*a:a<2/2.75?1*(7.5625*(a-=1.5/2.75)*a+.75):a<2.5/2.75?1*(7.5625*
+(a-=2.25/2.75)*a+.9375):1*(7.5625*(a-=2.625/2.75)*a+.984375)},easeInOutBounce:function(a){return.5>a?.5*x.easeInBounce(2*a):.5*x.easeOutBounce(2*a-1)+.5}},G=d.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1E3/60)}}();d.cancelAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelAnimationFrame||
+window.mozCancelAnimationFrame||window.oCancelAnimationFrame||window.msCancelAnimationFrame||function(a){return window.clearTimeout(a,1E3/60)}}();d.animationLoop=function(a,b,c,f,d,e){var g=0,k=x[c]||x.linear,n=function(){g++;var c=g/b,h=k(c);a.call(e,h,c,g);f.call(e,h,c);gf?b:f});return f},H=d.drawRoundedRectangle=function(a,b,c,f,d,e){a.beginPath();a.moveTo(b+e,c);a.lineTo(b+f-e,c);a.quadraticCurveTo(b+f,c,b+f,c+e);a.lineTo(b+f,c+d-e);a.quadraticCurveTo(b+f,c+d,b+f-e,c+d);a.lineTo(b+e,c+d);a.quadraticCurveTo(b,c+d,b,c+d-e);a.lineTo(b,c+e);a.quadraticCurveTo(b,c,b+e,c);a.closePath()};e.instances={};e.Type=function(a,b,c){this.options=b;this.chart=c;this.id=K();e.instances[this.id]=this;b.responsive&&this.resize();this.initialize.call(this,a)};r(e.Type.prototype,
+{initialize:function(){return this},clear:function(){U(this.chart);return this},stop:function(){e.animationService.cancelAnimation(this);return this},resize:function(a){this.stop();var b=this.chart.canvas,c=R(this.chart.canvas),f=this.options.maintainAspectRatio?c/this.chart.aspectRatio:S(this.chart.canvas);b.width=this.chart.width=c;b.height=this.chart.height=f;T(this.chart);"function"===typeof a&&a.apply(this,Array.prototype.slice.call(arguments,1));return this},reflow:A,render:function(a){a&&this.reflow();
+this.options.animation&&!a?(a=new e.Animation,a.numSteps=this.options.animationSteps,a.easing=this.options.animationEasing,a.render=function(a,c){var f=c.currentStep/c.numSteps,e=(0,d.easingEffects[c.easing])(f);a.draw(e,f,c.currentStep)},a.onAnimationProgress=this.options.onAnimationProgress,a.onAnimationComplete=this.options.onAnimationComplete,e.animationService.addAnimation(this,a)):(this.draw(),this.options.onAnimationComplete.call(this));return this},generateLegend:function(){return t(this.options.legendTemplate,
+this)},destroy:function(){this.clear();Q(this,this.events);var a=this.chart.canvas;a.width=this.chart.width;a.height=this.chart.height;a.style.removeProperty?(a.style.removeProperty("width"),a.style.removeProperty("height")):(a.style.removeAttribute("width"),a.style.removeAttribute("height"));delete e.instances[this.id]},showTooltip:function(a,b){"undefined"===typeof this.activeElements&&(this.activeElements=[]);if(function(a){var b=!1;if(a.length!==this.activeElements.length)return b=!0;k(a,function(a,
+c){a!==this.activeElements[c]&&(b=!0)},this);return b}.call(this,a)||b){this.activeElements=a;this.draw();this.options.customTooltips&&this.options.customTooltips(!1);if(0this.chart.width/2?h:a,y:(l+k)/2}}.call(this,f);(new e.MultiTooltip({x:c.x,y:c.y,xPadding:this.options.tooltipXPadding,yPadding:this.options.tooltipYPadding,xOffset:this.options.tooltipXOffset,fillColor:this.options.tooltipFillColor,textColor:this.options.tooltipFontColor,
+fontFamily:this.options.tooltipFontFamily,fontStyle:this.options.tooltipFontStyle,fontSize:this.options.tooltipFontSize,titleTextColor:this.options.tooltipTitleFontColor,titleFontFamily:this.options.tooltipTitleFontFamily,titleFontStyle:this.options.tooltipTitleFontStyle,titleFontSize:this.options.tooltipTitleFontSize,cornerRadius:this.options.tooltipCornerRadius,labels:m,legendColors:g,legendColorBackground:this.options.multiTooltipKeyBackground,title:t(this.options.tooltipTitleTemplate,a[0]),chart:this.chart,
+ctx:this.chart.ctx,custom:this.options.customTooltips})).draw()}else k(a,function(a){var b=a.tooltipPosition();(new e.Tooltip({x:Math.round(b.x),y:Math.round(b.y),xPadding:this.options.tooltipXPadding,yPadding:this.options.tooltipYPadding,fillColor:this.options.tooltipFillColor,textColor:this.options.tooltipFontColor,fontFamily:this.options.tooltipFontFamily,fontStyle:this.options.tooltipFontStyle,fontSize:this.options.tooltipFontSize,caretHeight:this.options.tooltipCaretSize,cornerRadius:this.options.tooltipCornerRadius,
+text:t(this.options.tooltipTemplate,a),chart:this.chart,custom:this.options.customTooltips})).draw()},this);return this}},toBase64Image:function(){return this.chart.canvas.toDataURL.apply(this.chart.canvas,arguments)}});e.Type.extend=function(a){var b=this,c=function(){return b.apply(this,arguments)};c.prototype=h(b.prototype);r(c.prototype,a);c.extend=e.Type.extend;if(a.name||b.prototype.name){var f=a.name||b.prototype.name,d=e.defaults[b.prototype.name]?h(e.defaults[b.prototype.name]):{};e.defaults[f]=
+r(d,a.defaults);e.types[f]=c;e.prototype[f]=function(a,b){var d=I(e.defaults.global,e.defaults[f],b||{});return new c(a,d,this)}}else L("Name not provided for this chart, so it hasn't been registered");return b};e.Element=function(a){r(this,a);this.initialize.apply(this,arguments);this.save()};r(e.Element.prototype,{initialize:function(){},restore:function(a){a?k(a,function(a){this[a]=this._saved[a]},this):r(this,this._saved);return this},save:function(){this._saved=h(this);delete this._saved._saved;
+return this},update:function(a){k(a,function(a,c){this._saved[c]=this[c];this[c]=a},this);return this},transition:function(a,b){k(a,function(a,f){this[f]=(a-this._saved[f])*b+this._saved[f]},this);return this},tooltipPosition:function(){return{x:this.x,y:this.y}},hasValue:function(){return u(this.value)}});e.Element.extend=D;e.Point=e.Element.extend({display:!0,inRange:function(a,b){return Math.pow(a-this.x,2)+Math.pow(b-this.y,2)=this.innerRadius&&c.distance<=this.outerRadius;return(m=e:f>=e&&f<=m)&&c},tooltipPosition:function(){var a=
+this.startAngle+(this.endAngle-this.startAngle)/2,b=(this.outerRadius-this.innerRadius)/2+this.innerRadius;return{x:this.x+Math.cos(a)*b,y:this.y+Math.sin(a)*b}},draw:function(a){a=this.ctx;a.beginPath();a.arc(this.x,this.y,0>this.outerRadius?0:this.outerRadius,this.startAngle,this.endAngle);a.arc(this.x,this.y,0>this.innerRadius?0:this.innerRadius,this.endAngle,this.startAngle,!0);a.closePath();a.strokeStyle=this.strokeColor;a.lineWidth=this.strokeWidth;a.fillStyle=this.fillColor;a.fill();a.lineJoin=
+"bevel";this.showStroke&&a.stroke()}});e.Rectangle=e.Element.extend({draw:function(){var a=this.ctx,b=this.width/2,c=this.x-b,b=this.x+b,f=this.base-(this.base-this.y),d=this.strokeWidth/2;this.showStroke&&(c+=d,b-=d,f+=d);a.beginPath();a.fillStyle=this.fillColor;a.strokeStyle=this.strokeColor;a.lineWidth=this.strokeWidth;a.moveTo(c,this.base);a.lineTo(c,f);a.lineTo(b,f);a.lineTo(b,this.base);a.fill();this.showStroke&&a.stroke()},height:function(){return this.base-this.y},inRange:function(a,b){return a>=
+this.x-this.width/2&&a<=this.x+this.width/2&&b>=this.y&&b<=this.base}});e.Animation=e.Element.extend({currentStep:null,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null});e.Tooltip=e.Element.extend({draw:function(){var a=this.chart.ctx;a.font=v(this.fontSize,this.fontStyle,this.fontFamily);this.xAlign="center";this.yAlign="above";var b=this.caretPadding=2,c=a.measureText(this.text).width+2*this.xPadding,f=this.fontSize+2*this.yPadding,d=f+this.caretHeight+b;this.x+
+c/2>this.chart.width?this.xAlign="left":0>this.x-c/2&&(this.xAlign="right");0>this.y-d&&(this.yAlign="below");var e=this.x-c/2,d=this.y-d;a.fillStyle=this.fillColor;if(this.custom)this.custom(this);else{switch(this.yAlign){case "above":a.beginPath();a.moveTo(this.x,this.y-b);a.lineTo(this.x+this.caretHeight,this.y-(b+this.caretHeight));a.lineTo(this.x-this.caretHeight,this.y-(b+this.caretHeight));a.closePath();a.fill();break;case "below":d=this.y+b+this.caretHeight,a.beginPath(),a.moveTo(this.x,this.y+
+b),a.lineTo(this.x+this.caretHeight,this.y+b+this.caretHeight),a.lineTo(this.x-this.caretHeight,this.y+b+this.caretHeight),a.closePath(),a.fill()}switch(this.xAlign){case "left":e=this.x-c+(this.cornerRadius+this.caretHeight);break;case "right":e=this.x-(this.cornerRadius+this.caretHeight)}H(a,e,d,c,f,this.cornerRadius);a.fill();a.fillStyle=this.textColor;a.textAlign="center";a.textBaseline="middle";a.fillText(this.text,e+c/2,d+f/2)}}});e.MultiTooltip=e.Element.extend({initialize:function(){this.font=
+v(this.fontSize,this.fontStyle,this.fontFamily);this.titleFont=v(this.titleFontSize,this.titleFontStyle,this.titleFontFamily);this.titleHeight=this.title?1.5*this.titleFontSize:0;this.height=this.labels.length*this.fontSize+this.fontSize/2*(this.labels.length-1)+2*this.yPadding+this.titleHeight;this.ctx.font=this.titleFont;var a=this.ctx.measureText(this.title).width,b=C(this.ctx,this.font,this.labels)+this.fontSize+3;this.width=y([b,a])+2*this.xPadding;a=this.height/2;0>this.y-a?this.y=a:this.y+
+a>this.chart.height&&(this.y=this.chart.height-a);this.x=this.x>this.chart.width/2?this.x-(this.xOffset+this.width):this.x+this.xOffset},getLineHeight:function(a){var b=this.y-this.height/2+this.yPadding;return 0===a?b+this.titleHeight/3:b+(1.5*this.fontSize*(a-1)+this.fontSize/2)+this.titleHeight},draw:function(){if(this.custom)this.custom(this);else{H(this.ctx,this.x,this.y-this.height/2,this.width,this.height,this.cornerRadius);var a=this.ctx;a.fillStyle=this.fillColor;a.fill();a.closePath();a.textAlign=
+"left";a.textBaseline="middle";a.fillStyle=this.titleTextColor;a.font=this.titleFont;a.fillText(this.title,this.x+this.xPadding,this.getLineHeight(0));a.font=this.font;d.each(this.labels,function(b,c){a.fillStyle=this.textColor;a.fillText(b,this.x+this.xPadding+this.fontSize+3,this.getLineHeight(c+1));a.fillStyle=this.legendColorBackground;a.fillRect(this.x+this.xPadding,this.getLineHeight(c+1)-this.fontSize/2,this.fontSize,this.fontSize);a.fillStyle=this.legendColors[c].fill;a.fillRect(this.x+this.xPadding,
+this.getLineHeight(c+1)-this.fontSize/2,this.fontSize,this.fontSize)},this)}}});e.Scale=e.Element.extend({initialize:function(){this.fit()},buildYLabels:function(){this.yLabels=[];for(var a=E(this.stepValue),b=0;b<=this.steps;b++)this.yLabels.push(t(this.templateString,{value:(this.min+b*this.stepValue).toFixed(a)}));this.yLabelWidth=this.display&&this.showLabels?C(this.ctx,this.font,this.yLabels)+10:0},addXLabel:function(a){this.xLabels.push(a);this.valuesCount++;this.fit()},removeXLabel:function(){this.xLabels.shift();
+this.valuesCount--;this.fit()},fit:function(){this.startPoint=this.display?this.fontSize:0;this.endPoint=this.display?this.height-1.5*this.fontSize-5:this.height;this.startPoint+=this.padding;var a=this.endPoint-=this.padding,b=this.endPoint-this.startPoint,c;this.calculateYRange(b);this.buildYLabels();for(this.calculateXLabelRotation();b>this.endPoint-this.startPoint;)b=this.endPoint-this.startPoint,c=this.yLabelWidth,this.calculateYRange(b),this.buildYLabels(),cthis.yLabelWidth?a/2:this.yLabelWidth;this.xLabelRotation=0;if(this.display){var c=C(this.ctx,this.font,this.xLabels),f;this.xLabelWidth=c;for(var d=Math.floor(this.calculateX(1)-this.calculateX(0))-6;this.xLabelWidth>d&&0===this.xLabelRotation||
+this.xLabelWidth>d&&90>=this.xLabelRotation&&0this.yLabelWidth&&(this.xScalePaddingLeft=b+this.fontSize/2),this.xScalePaddingRight=this.fontSize/2,this.xLabelRotation++,this.xLabelWidth=f*c;0e&&(e=b.x+d,k=c),b.x-de&&(e=b.x+d,k=c):c>this.valuesCount/2&&b.x-de-g;e=b===g||b===e-g;a.textAlign=0===b?"center":b===c?"center":bthis.animations[c].animationObject.numSteps&&(this.animations[c].animationObject.currentStep=this.animations[c].animationObject.numSteps),this.animations[c].animationObject.render(this.animations[c].chartInstance,this.animations[c].animationObject),this.animations[c].animationObject.currentStep==this.animations[c].animationObject.numSteps&&(this.animations[c].animationObject.onAnimationComplete.call(this.animations[c].chartInstance),
+this.animations.splice(c,1),c--);a=(Date.now()-a-this.frameDuration)/this.frameDuration;1<% for (var i=0; i<%if(segments[i].label){%><%=segments[i].label%><%}%><%}%>'};p.Type.extend({name:"Doughnut",defaults:e,
+initialize:function(d){this.segments=[];this.outerRadius=(l.min([this.chart.width,this.chart.height])-this.options.segmentStrokeWidth/2)/2;this.SegmentArc=p.Arc.extend({ctx:this.chart.ctx,x:this.chart.width/2,y:this.chart.height/2});this.options.showTooltips&&l.bindEvents(this,this.options.tooltipEvents,function(d){d="mouseout"!==d.type?this.getSegmentsAtEvent(d):[];l.each(this.segments,function(d){d.restore(["fillColor"])});l.each(d,function(d){d.fillColor=d.highlightColor});this.showTooltip(d)});
+this.calculateTotal(d);l.each(d,function(e,h){e.color||(e.color="hsl("+360*h/d.length+", 100%, 50%)");this.addData(e,h,!0)},this);this.render()},getSegmentsAtEvent:function(d){var e=[],h=l.getRelativePosition(d);l.each(this.segments,function(d){d.inRange(h.x,h.y)&&e.push(d)},this);return e},addData:function(d,e,h){e=void 0!==e?e:this.segments.length;"undefined"===typeof d.color&&(d.color=p.defaults.global.segmentColorDefault[e%p.defaults.global.segmentColorDefault.length],d.highlight=p.defaults.global.segmentHighlightColorDefaults[e%
+p.defaults.global.segmentHighlightColorDefaults.length]);this.segments.splice(e,0,new this.SegmentArc({value:d.value,outerRadius:this.options.animateScale?0:this.outerRadius,innerRadius:this.options.animateScale?0:this.outerRadius/100*this.options.percentageInnerCutout,fillColor:d.color,highlightColor:d.highlight||d.color,showStroke:this.options.segmentShowStroke,strokeWidth:this.options.segmentStrokeWidth,strokeColor:this.options.segmentStrokeColor,startAngle:1.5*Math.PI,circumference:this.options.animateRotate?
+0:this.calculateCircumference(d.value),label:d.label}));h||(this.reflow(),this.update())},calculateCircumference:function(d){return 0
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.controller.nlbw", package.seeall)
+
+function index()
+ entry({"admin", "nlbw"}, firstchild(), _("Bandwidth Monitor"), 80)
+ entry({"admin", "nlbw", "display"}, template("nlbw/display"), _("Display"), 1)
+ entry({"admin", "nlbw", "config"}, cbi("nlbw/config"), _("Configuration"), 2)
+ entry({"admin", "nlbw", "backup"}, template("nlbw/backup"), _("Backup"), 3)
+ entry({"admin", "nlbw", "data"}, call("action_data"), nil, 4)
+ entry({"admin", "nlbw", "list"}, call("action_list"), nil, 5)
+ entry({"admin", "nlbw", "ptr"}, call("action_ptr"), nil, 6).leaf = true
+ entry({"admin", "nlbw", "download"}, call("action_download"), nil, 7)
+ entry({"admin", "nlbw", "restore"}, post("action_restore"), nil, 8)
+ entry({"admin", "nlbw", "commit"}, call("action_commit"), nil, 9)
+end
+
+local function exec(cmd, args, writer)
+ local os = require "os"
+ local nixio = require "nixio"
+
+ local fdi, fdo = nixio.pipe()
+ local pid = nixio.fork()
+
+ if pid > 0 then
+ fdo:close()
+
+ while true do
+ local buffer = fdi:read(2048)
+ local wpid, stat, code = nixio.waitpid(pid, "nohang")
+
+ if writer and buffer and #buffer > 0 then
+ writer(buffer)
+ end
+
+ if wpid and stat == "exited" then
+ break
+ end
+ end
+ elseif pid == 0 then
+ nixio.dup(fdo, nixio.stdout)
+ fdi:close()
+ fdo:close()
+ nixio.exece(cmd, args, nil)
+ nixio.stdout:close()
+ os.exit(1)
+ end
+end
+
+function action_data()
+ local http = require "luci.http"
+
+ local types = {
+ csv = "text/csv",
+ json = "application/json"
+ }
+
+ local args = { }
+ local mtype = http.formvalue("type") or "json"
+ local delim = http.formvalue("delim") or ";"
+ local period = http.formvalue("period")
+ local group_by = http.formvalue("group_by")
+ local order_by = http.formvalue("order_by")
+
+ if types[mtype] then
+ args[#args+1] = "-c"
+ args[#args+1] = mtype
+ else
+ http.status(400, "Unsupported type")
+ return
+ end
+
+ if delim and #delim > 0 then
+ args[#args+1] = "-s%s" % delim
+ end
+
+ if period and #period > 0 then
+ args[#args+1] = "-t"
+ args[#args+1] = period
+ end
+
+ if group_by and #group_by > 0 then
+ args[#args+1] = "-g"
+ args[#args+1] = group_by
+ end
+
+ if order_by and #order_by > 0 then
+ args[#args+1] = "-o"
+ args[#args+1] = order_by
+ end
+
+ http.prepare_content(types[mtype])
+ exec("/usr/sbin/nlbw", args, http.write)
+end
+
+function action_list()
+ local http = require "luci.http"
+
+ local fd = io.popen("/usr/sbin/nlbw -c list")
+ local periods = { }
+
+ if fd then
+ while true do
+ local period = fd:read("*l")
+
+ if not period then
+ break
+ end
+
+ periods[#periods+1] = period
+ end
+
+ fd:close()
+ end
+
+ http.prepare_content("application/json")
+ http.write_json(periods)
+end
+
+function action_ptr(...)
+ local http = require "luci.http"
+ local util = require "luci.util"
+
+ http.prepare_content("application/json")
+ http.write_json(util.ubus("network.rrdns", "lookup", {
+ addrs = {...}, timeout = 3000
+ }))
+end
+
+function action_download()
+ local nixio = require "nixio"
+ local http = require "luci.http"
+ local sys = require "luci.sys"
+ local uci = require "luci.model.uci".cursor()
+
+ local dir = uci:get_first("nlbwmon", "nlbwmon", "database_directory")
+ or "/var/lib/nlbwmon"
+
+ if dir and nixio.fs.stat(dir, "type") == "dir" then
+ local n = "nlbwmon-backup-%s-%s.tar.gz"
+ %{ sys.hostname(), os.date("%Y-%m-%d") }
+
+ http.prepare_content("application/octet-stream")
+ http.header("Content-Disposition", "attachment; filename=\"%s\"" % n)
+ exec("/bin/tar", { "-C", dir, "-c", "-z", ".", "-f", "-" }, http.write)
+ else
+ http.status(500, "Unable to find database directory")
+ end
+end
+
+function action_restore()
+ local nixio = require "nixio"
+ local http = require "luci.http"
+ local i18n = require "luci.i18n"
+ local tpl = require "luci.template"
+ local uci = require "luci.model.uci".cursor()
+
+ local tmp = "/tmp/nlbw-restore.tar.gz"
+ local dir = uci:get_first("nlbwmon", "nlbwmon", "database_directory")
+ or "/var/lib/nlbwmon"
+
+ local fp
+ http.setfilehandler(
+ function(meta, chunk, eof)
+ if not fp and meta and meta.name == "archive" then
+ fp = io.open(tmp, "w")
+ end
+ if fp and chunk then
+ fp:write(chunk)
+ end
+ if fp and eof then
+ fp:close()
+ end
+ end)
+
+ local files = { }
+ local tar = io.popen("/bin/tar -tzf %s" % tmp, "r")
+ if tar then
+ while true do
+ local file = tar:read("*l")
+ if not file then
+ break
+ elseif file:match("^%d%d%d%d%d%d%d%d%.db%.gz$") or
+ file:match("^%./%d%d%d%d%d%d%d%d%.db%.gz$") then
+ files[#files+1] = file
+ end
+ end
+ tar:close()
+ end
+
+ if #files == 0 then
+ http.status(500, "Internal Server Error")
+ tpl.render("nlbw/backup", {
+ message = i18n.translate("Invalid or empty backup archive")
+ })
+ return
+ end
+
+
+ local output = { }
+
+ exec("/etc/init.d/nlbwmon", { "stop" })
+ exec("/bin/mkdir", { "-p", dir })
+
+ exec("/bin/tar", { "-C", dir, "-vxzf", tmp, unpack(files) },
+ function(chunk) output[#output+1] = chunk:match("%S+") end)
+
+ exec("/bin/rm", { "-f", tmp })
+ exec("/etc/init.d/nlbwmon", { "start" })
+
+ tpl.render("nlbw/backup", {
+ message = i18n.translatef(
+ "The following database files have been restored: %s",
+ table.concat(output, ", "))
+ })
+end
+
+function action_commit()
+ local http = require "luci.http"
+ local disp = require "luci.dispatcher"
+
+ http.redirect(disp.build_url("admin/nlbw/display"))
+ exec("/usr/sbin/nlbw", { "-c", "commit" })
+end
diff --git a/applications/luci-app-nlbwmon/luasrc/model/cbi/nlbw/config.lua b/applications/luci-app-nlbwmon/luasrc/model/cbi/nlbw/config.lua
new file mode 100644
index 000000000..71e096c61
--- /dev/null
+++ b/applications/luci-app-nlbwmon/luasrc/model/cbi/nlbw/config.lua
@@ -0,0 +1,215 @@
+-- Copyright 2017 Jo-Philipp Wich
+-- Licensed to the public under the Apache License 2.0.
+
+local utl = require "luci.util"
+local sys = require "luci.sys"
+local fs = require "nixio.fs"
+local ip = require "luci.ip"
+local nw = require "luci.model.network"
+
+local s, m, period, warning, date, days, interval, ifaces, subnets, limit, prealloc, compress, generations, commit, refresh, directory, protocols
+
+m = Map("nlbwmon", translate("Netlink Bandwidth Monitor - Configuration"),
+ translate("The Netlink Bandwidth Monitor (nlbwmon) is a lightweight, efficient traffic accounting program keeping track of bandwidth usage per host and protocol."))
+
+nw.init(luci.model.uci.cursor_state())
+
+s = m:section(TypedSection, "nlbwmon")
+s.anonymous = true
+s.addremove = false
+s:tab("general", translate("General Settings"))
+s:tab("advanced", translate("Advanced Settings"))
+s:tab("protocol", translate("Protocol Mapping"),
+ translate("Protocol mappings to distinguish traffic types per host, one mapping per line. The first value specifies the IP protocol, the second value the port number and the third column is the name of the mapped protocol."))
+
+period = s:taboption("general", ListValue, "_period", translate("Accounting period"),
+ translate("Choose \"Day of month\" to restart the accounting period monthly on a specific date, e.g. every 3rd. Choose \"Fixed interval\" to restart the accounting period exactly every N days, beginning at a given date."))
+
+period:value("relative", translate("Day of month"))
+period:value("absolute", translate("Fixed interval"))
+
+period.write = function(self, cfg, val)
+ if period:formvalue(cfg) == "relative" then
+ m:set(cfg, "database_interval", interval:formvalue(cfg))
+ else
+ m:set(cfg, "database_interval", "%s/%s" %{
+ date:formvalue(cfg),
+ days:formvalue(cfg)
+ })
+ end
+end
+
+period.cfgvalue = function(self, cfg)
+ local val = m:get(cfg, "database_interval") or ""
+ if val:match("^%d%d%d%d%-%d%d%-%d%d/%d+$") then
+ return "absolute"
+ end
+ return "relative"
+end
+
+
+warning = s:taboption("general", DummyValue, "_warning", translate("Warning"))
+warning.default = translatef("Changing the accounting interval type will invalidate existing databases!
Download backup.", luci.dispatcher.build_url("admin/nlbw/backup"))
+warning.rawhtml = true
+
+if (m.uci:get_first("nlbwmon", "nlbwmon", "database_interval") or ""):match("^%d%d%d%d-%d%d-%d%d/%d+$") then
+ warning:depends("_period", "relative")
+else
+ warning:depends("_period", "absolute")
+end
+
+
+interval = s:taboption("general", Value, "_interval", translate("Due date"),
+ translate("Day of month to restart the accounting period. Use negative values to count towards the end of month, e.g. \"-5\" to specify the 27th of July or the 24th of Februrary."))
+
+interval.datatype = "or(range(1,31),range(-31,-1))"
+interval.placeholder = "1"
+interval:value("1", translate("1 - Restart every 1st of month"))
+interval:value("-1", translate("-1 - Restart every last day of month"))
+interval:value("-7", translate("-7 - Restart a week before end of month"))
+interval.rmempty = false
+interval:depends("_period", "relative")
+interval.write = period.write
+
+interval.cfgvalue = function(self, cfg)
+ local val = m:get(cfg, "database_interval")
+ return val and tonumber(val)
+end
+
+
+date = s:taboption("general", Value, "_date", translate("Start date"),
+ translate("Start date of the first accounting period, e.g. begin of ISP contract."))
+
+date.datatype = "dateyyyymmdd"
+date.placeholder = "2016-03-15"
+date.rmempty = false
+date:depends("_period", "absolute")
+date.write = period.write
+
+date.cfgvalue = function(self, cfg)
+ local val = m:get(cfg, "database_interval") or ""
+ return (val:match("^(%d%d%d%d%-%d%d%-%d%d)/%d+$"))
+end
+
+
+days = s:taboption("general", Value, "_days", translate("Interval"),
+ translate("Length of accounting interval in days."))
+
+days.datatype = "min(1)"
+days.placeholder = "30"
+days.rmempty = false
+days:depends("_period", "absolute")
+days.write = period.write
+
+days.cfgvalue = function(self, cfg)
+ local val = m:get(cfg, "database_interval") or ""
+ return (val:match("^%d%d%d%d%-%d%d%-%d%d/(%d+)$"))
+end
+
+
+ifaces = s:taboption("general", Value, "_ifaces", translate("Local interfaces"),
+ translate("Only conntrack streams from or to any of these networks are counted."))
+
+ifaces.template = "cbi/network_netlist"
+ifaces.widget = "checkbox"
+ifaces.nocreate = true
+
+ifaces.cfgvalue = function(self, cfg)
+ return m:get(cfg, "local_network")
+end
+
+ifaces.write = function(self, cfg)
+ local item
+ local items = {}
+ for item in utl.imatch(subnets:formvalue(cfg)) do
+ items[#items+1] = item
+ end
+ for item in utl.imatch(ifaces:formvalue(cfg)) do
+ items[#items+1] = item
+ end
+ m:set(cfg, "local_network", items)
+end
+
+
+subnets = s:taboption("general", DynamicList, "_subnets", translate("Local subnets"),
+ translate("Only conntrack streams from or to any of these subnets are counted."))
+
+subnets.datatype = "ipaddr"
+
+subnets.cfgvalue = function(self, cfg)
+ local subnet
+ local subnets = {}
+ for subnet in utl.imatch(m:get(cfg, "local_network")) do
+ subnet = ip.new(subnet)
+ subnets[#subnets+1] = subnet and subnet:string()
+ end
+ return subnets
+end
+
+subnets.write = ifaces.write
+
+
+limit = s:taboption("advanced", Value, "database_limit", translate("Maximum entries"),
+ translate("The maximum amount of entries that should be put into the database, setting the limit to 0 will allow databases to grow indefinitely."))
+
+limit.datatype = "uinteger"
+limit.placeholder = "10000"
+
+prealloc = s:taboption("advanced", Flag, "database_prealloc", translate("Preallocate database"),
+ translate("Whether to preallocate the maximum possible database size in memory. This is mainly useful for memory constrained systems which might not be able to satisfy memory allocation after longer uptime periods."))
+
+prealloc:depends({["database_limit"] = "0", ["!reverse"] = true })
+
+
+compress = s:taboption("advanced", Flag, "database_compress", translate("Compress database"),
+ translate("Whether to gzip compress archive databases. Compressing the database files makes accessing old data slightly slower but helps to reduce storage requirements."))
+
+compress.default = compress.enabled
+
+
+generations = s:taboption("advanced", Value, "database_generations", translate("Stored periods"),
+ translate("Maximum number of accounting periods to keep, use zero to keep databases forever."))
+
+generations.datatype = "uinteger"
+generations.placeholder = "10"
+
+
+commit = s:taboption("advanced", Value, "commit_interval", translate("Commit interval"),
+ translate("Interval at which the temporary in-memory database is committed to the persistent database directory."))
+
+commit.placeholder = "24h"
+commit:value("24h", translate("24h - least flash wear at the expense of data loss risk"))
+commit:value("12h", translate("12h - compromise between risk of data loss and flash wear"))
+commit:value("10m", translate("10m - frequent commits at the expense of flash wear"))
+commit:value("60s", translate("60s - commit minutely, useful for non-flash storage"))
+
+
+refresh = s:taboption("advanced", Value, "refresh_interval", translate("Refresh interval"),
+ translate("Interval at which traffic counters of still established connections are refreshed from netlink information."))
+
+refresh.placeholder = "30s"
+refresh:value("30s", translate("30s - refresh twice per minute for reasonably current stats"))
+refresh:value("5m", translate("5m - rarely refresh to avoid frequently clearing conntrack counters"))
+
+
+directory = s:taboption("advanced", Value, "database_directory", translate("Database directory"),
+ translate("Database storage directory. One file per accounting period will be placed into this directory."))
+
+directory.placeholder = "/var/lib/nlbwmon"
+
+
+protocols = s:taboption("protocol", TextValue, "_protocols")
+protocols.rows = 50
+
+protocols.cfgvalue = function(self, cfg)
+ return fs.readfile("/usr/share/nlbwmon/protocols")
+end
+
+protocols.write = function(self, cfg, value)
+ fs.writefile("/usr/share/nlbwmon/protocols", (value or ""):gsub("\r\n", "\n"))
+end
+
+protocols.remove = protocols.write
+
+
+return m
diff --git a/applications/luci-app-nlbwmon/luasrc/view/nlbw/backup.htm b/applications/luci-app-nlbwmon/luasrc/view/nlbw/backup.htm
new file mode 100644
index 000000000..ea2e0f05c
--- /dev/null
+++ b/applications/luci-app-nlbwmon/luasrc/view/nlbw/backup.htm
@@ -0,0 +1,34 @@
+<%#
+ Copyright 2017 Jo-Philipp Wich
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+
+
+<%:Netlink Bandwidth Monitor - Backup / Restore %>
+
+
+
+
+
+
+
+
+
+<%+footer%>
diff --git a/applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm b/applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm
new file mode 100644
index 000000000..7e85acefb
--- /dev/null
+++ b/applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm
@@ -0,0 +1,1052 @@
+<%#
+ Copyright 2017 Jo-Philipp Wich
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<% css = [[
+
+ #chartjs-tooltip {
+ opacity: 0;
+ position: absolute;
+ background: rgba(0, 0, 0, .7);
+ color: white;
+ padding: 3px;
+ border-radius: 3px;
+ -webkit-transition: all .1s ease;
+ transition: all .1s ease;
+ pointer-events: none;
+ -webkit-transform: translate(-50%, 0);
+ transform: translate(-50%, 0);
+ z-index: 200;
+ }
+
+ #chartjs-tooltip.above {
+ -webkit-transform: translate(-50%, -100%);
+ transform: translate(-50%, -100%);
+ }
+
+ #chartjs-tooltip.above:before {
+ border: solid;
+ border-color: #111 transparent;
+ border-color: rgba(0, 0, 0, .8) transparent;
+ border-width: 8px 8px 0 8px;
+ bottom: 1em;
+ content: "";
+ display: block;
+ left: 50%;
+ top: 100%;
+ position: absolute;
+ z-index: 99;
+ -webkit-transform: translate(-50%, 0);
+ transform: translate(-50%, 0);
+ }
+
+ table {
+ border: 1px solid #999;
+ border-collapse: collapse;
+ margin: 0 0 2px !important;
+ }
+
+ th, td, table table td {
+ border: 1px solid #999;
+ text-align: right;
+ padding: 1px 3px !important;
+ white-space: nowrap;
+ }
+
+ tbody td {
+ border-bottom-color: #ccc;
+ }
+
+ tbody td[rowspan] {
+ border-bottom-color: #999;
+ }
+
+ tbody tr:last-child td {
+ border-bottom-color: #999;
+ }
+
+
+ .pie {
+ width: 200px;
+ display: inline-block;
+ margin: 20px;
+ }
+
+ .pie label {
+ font-weight: bold;
+ font-size: 14px;
+ display: block;
+ margin-bottom: 10px;
+ text-align: center;
+ }
+
+ .kpi {
+ display: inline-block;
+ margin: 80px 20px 20px;
+ vertical-align: top;
+ }
+
+ .kpi ul {
+ list-style: none;
+ }
+
+ .kpi li {
+ margin: 10px;
+ display: none;
+ }
+
+ .kpi big {
+ font-weight: bold;
+ }
+
+ #detail-bubble {
+ position: absolute;
+ opacity: 0;
+ visibility: hidden;
+ }
+
+ #detail-bubble.in {
+ opacity: 1;
+ visibility: visible;
+ transition: opacity 0.5s;
+ }
+
+ #detail-bubble > div {
+ border: 1px solid #ccc;
+ border-radius: 2px;
+ padding: 5px;
+ background: #fcfcfc;
+ }
+
+ #detail-bubble .head {
+ text-align: center;
+ white-space: nowrap;
+ position: relative;
+ }
+
+ #detail-bubble .head .dismiss {
+ top: 0;
+ right: 0;
+ width: 20px;
+ line-height: 20px;
+ text-align: center;
+ text-decoration: none;
+ font-weight: bold;
+ color: #000;
+ position: absolute;
+ font-size: 20px;
+ }
+
+ #detail-bubble .pie {
+ width: 100px;
+ margin: 5px;
+ }
+
+ #detail-bubble .kpi {
+ margin: 40px 5px 5px;
+ font-size: smaller;
+ text-align: left;
+ }
+
+ #detail-bubble .kpi ul {
+ margin: 0;
+ }
+
+ #bubble-arrow {
+ border: 1px solid #ccc;
+ border-width: 1px 0 0 1px;
+ background: #fcfcfc;
+ width: 15px;
+ height: 15px;
+ position: absolute;
+ left: 0;
+ top: -8px;
+ transform: rotate(45deg);
+ margin: 0 0 0 -8px;
+ }
+
+ tr.active > td {
+ border-bottom: 2px solid red;
+ }
+
+ tr.active > td.active {
+ border: 2px solid red;
+ border-bottom: none;
+ }
+
+ td.detail {
+ border: 2px solid red;
+ border-top: none;
+ opacity: 0;
+ transition: opacity 0.5s;
+ }
+
+ td.detail.in {
+ opacity: 1;
+ }
+
+ th.hostname,
+ td.hostname {
+ text-align: left;
+ }
+
+]] -%>
+
+<%+header%>
+
+
+
+
+
+<%:Netlink Bandwidth Monitor%>
+
+
+
+
+
+
Ã
+
+
+
+
+
+
+
+
+
+
+ - <%_Hostname: example.org%>
+ - <%_Vendor: Example Corp.%>
+
+
+
+
+
+
+
+
+
+
+ <%:Select accounting period:%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - <%_0 hosts%>
+ - <%_0 download%>
+ - <%_0 upload%>
+ - <%_0 connections%>
+
+
+
+
+
+ <%:Host%> |
+ <%:MAC%> |
+ <%:Connections%> |
+ <%:Download (Bytes / Packets)%> |
+ <%:Upload (Bytes / Packets)%> |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - <%_0 different application protocols%>
+ - <%_0 cause the most download%>
+ - <%_0 cause the most upload%>
+ - <%_0 cause the most connections%>
+
+
+
+
+
+ <%:Application%> |
+ <%:Connections%> |
+ <%:Download (Bytes / Packets)%> |
+ <%:Upload (Bytes / Packets)%> |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - <%_0% IPv6 support rate among hosts%>
+ - <%_0% of the total traffic is IPv6%>
+ - <%_0B total IPv6 download%>
+ - <%_0B total IPv6 upload%>
+
+
+
+
+
+ <%:Host%> |
+ <%:MAC%> |
+ <%:Family%> |
+ <%:Download (Bytes / Packets)%> |
+ <%:Upload (Bytes / Packets)%> |
+
+
+
+
+
+
+
+
+<%+footer%>
diff --git a/applications/luci-app-nlbwmon/po/ja/nlbwmon.po b/applications/luci-app-nlbwmon/po/ja/nlbwmon.po
new file mode 100644
index 000000000..b5931e0df
--- /dev/null
+++ b/applications/luci-app-nlbwmon/po/ja/nlbwmon.po
@@ -0,0 +1,387 @@
+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 \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"X-Generator: Poedit 2.0.3\n"
+
+msgid "%d IPv4-only hosts"
+msgstr "%d IPv4 éå®ãã¹ã"
+
+msgid "%d IPv6-only hosts"
+msgstr "%d IPv6 éå®ãã¹ã"
+
+msgid "%d dual-stack hosts"
+msgstr "%d ãã¥ã¢ã«ã¹ã¿ã㯠ãã¹ã"
+
+msgid "%s and %s"
+msgstr "%s, %s"
+
+msgid "%s, %s and %s"
+msgstr "%s, %s, %s"
+
+msgid "-1 - Restart every last day of month"
+msgstr "-1 - æã®æçµæ¥"
+
+msgid "-7 - Restart a week before end of month"
+msgstr "-7 - æã®æçµæ¥ã®ä¸é±éå"
+
+msgid "1 - Restart every 1st of month"
+msgstr "1 - æ¯æ1æ¥"
+
+msgid "10m - frequent commits at the expense of flash wear"
+msgstr "10m - ãã©ãã·ã¥åªä½ã¸ã®è² è·ãé«ãé »ç¹ãªã³ãããï¼10åï¼"
+
+msgid "12h - compromise between risk of data loss and flash wear"
+msgstr "12h - ãã¼ã¿æ¶å¤±ãªã¹ã¯ã¨ãã©ãã·ã¥åªä½ã¸ã®è² è·ã®å¦¥åç¹ï¼12æéï¼"
+
+msgid "24h - least flash wear at the expense of data loss risk"
+msgstr "24h - ãã¼ã¿æ¶å¤±ãªã¹ã¯ã¯é«ãããã©ãã·ã¥åªä½ã¸ã®è² è·ã¯æå°ï¼24æéï¼"
+
+msgid "30s - refresh twice per minute for reasonably current stats"
+msgstr "30s - ç¾å¨ã®ç¶æ
ã®ææ¡ã«é©åãª1åéã«2åã®ãªãã¬ãã·ã¥ï¼30ç§ï¼"
+
+msgid "5m - rarely refresh to avoid frequently clearing conntrack counters"
+msgstr ""
+
+msgid "60s - commit minutely, useful for non-flash storage"
+msgstr "60ç§ - 1åæ¯ã®ã³ããããéãã©ãã·ã¥ ã¹ãã¬ã¼ã¸ã«æç¨"
+
+msgid "0 connections"
+msgstr "0 æ¥ç¶æ°"
+
+msgid "0 hosts"
+msgstr "0 ãã¹ãæ°"
+
+msgid "0% IPv6 support rate among hosts"
+msgstr "0% å
¨ãã¹ãä¸ã® IPv6 ãµãã¼ãæ¯ç"
+
+msgid "0B total IPv6 download"
+msgstr "0B IPv6 ç·ãã¦ã³ãã¼ã"
+
+msgid "0% of the total traffic is IPv6"
+msgstr "0% å
¨ãã©ãã£ãã¯ä¸ã® IPv6 ã®å²å"
+
+msgid "0B total IPv6 upload"
+msgstr "0B IPv6 ç·ã¢ãããã¼ã"
+
+msgid "0 cause the most connections"
+msgstr "0 æ¥ç¶æ°ä¸ä½"
+
+msgid "0 cause the most download"
+msgstr "0 ãã¦ã³ãã¼ãä¸ä½"
+
+msgid "0 cause the most upload"
+msgstr "0 ã¢ãããã¼ãä¸ä½"
+
+msgid "0 different application protocols"
+msgstr "0 ã¢ããªã±ã¼ã·ã§ã³ ãããã³ã«æ°"
+
+msgid "0 download"
+msgstr "0 ãã¦ã³ãã¼ã"
+
+msgid "0 upload"
+msgstr "0 ã¢ãããã¼ã"
+
+msgid "Accounting period"
+msgstr "åéæé"
+
+msgid "Advanced Settings"
+msgstr "æ¡å¼µè¨å®"
+
+msgid "Application"
+msgstr "ã¢ããªã±ã¼ã·ã§ã³"
+
+msgid "Application Protocols"
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ ãããã³ã«"
+
+msgid "Backup"
+msgstr "ããã¯ã¢ãã"
+
+msgid "Bandwidth Monitor"
+msgstr "帯åå¹
ã¢ãã¿ã¼"
+
+msgid "CSV, grouped by IP"
+msgstr "CSVï¼IP ã«ããã°ã«ã¼ãåï¼"
+
+msgid "CSV, grouped by MAC"
+msgstr "CSVï¼MAC ã«ããã°ã«ã¼ãåï¼"
+
+msgid "CSV, grouped by protocol"
+msgstr "CSVï¼ãããã³ã«ã«ããã°ã«ã¼ãåï¼"
+
+msgid ""
+"Changing the accounting interval type will invalidate existing databases!"
+"
Download backup."
+msgstr ""
+"æ¢åã®ãã¼ã¿ãã¼ã¹ã¨äºææ§ã®ç¡ãåéæéã®å½¢å¼ãé¸æããã¾ããã
ããã¯ã¢ããã®ãã¦ã³ãã¼ã"
+
+msgid ""
+"Choose \"Day of month\" to restart the accounting period monthly on a "
+"specific date, e.g. every 3rd. Choose \"Fixed interval\" to restart the "
+"accounting period exactly every N days, beginning at a given date."
+msgstr ""
+"ææ¯ã§è¨å®ããæ¥ä»ããã®ãã¼ã¿ã®è¨æ¸¬ãè¡ãã«ã¯ã \"æé\" ãé¸æãã¾ãï¼ä¾: "
+"æ¯æ3æ¥ï¼ãè¨å®ããæ¥æ°æ¯ã«ãã¼ã¿ã®åéãè¡ãã«ã¯ã\"ç¹å®ã®éé\" ãé¸æãã¾"
+"ããå¾è
ã®å ´åãæå®ãããæ¥ä»ããéå§ããã¾ãã"
+
+msgid "Commit interval"
+msgstr "ã³ãããéé"
+
+msgid "Compress database"
+msgstr "ãã¼ã¿ãã¼ã¹ã®å§ç¸®"
+
+msgid "Configuration"
+msgstr "è¨å®"
+
+msgid "Conn."
+msgstr "æ¥ç¶æ°"
+
+msgid "Connections"
+msgstr "æ¥ç¶æ°"
+
+msgid "Connections / Host"
+msgstr "ãã¹ãæ¯ã®æ¥ç¶æ°"
+
+msgid "Database directory"
+msgstr "ãã¼ã¿ãã¼ã¹ ãã£ã¬ã¯ããª"
+
+msgid ""
+"Database storage directory. One file per accounting period will be placed "
+"into this directory."
+msgstr ""
+"ãã¼ã¿ãã¼ã¹ã®ä¿åå
ãã£ã¬ã¯ããªã§ããè¨æ¸¬æéããã 1 ã¤ã®ãã¡ã¤ã«ããã®ãã£"
+"ã¬ã¯ããªã«é
ç½®ããã¾ãã"
+
+msgid "Day of month"
+msgstr "æé"
+
+msgid ""
+"Day of month to restart the accounting period. Use negative values to count "
+"towards the end of month, e.g. \"-5\" to specify the 27th of July or the "
+"24th of Februrary."
+msgstr ""
+"æã®ä¸ã§æ°ããªåéæéãéå§ããæ¥ã§ããæã®æçµæ¥ããã®æ¥æ°ããã¤ãã¹å¤ã§æ"
+"å®ãããã¨ãã§ãã¾ãï¼ä¾: 7æ27æ¥ã¾ãã¯2æ24æ¥ã¯ \"-5\"ï¼ã"
+
+msgid "Display"
+msgstr "表示"
+
+msgid "Down. (Bytes / Pkts.)"
+msgstr "ãã¦ã³ãã¼ãï¼Bytes / Pkts.ï¼"
+
+msgid "Download (Bytes / Packets)"
+msgstr "ãã¦ã³ãã¼ãï¼Bytes / Packetsï¼"
+
+msgid "Download / Application"
+msgstr "ãã¦ã³ãã¼ã / ã¢ããªã±ã¼ã·ã§ã³"
+
+msgid "Download Database Backup"
+msgstr "ãã¼ã¿ãã¼ã¹ ããã¯ã¢ããã®ãã¦ã³ãã¼ã"
+
+msgid "Dualstack enabled hosts"
+msgstr "ãã¥ã¢ã«ã¹ã¿ã㯠ãã¹ã"
+
+msgid "Due date"
+msgstr "ææ¥"
+
+msgid "Export"
+msgstr "ã¨ã¯ã¹ãã¼ã"
+
+msgid "Family"
+msgstr "IP 種å¥"
+
+msgid "Fixed interval"
+msgstr "ç¹å®ã®éé"
+
+msgid "Force reloadâ¦"
+msgstr "å¼·å¶ãªãã¼ã..."
+
+msgid "General Settings"
+msgstr "å
¨è¬è¨å®"
+
+msgid "Generate Backup"
+msgstr "ããã¯ã¢ããã®ä½æ"
+
+msgid "Host"
+msgstr "ãã¹ã"
+
+msgid "Hostname: example.org"
+msgstr "ãã¹ãå: example.org"
+
+msgid "IPv4 vs. IPv6"
+msgstr "IPv4 åã³ IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "Interval"
+msgstr "éé"
+
+msgid ""
+"Interval at which the temporary in-memory database is committed to the "
+"persistent database directory."
+msgstr ""
+"ã¡ã¢ãªã¼ä¸ã®ä¸æçãªãã¼ã¿ãã¼ã¹ãããæ°¸ç¶çãªãã¼ã¿ãã¼ã¹ ãã£ã¬ã¯ããªã¸ã®ã³"
+"ããããå®è¡ããééã§ãã"
+
+msgid ""
+"Interval at which traffic counters of still established connections are "
+"refreshed from netlink information."
+msgstr ""
+
+msgid "Invalid or empty backup archive"
+msgstr "ç¡å¹ã¾ãã¯ç©ºã®ããã¯ã¢ãã ã¢ã¼ã«ã¤ãã§ãã"
+
+msgid "JSON dump"
+msgstr "JSON ãã³ã"
+
+msgid "Length of accounting interval in days."
+msgstr "åéæéã®æ¥æ°ã§ãã"
+
+msgid "Local interfaces"
+msgstr "ãã¼ã«ã« ã¤ã³ã¿ã¼ãã§ã¼ã¹"
+
+msgid "Local subnets"
+msgstr "ãã¼ã«ã« ãµãããã"
+
+msgid "MAC"
+msgstr "MAC"
+
+msgid "Maximum entries"
+msgstr "æ大件æ°"
+
+msgid ""
+"Maximum number of accounting periods to keep, use zero to keep databases "
+"forever."
+msgstr ""
+"è¨æ¸¬ãã¼ã¿ãä¿æãããåéæéã®æ大åæ°ã§ãã '0' ãè¨å®ããå ´åãå
¨ãã¼ã¿ã"
+"ä¿æãã¾ãã"
+
+msgid "Netlink Bandwidth Monitor"
+msgstr "Netlink Bandwidth Monitor"
+
+msgid "Netlink Bandwidth Monitor - Backup / Restore"
+msgstr "Netlink Bandwidth Monitor - ããã¯ã¢ãã / 復å
"
+
+msgid "Netlink Bandwidth Monitor - Configuration"
+msgstr "Netlink Bandwidth Monitor - è¨å®"
+
+msgid "No data recorded yet."
+msgstr "ã¾ã ãã¼ã¿ãããã¾ããã"
+
+msgid "Only conntrack streams from or to any of these networks are counted."
+msgstr ""
+"é¸æããããããã¯ã¼ã¯ã«ããã conntrack ã¹ããªã¼ã ã®ã¿ãè¨æ¸¬ããã¾ãã"
+
+msgid "Only conntrack streams from or to any of these subnets are counted."
+msgstr "è¨å®ããããµããããã«ããã conntrack ã¹ããªã¼ã ã®ã¿ãè¨æ¸¬ããã¾ãã"
+
+msgid "Preallocate database"
+msgstr "ãã¼ã¿ãã¼ã¹ã®äºåå²å½"
+
+msgid "Protocol"
+msgstr "ãããã³ã«"
+
+msgid "Protocol Mapping"
+msgstr "ãããã³ã« ãããã³ã°"
+
+msgid ""
+"Protocol mappings to distinguish traffic types per host, one mapping per "
+"line. The first value specifies the IP protocol, the second value the port "
+"number and the third column is the name of the mapped protocol."
+msgstr ""
+"ãã¹ãæ¯ã®ãã©ãã£ãã¯å½¢å¼ãåºå¥ããããã®ãããã³ã« ãããã³ã°ã§ãä¸è¡ããã"
+"ä¸ã¤ã®ãããã³ã°ã追å ãã¾ããåã¨ã³ããªã¼ã®ä¸ã¤ç®ã®å¤ã¯ IP ãããã³ã«ãã2ã¤"
+"ç®ã®å¤ã¯ãã¼ãçªå·ã3ã¤ç®ã¯ãããã³ã°ããããããã³ã«ã®ååããããã表ãã¾"
+"ãã"
+
+msgid "Refresh interval"
+msgstr "ãªãã¬ãã·ã¥éé"
+
+msgid "Restore"
+msgstr "復å
"
+
+msgid "Restore Database Backup"
+msgstr "ãã¼ã¿ãã¼ã¹ã®å¾©å
"
+
+msgid "Select accounting period:"
+msgstr "åéæéãé¸æ:"
+
+msgid "Source IP"
+msgstr "ã¢ã¯ã»ã¹å
IP"
+
+msgid "Start date"
+msgstr "éå§æ¥"
+
+msgid "Start date of the first accounting period, e.g. begin of ISP contract."
+msgstr "ååã®ãã¼ã¿åéã®éå§æ¥ã§ãï¼ä¾: ISP å¥ç´ã®éå§æ¥ï¼ã"
+
+msgid "Stored periods"
+msgstr "ä¿åæé"
+
+msgid ""
+"The Netlink Bandwidth Monitor (nlbwmon) is a lightweight, efficient traffic "
+"accounting program keeping track of bandwidth usage per host and protocol."
+msgstr ""
+"Netlink Bandwidth Monitor (nlbwmon) ã¯ã軽éãã¤ããã¹ãããããã³ã«æ¯ã«å¸¯å"
+"å¹
使ç¨éã®è¿½è·¡ãè¡ãå¹ççãªãã©ãã£ãã¯è¨æ¸¬ããã°ã©ã ã§ãã"
+
+msgid "The following database files have been restored: %s"
+msgstr "次ã®ãã¼ã¿ãã¼ã¹ ãã¡ã¤ã«ã復å
ããã¾ãã: %s"
+
+msgid ""
+"The maximum amount of entries that should be put into the database, setting "
+"the limit to 0 will allow databases to grow indefinitely."
+msgstr ""
+"ãã¼ã¿ãã¼ã¹ã«ä¿ç®¡ãããæ大件æ°ã§ãã '0' ãè¨å®ããå ´åãå¶éç¡ãã®ãã¼ã¿"
+"ãã¼ã¹ã®å¢å¤§ã許å¯ãã¾ãã"
+
+msgid "Traffic / Host"
+msgstr "ãã©ãã£ã㯠/ ãã¹ã"
+
+msgid "Traffic Distribution"
+msgstr "ãã©ãã£ãã¯å
訳"
+
+msgid "Up. (Bytes / Pkts.)"
+msgstr "ã¢ãããã¼ãï¼Bytes / Pkts.ï¼"
+
+msgid "Upload (Bytes / Packets)"
+msgstr "ã¢ãããã¼ãï¼Bytes / Packetsï¼"
+
+msgid "Upload / Application"
+msgstr "ã¢ãããã¼ã / ã¢ããªã±ã¼ã·ã§ã³"
+
+msgid "Vendor: Example Corp."
+msgstr "ãã³ã: Example Corp."
+
+msgid "Warning"
+msgstr "è¦å"
+
+msgid ""
+"Whether to gzip compress archive databases. Compressing the database files "
+"makes accessing old data slightly slower but helps to reduce storage "
+"requirements."
+msgstr ""
+"ãã¼ã¿ãã¼ã¹ã® gzip å§ç¸®ã¢ã¼ã«ã¤ãåã§ãããã¼ã¿ãã¼ã¹ ãã¡ã¤ã«ãå§ç¸®ããã¨å¤"
+"ããã¼ã¿ã¸ã®ã¢ã¯ã»ã¹ãå¤å°é
ããªãã¾ãããã¹ãã¬ã¼ã¸ä½¿ç¨éã®ä½æ¸ã«å½¹ç«ã¡ã¾"
+"ãã"
+
+msgid ""
+"Whether to preallocate the maximum possible database size in memory. This is "
+"mainly useful for memory constrained systems which might not be able to "
+"satisfy memory allocation after longer uptime periods."
+msgstr ""
+
+msgid "no traffic"
+msgstr "ãã©ãã£ãã¯ç¡ã"
+
+msgid "other"
+msgstr "ãã®ä»"
diff --git a/applications/luci-app-nlbwmon/po/templates/nlbwmon.pot b/applications/luci-app-nlbwmon/po/templates/nlbwmon.pot
new file mode 100644
index 000000000..61d223079
--- /dev/null
+++ b/applications/luci-app-nlbwmon/po/templates/nlbwmon.pot
@@ -0,0 +1,352 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "%d IPv4-only hosts"
+msgstr ""
+
+msgid "%d IPv6-only hosts"
+msgstr ""
+
+msgid "%d dual-stack hosts"
+msgstr ""
+
+msgid "%s and %s"
+msgstr ""
+
+msgid "%s, %s and %s"
+msgstr ""
+
+msgid "-1 - Restart every last day of month"
+msgstr ""
+
+msgid "-7 - Restart a week before end of month"
+msgstr ""
+
+msgid "1 - Restart every 1st of month"
+msgstr ""
+
+msgid "10m - frequent commits at the expense of flash wear"
+msgstr ""
+
+msgid "12h - compromise between risk of data loss and flash wear"
+msgstr ""
+
+msgid "24h - least flash wear at the expense of data loss risk"
+msgstr ""
+
+msgid "30s - refresh twice per minute for reasonably current stats"
+msgstr ""
+
+msgid "5m - rarely refresh to avoid frequently clearing conntrack counters"
+msgstr ""
+
+msgid "60s - commit minutely, useful for non-flash storage"
+msgstr ""
+
+msgid "0 connections"
+msgstr ""
+
+msgid "0 hosts"
+msgstr ""
+
+msgid "0% IPv6 support rate among hosts"
+msgstr ""
+
+msgid "0B total IPv6 download"
+msgstr ""
+
+msgid "0% of the total traffic is IPv6"
+msgstr ""
+
+msgid "0B total IPv6 upload"
+msgstr ""
+
+msgid "0 cause the most connections"
+msgstr ""
+
+msgid "0 cause the most download"
+msgstr ""
+
+msgid "0 cause the most upload"
+msgstr ""
+
+msgid "0 different application protocols"
+msgstr ""
+
+msgid "0 download"
+msgstr ""
+
+msgid "0 upload"
+msgstr ""
+
+msgid "Accounting period"
+msgstr ""
+
+msgid "Advanced Settings"
+msgstr ""
+
+msgid "Application"
+msgstr ""
+
+msgid "Application Protocols"
+msgstr ""
+
+msgid "Backup"
+msgstr ""
+
+msgid "Bandwidth Monitor"
+msgstr ""
+
+msgid "CSV, grouped by IP"
+msgstr ""
+
+msgid "CSV, grouped by MAC"
+msgstr ""
+
+msgid "CSV, grouped by protocol"
+msgstr ""
+
+msgid ""
+"Changing the accounting interval type will invalidate existing databases!"
+"
Download backup."
+msgstr ""
+
+msgid ""
+"Choose \"Day of month\" to restart the accounting period monthly on a "
+"specific date, e.g. every 3rd. Choose \"Fixed interval\" to restart the "
+"accounting period exactly every N days, beginning at a given date."
+msgstr ""
+
+msgid "Commit interval"
+msgstr ""
+
+msgid "Compress database"
+msgstr ""
+
+msgid "Configuration"
+msgstr ""
+
+msgid "Conn."
+msgstr ""
+
+msgid "Connections"
+msgstr ""
+
+msgid "Connections / Host"
+msgstr ""
+
+msgid "Database directory"
+msgstr ""
+
+msgid ""
+"Database storage directory. One file per accounting period will be placed "
+"into this directory."
+msgstr ""
+
+msgid "Day of month"
+msgstr ""
+
+msgid ""
+"Day of month to restart the accounting period. Use negative values to count "
+"towards the end of month, e.g. \"-5\" to specify the 27th of July or the "
+"24th of Februrary."
+msgstr ""
+
+msgid "Display"
+msgstr ""
+
+msgid "Down. (Bytes / Pkts.)"
+msgstr ""
+
+msgid "Download (Bytes / Packets)"
+msgstr ""
+
+msgid "Download / Application"
+msgstr ""
+
+msgid "Download Database Backup"
+msgstr ""
+
+msgid "Dualstack enabled hosts"
+msgstr ""
+
+msgid "Due date"
+msgstr ""
+
+msgid "Export"
+msgstr ""
+
+msgid "Family"
+msgstr ""
+
+msgid "Fixed interval"
+msgstr ""
+
+msgid "Force reloadâ¦"
+msgstr ""
+
+msgid "General Settings"
+msgstr ""
+
+msgid "Generate Backup"
+msgstr ""
+
+msgid "Host"
+msgstr ""
+
+msgid "Hostname: example.org"
+msgstr ""
+
+msgid "IPv4 vs. IPv6"
+msgstr ""
+
+msgid "IPv6"
+msgstr ""
+
+msgid "Interval"
+msgstr ""
+
+msgid ""
+"Interval at which the temporary in-memory database is committed to the "
+"persistent database directory."
+msgstr ""
+
+msgid ""
+"Interval at which traffic counters of still established connections are "
+"refreshed from netlink information."
+msgstr ""
+
+msgid "Invalid or empty backup archive"
+msgstr ""
+
+msgid "JSON dump"
+msgstr ""
+
+msgid "Length of accounting interval in days."
+msgstr ""
+
+msgid "Local interfaces"
+msgstr ""
+
+msgid "Local subnets"
+msgstr ""
+
+msgid "MAC"
+msgstr ""
+
+msgid "Maximum entries"
+msgstr ""
+
+msgid ""
+"Maximum number of accounting periods to keep, use zero to keep databases "
+"forever."
+msgstr ""
+
+msgid "Netlink Bandwidth Monitor"
+msgstr ""
+
+msgid "Netlink Bandwidth Monitor - Backup / Restore"
+msgstr ""
+
+msgid "Netlink Bandwidth Monitor - Configuration"
+msgstr ""
+
+msgid "No data recorded yet."
+msgstr ""
+
+msgid "Only conntrack streams from or to any of these networks are counted."
+msgstr ""
+
+msgid "Only conntrack streams from or to any of these subnets are counted."
+msgstr ""
+
+msgid "Preallocate database"
+msgstr ""
+
+msgid "Protocol"
+msgstr ""
+
+msgid "Protocol Mapping"
+msgstr ""
+
+msgid ""
+"Protocol mappings to distinguish traffic types per host, one mapping per "
+"line. The first value specifies the IP protocol, the second value the port "
+"number and the third column is the name of the mapped protocol."
+msgstr ""
+
+msgid "Refresh interval"
+msgstr ""
+
+msgid "Restore"
+msgstr ""
+
+msgid "Restore Database Backup"
+msgstr ""
+
+msgid "Select accounting period:"
+msgstr ""
+
+msgid "Source IP"
+msgstr ""
+
+msgid "Start date"
+msgstr ""
+
+msgid "Start date of the first accounting period, e.g. begin of ISP contract."
+msgstr ""
+
+msgid "Stored periods"
+msgstr ""
+
+msgid ""
+"The Netlink Bandwidth Monitor (nlbwmon) is a lightweight, efficient traffic "
+"accounting program keeping track of bandwidth usage per host and protocol."
+msgstr ""
+
+msgid "The following database files have been restored: %s"
+msgstr ""
+
+msgid ""
+"The maximum amount of entries that should be put into the database, setting "
+"the limit to 0 will allow databases to grow indefinitely."
+msgstr ""
+
+msgid "Traffic / Host"
+msgstr ""
+
+msgid "Traffic Distribution"
+msgstr ""
+
+msgid "Up. (Bytes / Pkts.)"
+msgstr ""
+
+msgid "Upload (Bytes / Packets)"
+msgstr ""
+
+msgid "Upload / Application"
+msgstr ""
+
+msgid "Vendor: Example Corp."
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+msgid ""
+"Whether to gzip compress archive databases. Compressing the database files "
+"makes accessing old data slightly slower but helps to reduce storage "
+"requirements."
+msgstr ""
+
+msgid ""
+"Whether to preallocate the maximum possible database size in memory. This is "
+"mainly useful for memory constrained systems which might not be able to "
+"satisfy memory allocation after longer uptime periods."
+msgstr ""
+
+msgid "no traffic"
+msgstr ""
+
+msgid "other"
+msgstr ""
diff --git a/applications/luci-app-nlbwmon/root/etc/uci-defaults/40_luci-nlbwmon b/applications/luci-app-nlbwmon/root/etc/uci-defaults/40_luci-nlbwmon
new file mode 100644
index 000000000..c9771779e
--- /dev/null
+++ b/applications/luci-app-nlbwmon/root/etc/uci-defaults/40_luci-nlbwmon
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+ delete ucitrack.@nlbwmon[-1]
+ add ucitrack nlbwmon
+ set ucitrack.@nlbwmon[-1].init=nlbwmon
+ commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
index d9a61d0bf..22f3106d0 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
@@ -24,6 +24,7 @@ s:tab("general", translate("General Settings"))
s:tab("advanced", translate("Advanced Settings"))
s:taboption("general", Flag, "disabled", translate("Disable"))
ss.option_install_package(s, "general")
+ss.options_common(s, "advanced")
if stype == "ss_server" then
ss.options_server(s, "general")
@@ -42,8 +43,11 @@ else
translate("Tunnel address"),
translate("The address ss-tunnel will forward traffic to"))
o.datatype = "hostport"
+ elseif stype == "ss_redir" then
+ o = s:taboption("advanced", Flag, "disable_sni",
+ translate("Disable SNI"),
+ translate("Disable parsing HTTP/HTTPS payload to find then resolve hostname at remote server"))
end
end
-ss.options_common(s, "advanced")
return m
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
index 2753f458b..63f7ba3c2 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
@@ -108,6 +108,7 @@ function options_common(s, tab)
s:taboption(tab, Value, "user", translate("Run as"))
s:taboption(tab, Flag, "verbose", translate("Verbose"))
+ s:taboption(tab, Flag, "ipv6_first", translate("IPv6 First"), translate("Prefer IPv6 addresses when resolving names"))
s:taboption(tab, Flag, "fast_open", translate("Enable TCP Fast Open"))
s:taboption(tab, Flag, "reuse_port", translate("Enable SO_REUSEPORT"))
end
@@ -131,6 +132,8 @@ function cfgvalue_overview(sdata)
cfgvalue_overview_(sdata, lines, names_options_client)
if stype == "ss_tunnel" then
cfgvalue_overview_(sdata, lines, {"tunnel_address"})
+ elseif stype == "ss_redir" then
+ cfgvalue_overview_(sdata, lines, {"disable_sni"})
end
cfgvalue_overview_(sdata, lines, names_options_common)
else
@@ -205,6 +208,7 @@ names_options_client = {
names_options_common = {
"verbose",
+ "ipv6_first",
"fast_open",
"reuse_port",
"mode",
@@ -247,7 +251,4 @@ methods = {
"salsa20",
"chacha20",
"chacha20-ietf",
- "aes-128-gcm",
- "aes-192-gcm",
- "aes-256-gcm",
}
diff --git a/applications/luci-app-statistics/po/ca/statistics.po b/applications/luci-app-statistics/po/ca/statistics.po
index 33d5051f4..738af5510 100644
--- a/applications/luci-app-statistics/po/ca/statistics.po
+++ b/applications/luci-app-statistics/po/ca/statistics.po
@@ -15,6 +15,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Acció (objectiu)"
@@ -295,6 +301,9 @@ msgstr "Monitoritza els discs i les particions"
msgid "Monitor filesystem types"
msgstr "Monitoritza els tipus de sistema de fitxers"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitoritza mà quines"
@@ -381,6 +390,9 @@ msgstr "Configuració del connector ping"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processos"
@@ -506,6 +518,9 @@ msgstr "TTL per paquets ping"
msgid "Table"
msgstr "Taula"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/cs/statistics.po b/applications/luci-app-statistics/po/cs/statistics.po
index 849831607..fc3f513c5 100644
--- a/applications/luci-app-statistics/po/cs/statistics.po
+++ b/applications/luci-app-statistics/po/cs/statistics.po
@@ -11,6 +11,12 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Akce (cÃl)"
@@ -290,6 +296,9 @@ msgstr "Sledovat disky a oddÃly"
msgid "Monitor filesystem types"
msgstr "Sledovat typy souborových systémů"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Sledovat hostitele"
@@ -376,6 +385,9 @@ msgstr "Nastavenà pluginu Ping"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Procesy"
@@ -500,6 +512,9 @@ msgstr "TTL pro pakety pingu"
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/de/statistics.po b/applications/luci-app-statistics/po/de/statistics.po
index 196433e50..45ba020ad 100644
--- a/applications/luci-app-statistics/po/de/statistics.po
+++ b/applications/luci-app-statistics/po/de/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Aktion (Ziel)"
@@ -297,6 +303,9 @@ msgstr "Geräte und Partitionen überwachen"
msgid "Monitor filesystem types"
msgstr "Datesystemtypen überwachen"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Hosts überwachen"
@@ -383,6 +392,9 @@ msgstr "Ping Plugin Konfiguration"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Prozesse"
@@ -506,6 +518,9 @@ msgstr "TTL für Ping Pakete"
msgid "Table"
msgstr "Tabelle"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
"Das NUT-Plugin liest Informationen über Unterbrechungsfreie Stromversorgungen"
diff --git a/applications/luci-app-statistics/po/el/statistics.po b/applications/luci-app-statistics/po/el/statistics.po
index da54cdac6..406286844 100644
--- a/applications/luci-app-statistics/po/el/statistics.po
+++ b/applications/luci-app-statistics/po/el/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.4\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -288,6 +294,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -374,6 +383,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "ÎιεÏγαÏίεÏ"
@@ -497,6 +509,9 @@ msgstr ""
msgid "Table"
msgstr "ΠίνακαÏ"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/en/statistics.po b/applications/luci-app-statistics/po/en/statistics.po
index d9ab59ce0..f7ebfe0c2 100644
--- a/applications/luci-app-statistics/po/en/statistics.po
+++ b/applications/luci-app-statistics/po/en/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 1.1.1\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Action (target)"
@@ -293,6 +299,9 @@ msgstr "Monitor disks and partitions"
msgid "Monitor filesystem types"
msgstr "Monitor filesystem types"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitor hosts"
@@ -379,6 +388,9 @@ msgstr "Ping Plugin Configuration"
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processes"
@@ -502,6 +514,9 @@ msgstr "TTL for ping packets"
msgid "Table"
msgstr "Table"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/es/statistics.po b/applications/luci-app-statistics/po/es/statistics.po
index 18c25819a..3c811ffef 100644
--- a/applications/luci-app-statistics/po/es/statistics.po
+++ b/applications/luci-app-statistics/po/es/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Acción (objetivo)"
@@ -292,6 +298,9 @@ msgstr "Monitorizar discos y particiones"
msgid "Monitor filesystem types"
msgstr "Monitorizar tipos de sistema de archivos"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitorizar máquinas"
@@ -378,6 +387,9 @@ msgstr "Configuración del plugin \"Ping\""
msgid "Port"
msgstr "Puerto"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Procesos"
@@ -501,6 +513,9 @@ msgstr "TTL para paquetes de ping"
msgid "Table"
msgstr "Tabla"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
"El plugin NUT obtiene información sobre Sistemas de Alimentación "
diff --git a/applications/luci-app-statistics/po/fr/statistics.po b/applications/luci-app-statistics/po/fr/statistics.po
index b657bd38f..bc156dd42 100644
--- a/applications/luci-app-statistics/po/fr/statistics.po
+++ b/applications/luci-app-statistics/po/fr/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Pootle 2.0.4\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Action (cible)"
@@ -294,6 +300,9 @@ msgstr "Disques et partitions à surveiller"
msgid "Monitor filesystem types"
msgstr "types de systèmes de fichier à surveiller"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Hôtes à surveiller"
@@ -380,6 +389,9 @@ msgstr "Configuration du greffon Ping"
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processus"
@@ -503,6 +515,9 @@ msgstr "TTL des paquets ping"
msgid "Table"
msgstr "Table"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/he/statistics.po b/applications/luci-app-statistics/po/he/statistics.po
index 6f40a47a2..35f978ed2 100644
--- a/applications/luci-app-statistics/po/he/statistics.po
+++ b/applications/luci-app-statistics/po/he/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -283,6 +289,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -369,6 +378,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -492,6 +504,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/hu/statistics.po b/applications/luci-app-statistics/po/hu/statistics.po
index 979c72f0f..e5c4e601c 100644
--- a/applications/luci-app-statistics/po/hu/statistics.po
+++ b/applications/luci-app-statistics/po/hu/statistics.po
@@ -11,6 +11,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Tevékenység (cél)"
@@ -295,6 +301,9 @@ msgstr "Lemezek és partÃciók figyelése"
msgid "Monitor filesystem types"
msgstr "Fájlrendszer tÃpusok figyelése"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Gépek figyelése"
@@ -381,6 +390,9 @@ msgstr "Ping bÅvÃtmény beállÃtása"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Folyamatok"
@@ -508,6 +520,9 @@ msgstr "TTL a ping csomagokhoz"
msgid "Table"
msgstr "Táblázat"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "A NUT bÅvÃtmény a szünetmentes tápokról ad információkat."
diff --git a/applications/luci-app-statistics/po/it/statistics.po b/applications/luci-app-statistics/po/it/statistics.po
index b0ae3d6b7..2451503f2 100644
--- a/applications/luci-app-statistics/po/it/statistics.po
+++ b/applications/luci-app-statistics/po/it/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Azione (destinazione)"
@@ -293,6 +299,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -379,6 +388,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -502,6 +514,9 @@ msgstr ""
msgid "Table"
msgstr "Tabella"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/ja/statistics.po b/applications/luci-app-statistics/po/ja/statistics.po
index 690d9207d..53941cf0f 100644
--- a/applications/luci-app-statistics/po/ja/statistics.po
+++ b/applications/luci-app-statistics/po/ja/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"X-Generator: Poedit 1.8.11\n"
"Language-Team: \n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "ã¢ã¯ã·ã§ã³ï¼å¯¾è±¡ï¼"
@@ -295,6 +301,9 @@ msgstr "ãã£ã¹ã¯ã¨ãã¼ãã£ã·ã§ã³ãã¢ãã¿ã¼ãã"
msgid "Monitor filesystem types"
msgstr "ãã¡ã¤ã«ã·ã¹ãã ã¿ã¤ããã¢ãã¿ã¼ãã"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "ãã¹ããã¢ãã¿ã¼ãã"
@@ -384,6 +393,9 @@ msgstr "Ping ãã©ã°ã¤ã³è¨å®"
msgid "Port"
msgstr "ãã¼ã"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "ããã»ã¹"
@@ -507,6 +519,9 @@ msgstr "pingãã±ããã®TTL"
msgid "Table"
msgstr "ãã¼ãã«"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "NUT ãã©ã°ã¤ã³ã¯ãç¡åé»é»æºè£
ç½®ã«ã¤ãã¦ã®æ
å ±ãèªã¿åãã¾ãã"
diff --git a/applications/luci-app-statistics/po/ms/statistics.po b/applications/luci-app-statistics/po/ms/statistics.po
index 582314c54..c02556fc8 100644
--- a/applications/luci-app-statistics/po/ms/statistics.po
+++ b/applications/luci-app-statistics/po/ms/statistics.po
@@ -10,6 +10,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -280,6 +286,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -366,6 +375,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -489,6 +501,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/no/statistics.po b/applications/luci-app-statistics/po/no/statistics.po
index d37bc488f..4de2ee6b5 100644
--- a/applications/luci-app-statistics/po/no/statistics.po
+++ b/applications/luci-app-statistics/po/no/statistics.po
@@ -4,6 +4,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Handling (mål)"
@@ -282,6 +288,9 @@ msgstr "Overvåk disker og partisjoner"
msgid "Monitor filesystem types"
msgstr "Overvåk filsystem typer"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Overvåk verter"
@@ -368,6 +377,9 @@ msgstr "Ping plugin konfigurasjon"
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Prosesser"
@@ -491,6 +503,9 @@ msgstr "TTL for ping pakker"
msgid "Table"
msgstr "Tabell"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/pl/statistics.po b/applications/luci-app-statistics/po/pl/statistics.po
index bf2ec9351..6e34ce072 100644
--- a/applications/luci-app-statistics/po/pl/statistics.po
+++ b/applications/luci-app-statistics/po/pl/statistics.po
@@ -14,6 +14,12 @@ msgstr ""
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Akcja (cel)"
@@ -296,6 +302,9 @@ msgstr "Monitoruj dyski i partycje"
msgid "Monitor filesystem types"
msgstr "Monitoruj system plików"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitoruj hosty"
@@ -382,6 +391,9 @@ msgstr "Konfiguracja wtyczki Ping"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Procesy"
@@ -506,6 +518,9 @@ msgstr "TTL dla pakietów ping"
msgid "Table"
msgstr "Tabela"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "Wtyczka Nut Informuje o Nie przerywalnym Zasilaniu"
diff --git a/applications/luci-app-statistics/po/pt-br/statistics.po b/applications/luci-app-statistics/po/pt-br/statistics.po
index 74c4a2603..c5d689933 100644
--- a/applications/luci-app-statistics/po/pt-br/statistics.po
+++ b/applications/luci-app-statistics/po/pt-br/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"X-Generator: Poedit 1.8.11\n"
"Language-Team: \n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Ação (destino)"
@@ -299,6 +305,9 @@ msgstr "Monitoras discos e partições"
msgid "Monitor filesystem types"
msgstr "Monitorar tipos de sistemas de arquivos"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitorar os equipamentos"
@@ -388,6 +397,9 @@ msgstr "Configuração do plugin Ping"
msgid "Port"
msgstr "Porta"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processos"
@@ -511,6 +523,9 @@ msgstr "TTL para os pacotes do ping"
msgid "Table"
msgstr "Tabela"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "O plugin NUT lê informações sobre Fontes de alimentação ininterruptas."
diff --git a/applications/luci-app-statistics/po/pt/statistics.po b/applications/luci-app-statistics/po/pt/statistics.po
index 79c7bd03e..245e6e9bf 100644
--- a/applications/luci-app-statistics/po/pt/statistics.po
+++ b/applications/luci-app-statistics/po/pt/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Ação (destino)"
@@ -295,6 +301,9 @@ msgstr "Monitoras discos e partições"
msgid "Monitor filesystem types"
msgstr "Monitorar tipos de sistemas de arquivos"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitorar os hosts"
@@ -381,6 +390,9 @@ msgstr "Configuração do plugin Ping"
msgid "Port"
msgstr "Porta"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processos"
@@ -504,6 +516,9 @@ msgstr "TTL para os pacotes do ping"
msgid "Table"
msgstr "Tabela"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/ro/statistics.po b/applications/luci-app-statistics/po/ro/statistics.po
index c5dfcfe55..a326fec79 100644
--- a/applications/luci-app-statistics/po/ro/statistics.po
+++ b/applications/luci-app-statistics/po/ro/statistics.po
@@ -14,6 +14,12 @@ msgstr ""
"20)) ? 1 : 2);;\n"
"X-Generator: Pootle 2.0.4\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -287,6 +293,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -373,6 +382,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Procese"
@@ -496,6 +508,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/ru/statistics.po b/applications/luci-app-statistics/po/ru/statistics.po
index 3a418dec7..9d0ff9fdf 100644
--- a/applications/luci-app-statistics/po/ru/statistics.po
+++ b/applications/luci-app-statistics/po/ru/statistics.po
@@ -15,6 +15,12 @@ msgstr ""
"X-Generator: Pootle 2.0.6\n"
"X-Poedit-SourceCharset: UTF-8\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "ÐейÑÑвие (ÑелÑ)"
@@ -297,6 +303,9 @@ msgstr "СобиÑаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ñ Ð´Ð¸Ñков и Ñаздело
msgid "Monitor filesystem types"
msgstr "СобиÑаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ñ ÑайловÑÑ
ÑиÑÑем"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "СобиÑаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ñ Ñ
оÑÑов"
@@ -383,6 +392,9 @@ msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ping"
msgid "Port"
msgstr "ÐоÑÑ"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "ÐÑоÑеÑÑÑ"
@@ -508,6 +520,9 @@ msgstr "TTL Ð´Ð»Ñ ping-пакеÑов"
msgid "Table"
msgstr "ТаблиÑа"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/sk/statistics.po b/applications/luci-app-statistics/po/sk/statistics.po
index 6dba7d09b..53858ca54 100644
--- a/applications/luci-app-statistics/po/sk/statistics.po
+++ b/applications/luci-app-statistics/po/sk/statistics.po
@@ -8,6 +8,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -278,6 +284,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -364,6 +373,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -487,6 +499,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/sv/statistics.po b/applications/luci-app-statistics/po/sv/statistics.po
index bef0f2d6c..9d738f2f3 100644
--- a/applications/luci-app-statistics/po/sv/statistics.po
+++ b/applications/luci-app-statistics/po/sv/statistics.po
@@ -9,6 +9,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -283,6 +289,9 @@ msgstr "Ãvervaka hÃ¥rddiskar och partitioner"
msgid "Monitor filesystem types"
msgstr "Ãvervaka filsystemtyper"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Ãvervaka värdar"
@@ -369,6 +378,9 @@ msgstr ""
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processer"
@@ -492,6 +504,9 @@ msgstr "TTL för ping-paket"
msgid "Table"
msgstr "Tabell"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/templates/statistics.pot b/applications/luci-app-statistics/po/templates/statistics.pot
index c57a85b76..ec630b696 100644
--- a/applications/luci-app-statistics/po/templates/statistics.pot
+++ b/applications/luci-app-statistics/po/templates/statistics.pot
@@ -1,6 +1,12 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -271,6 +277,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -357,6 +366,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -480,6 +492,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/tr/statistics.po b/applications/luci-app-statistics/po/tr/statistics.po
index 6d7056f3b..860ff95e8 100644
--- a/applications/luci-app-statistics/po/tr/statistics.po
+++ b/applications/luci-app-statistics/po/tr/statistics.po
@@ -9,6 +9,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -279,6 +285,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -365,6 +374,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -488,6 +500,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/uk/statistics.po b/applications/luci-app-statistics/po/uk/statistics.po
index de17a3caf..ac9ae5094 100644
--- a/applications/luci-app-statistics/po/uk/statistics.po
+++ b/applications/luci-app-statistics/po/uk/statistics.po
@@ -14,6 +14,12 @@ msgstr ""
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -284,6 +290,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -370,6 +379,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -493,6 +505,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/vi/statistics.po b/applications/luci-app-statistics/po/vi/statistics.po
index bdb7f1a3a..f5798a265 100644
--- a/applications/luci-app-statistics/po/vi/statistics.po
+++ b/applications/luci-app-statistics/po/vi/statistics.po
@@ -14,6 +14,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Pootle 1.1.0\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Action (target)"
@@ -294,6 +300,9 @@ msgstr "Kiá»m soát ÄÄ©a và phân vùng"
msgid "Monitor filesystem types"
msgstr "Kiá»m soát loại filesystem"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitor hosts"
@@ -380,6 +389,9 @@ msgstr "Cấu hình Ping plugin"
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Quá trình xỠlý"
@@ -503,6 +515,9 @@ msgstr "TTl cho gói ping"
msgid "Table"
msgstr "Table"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/zh-cn/statistics.po b/applications/luci-app-statistics/po/zh-cn/statistics.po
index 46cf59fee..20f5a93cb 100644
--- a/applications/luci-app-statistics/po/zh-cn/statistics.po
+++ b/applications/luci-app-statistics/po/zh-cn/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"X-Generator: Poedit 2.0.1\n"
"Language-Team: \n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "å¨ä½ï¼ç®æ ï¼"
@@ -289,6 +295,9 @@ msgstr "çæµç£çåååº"
msgid "Monitor filesystem types"
msgstr "çæµæ件系ç»ç±»å"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "çæµä¸»æº"
@@ -377,6 +386,9 @@ msgstr "Pingæ件é
ç½®"
msgid "Port"
msgstr "端å£"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "è¿ç¨"
@@ -500,6 +512,9 @@ msgstr "pingå
TTL"
msgid "Table"
msgstr "表"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "NUTæ件读åUPSä¿¡æ¯ã"
diff --git a/applications/luci-app-statistics/po/zh-tw/statistics.po b/applications/luci-app-statistics/po/zh-tw/statistics.po
index cbd6d9d38..36e42c1d0 100644
--- a/applications/luci-app-statistics/po/zh-tw/statistics.po
+++ b/applications/luci-app-statistics/po/zh-tw/statistics.po
@@ -7,6 +7,12 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -277,6 +283,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -363,6 +372,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -486,6 +498,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-travelmate/po/ja/travelmate.po b/applications/luci-app-travelmate/po/ja/travelmate.po
index bd1d54739..150ef7047 100644
--- a/applications/luci-app-travelmate/po/ja/travelmate.po
+++ b/applications/luci-app-travelmate/po/ja/travelmate.po
@@ -12,6 +12,9 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"Language: ja\n"
+msgid "Actions"
+msgstr "æä½"
+
msgid "Add Interface"
msgstr "ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®è¿½å "
@@ -58,9 +61,6 @@ msgstr "ãã®ã¢ãããªã³ã¯ãåé¤"
msgid "Device"
msgstr "ããã¤ã¹"
-msgid "Disabled"
-msgstr "ç¡å¹"
-
msgid "Edit"
msgstr "ç·¨é"
@@ -124,18 +124,31 @@ msgstr "ã¤ã³ã¿ã¼ãã§ã¼ã¹ ã¿ã¤ã ã¢ã¦ã"
msgid "Interface Wizard"
msgstr "ã¤ã³ã¿ã¼ãã§ã¼ã¹ ã¦ã£ã¶ã¼ã"
-msgid "Keep travelmate in an active state."
-msgstr "Travelmate ãã¢ã¯ãã£ãç¶æ
ã§ç¶æãã¾ãã"
+msgid ""
+"Keep travelmate in an active state. Check every n seconds the connection "
+"status, i.e. the uplink availability."
+msgstr ""
+"Travelmate ãã¢ã¯ãã£ãç¶æ
ã§ç¶æãã¾ãã nç§ãã¨ã«ã¢ãããªã³ã¯ã®å¯ç¨æ§ç¢ºèªã¨"
+"ãã¦ãæ¥ç¶ç¶æ
ããã§ãã¯ãã¾ã"
msgid "Last rundate"
msgstr "æçµå®è¡æ¥æ"
-msgid "Mode"
-msgstr "ã¢ã¼ã"
+msgid "Manual Rescan"
+msgstr "æååã¹ãã£ã³"
-msgid "Name of the uplink interface that triggers travelmate processing."
+msgid "Move down"
+msgstr "ä¸ã¸"
+
+msgid "Move up"
+msgstr "ä¸ã¸"
+
+msgid ""
+"Name of the uplink interface that triggers travelmate processing in 'manual' "
+"mode."
msgstr ""
-"Travelmate ã®å¦çã®ããªã¬ã¼ã¨ãªããã¢ãããªã³ã¯ ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ååã§ãã"
+"'manual' ã¢ã¼ãæã« Travelmate ã®å¦çã®ããªã¬ã¼ã¨ãªããã¢ãããªã³ã¯ ã¤ã³ã¿ã¼"
+"ãã§ã¼ã¹ã®ååã§ãã"
msgid "Online Status"
msgstr "ãªã³ã©ã¤ã³ ã¹ãã¼ã¿ã¹"
@@ -157,12 +170,14 @@ msgid "Passphrase (%s)"
msgstr "æå·ãã¬ã¼ãº (%s)"
msgid ""
-"Provides an overview of all configured uplink interfaces for travelmate. You "
-"can edit and delete existing interfaces or scan for new uplinks."
+"Provides an overview of all configured uplinks for the travelmate interface "
+"(%s). You can edit, delete or re-order existing uplinks or scan for a new "
+"one. The currently used uplink is emphasized in blue."
msgstr ""
-"Travelmate ã«ããããå
¨ã¦ã®è¨å®æ¸ã¿ã¢ãããªã³ã¯ ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ä¸è¦§ã§ãã"
-"æ¢åã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ãç·¨éã¾ãã¯åé¤ããããæ°è¦ã¢ãããªã³ã¯ã®è¿½å ã®ããã«"
-"ã¹ãã£ã³ãè¡ããã¨ãã§ãã¾ãã"
+"Travelmate ç¨ã¤ã³ã¿ã¼ãã§ã¼ã¹ï¼%sï¼ã«è¨å®æ¸ã¿ã®å
¨ã¢ãããªã³ã¯ã®ä¸è¦§ã§ããæ¢å"
+"ã®ã¢ãããªã³ã¯ã®ç·¨éãåé¤ã並ã¹æ¿ããè¡ã£ãããã¹ãã£ã³ãè¡ã£ã¦æ°è¦ã¢ãããª"
+"ã³ã¯ã追å ãããã¨ãã§ãã¾ããç¾å¨ä½¿ç¨ããã¦ããã¢ãããªã³ã¯ã¯ãéè²ã§å¼·èª¿ã"
+"ãã¾ãã"
msgid "Radio selection"
msgstr "ç¡ç·ã®é¸æ"
@@ -170,6 +185,9 @@ msgstr "ç¡ç·ã®é¸æ"
msgid "Repeat scan"
msgstr "åã¹ãã£ã³"
+msgid "Rescan"
+msgstr "åã¹ãã£ã³"
+
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
msgstr "Travelmate ãç¹å®ã®ç¡ç·ã«æ¥ç¶ããããã«ãã¾ããä¾: 'radio0'"
@@ -179,6 +197,9 @@ msgstr "å®è¡æ
å ±"
msgid "SSID"
msgstr "SSID"
+msgid "SSID (hidden)"
+msgstr "SSIDï¼ã¹ãã«ã¹ï¼"
+
msgid "Scan"
msgstr "ã¹ãã£ã³:"
@@ -253,9 +274,6 @@ msgstr "ä¸æ"
msgid "Uplink / Trigger interface"
msgstr "ã¢ãããªã³ã¯/ããªã¬ã¼ ã¤ã³ã¿ã¼ãã§ã¼ã¹"
-msgid "Uplink Interface"
-msgstr "ã¢ãããªã³ã¯ ã¤ã³ã¿ã¼ãã§ã¼ã¹"
-
msgid "Uplink SSID"
msgstr "ã¢ãããªã³ã¯ SSID"
diff --git a/applications/luci-app-travelmate/po/pt-br/travelmate.po b/applications/luci-app-travelmate/po/pt-br/travelmate.po
index 5e09759c4..d74373d8c 100644
--- a/applications/luci-app-travelmate/po/pt-br/travelmate.po
+++ b/applications/luci-app-travelmate/po/pt-br/travelmate.po
@@ -12,6 +12,9 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: pt_BR\n"
+msgid "Actions"
+msgstr ""
+
msgid "Add Interface"
msgstr ""
@@ -55,9 +58,6 @@ msgstr ""
msgid "Device"
msgstr ""
-msgid "Disabled"
-msgstr ""
-
msgid "Edit"
msgstr ""
@@ -117,16 +117,26 @@ msgstr ""
msgid "Interface Wizard"
msgstr ""
-msgid "Keep travelmate in an active state."
+msgid ""
+"Keep travelmate in an active state. Check every n seconds the connection "
+"status, i.e. the uplink availability."
msgstr ""
msgid "Last rundate"
msgstr ""
-msgid "Mode"
+msgid "Manual Rescan"
+msgstr ""
+
+msgid "Move down"
+msgstr ""
+
+msgid "Move up"
msgstr ""
-msgid "Name of the uplink interface that triggers travelmate processing."
+msgid ""
+"Name of the uplink interface that triggers travelmate processing in 'manual' "
+"mode."
msgstr ""
msgid "Online Status"
@@ -149,8 +159,9 @@ msgid "Passphrase (%s)"
msgstr ""
msgid ""
-"Provides an overview of all configured uplink interfaces for travelmate. You "
-"can edit and delete existing interfaces or scan for new uplinks."
+"Provides an overview of all configured uplinks for the travelmate interface "
+"(%s). You can edit, delete or re-order existing uplinks or scan for a new "
+"one. The currently used uplink is emphasized in blue."
msgstr ""
msgid "Radio selection"
@@ -159,6 +170,9 @@ msgstr ""
msgid "Repeat scan"
msgstr ""
+msgid "Rescan"
+msgstr ""
+
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
msgstr ""
@@ -168,6 +182,9 @@ msgstr ""
msgid "SSID"
msgstr ""
+msgid "SSID (hidden)"
+msgstr ""
+
msgid "Scan"
msgstr ""
@@ -232,9 +249,6 @@ msgstr ""
msgid "Uplink / Trigger interface"
msgstr ""
-msgid "Uplink Interface"
-msgstr ""
-
msgid "Uplink SSID"
msgstr ""
diff --git a/applications/luci-app-travelmate/po/templates/travelmate.pot b/applications/luci-app-travelmate/po/templates/travelmate.pot
index a0e562969..dc0583fb7 100644
--- a/applications/luci-app-travelmate/po/templates/travelmate.pot
+++ b/applications/luci-app-travelmate/po/templates/travelmate.pot
@@ -1,6 +1,9 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
+msgid "Actions"
+msgstr ""
+
msgid "Add Interface"
msgstr ""
@@ -44,9 +47,6 @@ msgstr ""
msgid "Device"
msgstr ""
-msgid "Disabled"
-msgstr ""
-
msgid "Edit"
msgstr ""
@@ -106,16 +106,26 @@ msgstr ""
msgid "Interface Wizard"
msgstr ""
-msgid "Keep travelmate in an active state."
+msgid ""
+"Keep travelmate in an active state. Check every n seconds the connection "
+"status, i.e. the uplink availability."
msgstr ""
msgid "Last rundate"
msgstr ""
-msgid "Mode"
+msgid "Manual Rescan"
+msgstr ""
+
+msgid "Move down"
+msgstr ""
+
+msgid "Move up"
msgstr ""
-msgid "Name of the uplink interface that triggers travelmate processing."
+msgid ""
+"Name of the uplink interface that triggers travelmate processing in 'manual' "
+"mode."
msgstr ""
msgid "Online Status"
@@ -138,8 +148,9 @@ msgid "Passphrase (%s)"
msgstr ""
msgid ""
-"Provides an overview of all configured uplink interfaces for travelmate. You "
-"can edit and delete existing interfaces or scan for new uplinks."
+"Provides an overview of all configured uplinks for the travelmate interface "
+"(%s). You can edit, delete or re-order existing uplinks or scan for a new "
+"one. The currently used uplink is emphasized in blue."
msgstr ""
msgid "Radio selection"
@@ -148,6 +159,9 @@ msgstr ""
msgid "Repeat scan"
msgstr ""
+msgid "Rescan"
+msgstr ""
+
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
msgstr ""
@@ -157,6 +171,9 @@ msgstr ""
msgid "SSID"
msgstr ""
+msgid "SSID (hidden)"
+msgstr ""
+
msgid "Scan"
msgstr ""
@@ -221,9 +238,6 @@ msgstr ""
msgid "Uplink / Trigger interface"
msgstr ""
-msgid "Uplink Interface"
-msgstr ""
-
msgid "Uplink SSID"
msgstr ""
diff --git a/applications/luci-app-watchcat/po/sv/watchcat.po b/applications/luci-app-watchcat/po/sv/watchcat.po
index 07aa72649..96c73e311 100644
--- a/applications/luci-app-watchcat/po/sv/watchcat.po
+++ b/applications/luci-app-watchcat/po/sv/watchcat.po
@@ -19,8 +19,8 @@ msgid ""
"How often to check internet connection. Default unit is seconds, you can you "
"use the suffix 'm' for minutes, 'h' for hours or 'd' for days"
msgstr ""
-"Hur ofta internet-anslutningen ska kollas. Standardenheten är sekunder, du kan använda "
-"tillägget 'm' för minutrar, 't' för timmar eller 'd' för dagar"
+"Hur ofta internet-anslutningen ska kollas. Standardenheten är sekunder, du "
+"kan använda tillägget 'm' för minutrar, 't' för timmar eller 'd' för dagar"
msgid ""
"In periodic mode, it defines the reboot period. In internet mode, it defines "
diff --git a/applications/luci-app-wifischedule/po/sv/wifischedule.po b/applications/luci-app-wifischedule/po/sv/wifischedule.po
index ca4e5aac7..50953aa28 100644
--- a/applications/luci-app-wifischedule/po/sv/wifischedule.po
+++ b/applications/luci-app-wifischedule/po/sv/wifischedule.po
@@ -1,5 +1,5 @@
msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "Activate wifi"
msgstr "Aktivera wifi"
diff --git a/applications/luci-app-wireguard/po/sv/wireguard.po b/applications/luci-app-wireguard/po/sv/wireguard.po
index b7e3ed5b5..1aa68e251 100644
--- a/applications/luci-app-wireguard/po/sv/wireguard.po
+++ b/applications/luci-app-wireguard/po/sv/wireguard.po
@@ -1,5 +1,5 @@
msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "Allowed IPs"
msgstr "Tillåtna IP-adresser"
diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js
index 4be917d09..b819230cf 100644
--- a/modules/luci-base/htdocs/luci-static/resources/cbi.js
+++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js
@@ -481,8 +481,9 @@ function cbi_d_check(deps) {
istat = (istat && cbi_d_checkvalue(j, deps[i][j]))
}
}
- if (istat) {
- return !reverse;
+
+ if (istat ^ reverse) {
+ return true;
}
}
return def;
@@ -648,9 +649,6 @@ function cbi_combobox(id, values, def, man, focus) {
var dt = obj.getAttribute('cbi_datatype');
var op = obj.getAttribute('cbi_optional');
- if (dt)
- cbi_validate_field(sel, op == 'true', dt);
-
if (!values[obj.value]) {
if (obj.value == "") {
var optdef = document.createElement("option");
@@ -685,6 +683,9 @@ function cbi_combobox(id, values, def, man, focus) {
obj.style.display = "none";
+ if (dt)
+ cbi_validate_field(sel, op == 'true', dt);
+
cbi_bind(sel, "change", function() {
if (sel.selectedIndex == sel.options.length - 1) {
obj.style.display = "inline";
diff --git a/modules/luci-base/htdocs/luci-static/resources/xhr.js b/modules/luci-base/htdocs/luci-static/resources/xhr.js
index 701c12ac1..3385f8f23 100644
--- a/modules/luci-base/htdocs/luci-static/resources/xhr.js
+++ b/modules/luci-base/htdocs/luci-static/resources/xhr.js
@@ -91,8 +91,6 @@ XHR = function()
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
- xhr.setRequestHeader('Content-length', code.length);
- xhr.setRequestHeader('Connection', 'close');
xhr.send(code);
}
diff --git a/modules/luci-base/luasrc/sys.lua b/modules/luci-base/luasrc/sys.lua
index 99f3ee291..115c54d54 100644
--- a/modules/luci-base/luasrc/sys.lua
+++ b/modules/luci-base/luasrc/sys.lua
@@ -348,8 +348,10 @@ end
function net.devices()
local devs = {}
+ local seen = {}
for k, v in ipairs(nixio.getifaddrs()) do
- if v.family == "packet" then
+ if v.name and not seen[v.name] then
+ seen[v.name] = true
devs[#devs+1] = v.name
end
end
diff --git a/modules/luci-base/po/ca/base.po b/modules/luci-base/po/ca/base.po
index 9f4efdd1f..0486ec250 100644
--- a/modules/luci-base/po/ca/base.po
+++ b/modules/luci-base/po/ca/base.po
@@ -2342,6 +2342,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "La contrasenya s'ha canviat amb èxit!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Ruta als Certificats CA"
diff --git a/modules/luci-base/po/cs/base.po b/modules/luci-base/po/cs/base.po
index 9efe3b7d8..c217b0c39 100644
--- a/modules/luci-base/po/cs/base.po
+++ b/modules/luci-base/po/cs/base.po
@@ -2365,6 +2365,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "Heslo bylo úspÄÅ¡nÄ zmÄnÄno!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Cesta k certifikátu CA"
diff --git a/modules/luci-base/po/de/base.po b/modules/luci-base/po/de/base.po
index fa26a1d72..183e495a2 100644
--- a/modules/luci-base/po/de/base.po
+++ b/modules/luci-base/po/de/base.po
@@ -2427,6 +2427,9 @@ msgstr "Password des inneren, privaten Schlüssels"
msgid "Password successfully changed!"
msgstr "Passwort erfolgreich geändert!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Pfad zum CA-Zertifikat"
diff --git a/modules/luci-base/po/el/base.po b/modules/luci-base/po/el/base.po
index e3969afff..b385651f3 100644
--- a/modules/luci-base/po/el/base.po
+++ b/modules/luci-base/po/el/base.po
@@ -2372,6 +2372,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "ΠκÏδικÏÏ ÏÏÏÏβαÏÎ·Ï Î¬Î»Î»Î±Î¾Îµ εÏιÏÏ
ÏÏÏ!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "ÎιαδÏομή για ΠιÏÏοÏοιηÏÎ¹ÎºÏ CA"
diff --git a/modules/luci-base/po/en/base.po b/modules/luci-base/po/en/base.po
index 653737015..04207336e 100644
--- a/modules/luci-base/po/en/base.po
+++ b/modules/luci-base/po/en/base.po
@@ -2339,6 +2339,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr ""
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Path to CA-Certificate"
diff --git a/modules/luci-base/po/es/base.po b/modules/luci-base/po/es/base.po
index a3476735b..626e374b4 100644
--- a/modules/luci-base/po/es/base.po
+++ b/modules/luci-base/po/es/base.po
@@ -2379,6 +2379,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "¡Contraseña cambiada!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Ruta al Certificado CA"
diff --git a/modules/luci-base/po/fr/base.po b/modules/luci-base/po/fr/base.po
index 1aab5cb9a..b0b4b4334 100644
--- a/modules/luci-base/po/fr/base.po
+++ b/modules/luci-base/po/fr/base.po
@@ -2392,6 +2392,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "Mot de passe changé avec succès !"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Chemin de la CA"
diff --git a/modules/luci-base/po/he/base.po b/modules/luci-base/po/he/base.po
index d8eae1f84..2c2c5d27e 100644
--- a/modules/luci-base/po/he/base.po
+++ b/modules/luci-base/po/he/base.po
@@ -2306,6 +2306,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr ""
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr ""
diff --git a/modules/luci-base/po/hu/base.po b/modules/luci-base/po/hu/base.po
index dfed45de5..8f5aee4c7 100644
--- a/modules/luci-base/po/hu/base.po
+++ b/modules/luci-base/po/hu/base.po
@@ -2382,6 +2382,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "A jelszó megváltoztatása sikeres!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "CA tanúsÃtvány elérési útja"
diff --git a/modules/luci-base/po/it/base.po b/modules/luci-base/po/it/base.po
index 04331ab75..ea7578e61 100644
--- a/modules/luci-base/po/it/base.po
+++ b/modules/luci-base/po/it/base.po
@@ -2378,6 +2378,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "Password cambiata con successo!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Percorso al certificato CA"
diff --git a/modules/luci-base/po/ja/base.po b/modules/luci-base/po/ja/base.po
index 714b064dc..7d23abede 100644
--- a/modules/luci-base/po/ja/base.po
+++ b/modules/luci-base/po/ja/base.po
@@ -3,14 +3,14 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2017-04-03 02:32+0900\n"
+"PO-Revision-Date: 2017-07-28 12:17+0900\n"
"Last-Translator: INAGAKI Hiroshi \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: Poedit 2.0\n"
+"X-Generator: Poedit 2.0.3\n"
"Language-Team: \n"
msgid "%s is untagged in multiple VLANs!"
@@ -44,7 +44,7 @@ msgid "-- match by label --"
msgstr "-- ã©ãã«ãæå® --"
msgid "-- match by uuid --"
-msgstr "-- UUIDãæå® --"
+msgstr "-- UUID ãæå® --"
msgid "1 Minute Load:"
msgstr "éå»1åã®è² è·:"
@@ -157,6 +157,8 @@ msgid ""
"
Note: you need to manually restart the cron service if the crontab file "
"was empty before editing."
msgstr ""
+"
注æ: ç·¨éåã® crontab ãã¡ã¤ã«ã空ã®å ´åãæå㧠cron ãµã¼ãã¹ã®åèµ·å"
+"ãè¡ãå¿
è¦ãããã¾ãã"
msgid "A43C + J43 + A43"
msgstr ""
@@ -283,7 +285,7 @@ msgid "Allocate IP sequentially"
msgstr ""
msgid "Allow SSH password authentication"
-msgstr "SSH ãã¹ã¯ã¼ãèªè¨¼ã許å¯ãã¾ã"
+msgstr "SSH ãã¹ã¯ã¼ãèªè¨¼ã許å¯ãã¾ãã"
msgid "Allow all except listed"
msgstr "ãªã¹ãå
ã®ç«¯æ«ããã®ã¢ã¯ã»ã¹ãç¦æ¢"
@@ -299,10 +301,10 @@ msgstr ""
"ãªã¢ã¼ããã¹ããSSH転éããããã¼ã«ã«ã®ãã¼ãã«æ¥ç¶ãããã¨ã許å¯ãã¾ã"
msgid "Allow root logins with password"
-msgstr "ãã¹ã¯ã¼ãã使ç¨ããroot権éã§ã®ãã°ã¤ã³ã許å¯ãã"
+msgstr "ãã¹ã¯ã¼ãã§ã® root ãã°ã¤ã³ã許å¯"
msgid "Allow the root user to login with password"
-msgstr "ãã¹ã¯ã¼ãã使ç¨ããroot権éã§ã®ãã°ã¤ã³ã許å¯ãã"
+msgstr "ãã¹ã¯ã¼ãã使ç¨ãã root 権éã§ã®ãã°ã¤ã³ã許å¯ãã¾ãã"
msgid ""
"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services"
@@ -515,8 +517,8 @@ msgid ""
"defined backup patterns."
msgstr ""
"以ä¸ã¯ãããã¯ã¢ããã®éã«å«ã¾ãããã¡ã¤ã«ã®ãªã¹ãã§ãããã®ãªã¹ãã¯ãopkgã«"
-"ãã£ã¦èªèããã¦ããè¨å®ãã¡ã¤ã«ãéè¦ãªãã¼ã¹ãã¡ã¤ã«ãã¦ã¼ã¶ã¼ãè¨å®ããæ£"
-"è¦è¡¨ç¾ã«ä¸è´ãããã¡ã¤ã«ã®ä¸è¦§ã§ãã"
+"ãã£ã¦èªèããã¦ããè¨å®ãã¡ã¤ã«ãéè¦ãªãã¼ã¹ãã¡ã¤ã«ãã¦ã¼ã¶ã¼ãè¨å®ããã"
+"ã¿ã¼ã³ã«ä¸è´ãããã¡ã¤ã«ã®ä¸è¦§ã§ãã"
msgid "Bind interface"
msgstr ""
@@ -858,7 +860,7 @@ msgid "Device is rebooting..."
msgstr "ããã¤ã¹ãåèµ·åä¸ã§ã..."
msgid "Device unreachable"
-msgstr ""
+msgstr "ããã¤ã¹ã«å°éã§ãã¾ãã"
msgid "Diagnostics"
msgstr "診ææ©è½"
@@ -1217,7 +1219,7 @@ msgid "Force TKIP and CCMP (AES)"
msgstr "TKIP åã³CCMP (AES) ã使ç¨"
msgid "Force link"
-msgstr ""
+msgstr "å¼·å¶ãªã³ã¯"
msgid "Force use of NAT-T"
msgstr "NAT-Tã®å¼·å¶ä½¿ç¨"
@@ -1467,7 +1469,7 @@ msgid "IPv6 routed prefix"
msgstr ""
msgid "IPv6 suffix"
-msgstr ""
+msgstr "IPv6 ãµãã£ãã¯ã¹"
msgid "IPv6-Address"
msgstr "IPv6-ã¢ãã¬ã¹"
@@ -2380,6 +2382,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "ãã¹ã¯ã¼ããå¤æ´ãã¾ãã"
+msgid "Password2"
+msgstr "ãã¹ã¯ã¼ã2"
+
msgid "Path to CA-Certificate"
msgstr "CA証ææ¸ã®ãã¹"
@@ -3672,7 +3677,7 @@ msgid "Waiting for command to complete..."
msgstr "ã³ãã³ãå®è¡ä¸ã§ã..."
msgid "Waiting for device..."
-msgstr "ããã¤ã¹ã®èµ·åããå¾
ã¡ãã ãã..."
+msgstr "ããã¤ã¹ã®èµ·åãå¾
ã£ã¦ãã¾ã..."
msgid "Warning"
msgstr "è¦å"
diff --git a/modules/luci-base/po/ko/base.po b/modules/luci-base/po/ko/base.po
index 587b4890a..770a49cc5 100644
--- a/modules/luci-base/po/ko/base.po
+++ b/modules/luci-base/po/ko/base.po
@@ -2332,6 +2332,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr ""
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr ""
diff --git a/modules/luci-base/po/ms/base.po b/modules/luci-base/po/ms/base.po
index 97912183f..c2f62721d 100644
--- a/modules/luci-base/po/ms/base.po
+++ b/modules/luci-base/po/ms/base.po
@@ -2311,6 +2311,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr ""
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Path ke CA-Sijil"
diff --git a/modules/luci-base/po/no/base.po b/modules/luci-base/po/no/base.po
index 9e3df81f8..6a6e81868 100644
--- a/modules/luci-base/po/no/base.po
+++ b/modules/luci-base/po/no/base.po
@@ -2357,6 +2357,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "Passordet er endret!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Sti til CA-sertifikat"
diff --git a/modules/luci-base/po/pl/base.po b/modules/luci-base/po/pl/base.po
index 98067c865..e36461615 100644
--- a/modules/luci-base/po/pl/base.po
+++ b/modules/luci-base/po/pl/base.po
@@ -2401,6 +2401,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "PomyÅlnie zmieniono hasÅo!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Åcieżka do certyfikatu CA"
diff --git a/modules/luci-base/po/pt-br/base.po b/modules/luci-base/po/pt-br/base.po
index f2ba57555..87c32bff9 100644
--- a/modules/luci-base/po/pt-br/base.po
+++ b/modules/luci-base/po/pt-br/base.po
@@ -2497,6 +2497,9 @@ msgstr "Senha da Chave Privada interna"
msgid "Password successfully changed!"
msgstr "A senha foi alterada com sucesso!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Caminho para o Certificado da AC"
diff --git a/modules/luci-base/po/pt/base.po b/modules/luci-base/po/pt/base.po
index cb90df543..bea93f5c3 100644
--- a/modules/luci-base/po/pt/base.po
+++ b/modules/luci-base/po/pt/base.po
@@ -2379,6 +2379,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "Password alterada com sucesso!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Directorio do Certificado CA"
diff --git a/modules/luci-base/po/ro/base.po b/modules/luci-base/po/ro/base.po
index d51f4d05c..2ee8537ac 100644
--- a/modules/luci-base/po/ro/base.po
+++ b/modules/luci-base/po/ro/base.po
@@ -2303,6 +2303,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "Parola schimbata cu succes !"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "Calea catre certificatul CA"
diff --git a/modules/luci-base/po/ru/base.po b/modules/luci-base/po/ru/base.po
index d30c643fc..651577262 100644
--- a/modules/luci-base/po/ru/base.po
+++ b/modules/luci-base/po/ru/base.po
@@ -2387,6 +2387,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "ÐаÑÐ¾Ð»Ñ ÑÑпеÑно изменÑн!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "ÐÑÑÑ Ðº ÑенÑÑÑ ÑеÑÑиÑикаÑии"
diff --git a/modules/luci-base/po/sk/base.po b/modules/luci-base/po/sk/base.po
index f4037ea35..ab876ce32 100644
--- a/modules/luci-base/po/sk/base.po
+++ b/modules/luci-base/po/sk/base.po
@@ -2278,6 +2278,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr ""
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr ""
diff --git a/modules/luci-base/po/sv/base.po b/modules/luci-base/po/sv/base.po
index 6af6d610f..803ac2819 100644
--- a/modules/luci-base/po/sv/base.po
+++ b/modules/luci-base/po/sv/base.po
@@ -2284,6 +2284,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr ""
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr ""
diff --git a/modules/luci-base/po/templates/base.pot b/modules/luci-base/po/templates/base.pot
index d3fc6a732..1aa1816c2 100644
--- a/modules/luci-base/po/templates/base.pot
+++ b/modules/luci-base/po/templates/base.pot
@@ -2271,6 +2271,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr ""
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr ""
diff --git a/modules/luci-base/po/tr/base.po b/modules/luci-base/po/tr/base.po
index afabfa29d..3c814cd30 100644
--- a/modules/luci-base/po/tr/base.po
+++ b/modules/luci-base/po/tr/base.po
@@ -2291,6 +2291,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr ""
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr ""
diff --git a/modules/luci-base/po/uk/base.po b/modules/luci-base/po/uk/base.po
index 7ee06885f..83e550196 100644
--- a/modules/luci-base/po/uk/base.po
+++ b/modules/luci-base/po/uk/base.po
@@ -2398,6 +2398,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "ÐаÑÐ¾Ð»Ñ ÑÑпÑÑно змÑнено!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "ШлÑÑ
до ÑенÑÑÑ ÑеÑÑиÑÑкÑÑÑ"
diff --git a/modules/luci-base/po/vi/base.po b/modules/luci-base/po/vi/base.po
index 239e1c251..7bd7868cf 100644
--- a/modules/luci-base/po/vi/base.po
+++ b/modules/luci-base/po/vi/base.po
@@ -2314,6 +2314,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr ""
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "ÄÆ°á»ng dẫn tá»i CA-Certificate"
diff --git a/modules/luci-base/po/zh-tw/base.po b/modules/luci-base/po/zh-tw/base.po
index 7521324f1..7b2792e61 100644
--- a/modules/luci-base/po/zh-tw/base.po
+++ b/modules/luci-base/po/zh-tw/base.po
@@ -2319,6 +2319,9 @@ msgstr ""
msgid "Password successfully changed!"
msgstr "å¯ç¢¼å·²è®æ´æå!"
+msgid "Password2"
+msgstr ""
+
msgid "Path to CA-Certificate"
msgstr "CA-èæ¸çè·¯å¾"