summaryrefslogtreecommitdiffhomepage
path: root/applications
diff options
context:
space:
mode:
Diffstat (limited to 'applications')
-rw-r--r--applications/luci-app-adblock/luasrc/controller/adblock.lua22
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua1
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua1
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua184
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua1
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/runtime.htm2
-rw-r--r--applications/luci-app-adblock/po/it/adblock.po337
-rw-r--r--applications/luci-app-adblock/po/ja/adblock.po193
-rw-r--r--applications/luci-app-adblock/po/pt-br/adblock.po232
-rw-r--r--applications/luci-app-adblock/po/sv/adblock.po206
-rw-r--r--applications/luci-app-adblock/po/templates/adblock.pot117
-rw-r--r--applications/luci-app-adblock/po/zh-cn/adblock.po161
-rw-r--r--applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po109
-rw-r--r--applications/luci-app-ahcp/po/sv/ahcp.po6
-rw-r--r--applications/luci-app-aria2/po/sv/aria2.po30
-rw-r--r--applications/luci-app-aria2/po/zh-cn/aria2.po242
-rw-r--r--applications/luci-app-attendedsysupgrade/Makefile11
-rw-r--r--applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua5
-rw-r--r--applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm410
-rw-r--r--applications/luci-app-bcp38/po/sv/bcp38.po45
-rw-r--r--applications/luci-app-bcp38/po/templates/bcp38.pot45
-rw-r--r--applications/luci-app-bcp38/po/zh-cn/bcp38.po52
-rw-r--r--applications/luci-app-clamav/po/sv/clamav.po22
-rw-r--r--applications/luci-app-coovachilli/po/sv/coovachilli.po2
-rw-r--r--applications/luci-app-ddns/po/it/ddns.po407
-rw-r--r--applications/luci-app-ddns/po/sv/ddns.po5
-rw-r--r--applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po102
-rw-r--r--applications/luci-app-dnscrypt-proxy/Makefile13
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua38
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua39
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua39
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/configuration_tab.lua39
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua245
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/config_css.htm13
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/logread.htm15
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/res_options.htm10
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/view_reslist.htm15
-rw-r--r--applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po279
-rw-r--r--applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot228
-rwxr-xr-xapplications/luci-app-dnscrypt-proxy/root/etc/uci-defaults/60_luci-dnscrypt-proxy11
-rw-r--r--applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua2
-rw-r--r--applications/luci-app-firewall/po/ca/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/cs/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/de/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/el/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/en/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/es/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/fr/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/he/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/hu/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/it/firewall.po201
-rw-r--r--applications/luci-app-firewall/po/ja/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/ko/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/ms/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/no/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/pl/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/pt-br/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/pt/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/ro/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/ru/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/sk/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/sv/firewall.po45
-rw-r--r--applications/luci-app-firewall/po/templates/firewall.pot2
-rw-r--r--applications/luci-app-firewall/po/tr/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/uk/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/vi/firewall.po2
-rw-r--r--applications/luci-app-firewall/po/zh-cn/firewall.po201
-rw-r--r--applications/luci-app-firewall/po/zh-tw/firewall.po4
-rw-r--r--applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd1
-rw-r--r--applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh18
-rw-r--r--applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua6
-rw-r--r--applications/luci-app-minidlna/po/ca/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/cs/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/de/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/el/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/en/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/es/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/fr/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/he/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/hu/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/it/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/ja/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/ms/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/no/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/pl/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/pt-br/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/pt/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/ro/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/ru/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/sk/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/sv/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/templates/minidlna.pot5
-rw-r--r--applications/luci-app-minidlna/po/tr/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/uk/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/vi/minidlna.po5
-rw-r--r--applications/luci-app-minidlna/po/zh-cn/minidlna.po7
-rw-r--r--applications/luci-app-minidlna/po/zh-tw/minidlna.po5
-rw-r--r--applications/luci-app-mwan3/luasrc/controller/mwan3.lua2
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua51
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua40
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua10
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua16
-rw-r--r--applications/luci-app-mwan3/po/ja/mwan3.po100
-rw-r--r--applications/luci-app-mwan3/po/templates/mwan3.pot69
-rw-r--r--applications/luci-app-mwan3/po/zh-cn/mwan3.po98
-rwxr-xr-xapplications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan37
-rw-r--r--applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm4
-rw-r--r--applications/luci-app-nlbwmon/po/zh-cn/nlbwmon.po366
-rw-r--r--applications/luci-app-noddos/Makefile18
-rwxr-xr-xapplications/luci-app-noddos/htdocs/cgi-bin/clientdetails91
-rw-r--r--applications/luci-app-noddos/luasrc/controller/noddos.lua10
-rw-r--r--applications/luci-app-noddos/luasrc/model/cbi/noddos.lua46
-rw-r--r--applications/luci-app-noddos/luasrc/view/noddos/clients.htm111
-rw-r--r--applications/luci-app-noddos/po/ja/noddos.po111
-rw-r--r--applications/luci-app-noddos/po/templates/noddos.pot92
-rw-r--r--applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos14
-rw-r--r--applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua4
-rw-r--r--applications/luci-app-openvpn/po/ca/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/cs/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/de/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/el/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/en/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/es/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/fr/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/he/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/hu/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/it/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/ja/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/ms/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/no/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/pl/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/pt-br/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/pt/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/ro/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/ru/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/sk/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/sv/openvpn.po15
-rw-r--r--applications/luci-app-openvpn/po/templates/openvpn.pot3
-rw-r--r--applications/luci-app-openvpn/po/tr/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/uk/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/vi/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/zh-cn/openvpn.po3
-rw-r--r--applications/luci-app-openvpn/po/zh-tw/openvpn.po3
-rw-r--r--applications/luci-app-p2pblock/po/pt-br/p2pblock.po4
-rw-r--r--applications/luci-app-radicale/po/pt-br/radicale.po77
-rw-r--r--applications/luci-app-samba/luasrc/model/cbi/samba.lua3
-rw-r--r--applications/luci-app-samba/po/ca/samba.po5
-rw-r--r--applications/luci-app-samba/po/cs/samba.po5
-rw-r--r--applications/luci-app-samba/po/de/samba.po5
-rw-r--r--applications/luci-app-samba/po/el/samba.po5
-rw-r--r--applications/luci-app-samba/po/en/samba.po5
-rw-r--r--applications/luci-app-samba/po/es/samba.po5
-rw-r--r--applications/luci-app-samba/po/fr/samba.po5
-rw-r--r--applications/luci-app-samba/po/he/samba.po5
-rw-r--r--applications/luci-app-samba/po/hu/samba.po5
-rw-r--r--applications/luci-app-samba/po/it/samba.po15
-rw-r--r--applications/luci-app-samba/po/ja/samba.po17
-rw-r--r--applications/luci-app-samba/po/ms/samba.po5
-rw-r--r--applications/luci-app-samba/po/no/samba.po5
-rw-r--r--applications/luci-app-samba/po/pl/samba.po5
-rw-r--r--applications/luci-app-samba/po/pt-br/samba.po5
-rw-r--r--applications/luci-app-samba/po/pt/samba.po5
-rw-r--r--applications/luci-app-samba/po/ro/samba.po5
-rw-r--r--applications/luci-app-samba/po/ru/samba.po5
-rw-r--r--applications/luci-app-samba/po/sk/samba.po5
-rw-r--r--applications/luci-app-samba/po/sv/samba.po5
-rw-r--r--applications/luci-app-samba/po/templates/samba.pot5
-rw-r--r--applications/luci-app-samba/po/tr/samba.po5
-rw-r--r--applications/luci-app-samba/po/uk/samba.po5
-rw-r--r--applications/luci-app-samba/po/vi/samba.po5
-rw-r--r--applications/luci-app-samba/po/zh-cn/samba.po5
-rw-r--r--applications/luci-app-samba/po/zh-tw/samba.po5
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua6
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua98
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua34
-rw-r--r--applications/luci-app-simple-adblock/po/sv/simple-adblock.po80
-rw-r--r--applications/luci-app-splash/po/sv/splash.po4
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua1
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua1
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua1
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua1
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua65
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua13
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua1
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua15
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua51
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm7
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm14
-rw-r--r--applications/luci-app-travelmate/po/ja/travelmate.po27
-rw-r--r--applications/luci-app-travelmate/po/pt-br/travelmate.po14
-rw-r--r--applications/luci-app-travelmate/po/templates/travelmate.pot14
-rw-r--r--applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua9
-rw-r--r--applications/luci-app-unbound/luasrc/controller/unbound.lua146
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound.lua216
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua273
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua30
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua30
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua30
-rw-r--r--applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm8
-rw-r--r--applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm5
-rw-r--r--applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm8
-rw-r--r--applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound13
-rw-r--r--applications/luci-app-upnp/po/zh-cn/upnp.po2
-rw-r--r--applications/luci-app-wifischedule/po/it/wifischedule.po101
-rw-r--r--applications/luci-app-wireguard/po/sv/wireguard.po6
-rw-r--r--applications/luci-app-wol/po/it/wol.po14
206 files changed, 5980 insertions, 1552 deletions
diff --git a/applications/luci-app-adblock/luasrc/controller/adblock.lua b/applications/luci-app-adblock/luasrc/controller/adblock.lua
index 03b9fc20eb..b74858400b 100644
--- a/applications/luci-app-adblock/luasrc/controller/adblock.lua
+++ b/applications/luci-app-adblock/luasrc/controller/adblock.lua
@@ -3,10 +3,10 @@
module("luci.controller.adblock", package.seeall)
-local fs = require("nixio.fs")
-local util = require("luci.util")
-local template = require("luci.template")
-local i18n = require("luci.i18n")
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local templ = require("luci.template")
+local i18n = require("luci.i18n")
function index()
if not nixio.fs.access("/etc/config/adblock") then
@@ -19,17 +19,19 @@ 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
+ local logfile
-function query()
- template.render("adblock/query", {title = i18n.translate("Adblock Domain Query")})
+ if nixio.fs.access("/var/log/messages") then
+ logfile = util.trim(util.exec("cat /var/log/messages | grep 'adblock'"))
+ else
+ logfile = util.trim(util.exec("logread -e 'adblock'"))
+ end
+ 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 59cd1e80fa..ef70100e4f 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 1607f1440a..1d89485e79 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 68f9c8897e..e2ef1ef214 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
@@ -1,30 +1,23 @@
-- Copyright 2017 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
-local fs = require("nixio.fs")
-local uci = require("uci")
-local sys = require("luci.sys")
-local json = require("luci.jsonc")
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
+local sys = require("luci.sys")
+local util = require("luci.util")
+local dump = util.ubus("network.interface", "dump", {})
+local json = require("luci.jsonc")
local adbinput = uci.get("adblock", "global", "adb_rtfile") or "/tmp/adb_runtime.json"
-local dnspath = uci.get("adblock", "global", "adb_dnsdir") or ""
-local parse = json.parse(fs.readfile(adbinput) or "")
-if parse ~= nil then
- version = parse.data.adblock_version
- domains = parse.data.blocked_domains
- fetch = parse.data.fetch_info
- backend = parse.data.dns_backend
- rundate = parse.data.last_rundate
- if dnspath == "" then
- if backend == "dnsmasq" then
- dnspath = "/tmp/dnsmasq.d"
- elseif backend == "unbound" then
- dnspath = "/var/lib/unbound"
- elseif backend == "named" then
- dnspath = "/var/lib/bind"
- end
- end
+
+if not uci:get_first("adblock", "adblock", "adb_trigger") then
+ m = SimpleForm("error", nil, translate("Please update your adblock config file to use this package. ")
+ .. translatef("In OPKG use the '--force-maintainer' option to overwrite the pre-existing config file or download a fresh default config from "
+ .. "<a href=\"%s\" target=\"_blank\">"
+ .. "here</a>", "https://raw.githubusercontent.com/openwrt/packages/master/net/adblock/files/adblock.conf"))
+ m.submit = false
+ m.reset = false
+ return m
end
-local dnsfile = dnspath .. "/.adb_hidden/adb_list.overall"
m = Map("adblock", translate("Adblock"),
translate("Configuration of the adblock package to block ad/abuse domains by using DNS. ")
@@ -33,7 +26,7 @@ m = Map("adblock", translate("Adblock"),
.. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md"))
function m.on_after_commit(self)
- function e3.validate(self, value)
+ function e4.validate(self, value)
if value == "0" then
luci.sys.call("/etc/init.d/adblock reload >/dev/null 2>&1")
else
@@ -47,62 +40,91 @@ end
s = m:section(NamedSection, "global", "adblock")
-o1 = s:option(Flag, "adb_enabled", translate("Enable adblock"))
-o1.default = o1.enabled
+local parse = json.parse(fs.readfile(adbinput) or "")
+if parse then
+ status = parse.data.adblock_status
+ version = parse.data.adblock_version
+ domains = parse.data.blocked_domains
+ fetch = parse.data.fetch_utility
+ backend = parse.data.dns_backend
+ rundate = parse.data.last_rundate
+end
+
+o1 = s:option(Flag, "adb_enabled", translate("Enable Adblock"))
+o1.default = o1.disabled
o1.rmempty = false
-btn = s:option(Button, "", translate("Suspend / Resume adblock"))
-if parse ~= nil and nixio.fs.access(dnsfile) then
- btn.inputtitle = translate("Resume adblock")
- btn.inputstyle = "apply"
+btn = s:option(Button, "", translate("Suspend / Resume Adblock"))
+if parse and status == "enabled" then
+ btn.inputtitle = translate("Suspend")
+ btn.inputstyle = "reset"
btn.disabled = false
function btn.write()
- luci.sys.call("/etc/init.d/adblock resume >/dev/null 2>&1")
+ luci.sys.call("/etc/init.d/adblock suspend >/dev/null 2>&1")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
end
-else
- btn.inputtitle = translate("Suspend adblock")
- btn.inputstyle = "reset"
+elseif parse and status == "paused" then
+ btn.inputtitle = translate("Resume")
+ btn.inputstyle = "apply"
btn.disabled = false
function btn.write()
- luci.sys.call("/etc/init.d/adblock suspend >/dev/null 2>&1")
+ luci.sys.call("/etc/init.d/adblock resume >/dev/null 2>&1")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
end
+else
+ btn.inputtitle = translate("-------")
+ btn.inputstyle = "button"
+ btn.disabled = true
end
-o2 = s:option(Value, "adb_iface", translate("Restrict interface trigger to certain interface(s)"),
- translate("Space separated list of interfaces that trigger adblock processing. "..
- "To disable event driven (re-)starts remove all entries."))
-o2.rmempty = true
-
-o3 = s:option(Value, "adb_triggerdelay", translate("Trigger delay"),
- translate("Additional trigger delay in seconds before adblock processing begins."))
-o3.default = 2
-o3.datatype = "range(1,90)"
+o2 = s:option(ListValue, "adb_dns", translate("DNS Backend (DNS Directory)"),
+ translate("List of supported DNS backends with their default list export directory.<br />")
+ .. translate("To overwrite the default path use the 'DNS Directory' option in the extra section below."))
+o2:value("dnsmasq", "dnsmasq (/tmp/dnsmasq.d)")
+o2:value("unbound", "unbound (/var/lib/unbound)")
+o2:value("named", "bind (/var/lib/bind)")
+o2:value("kresd", "kresd (/etc/kresd)")
+o2:value("dnscrypt-proxy","dnscrypt-proxy (/tmp)")
+o2.default = "dnsmasq"
+o2.rmempty = false
+
+o3 = s:option(ListValue, "adb_trigger", translate("Startup Trigger"),
+ translate("List of available network interfaces. By default the startup will be triggered by the 'wan' interface.<br />")
+ .. translate("Choose 'none' to disable automatic startups, 'timed' to use a classic timeout (default 30 sec.) or select another trigger interface."))
+o3:value("none")
+o3:value("timed")
+if dump then
+ local i, v
+ for i, v in ipairs(dump.interface) do
+ if v.interface ~= "loopback" then
+ o3:value(v.interface)
+ end
+ end
+end
o3.rmempty = false
-o4 = s:option(Flag, "adb_debug", translate("Enable verbose debug logging"))
-o4.default = o4.disabled
-o4.rmempty = false
-
-- Runtime information
-ds = s:option(DummyValue, "_dummy", translate("Runtime information"))
+ds = s:option(DummyValue, "", translate("Runtime Information"))
ds.template = "cbi/nullsection"
-dv1 = s:option(DummyValue, "status", translate("Status"))
+dv1 = s:option(DummyValue, "", translate("Adblock Status"))
dv1.template = "adblock/runtime"
if parse == nil then
dv1.value = translate("n/a")
-elseif domains == "0" then
- dv1.value = translate("no domains blocked")
-elseif nixio.fs.access(dnsfile) then
- dv1.value = translate("suspended")
else
- dv1.value = translate("active")
+ if status == "error" then
+ dv1.value = translate("error")
+ elseif status == "disabled" then
+ dv1.value = translate("disabled")
+ elseif status == "paused" then
+ dv1.value = translate("paused")
+ else
+ dv1.value = translate("enabled")
+ end
end
-dv2 = s:option(DummyValue, "adblock_version", translate("Adblock version"))
+dv2 = s:option(DummyValue, "", translate("Adblock Version"))
dv2.template = "adblock/runtime"
if parse == nil then
dv2.value = translate("n/a")
@@ -110,7 +132,7 @@ else
dv2.value = version
end
-dv3 = s:option(DummyValue, "fetch_info", translate("Download Utility (SSL Library)"),
+dv3 = s:option(DummyValue, "", translate("Download Utility (SSL Library)"),
translate("For SSL protected blocklist sources you need a suitable SSL library, e.g. 'libustream-ssl' or the wget 'built-in'."))
dv3.template = "adblock/runtime"
if parse == nil then
@@ -119,7 +141,7 @@ else
dv3.value = fetch
end
-dv4 = s:option(DummyValue, "dns_backend", translate("DNS backend"))
+dv4 = s:option(DummyValue, "", translate("DNS Backend (DNS Directory)"))
dv4.template = "adblock/runtime"
if parse == nil then
dv4.value = translate("n/a")
@@ -127,7 +149,7 @@ else
dv4.value = backend
end
-dv5 = s:option(DummyValue, "blocked_domains", translate("Blocked domains (overall)"))
+dv5 = s:option(DummyValue, "", translate("Overall Blocked Domains"))
dv5.template = "adblock/runtime"
if parse == nil then
dv5.value = translate("n/a")
@@ -135,7 +157,7 @@ else
dv5.value = domains
end
-dv6 = s:option(DummyValue, "last_rundate", translate("Last rundate"))
+dv6 = s:option(DummyValue, "", translate("Last Run"))
dv6.template = "adblock/runtime"
if parse == nil then
dv6.value = translate("n/a")
@@ -145,9 +167,10 @@ end
-- Blocklist table
-bl = m:section(TypedSection, "source", translate("Blocklist sources"),
+bl = m:section(TypedSection, "source", translate("Blocklist Sources"),
translate("Available blocklist sources. ")
- .. translate("Note that list URLs and Shallalist category selections are configurable in the 'Advanced' section."))
+ .. translate("List URLs and Shallalist category selections are configurable in the 'Advanced' section.<br />")
+ .. translate("Caution: Please don't select big lists or many lists at once on low memory devices to prevent OOM exceptions!"))
bl.template = "cbi/tblsection"
name = bl:option(Flag, "enabled", translate("Enabled"))
@@ -167,31 +190,48 @@ des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
-- Extra options
-e = m:section(NamedSection, "global", "adblock", translate("Extra options"),
+e = m:section(NamedSection, "global", "adblock", translate("Extra Options"),
translate("Options for further tweaking in case the defaults are not suitable for you."))
-e1 = e:option(Flag, "adb_forcedns", translate("Force local DNS"),
- translate("Redirect all DNS queries to the local resolver."))
+e1 = e:option(Flag, "adb_debug", translate("Verbose Debug Logging"),
+ translate("Enable verbose debug logging in case of any processing error."))
e1.default = e1.disabled
e1.rmempty = false
-e2 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
- translate("Enable memory intense overall sort / duplicate removal on low memory devices (&lt; 64 MB RAM)"))
+e2 = e:option(Flag, "adb_forcedns", translate("Force Local DNS"),
+ translate("Redirect all DNS queries from 'lan' zone to the local resolver."))
e2.default = e2.disabled
e2.rmempty = false
-e3 = e:option(Flag, "adb_manmode", translate("Manual mode"),
- translate("Do not automatically update blocklists during startup, use blocklist backups instead."))
+e3 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
+ translate("Enable memory intense overall sort / duplicate removal on low memory devices (&lt; 64 MB RAM)"))
e3.default = e3.disabled
e3.rmempty = false
-e4 = e:option(Flag, "adb_backup", translate("Enable blocklist backup"),
- translate("Create compressed blocklist backups, they will be used in case of download errors or during startup in manual mode."))
+e4 = e:option(Flag, "adb_manmode", translate("Manual / Backup mode"),
+ translate("Do not automatically update blocklists during startup, use blocklist backups instead."))
e4.default = e4.disabled
e4.rmempty = false
-e5 = e:option(Value, "adb_backupdir", translate("Backup directory"))
-e5.datatype = "directory"
+e5 = e:option(Flag, "adb_backup", translate("Enable Blocklist Backup"),
+ translate("Create compressed blocklist backups, they will be used in case of download errors or during startup in manual mode."))
+e5.default = e5.disabled
e5.rmempty = false
+e6 = e:option(Value, "adb_backupdir", translate("Backup Directory"),
+ translate("Target directory for adblock backups. Please use only non-volatile disks, no ram/tmpfs drives."))
+e6.datatype = "directory"
+e6.default = "/mnt"
+e6.rmempty = false
+
+e7 = e:option(Value, "adb_dnsdir", translate("DNS Directory"),
+ translate("Target directory for the generated blocklist 'adb_list.overall'."))
+e7.datatype = "directory"
+e7.optional = true
+
+e8 = e:option(Value, "adb_triggerdelay", translate("Trigger Delay"),
+ translate("Additional trigger delay in seconds before adblock processing begins."))
+e8.datatype = "range(1,60)"
+e8.optional = true
+
return m
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
index 10a593859f..a3659eb469 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/luasrc/view/adblock/runtime.htm b/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm
index ee3a4553a8..0221a75ed1 100644
--- a/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm
+++ b/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm
@@ -5,6 +5,6 @@ This is free software, licensed under the Apache License, Version 2.0
<%+cbi/valueheader%>
-<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="border: none; box-shadow: none; background-color: #ffffff; color: #0069d6;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
+<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="border:none;box-shadow:none;background:transparent;color:#0069d6;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
<%+cbi/valuefooter%>
diff --git a/applications/luci-app-adblock/po/it/adblock.po b/applications/luci-app-adblock/po/it/adblock.po
new file mode 100644
index 0000000000..1901228634
--- /dev/null
+++ b/applications/luci-app-adblock/po/it/adblock.po
@@ -0,0 +1,337 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 17/09/2017\n"
+"Last-Translator: Bubu83 <bubu83@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.3\n"
+"Language: it\n"
+
+msgid "-------"
+msgstr ""
+
+msgid "Adblock"
+msgstr "Adblock"
+
+msgid "Adblock Logfile"
+msgstr "Registro Adblock"
+
+msgid "Adblock Status"
+msgstr "Status Adblock"
+
+msgid "Adblock Version"
+msgstr "Versione Adblock"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr "Tempo addizionale in secondi di attesa prima che adblock si avvii."
+
+msgid "Advanced"
+msgstr "Avanzato"
+
+msgid "Available blocklist sources."
+msgstr "Fonti lista di blocco disponibili."
+
+msgid "Backup Directory"
+msgstr "Directory del Backup"
+
+msgid "Blocklist Sources"
+msgstr "Fonti lista di Blocco"
+
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+"Attenzione: Per favore non selezionare grandi liste o molte liste alla volta "
+"su dispositivi con poca memoria per prevenire errori OOM!"
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"Scegli 'none' per disabilitare l'avvio automatico, 'timed' per usare un "
+"classico timeout (default 30 sec.) o seleziona un'altra interfaccia di avvio."
+
+msgid "Collecting data..."
+msgstr "Raccogliendo dati..."
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+msgstr ""
+"Configurazione del pacchetto adblock per bloccare domini pubblicità/abuso "
+"usando i DNS."
+
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+"Crea i backup compressi delle liste di blocco, saranno usati in caso di "
+"errori di download o durante l'avvio in modalità manuale."
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr "Directory DNS"
+
+msgid "Description"
+msgstr "Descrizione"
+
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"Non aggiornare automaticamente le liste durante l'avvio, usa invece i backup "
+"della lista di blocco."
+
+msgid "Download Utility (SSL Library)"
+msgstr ""
+
+msgid "Edit Blacklist"
+msgstr "Modifica Lista Nera"
+
+msgid "Edit Configuration"
+msgstr "Modifica Configurazione"
+
+msgid "Edit Whitelist"
+msgstr "Modifica Lista Bianca"
+
+msgid "Enable Adblock"
+msgstr "Attiva Adblock"
+
+msgid "Enable Blocklist Backup"
+msgstr "Attiva Backup Lista di Blocco"
+
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB RAM)"
+msgstr ""
+"Attiva l'ordinamento globale / rimozione duplicati stressante per la memoria "
+"su dispositivi con poca memoria (&lt; 64 MB RAM)"
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
+"Abilita il registro dettagliato in caso di qualsiasi errore di processo."
+
+msgid "Enabled"
+msgstr "Abilitato"
+
+msgid "Extra Options"
+msgstr "Opzioni Extra"
+
+msgid ""
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+"Per le fonti delle liste protette da SSL hai bisogno di una libreria SSL "
+"adatta, p.e. 'libustream-ssl' o wget 'built-in'."
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+"Per ulteriori informazioni <a href=\"%s\" target=\"_blank\">vedi "
+"documentazione online</a>"
+
+msgid "Force Local DNS"
+msgstr "Forza DNS Locale"
+
+msgid "Force Overall Sort"
+msgstr "Forza Ordinamento Globale"
+
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
+"In OPKG usa l'opzione '--force-maintainer' per sovrascrivere il pre-"
+"esistente file di configurazione o scarica una nuova configurazione di "
+"default da <a href=\"%s\" target=\"_blank\">qui</a>"
+
+msgid "Input file not found, please check your configuration."
+msgstr "File di input non trovato, per favore controlla la tua configurazione."
+
+msgid "Invalid domain specified!"
+msgstr "Dominio invalido specificato!"
+
+msgid "Last Run"
+msgstr "Ultimo Avvio"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+"Le selezioni degli URL delle liste e categorie Shallalist sono configurabili "
+"nella sezione 'Avanzato'.<br />"
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+"Lista delle interfacce di rete disponibili. Per default l'avvio sarà "
+"innescato dall'interfaccia 'wan'.<br />"
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+"Lista dei backend DNS supportati con la loro directory di default di esporto "
+"della lista.<br />"
+
+msgid "Loading"
+msgstr "Caricando"
+
+msgid "Manual / Backup mode"
+msgstr "Modalità Manuale / Backup"
+
+msgid "No"
+msgstr "No"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+"Opzioni per ulteriori modifiche in caso che quelle di default non ti sono "
+"adatte."
+
+msgid "Overall Blocked Domains"
+msgstr "Totale Domini Bloccati"
+
+msgid "Overview"
+msgstr "Riassunto"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+"Per favore aggiungi solo un dominio per linea. I commenti introdotti con '#' "
+"sono consentiti - indirizzi ip , jolly e regex non lo sono."
+
+msgid "Please edit this file directly in a terminal session."
+msgstr ""
+"Per favore modifica questo file direttamente in una sessione al terminale."
+
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+"Per favore aggiorna il tuo file configurazione di adblock per usare questo "
+"pacchetto."
+
+msgid "Query"
+msgstr "Interrogazione"
+
+msgid "Query domains"
+msgstr "Interrogazione domini"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+"Reindirizza tutte le richieste DNS dalla zona 'lan' al risolvitore locale."
+
+msgid "Resume"
+msgstr "Riprendi"
+
+msgid "Runtime Information"
+msgstr "Informazione di Runtime"
+
+msgid "SSL req."
+msgstr "Ric. SSL"
+
+msgid "Save"
+msgstr "Salva"
+
+msgid "Startup Trigger"
+msgstr "Innesco d'Avvio"
+
+msgid "Suspend"
+msgstr "Sospendi"
+
+msgid "Suspend / Resume Adblock"
+msgstr "Sospendi / Riprendi Adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+"Directory per i backup di adblock. Per favore usa solo dischi non volatili, "
+"non dischi ram/tmpfs."
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "Directory per la lista di blocco generata 'adb_list.overall'."
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+"La grandezza del file è troppo grande per modificarla online in LuCI (&gt; "
+"512 KB)."
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"Questo form ti consente di modificare il contenuto della lista nera di "
+"adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"Questo form ti consente di modificare il contenuto della lista bianca di "
+"adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"Questo form ti consente di modificare il contenuto del file principale di "
+"configurazione di adblock (/etc/config/adblock)."
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+"Questo form ti consente di interrogare le liste di blocco attive per "
+"determinati domini, p.e. per metterli nella lista bianca."
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+"Questo form mostra l'output del registro, prefiltrato per messaggi relativi "
+"solo ad adblock."
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+"Per sovrascrivere il percorso di default usa l'opzione 'Directory DNS' nella "
+"sezione aggiuntiva sotto."
+
+msgid "Trigger Delay"
+msgstr "Ritardo Innesco"
+
+msgid "Verbose Debug Logging"
+msgstr "Registro di Debug Dettagliato"
+
+msgid "View Logfile"
+msgstr "Vedi Registro"
+
+msgid "Waiting for command to complete..."
+msgstr "Aspettando che il comando venga completato..."
+
+msgid "Yes"
+msgstr "Sì"
+
+msgid "disabled"
+msgstr "disabilitato"
+
+msgid "enabled"
+msgstr "abilitato"
+
+msgid "error"
+msgstr "errore"
+
+msgid "n/a"
+msgstr "n/d"
+
+msgid "paused"
+msgstr "in pausa"
diff --git a/applications/luci-app-adblock/po/ja/adblock.po b/applications/luci-app-adblock/po/ja/adblock.po
index 07fd783ed2..86ff36379d 100644
--- a/applications/luci-app-adblock/po/ja/adblock.po
+++ b/applications/luci-app-adblock/po/ja/adblock.po
@@ -8,19 +8,22 @@ 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 "-------"
+msgstr "(利用不可)"
+
msgid "Adblock"
msgstr "Adblock"
-msgid "Adblock Domain Query"
-msgstr "Adblock ドメイン検索"
-
msgid "Adblock Logfile"
msgstr "Adblock ログファイル"
-msgid "Adblock version"
+msgid "Adblock Status"
+msgstr "Adblock ステータス"
+
+msgid "Adblock Version"
msgstr "Adblock バージョン"
msgid "Additional trigger delay in seconds before adblock processing begins."
@@ -32,15 +35,27 @@ msgstr "詳細設定"
msgid "Available blocklist sources."
msgstr "利用可能なブロックリスト提供元です。"
-msgid "Backup directory"
+msgid "Backup Directory"
msgstr "バックアップ先 ディレクトリ"
-msgid "Blocked domains (overall)"
-msgstr "ブロック済みドメイン(全体)"
-
-msgid "Blocklist sources"
+msgid "Blocklist Sources"
msgstr "ブロックリスト提供元"
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+"警告: メモリー容量の小さいデバイスでは OutOfMemory (OOM) 例外を防ぐため、大き"
+"いリストや一度にたくさんのリストを選択しないでください。"
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"自動スタートアップを無効にするには 'none' を、従来のタイムアウト(既定値: 30"
+"秒)を使用するには 'timed' を選択してください。または、他のトリガとなるイン"
+"ターフェースを選択してください。"
+
msgid "Collecting data..."
msgstr "データ収集中です..."
@@ -58,8 +73,11 @@ msgstr ""
"ロードがエラーの場合、またはマニュアル モードでサービスを起動時に使用されま"
"す。"
-msgid "DNS backend"
-msgstr "DNS バックエンド"
+msgid "DNS Backend (DNS Directory)"
+msgstr "DNS バックエンド(DNS ディレクトリ)"
+
+msgid "DNS Directory"
+msgstr "DNS ディレクトリ"
msgid "Description"
msgstr "説明"
@@ -83,10 +101,10 @@ msgstr "設定の編集"
msgid "Edit Whitelist"
msgstr "ホワイトリストの編集"
-msgid "Enable adblock"
+msgid "Enable Adblock"
msgstr "Adblock の有効化"
-msgid "Enable blocklist backup"
+msgid "Enable Blocklist Backup"
msgstr "ブロックリスト バックアップの有効化"
msgid ""
@@ -96,14 +114,15 @@ msgstr ""
"メモリー容量の少ないデバイス(RAM 64MB 未満)において、一時ファイル内の全体的"
"なソート及び重複の除去を有効にします。"
-msgid "Enable verbose debug logging"
-msgstr "詳細なデバッグ ログの有効化"
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
+"何らかの処理エラーが発生した場合に、詳細なデバッグ ログを有効にします。"
msgid "Enabled"
msgstr "有効"
-msgid "Extra options"
-msgstr "拡張設定"
+msgid "Extra Options"
+msgstr "拡張オプション"
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
@@ -119,11 +138,20 @@ msgstr ""
"詳細な情報は<a href=\"%s\" target=\"_blank\">オンライン ドキュメント</a>を確"
"認してください。"
+msgid "Force Local DNS"
+msgstr "ローカル DNS の強制"
+
msgid "Force Overall Sort"
msgstr "全体ソートの強制"
-msgid "Force local DNS"
-msgstr "ローカル DNS の強制"
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
+"OPKGで '--force-maintainer' オプションを使用して既存の設定ファイルを上書きす"
+"るか、 <a href=\"%s\" target=\"_blank\">ここ</a> からデフォルトの設定ファイル"
+"をダウンロードしてください。"
msgid "Input file not found, please check your configuration."
msgstr "入力ファイルが見つかりません。設定を確認してください。"
@@ -131,29 +159,46 @@ msgstr "入力ファイルが見つかりません。設定を確認してくだ
msgid "Invalid domain specified!"
msgstr "無効なドメインが指定されています!"
-msgid "Last rundate"
-msgstr "最終実行日時"
+msgid "Last Run"
+msgstr "最終実行"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+"リストの URL 及び \"Shalla\" リストのカテゴリー設定は、'詳細設定' セクション"
+"で設定することができます。<br />"
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+"利用可能なネットワーク インターフェースの一覧です。デフォルトでは 'wan' イン"
+"ターフェースによりスタートアップがトリガされます。"
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+"サポートされる DNS バックエンドと、それぞれのデフォルトのリスト出力先ディレク"
+"トリのリストです<br />"
msgid "Loading"
msgstr "読込中"
-msgid "Manual mode"
-msgstr "マニュアル モード"
+msgid "Manual / Backup mode"
+msgstr "手動 / バックアップ モード"
msgid "No"
msgstr "いいえ"
msgid ""
-"Note that list URLs and Shallalist category selections are configurable in "
-"the 'Advanced' section."
-msgstr ""
-"リストの URL 及び \"Shalla\" リストのカテゴリー設定は、'詳細設定' セクション"
-"で設定することができます。"
-
-msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。"
+msgid "Overall Blocked Domains"
+msgstr "全体のブロック済みドメイン"
+
msgid "Overview"
msgstr "概要"
@@ -168,48 +213,55 @@ msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr "ターミナル セッションで直接このファイルを編集してください。"
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+"このパッケージを使用するには、既存の Adblock 設定ファイルを更新してください。"
+
msgid "Query"
msgstr "検索"
msgid "Query domains"
msgstr "ドメインの検索"
-msgid "Redirect all DNS queries to the local resolver."
-msgstr "全ての DNS クエリをローカル リゾルバにリダイレクトします。"
-
-msgid "Restrict interface trigger to certain interface(s)"
-msgstr "インターフェース トリガーを特定のインターフェースに限定する"
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+"'lan' ゾーンからの全 DNS クエリを、ローカル リゾルバにリダイレクトします。"
-msgid "Resume adblock"
-msgstr "Adblock の再開"
+msgid "Resume"
+msgstr "再開"
-msgid "Runtime information"
+msgid "Runtime Information"
msgstr "実行情報"
msgid "SSL req."
msgstr "SSL 必須"
-msgid ""
-"Space separated list of interfaces that trigger adblock processing. To "
-"disable event driven (re-)starts remove all entries."
-msgstr ""
-"Adblock の処理のトリガーとなる、スペースで区切られたインターフェースのリスト"
-"です。処理を発生させるイベントを無効にするには、全てのエントリーを削除して空"
-"欄にします。"
+msgid "Save"
+msgstr "保存"
-msgid "Status"
-msgstr "ステータス"
+msgid "Startup Trigger"
+msgstr "スタートアップ トリガ"
-msgid "Suspend / Resume adblock"
-msgstr "Adblock の一時停止/再開"
+msgid "Suspend"
+msgstr "一時停止"
-msgid "Suspend adblock"
-msgstr "Adblock の一時停止"
+msgid "Suspend / Resume Adblock"
+msgstr "Adblock の一時停止 / 再開"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+"Adblock バックアップの保存先ディレクトリです。 RAM/tmpfs ドライブではなく、不"
+"揮発性のドライブのみを使用してください。"
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "生成されたブロックリスト 'adb_list.overall' の保存先ディレクトリです。"
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr ""
-"ファイル サイズが大きすぎるため、 LuCI 上でオンライン編集できません(&gt; "
-"512 KB)。"
+"ファイル サイズが大きすぎる(512 KB超)ため、 LuCI 上でオンライン編集できませ"
+"ん。"
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
@@ -246,26 +298,39 @@ msgstr ""
"このフォームには、システムログ内の Adblock に関連するメッセージのみが表示され"
"ます。"
-msgid "Trigger delay"
-msgstr "トリガー遅延"
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+"デフォルトのパスを上書きするには、下記拡張セクションの 'DNS ディレクトリ' オ"
+"プションを使用します。"
+
+msgid "Trigger Delay"
+msgstr "トリガ遅延"
+
+msgid "Verbose Debug Logging"
+msgstr "詳細なデバッグ ログ"
msgid "View Logfile"
msgstr "ログファイルを見る"
msgid "Waiting for command to complete..."
-msgstr "コマンドの完了をお待ちください..."
+msgstr "コマンド実行中です..."
msgid "Yes"
msgstr "はい"
-msgid "active"
-msgstr "動作中"
+msgid "disabled"
+msgstr "無効"
+
+msgid "enabled"
+msgstr "有効"
+
+msgid "error"
+msgstr "エラー"
msgid "n/a"
msgstr "利用不可"
-msgid "no domains blocked"
-msgstr "ブロックされたドメインはありません"
-
-msgid "suspended"
-msgstr "一時停止中"
+msgid "paused"
+msgstr "一時停止"
diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po
index 044352da63..b4c8675f07 100644
--- a/applications/luci-app-adblock/po/pt-br/adblock.po
+++ b/applications/luci-app-adblock/po/pt-br/adblock.po
@@ -8,42 +8,54 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.11\n"
-"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
+"Last-Translator: Luís Gabriel Lima Silva <gabrielima.si@gmail.com>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: pt_BR\n"
+msgid "-------"
+msgstr ""
+
msgid "Adblock"
msgstr "Adblock"
-msgid "Adblock Domain Query"
-msgstr ""
-
msgid "Adblock Logfile"
-msgstr ""
+msgstr "Arquivo de log do Adblock"
-msgid "Adblock version"
+msgid "Adblock Status"
msgstr ""
+msgid "Adblock Version"
+msgstr "Versão do Adblock"
+
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr ""
+"Atraso de gatilho adicional em segundos antes do processamento do adblock "
+"começar."
msgid "Advanced"
-msgstr ""
+msgstr "Avançado"
msgid "Available blocklist sources."
-msgstr ""
+msgstr "Fontes de listas de bloqueio disponíveis."
-msgid "Backup directory"
+msgid "Backup Directory"
msgstr "Diretório da cópia de segurança"
-msgid "Blocked domains (overall)"
+msgid "Blocklist Sources"
+msgstr "Fontes de listas de bloqueio"
+
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
msgstr ""
-msgid "Blocklist sources"
-msgstr "Fontes de listas de bloqueio"
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
msgid "Collecting data..."
-msgstr ""
+msgstr "Coletando dados..."
msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
@@ -55,8 +67,13 @@ msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in manual mode."
msgstr ""
+"Crie backups comprimidos das listas de bloqueio, eles serão usados em caso "
+"de erro dedownload ou durante o início em modo manual."
-msgid "DNS backend"
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
msgstr ""
msgid "Description"
@@ -66,182 +83,277 @@ msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr ""
+"Não atualize as listas de bloqueio automaticamente durante o início, use o "
+"backup das listas como alternativa."
msgid "Download Utility (SSL Library)"
-msgstr ""
+msgstr "Utilitário de Download (Biblioteca SSL)"
msgid "Edit Blacklist"
-msgstr ""
+msgstr "Editar Lista de Bloqueio"
msgid "Edit Configuration"
-msgstr ""
+msgstr "Editar Configuração"
msgid "Edit Whitelist"
-msgstr ""
+msgstr "Editar Lista Permitida"
-msgid "Enable adblock"
+msgid "Enable Adblock"
msgstr "Habilitar adblock"
-msgid "Enable blocklist backup"
+msgid "Enable Blocklist Backup"
msgstr "Habilitar cópia de segurança da lista de bloqueio"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB RAM)"
msgstr ""
+"Ativar tipo geral intenso de memória / duplicar remoção em dispositivos com "
+"pouca memória (&lt; 64 MB RAM)"
-msgid "Enable verbose debug logging"
-msgstr "Habilite registros detalhados para depuração"
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
msgid "Enabled"
msgstr "Habilitado"
-msgid "Extra options"
+msgid "Extra Options"
msgstr "Opções adicionais"
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or the wget 'built-in'."
msgstr ""
+"Para uma lista de bloqueio protegida por SSL você precisa de uma biblioteca "
+"SSL adequada, e.x. 'libustream-ssl' ou o wget 'built-in'."
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">see online "
"documentation</a>"
msgstr ""
+"Para outras informações <a href=\"%s\" target=\"_blank\">veja a documentação "
+"online</a>"
+
+msgid "Force Local DNS"
+msgstr "Force o DNS local"
msgid "Force Overall Sort"
-msgstr ""
+msgstr "Force Tipo Geral"
-msgid "Force local DNS"
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
msgstr ""
msgid "Input file not found, please check your configuration."
-msgstr ""
+msgstr "Arquivo de entrada não encontrado, por favor cheque sua configuração."
msgid "Invalid domain specified!"
-msgstr ""
+msgstr "Domínio especificado inválido!"
-msgid "Last rundate"
+msgid "Last Run"
msgstr ""
-msgid "Loading"
-msgstr ""
-
-msgid "Manual mode"
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
msgstr ""
-msgid "No"
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
msgstr ""
msgid ""
-"Note that list URLs and Shallalist category selections are configurable in "
-"the 'Advanced' section."
+"List of supported DNS backends with their default list export directory.<br /"
+">"
msgstr ""
+msgid "Loading"
+msgstr "Carregando"
+
+msgid "Manual / Backup mode"
+msgstr "Manual / Modo backup"
+
+msgid "No"
+msgstr "Não"
+
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
"Opções para aprimoramentos adicionais caso as opções padrão não sejam "
"suficientes para você."
-msgid "Overview"
+msgid "Overall Blocked Domains"
msgstr ""
+msgid "Overview"
+msgstr "Visão geral"
+
msgid ""
"Please add only one domain per line. Comments introduced with '#' are "
"allowed - ip addresses, wildcards and regex are not."
msgstr ""
msgid "Please edit this file directly in a terminal session."
+msgstr "Por favor edite esse arquivo direto em uma sessão de terminal."
+
+msgid "Please update your adblock config file to use this package."
msgstr ""
msgid "Query"
-msgstr ""
+msgstr "Consulta"
msgid "Query domains"
-msgstr ""
+msgstr "Consulta de domínios"
-msgid "Redirect all DNS queries to the local resolver."
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
-msgid "Restrict interface trigger to certain interface(s)"
+msgid "Resume"
msgstr ""
-msgid "Resume adblock"
-msgstr ""
-
-msgid "Runtime information"
-msgstr ""
+msgid "Runtime Information"
+msgstr "Informação de execução"
msgid "SSL req."
-msgstr ""
+msgstr "req. de SSL"
-msgid ""
-"Space separated list of interfaces that trigger adblock processing. To "
-"disable event driven (re-)starts remove all entries."
+msgid "Save"
+msgstr "Salvar"
+
+msgid "Startup Trigger"
msgstr ""
-msgid "Status"
+msgid "Suspend"
msgstr ""
-msgid "Suspend / Resume adblock"
+msgid "Suspend / Resume Adblock"
+msgstr "Suspender / Resumir adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
msgstr ""
-msgid "Suspend adblock"
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr ""
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr ""
+"O tamanho do arquivo é muito grande para edição online no LuCI (&gt; 512 KB)."
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr ""
+"Esse formulário permite que você modifique o conteúdo das listas de bloqueio "
+"do adblock (%s).<br />"
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr ""
+"Esse formulário permite que você modifique o conteúdo das listas de "
+"permissão do adblock (%s).<br />"
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr ""
+"Esse formulário permite que você modifique o conteúdo das do arquivo de "
+"configuração principal (/etc/config/adblock)."
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
"for whitelisting."
msgstr ""
+"Esse formulário permite que você consulte listas de blocos ativos para "
+"certos domínios, e.x. para listas de permissão."
msgid ""
"This form shows the syslog output, pre-filtered for adblock related messages "
"only."
msgstr ""
+"Esse formulário mostra a saída do syslog, pré-filtrado para mensagens do "
+"adblock apenas."
-msgid "Trigger delay"
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
msgstr ""
-msgid "View Logfile"
+msgid "Trigger Delay"
+msgstr "Atraso no gatilho"
+
+msgid "Verbose Debug Logging"
msgstr ""
+msgid "View Logfile"
+msgstr "Ver arquivo de log"
+
msgid "Waiting for command to complete..."
-msgstr ""
+msgstr "Aguardando por comando para completar..."
msgid "Yes"
-msgstr ""
+msgstr "Sim"
-msgid "active"
+msgid "disabled"
msgstr ""
-msgid "n/a"
+msgid "enabled"
msgstr ""
-msgid "no domains blocked"
+msgid "error"
msgstr ""
-msgid "suspended"
+msgid "n/a"
+msgstr "n/d"
+
+msgid "paused"
msgstr ""
+#~ msgid "Blocked domains (overall)"
+#~ msgstr "Domínios bloqueados (total)"
+
+#~ msgid "DNS backend"
+#~ msgstr "Porta dos fundos de DNS"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "Habilite registros detalhados para depuração"
+
+#~ msgid "Last rundate"
+#~ msgstr "Última data de execução"
+
+#~ msgid ""
+#~ "Note that list URLs and Shallalist category selections are configurable "
+#~ "in the 'Advanced' section."
+#~ msgstr ""
+#~ "Observe que as URLs da lista e as seleções da categoria Shallalist são "
+#~ "configuráveis na secção 'Avançada'."
+
+#~ msgid "Redirect all DNS queries to the local resolver."
+#~ msgstr "Redirecione todas as consultas de DNS para o resolvedor local."
+
+#~ msgid "Restrict interface trigger to certain interface(s)"
+#~ msgstr "Restingir o gatilho de interface para certas interface(s)"
+
+#~ msgid "Resume adblock"
+#~ msgstr "Resumir adblock"
+
+#~ msgid "Status"
+#~ msgstr "Estado"
+
+#~ msgid "active"
+#~ msgstr "ativo"
+
+#~ msgid "no domains blocked"
+#~ msgstr "nenhum domínio bloqueado"
+
+#~ msgid "suspended"
+#~ msgstr "suspenso"
+
#~ msgid "Backup options"
#~ msgstr "Opções da cópia de segurança"
diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po
index cf92dbddc0..449b22eae5 100644
--- a/applications/luci-app-adblock/po/sv/adblock.po
+++ b/applications/luci-app-adblock/po/sv/adblock.po
@@ -1,17 +1,20 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8\n"
+msgid "-------"
+msgstr "-------"
+
msgid "Adblock"
msgstr "Adblock"
-msgid "Adblock Domain Query"
-msgstr ""
-
msgid "Adblock Logfile"
msgstr "Adblock's loggfil"
-msgid "Adblock version"
-msgstr "Version för Adblock"
+msgid "Adblock Status"
+msgstr "Status för Adblock"
+
+msgid "Adblock Version"
+msgstr "Version av Adblock"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr ""
@@ -22,15 +25,26 @@ msgstr "Avancerat"
msgid "Available blocklist sources."
msgstr "Tillgängliga källor för blockeringslistor"
-msgid "Backup directory"
+msgid "Backup Directory"
msgstr "Säkerhetskopiera mapp"
-msgid "Blocked domains (overall)"
-msgstr "Blockerade domäner (övergripande)"
-
-msgid "Blocklist sources"
+msgid "Blocklist Sources"
msgstr "Källor för blockeringslistor"
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+"Försiktig: Vänligen välj inte stora listor eller många listor på samma gång för enheter "
+"med lite minne för att undvika OOM-undantag!"
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"Välj 'inga' för att stänga av automatiska uppstarter, 'tidsinställd för att använda ett klassiskt "
+"avbrott (30 sek. är standard) eller välj ett annat utlösande gränssnitt."
+
msgid "Collecting data..."
msgstr "Samlar in data..."
@@ -45,8 +59,11 @@ msgid ""
"errors or during startup in manual mode."
msgstr ""
-msgid "DNS backend"
-msgstr "Bakände för DNS"
+msgid "DNS Backend (DNS Directory)"
+msgstr "DNS-bakände (DNS-mapp)"
+
+msgid "DNS Directory"
+msgstr "DNS-mapp"
msgid "Description"
msgstr "Beskrivning"
@@ -55,6 +72,8 @@ msgid ""
"Do not automatically update blocklists during startup, use blocklist backups "
"instead."
msgstr ""
+"Uppdatera inte automatiskt blockeringlistor vid uppstarten, använd "
+"säkerhetskopierade blockeringslistor istället."
msgid "Download Utility (SSL Library)"
msgstr "Nerladdningsprogram (SSL-bibliotek)"
@@ -68,10 +87,10 @@ msgstr "Redigerar konfigurationen"
msgid "Edit Whitelist"
msgstr "Redigera vitlista"
-msgid "Enable adblock"
+msgid "Enable Adblock"
msgstr "Aktivera adblock"
-msgid "Enable blocklist backup"
+msgid "Enable Blocklist Backup"
msgstr "Aktivera säkerhetskopiering av blockeringslistan"
msgid ""
@@ -79,13 +98,13 @@ msgid ""
"(&lt; 64 MB RAM)"
msgstr ""
-msgid "Enable verbose debug logging"
+msgid "Enable verbose debug logging in case of any processing error."
msgstr ""
msgid "Enabled"
msgstr "Aktiverad"
-msgid "Extra options"
+msgid "Extra Options"
msgstr "Extra alternativ"
msgid ""
@@ -97,39 +116,60 @@ msgid ""
"For further information <a href=\"%s\" target=\"_blank\">see online "
"documentation</a>"
msgstr ""
+"För mer information <a href=\"%s\" target=\"_blank\">se dokumentationen på "
+"internet</a>"
+
+msgid "Force Local DNS"
+msgstr "Tvinga lokal DNS"
msgid "Force Overall Sort"
msgstr ""
-msgid "Force local DNS"
-msgstr "Tvinga lokal DNS"
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
msgid "Input file not found, please check your configuration."
msgstr ""
-"Inmatningsfilen hittades inte, var vänlig och kontrollera din konfiguration."
+"Inmatningsfilen kunde inte hittas, var vänlig kontrollera din konfiguration."
msgid "Invalid domain specified!"
msgstr "Ogiltig domän angiven!"
-msgid "Last rundate"
+msgid "Last Run"
+msgstr "Kördes senast"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
msgstr ""
msgid "Loading"
msgstr "Laddar"
-msgid "Manual mode"
-msgstr ""
+msgid "Manual / Backup mode"
+msgstr "Manuell / Säkerhetskopieringsläge"
msgid "No"
msgstr "Nej"
msgid ""
-"Note that list URLs and Shallalist category selections are configurable in "
-"the 'Advanced' section."
+"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
-msgid ""
-"Options for further tweaking in case the defaults are not suitable for you."
+msgid "Overall Blocked Domains"
msgstr ""
msgid "Overview"
@@ -141,60 +181,72 @@ msgid ""
msgstr ""
msgid "Please edit this file directly in a terminal session."
-msgstr ""
+msgstr "Vänligen redigera den här filen direkt i en terminal-session."
+
+msgid "Please update your adblock config file to use this package."
+msgstr "Vänligen uppdatera din adblock's konfigurationsfil till att använda det här paketet."
msgid "Query"
-msgstr ""
+msgstr "Fråga"
msgid "Query domains"
-msgstr ""
-
-msgid "Redirect all DNS queries to the local resolver."
-msgstr ""
+msgstr "Fråga efter domäner"
-msgid "Restrict interface trigger to certain interface(s)"
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
-msgid "Resume adblock"
-msgstr "Återuppta adblock"
+msgid "Resume"
+msgstr "Återuppta"
-msgid "Runtime information"
-msgstr "Information om kör-tid"
+msgid "Runtime Information"
+msgstr "Information om körtid"
msgid "SSL req."
-msgstr ""
+msgstr "SSL-rek."
-msgid ""
-"Space separated list of interfaces that trigger adblock processing. To "
-"disable event driven (re-)starts remove all entries."
-msgstr ""
+msgid "Save"
+msgstr "Spara"
+
+msgid "Startup Trigger"
+msgstr "Uppstartslösare"
-msgid "Status"
-msgstr "Status"
+msgid "Suspend"
+msgstr "Stäng av"
-msgid "Suspend / Resume adblock"
+msgid "Suspend / Resume Adblock"
msgstr "Upphäv / Återuppta adblock"
-msgid "Suspend adblock"
-msgstr "Upphäv adblock"
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
-msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr ""
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr "Filstorleken är för stor för online-redigering i LuCi (&gt; 512 KB)."
+
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
"<br />"
msgstr ""
+"Det här formuläret tillåter dig att förändra innehållet i adblock's "
+"svartlista (%s).<br />"
msgid ""
"This form allows you to modify the content of the adblock whitelist (%s)."
"<br />"
msgstr ""
+"Det här formuläret tillåter dig att förändra innehållet i adblock's vitlista "
+"(%s).<br />"
msgid ""
"This form allows you to modify the content of the main adblock configuration "
"file (/etc/config/adblock)."
msgstr ""
+"Det här formuläret tillåter dig att förändra innehållet i adblock's "
+"huvudsakliga konfigurations fil (/etc/config/adblock)."
msgid ""
"This form allows you to query active block lists for certain domains, e.g. "
@@ -206,7 +258,15 @@ msgid ""
"only."
msgstr ""
-msgid "Trigger delay"
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
+msgstr ""
+
+msgid "Verbose Debug Logging"
msgstr ""
msgid "View Logfile"
@@ -218,17 +278,53 @@ msgstr "Väntar på att kommandot ska slutföras..."
msgid "Yes"
msgstr "Ja"
-msgid "active"
-msgstr "aktiv"
+msgid "disabled"
+msgstr "inaktiverad"
+
+msgid "enabled"
+msgstr "aktiverad"
+
+msgid "error"
+msgstr "fel"
msgid "n/a"
msgstr "n/a"
-msgid "no domains blocked"
-msgstr "inga domäner blockerades"
+msgid "paused"
+msgstr "pausad"
+
+#~ msgid "Blocked domains (overall)"
+#~ msgstr "Blockerade domäner (övergripande)"
+
+#~ msgid "DNS backend"
+#~ msgstr "Bakände för DNS"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "Aktivera utförlig loggning för avlusning"
+
+#~ msgid "Last rundate"
+#~ msgstr "Senaste kördatum"
+
+#~ msgid "Redirect all DNS queries to the local resolver."
+#~ msgstr "Dirigera om alla DNS-förfrågningar till den lokala "
+
+#~ msgid "Resume adblock"
+#~ msgstr "Återuppta adblock"
+
+#~ msgid "Status"
+#~ msgstr "Status"
+
+#~ msgid "Suspend adblock"
+#~ msgstr "Upphäv adblock"
+
+#~ msgid "active"
+#~ msgstr "aktiv"
+
+#~ msgid "no domains blocked"
+#~ msgstr "inga domäner blockerades"
-msgid "suspended"
-msgstr "upphävd"
+#~ msgid "suspended"
+#~ msgstr "upphävd"
#~ msgid "."
#~ msgstr "."
diff --git a/applications/luci-app-adblock/po/templates/adblock.pot b/applications/luci-app-adblock/po/templates/adblock.pot
index 5b5a96866a..c6ad66baa3 100644
--- a/applications/luci-app-adblock/po/templates/adblock.pot
+++ b/applications/luci-app-adblock/po/templates/adblock.pot
@@ -1,16 +1,19 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
-msgid "Adblock"
+msgid "-------"
msgstr ""
-msgid "Adblock Domain Query"
+msgid "Adblock"
msgstr ""
msgid "Adblock Logfile"
msgstr ""
-msgid "Adblock version"
+msgid "Adblock Status"
+msgstr ""
+
+msgid "Adblock Version"
msgstr ""
msgid "Additional trigger delay in seconds before adblock processing begins."
@@ -22,13 +25,20 @@ msgstr ""
msgid "Available blocklist sources."
msgstr ""
-msgid "Backup directory"
+msgid "Backup Directory"
msgstr ""
-msgid "Blocked domains (overall)"
+msgid "Blocklist Sources"
msgstr ""
-msgid "Blocklist sources"
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
msgid "Collecting data..."
@@ -43,7 +53,10 @@ msgid ""
"errors or during startup in manual mode."
msgstr ""
-msgid "DNS backend"
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
msgstr ""
msgid "Description"
@@ -66,10 +79,10 @@ msgstr ""
msgid "Edit Whitelist"
msgstr ""
-msgid "Enable adblock"
+msgid "Enable Adblock"
msgstr ""
-msgid "Enable blocklist backup"
+msgid "Enable Blocklist Backup"
msgstr ""
msgid ""
@@ -77,13 +90,13 @@ msgid ""
"(&lt; 64 MB RAM)"
msgstr ""
-msgid "Enable verbose debug logging"
+msgid "Enable verbose debug logging in case of any processing error."
msgstr ""
msgid "Enabled"
msgstr ""
-msgid "Extra options"
+msgid "Extra Options"
msgstr ""
msgid ""
@@ -96,10 +109,16 @@ msgid ""
"documentation</a>"
msgstr ""
+msgid "Force Local DNS"
+msgstr ""
+
msgid "Force Overall Sort"
msgstr ""
-msgid "Force local DNS"
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
msgstr ""
msgid "Input file not found, please check your configuration."
@@ -108,25 +127,38 @@ msgstr ""
msgid "Invalid domain specified!"
msgstr ""
-msgid "Last rundate"
+msgid "Last Run"
+msgstr ""
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
msgstr ""
msgid "Loading"
msgstr ""
-msgid "Manual mode"
+msgid "Manual / Backup mode"
msgstr ""
msgid "No"
msgstr ""
msgid ""
-"Note that list URLs and Shallalist category selections are configurable in "
-"the 'Advanced' section."
+"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
-msgid ""
-"Options for further tweaking in case the defaults are not suitable for you."
+msgid "Overall Blocked Domains"
msgstr ""
msgid "Overview"
@@ -140,39 +172,45 @@ msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr ""
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+
msgid "Query"
msgstr ""
msgid "Query domains"
msgstr ""
-msgid "Redirect all DNS queries to the local resolver."
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
-msgid "Restrict interface trigger to certain interface(s)"
+msgid "Resume"
msgstr ""
-msgid "Resume adblock"
+msgid "Runtime Information"
msgstr ""
-msgid "Runtime information"
+msgid "SSL req."
msgstr ""
-msgid "SSL req."
+msgid "Save"
msgstr ""
-msgid ""
-"Space separated list of interfaces that trigger adblock processing. To "
-"disable event driven (re-)starts remove all entries."
+msgid "Startup Trigger"
msgstr ""
-msgid "Status"
+msgid "Suspend"
msgstr ""
-msgid "Suspend / Resume adblock"
+msgid "Suspend / Resume Adblock"
msgstr ""
-msgid "Suspend adblock"
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr ""
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
@@ -203,7 +241,15 @@ msgid ""
"only."
msgstr ""
-msgid "Trigger delay"
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
+msgstr ""
+
+msgid "Verbose Debug Logging"
msgstr ""
msgid "View Logfile"
@@ -215,14 +261,17 @@ msgstr ""
msgid "Yes"
msgstr ""
-msgid "active"
+msgid "disabled"
msgstr ""
-msgid "n/a"
+msgid "enabled"
msgstr ""
-msgid "no domains blocked"
+msgid "error"
+msgstr ""
+
+msgid "n/a"
msgstr ""
-msgid "suspended"
+msgid "paused"
msgstr ""
diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po
index 46dc99e66e..d5f5104a05 100644
--- a/applications/luci-app-adblock/po/zh-cn/adblock.po
+++ b/applications/luci-app-adblock/po/zh-cn/adblock.po
@@ -13,16 +13,19 @@ msgstr ""
"X-Generator: Poedit 2.0.1\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+msgid "-------"
+msgstr ""
+
msgid "Adblock"
msgstr "Adblock"
-msgid "Adblock Domain Query"
-msgstr ""
-
msgid "Adblock Logfile"
msgstr "Adblock 日志文件"
-msgid "Adblock version"
+msgid "Adblock Status"
+msgstr ""
+
+msgid "Adblock Version"
msgstr "Adblock 版本"
msgid "Additional trigger delay in seconds before adblock processing begins."
@@ -34,14 +37,21 @@ msgstr "高级"
msgid "Available blocklist sources."
msgstr "可用的 blocklist 来源"
-msgid "Backup directory"
+msgid "Backup Directory"
msgstr "备份目录"
-msgid "Blocked domains (overall)"
+msgid "Blocklist Sources"
+msgstr "拦截列表来源"
+
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
msgstr ""
-msgid "Blocklist sources"
-msgstr "拦截列表来源"
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
msgid "Collecting data..."
msgstr "正在收集数据..."
@@ -55,8 +65,11 @@ msgid ""
"errors or during startup in manual mode."
msgstr ""
-msgid "DNS backend"
-msgstr "DNS 后端"
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr ""
msgid "Description"
msgstr "描述"
@@ -78,10 +91,10 @@ msgstr "编辑设置"
msgid "Edit Whitelist"
msgstr "编辑白名单"
-msgid "Enable adblock"
+msgid "Enable Adblock"
msgstr "启用Adblock"
-msgid "Enable blocklist backup"
+msgid "Enable Blocklist Backup"
msgstr "启用拦截规则备份"
msgid ""
@@ -89,13 +102,13 @@ msgid ""
"(&lt; 64 MB RAM)"
msgstr ""
-msgid "Enable verbose debug logging"
-msgstr "启用详细调试输出"
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
msgid "Enabled"
msgstr "启用"
-msgid "Extra options"
+msgid "Extra Options"
msgstr "额外选项"
msgid ""
@@ -108,10 +121,16 @@ msgid ""
"documentation</a>"
msgstr ""
+msgid "Force Local DNS"
+msgstr ""
+
msgid "Force Overall Sort"
msgstr ""
-msgid "Force local DNS"
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
msgstr ""
msgid "Input file not found, please check your configuration."
@@ -120,27 +139,40 @@ msgstr ""
msgid "Invalid domain specified!"
msgstr "无效域名!"
-msgid "Last rundate"
+msgid "Last Run"
+msgstr ""
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
msgstr ""
msgid "Loading"
msgstr "加载中"
-msgid "Manual mode"
+msgid "Manual / Backup mode"
msgstr ""
msgid "No"
msgstr "否"
msgid ""
-"Note that list URLs and Shallalist category selections are configurable in "
-"the 'Advanced' section."
-msgstr ""
-
-msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr "在默认设置并不适合你时的额外选项。"
+msgid "Overall Blocked Domains"
+msgstr ""
+
msgid "Overview"
msgstr "总览"
@@ -152,40 +184,46 @@ msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr ""
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+
msgid "Query"
msgstr "查询"
msgid "Query domains"
msgstr ""
-msgid "Redirect all DNS queries to the local resolver."
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
-msgid "Restrict interface trigger to certain interface(s)"
+msgid "Resume"
msgstr ""
-msgid "Resume adblock"
-msgstr "恢复 Adblock"
-
-msgid "Runtime information"
+msgid "Runtime Information"
msgstr "运行信息"
msgid "SSL req."
msgstr ""
-msgid ""
-"Space separated list of interfaces that trigger adblock processing. To "
-"disable event driven (re-)starts remove all entries."
+msgid "Save"
+msgstr ""
+
+msgid "Startup Trigger"
msgstr ""
-msgid "Status"
-msgstr "状态"
+msgid "Suspend"
+msgstr ""
-msgid "Suspend / Resume adblock"
+msgid "Suspend / Resume Adblock"
msgstr "暂停/恢复 Adblock"
-msgid "Suspend adblock"
-msgstr "暂停 Adblock"
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr ""
msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
msgstr ""
@@ -215,9 +253,17 @@ msgid ""
"only."
msgstr ""
-msgid "Trigger delay"
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
msgstr "触发延迟"
+msgid "Verbose Debug Logging"
+msgstr ""
+
msgid "View Logfile"
msgstr "查看日志文件"
@@ -227,17 +273,44 @@ msgstr "正在执行命令..."
msgid "Yes"
msgstr "是"
-msgid "active"
-msgstr "已启用"
+msgid "disabled"
+msgstr ""
+
+msgid "enabled"
+msgstr ""
+
+msgid "error"
+msgstr ""
msgid "n/a"
msgstr ""
-msgid "no domains blocked"
-msgstr "没有被拦截的域名"
+msgid "paused"
+msgstr ""
+
+#~ msgid "DNS backend"
+#~ msgstr "DNS 后端"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "启用详细调试输出"
+
+#~ msgid "Resume adblock"
+#~ msgstr "恢复 Adblock"
+
+#~ msgid "Status"
+#~ msgstr "状态"
+
+#~ msgid "Suspend adblock"
+#~ msgstr "暂停 Adblock"
+
+#~ msgid "active"
+#~ msgstr "已启用"
+
+#~ msgid "no domains blocked"
+#~ msgstr "没有被拦截的域名"
-msgid "suspended"
-msgstr "已暂停"
+#~ msgid "suspended"
+#~ msgstr "已暂停"
#~ msgid "."
#~ msgstr "."
diff --git a/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po b/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po
new file mode 100644
index 0000000000..20d77cbcf7
--- /dev/null
+++ b/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po
@@ -0,0 +1,109 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Action"
+msgstr "Åtgärd"
+
+msgid "Advanced Reboot"
+msgstr "Avancerad omstart"
+
+msgid "Alternative"
+msgstr "Alternativ"
+
+msgid "Cancel"
+msgstr "Avbryt"
+
+msgid "Confirm"
+msgstr "Bekräfta"
+
+msgid "Current"
+msgstr "Nuvarande"
+
+msgid "Firmware/OS (Kernel)"
+msgstr "Inre mjukvara/OS (Kärna)"
+
+msgid "Partition"
+msgstr "Partition"
+
+msgid "Partitions"
+msgstr "Partitioner"
+
+msgid "Perform power off..."
+msgstr "Utför avstängning..."
+
+msgid "Power Off Device"
+msgstr "Stäng av enhet"
+
+msgid "Proceed"
+msgstr "Fortsätt"
+
+msgid "Reboot Device to an Alternative Partition"
+msgstr "Starta om enheten till en alternativ partition"
+
+msgid "Reboot to alternative partition..."
+msgstr "Starta om till alternativ partition..."
+
+msgid "Reboot to current partition"
+msgstr "Starta om till nuvarande partition"
+
+msgid "Rebooting..."
+msgstr "Startar om..."
+
+msgid "Shutting down..."
+msgstr "Stänger av..."
+
+msgid "Status"
+msgstr "Status"
+
+msgid ""
+"The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
+"few minutes before you try to reconnect. It might be necessary to renew the "
+"address of your computer to reach the device again, depending on your "
+"settings."
+msgstr ""
+
+msgid ""
+"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
+"OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+
+msgid ""
+"The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+"Systemet stänger ner nu.<br /> STÄNG INTE AV ENHETEN!<br /> Beroende på dina "
+"inställningar så kan det vara nödvändigt att förnya din dators adress för "
+"att nå enheten igen."
+
+msgid ""
+"WARNING: An alternative partition might have its own settings and completely "
+"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
+"password on alternative partition might be different, you might have to "
+"adjust your computer settings to be able to access your device once it "
+"reboots.<br /><br /> Please also be aware that alternative partition "
+"firmware might not provide an easy way to switch active partition and boot "
+"back to the currently active partition.<br /><br /> Click \"Proceed\" below "
+"to reboot device to an alternative partition."
+msgstr ""
+
+msgid ""
+"WARNING: Power off might result in a reboot on a device which doesn't "
+"support power off.<br /><br /> Click \"Proceed\" below to power off your "
+"device."
+msgstr ""
+"VARNING: Att stänga av kan resultera i en omstart i en enhet som inte har "
+"stöd för avstängning.<br /><br /> Klicka på \"Fortsätt\" nedanför för att "
+"stänga av din enhet."
+
+msgid "Warning: There are unsaved changes that will get lost on reboot!"
+msgstr ""
+"Varning: Det finns osparade ändringar som kommer att förloras vid omstart!"
+
+msgid "Warning: This system does not have two partitions!"
+msgstr "Varning: Det här systemet har inte två partitioner!"
+
+msgid "Warning: This system does not support powering off!"
+msgstr "Varning: Det här systemet har inte stöd för avstängning!"
diff --git a/applications/luci-app-ahcp/po/sv/ahcp.po b/applications/luci-app-ahcp/po/sv/ahcp.po
index a7c7a38f79..db1cc35ec5 100644
--- a/applications/luci-app-ahcp/po/sv/ahcp.po
+++ b/applications/luci-app-ahcp/po/sv/ahcp.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2014-04-27 22:52+0200\n"
-"Last-Translator: Umeaboy <kristoffer.grundstrom1983@gmail.com>\n"
+"Last-Translator: Umeaboy <hamnisdude@gmail.com>\n"
"Language-Team: none\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
@@ -20,6 +20,10 @@ msgid ""
"networks where it is difficult or impossible to configure a server within "
"every link-layer broadcast domain, for example mobile ad-hoc networks."
msgstr ""
+"AHCP är ett autokonfigurationsprotokoll för IPv6 och dual-stack IPv6/IPv4- "
+"nätverk designade för att användas vid upptäckt av router eller DHCP på "
+"nätverk där det är svårt eller omöjligt att ställa in en server inom "
+"varje sändningslänkslags-domän, till exempel mobila ad-hocnätverk."
msgid "Active AHCP Leases"
msgstr "Aktiva AHCP-hyror"
diff --git a/applications/luci-app-aria2/po/sv/aria2.po b/applications/luci-app-aria2/po/sv/aria2.po
index 3a129364cf..33613faca5 100644
--- a/applications/luci-app-aria2/po/sv/aria2.po
+++ b/applications/luci-app-aria2/po/sv/aria2.po
@@ -25,10 +25,10 @@ msgstr "Status för Aria2"
msgid ""
"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
"configure the settings."
-msgstr "Aria2 är ett verktyg för multiprotokoll &amp; multi-käll"
+msgstr ""
msgid "Autosave session interval"
-msgstr ""
+msgstr "Autospara sessionintervall"
msgid "BitTorrent Settings"
msgstr "Inställningar för BitTorrent"
@@ -82,16 +82,16 @@ msgid "Info"
msgstr "Info"
msgid "List of additional Bt tracker"
-msgstr ""
+msgstr "Lista över extra Bt-tracker"
msgid "List of extra settings"
-msgstr ""
+msgstr "Lista över extra inställningar"
msgid "Log file is in the config file dir."
msgstr "Logg-filen är i konfigurationsfilens mapp."
msgid "Log level"
-msgstr "Loggningsnivå"
+msgstr "Loggnivå"
msgid "Max concurrent downloads"
msgstr "Maximalt sammanhängande nerladdningar"
@@ -103,10 +103,10 @@ msgid "Max number of peers per torrent"
msgstr "Maximalt antalet jämlikar per torrent"
msgid "Max number of split"
-msgstr ""
+msgstr "Högst antal split"
msgid "Min split size"
-msgstr ""
+msgstr "Minsta split-storlek"
msgid "No Authentication"
msgstr "Ingen autentisering"
@@ -118,7 +118,7 @@ msgid "Off"
msgstr "Av"
msgid "Open WebUI-Aria2"
-msgstr ""
+msgstr "Öppna WebUI-Aria2"
msgid "Open YAAW"
msgstr "Öppna YAAW"
@@ -145,10 +145,10 @@ msgid "Prealloc"
msgstr "Prealloc"
msgid "Preallocation"
-msgstr ""
+msgstr "Förallokering"
msgid "Prefix of peer ID"
-msgstr ""
+msgstr "Peer-ID prefix"
msgid "RPC Token"
msgstr ""
@@ -172,7 +172,7 @@ msgid "Sec"
msgstr "Sek"
msgid "Task Settings"
-msgstr ""
+msgstr "Inställningar för uppgifter"
msgid "The Aria2 service is not running."
msgstr "Aria2-tjänsten körs inte."
@@ -181,7 +181,7 @@ msgid "The Aria2 service is running."
msgstr "Aria2-tjänsten körs."
msgid "Token"
-msgstr ""
+msgstr "Tecken"
msgid "Trunc"
msgstr ""
@@ -196,13 +196,13 @@ msgid "Username & Password"
msgstr "Användarnamn & Lösenord"
msgid "View Json-RPC URL"
-msgstr ""
+msgstr "Visa Json-RPC URL"
msgid "Warn"
msgstr "Varna"
msgid "in bytes, You can append K or M."
-msgstr ""
+msgstr "i bytes, Du kan bifoga K eller M."
msgid "in bytes/sec, You can append K or M."
-msgstr ""
+msgstr "i bytes/sek, Du kan bifoga K eller M."
diff --git a/applications/luci-app-aria2/po/zh-cn/aria2.po b/applications/luci-app-aria2/po/zh-cn/aria2.po
index 823699d7bd..3cdc2759b1 100644
--- a/applications/luci-app-aria2/po/zh-cn/aria2.po
+++ b/applications/luci-app-aria2/po/zh-cn/aria2.po
@@ -1,74 +1,91 @@
-msgid "Aria2"
-msgstr ""
-
-msgid "Aria2 is a multi-protocol &amp; multi-source download utility, here you can configure the settings."
-msgstr "Aria2 是一个支持多协议多线程的下载器, 你可以在这里对其进行配置"
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
-msgid "Aria2 Status"
-msgstr "Aria2 状态"
+msgid "\"Falloc\" is not available in all cases."
+msgstr "\"Falloc\" 并不是在所有情况下都可用"
-msgid "Open YAAW"
-msgstr "打开YAAW"
+msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
+msgstr "启用<abbr title=\"分布式哈希表\">DHT</abbr>"
-msgid "Open WebUI-Aria2"
-msgstr "打开WebUI-Aria2"
+msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
+msgstr "启用<abbr title=\"本地节点发现\">LPD</abbr>"
-msgid "The Aria2 service is running."
-msgstr "Aria2 正在运行"
+msgid "Additional Bt tracker enabled"
+msgstr "添加额外的Tracker"
-msgid "The Aria2 service is not running."
-msgstr "Aria2 未运行"
+msgid "Aria2"
+msgstr ""
msgid "Aria2 Settings"
msgstr "Aria2 配置"
+msgid "Aria2 Status"
+msgstr "Aria2 状态"
+
msgid "General settings"
-msgstr "一般设置"
+msgstr "基本设置"
msgid "Files and Locations"
msgstr "文件和目录"
-msgid "Enabled"
-msgstr "启用"
+msgid ""
+"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
+"configure the settings."
+msgstr "Aria2 是一个支持多协议多线程的下载器, 你可以在这里对其进行配置"
-msgid "Task Settings"
-msgstr "任务设置"
+msgid "Autosave session interval"
+msgstr "定时保存会话间隔"
msgid "BitTorrent Settings"
msgstr "BT设置"
-msgid "Run daemon as user"
-msgstr "以此用户权限运行"
+msgid "BitTorrent listen port"
+msgstr "BT监听端口"
-msgid "RPC port"
-msgstr "RPC端口"
+msgid "Collecting data..."
+msgstr ""
-msgid "RPC authentication method"
-msgstr "RPC认证方式"
+msgid "Config file directory"
+msgstr "配置文件目录"
-msgid "No Authentication"
-msgstr "无认证"
+msgid "Debug"
+msgstr "调试"
-msgid "Username & Password"
-msgstr "用户名与密码"
+msgid "Default download directory"
+msgstr "默认下载目录"
-msgid "Token"
-msgstr "令牌"
+msgid "Disk cache"
+msgstr "磁盘缓存"
-msgid "RPC username"
-msgstr "RPC用户名"
+msgid "Enable log"
+msgstr "启用日志"
-msgid "RPC password"
-msgstr "RPC密码"
+msgid "Enabled"
+msgstr "启用"
-msgid "RPC Token"
-msgstr "RPC令牌"
+msgid "Error"
+msgstr "错误"
+
+msgid "Extra Settings"
+msgstr "附加选项"
+
+msgid "Falloc"
+msgstr ""
+
+msgid "Follow torrent"
+msgstr "自动添加下载的种子"
msgid "Generate Randomly"
msgstr "随机生成"
-msgid "Enable log"
-msgstr "启用日志"
+msgid "Info"
+msgstr "信息"
+
+msgid "List of additional Bt tracker"
+msgstr "附加Tracker列表"
+
+msgid "List of extra settings"
+msgstr "附加选项列表"
msgid "Log file is in the config file dir."
msgstr "日志文件在配置文件目录下"
@@ -76,125 +93,116 @@ msgstr "日志文件在配置文件目录下"
msgid "Log level"
msgstr "日志记录等级"
-msgid "Debug"
-msgstr "调试"
-
-msgid "Info"
-msgstr "信息"
-
-msgid "Notice"
-msgstr "注意"
-
-msgid "Warn"
-msgstr "警告"
+msgid "Max concurrent downloads"
+msgstr "最大同时下载任务数"
-msgid "Error"
-msgstr "错误"
+msgid "Max connection per server"
+msgstr "单服务器最大连接数"
-msgid "Config file directory"
-msgstr "配置文件目录"
+msgid "Max number of peers per torrent"
+msgstr "单个种子最大连接数"
-msgid "Default download directory"
-msgstr "默认下载目录"
+msgid "Max number of split"
+msgstr "单文件最大线程数"
-msgid "Disk cache"
-msgstr "磁盘缓存"
+msgid "Min split size"
+msgstr "最小文件分片大小"
-msgid "in bytes, You can append K or M."
-msgstr "单位 B, 你可以在数字后跟上 K 或 M"
+msgid "No Authentication"
+msgstr "无认证"
-msgid "Preallocation"
-msgstr "磁盘预分配"
+msgid "Notice"
+msgstr "注意"
msgid "Off"
msgstr "关闭"
-msgid "Prealloc"
-msgstr ""
-
-msgid "Trunc"
-msgstr ""
-
-msgid "Falloc"
-msgstr ""
-
-msgid "\"Falloc\" is not available in all cases."
-msgstr "\"Falloc\" 并不是在所有情况下都可用"
+msgid "Open WebUI-Aria2"
+msgstr "打开WebUI-Aria2"
-msgid "Overall speed limit enabled"
-msgstr "启用全局限速"
+msgid "Open YAAW"
+msgstr "打开YAAW"
msgid "Overall download limit"
msgstr "全局下载限速"
-msgid "in bytes/sec, You can append K or M."
-msgstr "单位 B/s, 你可以在数字后跟上 K 或 M"
+msgid "Overall speed limit enabled"
+msgstr "启用全局限速"
msgid "Overall upload limit"
msgstr "全局上传限速"
-msgid "Per task speed limit enabled"
-msgstr "启用单任务限速"
-
msgid "Per task download limit"
msgstr "单任务下载限速"
+msgid "Per task speed limit enabled"
+msgstr "启用单任务限速"
+
msgid "Per task upload limit"
msgstr "单任务上传限速"
-msgid "Max concurrent downloads"
-msgstr "最大同时下载任务数"
+msgid "Prealloc"
+msgstr ""
-msgid "Max connection per server"
-msgstr "单服务器最大连接数"
+msgid "Preallocation"
+msgstr "磁盘预分配"
-msgid "Min split size"
-msgstr "最小文件分片大小"
+msgid "Prefix of peer ID"
+msgstr "Peer ID前缀"
-msgid "Max number of split"
-msgstr "单文件最大线程数"
+msgid "RPC Token"
+msgstr "RPC令牌"
-msgid "Autosave session interval"
-msgstr "定时保存会话间隔"
+msgid "RPC authentication method"
+msgstr "RPC认证方式"
-msgid "Sec"
-msgstr "秒"
+msgid "RPC password"
+msgstr "RPC密码"
-msgid "User agent value"
-msgstr "用户代理(UA)"
+msgid "RPC port"
+msgstr "RPC端口"
-msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
-msgstr "启用<abbr title=\"分布式哈希表\">DHT</abbr>"
+msgid "RPC username"
+msgstr "RPC用户名"
-msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
-msgstr "启用<abbr title=\"本地节点发现\">LPD</abbr>"
+msgid "Run daemon as user"
+msgstr "以此用户权限运行"
-msgid "Follow torrent"
-msgstr "自动添加下载的种子"
+msgid "Sec"
+msgstr "秒"
-msgid "BitTorrent listen port"
-msgstr "BT监听端口"
+msgid "Task Settings"
+msgstr "任务设置"
-msgid "Max number of peers per torrent"
-msgstr "单个种子最大连接数"
+msgid "The Aria2 service is not running."
+msgstr "Aria2 未运行"
-msgid "Additional Bt tracker enabled"
-msgstr "添加额外的Tracker"
+msgid "The Aria2 service is running."
+msgstr "Aria2 正在运行"
-msgid "List of additional Bt tracker"
-msgstr "附加Tracker列表"
+msgid "Token"
+msgstr "令牌"
-msgid "Prefix of peer ID"
-msgstr "Peer ID前缀"
+msgid "Trunc"
+msgstr ""
-msgid "Extra Settings"
-msgstr "附加选项"
+msgid "Use WebSocket"
+msgstr "使用WebSocket"
-msgid "List of extra settings"
-msgstr "附加选项列表"
+msgid "User agent value"
+msgstr "用户代理(UA)"
+
+msgid "Username & Password"
+msgstr "用户名与密码"
msgid "View Json-RPC URL"
msgstr "查看 Json-RPC URL"
-msgid "Use WebSocket"
-msgstr "使用WebSocket"
+msgid "Warn"
+msgstr "警告"
+
+msgid "in bytes, You can append K or M."
+msgstr "单位 B, 你可以在数字后跟上 K 或 M"
+
+msgid "in bytes/sec, You can append K or M."
+msgstr "单位 B/s, 你可以在数字后跟上 K 或 M"
diff --git a/applications/luci-app-attendedsysupgrade/Makefile b/applications/luci-app-attendedsysupgrade/Makefile
new file mode 100644
index 0000000000..8d7a6163de
--- /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 +uhttpd-mod-ubus +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 0000000000..1bd050af66
--- /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 0000000000..d04745abd1
--- /dev/null
+++ b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
@@ -0,0 +1,410 @@
+<%
+-- all lua code provided by https://github.com/jow-/
+-- thank you very much!
+
+ function apply_acls(filename, session)
+ local json = require "luci.jsonc"
+ local util = require "luci.util"
+ local fs = require "nixio.fs"
+
+ local grants = { }
+
+ local acl = json.parse(fs.readfile(filename))
+ if type(acl) ~= "table" then
+ return
+ end
+
+ local group, perms
+ for group, perms in pairs(acl) do
+ local perm, scopes
+ for perm, scopes in pairs(perms) do
+ if type(scopes) == "table" then
+ local scope, objects
+ for scope, objects in pairs(scopes) do
+ if type(objects) == "table" then
+ if not grants[scope] then
+ grants[scope] = { }
+ end
+
+ if next(objects) == 1 then
+ local _, object
+ for _, object in ipairs(objects) do
+ if not grants[scope][object] then
+ grants[scope][object] = { }
+ end
+ table.insert(grants[scope][object], perm)
+ end
+ else
+ local object, funcs
+ for object, funcs in pairs(objects) do
+ if type(funcs) == "table" then
+ local _, func
+ for _, func in ipairs(funcs) do
+ if not grants[scope][object] then
+ grants[scope][object] = { }
+ end
+ table.insert(grants[scope][object], func)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ local _, scope, object, func
+ for scope, _ in pairs(grants) do
+ local objects = { }
+ for object, _ in pairs(_) do
+ for _, func in ipairs(_) do
+ table.insert(objects, { object, func })
+ end
+ end
+
+ util.ubus("session", "grant", {
+ ubus_rpc_session = session,
+ scope = scope, objects = objects
+ })
+ end
+ end
+
+ apply_acls("/usr/share/rpcd/acl.d/attendedsysupgrade.json", luci.dispatcher.context.authsession)
+ apply_acls("/usr/share/rpcd/acl.d/packagelist.json", luci.dispatcher.context.authsession)
+%>
+<%+header%>
+<h2 name="content"><%:Attended Sysupgrade%></h2>
+<div class="container">
+ <div style="display: none" id="update_info" class="alert-message info"></div>
+ <div style="display: none" id="update_error" class="alert-message danger"></div>
+</div>
+<p>
+ <input class="cbi-button" style="display: none;" value="edit installed packages" onclick="edit_packages()" type="button" id="edit_button">
+ <textarea style="display: none; width: 100%;" id="edit_packages" rows="15"></textarea>
+</P>
+<p>
+ <input class="cbi-button" value="search for updates" onclick="update_request()" type="button" id="update_button">
+</p>
+<p>
+ <input style="display: none" class="cbi-button" value="show build log" onclick="window.open(data.log_url);" type="button" id="log_button">
+</p>
+<div style="display: none" id="packages" class="alert-message success"></div>
+<div class="cbi-value" id="update_packages_container" style="display: block">
+ <label class="cbi-value-title" for="update_packages">
+ <input type="checkbox" name="update_packages" id="update_packages" />
+ Search for package updates
+ </label>
+</div>
+<div class="cbi-value" id="keep_container" style="display: none">
+ <label class="cbi-value-title" for="keep">
+ <input type="checkbox" name="keep" id="keep" checked="checked" />
+ Keep settings
+ </label>
+</div>
+
+<script type="text/javascript">
+
+latest_version = "";
+data = {};
+ubus_counter = 1
+origin = document.location.href.replace(location.pathname, "")
+ubus_url = origin + "/ubus/"
+
+function edit_packages() {
+ data.edit_packages = true
+ document.getElementById("edit_button").style.display = "none";
+ document.getElementById("edit_packages").value = data.packages.join("\n");
+ document.getElementById("edit_packages").style.display = "block";
+}
+
+// requests to the update server
+function server_request(request_dict, path, callback) {
+ url = data.update_server + "/" + path
+ request_dict.distro = data.release.distribution;
+ request_dict.target = data.release.target.split("\/")[0];
+ request_dict.subtarget = data.release.target.split("\/")[1];
+ var xmlhttp = new XMLHttpRequest();
+ xmlhttp.open("POST", url, true);
+ xmlhttp.setRequestHeader("Content-type", "application/json");
+ xmlhttp.send(JSON.stringify(request_dict));
+ xmlhttp.onerror = function(e) {
+ update_error("update server down")
+ }
+ xmlhttp.addEventListener('load', function(event) {
+ callback(xmlhttp)
+ });
+}
+
+// requests ubus via rpcd
+function ubus_request(command, argument, params, callback) {
+ request_data = {};
+ request_data.jsonrpc = "2.0";
+ request_data.id = ubus_counter;
+ request_data.method = "call";
+ request_data.params = [ data.ubus_rpc_session, command, argument, params ]
+ ubus_counter++
+ var xmlhttp = new XMLHttpRequest();
+ xmlhttp.open("POST", ubus_url, true);
+ xmlhttp.setRequestHeader("Content-type", "application/json");
+ xmlhttp.onerror = function(e) {
+ setTimeout(back_online, 5000)
+ }
+ xmlhttp.addEventListener('load', function(event) {
+ if(command === "uci") {
+ ubus_request_callback_uci(xmlhttp, callback)
+ } else {
+ ubus_request_callback(xmlhttp, callback)
+ }
+ });
+ xmlhttp.send(JSON.stringify(request_data));
+}
+
+// handle ubus_requests, set variables or perform functions
+function ubus_request_callback(response_object, callback) {
+ if(response_object.status === 200) {
+ console.log(callback)
+ if(typeof callback === "string") {
+ response_json = JSON.parse(response_object.responseText).result[1]
+ if (callback == "release") {
+ latest_version = response_json.release.version
+ }
+ data[callback] = response_json[callback]
+ } else {
+ callback(response_object)
+ }
+ } else {
+ console.log(respons_object.responseText)
+ }
+}
+
+function ubus_request_callback_uci(response_object, callback) {
+ if(response_object.status === 200) {
+ console.log(callback)
+ response_json = JSON.parse(response_object.responseText).result[1].value
+ data[callback] = response_json
+
+ document.getElementById("update_packages").checked = data.update_packages;
+ } else {
+ console.log(respons_object.responseText)
+ }
+}
+
+// initial setup, get system information
+function setup() {
+ data["ubus_rpc_session"] = "<%=luci.dispatcher.context.authsession%>"
+ ubus_request("packagelist", "list", {}, "packagelist");
+ ubus_request("system", "board", {}, "release");
+ ubus_request("system", "board", {}, "board_name");
+ ubus_request("system", "board", {}, "model");
+ ubus_request("uci", "get", { "config": "attendedsysupgrade", "section": "updateserver", "option": "url" }, "update_server")
+ ubus_request("uci", "get", { "config": "attendedsysupgrade", "section": "updateclient", "option": "update_packages" }, "update_packages")
+}
+
+// shows notification if update is available
+function update_info(info_output) {
+ document.getElementById("update_info").style.display = "block";
+ document.getElementById("update_info").innerHTML = info_output;
+}
+
+function update_error(error_output) {
+ document.getElementById("update_error").style.display = "block";
+ document.getElementById("update_error").innerHTML = error_output;
+ document.getElementById("update_info").style.display = "none";
+}
+
+// asks server for news updates, actually only based on relesae not packages
+function update_request() {
+ console.log("update_request")
+ request_dict = {}
+ request_dict.version = data.release.version;
+ request_dict.packages = data.packagelist;
+ if (document.getElementById("update_packages").checked == 1) {
+ request_dict.update_packages = 1
+ }
+ server_request(request_dict, "update-request", update_request_callback)
+}
+
+function update_request_callback(response_object) {
+ if (response_object.status === 500) {
+ // python crashed
+ update_error("internal server error, please try again later")
+ console.log("update server issue")
+ } else if (response_object.status === 502) {
+ // python part offline
+ update_error("internal server error, please try again later")
+ console.log("update server issue")
+ } else if (response_object.status === 503) {
+ // handle overload
+ update_error("server overloaded, retry in 5 minutes")
+ console.log("server overloaded")
+ setTimeout(update_request, 300000)
+ } else if (response_object.status === 201) {
+ update_info("imagebuilder not ready, please wait")
+ console.log("setting up imagebuilder")
+ setTimeout(update_request, 5000)
+ } else if (response_object.status === 204) {
+ // no updates
+ update_info("no updates available")
+ } else if (response_object.status === 400) {
+ // bad request
+ console.log(response_object.responseText)
+ response_object_content = JSON.parse(response_object.responseText)
+ update_error(response_object_content.error)
+ } else if (response_object.status === 200) {
+ // new release/updates
+ response_object_content = JSON.parse(response_object.responseText)
+ document.getElementById("edit_button").style.display = "block";
+ document.getElementById("update_button").disabled = false;
+ update_request_200(response_object_content)
+ }
+}
+
+function back_online() {
+ ubus_request("session", "login", {}, back_online_callback)
+}
+
+function back_online_callback(response_object) {
+ if (response_object.status != 200) {
+ setTimeout(back_online, 5000)
+ } else {
+ update_info("upgrade successfull!")
+ document.getElementById("update_button").value = "reload page";
+ document.getElementById("update_button").onclick = function() { location.reload(); }
+ }
+
+}
+
+function update_request_200(response_content) {
+ info_output = ""
+ if(response_content.version != undefined) {
+ info_output += "<h3>new update available</h3>"
+ info_output += data.release.version + " to " + response_content.version
+ latest_version = response_content.version;
+ }
+ if(response_content.updates != undefined) {
+ info_output += "<h3>package updates available</h3>"
+ for (update in response_content.updates) {
+ info_output += "<b>" + update + "</b>: " + response_content.updates[update][1] + " to " + response_content.updates[update][0] + "</br>"
+ }
+ }
+ data.packages = response_content.packages
+ update_info(info_output)
+ document.getElementById("update_button").value = "request image";
+ document.getElementById("update_packages_container").style.display = "none";
+ document.getElementById("update_button").onclick = image_request;
+}
+
+// request the image, need merge with update_request
+function image_request() {
+ console.log("image_request")
+ document.getElementById("update_button").disabled = true;
+ document.getElementById("update_packages_container").style.display = "none";
+ document.getElementById("edit_packages").style.display = "none";
+ document.getElementById("edit_button").style.display = "none";
+ request_dict = {}
+ request_dict.version = latest_version;
+ request_dict.board = data.board_name
+ if(data.edit_packages == true) {
+ request_dict.packages = document.getElementById("edit_packages").value.split("\n")
+ } else {
+ request_dict.packages = data.packages;
+ }
+ request_dict.model = data.model
+ server_request(request_dict, "image-request", image_request_handler)
+}
+
+function image_request_handler(response) {
+ if (response.status === 400) {
+ response_content = JSON.parse(response.responseText)
+ update_error(response_content.error)
+ } else if (response.status === 500) {
+ response_content = JSON.parse(response.responseText)
+ update_error(response_content.error)
+ if(response_content.log != undefined) {
+ data.log_url = response_content.log
+ document.getElementById("log_button").style.display = "block";
+ }
+ } else if (response.status === 503) {
+ update_error("please wait. server overloaded")
+ // handle overload
+ setTimeout(image_request, 30000)
+ } else if (response.status === 201) {
+ response_content = JSON.parse(response.responseText)
+ if(response_content.queue != undefined) {
+ // in queue
+ update_info("please wait. you are in queue position " + response_content.queue)
+ console.log("queued")
+ } else {
+ update_info("imagebuilder not ready, please wait")
+ console.log("setting up imagebuilder")
+ }
+ setTimeout(image_request, 5000)
+ } else if (response.status === 206) {
+ // building
+ console.log("building")
+ update_info("building image")
+ setTimeout(image_request, 5000)
+ } else if (response.status === 200) {
+ // ready to download
+ response_content = JSON.parse(response.responseText);
+ data.image_url = response_content.url;
+ data.log_url = data.image_url + ".log";
+ update_info("image created");
+ document.getElementById("log_button").style.display = "block";
+ document.getElementById("update_button").disabled = false;
+ document.getElementById("update_button").value = "sysupgrade";
+ document.getElementById("update_button").onclick = download_image;
+ document.getElementById("keep_container").style.display = "block";
+ }
+}
+
+
+// uploads received blob data to the server using cgi-io
+function upload_image(blob) {
+ var upload_request = new XMLHttpRequest();
+ var form_data = new FormData();
+
+ form_data.append("sessionid", data.ubus_rpc_session)
+ form_data.append("filename", "/tmp/sysupgrade.bin")
+ form_data.append("filemode", 755) // insecure?
+ form_data.append("filedata", blob)
+
+ upload_request.addEventListener('load', function(event) {
+ // this checksum should be parsed
+ document.getElementById("update_info").innerHTML = "flashing... please wait"; // show fancy indicator http://www.ajaxload.info/
+
+ ubus_request("attendedsysupgrade", "sysupgrade", { "keep_settings": document.getElementById("keep").checked }, 'done');
+ });
+
+ upload_request.addEventListener('error', function(event) {
+ document.getElementById("update_info").innerHTML = "uploading failed, please retry"
+ });
+
+ upload_request.open('POST', origin + '/cgi-bin/cgi-upload');
+ upload_request.send(form_data);
+}
+
+// download image from server once the url was received by image_request
+function download_image() {
+ console.log("download_image")
+ document.getElementById("update_button").value = "downloading image";
+ document.getElementById("update_button").disabled = true;
+ var download_request = new XMLHttpRequest();
+ download_request.open("GET", data.image_url);
+ download_request.responseType = "arraybuffer";
+
+ download_request.onload = function () {
+ if (this.status === 200) {
+ var blob = new Blob([download_request.response], {type: "application/octet-stream"});
+ upload_image(blob)
+ }
+ };
+ document.getElementById("update_info").innerHTML = "downloading image";
+ download_request.send();
+}
+
+document.onload = setup()
+</script>
+
+<%+footer%>
diff --git a/applications/luci-app-bcp38/po/sv/bcp38.po b/applications/luci-app-bcp38/po/sv/bcp38.po
new file mode 100644
index 0000000000..7293278f26
--- /dev/null
+++ b/applications/luci-app-bcp38/po/sv/bcp38.po
@@ -0,0 +1,45 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Allowed IP ranges"
+msgstr ""
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+
+msgid "Auto-detect upstream IP"
+msgstr "Upptäck automatiskt IP från uppströms"
+
+msgid "BCP38"
+msgstr "BCP38"
+
+msgid "BCP38 config"
+msgstr ""
+
+msgid "Blocked IP ranges"
+msgstr ""
+
+msgid "Enable"
+msgstr "Aktivera"
+
+msgid "Interface name"
+msgstr "Namn på gränssnittet"
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr ""
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""
diff --git a/applications/luci-app-bcp38/po/templates/bcp38.pot b/applications/luci-app-bcp38/po/templates/bcp38.pot
new file mode 100644
index 0000000000..1210784d23
--- /dev/null
+++ b/applications/luci-app-bcp38/po/templates/bcp38.pot
@@ -0,0 +1,45 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Allowed IP ranges"
+msgstr ""
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+
+msgid "Auto-detect upstream IP"
+msgstr ""
+
+msgid "BCP38"
+msgstr ""
+
+msgid "BCP38 config"
+msgstr ""
+
+msgid "Blocked IP ranges"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Interface name"
+msgstr ""
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr ""
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""
diff --git a/applications/luci-app-bcp38/po/zh-cn/bcp38.po b/applications/luci-app-bcp38/po/zh-cn/bcp38.po
new file mode 100644
index 0000000000..f9e0634b8b
--- /dev/null
+++ b/applications/luci-app-bcp38/po/zh-cn/bcp38.po
@@ -0,0 +1,52 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Allowed IP ranges"
+msgstr "允许的 IP 范围"
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+"自动检测上游 IP 是否会被当前配置所阻止,当检测到会被阻止时将会添加例外。如果"
+"自动检测无法正常工作,你可以在下面手动添加例外。"
+
+msgid "Auto-detect upstream IP"
+msgstr "自动检测上游 IP"
+
+msgid "BCP38"
+msgstr "BCP38"
+
+msgid "BCP38 config"
+msgstr "BCP38 配置"
+
+msgid "Blocked IP ranges"
+msgstr "阻止的 IP 范围"
+
+msgid "Enable"
+msgstr "启用"
+
+msgid "Interface name"
+msgstr "接口名称"
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr "应用“阻止规则”的接口(应当为上游 WAN 接口)。"
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+"这里的规则优先于阻止规则被使用。如果你在双重 NAT 之后并且自动检测功能不起作"
+"用,请在这里添加你上游网络的白名单。"
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""
+"此功能可以阻止具有私有目标地址的数据包通过 <a href=\"http://tools.ietf.org/"
+"html/bcp38\">BCP 38</a> 发送到互联网上。对于 IPv6,仅安装源特定的默认路由,因"
+"此不需要 BCP38 防火墙路由。"
diff --git a/applications/luci-app-clamav/po/sv/clamav.po b/applications/luci-app-clamav/po/sv/clamav.po
index 37de249e54..a6c98377df 100644
--- a/applications/luci-app-clamav/po/sv/clamav.po
+++ b/applications/luci-app-clamav/po/sv/clamav.po
@@ -41,10 +41,10 @@ msgid "ClamAV"
msgstr "ClamAV"
msgid "Database check every N sec"
-msgstr ""
+msgstr "Kontrollera databasen var N sek"
msgid "Detect broken executables"
-msgstr ""
+msgstr "Upptäck trasiga exekverbara filer"
msgid "Detect possibly unwanted apps"
msgstr "Upptäck möjliga oönskade appar"
@@ -53,19 +53,19 @@ msgid "Enable verbose logging"
msgstr "Aktivera utförlig loggning"
msgid "Follow directory symlinks"
-msgstr ""
+msgstr "Följ mappens symbollänkar"
msgid "Follow file symlinks"
-msgstr ""
+msgstr "Följ symbollänkar för fil"
msgid "Log"
msgstr "Logg"
msgid "Log additional infection info"
-msgstr ""
+msgstr "Logga ytterligare information om infektionen"
msgid "Log time with each message"
-msgstr ""
+msgstr "Loggtid med varje meddelande"
msgid "Max directory scan depth"
msgstr ""
@@ -74,19 +74,19 @@ msgid "Max number of threads"
msgstr "Maximalt antalet trådar"
msgid "Max size of log file"
-msgstr ""
+msgstr "Högsta storlek av loggfilen"
msgid "Max size of scanned file"
-msgstr ""
+msgstr "Högsta storlek av skannad fil"
msgid "No"
msgstr "Nej"
msgid "Port range, highest port"
-msgstr ""
+msgstr "Räckvidd för port, högsta port"
msgid "Port range, lowest port"
-msgstr ""
+msgstr "Räckvidd för port, lägsta port"
msgid "Scan ELF files"
msgstr "Sök igenom ELF-filer"
@@ -107,7 +107,7 @@ msgid "Scan pdf files"
msgstr "Sök igenom pdf-filer"
msgid "Scan portable executables"
-msgstr ""
+msgstr "Sök igenom bärbara exekverbara filer"
msgid "Scan swf files"
msgstr "Sök igenom swf-filer"
diff --git a/applications/luci-app-coovachilli/po/sv/coovachilli.po b/applications/luci-app-coovachilli/po/sv/coovachilli.po
index 8695ce5a75..751b9211bf 100644
--- a/applications/luci-app-coovachilli/po/sv/coovachilli.po
+++ b/applications/luci-app-coovachilli/po/sv/coovachilli.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2014-04-28 06:16+0200\n"
-"Last-Translator: Umeaboy <kristoffer.grundstrom1983@gmail.com>\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
"Language-Team: none\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
diff --git a/applications/luci-app-ddns/po/it/ddns.po b/applications/luci-app-ddns/po/it/ddns.po
index f59d053e71..4b8d2f844e 100644
--- a/applications/luci-app-ddns/po/it/ddns.po
+++ b/applications/luci-app-ddns/po/it/ddns.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: luci-app-ddns 2.4.0-1\n"
"POT-Creation-Date: 2016-01-30 11:07+0100\n"
-"PO-Revision-Date: 2013-02-03 13:53+0200\n"
-"Last-Translator: Francesco <3gasas@gmail.com>\n"
+"PO-Revision-Date: 2017-09-06 01:53+0200\n"
+"Last-Translator: Bubu83 <bubu83@gmail.com>\n"
"Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n"
@@ -22,160 +22,182 @@ msgid "-- default --"
msgstr ""
msgid "Advanced Settings"
-msgstr ""
+msgstr "Opzioni Avanzate"
msgid "Allow non-public IP's"
-msgstr ""
+msgstr "Consenti IP non pubblici"
msgid "Applying changes"
-msgstr ""
+msgstr "Applico i cambiamenti"
msgid "Basic Settings"
-msgstr ""
+msgstr "Opzioni di Base"
msgid ""
"Below a list of configuration tips for your system to run Dynamic DNS "
"updates without limitations"
msgstr ""
+"Sotto c'è una lista di consigli di configurazione per il tuo sistema per eseguire "
+"aggiornamenti di Dynamic DNS senza limitazioni"
msgid ""
"Below is a list of configured DDNS configurations and their current state."
msgstr ""
+"Sotto c'è una lista delle configurazioni DDNS configurate e il loro stato attuale."
msgid "Bind Network"
-msgstr ""
+msgstr "Collega Rete"
msgid "Binding to a specific network not supported"
-msgstr ""
+msgstr "Collegamento a una specifica rete non supportato"
msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use "
"for communication with DDNS Provider!"
msgstr ""
+"Nslookup di BusyBox e Wget non supportano lo specificare la versione IP da usare "
+"per la comunicazione con il Provider DDNS!"
msgid ""
"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
"of default UDP when requesting DNS server!"
msgstr ""
+"Nslookup di BusyBox e hostip non supportano lo specificare l'uso di TCP invece "
+"di UDP di default quando richiedono il server DNS!"
msgid ""
"BusyBox's nslookup in the current compiled version does not handle given DNS "
"Servers correctly!"
msgstr ""
+"Nslookup di BusyBox nella versione compilata corrente non gestisce i dati Server "
+"DNS correttamente!"
msgid "Casual users should not change this setting"
-msgstr ""
+msgstr "Gli utenti casuali non dovrebbero cambiare questa opzione"
msgid "Change provider"
-msgstr ""
+msgstr "Cambia provider"
msgid "Check Interval"
-msgstr ""
+msgstr "Controlla Intervallo"
msgid "Collecting data..."
-msgstr ""
+msgstr "Raccogliendo dati..."
msgid "Config error"
-msgstr ""
+msgstr "Errore di configurazione"
msgid "Configuration"
-msgstr ""
+msgstr "Configurazione"
msgid ""
"Configure here the details for all Dynamic DNS services including this LuCI "
"application."
msgstr ""
+"Configura qui i dettagli per tutti i servizi Dynamic DNS inclusa questa "
+"applicazione LuCI."
msgid "Configure here the details for selected Dynamic DNS service."
-msgstr ""
+msgstr "Configura qui i dettagli per il servizio Dynamic DNS selezionato."
msgid "Current setting"
-msgstr ""
+msgstr "Impostazione corrente"
msgid ""
"Currently DDNS updates are not started at boot or on interface events.<br /"
">This is the default if you run DDNS scripts by yourself (i.e. via cron with "
"force_interval set to '0')"
msgstr ""
+"Attualmente gli aggiornamenti DDNS non si avviano al boot o per eventi "
+"dell'interfaccia. <br />Questo è di default se esegui gli script DDNS per conto tuo "
+" (es. usando cron con force_interval impostato a '0')"
msgid ""
"Currently DDNS updates are not started at boot or on interface events.<br /"
">You can start/stop each configuration here. It will run until next reboot."
msgstr ""
+"Attualmente gli aggiornamenti DDNS non si avviano al boot o per eventi "
+"dell'interfaccia. <br />Puoi avviare/fermare ogni configurazione qui. Verrà eseguita "
+"fino al prossimo riavvio."
msgid "Custom update script to be used for updating your DDNS Provider."
-msgstr ""
+msgstr "Script aggiornamento personalizzato da usare per aggiornare il tuo DDNS Provider."
msgid "Custom update-URL"
msgstr "URL di aggiornamento personalizzato"
msgid "Custom update-script"
-msgstr ""
+msgstr "Script di aggiornamento personalizzato"
msgid "DDNS Autostart disabled"
-msgstr ""
+msgstr "Autoavvio DDNS disabilitato"
msgid "DDNS Client Configuration"
-msgstr ""
+msgstr "Configurazione Cliente DDNS"
msgid "DDNS Client Documentation"
-msgstr ""
+msgstr "Documentazione Cliente DDNS"
msgid "DDNS Service provider"
-msgstr ""
+msgstr "Provider del Servizio DDNS"
msgid "DNS requests via TCP not supported"
-msgstr ""
+msgstr "Richieste DNS via TCP non supportate"
msgid "DNS-Server"
-msgstr ""
+msgstr "Server DNS"
msgid "Date format"
-msgstr ""
+msgstr "Formato Data"
msgid "Defines the Web page to read systems IPv4-Address from"
-msgstr ""
+msgstr "Definisce la pagina WEB che legge l'indirizzo IPv4 dei sistemi"
msgid "Defines the Web page to read systems IPv6-Address from"
-msgstr ""
+msgstr "Definisce la pagina WEB che legge l'indirizzo IPv6 dei sistemi"
msgid "Defines the interface to read systems IP-Address from"
-msgstr ""
+msgstr "Definisce l'interfaccia che legge l'indirizzo IP dei sistemi"
msgid "Defines the network to read systems IPv4-Address from"
-msgstr ""
+msgstr "Definisce la rete che legge l'indirizzo IPv4 dei sistemi"
msgid "Defines the network to read systems IPv6-Address from"
-msgstr ""
+msgstr "Definisce la rete che legge l'indirizzo IPv6 dei sistemi"
msgid ""
"Defines the source to read systems IPv4-Address from, that will be send to "
"the DDNS provider"
msgstr ""
+"Definisce la sorgente che legge l'indirizzo IPv4 dei sistemi, che sarà mandata "
+"al provider DDNS"
msgid ""
"Defines the source to read systems IPv6-Address from, that will be send to "
"the DDNS provider"
msgstr ""
+"Definisce la sorgente che legge l'indirizzo IPv6 dei sistemi, che sarà mandata "
+"al provider DDNS"
msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
-msgstr ""
+msgstr "Definisce quale indirizzo IP 'IPv4/IPv6' è mandato al provider DDNS"
msgid "Details for"
-msgstr ""
+msgstr "Dettagli per"
msgid "Directory contains Log files for each running section"
-msgstr ""
+msgstr "Directory che contiene i file di registro per ogni sezione avviata"
msgid ""
"Directory contains PID and other status information for each running section"
msgstr ""
+"Directory che contiene il PID e altre informazioni di stato per ogni seziona avviata"
msgid "Disabled"
-msgstr ""
+msgstr "Disabilitato"
msgid "Domain"
-msgstr ""
+msgstr "Dominio"
msgid "Dynamic DNS"
msgstr "DNS Dinamico"
@@ -188,124 +210,136 @@ msgstr ""
"statico anche nel caso in cui tu disponga di un indirizzo IP dinamico."
msgid "Enable secure communication with DDNS provider"
-msgstr ""
+msgstr "Abilita la comunicazione sicura con il provider DDNS"
msgid "Enabled"
-msgstr ""
+msgstr "Abilitato"
msgid "Error"
-msgstr ""
+msgstr "Errore"
msgid "Error Retry Counter"
-msgstr ""
+msgstr "Conteggio errore di riprova"
msgid "Error Retry Interval"
-msgstr ""
+msgstr "Intervallo errore di riprova"
msgid "Event Network"
-msgstr ""
+msgstr "Network Evento"
msgid "File"
msgstr ""
msgid "File not found"
-msgstr ""
+msgstr "File non trovato"
msgid "File not found or empty"
-msgstr ""
+msgstr "File non trovato o vuoto"
msgid ""
"Follow this link<br />You will find more hints to optimize your system to "
"run DDNS scripts with all options"
msgstr ""
+"Segui questo collegamento<br />Troverai più aiuti per ottimizzare il tuo sistema "
+"a eseguire script DDNS con tutte le opzioni"
msgid "For detailed information about parameter settings look here."
-msgstr ""
+msgstr "Per informazioni dettagliate sui parametri opzionali guarda qui."
msgid "For supported codes look here"
-msgstr ""
+msgstr "Per i codici supportati guarda qui"
msgid "Force IP Version"
-msgstr ""
+msgstr "Forza Versione IP"
msgid "Force IP Version not supported"
-msgstr ""
+msgstr "Forza Versione IP non supportato"
msgid "Force Interval"
-msgstr ""
+msgstr "Forza Intervallo"
msgid "Force TCP on DNS"
-msgstr ""
+msgstr "Forza TCP su DNS"
msgid "Forced IP Version don't matched"
-msgstr ""
+msgstr "La Versione IP forzata non corrisponde"
msgid "Format"
-msgstr ""
+msgstr "Formato"
msgid "Format: IP or FQDN"
-msgstr ""
+msgstr "Formato: IP o FQDN"
msgid ""
"GNU Wget will use the IP of given network, cURL will use the physical "
"interface."
msgstr ""
+"GNU Wget userà l'IP della rete data, cURL userà l'interfaccia "
+"fisica."
msgid "Global Settings"
-msgstr ""
+msgstr "Opzioni Globali"
msgid "HTTPS not supported"
-msgstr ""
+msgstr "HTTPS non supportato"
msgid "Hints"
-msgstr ""
+msgstr "Suggerimenti"
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
-msgstr ""
+msgstr "Indirizzo/FQDN da validare, se l'aggiornamento IP avviene o è necessario"
msgid "IP address source"
-msgstr ""
+msgstr "Sorgente indirizzo IP"
msgid "IP address version"
-msgstr ""
+msgstr "Versione indirizzo IP"
msgid "IPv4-Address"
-msgstr ""
+msgstr "Indirizzo IPv4"
msgid "IPv6 address must be given in square brackets"
-msgstr ""
+msgstr "Indirizzo IPv6 deve essere dato con le parentesi quadre"
msgid ""
"IPv6 is currently not (fully) supported by this system<br />Please follow "
"the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
"your system to the latest OpenWrt Release"
msgstr ""
+"IPv6 non è (pienamente) supportato da questo sistema<br />Per favore segui "
+"le istruzioni sul sito di OpenWrt per abilitare il supporto a IPv6<br />o aggiorna "
+"il tuo sistema all'ultima Release di OpenWrt"
msgid "IPv6 not supported"
-msgstr ""
+msgstr "IPv6 non supportato"
msgid "IPv6-Address"
-msgstr ""
+msgstr "Indirizzo IPv6"
msgid "If both cURL and GNU Wget are installed, Wget is used by default."
-msgstr ""
+msgstr "Se sia cURL e sia GNU Wget sono installati, Wget è usato di default."
msgid ""
"If this service section is disabled it could not be started.<br />Neither "
"from LuCI interface nor from console"
msgstr ""
+"Se questa sezione del servizio è disabilitata, non può essere avviata<br />Nè "
+"da interfaccia LuCI nè da console"
msgid "If using secure communication you should verify server certificates!"
-msgstr ""
+msgstr "Se usi la comunicazione sicura dovresti verificare i certificati del server!"
msgid ""
"If you want to send updates for IPv4 and IPv6 you need to define two "
"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
msgstr ""
+"Se vuoi mandare aggiornamenti per IPv4 e IPv6, devi definire due "
+"Configurazioni separate es. 'myddns_ipv4' e 'myddns_ipv6'"
msgid ""
"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
msgstr ""
+"In alcune versioni cURL/libcurl in OpenWrt è compilato senza supporto proxy."
msgid "Info"
msgstr ""
@@ -314,6 +348,8 @@ msgid ""
"Install 'ca-certificates' package or needed certificates by hand into /etc/"
"ssl/certs default directory"
msgstr ""
+"Installa il pacchetto 'ca-certificates' o i certificati necessari "
+"a mano nella directory di default /etc/ssl/certs"
msgid "Interface"
msgstr "Interfaccia"
@@ -322,408 +358,431 @@ msgid ""
"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
"are not supported"
msgstr ""
+"Intervallo per controllare i cambiamenti dell'IP<br />I valori sotto i 5 minuti == "
+"300 secondi non sono supportati"
msgid ""
"Interval to force updates send to DDNS Provider<br />Setting this parameter "
"to 0 will force the script to only run once<br />Values lower 'Check "
"Interval' except '0' are not supported"
msgstr ""
+"Intervallo per forzare gli aggiornamenti da mandare al provider DDNS<br />Impostanto questo "
+"parametro a 0 forzerà lo script ad eseguirsi una sola volta<br />Valori sotto 'Controllo "
+"Intervallo' eccetto '0' non sono supportati"
msgid "It is NOT recommended for casual users to change settings on this page."
-msgstr ""
+msgstr "Non è raccomandato agli utenti casuali di cambiare le opzioni in questa pagina."
msgid "Last Update"
-msgstr ""
+msgstr "Ultimo Aggiornamento"
msgid "Loading"
-msgstr ""
+msgstr "Caricando"
msgid "Log File Viewer"
-msgstr ""
+msgstr "Visualizzatore Registro"
msgid "Log directory"
-msgstr ""
+msgstr "Directory registro"
msgid "Log length"
-msgstr ""
+msgstr "Lunghezza registro"
msgid "Log to file"
-msgstr ""
+msgstr "Registra su file"
msgid "Log to syslog"
-msgstr ""
+msgstr "Registra su syslog"
msgid "Lookup Hostname"
-msgstr ""
+msgstr "Indirizzo da consultare"
msgid "NOT installed"
-msgstr ""
+msgstr "NON installato"
msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication."
msgstr ""
+"Nè GNU Wget con SSL nè cURL installati per selezionare una rete da usare per "
+"comunicazione."
msgid ""
"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
"HTTPS protocol."
msgstr ""
+"Nè GNU Wget con SSL nè cURL installati per supportare aggiornamenti sicuri via "
+"protocollo HTTPS."
msgid "Network"
msgstr "Rete"
msgid "Network on which the ddns-updater scripts will be started"
-msgstr ""
+msgstr "Rete su cui lo script di aggiornamento DDNS sara avviato"
msgid "Never"
-msgstr ""
+msgstr "Mai"
msgid "Next Update"
-msgstr ""
+msgstr "Prossimo Aggiornamento"
msgid "No certificates found"
-msgstr ""
+msgstr "Nessun certificato trovato"
msgid "No data"
-msgstr ""
+msgstr "Nessuno dato"
msgid "No logging"
-msgstr ""
+msgstr "Nessun registro"
msgid "Non-public and by default blocked IP's"
-msgstr ""
+msgstr "Ip non pubblici e bloccati di default"
msgid "Notice"
-msgstr ""
+msgstr "Avviso"
msgid "Number of last lines stored in log files"
-msgstr ""
+msgstr "Numero di ultime linee memorizzato nei file registro"
msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
-msgstr ""
+msgstr "OPZIONALE: Forza l'uso di puro IPv4/IPv6 solo comunicazione."
msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
-msgstr ""
+msgstr "OPZIONALE: Forza l'uso del TCP invece del UDP di default per richieste DNS."
msgid "OPTIONAL: Network to use for communication"
-msgstr ""
+msgstr "OPZIONALE: Rete da usare per comunicazione"
msgid "OPTIONAL: Proxy-Server for detection and updates."
-msgstr ""
+msgstr "OPZIONALE: Server Proxy per rivelazioni e aggiornamenti."
msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
-msgstr ""
+msgstr "OPZIONALE: Usa Server DNS non di default per individuare 'IP Registrati'."
msgid "On Error the script will retry the failed action after given time"
-msgstr ""
+msgstr "Ad Errore lo script riproverà l'azione fallita dopo il tempo dato"
msgid "On Error the script will stop execution after given number of retrys"
-msgstr ""
+msgstr "Ad Errore lo script fermerà l'esecuzione dopo il numero di tentativi dati"
msgid "OpenWrt Wiki"
msgstr ""
msgid "Optional Encoded Parameter"
-msgstr ""
+msgstr "Parametro Codificato Opzionale"
msgid "Optional Parameter"
-msgstr ""
+msgstr "Parametro Opzionale"
msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Opzionale: Sostituisci [PARAMENC] nell'URL di aggiornamento (URL codificato)"
msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
-msgstr ""
+msgstr "Opzionale: Sostituisci [PARAMOPT] nell'URL di aggiornamento (URL NON codificato)"
msgid "Overview"
-msgstr ""
+msgstr "Riassunto"
msgid "PROXY-Server"
-msgstr ""
+msgstr "Server PROXY"
msgid "PROXY-Server not supported"
-msgstr ""
+msgstr "SERVER PROXY non supportato"
msgid "Password"
msgstr "Password"
msgid "Path to CA-Certificate"
-msgstr ""
+msgstr "Percorso per Certificato CA"
msgid "Please [Save & Apply] your changes first"
-msgstr ""
+msgstr "Per favore [Salva & Applica] prima i cambiamenti"
msgid "Please press [Read] button"
-msgstr ""
+msgstr "Per favore premi il pulsante [Leggi]"
msgid "Please update to the current version!"
-msgstr ""
+msgstr "Per favore aggiorna alla versione corrente!"
msgid "Process ID"
-msgstr ""
+msgstr "ID del Processo"
msgid "Read / Reread log file"
-msgstr ""
+msgstr "Leggi / Rileggi registro"
msgid "Really change DDNS provider?"
-msgstr ""
+msgstr "Cambiare provider DDNS veramente?"
msgid "Registered IP"
-msgstr ""
+msgstr "IP Registrato"
msgid "Replaces [DOMAIN] in Update-URL"
-msgstr ""
+msgstr "Sostituisci [DOMAIN] nell'URL di aggiornamento"
msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Sostituisci [PASSWORD] nell'URL di aggiornamento (URL codificato)"
msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Sostituisci [NOME UTENTE] nell'URL di aggiornamento (URL codificato)"
msgid "Run once"
-msgstr ""
+msgstr "Esegui una volta"
msgid "Script"
msgstr ""
msgid "Show more"
-msgstr ""
+msgstr "Mostra di più"
msgid "Software update required"
-msgstr ""
+msgstr "Richiesto aggiornamento Software"
msgid "Specifying a DNS-Server is not supported"
-msgstr ""
+msgstr "Specificare un server DNS non è supportato"
msgid "Start"
-msgstr ""
+msgstr "Inizio"
msgid "Start / Stop"
-msgstr ""
+msgstr "Inizio / Stop"
msgid "Status directory"
msgstr ""
msgid "Stopped"
-msgstr ""
+msgstr "Fermato"
msgid ""
"The currently installed 'ddns-scripts' package did not support all available "
"settings."
msgstr ""
+"Il pacchetto 'ddns-scripts' attualmente installato non supporta tutte le opzioni "
+"disponibili."
msgid "The default setting of '0' will retry infinite."
-msgstr ""
+msgstr "L'opzione di default '0' riproverà all'infinito."
msgid "There is no service configured."
-msgstr ""
+msgstr "Non c'è un servizio configurato."
msgid "Timer Settings"
-msgstr ""
+msgstr "Impostazioni del Timer"
msgid "To change global settings click here"
-msgstr ""
+msgstr "Per cambiare le opzioni globali clicca qui"
msgid "To use cURL activate this option."
-msgstr ""
+msgstr "Per usare cURL attiva questa opzione."
msgid "URL"
msgstr "URL"
msgid "URL to detect"
-msgstr ""
+msgstr "URL da individuare"
msgid "Unknown error"
-msgstr ""
+msgstr "Errore sconosciuto"
msgid ""
"Update URL to be used for updating your DDNS Provider.<br />Follow "
"instructions you will find on their WEB page."
msgstr ""
+"L'URL di aggiornamento da usare per aggiornare il tuo Provider DDNS.<br />"
+"Segui le istruzioni che trovi sulla loro pagina WEB."
msgid "Update error"
-msgstr ""
+msgstr "Errore di aggiornamento"
msgid "Use HTTP Secure"
-msgstr ""
+msgstr "Usa HTTP Sicuro"
msgid "Use cURL"
-msgstr ""
+msgstr "Usa cURL"
msgid "User defined script to read systems IP-Address"
-msgstr ""
+msgstr "Script definito dall'utente per leggere l'indirizzo IP dei sistemi"
msgid "Username"
msgstr "Nome Utente"
msgid "Using specific DNS Server not supported"
-msgstr ""
+msgstr "Usare specifici Server DNS non supportato"
msgid "Verify"
-msgstr ""
+msgstr "Verifica"
msgid "Version"
-msgstr ""
+msgstr "Versione"
msgid "Version Information"
-msgstr ""
+msgstr "Informazione Versione"
msgid "Waiting for changes to be applied..."
-msgstr ""
+msgstr "Aspettando l'applicazione dei cambiamenti..."
msgid "Warning"
-msgstr ""
+msgstr "Allarme"
msgid ""
"Writes detailed messages to log file. File will be truncated automatically."
msgstr ""
+"Scrivi messaggi dettagliati sul registro. Il file sarà tagliato automaticamente."
msgid ""
"Writes log messages to syslog. Critical Errors will always be written to "
"syslog."
msgstr ""
+"Scrivi i messaggi registro al syslog. Gli Errori Critici saranno sempre scritti "
+"sul syslog."
msgid ""
"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' "
"package, if you need to specify a DNS server to detect your registered IP."
msgstr ""
+"Dovresti installare il pacchetto 'bind-host' o 'knot-host' o 'drill' o 'hostip', "
+"se hai bisogno di specificare un server DNS che identifichi il tuo IP registrato."
msgid ""
"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
"requests."
msgstr ""
+"Dovresti installare il pacchetto 'bind-host' o 'knot-host' o 'drill' per le "
+"richieste DNS."
msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
-msgstr ""
+msgstr "Dovresti installare il pacchetto 'wget' o 'curl' o 'uclient-fetch'."
msgid ""
"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
"*ssl' package."
msgstr ""
+"Dovresti installare il pacchetto 'wget' o 'curl' o 'uclient-fetch' con il "
+"pacchetto 'libustream-*ssl'."
msgid "You should install 'wget' or 'curl' package."
-msgstr ""
+msgstr "Dovresti installare il pacchetto 'wget' o 'curl'."
msgid ""
"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
msgstr ""
+"Dovresti installare il pacchetto 'wget' o 'uclient-fetch' o sostituire libcurl."
msgid "cURL is installed, but libcurl was compiled without proxy support."
-msgstr ""
+msgstr "cURL è installato, ma libcurl è compilato senza supporto proxy."
msgid "cURL without Proxy Support"
-msgstr ""
+msgstr "cURL senza Supporto Proxy"
msgid "can not detect local IP. Please select a different Source combination"
-msgstr ""
+msgstr "non individuo l'IP locale. Per favore seleziona una combinazione Sorgente diversa"
msgid "can not resolve host:"
-msgstr ""
+msgstr "non posso risolvere host:"
msgid "config error"
-msgstr ""
+msgstr "errore configurazione"
msgid "days"
-msgstr ""
+msgstr "giorni"
msgid "directory or path/file"
-msgstr ""
+msgstr "directory o percorso/file"
msgid "either url or script could be set"
-msgstr ""
+msgstr "o l'url o lo script può essere impostato"
msgid "enable here"
-msgstr ""
+msgstr "abilita qui"
msgid "file or directory not found or not 'IGNORE'"
-msgstr ""
+msgstr "file o directory non trovati o non 'IGNORE'"
msgid "help"
-msgstr ""
+msgstr "aiuto"
msgid "hours"
-msgstr ""
+msgstr "ore"
msgid "installed"
-msgstr ""
+msgstr "installato"
msgid "invalid FQDN / required - Sample"
-msgstr ""
+msgstr "FQDN invalido / richiesto - Esempio"
msgid "minimum value '0'"
-msgstr ""
+msgstr "valore minimo '0'"
msgid "minimum value '1'"
-msgstr ""
+msgstr "valore minimo '1'"
msgid "minimum value 5 minutes == 300 seconds"
-msgstr ""
+msgstr "valore minimo 5 minuti == 300 secondi"
msgid "minutes"
-msgstr ""
+msgstr "minuti"
msgid "missing / required"
-msgstr ""
+msgstr "mancante / richiesto"
msgid "must be greater or equal 'Check Interval'"
-msgstr ""
+msgstr "deve essere più grande o uguale 'Controlla Intervallo'"
msgid "must start with 'http://'"
-msgstr ""
+msgstr "deve iniziare con 'http://'"
msgid "nc (netcat) can not connect"
-msgstr ""
+msgstr "nc (netcat) non può connettersi"
msgid "never"
-msgstr ""
+msgstr "mai"
msgid "no data"
-msgstr ""
+msgstr "Niente dati"
msgid "not found or not executable - Sample: '/path/to/script.sh'"
-msgstr ""
+msgstr "non trovato o non eseguibile - Esempio: '/path/to/script.sh'"
msgid "nslookup can not resolve host"
-msgstr ""
+msgstr "nslookup non può risolvere l'host"
msgid "or"
-msgstr ""
+msgstr "o"
msgid "or higher"
-msgstr ""
+msgstr "o più alto"
msgid "please disable"
-msgstr ""
+msgstr "per favore disabilita"
msgid "please remove entry"
-msgstr ""
+msgstr "per favore rimuovi la voce"
msgid "please select 'IPv4' address version"
-msgstr ""
+msgstr "per favore seleziona versione indirizzo 'IPv4'"
msgid "please select 'IPv4' address version in"
-msgstr ""
+msgstr "per favore seleziona versione indirizzo 'IPv4' in"
msgid "please set to 'default'"
-msgstr ""
+msgstr "per favore imposta a 'default'"
msgid "proxy port missing"
-msgstr ""
+msgstr "porta proxy mancante"
msgid "required"
-msgstr ""
+msgstr "richiesto"
msgid "seconds"
-msgstr ""
+msgstr "secondi"
msgid "to run HTTPS without verification of server certificates (insecure)"
-msgstr ""
+msgstr "per eseguire HTTPS senza la verifica dei certificati del server (insicuro)"
msgid "unknown error"
-msgstr ""
+msgstr "errore sconosciuto"
msgid "unspecific error"
-msgstr ""
+msgstr "errore non specifico"
msgid "use hostname, FQDN, IPv4- or IPv6-Address"
-msgstr ""
+msgstr "usa nome host, FQDN, indirizzo IPv4 o IPv6"
diff --git a/applications/luci-app-ddns/po/sv/ddns.po b/applications/luci-app-ddns/po/sv/ddns.po
index 9373fea3a4..2e63ee1bde 100644
--- a/applications/luci-app-ddns/po/sv/ddns.po
+++ b/applications/luci-app-ddns/po/sv/ddns.po
@@ -30,12 +30,13 @@ msgstr ""
msgid ""
"Below is a list of configured DDNS configurations and their current state."
msgstr ""
+"Här nedanför finns det en lista över konfigurerade DDNS-konfigurationer och deras nuvarande skick."
msgid "Bind Network"
-msgstr ""
+msgstr "Bind samman nätverk"
msgid "Binding to a specific network not supported"
-msgstr ""
+msgstr "Att binda samman med ett specifikt nätverk stöds inte"
msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use "
diff --git a/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po b/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po
index cf74fbc77f..d68116bf7b 100644
--- a/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po
+++ b/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
"Language-Team: none\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
@@ -10,22 +10,22 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Actions"
-msgstr ""
+msgstr "Åtgärder"
msgid "Add"
-msgstr ""
+msgstr "Lägg till"
msgid "Beginning of MAC address range"
-msgstr ""
+msgstr "Början av räckvidd för MAC-adress"
msgid "Config Phone Scan"
-msgstr ""
+msgstr "Konfigurera skanning av telefon"
msgid "Configure"
-msgstr ""
+msgstr "Konfigurera"
msgid "Configure Scans"
-msgstr ""
+msgstr "Konfigurera skanningar"
msgid ""
"Configure scanning for devices on specified networks. Decreasing 'Timeout', "
@@ -40,46 +40,46 @@ msgid ""
msgstr ""
msgid "Delete"
-msgstr ""
+msgstr "Radera"
msgid "Device Scan Config"
msgstr ""
msgid "Device Type"
-msgstr ""
+msgstr "Enhetstyp"
msgid "Devices discovered for"
msgstr ""
msgid "Devices on Network"
-msgstr ""
+msgstr "Enheter på nätverket"
msgid "Edit"
-msgstr ""
+msgstr "Redigera"
msgid "Enable"
-msgstr ""
+msgstr "Aktivera"
msgid "End of MAC address range"
msgstr ""
msgid "Go to relevant configuration page"
-msgstr ""
+msgstr "Gå till relevant konfigurationssida"
msgid "IP Address"
-msgstr ""
+msgstr "IP-adress"
msgid "Interface"
-msgstr ""
+msgstr "Gränssnitt"
msgid "Invalid"
-msgstr ""
+msgstr "Ogiltig"
msgid "Link to Device"
-msgstr ""
+msgstr "Länka till enhet"
msgid "MAC Address"
-msgstr ""
+msgstr "MAC-adress"
msgid "MAC Device Info Overrides"
msgstr ""
@@ -91,13 +91,13 @@ msgid "MAC range and information used to override system and IEEE databases"
msgstr ""
msgid "Milliseconds to sleep between requests (default 100)"
-msgstr ""
+msgstr "Millisekunder att sova mellan förfrågningar (100 är standard)"
msgid "Model"
-msgstr ""
+msgstr "Modell"
msgid "Name"
-msgstr ""
+msgstr "Namn"
msgid "Network Device Scan"
msgstr ""
@@ -106,22 +106,22 @@ msgid "Network Device Scanning Configuration"
msgstr ""
msgid "Networks to scan for devices"
-msgstr ""
+msgstr "Nätverk att skanna efter enheter i"
msgid "Networks to scan for supported devices"
-msgstr ""
+msgstr "Nätverk att skanna efter enheter som stöds"
msgid "No SIP devices"
-msgstr ""
+msgstr "Inga SIP-enheter"
msgid "No devices detected"
-msgstr ""
+msgstr "Upptäckte inga enheter"
msgid "Number of times to send requests (default 1)"
-msgstr ""
+msgstr "Antalet gånger att skicka förfrågningar (1 är standard)"
msgid "OUI Owner"
-msgstr ""
+msgstr "OUI-ägare"
msgid ""
"Override the information returned by the MAC to Device Info Script (mac-to-"
@@ -129,79 +129,79 @@ msgid ""
msgstr ""
msgid "Perform Scans (this can take a few minutes)"
-msgstr ""
+msgstr "Utför skanningar (det här kan ta ett par minuter)"
msgid "Phone Information"
-msgstr ""
+msgstr "Information om telefon"
msgid "Phone Scan"
-msgstr ""
+msgstr "Skanna telefon"
msgid "Phone Scanning Configuration"
-msgstr ""
+msgstr "Konfiguration av skanning i telefon"
msgid "Phones"
-msgstr ""
+msgstr "Telefoner"
msgid "Ports"
-msgstr ""
+msgstr "Portar"
msgid "Raw"
-msgstr ""
+msgstr "Rå"
msgid "Repeat Count"
msgstr ""
msgid "Repeat Scans (this can take a few minutes)"
-msgstr ""
+msgstr "Repetera skanningar (det här kan ta några minuter)"
msgid "SIP Device Information"
-msgstr ""
+msgstr "Information om SIP-enhet"
msgid "SIP Device Scan"
msgstr ""
msgid "SIP Device Scanning Configuration"
-msgstr ""
+msgstr "Skanningskonfiguration för SIP-enhet"
msgid "SIP Devices on Network"
-msgstr ""
+msgstr "SIP-enheter på nätverk"
msgid "SIP devices discovered for"
-msgstr ""
+msgstr "Upptäckta SIP-enheter för"
msgid "Scan for devices on specified networks."
-msgstr ""
+msgstr "Skanna efter enheter i angivna nätverk."
msgid "Scan for supported SIP devices on specified networks."
-msgstr ""
+msgstr "Skannar efter SIP-enheter som stöds i angivna nätverk."
msgid "Scanning Configuration"
-msgstr ""
+msgstr "Skannar konfiguration"
msgid "Scans for devices on specified networks."
-msgstr ""
+msgstr "Skannar efter enheter i angivna nätverk."
msgid "Sleep Between Requests"
-msgstr ""
+msgstr "Sov mellan förfrågningar"
msgid "Subnet"
-msgstr ""
+msgstr "Subnät"
msgid "This section contains no values yet"
-msgstr ""
+msgstr "Den här sektionen innehåller inga värden än"
msgid "Time to wait for responses in seconds (default 10)"
-msgstr ""
+msgstr "Tid att vänta på svar i sekunder (standard 10)"
msgid "Timeout"
-msgstr ""
+msgstr "Avbrott"
msgid "Use Configuration"
-msgstr ""
+msgstr "Använd konfiguration"
msgid "Vendor"
-msgstr ""
+msgstr "Tillverkare"
msgid "check other networks"
-msgstr ""
+msgstr "kolla andra nätverk"
diff --git a/applications/luci-app-dnscrypt-proxy/Makefile b/applications/luci-app-dnscrypt-proxy/Makefile
new file mode 100644
index 0000000000..4b632b8d04
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/Makefile
@@ -0,0 +1,13 @@
+# Copyright 2017 Dirk Brenken (dev@brenken.org)
+# This is free software, licensed under the Apache License, Version 2.0
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI support for DNSCrypt-Proxy
+LUCI_DEPENDS:=+uclient-fetch +dnscrypt-proxy
+LUCI_PKGARCH:=all
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua b/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua
new file mode 100644
index 0000000000..9f6472e7de
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua
@@ -0,0 +1,38 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+module("luci.controller.dnscrypt-proxy", package.seeall)
+
+local util = require("luci.util")
+local i18n = require("luci.i18n")
+local templ = require("luci.template")
+
+function index()
+ if not nixio.fs.access("/etc/config/dnscrypt-proxy") then
+ nixio.fs.writefile("/etc/config/dnscrypt-proxy", "")
+ end
+ entry({"admin", "services", "dnscrypt-proxy"}, firstchild(), _("DNSCrypt-Proxy"), 60).dependent = false
+ entry({"admin", "services", "dnscrypt-proxy", "tab_from_cbi"}, cbi("dnscrypt-proxy/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true
+ entry({"admin", "services", "dnscrypt-proxy", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true
+ entry({"admin", "services", "dnscrypt-proxy", "advanced"}, firstchild(), _("Advanced"), 100)
+ entry({"admin", "services", "dnscrypt-proxy", "advanced", "configuration"}, cbi("dnscrypt-proxy/configuration_tab"), _("Edit DNSCrypt-Proxy Configuration"), 110).leaf = true
+ entry({"admin", "services", "dnscrypt-proxy", "advanced", "cfg_dnsmasq"}, cbi("dnscrypt-proxy/cfg_dnsmasq_tab"), _("Edit Dnsmasq Configuration"), 120).leaf = true
+ entry({"admin", "services", "dnscrypt-proxy", "advanced", "cfg_resolvcrypt"}, cbi("dnscrypt-proxy/cfg_resolvcrypt_tab"), _("Edit Resolvcrypt Configuration"), 130).leaf = true
+ entry({"admin", "services", "dnscrypt-proxy", "advanced", "view_reslist"}, call("view_reslist"), _("View Resolver List"), 140).leaf = true
+end
+
+function view_reslist()
+ local reslist = util.trim(util.exec("cat /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv"))
+ templ.render("dnscrypt-proxy/view_reslist", {title = i18n.translate("DNSCrypt-Proxy Resolver List"), content = reslist})
+end
+
+function logread()
+ local logfile
+
+ if nixio.fs.access("/var/log/messages") then
+ logfile = util.trim(util.exec("cat /var/log/messages | grep 'dnscrypt-proxy'"))
+ else
+ logfile = util.trim(util.exec("logread -e 'dnscrypt-proxy'"))
+ end
+ templ.render("dnscrypt-proxy/logread", {title = i18n.translate("DNSCrypt-Proxy Logfile"), content = logfile})
+end
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua
new file mode 100644
index 0000000000..6e75ac9f97
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua
@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local nxfs = require("nixio.fs")
+local util = require("luci.util")
+local uci_input = "/etc/config/dhcp"
+
+if not nxfs.access(uci_input) then
+ m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+ m.reset = false
+ m.submit = false
+ return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("dnscrypt-proxy/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+ translate("This form allows you to modify the content of the main Dnsmasq configuration file (/etc/config/dhcp)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+ return nxfs.readfile(uci_input) or ""
+end
+
+function f.write(self, section, data)
+ return nxfs.writefile(uci_input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+ return true
+end
+
+return m
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua
new file mode 100644
index 0000000000..f172b15f81
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua
@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local nxfs = require("nixio.fs")
+local util = require("luci.util")
+local res_input = "/etc/resolv-crypt.conf"
+
+if not nxfs.access(res_input) then
+ m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+ m.reset = false
+ m.submit = false
+ return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("dnscrypt-proxy/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+ translate("This form allows you to modify the content of the resolv-crypt configuration file (/etc/resolv-crypt.conf)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+ return nxfs.readfile(res_input) or ""
+end
+
+function f.write(self, section, data)
+ return nxfs.writefile(res_input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+ return true
+end
+
+return m
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/configuration_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/configuration_tab.lua
new file mode 100644
index 0000000000..f1842731d5
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/configuration_tab.lua
@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local nxfs = require("nixio.fs")
+local util = require("luci.util")
+local uci_input = "/etc/config/dnscrypt-proxy"
+
+if not nxfs.access(uci_input) then
+ m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+ m.reset = false
+ m.submit = false
+ return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("dnscrypt-proxy/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+ translate("This form allows you to modify the content of the main DNSCrypt-Proxy configuration file (/etc/config/dnscrypt-proxy)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+ return nxfs.readfile(uci_input) or ""
+end
+
+function f.write(self, section, data)
+ return nxfs.writefile(uci_input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+ return true
+end
+
+return m
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua
new file mode 100644
index 0000000000..368c6673ad
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua
@@ -0,0 +1,245 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
+local util = require("luci.util")
+local date = require("luci.http.protocol.date")
+local res_input = "/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv"
+local dump = util.ubus("network.interface", "dump", {})
+local plug_cnt = tonumber(luci.sys.exec("env -i /usr/sbin/dnscrypt-proxy --version | grep 'Support for plugins: present' | wc -l"))
+local res_list = {}
+local url = "https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-resolvers.csv"
+
+if not fs.access(res_input) then
+ if not fs.access("/lib/libustream-ssl.so") then
+ m = SimpleForm("error", nil, translate("No default resolver list and no SSL support available.<br />")
+ .. translate("Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv' to use this package."))
+ m.submit = false
+ m.reset = false
+ return m
+ else
+ luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1")
+ end
+end
+
+if not uci:get_first("dnscrypt-proxy", "global") then
+ uci:add("dnscrypt-proxy", "global")
+ uci:save("dnscrypt-proxy")
+ uci:commit("dnscrypt-proxy")
+end
+
+for line in io.lines(res_input) do
+ local name,
+ location,
+ dnssec,
+ nolog = line:match("^([^,]+),.-,\".-\",\"*(.-)\"*,.-,[0-9],\"*([yesno]+)\"*,\"*([yesno]+)\"*,.*")
+ if name ~= "" and name ~= "Name" then
+ if location == "" then
+ location = "-"
+ end
+ if dnssec == "" then
+ dnssec = "-"
+ end
+ if nolog == "" then
+ nolog = "-"
+ end
+ res_list[#res_list + 1] = { name = name, location = location, dnssec = dnssec, nolog = nolog }
+ end
+end
+
+m = Map("dnscrypt-proxy", translate("DNSCrypt-Proxy"),
+ translate("Configuration of the DNSCrypt-Proxy package. ")
+ .. translatef("For further information "
+ .. "<a href=\"%s\" target=\"_blank\">"
+ .. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt"))
+m:chain("dhcp")
+
+function m.on_after_commit(self)
+ function d1.validate(self, value, s1)
+ if value == "1" then
+ uci:commit("dnscrypt-proxy")
+ uci:set("dhcp", s1, "noresolv", 1)
+ if not fs.access("/etc/resolv-crypt.conf") or nixio.fs.stat("/etc/resolv-crypt.conf").size == 0 then
+ uci:set("dhcp", s1, "resolvfile", "/tmp/resolv.conf.auto")
+ else
+ uci:set("dhcp", s1, "resolvfile", "/etc/resolv-crypt.conf")
+ end
+ local server_list = {}
+ local cnt = 1
+ uci:foreach("dnscrypt-proxy", "dnscrypt-proxy", function(s)
+ server_list[cnt] = s['address'] .. "#" .. s['port']
+ cnt = cnt + 1
+ end)
+ server_list[cnt] = "/pool.ntp.org/8.8.8.8"
+ uci:set_list("dhcp", s1, "server", server_list)
+ if cnt > 2 then
+ uci:set("dhcp", s1, "allservers", 1)
+ else
+ uci:set("dhcp", s1, "allservers", 0)
+ end
+ uci:save("dhcp")
+ uci:commit("dhcp")
+ end
+ return value
+ end
+ luci.sys.call("env -i /etc/init.d/dnscrypt-proxy restart >/dev/null 2>&1")
+ luci.sys.call("env -i /etc/init.d/dnsmasq restart >/dev/null 2>&1")
+end
+
+s = m:section(TypedSection, "global", translate("General Options"))
+s.anonymous = true
+
+-- Main dnscrypt-proxy resource list
+
+o1 = s:option(DummyValue, "", translate("Default Resolver List"))
+o1.template = "dnscrypt-proxy/res_options"
+o1.value = res_input
+
+o2 = s:option(DummyValue, "", translate("File Date"))
+o2.template = "dnscrypt-proxy/res_options"
+o2.value = date.to_http(nixio.fs.stat(res_input).mtime)
+
+o3 = s:option(DummyValue, "", translate("File Checksum"))
+o3.template = "dnscrypt-proxy/res_options"
+o3.value = luci.sys.exec("sha256sum " .. res_input .. " | awk '{print $1}'")
+
+if fs.access("/lib/libustream-ssl.so") then
+ btn1 = s:option(Button, "", translate("Refresh Resolver List"),
+ translate("Download the current resolver list from 'download.dnscrypt.org'."))
+ btn1.inputtitle = translate("Refresh List")
+ btn1.inputstyle = "apply"
+ btn1.disabled = false
+ function btn1.write()
+ luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1")
+ luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnscrypt-proxy"))
+ end
+else
+ btn1 = s:option(Button, "", translate("Refresh Resolver List"),
+ translate("No SSL support available.<br />")
+ .. translate("Please install a 'libustream-ssl' library to download the current resolver list from 'download.dnscrypt.org'."))
+ btn1.inputtitle = translate("-------")
+ btn1.inputstyle = "button"
+ btn1.disabled = true
+end
+
+if not fs.access("/etc/resolv-crypt.conf") or nixio.fs.stat("/etc/resolv-crypt.conf").size == 0 then
+ btn2 = s:option(Button, "", translate("Create Custom Config File"),
+ translate("Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS upstream timeouts with multiple DNSCrypt instances.<br />")
+ .. translatef("For further information "
+ .. "<a href=\"%s\" target=\"_blank\">"
+ .. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt"))
+ btn2.inputtitle = translate("Create Config File")
+ btn2.inputstyle = "apply"
+ btn2.disabled = false
+ function btn2.write()
+ luci.sys.call("env -i echo 'options timeout:1' > '/etc/resolv-crypt.conf'")
+ luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnscrypt-proxy"))
+ end
+else
+ btn2 = s:option(Button, "", translate("Create Custom Config File"),
+ translate("The config file '/etc/resolv-crypt.conf' already exist.<br />")
+ .. translate("Please edit the file manually in the 'Advanced' section."))
+ btn2.inputtitle = translate("-------")
+ btn2.inputstyle = "button"
+ btn2.disabled = true
+end
+
+-- Trigger settings
+
+t = s:option(ListValue, "procd_trigger", translate("Startup Trigger"),
+ translate("By default the DNSCrypt-Proxy startup will be triggered by ifup events of 'All' available network interfaces.<br />")
+ .. translate("To restrict the trigger, select only the relevant network interface. Usually the 'wan' interface should work for most users."))
+t:value("", "All")
+if dump then
+ local i, v
+ for i, v in ipairs(dump.interface) do
+ if v.interface ~= "loopback" then
+ t:value(v.interface)
+ end
+ end
+end
+t.default = procd_trigger or "All"
+t.rmempty = true
+
+-- Mandatory options per instance
+
+s = m:section(TypedSection, "dnscrypt-proxy", translate("Instance Options"))
+s.anonymous = true
+s.addremove = true
+
+i1 = s:option(Value, "address", translate("IP Address"),
+ translate("The local IPv4 or IPv6 address. The latter one should be specified within brackets, e.g. '[::1]'."))
+i1.default = address or "127.0.0.1"
+i1.rmempty = false
+
+i2 = s:option(Value, "port", translate("Port"),
+ translate("The listening port for DNS queries."))
+i2.datatype = "port"
+i2.default = port
+i2.rmempty = false
+
+i3 = s:option(ListValue, "resolver", translate("Resolver (LOC/SEC/NOLOG)"),
+ translate("Name of the remote DNS service for resolving queries incl. Location, DNSSEC- and NOLOG-Flag."))
+i3.datatype = "hostname"
+i3.widget = "select"
+local i, v
+for i, v in ipairs(res_list) do
+ if v.name then
+ i3:value(v.name, v.name .. " (" .. v.location .. "/" .. v.dnssec .. "/" .. v.nolog .. ")")
+ end
+end
+i3.default = resolver
+i3.rmempty = false
+
+-- Extra options per instance
+
+e1 = s:option(Value, "resolvers_list", translate("Alternate Resolver List"),
+ translate("Specify a non-default Resolver List."))
+e1.datatype = "file"
+e1.optional = true
+
+e2 = s:option(Value, "ephemeral_keys", translate("Ephemeral Keys"),
+ translate("Improve privacy by using an ephemeral public key for each query. ")
+ .. translate("This option requires extra CPU cycles and is useless with most DNSCrypt server."))
+e2.datatype = "bool"
+e2.value = 1
+e2.optional = true
+
+if plug_cnt > 0 then
+ e3 = s:option(DynamicList, "blacklist", translate("Blacklist"),
+ translate("Local blacklists allow you to block abuse sites by domains or ip addresses. ")
+ .. translate("The value for this property is the blocklist type and path to the file, e.g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."))
+ e3.optional = true
+
+ e4 = s:option(Value, "block_ipv6", translate("Block IPv6"),
+ translate("Disable IPv6 to speed up DNSCrypt-Proxy."))
+ e4.datatype = "bool"
+ e4.value = 1
+ e4.optional = true
+
+ e5 = s:option(Value, "local_cache", translate("Local Cache"),
+ translate("Enable Caching to speed up DNSCcrypt-Proxy."))
+ e5.datatype = "bool"
+ e5.value = 1
+ e5.optional = true
+
+ e6 = s:option(Value, "query_log_file", translate("DNS Query Logfile"),
+ translate("Log the received DNS queries to a file, so you can watch in real-time what is happening on the network."))
+ e6.optional = true
+end
+
+-- Dnsmasq options
+
+m1 = Map("dhcp")
+
+s1 = m1:section(TypedSection, "dnsmasq", translate("Dnsmasq Options"))
+s1.anonymous = true
+
+d1 = s1:option(Flag, "", translate("Transfer Options To Dnsmasq"),
+ translate("Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />")
+ .. translate("Please note: This may change the values for 'noresolv', 'resolvfile', 'allservers' and the list 'server' settings."))
+d1.default = d1.enabled
+d1.rmempty = false
+
+return m, m1
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/config_css.htm b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/config_css.htm
new file mode 100644
index 0000000000..2233a15e31
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/config_css.htm
@@ -0,0 +1,13 @@
+<style type="text/css">
+ textarea
+ {
+ border: 1px solid #cccccc;
+ padding: 5px;
+ font-size: 12px;
+ font-family: monospace;
+ resize: none;
+ white-space: pre;
+ overflow-wrap: normal;
+ overflow-x: scroll;
+ }
+</style>
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/logread.htm b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/logread.htm
new file mode 100644
index 0000000000..5c5ac6f81f
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/logread.htm
@@ -0,0 +1,15 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+ <fieldset class="cbi-section">
+ <div class="cbi-section-descr"><%:This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related messages only.%></div>
+ <textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+ </fieldset>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/res_options.htm b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/res_options.htm
new file mode 100644
index 0000000000..04dc37bc9d
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/res_options.htm
@@ -0,0 +1,10 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+cbi/valueheader%>
+
+<input name="reslist" id="reslist" type="text" class="cbi-input-text" style="background:transparent;border:none;box-shadow:none;color:#0069d6;width:500px" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
+
+<%+cbi/valuefooter%>
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/view_reslist.htm b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/view_reslist.htm
new file mode 100644
index 0000000000..76a2300932
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/view_reslist.htm
@@ -0,0 +1,15 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+ <fieldset class="cbi-section">
+ <div class="cbi-section-descr"><%:This form shows the content of the current DNSCrypt Resolver List.%></div>
+ <textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+ </fieldset>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po b/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po
new file mode 100644
index 0000000000..2cd01c019e
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po
@@ -0,0 +1,279 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.4\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid "-------"
+msgstr "(利用不可)"
+
+msgid "Advanced"
+msgstr "詳細"
+
+msgid "Alternate Resolver List"
+msgstr "代替 リゾルバ リスト"
+
+msgid ""
+"Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />"
+msgstr "Dnsmasq の構成に、DNSCrypt-Proxy を指定する設定を適用します。<br />"
+
+msgid "Blacklist"
+msgstr "ブラックリスト"
+
+msgid "Block IPv6"
+msgstr "IPv6 のブロック"
+
+msgid ""
+"By default the DNSCrypt-Proxy startup will be triggered by ifup events of "
+"'All' available network interfaces.<br />"
+msgstr ""
+"デフォルトでは、 DNSCrypt-Proxy は利用可能な全ネットワーク インターフェース"
+"の ifup イベントによりトリガされ起動します。<br />"
+
+msgid "Configuration of the DNSCrypt-Proxy package."
+msgstr "DNSCrypt-Proxy パッケージの設定です。"
+
+msgid ""
+"Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS "
+"upstream timeouts with multiple DNSCrypt instances.<br />"
+msgstr ""
+"複数の DNSCrypt インスタンスで DNS アップストリーム タイムアウトの設定値を共"
+"用するため、 'options timeout:1' を含めた '/etc/resolv-crypt.conf' を作成しま"
+"す。<br />"
+
+msgid "Create Config File"
+msgstr "設定ファイルの作成"
+
+msgid "Create Custom Config File"
+msgstr "カスタム設定ファイルの作成"
+
+msgid "DNS Query Logfile"
+msgstr "DNS クエリ ログファイル"
+
+msgid "DNSCrypt-Proxy"
+msgstr "DNSCrypt-Proxy"
+
+msgid "DNSCrypt-Proxy Logfile"
+msgstr "DNSCrypt-Proxy ログファイル"
+
+msgid "DNSCrypt-Proxy Resolver List"
+msgstr "DNSCrypt-Proxy リゾルバ リスト"
+
+msgid "Default Resolver List"
+msgstr "デフォルト リゾルバ リスト"
+
+msgid "Disable IPv6 to speed up DNSCrypt-Proxy."
+msgstr "DNSCrypt-Proxy の高速化のため、IPv6 を無効化します。"
+
+msgid "Dnsmasq Options"
+msgstr "Dnsmasq オプション"
+
+msgid "Download the current resolver list from 'download.dnscrypt.org'."
+msgstr ""
+"現在のリゾルバ リストを 'download.dnscrypt.org' からダウンロードします。"
+
+msgid "Edit DNSCrypt-Proxy Configuration"
+msgstr "DNSCrypt-Proxy 設定の編集"
+
+msgid "Edit Dnsmasq Configuration"
+msgstr "Dnsmasq 設定の編集"
+
+msgid "Edit Resolvcrypt Configuration"
+msgstr "Resolvcrypt 設定の編集"
+
+msgid "Enable Caching to speed up DNSCcrypt-Proxy."
+msgstr "DNSCrypt-Proxy の高速化のため、キャッシュ機能を有効化します。"
+
+msgid "Ephemeral Keys"
+msgstr "一時的なキー"
+
+msgid "File Checksum"
+msgstr "ファイル チェックサム"
+
+msgid "File Date"
+msgstr "ファイル日付"
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see the wiki "
+"online</a>"
+msgstr ""
+"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン Wiki</a> を確認して"
+"ください。"
+
+msgid "General Options"
+msgstr "全般オプション"
+
+msgid "IP Address"
+msgstr "IP アドレス"
+
+msgid "Improve privacy by using an ephemeral public key for each query."
+msgstr ""
+"クエリ毎に一時的な公開鍵を使用することにより、プライバシーを向上します。"
+
+msgid "Input file not found, please check your configuration."
+msgstr "入力ファイルが見つかりません。設定を確認してください。"
+
+msgid "Instance Options"
+msgstr "インスタンス オプション"
+
+msgid "Local Cache"
+msgstr "ローカル キャッシュ"
+
+msgid ""
+"Local blacklists allow you to block abuse sites by domains or ip addresses."
+msgstr ""
+"ローカル ブラックリストは、不正なサイトをドメイン名または IP アドレスによって"
+"ブロックすることが可能です。"
+
+msgid ""
+"Log the received DNS queries to a file, so you can watch in real-time what "
+"is happening on the network."
+msgstr ""
+"受信した DNS クエリをファイルに記録します。これにより、ネットワークで何が起き"
+"ているかをリアルタイムに把握することが可能です。"
+
+msgid ""
+"Name of the remote DNS service for resolving queries incl. Location, DNSSEC- "
+"and NOLOG-Flag."
+msgstr ""
+"クエリの名前解決を行う、ロケーション, DNSSECの有無, NOLOG フラグを含めたリ"
+"モート DNS サービスの名前です。"
+
+msgid "No SSL support available.<br />"
+msgstr "利用可能な SSL サポートがありません。<br />"
+
+msgid "No default resolver list and no SSL support available.<br />"
+msgstr ""
+"デフォルトのリゾルバ リストと、利用可能な SSL サポートがありません。<br />"
+
+msgid "Overview"
+msgstr "概要"
+
+msgid "Please edit the file manually in the 'Advanced' section."
+msgstr "'詳細' タブで手動でファイルを編集してください。"
+
+msgid ""
+"Please install a 'libustream-ssl' library to download the current resolver "
+"list from 'download.dnscrypt.org'."
+msgstr ""
+"現在のリゾルバ リストを 'download.dnscrypt.org' からダウンロードするために、 "
+"'libustream-ssl' ライブラリをインストールしてください。"
+
+msgid ""
+"Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-"
+"resolvers.csv' to use this package."
+msgstr ""
+"このパッケージを利用するには、リゾルバ リストを '/usr/share/dnscrypt-proxy/"
+"dnscrypt-resolvers.csv' にインストールしてください。"
+
+msgid ""
+"Please note: This may change the values for 'noresolv', 'resolvfile', "
+"'allservers' and the list 'server' settings."
+msgstr ""
+"注: これは、 'noresolv' および 'resolvfile', 'allservers', 'list server' の設"
+"定値を変更する場合があります。"
+
+msgid "Port"
+msgstr "ポート"
+
+msgid "Refresh List"
+msgstr "リストのリフレッシュ"
+
+msgid "Refresh Resolver List"
+msgstr "リゾルバ リストのリフレッシュ"
+
+msgid "Resolver (LOC/SEC/NOLOG)"
+msgstr "リゾルバ(LOC/SEC/NOLOG)"
+
+msgid "Save"
+msgstr "保存"
+
+msgid "Specify a non-default Resolver List."
+msgstr "デフォルトとは異なるリゾルバ リストを設定します。"
+
+msgid "Startup Trigger"
+msgstr "スタートアップ トリガ"
+
+msgid "The config file '/etc/resolv-crypt.conf' already exist.<br />"
+msgstr "設定ファイル '/etc/resolv-crypt.conf' は既に存在しています。<br />"
+
+msgid "The listening port for DNS queries."
+msgstr "DNS クエリを待ち受けるポートです。"
+
+msgid ""
+"The local IPv4 or IPv6 address. The latter one should be specified within "
+"brackets, e.g. '[::1]'."
+msgstr ""
+"ローカルの IPv4 または IPv6 アドレスです。 IPv6 アドレスの場合、ブラケット "
+"\"[ ]\" を含めて記述される必要があります(例: '[::1]')。"
+
+msgid ""
+"The value for this property is the blocklist type and path to the file, e."
+"g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."
+msgstr ""
+"このプロパティの値は、ブロックリストのタイプ及びファイルへのパスの組み合わせ"
+"です。(例: 'domains:/path/to/domainlist.txt' または 'ips:/path/to/iplist."
+"txt')"
+
+msgid ""
+"This form allows you to modify the content of the main DNSCrypt-Proxy "
+"configuration file (/etc/config/dnscrypt-proxy)."
+msgstr ""
+"このフォームでは、メインの DNSCrypt-Proxy 設定ファイル (/etc/config/dnscrypt-"
+"proxy) の内容を変更することができます。"
+
+msgid ""
+"This form allows you to modify the content of the main Dnsmasq configuration "
+"file (/etc/config/dhcp)."
+msgstr ""
+"このフォームでは、メインの Dnsmasq 設定ファイル (/etc/config/dhcp) の内容を変"
+"更することができます。"
+
+msgid ""
+"This form allows you to modify the content of the resolv-crypt configuration "
+"file (/etc/resolv-crypt.conf)."
+msgstr ""
+"このフォームでは、 resolv-crypt 設定ファイル(/etc/resolv-crypt.conf)の内容"
+"を変更することができます。"
+
+msgid "This form shows the content of the current DNSCrypt Resolver List."
+msgstr ""
+"このフォームには、現在の DNSCrypt リゾルバ リストの内容が表示されます。"
+
+msgid ""
+"This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related "
+"messages only."
+msgstr ""
+"このフォームには、システムログ内の DNSCrypt-Proxy に関連するメッセージのみが"
+"表示されます。"
+
+msgid ""
+"This option requires extra CPU cycles and is useless with most DNSCrypt "
+"server."
+msgstr ""
+"このオプションは、通常よりも CPU リソースを多く使用するほか、ほとんどの "
+"DNSCrypt サーバーでは不要なものです。"
+
+msgid ""
+"To restrict the trigger, select only the relevant network interface. Usually "
+"the 'wan' interface should work for most users."
+msgstr ""
+"トリガを限定するには、適切なインターフェースを選択してください。通常、 'wan' "
+"インターフェースがほとんどのユーザーに適しています。"
+
+msgid "Transfer Options To Dnsmasq"
+msgstr "Dnsmasq の転送オプション"
+
+msgid "View Logfile"
+msgstr "ログファイルの確認"
+
+msgid "View Resolver List"
+msgstr "リゾルバ リストの確認"
diff --git a/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot b/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot
new file mode 100644
index 0000000000..59bded87b8
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot
@@ -0,0 +1,228 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "-------"
+msgstr ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Alternate Resolver List"
+msgstr ""
+
+msgid ""
+"Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />"
+msgstr ""
+
+msgid "Blacklist"
+msgstr ""
+
+msgid "Block IPv6"
+msgstr ""
+
+msgid ""
+"By default the DNSCrypt-Proxy startup will be triggered by ifup events of "
+"'All' available network interfaces.<br />"
+msgstr ""
+
+msgid "Configuration of the DNSCrypt-Proxy package."
+msgstr ""
+
+msgid ""
+"Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS "
+"upstream timeouts with multiple DNSCrypt instances.<br />"
+msgstr ""
+
+msgid "Create Config File"
+msgstr ""
+
+msgid "Create Custom Config File"
+msgstr ""
+
+msgid "DNS Query Logfile"
+msgstr ""
+
+msgid "DNSCrypt-Proxy"
+msgstr ""
+
+msgid "DNSCrypt-Proxy Logfile"
+msgstr ""
+
+msgid "DNSCrypt-Proxy Resolver List"
+msgstr ""
+
+msgid "Default Resolver List"
+msgstr ""
+
+msgid "Disable IPv6 to speed up DNSCrypt-Proxy."
+msgstr ""
+
+msgid "Dnsmasq Options"
+msgstr ""
+
+msgid "Download the current resolver list from 'download.dnscrypt.org'."
+msgstr ""
+
+msgid "Edit DNSCrypt-Proxy Configuration"
+msgstr ""
+
+msgid "Edit Dnsmasq Configuration"
+msgstr ""
+
+msgid "Edit Resolvcrypt Configuration"
+msgstr ""
+
+msgid "Enable Caching to speed up DNSCcrypt-Proxy."
+msgstr ""
+
+msgid "Ephemeral Keys"
+msgstr ""
+
+msgid "File Checksum"
+msgstr ""
+
+msgid "File Date"
+msgstr ""
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see the wiki "
+"online</a>"
+msgstr ""
+
+msgid "General Options"
+msgstr ""
+
+msgid "IP Address"
+msgstr ""
+
+msgid "Improve privacy by using an ephemeral public key for each query."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr ""
+
+msgid "Instance Options"
+msgstr ""
+
+msgid "Local Cache"
+msgstr ""
+
+msgid ""
+"Local blacklists allow you to block abuse sites by domains or ip addresses."
+msgstr ""
+
+msgid ""
+"Log the received DNS queries to a file, so you can watch in real-time what "
+"is happening on the network."
+msgstr ""
+
+msgid ""
+"Name of the remote DNS service for resolving queries incl. Location, DNSSEC- "
+"and NOLOG-Flag."
+msgstr ""
+
+msgid "No SSL support available.<br />"
+msgstr ""
+
+msgid "No default resolver list and no SSL support available.<br />"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Please edit the file manually in the 'Advanced' section."
+msgstr ""
+
+msgid ""
+"Please install a 'libustream-ssl' library to download the current resolver "
+"list from 'download.dnscrypt.org'."
+msgstr ""
+
+msgid ""
+"Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-"
+"resolvers.csv' to use this package."
+msgstr ""
+
+msgid ""
+"Please note: This may change the values for 'noresolv', 'resolvfile', "
+"'allservers' and the list 'server' settings."
+msgstr ""
+
+msgid "Port"
+msgstr ""
+
+msgid "Refresh List"
+msgstr ""
+
+msgid "Refresh Resolver List"
+msgstr ""
+
+msgid "Resolver (LOC/SEC/NOLOG)"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Specify a non-default Resolver List."
+msgstr ""
+
+msgid "Startup Trigger"
+msgstr ""
+
+msgid "The config file '/etc/resolv-crypt.conf' already exist.<br />"
+msgstr ""
+
+msgid "The listening port for DNS queries."
+msgstr ""
+
+msgid ""
+"The local IPv4 or IPv6 address. The latter one should be specified within "
+"brackets, e.g. '[::1]'."
+msgstr ""
+
+msgid ""
+"The value for this property is the blocklist type and path to the file, e."
+"g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main DNSCrypt-Proxy "
+"configuration file (/etc/config/dnscrypt-proxy)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main Dnsmasq configuration "
+"file (/etc/config/dhcp)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the resolv-crypt configuration "
+"file (/etc/resolv-crypt.conf)."
+msgstr ""
+
+msgid "This form shows the content of the current DNSCrypt Resolver List."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related "
+"messages only."
+msgstr ""
+
+msgid ""
+"This option requires extra CPU cycles and is useless with most DNSCrypt "
+"server."
+msgstr ""
+
+msgid ""
+"To restrict the trigger, select only the relevant network interface. Usually "
+"the 'wan' interface should work for most users."
+msgstr ""
+
+msgid "Transfer Options To Dnsmasq"
+msgstr ""
+
+msgid "View Logfile"
+msgstr ""
+
+msgid "View Resolver List"
+msgstr ""
diff --git a/applications/luci-app-dnscrypt-proxy/root/etc/uci-defaults/60_luci-dnscrypt-proxy b/applications/luci-app-dnscrypt-proxy/root/etc/uci-defaults/60_luci-dnscrypt-proxy
new file mode 100755
index 0000000000..ec4da17c9a
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/root/etc/uci-defaults/60_luci-dnscrypt-proxy
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+ delete ucitrack.@dnscrypt-proxy[-1]
+ add ucitrack dnscrypt-proxy
+ set ucitrack.@dnscrypt-proxy[-1].init=dnscrypt-proxy
+ commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua
index 2b3cee3283..21a1b2796d 100644
--- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua
+++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua
@@ -5,7 +5,7 @@ local fs = require "nixio.fs"
local f = SimpleForm("firewall",
translate("Firewall - Custom Rules"),
- translate("Custom rules allow you to execute arbritary iptables commands \
+ translate("Custom rules allow you to execute arbitrary iptables commands \
which are not otherwise covered by the firewall framework. \
The commands are executed after each firewall restart, right after \
the default ruleset has been loaded."))
diff --git a/applications/luci-app-firewall/po/ca/firewall.po b/applications/luci-app-firewall/po/ca/firewall.po
index 913fb759e4..3abdc892d8 100644
--- a/applications/luci-app-firewall/po/ca/firewall.po
+++ b/applications/luci-app-firewall/po/ca/firewall.po
@@ -70,7 +70,7 @@ msgid "Custom Rules"
msgstr "Regles personalitzades"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/cs/firewall.po b/applications/luci-app-firewall/po/cs/firewall.po
index 1ab1360f57..c796873ded 100644
--- a/applications/luci-app-firewall/po/cs/firewall.po
+++ b/applications/luci-app-firewall/po/cs/firewall.po
@@ -66,7 +66,7 @@ msgid "Custom Rules"
msgstr "Vlastní pravidla"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/de/firewall.po b/applications/luci-app-firewall/po/de/firewall.po
index 448f951fa0..00e259ca70 100644
--- a/applications/luci-app-firewall/po/de/firewall.po
+++ b/applications/luci-app-firewall/po/de/firewall.po
@@ -68,7 +68,7 @@ msgid "Custom Rules"
msgstr "Benutzerdefinierte Regeln"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/el/firewall.po b/applications/luci-app-firewall/po/el/firewall.po
index 2229bf09f6..6ebc2286ab 100644
--- a/applications/luci-app-firewall/po/el/firewall.po
+++ b/applications/luci-app-firewall/po/el/firewall.po
@@ -68,7 +68,7 @@ msgid "Custom Rules"
msgstr "Προσαρμοσμένοι Κανόνες"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/en/firewall.po b/applications/luci-app-firewall/po/en/firewall.po
index 9dc277dbed..f7658a5b0c 100644
--- a/applications/luci-app-firewall/po/en/firewall.po
+++ b/applications/luci-app-firewall/po/en/firewall.po
@@ -66,7 +66,7 @@ msgid "Custom Rules"
msgstr ""
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/es/firewall.po b/applications/luci-app-firewall/po/es/firewall.po
index 670b4db6f6..8550d0567a 100644
--- a/applications/luci-app-firewall/po/es/firewall.po
+++ b/applications/luci-app-firewall/po/es/firewall.po
@@ -69,7 +69,7 @@ msgid "Custom Rules"
msgstr "Reglas propias"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/fr/firewall.po b/applications/luci-app-firewall/po/fr/firewall.po
index cdff282964..7be4d8f4f4 100644
--- a/applications/luci-app-firewall/po/fr/firewall.po
+++ b/applications/luci-app-firewall/po/fr/firewall.po
@@ -68,7 +68,7 @@ msgid "Custom Rules"
msgstr "Régles spécifiques"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/he/firewall.po b/applications/luci-app-firewall/po/he/firewall.po
index ce0ad04050..e269e58cb2 100644
--- a/applications/luci-app-firewall/po/he/firewall.po
+++ b/applications/luci-app-firewall/po/he/firewall.po
@@ -63,7 +63,7 @@ msgid "Custom Rules"
msgstr ""
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/hu/firewall.po b/applications/luci-app-firewall/po/hu/firewall.po
index c201e3da88..2c3ae02f61 100644
--- a/applications/luci-app-firewall/po/hu/firewall.po
+++ b/applications/luci-app-firewall/po/hu/firewall.po
@@ -66,7 +66,7 @@ msgid "Custom Rules"
msgstr "Egyéni szabályok"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/it/firewall.po b/applications/luci-app-firewall/po/it/firewall.po
index 88535243be..a5c4a1ee08 100644
--- a/applications/luci-app-firewall/po/it/firewall.po
+++ b/applications/luci-app-firewall/po/it/firewall.po
@@ -3,8 +3,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-03-30 17:00+0200\n"
-"PO-Revision-Date: 2012-04-19 23:05+0200\n"
-"Last-Translator: claudyus <claudyus84@gmail.com>\n"
+"PO-Revision-Date: 2017-09-02 23:05+0200\n"
+"Last-Translator: bubu83 <bubu83@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
@@ -47,35 +47,35 @@ msgid "Add"
msgstr "Aggiungi"
msgid "Add and edit..."
-msgstr "Aggiungi e edita..."
+msgstr "Aggiungi e modifica..."
msgid "Advanced Settings"
msgstr "Opzioni Avanzate"
msgid "Allow forward from <em>source zones</em>:"
-msgstr "Permetti routing da <em>zone di origini</em>:"
+msgstr "Permetti routing da <em>zone di origine</em>:"
msgid "Allow forward to <em>destination zones</em>:"
-msgstr "Permetti rountin a <em>zone di destinazione</em>:"
+msgstr "Permetti rounting a <em>zone di destinazione</em>:"
msgid "Any"
msgstr "Qualsiasi"
msgid "Covered networks"
-msgstr ""
+msgstr "Reti coperte"
msgid "Custom Rules"
msgstr "Regole Personalizzate"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
"Le regole personalizzate ti permettorno di eseguire comandi iptables "
-"arbitrari che non solo altrimenti coperti dall'applicazione firewall. I "
+"arbitrari che non sono altrimenti coperti dall'applicazione firewall. I "
"comandi sono eseguiti dopo ogni riavvio del firewall, giusto dopo le altre "
-"regole che son state caricate."
+"regole che sono state caricate."
msgid "Destination IP address"
msgstr "Indirizzo IP destinazione"
@@ -90,22 +90,22 @@ msgid "Destination zone"
msgstr "Zona di destinazione"
msgid "Do not rewrite"
-msgstr ""
+msgstr "Non riscrivere"
msgid "Drop invalid packets"
-msgstr "Attiva"
+msgstr "Scarta pacchetti invalidi"
msgid "Enable"
-msgstr ""
+msgstr "Attiva"
msgid "Enable NAT Loopback"
-msgstr ""
+msgstr "Attiva NAT Loopback"
msgid "Enable SYN-flood protection"
-msgstr ""
+msgstr "Attiva protezione SYN-flood"
msgid "Enable logging on this zone"
-msgstr ""
+msgstr "Attiva registro su questa zona"
msgid "External IP address"
msgstr "Indirizzo IP Esterno"
@@ -135,25 +135,25 @@ msgid "Firewall - Zone Settings"
msgstr "Firewall - Opzioni delle Zone"
msgid "Force connection tracking"
-msgstr ""
+msgstr "Forza tracciamento connessione"
msgid "Forward"
msgstr "Inoltra"
msgid "Forward to"
-msgstr "Inoltro a"
+msgstr "Inoltra a"
msgid "Friday"
-msgstr ""
+msgstr "Venerdì"
msgid "From %s in %s"
-msgstr ""
+msgstr "Da %s a %s"
msgid "From %s in %s with source %s"
-msgstr ""
+msgstr "Da %s a %s con sorgente %s"
msgid "From %s in %s with source %s and %s"
-msgstr ""
+msgstr "Da %s a %s con sorgente %s e %s"
msgid "General Settings"
msgstr "Opzioni Generali"
@@ -177,10 +177,10 @@ msgid "Input"
msgstr "Ingresso"
msgid "Inter-Zone Forwarding"
-msgstr ""
+msgstr "Inoltro tra le zone"
msgid "Internal IP address"
-msgstr "Indirizzo IP Interno"
+msgstr "Indirizzo IP interno"
msgid "Internal port"
msgstr "Porta interna"
@@ -189,92 +189,98 @@ msgid "Internal zone"
msgstr "Zona Interna"
msgid "Limit log messages"
-msgstr ""
+msgstr "Limita messaggi del registro"
msgid "MSS clamping"
msgstr ""
msgid "Masquerading"
-msgstr "Dettagli"
+msgstr ""
msgid "Match"
-msgstr ""
+msgstr "Corrispondenza"
msgid "Match ICMP type"
-msgstr ""
+msgstr "Corrispondenza tipo ICMP"
msgid "Match forwarded traffic to the given destination port or port range."
-msgstr ""
+msgstr "Corrispondi traffico inoltrato alla porta o intervallo di porte dato."
msgid ""
"Match incoming traffic directed at the given destination port or port range "
"on this host"
msgstr ""
+"Corrispondi traffico in entrata diretto alla porta o intervallo di porte dato "
+"su questo host"
msgid ""
"Match incoming traffic originating from the given source port or port range "
"on the client host."
msgstr ""
+"Corrispondi traffico in entrata originato dalla porta o intervallo di porte dato "
+"su host cliente"
msgid "Monday"
-msgstr ""
+msgstr "Lunedì"
msgid "Month Days"
-msgstr ""
+msgstr "Giorni del Mese"
msgid "Name"
msgstr "Nome"
msgid "New SNAT rule"
-msgstr ""
+msgstr "Nuova regola SNAT"
msgid "New forward rule"
-msgstr ""
+msgstr "Nuova regola di inoltro"
msgid "New input rule"
-msgstr "Nuova regola di inoltro porta"
+msgstr "Nuova regola di ingresso"
msgid "New port forward"
-msgstr ""
+msgstr "Nuova porta di inoltro"
msgid "New source NAT"
-msgstr ""
+msgstr "Nuova sorgente NAT"
msgid "Only match incoming traffic directed at the given IP address."
-msgstr ""
+msgstr "Corrispondi solo traffico in entrata diretto al dato indirizzo IP."
msgid "Only match incoming traffic from these MACs."
-msgstr ""
+msgstr "Corrispondi solo traffico in entrata da questi MAC."
msgid "Only match incoming traffic from this IP or range."
-msgstr ""
+msgstr "Corrispondi solo traffico in entrata da questo IP o intervallo."
msgid ""
"Only match incoming traffic originating from the given source port or port "
"range on the client host"
msgstr ""
+"Corrispondi solo traffico in entrata originato dalla porta o intervallo di "
+"porte sorgenti su host cliente"
msgid "Open ports on router"
-msgstr ""
+msgstr "Porte aperte sul router"
msgid "Other..."
-msgstr ""
+msgstr "Altri..."
msgid "Output"
msgstr ""
msgid "Passes additional arguments to iptables. Use with care!"
-msgstr ""
+msgstr "Passa comandi addizionali a iptables. Usare con cura!"
msgid "Port Forwards"
-msgstr ""
+msgstr "Inoltri Porta"
msgid ""
"Port forwarding allows remote computers on the Internet to connect to a "
"specific computer or service within the private LAN."
msgstr ""
-"L'inoltro delle porte permette ai computer in remoto su Internet "
-"diconnettersi a uno specifico computer o servizio presente nella tua LAN "
+"L'inoltro delle porte permette ai computer in remoto su Internet di "
+"connettersi a uno specifico computer o servizio presente nella LAN "
"privata"
msgid "Protocol"
@@ -283,44 +289,47 @@ msgstr "Protocollo"
msgid ""
"Redirect matched incoming traffic to the given port on the internal host"
msgstr ""
+"Reindirizza il traffico in entrata alla porta data su host interno"
msgid "Redirect matched incoming traffic to the specified internal host"
-msgstr ""
+msgstr "Reindirizza il traffico in entrata allo specifico host interno"
msgid "Restart Firewall"
-msgstr ""
+msgstr "Riavvia Firewall"
msgid "Restrict Masquerading to given destination subnets"
-msgstr ""
+msgstr "Limita il Masquerading alle subnet di destinazione date"
msgid "Restrict Masquerading to given source subnets"
-msgstr ""
+msgstr "Limita il Masquerading alle subnet sorgente date"
msgid "Restrict to address family"
-msgstr ""
+msgstr "Limita agli indirizzi famiglia"
msgid "Rewrite matched traffic to the given address."
-msgstr ""
+msgstr "Riscrivi il traffico verso l'indirizzo dato."
msgid ""
"Rewrite matched traffic to the given source port. May be left empty to only "
"rewrite the IP address."
msgstr ""
+"Riscrivi il traffico corrispondente alla porta sorgente data. Può essere "
+"lasciato vuoto per riscrivere solo l'indirizzo IP."
msgid "Rewrite to source %s"
-msgstr ""
+msgstr "Riscrivi alla sorgente %s"
msgid "Rewrite to source %s, %s"
-msgstr ""
+msgstr "Riscrivi alla sorgente %s, %s"
msgid "SNAT IP address"
-msgstr ""
+msgstr "Indirizzo IP SNAT"
msgid "SNAT port"
-msgstr ""
+msgstr "Porta SNAT"
msgid "Saturday"
-msgstr ""
+msgstr "Sabato"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua #
@@ -350,13 +359,17 @@ msgid "Source MAC address"
msgstr "Indirizzo MAC di origine"
msgid "Source NAT"
-msgstr ""
+msgstr "NAT di origine"
msgid ""
"Source NAT is a specific form of masquerading which allows fine grained "
"control over the source IP used for outgoing traffic, for example to map "
"multiple WAN addresses to internal subnets."
msgstr ""
+"La sorgente NAT è una forma specifica di masquerading che consente un controllo "
+"preciso sull'IP sorgente usato per il traffico in uscita, per esempio per "
+"mappare indirizzi WAN multipli verso le subnet interne."
+
msgid "Source address"
msgstr "Indirizzo di origine"
@@ -368,25 +381,25 @@ msgid "Source zone"
msgstr "Zona di origine"
msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Data di Inizio (yyyy-mm-dd)"
msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "Ora di Inizio (hh:mm:ss)"
msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Data di Stop (yyyy-mm-dd)"
msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "Ora di Stop (hh:mm:ss)"
msgid "Sunday"
-msgstr ""
+msgstr "Domenica"
msgid ""
"The firewall creates zones over your network interfaces to control network "
"traffic flow."
msgstr ""
-"Il firewall crea delle zone nelle tue interfacce di rete per controllareil "
+"Il firewall crea delle zone nelle tue interfacce di rete per controllare il "
"flusso del traffico."
msgid ""
@@ -397,16 +410,26 @@ msgid ""
"rule is <em>unidirectional</em>, e.g. a forward from lan to wan does "
"<em>not</em> imply a permission to forward from wan to lan as well."
msgstr ""
+"Queste opzioni controllano le regole di inoltro tra questa zona (%s) e "
+"altre zone. Le <em>zone di destinazione</em> coprono il traffico inoltrato "
+"<strong>originato da %q</strong>. Le <em>zone di origine</em> corrispondono il "
+"traffico inoltrato da altre zone <strong>che puntano a %q</strong>. La regola di "
+"inoltro è <em>unidirezionale</em>, esempio: un inoltro dalla lan alla wan "
+"<em>non</em> implica anche un permesso da inoltrare dalla wan alla lan."
msgid ""
"This page allows you to change advanced properties of the port forwarding "
"entry. In most cases there is no need to modify those settings."
msgstr ""
+"Questa pagina ti consente di cambiare le opzioni avanzate della voce porta di "
+"inoltro. Nella maggioranza dei casi non serve modificare queste impostazioni."
msgid ""
"This page allows you to change advanced properties of the traffic rule "
"entry, such as matched source and destination hosts."
msgstr ""
+"Questa pagina ti consente di cambiare le opzioni avanzate della voce regola del "
+"traffico, come la sorgente corrispondente e gli host di destinazione."
msgid ""
"This section defines common properties of %q. The <em>input</em> and "
@@ -415,68 +438,78 @@ msgid ""
"forwarded traffic between different networks within the zone. <em>Covered "
"networks</em> specifies which available networks are members of this zone."
msgstr ""
+"Questa sezione definisce le proprietà comuni di %q. Le opzioni di<em>ingresso</em> "
+"e <em>uscita</em> definiscono le regole di default per il traffico in entrata e "
+"uscita di questa zona mentre l'opzione di <em>inoltro</em> descrive il metodo per il "
+"traffico inoltrato tra reti differenti nella zona. Le <em>reti coperte</em> "
+"specificano quali reti disponibili sono membri di questa zona."
msgid "Thursday"
-msgstr ""
+msgstr "Giovedì"
msgid "Time in UTC"
-msgstr ""
+msgstr "Orario in UTC"
msgid "To %s at %s on <var>this device</var>"
-msgstr ""
+msgstr "Verso %s a %s su <var>questo dispositivo</var>"
msgid "To %s in %s"
-msgstr ""
+msgstr "Verso %s in %s"
msgid "To %s on <var>this device</var>"
-msgstr ""
+msgstr "Verso %s su <var>questo dispositivo</var>"
msgid "To %s, %s in %s"
-msgstr ""
+msgstr "Verso %s, %s in %s"
msgid "To source IP"
-msgstr ""
+msgstr "Verso IP sorgente"
msgid "To source port"
-msgstr ""
+msgstr "Verso la porta sorgente"
msgid "Traffic Rules"
-msgstr ""
+msgstr "Regole di Traffico"
msgid ""
"Traffic rules define policies for packets traveling between different zones, "
"for example to reject traffic between certain hosts or to open WAN ports on "
"the router."
msgstr ""
+"Le regole del traffico definiscono il metodo per il viaggio dei pacchetti tra "
+"zone differenti, per esempio per rifiutare il traffico tra certi host o per "
+"aprire porte WAN sul router."
msgid "Tuesday"
-msgstr ""
+msgstr "Martedì"
msgid "Via %s"
msgstr ""
msgid "Via %s at %s"
-msgstr ""
+msgstr "Via %s a %s"
msgid "Wednesday"
-msgstr ""
+msgstr "Mercoledì"
msgid "Week Days"
-msgstr ""
+msgstr "Giorni della Settimana"
msgid ""
"You may specify multiple by selecting \"-- custom --\" and then entering "
"protocols separated by space."
msgstr ""
+"Puoi specificare multipli selezionando \"-- custom --\" e poi inserendo "
+"i protocolli separati da uno spazio."
msgid "Zone %q"
-msgstr ""
+msgstr "Zona %q"
msgid "Zone ⇒ Forwardings"
-msgstr ""
+msgstr "Zona ⇒ Inoltri"
msgid "Zones"
-msgstr ""
+msgstr "Zone"
msgid "accept"
msgstr "accetta"
@@ -485,22 +518,22 @@ msgid "any"
msgstr "qualsiasi"
msgid "any host"
-msgstr ""
+msgstr "qualsiasi host"
msgid "any router IP"
-msgstr ""
+msgstr "qualsiasi router IP"
msgid "any zone"
-msgstr ""
+msgstr "qualsiasi zona"
msgid "don't track"
-msgstr ""
+msgstr "non tracciare"
msgid "drop"
-msgstr ""
+msgstr "scarta"
msgid "reject"
msgstr "rifiuta"
msgid "traffic"
-msgstr ""
+msgstr "traffico"
diff --git a/applications/luci-app-firewall/po/ja/firewall.po b/applications/luci-app-firewall/po/ja/firewall.po
index 0e8d71c6b3..eb4b06f29a 100644
--- a/applications/luci-app-firewall/po/ja/firewall.po
+++ b/applications/luci-app-firewall/po/ja/firewall.po
@@ -69,7 +69,7 @@ msgid "Custom Rules"
msgstr "手動設定ルール"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/ko/firewall.po b/applications/luci-app-firewall/po/ko/firewall.po
index f43fdc8826..e5e0e871ee 100644
--- a/applications/luci-app-firewall/po/ko/firewall.po
+++ b/applications/luci-app-firewall/po/ko/firewall.po
@@ -68,7 +68,7 @@ msgid "Custom Rules"
msgstr "Custom Rule"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/ms/firewall.po b/applications/luci-app-firewall/po/ms/firewall.po
index b82e2c116f..edc92514fb 100644
--- a/applications/luci-app-firewall/po/ms/firewall.po
+++ b/applications/luci-app-firewall/po/ms/firewall.po
@@ -62,7 +62,7 @@ msgid "Custom Rules"
msgstr ""
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/no/firewall.po b/applications/luci-app-firewall/po/no/firewall.po
index 59167db541..e26e36564d 100644
--- a/applications/luci-app-firewall/po/no/firewall.po
+++ b/applications/luci-app-firewall/po/no/firewall.po
@@ -63,7 +63,7 @@ msgid "Custom Rules"
msgstr "Egendefinerte Regler"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/pl/firewall.po b/applications/luci-app-firewall/po/pl/firewall.po
index 2eea8c31f8..77e6a956a2 100644
--- a/applications/luci-app-firewall/po/pl/firewall.po
+++ b/applications/luci-app-firewall/po/pl/firewall.po
@@ -70,7 +70,7 @@ msgid "Custom Rules"
msgstr "Własne reguły"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/pt-br/firewall.po b/applications/luci-app-firewall/po/pt-br/firewall.po
index ab714b50b9..1ee89cfbfb 100644
--- a/applications/luci-app-firewall/po/pt-br/firewall.po
+++ b/applications/luci-app-firewall/po/pt-br/firewall.po
@@ -68,7 +68,7 @@ msgid "Custom Rules"
msgstr "Regras Personalizadas"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/pt/firewall.po b/applications/luci-app-firewall/po/pt/firewall.po
index f552616714..d803dfab10 100644
--- a/applications/luci-app-firewall/po/pt/firewall.po
+++ b/applications/luci-app-firewall/po/pt/firewall.po
@@ -68,7 +68,7 @@ msgid "Custom Rules"
msgstr "Regras Personalizadas"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/ro/firewall.po b/applications/luci-app-firewall/po/ro/firewall.po
index 69b911e17f..e0027de417 100644
--- a/applications/luci-app-firewall/po/ro/firewall.po
+++ b/applications/luci-app-firewall/po/ro/firewall.po
@@ -67,7 +67,7 @@ msgid "Custom Rules"
msgstr "Reguli suplimentare"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/ru/firewall.po b/applications/luci-app-firewall/po/ru/firewall.po
index 98bc92dd6b..be16fece88 100644
--- a/applications/luci-app-firewall/po/ru/firewall.po
+++ b/applications/luci-app-firewall/po/ru/firewall.po
@@ -70,7 +70,7 @@ msgid "Custom Rules"
msgstr "Пользовательские правила"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/sk/firewall.po b/applications/luci-app-firewall/po/sk/firewall.po
index f45e74b14f..1dda5bf53a 100644
--- a/applications/luci-app-firewall/po/sk/firewall.po
+++ b/applications/luci-app-firewall/po/sk/firewall.po
@@ -63,7 +63,7 @@ msgid "Custom Rules"
msgstr ""
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/sv/firewall.po b/applications/luci-app-firewall/po/sv/firewall.po
index 777c81787d..f9fd920727 100644
--- a/applications/luci-app-firewall/po/sv/firewall.po
+++ b/applications/luci-app-firewall/po/sv/firewall.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
"Language-Team: none\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
@@ -49,10 +49,10 @@ msgid "Advanced Settings"
msgstr "Avancerade inställningar"
msgid "Allow forward from <em>source zones</em>:"
-msgstr ""
+msgstr "Tillåt vidarebefordring från <em>källzonerna</em>:"
msgid "Allow forward to <em>destination zones</em>:"
-msgstr ""
+msgstr "Till vidarebefordring till <em>destinationszonerna:</em>:"
msgid "Any"
msgstr "Alla"
@@ -64,22 +64,22 @@ msgid "Custom Rules"
msgstr "Anpassade regler"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
msgid "Destination IP address"
-msgstr ""
+msgstr "Destinationens IP-adress"
msgid "Destination address"
-msgstr "Destinationsadress"
+msgstr "Destinationens adress"
msgid "Destination port"
msgstr "Destinationsport"
msgid "Destination zone"
-msgstr ""
+msgstr "Destinationens zon"
msgid "Do not rewrite"
msgstr "Skriv inte om igen"
@@ -97,7 +97,7 @@ msgid "Enable SYN-flood protection"
msgstr ""
msgid "Enable logging on this zone"
-msgstr ""
+msgstr "Aktivera loggning i den här zonen"
msgid "External IP address"
msgstr "Extern IP-adress"
@@ -118,13 +118,13 @@ msgid "Firewall - Custom Rules"
msgstr "Brandvägg - Anpassade regler"
msgid "Firewall - Port Forwards"
-msgstr ""
+msgstr "Brandvägg - Vidarebefordring av port"
msgid "Firewall - Traffic Rules"
-msgstr ""
+msgstr "Brandvägg - Trafikregler"
msgid "Firewall - Zone Settings"
-msgstr ""
+msgstr "Brandvägg - Zoninställningar"
msgid "Force connection tracking"
msgstr ""
@@ -142,10 +142,10 @@ msgid "From %s in %s"
msgstr "Från %s i %s"
msgid "From %s in %s with source %s"
-msgstr ""
+msgstr "Från %s i %s med källa %s"
msgid "From %s in %s with source %s and %s"
-msgstr ""
+msgstr "Från %s i %s med källa %s och %s"
msgid "General Settings"
msgstr "Generella inställningar"
@@ -187,21 +187,25 @@ msgid "MSS clamping"
msgstr ""
msgid "Masquerading"
-msgstr ""
+msgstr "Maskering"
msgid "Match"
msgstr "Matcha"
msgid "Match ICMP type"
-msgstr ""
+msgstr "Matchar ICMP-typ"
msgid "Match forwarded traffic to the given destination port or port range."
msgstr ""
+"Matcha vidarebefordrad trafik till den angivna destinationsporten eller "
+"portens räckvidd."
msgid ""
"Match incoming traffic directed at the given destination port or port range "
"on this host"
msgstr ""
+"Matcha inkommande trafik dirigerad till den angivna destinationsporten eller "
+"portens räckvidd på den här värden"
msgid ""
"Match incoming traffic originating from the given source port or port range "
@@ -212,7 +216,7 @@ msgid "Monday"
msgstr "Måndag"
msgid "Month Days"
-msgstr ""
+msgstr "Dagar i månaden"
msgid "Name"
msgstr "Namn"
@@ -221,16 +225,16 @@ msgid "New SNAT rule"
msgstr "Ny SNAT-regel"
msgid "New forward rule"
-msgstr "Ny vidarebefordningsregel"
+msgstr "Ny regel för vidarebefordring"
msgid "New input rule"
msgstr "Ny inmatningsregel"
msgid "New port forward"
-msgstr ""
+msgstr "Ny vidarebefordring av port"
msgid "New source NAT"
-msgstr ""
+msgstr "Ny käll-NAT"
msgid "Only match incoming traffic directed at the given IP address."
msgstr ""
@@ -240,6 +244,7 @@ msgstr ""
msgid "Only match incoming traffic from this IP or range."
msgstr ""
+"Matcha endast inkommande trafik från den här IP-adressen eller räckvidden."
msgid ""
"Only match incoming traffic originating from the given source port or port "
@@ -259,7 +264,7 @@ msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
msgid "Port Forwards"
-msgstr ""
+msgstr "Vidarebefordringar av port"
msgid ""
"Port forwarding allows remote computers on the Internet to connect to a "
diff --git a/applications/luci-app-firewall/po/templates/firewall.pot b/applications/luci-app-firewall/po/templates/firewall.pot
index d1e8eeca16..bec02d4486 100644
--- a/applications/luci-app-firewall/po/templates/firewall.pot
+++ b/applications/luci-app-firewall/po/templates/firewall.pot
@@ -56,7 +56,7 @@ msgid "Custom Rules"
msgstr ""
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/tr/firewall.po b/applications/luci-app-firewall/po/tr/firewall.po
index 1b5444f0f4..5bb897cc28 100644
--- a/applications/luci-app-firewall/po/tr/firewall.po
+++ b/applications/luci-app-firewall/po/tr/firewall.po
@@ -63,7 +63,7 @@ msgid "Custom Rules"
msgstr ""
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/uk/firewall.po b/applications/luci-app-firewall/po/uk/firewall.po
index 1c4117f3f0..8ca1428e71 100644
--- a/applications/luci-app-firewall/po/uk/firewall.po
+++ b/applications/luci-app-firewall/po/uk/firewall.po
@@ -67,7 +67,7 @@ msgid "Custom Rules"
msgstr "Настроювані правила"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/vi/firewall.po b/applications/luci-app-firewall/po/vi/firewall.po
index 6c00a6f298..9509613f23 100644
--- a/applications/luci-app-firewall/po/vi/firewall.po
+++ b/applications/luci-app-firewall/po/vi/firewall.po
@@ -68,7 +68,7 @@ msgid "Custom Rules"
msgstr ""
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
diff --git a/applications/luci-app-firewall/po/zh-cn/firewall.po b/applications/luci-app-firewall/po/zh-cn/firewall.po
index d36eeeaa6d..f2faab8809 100644
--- a/applications/luci-app-firewall/po/zh-cn/firewall.po
+++ b/applications/luci-app-firewall/po/zh-cn/firewall.po
@@ -1,17 +1,7 @@
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-30 17:00+0200\n"
-"PO-Revision-Date: 2014-06-14 18:05+0200\n"
-"Last-Translator: jame-he <755085131@qq.com>\n"
-"Language-Team: QQ Group 75543259 <axishero@foxmail.com>\n"
-"Language: zh_CN\n"
-"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.0.6\n"
+"Last-Translator: Hing-wang Liao <kuoruan@gmail.com>\n"
msgid "%s in %s"
msgstr "%s 位于 %s"
@@ -23,22 +13,22 @@ msgid "%s, %s in %s"
msgstr "%s, %s 位于 %s"
msgid "(Unnamed Entry)"
-msgstr "(未命名条目)"
+msgstr "(未命名条目)"
msgid "(Unnamed Rule)"
-msgstr "(未命名规则)"
+msgstr "(未命名规则)"
msgid "(Unnamed SNAT)"
-msgstr "(未命名SNAT)"
+msgstr "(未命名 SNAT)"
msgid "<var>%d</var> pkts. per <var>%s</var>"
-msgstr "<var>%d</var> 包.每 <var>%s</var>"
+msgstr "<var>%d</var> 数据包。每 <var>%s</var>"
msgid "<var>%d</var> pkts. per <var>%s</var>, burst <var>%d</var> pkts."
-msgstr "<var>%d</var> 包. 每 <var>%s</var>, 突发 <var>%d</var> 包."
+msgstr "<var>%d</var> 数据包。每 <var>%s</var>,突发 <var>%d</var> 数据包。"
msgid "<var>%s</var> and limit to %s"
-msgstr "<var>%s</var> 并且限制到 %s"
+msgstr "<var>%s</var> 并限制到 %s"
msgid "Action"
msgstr "动作"
@@ -53,10 +43,10 @@ msgid "Advanced Settings"
msgstr "高级设置"
msgid "Allow forward from <em>source zones</em>:"
-msgstr "允许从<em>源区域</em>转发"
+msgstr "允许从<em>源区域</em>转发:"
msgid "Allow forward to <em>destination zones</em>:"
-msgstr "允许转发到<em>目标区域</em>"
+msgstr "允许转发到<em>目标区域</em>:"
msgid "Any"
msgstr "任何"
@@ -68,15 +58,15 @@ msgid "Custom Rules"
msgstr "自定义规则"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
-"自定义规则允许运行一些防火墙没有包含的功能。这些命令将在每次重启防火墙时,在"
-"默认的规则运行后立即执行。"
+"自定义规则允许你执行不属于防火墙框架的任意 iptables 命令。每次重启防火墙时,"
+"在默认的规则运行后这些命令将立即执行。"
msgid "Destination IP address"
-msgstr "目标IP地址"
+msgstr "目标 IP 地址"
msgid "Destination address"
msgstr "目标地址"
@@ -88,7 +78,7 @@ msgid "Destination zone"
msgstr "目标区域"
msgid "Do not rewrite"
-msgstr "不填写=(所有端口)"
+msgstr "不重写"
msgid "Drop invalid packets"
msgstr "丢弃无效数据包"
@@ -97,16 +87,16 @@ msgid "Enable"
msgstr "启用"
msgid "Enable NAT Loopback"
-msgstr "启用NAT环回"
+msgstr "启用 NAT 环回"
msgid "Enable SYN-flood protection"
-msgstr "启用SYN-flood防御"
+msgstr "启用 SYN-flood 防御"
msgid "Enable logging on this zone"
-msgstr "在此区域允许进入"
+msgstr "启用此区域的日志记录"
msgid "External IP address"
-msgstr "外部IP地址"
+msgstr "外部 IP 地址"
msgid "External port"
msgstr "外部端口"
@@ -130,7 +120,7 @@ msgid "Firewall - Traffic Rules"
msgstr "防火墙 - 通信规则"
msgid "Firewall - Zone Settings"
-msgstr "防火墙-区域设置"
+msgstr "防火墙 - 区域设置"
msgid "Force connection tracking"
msgstr "强制连接追踪"
@@ -142,16 +132,16 @@ msgid "Forward to"
msgstr "转发到"
msgid "Friday"
-msgstr ""
+msgstr "星期五"
msgid "From %s in %s"
msgstr "来自 %s 位于 %s"
msgid "From %s in %s with source %s"
-msgstr "来自 %s 位于 %s 带源 %s"
+msgstr "来自 %s 位于 %s 源于 %s"
msgid "From %s in %s with source %s and %s"
-msgstr "来自 %s 位于 %s 带源 %s 并且 %s"
+msgstr "来自 %s 位于 %s 源端口 %s 源 MAC %s"
msgid "General Settings"
msgstr "基本设置"
@@ -163,13 +153,13 @@ msgid "IPv4 and IPv6"
msgstr "IPv4 和 IPv6"
msgid "IPv4 only"
-msgstr "仅IPv4"
+msgstr "仅 IPv4"
msgid "IPv6"
msgstr "IPv6"
msgid "IPv6 only"
-msgstr "仅IPv6"
+msgstr "仅 IPv6"
msgid "Input"
msgstr "入站数据"
@@ -178,7 +168,7 @@ msgid "Inter-Zone Forwarding"
msgstr "端口触发"
msgid "Internal IP address"
-msgstr "内部IP地址"
+msgstr "内部 IP 地址"
msgid "Internal port"
msgstr "内部端口"
@@ -190,41 +180,41 @@ msgid "Limit log messages"
msgstr "限制日志信息"
msgid "MSS clamping"
-msgstr "MSS钳制"
+msgstr "MSS 钳制"
msgid "Masquerading"
-msgstr "IP动态伪装"
+msgstr "IP 动态伪装"
msgid "Match"
msgstr "匹配规则"
msgid "Match ICMP type"
-msgstr "匹配ICMP类型"
+msgstr "匹配 ICMP 类型"
msgid "Match forwarded traffic to the given destination port or port range."
-msgstr "需要匹配转发流量到的目标端口或端口范围"
+msgstr "匹配指定目标端口或目标端口范围的转发流量。"
msgid ""
"Match incoming traffic directed at the given destination port or port range "
"on this host"
-msgstr "需要匹配入站流量到的目标端口或端口范围"
+msgstr "匹配指向此主机上指定目标端口或目标端口范围的入站流量。"
msgid ""
"Match incoming traffic originating from the given source port or port range "
"on the client host."
-msgstr "需要匹配入站流量的源端口或端口范围"
+msgstr "匹配来自客户端主机上指定源端口或源端口范围的入站流量。"
msgid "Monday"
-msgstr ""
+msgstr "星期一"
msgid "Month Days"
-msgstr ""
+msgstr "日期"
msgid "Name"
msgstr "名字"
msgid "New SNAT rule"
-msgstr "新建SNAT规则"
+msgstr "新建 SNAT 规则"
msgid "New forward rule"
msgstr "新建转发规则"
@@ -236,21 +226,21 @@ msgid "New port forward"
msgstr "新建端口转发"
msgid "New source NAT"
-msgstr "新建Source NAT"
+msgstr "新建 Source NAT"
msgid "Only match incoming traffic directed at the given IP address."
-msgstr "需要匹配入站流量的源IP"
+msgstr "仅匹配指定目的 IP 地址的入站流量。"
msgid "Only match incoming traffic from these MACs."
-msgstr "需要匹配入站流量的源MACs(可以为多个)"
+msgstr "仅匹配来自这些 MAC 的入站流量。"
msgid "Only match incoming traffic from this IP or range."
-msgstr "需要匹配入站流量的源IP或IP范围"
+msgstr "仅匹配来自此 IP 或 IP 范围的入站流量。"
msgid ""
"Only match incoming traffic originating from the given source port or port "
"range on the client host"
-msgstr "需要匹配入站流量的源端口或端口范围"
+msgstr "仅匹配源自客户端主机上给定源端口或源端口范围的入站流量。"
msgid "Open ports on router"
msgstr "打开路由器端口"
@@ -262,7 +252,7 @@ msgid "Output"
msgstr "出站数据"
msgid "Passes additional arguments to iptables. Use with care!"
-msgstr "传递到iptables的额外参数。小心使用!"
+msgstr "传递到 iptables 的额外参数。小心使用!"
msgid "Port Forwards"
msgstr "端口转发"
@@ -270,7 +260,8 @@ msgstr "端口转发"
msgid ""
"Port forwarding allows remote computers on the Internet to connect to a "
"specific computer or service within the private LAN."
-msgstr "端口转发允许来自Internet的计算机访问私有局域网内的计算机或服务"
+msgstr ""
+"端口转发允许 Internet 上的远程计算机连接到内部网络中的特定计算机或服务。"
msgid "Protocol"
msgstr "协议"
@@ -280,27 +271,27 @@ msgid ""
msgstr "重定向匹配的入站流量到内部主机的端口"
msgid "Redirect matched incoming traffic to the specified internal host"
-msgstr "重定向匹配的入站流量到的内部主机"
+msgstr "重定向匹配的入站流量到指定的内部主机"
msgid "Restart Firewall"
-msgstr ""
+msgstr "重启防火墙"
msgid "Restrict Masquerading to given destination subnets"
-msgstr "要限制IP动态伪装的目标子网"
+msgstr "要限制 IP 动态伪装的目标子网"
msgid "Restrict Masquerading to given source subnets"
-msgstr "要限制IP动态伪装的源子网"
+msgstr "要限制 IP 动态伪装的源子网"
msgid "Restrict to address family"
msgstr "限制地址"
msgid "Rewrite matched traffic to the given address."
-msgstr "将匹配流量的源地址改写成指定地址"
+msgstr "将匹配流量的源地址改写成指定地址。"
msgid ""
"Rewrite matched traffic to the given source port. May be left empty to only "
"rewrite the IP address."
-msgstr "将匹配流量的源端口改写成指定端口。也可以留空,只改写IP地址。"
+msgstr "将匹配流量的源端口改写成指定端口。留空只改写 IP 地址。"
msgid "Rewrite to source %s"
msgstr "源地址改写成 %s"
@@ -309,49 +300,19 @@ msgid "Rewrite to source %s, %s"
msgstr "源地址改写成 %s, %s"
msgid "SNAT IP address"
-msgstr "SNAT IP地址"
+msgstr "SNAT IP 地址"
msgid "SNAT port"
msgstr "SNAT 端口"
msgid "Saturday"
-msgstr ""
+msgstr "星期六"
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua #
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-#
-# msgid "Traffic Redirection"
-# msgstr ""
-#
-# msgid ""
-# "Traffic redirection allows you to change the destination address of "
-# "forwarded packets."
-# msgstr ""
-#
-# msgid "Overview"
-# msgstr ""
-#
-# msgid "Name"
-# msgstr ""
-#
-# msgid "Source zone"
-# msgstr ""
-#
-# msgid "Source MAC-address"
-# msgstr ""
-#
-# msgid "Source port"
-# msgstr ""
-#
-# msgid "Protocol"
-# msgstr ""
-#
msgid "Source IP address"
-msgstr "源IP地址"
+msgstr "源 IP 地址"
msgid "Source MAC address"
-msgstr "源MAC地址"
+msgstr "源 MAC 地址"
msgid "Source NAT"
msgstr "Source NAT"
@@ -361,8 +322,8 @@ msgid ""
"control over the source IP used for outgoing traffic, for example to map "
"multiple WAN addresses to internal subnets."
msgstr ""
-"Source NAT是一种特殊形式的封包伪装,它允许精细的控制传出流量的源IP,例如,将"
-"多个WAN地址映射到内部子网。"
+"Source NAT 是一种特殊形式的封包伪装,它允许精细的控制传出流量的源 IP,例如:"
+"将多个 WAN 地址映射到内部子网。"
msgid "Source address"
msgstr "源地址"
@@ -374,24 +335,24 @@ msgid "Source zone"
msgstr "源区域"
msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "开始日期(yyyy-mm-dd)"
msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "开始时间(hh:mm:ss)"
msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "停止日期(yyyy-mm-dd)"
msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "停止时间(hh:mm:ss)"
msgid "Sunday"
-msgstr ""
+msgstr "星期日"
msgid ""
"The firewall creates zones over your network interfaces to control network "
"traffic flow."
-msgstr "防火墙把网络接口分为不同的区域进行管理"
+msgstr "防火墙通过在网络接口上创建区域来控制网络流量。"
msgid ""
"The options below control the forwarding policies between this zone (%s) and "
@@ -401,10 +362,10 @@ msgid ""
"rule is <em>unidirectional</em>, e.g. a forward from lan to wan does "
"<em>not</em> imply a permission to forward from wan to lan as well."
msgstr ""
-"以下选项可以控制区域(%s)和其它区域间的转发规则。 <em>目标区域</em>接收"
-"<strong>从%q</strong>转发的流量。<em>源区域</em>匹配从<strong>目标为%q</"
-"strong>的区域的需转发流量。以下规则<em>无法转发</em>,例如:转发lan流量到wan,"
-"但是<em>不允许</em>从wan转发到lan。"
+"以下选项可以控制区域(%s)和其它区域间的转发规则。<em>目标区域</em>接收"
+"<strong>源自 %q</strong> 的转发流量。<em>源区域</em>匹配从<strong>目标为 %q</"
+"strong> 的区域的需转发流量。转发规则的作用是<em>单向</em>的,例如:一条允许"
+"从 lan 到 wan 的转发规则并不隐含有允许相反方向从 wan 到 lan 的流量转发。"
msgid ""
"This page allows you to change advanced properties of the port forwarding "
@@ -416,7 +377,6 @@ msgid ""
"entry, such as matched source and destination hosts."
msgstr "本页面可以更改通信规则的高级设置,比如:需匹配的源主机和目标主机。"
-#, fuzzy
msgid ""
"This section defines common properties of %q. The <em>input</em> and "
"<em>output</em> options set the default policies for traffic entering and "
@@ -424,19 +384,18 @@ msgid ""
"forwarded traffic between different networks within the zone. <em>Covered "
"networks</em> specifies which available networks are members of this zone."
msgstr ""
-"本节定义 %q 的通用属性, <em>入站数据</em> 和 <em>出站数据</em>规则用于设置数"
-"据包“进”和“出”路由器(某个接口)默认的转发原则,<em>转发</em>规则用于特定(一"
-"个或多个)区域的不同子网之间的数据包转发。<em>覆盖网络</em>选择从属于这个区域"
-"的网络。"
+"本节定义 %q 的通用属性, <em>入站数据</em>和<em>出站数据</em>选项用于设置此区"
+"域入站和出站流量的默认策略,<em>转发</em>选项描述该区域内不同网络之间的流量转"
+"发策略。<em>覆盖网络</em>指定从属于这个区域的网络。"
msgid "Thursday"
-msgstr ""
+msgstr "星期四"
msgid "Time in UTC"
-msgstr ""
+msgstr "UTC 时间"
msgid "To %s at %s on <var>this device</var>"
-msgstr "到 %s at %s 位于<var>本设备</var>"
+msgstr "到 %s 在 %s 位于<var>本设备</var>"
msgid "To %s in %s"
msgstr "到 %s 位于 %s"
@@ -448,7 +407,7 @@ msgid "To %s, %s in %s"
msgstr "到 %s, %s 位于 %s"
msgid "To source IP"
-msgstr "到源IP"
+msgstr "到源 IP"
msgid "To source port"
msgstr "到源端口"
@@ -461,23 +420,23 @@ msgid ""
"for example to reject traffic between certain hosts or to open WAN ports on "
"the router."
msgstr ""
-"通信规则定义了不同区域间的流量传送,例如:拒绝一些主机之间的通信、打开到WAN的"
-"端口。"
+"通信规则定义了不同区域间的数据包传输策略,例如:拒绝一些主机之间的通信,开放"
+"路由器 WAN 上的端口。"
msgid "Tuesday"
-msgstr ""
+msgstr "星期二"
msgid "Via %s"
msgstr "通过 %s"
msgid "Via %s at %s"
-msgstr "通过 %s at %s"
+msgstr "通过 %s 在 %s"
msgid "Wednesday"
-msgstr ""
+msgstr "星期三"
msgid "Week Days"
-msgstr ""
+msgstr "星期"
msgid ""
"You may specify multiple by selecting \"-- custom --\" and then entering "
@@ -503,13 +462,13 @@ msgid "any host"
msgstr "所有主机"
msgid "any router IP"
-msgstr "所有路由地址"
+msgstr "所有路由 IP"
msgid "any zone"
msgstr "所有区域"
msgid "don't track"
-msgstr "无动作"
+msgstr "不跟踪"
msgid "drop"
msgstr "丢弃"
@@ -518,4 +477,4 @@ msgid "reject"
msgstr "拒绝"
msgid "traffic"
-msgstr "交通"
+msgstr "通信"
diff --git a/applications/luci-app-firewall/po/zh-tw/firewall.po b/applications/luci-app-firewall/po/zh-tw/firewall.po
index b89cfab7fd..fff89cbcdf 100644
--- a/applications/luci-app-firewall/po/zh-tw/firewall.po
+++ b/applications/luci-app-firewall/po/zh-tw/firewall.po
@@ -66,11 +66,11 @@ msgid "Custom Rules"
msgstr "自訂的規則群"
msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
"otherwise covered by the firewall framework. The commands are executed after "
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
-"自定義規則允許你執行這是不以其他方式涉及的防火牆框架arbritary的iptables命令。"
+"自定義規則允許你執行這是不以其他方式涉及的防火牆框架arbitrary的iptables命令。"
"該命令是每個防火牆重啟後執行,默認規則集已經加載之後。"
msgid "Destination IP address"
diff --git a/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd b/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd
index 65ef012450..9e5057e701 100644
--- a/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd
+++ b/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd
@@ -3,6 +3,7 @@
#-- Licensed to the public under the GNU General Public License v2.
. /lib/functions/network.sh
+[ "$(uci -q get fwknopd.@access[0].KEY)" != "CHANGEME" ] && exit 0
uci batch <<EOF
add ucitrack fwknopd
set ucitrack.@fwknopd[-1].init=fwknopd
diff --git a/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh b/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh
index abca5d3e5a..48850bd361 100644
--- a/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh
+++ b/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh
@@ -4,23 +4,23 @@ if [ "$1" != "" ]; then
entry_num=$1
fi
-key_base64=$(uci get fwknopd.@access[$entry_num].KEY_BASE64)
-key=$(uci get fwknopd.@access[$entry_num].KEY)
-hmac_key_base64=$(uci get fwknopd.@access[$entry_num].HMAC_KEY_BASE64)
-hmac_key=$(uci get fwknopd.@access[$entry_num].HMAC_KEY)
+key_base64=$(uci -q get fwknopd.@access[$entry_num].KEY_BASE64)
+key=$(uci -q get fwknopd.@access[$entry_num].KEY)
+hmac_key_base64=$(uci -q get fwknopd.@access[$entry_num].HMAC_KEY_BASE64)
+hmac_key=$(uci -q get fwknopd.@access[$entry_num].HMAC_KEY)
-if [ $key_base64 != "" ]; then
+if [ "$key_base64" != "" ]; then
qr="KEY_BASE64:$key_base64"
fi
-if [ $key != "" ]; then
+if [ "$key" != "" ]; then
qr="$qr KEY:$key"
fi
-if [ $hmac_key_base64 != "" ]; then
+if [ "$hmac_key_base64" != "" ]; then
qr="$qr HMAC_KEY_BASE64:$hmac_key_base64"
fi
-if [ $hmac_key != "" ]; then
+if [ "$hmac_key" != "" ]; then
qr="$qr HMAC_KEY:$hmac_key"
fi
-qrencode -o - "$qr"
+qrencode -t svg -I -o - "$qr"
diff --git a/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua b/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua
index 99ef68cbca..3f59e53643 100644
--- a/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua
+++ b/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua
@@ -91,6 +91,10 @@ s:taboption("advanced", Flag, "enable_tivo", translate("Enable TIVO:"),
translate("Set this to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO."))
o.rmempty = true
+s:taboption("advanced", Flag, "wide_links", translate("Allow wide links"),
+ translate("Set this to allow serving content outside the media root (via symlinks)."))
+o.rmempty = true
+
o = s:taboption("advanced", Flag, "strict_dlna", translate("Strict to DLNA standard:"),
translate("Set this to strictly adhere to DLNA standards. This will allow server-side downscaling of very large JPEG images, which may hurt JPEG serving performance on (at least) Sony DLNA products."))
o.rmempty = true
@@ -126,7 +130,7 @@ o:value("P", translate("Pictures"))
s:taboption("general", DynamicList, "media_dir", translate("Media directories:"),
- translate("Set this to the directory you want scanned. If you want to restrict the directory to a specific content type, you can prepend the type ('A' for audio, 'V' for video, 'P' for images), followed by a comma, to the directory (eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."))
+ translate("Set this to the directory you want scanned. If you want to restrict the directory to a specific content type, you can prepend the type ('A' for audio, 'V' for video, 'P' for images), followed by a comma, to the directory (eg. A,/mnt/media/Music). Multiple directories can be specified."))
o = s:taboption("general", DynamicList, "album_art_names", translate("Album art names:"),
diff --git a/applications/luci-app-minidlna/po/ca/minidlna.po b/applications/luci-app-minidlna/po/ca/minidlna.po
index bf160080ec..ed710e5a97 100644
--- a/applications/luci-app-minidlna/po/ca/minidlna.po
+++ b/applications/luci-app-minidlna/po/ca/minidlna.po
@@ -17,6 +17,9 @@ msgstr "Ajusts avançats"
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -131,7 +134,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/cs/minidlna.po b/applications/luci-app-minidlna/po/cs/minidlna.po
index bf5a7f442c..f642510776 100644
--- a/applications/luci-app-minidlna/po/cs/minidlna.po
+++ b/applications/luci-app-minidlna/po/cs/minidlna.po
@@ -17,6 +17,9 @@ msgstr "Pokročilé nastavení"
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -133,7 +136,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/de/minidlna.po b/applications/luci-app-minidlna/po/de/minidlna.po
index 22cb0f7e9e..4d20ec2a8d 100644
--- a/applications/luci-app-minidlna/po/de/minidlna.po
+++ b/applications/luci-app-minidlna/po/de/minidlna.po
@@ -17,6 +17,9 @@ msgstr "Erweiterte Einstellungen"
msgid "Album art names:"
msgstr "Dateinamen für Cover-Bilder:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "Angekündigte Modellnummer:"
@@ -149,7 +152,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"Spezifiziert die zu durchsuchenden Medienverzeichnisse. Durch Voranstellung "
"eines Buchstaben gefolgt von einem Komma kann ein Verzeichnis auf einen "
diff --git a/applications/luci-app-minidlna/po/el/minidlna.po b/applications/luci-app-minidlna/po/el/minidlna.po
index 48c6188390..d7af11cd5d 100644
--- a/applications/luci-app-minidlna/po/el/minidlna.po
+++ b/applications/luci-app-minidlna/po/el/minidlna.po
@@ -14,6 +14,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -128,7 +131,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/en/minidlna.po b/applications/luci-app-minidlna/po/en/minidlna.po
index 5934d42e9e..fefcfcc946 100644
--- a/applications/luci-app-minidlna/po/en/minidlna.po
+++ b/applications/luci-app-minidlna/po/en/minidlna.po
@@ -14,6 +14,9 @@ msgstr ""
msgid "Album art names:"
msgstr "Album art names:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "Announced model number:"
@@ -145,12 +148,12 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgid "Specify the path to the MiniSSDPd socket."
msgstr "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/es/minidlna.po b/applications/luci-app-minidlna/po/es/minidlna.po
index 5f6b3964f3..e08fff7efc 100644
--- a/applications/luci-app-minidlna/po/es/minidlna.po
+++ b/applications/luci-app-minidlna/po/es/minidlna.po
@@ -17,6 +17,9 @@ msgstr "Configuración avanzada"
msgid "Album art names:"
msgstr "Imágenes de álbumes:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "Número de modelo declarado:"
@@ -142,11 +145,11 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"Directorio a explorar. Si quiere restringir el directorio a un contenido "
"específico puede añadir el tipo ('A' par audio, 'V' para vídeo o 'P' para "
-"imágenes), seguido por una coma al nombre del directorio (ej. media_dir=A,/"
+"imágenes), seguido por una coma al nombre del directorio (ej. A,/"
"mnt/media/Music). Se puede establecer varios directorios."
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/fr/minidlna.po b/applications/luci-app-minidlna/po/fr/minidlna.po
index d638b0cba7..5eb2e1bba2 100644
--- a/applications/luci-app-minidlna/po/fr/minidlna.po
+++ b/applications/luci-app-minidlna/po/fr/minidlna.po
@@ -14,6 +14,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -128,7 +131,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/he/minidlna.po b/applications/luci-app-minidlna/po/he/minidlna.po
index 48c6188390..d7af11cd5d 100644
--- a/applications/luci-app-minidlna/po/he/minidlna.po
+++ b/applications/luci-app-minidlna/po/he/minidlna.po
@@ -14,6 +14,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -128,7 +131,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/hu/minidlna.po b/applications/luci-app-minidlna/po/hu/minidlna.po
index 52fbe749eb..4f259c1028 100644
--- a/applications/luci-app-minidlna/po/hu/minidlna.po
+++ b/applications/luci-app-minidlna/po/hu/minidlna.po
@@ -17,6 +17,9 @@ msgstr "Haladó beállítások"
msgid "Album art names:"
msgstr "Borító album nevek:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "Közölt modellszám:"
@@ -147,12 +150,12 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"Állítsa be a vizsgálandó könyvtárra. Ha a könyvtárat egy adott típusú "
"tartalom szerint szeretné korlátozni, akkor a neve előtt vesszővel "
"elválasztva megadhatja a típust ('A' az audió, 'V' a videó, 'P' a képek "
-"számára. pl.: media_dir=A,/mnt/media/Music). Több könyvtár is megadható."
+"számára. pl.: A,/mnt/media/Music). Több könyvtár is megadható."
msgid "Specify the path to the MiniSSDPd socket."
msgstr "A MiniSSDPd socket elérési útját határozza meg."
diff --git a/applications/luci-app-minidlna/po/it/minidlna.po b/applications/luci-app-minidlna/po/it/minidlna.po
index 1c0abc6722..b118916f6a 100644
--- a/applications/luci-app-minidlna/po/it/minidlna.po
+++ b/applications/luci-app-minidlna/po/it/minidlna.po
@@ -17,6 +17,9 @@ msgstr "Opzioni avanzate"
msgid "Album art names:"
msgstr "Nome Copertina Album:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "Numero modello annunciato:"
@@ -149,12 +152,12 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"Impostare la cartella che si desidera sottoporre a scansione. Se si desidera "
"limitare la directory per un tipo di contenuto specifico, è possibile "
"anteporre il tipo ('A' per l'audio, 'V' per video, 'P' per le immagini), "
-"seguito da una virgola, nella cartella (es. media_dir = A,/mnt/media/Music). "
+"seguito da una virgola, nella cartella (es. A,/mnt/media/Music). "
"Cartelle multiple possono essere specificate."
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/ja/minidlna.po b/applications/luci-app-minidlna/po/ja/minidlna.po
index 4cfc3385b9..66bc503a24 100644
--- a/applications/luci-app-minidlna/po/ja/minidlna.po
+++ b/applications/luci-app-minidlna/po/ja/minidlna.po
@@ -17,6 +17,9 @@ msgstr "詳細設定"
msgid "Album art names:"
msgstr "アルバムアートワーク・ファイル名:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "通知するモデル番号:"
@@ -143,12 +146,12 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"miniDLNA がスキャンするディレクトリを設定します。ディレクトリを特定のコンテン"
"ツに制限したい場合、タイプをパスのはじめに付け、コンマ記号で区切ることで設定"
"できます ('A'=オーディオ \"audio\", 'V'=ビデオ \"video\", 'P'=写真 \"images"
-"\", 例: media_dir=A,/mnt/media/Music)。また、このオプションは複数のディレクト"
+"\", 例: A,/mnt/media/Music)。また、このオプションは複数のディレクト"
"リを登録可能です。"
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/ms/minidlna.po b/applications/luci-app-minidlna/po/ms/minidlna.po
index 8df98a821f..a9f875e1bb 100644
--- a/applications/luci-app-minidlna/po/ms/minidlna.po
+++ b/applications/luci-app-minidlna/po/ms/minidlna.po
@@ -13,6 +13,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -127,7 +130,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/no/minidlna.po b/applications/luci-app-minidlna/po/no/minidlna.po
index 4b24712f74..4d70e39c5b 100644
--- a/applications/luci-app-minidlna/po/no/minidlna.po
+++ b/applications/luci-app-minidlna/po/no/minidlna.po
@@ -17,6 +17,9 @@ msgstr "Avanserte Innstillinger"
msgid "Album art names:"
msgstr "Albumbilder navn:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "Annonsert modellnummer:"
@@ -147,12 +150,12 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"Her kan en velge den katalogen som blir skannet. Om du ønsker å begrense "
"katalogen til en spesifikk innholdstype kan sette en bokstav foran ('A' for "
"lyd, 'V' for video, 'P' for bilder), etterfulgt av et komma og katalogen. "
-"(f.eks media_dir=A,/mnt/media/Musikk). Flere kataloger kan brukes."
+"(f.eks A,/mnt/media/Musikk). Flere kataloger kan brukes."
msgid "Specify the path to the MiniSSDPd socket."
msgstr "Angi banen til MiniSSDPd socketen."
diff --git a/applications/luci-app-minidlna/po/pl/minidlna.po b/applications/luci-app-minidlna/po/pl/minidlna.po
index b4a8a6f676..6215dc8f15 100644
--- a/applications/luci-app-minidlna/po/pl/minidlna.po
+++ b/applications/luci-app-minidlna/po/pl/minidlna.po
@@ -18,6 +18,9 @@ msgstr "Ustawienia zaawansowane"
msgid "Album art names:"
msgstr "Nazwy okładek albumów:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "Rozgłaszany model:"
@@ -146,11 +149,11 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"Ustaw tu folder, który chcesz skanować. Jeśli chcesz ograniczyć folder do "
"konkretnego typu zawartości, możesz poprzedzić ścieżkę typem (\"A\" dla "
-"audio, \"V\" dla wideo, \"P\" dla obrazów) i przecinkiem (np media_dir=A,/"
+"audio, \"V\" dla wideo, \"P\" dla obrazów) i przecinkiem (np A,/"
"mnt/media/Muzyka). Możesz podać kilka folderów."
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/pt-br/minidlna.po b/applications/luci-app-minidlna/po/pt-br/minidlna.po
index 3d53abd466..29c7a7ca15 100644
--- a/applications/luci-app-minidlna/po/pt-br/minidlna.po
+++ b/applications/luci-app-minidlna/po/pt-br/minidlna.po
@@ -14,6 +14,9 @@ msgstr "Configuração Avançada"
msgid "Album art names:"
msgstr "Nomes do Álbum artistico: "
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "numero de modelo anunciado:"
@@ -148,12 +151,12 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"Defina esta opção para o diretório que você deseja verificar. Se você quiser "
"restringir o diretório para um tipo específico de conteúdo, você pode "
"prefixar o tipo ('A' para áudio, 'V' para o vídeo, 'P' para imagens), "
-"seguido por uma vírgula, para o diretório (por exemplo media_dir = A, / "
+"seguido por uma vírgula, para o diretório (por exemplo A, / "
"mnt / media / Música). Vários diretórios podem ser especificados."
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/pt/minidlna.po b/applications/luci-app-minidlna/po/pt/minidlna.po
index 96132cdf61..95d6b32666 100644
--- a/applications/luci-app-minidlna/po/pt/minidlna.po
+++ b/applications/luci-app-minidlna/po/pt/minidlna.po
@@ -17,6 +17,9 @@ msgstr "Definições Avançadas"
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "Número modelo anunciado:"
@@ -135,7 +138,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/ro/minidlna.po b/applications/luci-app-minidlna/po/ro/minidlna.po
index cba5fe6a7a..786ac98489 100644
--- a/applications/luci-app-minidlna/po/ro/minidlna.po
+++ b/applications/luci-app-minidlna/po/ro/minidlna.po
@@ -18,6 +18,9 @@ msgstr "Setări avansate"
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -132,7 +135,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/ru/minidlna.po b/applications/luci-app-minidlna/po/ru/minidlna.po
index 539e8ca03d..893fc71a89 100644
--- a/applications/luci-app-minidlna/po/ru/minidlna.po
+++ b/applications/luci-app-minidlna/po/ru/minidlna.po
@@ -20,6 +20,9 @@ msgstr "Расширенные настройки"
msgid "Album art names:"
msgstr "Имена обложек альбома:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "Номер модели:"
@@ -148,12 +151,12 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"Директории, которые необходимо сканировать. Если вы хотите установить "
"ограничение на определённый тип содержимого в директории, вы можете написать "
"тип ('A' для аудио, 'V' для видео, 'P' для изображений) перед путём к "
-"директории, за которым следует запятая (напр. media_dir=A,/mnt/media/Music). "
+"директории, за которым следует запятая (напр. A,/mnt/media/Music). "
"Может быть указано несколько директорий."
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/sk/minidlna.po b/applications/luci-app-minidlna/po/sk/minidlna.po
index 19c3e536d4..0ea592e249 100644
--- a/applications/luci-app-minidlna/po/sk/minidlna.po
+++ b/applications/luci-app-minidlna/po/sk/minidlna.po
@@ -14,6 +14,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -128,7 +131,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/sv/minidlna.po b/applications/luci-app-minidlna/po/sv/minidlna.po
index 51a3f3a63f..169d55ab6b 100644
--- a/applications/luci-app-minidlna/po/sv/minidlna.po
+++ b/applications/luci-app-minidlna/po/sv/minidlna.po
@@ -15,6 +15,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -129,7 +132,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/templates/minidlna.pot b/applications/luci-app-minidlna/po/templates/minidlna.pot
index 2b35d1e716..d5658249d0 100644
--- a/applications/luci-app-minidlna/po/templates/minidlna.pot
+++ b/applications/luci-app-minidlna/po/templates/minidlna.pot
@@ -7,6 +7,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgstr ""
+
msgid "Announced model number:"
msgstr ""
@@ -121,7 +124,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/tr/minidlna.po b/applications/luci-app-minidlna/po/tr/minidlna.po
index 070d64c4e8..973dbd0791 100644
--- a/applications/luci-app-minidlna/po/tr/minidlna.po
+++ b/applications/luci-app-minidlna/po/tr/minidlna.po
@@ -14,6 +14,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -128,7 +131,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/uk/minidlna.po b/applications/luci-app-minidlna/po/uk/minidlna.po
index 7df732fb0f..8bf5160f37 100644
--- a/applications/luci-app-minidlna/po/uk/minidlna.po
+++ b/applications/luci-app-minidlna/po/uk/minidlna.po
@@ -15,6 +15,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -129,7 +132,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/vi/minidlna.po b/applications/luci-app-minidlna/po/vi/minidlna.po
index 070d64c4e8..973dbd0791 100644
--- a/applications/luci-app-minidlna/po/vi/minidlna.po
+++ b/applications/luci-app-minidlna/po/vi/minidlna.po
@@ -14,6 +14,9 @@ msgstr ""
msgid "Album art names:"
msgstr ""
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr ""
@@ -128,7 +131,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-minidlna/po/zh-cn/minidlna.po b/applications/luci-app-minidlna/po/zh-cn/minidlna.po
index 998975689f..393b116e34 100644
--- a/applications/luci-app-minidlna/po/zh-cn/minidlna.po
+++ b/applications/luci-app-minidlna/po/zh-cn/minidlna.po
@@ -17,6 +17,9 @@ msgstr "高级设置"
msgid "Album art names:"
msgstr "专辑封面名称:"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "通告型号:"
@@ -129,12 +132,12 @@ msgstr ""
"设定严格遵守DLNA标准。这将允许服务器端降小大尺寸JPEG图像,在(至少)索尼DLNA"
"的产品这可能会降低JPEG服务性能。"
-# 如果写成media_dir=A,/mnt/media/Music,uci会报错。实际上应该是A,/mnt/media/Music,这样生成的minidlna.conf刚好是media_dir=A,/mnt/media/Music
+# 如果写成A,/mnt/media/Music,uci会报错。实际上应该是A,/mnt/media/Music,这样生成的minidlna.conf刚好是A,/mnt/media/Music
msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
"设置要扫描的目录。如果你想限制特定内容类型的目录,你可以在前面加上类型(用于音频'A','V'视频,'P'图片),其次是用逗号分隔的目录(如A,/mnt"
"/媒体/音乐)。可以指定多个目录。"
diff --git a/applications/luci-app-minidlna/po/zh-tw/minidlna.po b/applications/luci-app-minidlna/po/zh-tw/minidlna.po
index 1af3280993..5dad93e583 100644
--- a/applications/luci-app-minidlna/po/zh-tw/minidlna.po
+++ b/applications/luci-app-minidlna/po/zh-tw/minidlna.po
@@ -17,6 +17,9 @@ msgstr "進階設定值"
msgid "Album art names:"
msgstr "專輯名稱"
+msgid "Allow wide links:"
+msgid ""
+
msgid "Announced model number:"
msgstr "已宣告型號數量"
@@ -131,7 +134,7 @@ msgid ""
"Set this to the directory you want scanned. If you want to restrict the "
"directory to a specific content type, you can prepend the type ('A' for "
"audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
msgstr ""
msgid "Specify the path to the MiniSSDPd socket."
diff --git a/applications/luci-app-mwan3/luasrc/controller/mwan3.lua b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua
index ca39c9bf30..c24beda281 100644
--- a/applications/luci-app-mwan3/luasrc/controller/mwan3.lua
+++ b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua
@@ -29,6 +29,8 @@ function index()
entry({"admin", "network", "mwan", "configuration"},
alias("admin", "network", "mwan", "configuration", "interface"),
_("Configuration"), 20)
+ entry({"admin", "network", "mwan", "configuration", "globals"},
+ cbi("mwan/globalsconfig"),_("Globals"), 5).leaf = true
entry({"admin", "network", "mwan", "configuration", "interface"},
arcombine(cbi("mwan/interface"), cbi("mwan/interfaceconfig")),
_("Interfaces"), 10).leaf = true
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua
index 0e7b8b11d0..1b97080216 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua
@@ -1,55 +1,40 @@
-- ------ hotplug script configuration ------ --
fs = require "nixio.fs"
-sys = require "luci.sys"
ut = require "luci.util"
-script = "/etc/hotplug.d/iface/16-mwancustom"
-scriptBackup = "/etc/hotplug.d/iface/16-mwancustombak"
-
-if luci.http.formvalue("cbid.luci.1._restorebak") then -- restore button has been clicked
- luci.http.redirect(luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript") .. "?restore=yes")
-elseif luci.http.formvalue("restore") == "yes" then -- restore script from backup
- os.execute("cp -f " .. scriptBackup .. " " .. script)
-end
-
+script = "/etc/mwan3.user"
m5 = SimpleForm("luci", nil)
m5:append(Template("mwan/advanced_hotplugscript")) -- highlight current tab
f = m5:section(SimpleSection, nil,
- translate("This section allows you to modify the contents of /etc/hotplug.d/iface/16-mwancustom<br />" ..
- "This is useful for running system commands and/or scripts based on interface ifup or ifdown hotplug events<br /><br />" ..
+ translate("This section allows you to modify the content of \"/etc/mwan3.user\".<br />" ..
+ "The file is also preserved during sysupgrade.<br />" ..
+ "<br />" ..
"Notes:<br />" ..
- "The first line of the script must be &#34;#!/bin/sh&#34; without quotes<br />" ..
- "Lines beginning with # are comments and are not executed<br /><br />" ..
- "Available variables:<br />" ..
- "$ACTION is the hotplug event (ifup, ifdown)<br />" ..
- "$INTERFACE is the interface name (wan1, wan2, etc.)<br />" ..
- "$DEVICE is the device name attached to the interface (eth0.1, eth1, etc.)"))
-
-
-restore = f:option(Button, "_restorebak", translate("Restore default hotplug script"))
- restore.inputtitle = translate("Restore...")
- restore.inputstyle = "apply"
+ "This file is interpreted as a shell script.<br />" ..
+ "The first line of the script must be &#34;#!/bin/sh&#34; without quotes.<br />" ..
+ "Lines beginning with # are comments and are not executed.<br />" ..
+ "Put your custom mwan3 action here, they will<br />" ..
+ "be executed with each netifd hotplug interface event<br />" ..
+ "on interfaces for which mwan3 is enabled.<br />" ..
+ "<br />" ..
+ "There are three main environment variables that are passed to this script.<br />" ..
+ "<br />" ..
+ "$ACTION Either \"ifup\" or \"ifdown\"<br />" ..
+ "$INTERFACE Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")<br />" ..
+ "$DEVICE Physical device name which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br />" ..
+ "<br />"))
t = f:option(TextValue, "lines")
t.rmempty = true
t.rows = 20
-
function t.cfgvalue()
- local hps = fs.readfile(script)
- if not hps or hps == "" then -- if script does not exist or is blank restore from backup
- sys.call("cp -f " .. scriptBackup .. " " .. script)
- return fs.readfile(script)
- else
- return hps
- end
+ return fs.readfile(script)
end
-
function t.write(self, section, data) -- format and write new data to script
return fs.writefile(script, ut.trim(data:gsub("\r\n", "\n")) .. "\n")
end
-
return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua
new file mode 100644
index 0000000000..919ed46cd4
--- /dev/null
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua
@@ -0,0 +1,40 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2017 Florian Eckert <fe@dev.tdt.de>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+]]--
+
+local net = require "luci.model.network".init()
+
+m = Map("mwan3")
+
+s = m:section(NamedSection, "globals", "globals", translate("Globals mwan3 options"))
+n = s:option(ListValue, "local_source",
+ translate("Local source interface"),
+ translate("Use the IP address of this interface as source IP address for traffic initiated by the router itself"))
+n:value("none")
+n.default = "none"
+for _, net in ipairs(net:get_networks()) do
+ if net:name() ~= "loopback" then
+ n:value(net:name())
+ end
+end
+n.rmempty = false
+
+mask = s:option(
+ Value,
+ "mmx_mask",
+ translate("Firewall mask"),
+ translate("Enter value in hex, starting with <code>0x</code>"))
+mask.datatype = "hex(4)"
+mask.default = "0xff00"
+
+return m
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua
index aeabc63616..c8c122ad48 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua
@@ -147,6 +147,16 @@ track_ip = mwan_interface:option(DummyValue, "track_ip", translate("Tracking IP"
end
end
+track_method = mwan_interface:option(DummyValue, "track_method", translate("Tracking method"))
+ track_method.rawhtml = true
+ function track_method.cfgvalue(self, s)
+ if tracked then
+ return self.map:get(s, "track_method") or "&#8212;"
+ else
+ return "&#8212;"
+ end
+ end
+
reliability = mwan_interface:option(DummyValue, "reliability", translate("Tracking reliability"))
reliability.rawhtml = true
function reliability.cfgvalue(self, s)
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua
index 2b46376399..0318091d6c 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua
@@ -102,6 +102,12 @@ enabled = mwan_interface:option(ListValue, "enabled", translate("Enabled"))
enabled:value("1", translate("Yes"))
enabled:value("0", translate("No"))
+initial_state = mwan_interface:option(ListValue, "initial_state", translate("Initial state"),
+ translate("Expect interface state on up event"))
+ initial_state.default = "online"
+ initial_state:value("online", translate("Online"))
+ initial_state:value("offline", translate("Offline"))
+
family = mwan_interface:option(ListValue, "family", translate("Internet Protocol"))
family.default = "ipv4"
family:value("ipv4", translate("IPv4"))
@@ -111,6 +117,12 @@ track_ip = mwan_interface:option(DynamicList, "track_ip", translate("Tracking ho
translate("This hostname or IP address will be pinged to determine if the link is up or down. Leave blank to assume interface is always online"))
track_ip.datatype = "host"
+track_method = mwan_interface:option(ListValue, "track_method", translate("Tracking method"))
+ track_method.default = "ping"
+ track_method:value("ping")
+ track_method:value("arping")
+ track_method:value("httping")
+
reliability = mwan_interface:option(Value, "reliability", translate("Tracking reliability"),
translate("Acceptable values: 1-100. This many Tracking IP addresses must respond for the link to be deemed up"))
reliability.datatype = "range(1, 100)"
@@ -183,6 +195,10 @@ failure = mwan_interface:option(Value, "failure_interval", translate("Failure in
failure:value("1800", translatef("%d minutes", 30))
failure:value("3600", translatef("%d hour", 1))
+keep_failure = mwan_interface:option(Flag, "keep_failure_interval", translate("Keep failure interval"),
+ translate("Keep ping failure interval during failure state"))
+ keep_failure.default = keep_failure.disabled
+
recovery = mwan_interface:option(Value, "recovery_interval", translate("Recovery interval"),
translate("Ping interval during failure recovering"))
recovery.default = "5"
diff --git a/applications/luci-app-mwan3/po/ja/mwan3.po b/applications/luci-app-mwan3/po/ja/mwan3.po
index f6a70c3561..72c5dddab9 100644
--- a/applications/luci-app-mwan3/po/ja/mwan3.po
+++ b/applications/luci-app-mwan3/po/ja/mwan3.po
@@ -88,21 +88,36 @@ msgstr ""
msgid "Enabled"
msgstr "有効"
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "<code>0x</code> で始まる16進数の値を入力してください。"
+
msgid "Error collecting troubleshooting information"
msgstr "トラブルシューティング情報の収集エラー"
msgid "Errors"
msgstr "エラー"
+msgid "Expect interface state on up event"
+msgstr "Up イベント時に予想されるインターフェースの状態です。"
+
msgid "Failure interval"
msgstr "障害検出 インターバル"
+msgid "Firewall mask"
+msgstr "ファイアウォール マスク"
+
msgid "Flush conntrack table"
msgstr ""
msgid "Flush global firewall conntrack table on interface events"
msgstr ""
+msgid "Globals"
+msgstr "全般"
+
+msgid "Globals mwan3 options"
+msgstr "MWAN3 全般オプション"
+
msgid "Hotplug Script"
msgstr "ホットプラグ スクリプト"
@@ -121,6 +136,9 @@ msgstr "IPv4"
msgid "IPv6"
msgstr "IPv6"
+msgid "Initial state"
+msgstr "初期状態"
+
msgid "Interface"
msgstr "インターフェース"
@@ -144,6 +162,12 @@ msgstr "インターフェース"
msgid "Internet Protocol"
msgstr "インターネット プロトコル"
+msgid "Keep failure interval"
+msgstr ""
+
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
msgstr "直近の MWAN システムログ(50行)です。一番上が最新の行です:"
@@ -156,6 +180,9 @@ msgstr "負荷分散"
msgid "Loading"
msgstr "読込中"
+msgid "Local source interface"
+msgstr ""
+
msgid "MWAN Config"
msgstr "MWAN 設定"
@@ -277,6 +304,9 @@ msgstr "プロトコルが設定されていません"
msgid "Offline"
msgstr "オフライン"
+msgid "Online"
+msgstr "オンライン"
+
msgid "Online (tracking active)"
msgstr "オンライン(追跡実行中)"
@@ -296,7 +326,7 @@ msgid "Ping interval"
msgstr "Ping インターバル"
msgid "Ping interval during failure detection"
-msgstr "障害検出動作中の Ping 実行間隔です。"
+msgstr "障害検出中の Ping 実行間隔です。"
msgid "Ping interval during failure recovering"
msgstr "障害復旧中の Ping 実行間隔です。"
@@ -346,12 +376,6 @@ msgstr "障害復旧 インターバル"
msgid "Restart MWAN"
msgstr "MWAN の再起動"
-msgid "Restore default hotplug script"
-msgstr "デフォルトのホットプラグ スクリプトの復元"
-
-msgid "Restore..."
-msgstr "復元..."
-
msgid "Rule"
msgstr "ルール"
@@ -419,6 +443,31 @@ msgstr ""
"に対して Ping の送信が行われます。常にオンラインとする場合、空欄のままにしま"
"す。"
+msgid ""
+"This section allows you to modify the content of \"/etc/mwan3.user\".<br /"
+">The file is also preserved during sysupgrade.<br /><br />Notes:<br />This "
+"file is interpreted as a shell script.<br />The first line of the script "
+"must be &#34;#!/bin/sh&#34; without quotes.<br />Lines beginning with # are "
+"comments and are not executed.<br />Put your custom mwan3 action here, they "
+"will<br />be executed with each netifd hotplug interface event<br />on "
+"interfaces for which mwan3 is enabled.<br /><br />There are three main "
+"environment variables that are passed to this script.<br /><br />$ACTION "
+"Either \"ifup\" or \"ifdown\"<br />$INTERFACE Name of the interface which "
+"went up or down (e.g. \"wan\" or \"wwan\")<br />$DEVICE Physical device name "
+"which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br /><br />"
+msgstr ""
+"このセクションでは、 \"/etc/mwan3.user\" の内容を変更することができます。"
+"<br />このファイルは、 sysupgrade 時に保持されます。<br /><br />注意: <br />"
+"このファイルは、シェルスクリプトとして解釈されます。<br />スクリプトの1行目"
+"は、&#34;#!bin/sh&#34; である必要があります(クォーテーション不要)。<br /># "
+"で始まる行はコメントであり、実行されません。<br />mwan3 のカスタム動作をここ"
+"に入力してください。これらは、 mwan3 が有効なインターフェースの<br />netifd "
+"ホットプラグ インターフェース イベント毎に実行されます。<br /><br />主に3つの"
+"環境変数が利用可能です。<br /><br />$ACTION - \"ifup\" および \"ifdown\"<br /"
+">$INTERFACE - Up または Down が行われたインターフェース名(例: \"wan\" や "
+"\"wwan\")<br />$DEVICE - Up または Down が行われた物理デバイス名(例: "
+"\"eth0\" や \"wwan0\")<br /><br />"
+
msgid "This section allows you to modify the contents of /etc/config/mwan3"
msgstr ""
"このセクションでは、 /etc/config/mwan3 の内容を変更することができます。"
@@ -431,32 +480,15 @@ msgid "This section allows you to modify the contents of /etc/config/wireless"
msgstr ""
"このセクションでは、 /etc/config/wireless の内容を変更することができます。"
-msgid ""
-"This section allows you to modify the contents of /etc/hotplug.d/iface/16-"
-"mwancustom<br />This is useful for running system commands and/or scripts "
-"based on interface ifup or ifdown hotplug events<br /><br />Notes:<br />The "
-"first line of the script must be &#34;#!/bin/sh&#34; without quotes<br /"
-">Lines beginning with # are comments and are not executed<br /><br /"
-">Available variables:<br />$ACTION is the hotplug event (ifup, ifdown)<br />"
-"$INTERFACE is the interface name (wan1, wan2, etc.)<br />$DEVICE is the "
-"device name attached to the interface (eth0.1, eth1, etc.)"
-msgstr ""
-"このセクションでは、 /etc/hotplug.d/iface/16-mwancustom の内容を変更すること"
-"ができます。<br />これは、インターフェースの ifup または ifdown ホットプラグ "
-"イベント時にシステムコマンドまたはスクリプト、もしくはその両方を実行すること"
-"に役立ちます。<br /><br />注意:<br />スクリプトの1行目は、&#34;#!bin/sh&#34; "
-"である必要があります(クオーテーション不要)。<br /># で始まる行はコメントと"
-"して認識され、実行されません。<br /><br />利用可能な変数:<br />$ACTION - ホッ"
-"トプラグ イベント (ifup, ifdown)<br />$INTERFACE - インターフェース名(wan1, "
-"wan2, その他)<br />$DEVICE - インターフェースにアタッチされたデバイスの名前"
-"(eth0.1, eth1, その他)"
-
msgid "Tracking IP"
msgstr "追跡 IP"
msgid "Tracking hostname or IP address"
msgstr "追跡ホスト名または IP アドレス"
+msgid "Tracking method"
+msgstr "追跡方式"
+
msgid "Tracking reliability"
msgstr "追跡の信頼性"
@@ -477,6 +509,13 @@ msgstr "トラブルシューティング"
msgid "Troubleshooting Data"
msgstr "トラブルシューティング データ"
+msgid ""
+"Use the IP address of this interface as source IP address for traffic "
+"initiated by the router itself"
+msgstr ""
+"ルーター自身によって発生するトラフィックのアクセス元 IP アドレスとして、この"
+"インターフェースの IP アドレスが使用されます。"
+
msgid "View the contents of /etc/protocols for protocol descriptions"
msgstr "プロトコルの説明については、 /etc/protocols の内容を確認してください。"
@@ -624,10 +663,3 @@ msgstr "停止"
msgid "unreachable (reject)"
msgstr "unreachable (reject)"
-
-#~ msgid ""
-#~ "This IP address will be pinged to dermine if the link is up or down. "
-#~ "Leave blank to assume interface is always online"
-#~ msgstr ""
-#~ "これらは、リンクの Up または Down を判定するために Ping が送信されるIP ア"
-#~ "ドレスです。常にオンラインとする場合、空欄のままにします。"
diff --git a/applications/luci-app-mwan3/po/templates/mwan3.pot b/applications/luci-app-mwan3/po/templates/mwan3.pot
index 3d25e844ac..e63d8adc2e 100644
--- a/applications/luci-app-mwan3/po/templates/mwan3.pot
+++ b/applications/luci-app-mwan3/po/templates/mwan3.pot
@@ -73,21 +73,36 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
msgid "Error collecting troubleshooting information"
msgstr ""
msgid "Errors"
msgstr ""
+msgid "Expect interface state on up event"
+msgstr ""
+
msgid "Failure interval"
msgstr ""
+msgid "Firewall mask"
+msgstr ""
+
msgid "Flush conntrack table"
msgstr ""
msgid "Flush global firewall conntrack table on interface events"
msgstr ""
+msgid "Globals"
+msgstr ""
+
+msgid "Globals mwan3 options"
+msgstr ""
+
msgid "Hotplug Script"
msgstr ""
@@ -106,6 +121,9 @@ msgstr ""
msgid "IPv6"
msgstr ""
+msgid "Initial state"
+msgstr ""
+
msgid "Interface"
msgstr ""
@@ -127,6 +145,12 @@ msgstr ""
msgid "Internet Protocol"
msgstr ""
+msgid "Keep failure interval"
+msgstr ""
+
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
msgstr ""
@@ -139,6 +163,9 @@ msgstr ""
msgid "Loading"
msgstr ""
+msgid "Local source interface"
+msgstr ""
+
msgid "MWAN Config"
msgstr ""
@@ -245,6 +272,9 @@ msgstr ""
msgid "Offline"
msgstr ""
+msgid "Online"
+msgstr ""
+
msgid "Online (tracking active)"
msgstr ""
@@ -306,12 +336,6 @@ msgstr ""
msgid "Restart MWAN"
msgstr ""
-msgid "Restore default hotplug script"
-msgstr ""
-
-msgid "Restore..."
-msgstr ""
-
msgid "Rule"
msgstr ""
@@ -365,6 +389,20 @@ msgid ""
"down. Leave blank to assume interface is always online"
msgstr ""
+msgid ""
+"This section allows you to modify the content of \"/etc/mwan3.user\".<br /"
+">The file is also preserved during sysupgrade.<br /><br />Notes:<br />This "
+"file is interpreted as a shell script.<br />The first line of the script "
+"must be &#34;#!/bin/sh&#34; without quotes.<br />Lines beginning with # are "
+"comments and are not executed.<br />Put your custom mwan3 action here, they "
+"will<br />be executed with each netifd hotplug interface event<br />on "
+"interfaces for which mwan3 is enabled.<br /><br />There are three main "
+"environment variables that are passed to this script.<br /><br />$ACTION "
+"Either \"ifup\" or \"ifdown\"<br />$INTERFACE Name of the interface which "
+"went up or down (e.g. \"wan\" or \"wwan\")<br />$DEVICE Physical device name "
+"which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br /><br />"
+msgstr ""
+
msgid "This section allows you to modify the contents of /etc/config/mwan3"
msgstr ""
@@ -374,23 +412,15 @@ msgstr ""
msgid "This section allows you to modify the contents of /etc/config/wireless"
msgstr ""
-msgid ""
-"This section allows you to modify the contents of /etc/hotplug.d/iface/16-"
-"mwancustom<br />This is useful for running system commands and/or scripts "
-"based on interface ifup or ifdown hotplug events<br /><br />Notes:<br />The "
-"first line of the script must be &#34;#!/bin/sh&#34; without quotes<br /"
-">Lines beginning with # are comments and are not executed<br /><br /"
-">Available variables:<br />$ACTION is the hotplug event (ifup, ifdown)<br />"
-"$INTERFACE is the interface name (wan1, wan2, etc.)<br />$DEVICE is the "
-"device name attached to the interface (eth0.1, eth1, etc.)"
-msgstr ""
-
msgid "Tracking IP"
msgstr ""
msgid "Tracking hostname or IP address"
msgstr ""
+msgid "Tracking method"
+msgstr ""
+
msgid "Tracking reliability"
msgstr ""
@@ -408,6 +438,11 @@ msgstr ""
msgid "Troubleshooting Data"
msgstr ""
+msgid ""
+"Use the IP address of this interface as source IP address for traffic "
+"initiated by the router itself"
+msgstr ""
+
msgid "View the contents of /etc/protocols for protocol descriptions"
msgstr ""
diff --git a/applications/luci-app-mwan3/po/zh-cn/mwan3.po b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
index 1e0f34f088..b133e8b1d9 100644
--- a/applications/luci-app-mwan3/po/zh-cn/mwan3.po
+++ b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
@@ -76,21 +76,36 @@ msgstr "当 Ping 成功次数达到这个数值后,已经被认为离线的接
msgid "Enabled"
msgstr "启用"
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
msgid "Error collecting troubleshooting information"
msgstr "收集故障排除信息时出错"
msgid "Errors"
msgstr "错误"
+msgid "Expect interface state on up event"
+msgstr ""
+
msgid "Failure interval"
msgstr "故障检测间隔"
+msgid "Firewall mask"
+msgstr ""
+
msgid "Flush conntrack table"
msgstr "刷新连接跟踪表"
msgid "Flush global firewall conntrack table on interface events"
msgstr "在接口事件触发时刷新全局防火墙连接跟踪表"
+msgid "Globals"
+msgstr ""
+
+msgid "Globals mwan3 options"
+msgstr ""
+
msgid "Hotplug Script"
msgstr "Hotplug 脚本"
@@ -109,6 +124,9 @@ msgstr "IPv4"
msgid "IPv6"
msgstr "IPv6"
+msgid "Initial state"
+msgstr ""
+
msgid "Interface"
msgstr "接口"
@@ -130,6 +148,12 @@ msgstr "接口"
msgid "Internet Protocol"
msgstr "互联网协议"
+msgid "Keep failure interval"
+msgstr ""
+
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
msgstr "最近 50 条 MWAN 系统日志,最新条目排在顶部:"
@@ -142,6 +166,9 @@ msgstr "负载均衡"
msgid "Loading"
msgstr "载入中"
+msgid "Local source interface"
+msgstr ""
+
msgid "MWAN Config"
msgstr "MWAN 配置文件"
@@ -260,6 +287,9 @@ msgstr "未指定协议"
msgid "Offline"
msgstr "离线"
+msgid "Online"
+msgstr ""
+
msgid "Online (tracking active)"
msgstr "在线(追踪启用中)"
@@ -326,12 +356,6 @@ msgstr "故障恢复间隔"
msgid "Restart MWAN"
msgstr "重启 MWAN"
-msgid "Restore default hotplug script"
-msgstr "恢复默认的 hotplug 脚本"
-
-msgid "Restore..."
-msgstr "恢复..."
-
msgid "Rule"
msgstr "规则"
@@ -392,6 +416,20 @@ msgid ""
"down. Leave blank to assume interface is always online"
msgstr "通过 ping 此主机或 IP 地址来确定链路是否在线。留空则认为接口始终在线"
+msgid ""
+"This section allows you to modify the content of \"/etc/mwan3.user\".<br /"
+">The file is also preserved during sysupgrade.<br /><br />Notes:<br />This "
+"file is interpreted as a shell script.<br />The first line of the script "
+"must be &#34;#!/bin/sh&#34; without quotes.<br />Lines beginning with # are "
+"comments and are not executed.<br />Put your custom mwan3 action here, they "
+"will<br />be executed with each netifd hotplug interface event<br />on "
+"interfaces for which mwan3 is enabled.<br /><br />There are three main "
+"environment variables that are passed to this script.<br /><br />$ACTION "
+"Either \"ifup\" or \"ifdown\"<br />$INTERFACE Name of the interface which "
+"went up or down (e.g. \"wan\" or \"wwan\")<br />$DEVICE Physical device name "
+"which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br /><br />"
+msgstr ""
+
msgid "This section allows you to modify the contents of /etc/config/mwan3"
msgstr "这里允许你修改 /etc/config/mwan3 的内容"
@@ -401,29 +439,15 @@ msgstr "这里允许你修改 /etc/config/network 的内容"
msgid "This section allows you to modify the contents of /etc/config/wireless"
msgstr "这里允许你修改 /etc/config/wireless 的内容"
-msgid ""
-"This section allows you to modify the contents of /etc/hotplug.d/iface/16-"
-"mwancustom<br />This is useful for running system commands and/or scripts "
-"based on interface ifup or ifdown hotplug events<br /><br />Notes:<br />The "
-"first line of the script must be &#34;#!/bin/sh&#34; without quotes<br /"
-">Lines beginning with # are comments and are not executed<br /><br /"
-">Available variables:<br />$ACTION is the hotplug event (ifup, ifdown)<br />"
-"$INTERFACE is the interface name (wan1, wan2, etc.)<br />$DEVICE is the "
-"device name attached to the interface (eth0.1, eth1, etc.)"
-msgstr ""
-"这里允许你修改 /etc/hotplug.d/iface/16-mwancustom 的内容<br />这可以在接口 "
-"ifup 或 ifdown Hotplug 事件时运行系统命令或脚本<br /><br />注意:<br />脚本的"
-"第一行必须是 &#34;#!/bin/sh&#34; 不含引号<br />以#开头的行是注释,不会执行"
-"<br /><br />可用变量:<br />$ACTION 是 Hotplug 事件(ifup, ifdown)<br />"
-"$INTERFACE 是接口名称(wan1、wan2 等)<br />$DEVICE 是连接到接口的设备名称 "
-"(eth0.1、eth1 等)"
-
msgid "Tracking IP"
msgstr "追踪的 IP"
msgid "Tracking hostname or IP address"
msgstr "追踪的主机或 IP 地址"
+msgid "Tracking method"
+msgstr ""
+
msgid "Tracking reliability"
msgstr "追踪可靠性"
@@ -443,6 +467,11 @@ msgstr "故障排除"
msgid "Troubleshooting Data"
msgstr "故障排除数据"
+msgid ""
+"Use the IP address of this interface as source IP address for traffic "
+"initiated by the router itself"
+msgstr ""
+
msgid "View the contents of /etc/protocols for protocol descriptions"
msgstr "请查看 /etc/protocols 获取可选协议详情"
@@ -561,3 +590,26 @@ msgstr ""
msgid "unreachable (reject)"
msgstr "不可达(拒绝)"
+
+#~ msgid "Restore default hotplug script"
+#~ msgstr "恢复默认的 hotplug 脚本"
+
+#~ msgid "Restore..."
+#~ msgstr "恢复..."
+
+#~ msgid ""
+#~ "This section allows you to modify the contents of /etc/hotplug.d/iface/16-"
+#~ "mwancustom<br />This is useful for running system commands and/or scripts "
+#~ "based on interface ifup or ifdown hotplug events<br /><br />Notes:<br /"
+#~ ">The first line of the script must be &#34;#!/bin/sh&#34; without "
+#~ "quotes<br />Lines beginning with # are comments and are not executed<br /"
+#~ "><br />Available variables:<br />$ACTION is the hotplug event (ifup, "
+#~ "ifdown)<br />$INTERFACE is the interface name (wan1, wan2, etc.)<br />"
+#~ "$DEVICE is the device name attached to the interface (eth0.1, eth1, etc.)"
+#~ msgstr ""
+#~ "这里允许你修改 /etc/hotplug.d/iface/16-mwancustom 的内容<br />这可以在接"
+#~ "口 ifup 或 ifdown Hotplug 事件时运行系统命令或脚本<br /><br />注意:<br />"
+#~ "脚本的第一行必须是 &#34;#!/bin/sh&#34; 不含引号<br />以#开头的行是注释,"
+#~ "不会执行<br /><br />可用变量:<br />$ACTION 是 Hotplug 事件(ifup, ifdown)"
+#~ "<br />$INTERFACE 是接口名称(wan1、wan2 等)<br />$DEVICE 是连接到接口的设"
+#~ "备名称 (eth0.1、eth1 等)"
diff --git a/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3 b/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3
index ff9a229edd..50c65ad678 100755
--- a/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3
+++ b/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3
@@ -8,6 +8,13 @@ uci -q batch <<-EOF >/dev/null
commit ucitrack
EOF
+uci -q get mwan3.globals >/dev/null || {
+ uci -q add mwan3 globals >/dev/null
+ uci -q rename mwan3.@globals[-1]="globals" >/dev/null
+ uci -q set mwan3.globals.local_source="none" >/dev/null
+ uci commit mwan3
+}
+
# remove LuCI cache
rm -rf /tmp/luci-indexcache /tmp/luci-modulecache
diff --git a/applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm b/applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm
index 7e85acefb3..932c8849a7 100644
--- a/applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm
+++ b/applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm
@@ -900,14 +900,14 @@ function bubbleDismiss()
</div>
</div>
-<hr>
+<hr />
<p>
<%:Select accounting period:%>
<select id="nlbw.period" style="display:none"></select>
</p>
-<hr>
+<hr />
<ul class="cbi-tabmenu">
<li id="tab.nlbw.traffic" class="cbi-tab"><a href="#" onclick="return switchTab('traffic')"><%:Traffic Distribution%></a></li>
diff --git a/applications/luci-app-nlbwmon/po/zh-cn/nlbwmon.po b/applications/luci-app-nlbwmon/po/zh-cn/nlbwmon.po
new file mode 100644
index 0000000000..54fb3f6498
--- /dev/null
+++ b/applications/luci-app-nlbwmon/po/zh-cn/nlbwmon.po
@@ -0,0 +1,366 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\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 - 每月的第一天重新开始"
+
+msgid "10m - frequent commits at the expense of flash wear"
+msgstr "10m - 频繁提交,闪存损耗的开销也增大"
+
+msgid "12h - compromise between risk of data loss and flash wear"
+msgstr "12h - 平衡统计数据丢失的风险以及闪存使用寿命"
+
+msgid "24h - least flash wear at the expense of data loss risk"
+msgstr "24h - 以数据丢失风险的代价换取最小的闪存损耗"
+
+msgid "30s - refresh twice per minute for reasonably current stats"
+msgstr "30s - 每分钟刷新二次以获得较准确的当前统计值"
+
+msgid "5m - rarely refresh to avoid frequently clearing conntrack counters"
+msgstr "5m - 较少刷新以避免频繁清除连接跟踪计数器"
+
+msgid "60s - commit minutely, useful for non-flash storage"
+msgstr "60s - 每分钟提交,适用于非闪存类型存储"
+
+msgid "<big id=\"conn-total\">0</big> connections"
+msgstr "连接:<big id=\"conn-total\">0</big>"
+
+msgid "<big id=\"host-total\">0</big> hosts"
+msgstr "主机:<big id=\"host-total\">0</big>"
+
+msgid "<big id=\"ipv6-hosts\">0%</big> IPv6 support rate among hosts"
+msgstr "支持 IPv6 的主机比例:<big id=\"ipv6-hosts\">0%</big>"
+
+msgid "<big id=\"ipv6-rx\">0B</big> total IPv6 download"
+msgstr "IPv6 总下载量:<big id=\"ipv6-rx\">0B</big>"
+
+msgid "<big id=\"ipv6-share\">0%</big> of the total traffic is IPv6"
+msgstr "IPv6 流量比例:<big id=\"ipv6-share\">0%</big>"
+
+msgid "<big id=\"ipv6-tx\">0B</big> total IPv6 upload"
+msgstr "IPv6 总上传量:<big id=\"ipv6-tx\">0B</big>"
+
+msgid "<big id=\"layer7-most-conn\">0</big> cause the most connections"
+msgstr "<big id=\"layer7-most-conn\">0</big> 是连接数最多的协议"
+
+msgid "<big id=\"layer7-most-rx\">0</big> cause the most download"
+msgstr "<big id=\"layer7-most-rx\">0</big> 是下载量最大的协议"
+
+msgid "<big id=\"layer7-most-tx\">0</big> cause the most upload"
+msgstr "<big id=\"layer7-most-tx\">0</big> 是上传量最大的协议"
+
+msgid "<big id=\"layer7-total\">0</big> different application protocols"
+msgstr "<big id=\"layer7-total\">0</big> 种不同的应用层协议"
+
+msgid "<big id=\"rx-total\">0</big> download"
+msgstr "下载:<big id=\"rx-total\">0</big>"
+
+msgid "<big id=\"tx-total\">0</big> upload"
+msgstr "上传:<big id=\"tx-total\">0</big>"
+
+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!"
+"<br /><strong><a href=\"%s\">Download backup</a></strong>."
+msgstr ""
+"更改统计周期类型会使现有数据库无效!<br /><strong><a href=\"%s\">下载备份</"
+"a></strong>."
+
+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 天。选择“固定周"
+"期”来设置从给定日期开始每 N 天重启统计周期。"
+
+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 ""
+"每个月重启统计周期的日期。使用负数表示从月底开始计算,例如:\"-5\" 可以表"
+"示 7 月份的 27 号或者 2 月份的 24 号。"
+
+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: <big id=\"bubble-hostname\">example.org</big>"
+msgstr "主机名:<big id=\"bubble-hostname\">example.org</big>"
+
+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 "从 netlink 信息中刷新“已建立连接”的流量计数器的间隔时间。"
+
+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 "网络带宽监视器"
+
+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 ""
+"协议映射用于区分流量类型,每行一条。第一个值指定 IP 协议类型,第二个值是"
+"端口号,第三个值是映射的协议名称。"
+
+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 ""
+"网络带宽监视器(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 "上传(字节 / 数据包)"
+
+msgid "Upload (Bytes / Packets)"
+msgstr "上传(字节 / 数据包)"
+
+msgid "Upload / Application"
+msgstr "上传 / 应用层协议"
+
+msgid "Vendor: <big id=\"bubble-vendor\">Example Corp.</big>"
+msgstr "供应商: <big id=\"bubble-vendor\">Example Corp.</big>"
+
+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-noddos/Makefile b/applications/luci-app-noddos/Makefile
new file mode 100644
index 0000000000..4c2b9044a9
--- /dev/null
+++ b/applications/luci-app-noddos/Makefile
@@ -0,0 +1,18 @@
+# Copyright (C) 2017 Steven Hessing (steven.hessing@gmail.com)
+# Based on initial implementation by Stan Grishin (stangri@melmac.net)
+# This is free software, licensed under the GNU General Public License v3.
+
+include $(TOPDIR)/rules.mk
+
+PKG_LICENSE:=GPLv3
+PKG_MAINTAINER:=Steven Hessing <steven.hessing@gmail.com>
+
+LUCI_TITLE:=Noddos Service Web UI
+LUCI_DESCRIPTION:=Provides Web UI for Noddos service.
+LUCI_DEPENDS:=+luci +noddos
+LUCI_PKGARCH:=all
+PKG_RELEASE:=1
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-noddos/htdocs/cgi-bin/clientdetails b/applications/luci-app-noddos/htdocs/cgi-bin/clientdetails
new file mode 100755
index 0000000000..6ff4ce59f2
--- /dev/null
+++ b/applications/luci-app-noddos/htdocs/cgi-bin/clientdetails
@@ -0,0 +1,91 @@
+#!/usr/bin/lua
+
+-- clientdetails.lua : Provides details about client devices discovered by Noddos
+-- Copyright (C) 2017 Steven Hessing (steven.hessing@gmail.com)
+-- This is free software, licensed under the GNU General Public License v3.
+
+require "nixio.fs"
+
+print ("Content-type: Text/html\n")
+local info = os.getenv("QUERY_STRING")
+
+local params = {}
+local echo = {}
+
+function print_row(key)
+ print ("<tr><th>")
+ print (key)
+ print ("</th><td>")
+ print (device[key])
+ print ("</td></tr>")
+end
+
+for name, value in string.gmatch(info .. '&', '(.-)%=(.-)%&') do
+ value = string.gsub(value , '%+', ' ')
+ value = string.gsub(value , '%%(%x%x)', function(dpc)
+ return string.char(tonumber(dpc,16))
+ end )
+ params[name] = value
+
+ value = string.gsub(value, "%&", "&amp;")
+ value = string.gsub(value, "%<", "&lt;")
+ value = string.gsub(value, '%"', "&quot;")
+ echo[name] = value
+end
+
+device = {}
+profile = {}
+
+if nixio.fs.access("/var/lib/noddos/DeviceDump.json") then
+ io.input("/var/lib/noddos/DeviceDump.json")
+ local t = io.read("*all")
+ local json = require "luci.jsonc"
+ local devdump = json.parse(t)
+ for i, v in ipairs(devdump) do
+ if v.MacAddress == params["mac"] then
+ device = v
+ end
+ end
+ io.input("/var/lib/noddos/DeviceProfiles.json")
+ t = io.read("*all")
+ local temp = json.parse(t)
+ for i, v in ipairs(temp) do
+ if device.DeviceProfileUuid == v.DeviceProfileUuid then
+ profile = v
+ end
+ end
+end
+pagetop = [[
+<html>
+ <head>
+ <title>Client Details by Noddos</title>
+ <meta charset="utf-8">
+ <!--[if lt IE 9]><script src="/luci-static/bootstrap/html5.js?v=git-17.100.70571-29fabe2"></script><![endif]-->
+ <meta name="viewport" content="initial-scale=1.0">
+ <link rel="stylesheet" href="/luci-static/bootstrap/cascade.css?v=git-17.100.70571-29fabe2">
+ <link rel="stylesheet" media="only screen and (max-device-width: 854px)" href="/luci-static/bootstrap/mobile.css?v=git-17.100.70571-29fabe2" type="text/css" />
+ <link rel="shortcut icon" href="/luci-static/bootstrap/favicon.ico">
+ <script src="/luci-static/resources/xhr.js?v=git-17.100.70571-29fabe2"></script>
+ </head>
+ <body text=blue>
+ <h1>Client Details</h1>
+]]
+print (pagetop)
+
+if params["mac"] ~= nil then
+ print ("<table>")
+ for i, key in ipairs{"MacAddress", "Ipv4Address", "Ipv6Address", "DeviceProfileUuid", "DhcpHostname", "DhcpVendor", "SsdpFriendlyName", "SsdpLocation", "SsdpManufacturer", "SsdpModelName", "SsdpModelUrl", "SsdpSerialNumber", "SsdpServer","SsdpUserAgent", "MdnsDeviceUrl", "MdnsHw", "MdnsManufacturer", "MdnsModelName", "MdnsOs", "WsDiscoveryTypes", "WsDiscoveryXaddrs", "DnsQueries"} do
+ print_row(key)
+ end
+ print ("</table>")
+else
+ print ("no mac address specified")
+end
+
+pagebase = [[<br><br>
+Client Details by
+<a href=http://www.noddos.io>Noddos</a>
+</body></html>
+]]
+
+print (pagebase)
diff --git a/applications/luci-app-noddos/luasrc/controller/noddos.lua b/applications/luci-app-noddos/luasrc/controller/noddos.lua
new file mode 100644
index 0000000000..c45e24bc97
--- /dev/null
+++ b/applications/luci-app-noddos/luasrc/controller/noddos.lua
@@ -0,0 +1,10 @@
+-- Copyright 2017 Steven Hessing (steven.hessing@gmail.com)
+-- This is free software, licensed under the GNU General Public License v3.
+-- /usr/lib/lua/luci/controller/noddos.lua
+
+module("luci.controller.noddos", package.seeall)
+function index()
+ entry({"admin", "status", "noddos"}, template("noddos/clients"), _("Noddos Clients"), 3)
+ entry({"admin", "network", "noddos"}, cbi("noddos"), _("Noddos Client Tracking"), 55)
+end
+
diff --git a/applications/luci-app-noddos/luasrc/model/cbi/noddos.lua b/applications/luci-app-noddos/luasrc/model/cbi/noddos.lua
new file mode 100644
index 0000000000..3abb73bc66
--- /dev/null
+++ b/applications/luci-app-noddos/luasrc/model/cbi/noddos.lua
@@ -0,0 +1,46 @@
+-- Copyright 2017 Steven Hessing (steven.hessing@gmail.com)
+-- This is free software, licensed under the GNU General Public License v3.
+-- /usr/lib/lua/luci/model/cbi/noddos.lua
+
+m = Map("noddos", translate("Client Firewall"),
+ translate("Noddos controls traffic from the clients on your network to the Internet. " ..
+ "This helps protect your network, the bandwidth on your Internet connection and " ..
+ "the Internet"))
+
+s = m:section(TypedSection, "noddos", translate("Server Settings"))
+s.anonymous = true
+s.addremove = false
+
+s:option(Flag, "rfc1918",
+ translate("Private networks"),
+ translate("Report traffic to private networks (10/8, 172.16/12, 192.168/16, fd75:6b5d:352c:ed05::/64)")).default=false
+
+s:option(Flag, "upload",
+ translate("Upload anonimized traffic stats"),
+ translate("Uploading your statistics helps improving device recognition " ..
+ "and discovering hacked devices & botnets"))
+
+o = s:option(DynamicList, "whitelistipv4",
+ translate("Excluded IPv4 addresses"),
+ translate("Don't monitor these IPv4 addresses"))
+o.optional = true
+o.placeholder = "127.0.0.1 192.168.1.1"
+o.delimiter = " "
+o.datatype="list(ip4addr)"
+
+o = s:option(DynamicList, "whitelistipv6",
+ translate("Excluded IPv6 addresses"),
+ translate("Don't monitor these IPv6 addresses"))
+o.optional = true
+o.delimiter = " "
+o.datatype="list(ip6addr)"
+
+o = s:option(DynamicList, "whitelistmac",
+ translate("Excluded MAC addresses"),
+ translate("Don't monitor these MAC addresses"))
+o.optional = true
+o.delimiter = " "
+o.datatype="list(macaddr)"
+
+return m
+
diff --git a/applications/luci-app-noddos/luasrc/view/noddos/clients.htm b/applications/luci-app-noddos/luasrc/view/noddos/clients.htm
new file mode 100644
index 0000000000..f2fb9312a7
--- /dev/null
+++ b/applications/luci-app-noddos/luasrc/view/noddos/clients.htm
@@ -0,0 +1,111 @@
+<%#
+ Copyright (C) 2017 Steven Hessing <steven.hessing@gmail.com>
+ This is free software, licensed under the GNU General Public License v3.
+ /usr/lib/lua/luci/view/clients.htm
+-%>
+
+<%-
+
+ require "nixio.fs"
+ require "os"
+
+ local last_modified = "<boottime>"
+ local style = true
+ local v
+ local devdump
+
+ if nixio.fs.access("/var/lib/noddos/DeviceDump.json") then
+ last_modified = os.date("%c", nixio.fs.stat("/var/lib/noddos/DeviceDump.json")['mtime'])
+ io.input("/var/lib/noddos/DeviceDump.json")
+ t = io.read("*all")
+ devdump = luci.jsonc.parse(t)
+ io.input("/var/lib/noddos/DeviceProfiles.json")
+ t = io.read("*all")
+ temp = luci.jsonc.parse(t)
+ devicevalues = {}
+ for i, v in ipairs(temp) do
+ devicevalues[v.DeviceProfileUuid] = v
+ end
+ end
+-%>
+
+<%+header%>
+
+<div class="cbi-map" id="cbi-network">
+ <h2 name="content"><%:Clients%></h2>
+ <div class="cbi-map-descr"><%:The following clients have been discovered on the network. The last discovery was completed at %><%=last_modified%></div>
+
+ <fieldset class="cbi-section">
+ <legend><%:Recognized Clients%></legend>
+ <div class="cbi-section-node">
+ <table class="cbi-section-table">
+ <tr class="cbi-section-table-titles">
+ <th class="cbi-section-table-cell"><%:Hostname%></th>
+ <th class="cbi-section-table-cell"><%:IPv4%></th>
+ <th class="cbi-section-table-cell"><%:MAC%></th>
+ <th class="cbi-section-table-cell"><%:Manufacturer%></th>
+ <th class="cbi-section-table-cell"><%:Model%></th>
+ <th class="cbi-section-table-cell"><%:Class%></th>
+ </tr>
+
+ <%
+ for i,v in ipairs(devdump) do
+ if v.DeviceProfileUuid ~= "" then
+ %>
+ <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>">
+ <td class="cbi-value-field"><%=v.Hostname%></td>
+ <td class="cbi-value-field"><%=v.Ipv4Address%></td>
+ <td class="cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></td>
+ <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Manufacturer%></td>
+ <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Model%></td>
+ <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].ThingClass%></td>
+ </tr>
+ <%
+ style=false
+ end
+ end
+ %>
+ </table>
+ </div>
+ </fieldset>
+ <br />
+ <fieldset class="cbi-section">
+ <legend><%:Unrecognized Clients%></legend>
+ <div class="cbi-section-node">
+ <table class="cbi-section-table">
+ <tr class="cbi-section-table-titles">
+ <th class="cbi-section-table-cell"><%:Hostname%></th>
+ <th class="cbi-section-table-cell"><%:IPv4%></th>
+ <th class="cbi-section-table-cell"><%:MAC%></th>
+ <th class="cbi-section-table-cell"><%:Manufacturer%></th>
+ <th class="cbi-section-table-cell"><%:Model%></th>
+ <th class="cbi-section-table-cell"><%:DhcpVendor%></th>
+ <th class="cbi-section-table-cell"><%:DhcpHostname%></th>
+ </tr>
+
+ <%
+ for i,v in ipairs(devdump) do
+ if v.DeviceProfileUuid == "" then
+ %>
+ <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>">
+ <td class="cbi-value-field"><%=v.Hostname%></td>
+ <td class="cbi-value-field"><%=v.Ipv4Address%></td>
+ <td class="cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></td>
+ <td class="cbi-value-field"><%=v.SsdpManufacturer%></td>
+ <td class="cbi-value-field"><%=v.SsdpModelName%></td>
+ <td class="cbi-value-field"><%=v.DhcpVendor1%></td>
+ <td class="cbi-value-field"><%=v.DhcpHostname%></td>
+ </tr>
+ <%
+ style=false
+ end
+ end
+ %>
+ </table>
+ </div>
+ </fieldset>
+
+</div>
+
+<%+footer%>
+
diff --git a/applications/luci-app-noddos/po/ja/noddos.po b/applications/luci-app-noddos/po/ja/noddos.po
new file mode 100644
index 0000000000..c6b461747f
--- /dev/null
+++ b/applications/luci-app-noddos/po/ja/noddos.po
@@ -0,0 +1,111 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.4\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid "Class"
+msgstr "クラス"
+
+msgid "Client Firewall"
+msgstr "クライアント ファイアウォール"
+
+msgid "Clients"
+msgstr "クライアント"
+
+msgid "DhcpHostname"
+msgstr "DHCP ホスト名"
+
+msgid "DhcpVendor"
+msgstr "DHCP ベンダー"
+
+msgid "Don't monitor these IPv4 addresses"
+msgstr "これらの IPv4 アドレスを監視しません。"
+
+msgid "Don't monitor these IPv6 addresses"
+msgstr "これらの IPv6 アドレスを監視しません。"
+
+msgid "Don't monitor these MAC addresses"
+msgstr "これらの MAC アドレスを監視しません。"
+
+msgid "Excluded IPv4 addresses"
+msgstr "除外する IPv4 アドレス"
+
+msgid "Excluded IPv6 addresses"
+msgstr "除外する IPv6 アドレス"
+
+msgid "Excluded MAC addresses"
+msgstr "除外する MAC アドレス"
+
+msgid "Hostname"
+msgstr "ホスト名"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "MAC"
+msgstr "MAC"
+
+msgid "Manufacturer"
+msgstr "製造元"
+
+msgid "Model"
+msgstr "モデル"
+
+msgid "Noddos Client Tracking"
+msgstr "Noddos クライアント トラッキング"
+
+msgid "Noddos Clients"
+msgstr "Noddos クライアント"
+
+msgid ""
+"Noddos controls traffic from the clients on your network to the Internet. "
+"This helps protect your network, the bandwidth on your Internet connection "
+"and the Internet"
+msgstr ""
+"Noddos は、ネットワーク内のクライアントからインターネットへのトラフィックを制"
+"御します。これは、ネットワークとインターネット接続の帯域幅、インターネットの"
+"保護に役立ちます。"
+
+msgid "Private networks"
+msgstr "プライベート ネットワーク"
+
+msgid "Recognized Clients"
+msgstr "識別済クライアント"
+
+msgid ""
+"Report traffic to private networks (10/8, 172.16/12, 192.168/16, "
+"fd75:6b5d:352c:ed05::/64)"
+msgstr ""
+"プライベート ネットワークへのトラフィックについてのレポート(10/8, "
+"172.16/12, 192.168/16, fd75:6b5d:352c:ed05::/64)"
+
+msgid "Server Settings"
+msgstr "サーバー設定"
+
+msgid ""
+"The following clients have been discovered on the network. The last "
+"discovery was completed at"
+msgstr ""
+"以下のクライアントがネットワーク内で見つかりました。探索の最終実行日時:"
+
+msgid "Unrecognized Clients"
+msgstr "未識別クライアント"
+
+msgid "Upload anonimized traffic stats"
+msgstr "匿名トラフィック状況のアップロード"
+
+msgid ""
+"Uploading your statistics helps improving device recognition and discovering "
+"hacked devices & botnets"
+msgstr ""
+"デバイスの識別や、ハックされたデバイスとボットネットの発見の改善に役立てるた"
+"め、統計をアップロードします。"
diff --git a/applications/luci-app-noddos/po/templates/noddos.pot b/applications/luci-app-noddos/po/templates/noddos.pot
new file mode 100644
index 0000000000..69d135770b
--- /dev/null
+++ b/applications/luci-app-noddos/po/templates/noddos.pot
@@ -0,0 +1,92 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Class"
+msgstr ""
+
+msgid "Client Firewall"
+msgstr ""
+
+msgid "Clients"
+msgstr ""
+
+msgid "DhcpHostname"
+msgstr ""
+
+msgid "DhcpVendor"
+msgstr ""
+
+msgid "Don't monitor these IPv4 addresses"
+msgstr ""
+
+msgid "Don't monitor these IPv6 addresses"
+msgstr ""
+
+msgid "Don't monitor these MAC addresses"
+msgstr ""
+
+msgid "Excluded IPv4 addresses"
+msgstr ""
+
+msgid "Excluded IPv6 addresses"
+msgstr ""
+
+msgid "Excluded MAC addresses"
+msgstr ""
+
+msgid "Hostname"
+msgstr ""
+
+msgid "IPv4"
+msgstr ""
+
+msgid "MAC"
+msgstr ""
+
+msgid "Manufacturer"
+msgstr ""
+
+msgid "Model"
+msgstr ""
+
+msgid "Noddos Client Tracking"
+msgstr ""
+
+msgid "Noddos Clients"
+msgstr ""
+
+msgid ""
+"Noddos controls traffic from the clients on your network to the Internet. "
+"This helps protect your network, the bandwidth on your Internet connection "
+"and the Internet"
+msgstr ""
+
+msgid "Private networks"
+msgstr ""
+
+msgid "Recognized Clients"
+msgstr ""
+
+msgid ""
+"Report traffic to private networks (10/8, 172.16/12, 192.168/16, "
+"fd75:6b5d:352c:ed05::/64)"
+msgstr ""
+
+msgid "Server Settings"
+msgstr ""
+
+msgid ""
+"The following clients have been discovered on the network. The last "
+"discovery was completed at"
+msgstr ""
+
+msgid "Unrecognized Clients"
+msgstr ""
+
+msgid "Upload anonimized traffic stats"
+msgstr ""
+
+msgid ""
+"Uploading your statistics helps improving device recognition and discovering "
+"hacked devices & botnets"
+msgstr ""
diff --git a/applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos b/applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos
new file mode 100644
index 0000000000..17abbc41ca
--- /dev/null
+++ b/applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Copyright (C) 2017 Steven Hessing (steven.hessing@live.com)
+# This is free software, licensed under the GNU General Public License v3
+
+uci -q batch <<-EOF >/dev/null
+ delete ucitrack.@noddos[-1]
+ add ucitrack noddos
+ set ucitrack.@noddos[-1].init=noddos
+ commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua
index 7865881cb6..dc7718217c 100644
--- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua
+++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua
@@ -685,6 +685,10 @@ local knownParams = {
"tls_auth",
"/etc/openvpn/tlsauth.key",
translate("Additional authentication over TLS") },
+ { Value,
+ "tls_crypt",
+ "/etc/openvpn/tlscrypt.key",
+ translate("Encrypt and authenticate all control channel packets with the key") },
-- { Value,
-- "askpass",
-- "[file]",
diff --git a/applications/luci-app-openvpn/po/ca/openvpn.po b/applications/luci-app-openvpn/po/ca/openvpn.po
index 1b75fe6cd7..d756469078 100644
--- a/applications/luci-app-openvpn/po/ca/openvpn.po
+++ b/applications/luci-app-openvpn/po/ca/openvpn.po
@@ -199,6 +199,9 @@ msgstr "Activa la interfície de gestió a <em>IP</em> <em>port</em>"
msgid "Enabled"
msgstr "Activat"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr "Xifra d'encriptació per paquets"
diff --git a/applications/luci-app-openvpn/po/cs/openvpn.po b/applications/luci-app-openvpn/po/cs/openvpn.po
index c68742217e..4fba010530 100644
--- a/applications/luci-app-openvpn/po/cs/openvpn.po
+++ b/applications/luci-app-openvpn/po/cs/openvpn.po
@@ -194,6 +194,9 @@ msgstr ""
msgid "Enabled"
msgstr "Povoleno"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/de/openvpn.po b/applications/luci-app-openvpn/po/de/openvpn.po
index dc382ee44d..a203c92e79 100644
--- a/applications/luci-app-openvpn/po/de/openvpn.po
+++ b/applications/luci-app-openvpn/po/de/openvpn.po
@@ -197,6 +197,9 @@ msgstr "Administratorschnittstelle aktivieren"
msgid "Enabled"
msgstr "Einschalten"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr "Verschlüsselungsalgorithmus für Pakete"
diff --git a/applications/luci-app-openvpn/po/el/openvpn.po b/applications/luci-app-openvpn/po/el/openvpn.po
index 2c787d816c..63dd8985a8 100644
--- a/applications/luci-app-openvpn/po/el/openvpn.po
+++ b/applications/luci-app-openvpn/po/el/openvpn.po
@@ -198,6 +198,9 @@ msgstr ""
msgid "Enabled"
msgstr "Ενεργοποιημένο"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/en/openvpn.po b/applications/luci-app-openvpn/po/en/openvpn.po
index a5994dc292..51819f6b09 100644
--- a/applications/luci-app-openvpn/po/en/openvpn.po
+++ b/applications/luci-app-openvpn/po/en/openvpn.po
@@ -197,6 +197,9 @@ msgstr "Enable management interface on <em>IP</em> <em>port</em>"
msgid "Enabled"
msgstr "Enabled"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr "Encrypt and authenticate all control channel packets with the key"
+
msgid "Encryption cipher for packets"
msgstr "Encryption cipher for packets"
diff --git a/applications/luci-app-openvpn/po/es/openvpn.po b/applications/luci-app-openvpn/po/es/openvpn.po
index a5141831ce..819e7ee509 100644
--- a/applications/luci-app-openvpn/po/es/openvpn.po
+++ b/applications/luci-app-openvpn/po/es/openvpn.po
@@ -196,6 +196,9 @@ msgstr "Interfaz de gestión en <em>IP</em> <em>puerto</em>"
msgid "Enabled"
msgstr "Activado"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr "Cifra de encriptación de paquetes"
diff --git a/applications/luci-app-openvpn/po/fr/openvpn.po b/applications/luci-app-openvpn/po/fr/openvpn.po
index e2f33dc164..331d1931e8 100644
--- a/applications/luci-app-openvpn/po/fr/openvpn.po
+++ b/applications/luci-app-openvpn/po/fr/openvpn.po
@@ -206,6 +206,9 @@ msgstr "Activer l'interface de gestion sur <em>IP</em> <em>port</em>"
msgid "Enabled"
msgstr "Activé"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr "Méthode de chiffrement des paquets"
diff --git a/applications/luci-app-openvpn/po/he/openvpn.po b/applications/luci-app-openvpn/po/he/openvpn.po
index 3528444199..517da49080 100644
--- a/applications/luci-app-openvpn/po/he/openvpn.po
+++ b/applications/luci-app-openvpn/po/he/openvpn.po
@@ -192,6 +192,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/hu/openvpn.po b/applications/luci-app-openvpn/po/hu/openvpn.po
index 1f9d691d04..67a8217b1a 100644
--- a/applications/luci-app-openvpn/po/hu/openvpn.po
+++ b/applications/luci-app-openvpn/po/hu/openvpn.po
@@ -196,6 +196,9 @@ msgstr ""
msgid "Enabled"
msgstr "Engedélyezve"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/it/openvpn.po b/applications/luci-app-openvpn/po/it/openvpn.po
index 233c144c57..834015b8e8 100644
--- a/applications/luci-app-openvpn/po/it/openvpn.po
+++ b/applications/luci-app-openvpn/po/it/openvpn.po
@@ -198,6 +198,9 @@ msgstr ""
msgid "Enabled"
msgstr "Abilitato"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/ja/openvpn.po b/applications/luci-app-openvpn/po/ja/openvpn.po
index 5474008682..232ae27e1f 100644
--- a/applications/luci-app-openvpn/po/ja/openvpn.po
+++ b/applications/luci-app-openvpn/po/ja/openvpn.po
@@ -196,6 +196,9 @@ msgstr ""
msgid "Enabled"
msgstr "有効"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/ms/openvpn.po b/applications/luci-app-openvpn/po/ms/openvpn.po
index c439c3eb15..6c6e0d6046 100644
--- a/applications/luci-app-openvpn/po/ms/openvpn.po
+++ b/applications/luci-app-openvpn/po/ms/openvpn.po
@@ -191,6 +191,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/no/openvpn.po b/applications/luci-app-openvpn/po/no/openvpn.po
index 3528444199..517da49080 100644
--- a/applications/luci-app-openvpn/po/no/openvpn.po
+++ b/applications/luci-app-openvpn/po/no/openvpn.po
@@ -192,6 +192,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/pl/openvpn.po b/applications/luci-app-openvpn/po/pl/openvpn.po
index e289a80fc1..bef5a13a1a 100644
--- a/applications/luci-app-openvpn/po/pl/openvpn.po
+++ b/applications/luci-app-openvpn/po/pl/openvpn.po
@@ -197,6 +197,9 @@ msgstr "Włącz interfejs zarządzalny na <em>IP</em> <em>port</em>"
msgid "Enabled"
msgstr "Włączone"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr "Szyfrowanie dla pakietów"
diff --git a/applications/luci-app-openvpn/po/pt-br/openvpn.po b/applications/luci-app-openvpn/po/pt-br/openvpn.po
index 84b0540581..26642e2c46 100644
--- a/applications/luci-app-openvpn/po/pt-br/openvpn.po
+++ b/applications/luci-app-openvpn/po/pt-br/openvpn.po
@@ -198,6 +198,9 @@ msgstr "Ativar o interface de gestão em <em>IP</em> <em>porta</em>"
msgid "Enabled"
msgstr "Ativado"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr "Cifra de encriptação para pacotes"
diff --git a/applications/luci-app-openvpn/po/pt/openvpn.po b/applications/luci-app-openvpn/po/pt/openvpn.po
index 95c50a571a..d74b0a690d 100644
--- a/applications/luci-app-openvpn/po/pt/openvpn.po
+++ b/applications/luci-app-openvpn/po/pt/openvpn.po
@@ -198,6 +198,9 @@ msgstr "Activar o interface de gestão em <em>IP</em> <em>porta</em>"
msgid "Enabled"
msgstr "Activado"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr "Cifra de encriptação para pacotes"
diff --git a/applications/luci-app-openvpn/po/ro/openvpn.po b/applications/luci-app-openvpn/po/ro/openvpn.po
index 4a7a5b7515..ef5e7ce379 100644
--- a/applications/luci-app-openvpn/po/ro/openvpn.po
+++ b/applications/luci-app-openvpn/po/ro/openvpn.po
@@ -193,6 +193,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/ru/openvpn.po b/applications/luci-app-openvpn/po/ru/openvpn.po
index 00e585c374..89cf1161cc 100644
--- a/applications/luci-app-openvpn/po/ru/openvpn.po
+++ b/applications/luci-app-openvpn/po/ru/openvpn.po
@@ -200,6 +200,9 @@ msgstr "Включить интерфейс управления на <em>IP</em
msgid "Enabled"
msgstr "Включено"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr "Шифровать и аутентифициоровать ключом все пакеты канала управления"
+
msgid "Encryption cipher for packets"
msgstr "Шифрование для пакетов"
diff --git a/applications/luci-app-openvpn/po/sk/openvpn.po b/applications/luci-app-openvpn/po/sk/openvpn.po
index f001c12eaf..9005529762 100644
--- a/applications/luci-app-openvpn/po/sk/openvpn.po
+++ b/applications/luci-app-openvpn/po/sk/openvpn.po
@@ -191,6 +191,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/sv/openvpn.po b/applications/luci-app-openvpn/po/sv/openvpn.po
index 6b8f92f4c4..838f4650dd 100644
--- a/applications/luci-app-openvpn/po/sv/openvpn.po
+++ b/applications/luci-app-openvpn/po/sv/openvpn.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
"Language-Team: none\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
@@ -10,25 +10,25 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "%s"
-msgstr ""
+msgstr "%s"
msgid "'net30', 'p2p', or 'subnet'"
-msgstr ""
+msgstr "'net30', 'p2p', eller 'subnät'"
msgid "Accept options pushed from server"
msgstr ""
msgid "Add"
-msgstr ""
+msgstr "Lägg till"
msgid "Add route after establishing connection"
msgstr ""
msgid "Additional authentication over TLS"
-msgstr ""
+msgstr "Ytterligare autentisering via TLS"
msgid "Allow client-to-client traffic"
-msgstr ""
+msgstr "Tillåt klient-till-klienttraffik"
msgid "Allow multiple clients with same certificate"
msgstr ""
@@ -192,6 +192,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/templates/openvpn.pot b/applications/luci-app-openvpn/po/templates/openvpn.pot
index f2e4011662..126cab076f 100644
--- a/applications/luci-app-openvpn/po/templates/openvpn.pot
+++ b/applications/luci-app-openvpn/po/templates/openvpn.pot
@@ -184,6 +184,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/tr/openvpn.po b/applications/luci-app-openvpn/po/tr/openvpn.po
index 7b8ffad34c..917c36d561 100644
--- a/applications/luci-app-openvpn/po/tr/openvpn.po
+++ b/applications/luci-app-openvpn/po/tr/openvpn.po
@@ -191,6 +191,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/uk/openvpn.po b/applications/luci-app-openvpn/po/uk/openvpn.po
index a6910c2309..e98b52a8ae 100644
--- a/applications/luci-app-openvpn/po/uk/openvpn.po
+++ b/applications/luci-app-openvpn/po/uk/openvpn.po
@@ -195,6 +195,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-openvpn/po/vi/openvpn.po b/applications/luci-app-openvpn/po/vi/openvpn.po
index 8e8b96dc7f..f3873b068f 100644
--- a/applications/luci-app-openvpn/po/vi/openvpn.po
+++ b/applications/luci-app-openvpn/po/vi/openvpn.po
@@ -197,6 +197,9 @@ msgstr "Kích hoạt giao diện điều hành trên <em>IP</em> <em>cổng</em>
msgid "Enabled"
msgstr "Kích hoạt "
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr "Encryption cipher cho các gói"
diff --git a/applications/luci-app-openvpn/po/zh-cn/openvpn.po b/applications/luci-app-openvpn/po/zh-cn/openvpn.po
index 3904ac4bf8..093a9cd071 100644
--- a/applications/luci-app-openvpn/po/zh-cn/openvpn.po
+++ b/applications/luci-app-openvpn/po/zh-cn/openvpn.po
@@ -196,6 +196,9 @@ msgstr "在<em>IP</em> <em>port</em>上启用可管理接口"
msgid "Enabled"
msgstr "启用"
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr "加密数据包"
diff --git a/applications/luci-app-openvpn/po/zh-tw/openvpn.po b/applications/luci-app-openvpn/po/zh-tw/openvpn.po
index f26aeb097a..556fb9b8f0 100644
--- a/applications/luci-app-openvpn/po/zh-tw/openvpn.po
+++ b/applications/luci-app-openvpn/po/zh-tw/openvpn.po
@@ -190,6 +190,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
msgid "Encryption cipher for packets"
msgstr ""
diff --git a/applications/luci-app-p2pblock/po/pt-br/p2pblock.po b/applications/luci-app-p2pblock/po/pt-br/p2pblock.po
index de3638164e..8ebac375f2 100644
--- a/applications/luci-app-p2pblock/po/pt-br/p2pblock.po
+++ b/applications/luci-app-p2pblock/po/pt-br/p2pblock.po
@@ -1,3 +1,7 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+
msgid "Block Time"
msgstr "Tempo de bloqueio"
diff --git a/applications/luci-app-radicale/po/pt-br/radicale.po b/applications/luci-app-radicale/po/pt-br/radicale.po
index 67bf586908..17417fa499 100644
--- a/applications/luci-app-radicale/po/pt-br/radicale.po
+++ b/applications/luci-app-radicale/po/pt-br/radicale.po
@@ -14,11 +14,15 @@ msgstr ""
msgid ""
"'AUTO' selects the highest protocol version that client and server support."
-msgstr "'AUTO' seleciona a versão mais alto protocolo que o cliente e o servidor suportar."
+msgstr ""
+"'AUTO' seleciona a versão mais alto protocolo que o cliente e o servidor "
+"suportar."
msgid ""
"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on"
-msgstr "'NomeDoEquipamento:porta' ou 'IPv4:Porta' ou '[IPv6]:Porta' em que o Radicale deve escutar"
+msgstr ""
+"'NomeDoEquipamento:porta' ou 'IPv4:Porta' ou '[IPv6]:Porta' em que o "
+"Radicale deve escutar"
msgid "AUTO"
msgstr "AUTO"
@@ -48,7 +52,9 @@ msgstr "Autenticação"
msgid ""
"Authentication login is matched against the 'user' key, and collection's "
"path is matched against the 'collection' key."
-msgstr "O nome do usuário na autenticação é comparado com a chave do 'user', e o caminho da coleção é comparado com a chave 'coleção'."
+msgstr ""
+"O nome do usuário na autenticação é comparado com a chave do 'user', e o "
+"caminho da coleção é comparado com a chave 'coleção'."
msgid "Authentication method"
msgstr "Método de autenticação"
@@ -68,7 +74,9 @@ msgstr "CalDAV/CardDAV"
msgid ""
"Calendars and address books are available for both local and remote access, "
"possibly limited through authentication policies."
-msgstr "Agendas e contados estão disponíveis tanto para acesso local como remoto, possivelmente limitado através das políticas de autenticação."
+msgstr ""
+"Agendas e contados estão disponíveis tanto para acesso local como remoto, "
+"possivelmente limitado através das políticas de autenticação."
msgid "Certificate file"
msgstr "Arquivo do certificado"
@@ -76,7 +84,9 @@ msgstr "Arquivo do certificado"
msgid ""
"Change here the encoding Radicale will use instead of 'UTF-8' for responses "
"to the client and/or to store data inside collections."
-msgstr "Mude aqui a codificação que o Radicale usará em vez de 'UTF-8' para respostas a clientes ou para armazenar dados dentro das coleções."
+msgstr ""
+"Mude aqui a codificação que o Radicale usará em vez de 'UTF-8' para "
+"respostas a clientes ou para armazenar dados dentro das coleções."
msgid "Ciphers"
msgstr "Cifras"
@@ -95,7 +105,11 @@ msgid ""
"Cross-origin resource sharing (CORS) is a mechanism that allows restricted "
"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from "
"another domain outside the domain from which the resource originated."
-msgstr "O compartilhamento de recursos de origem cruzada (CORS) é um mecanismo que permite que os recursos de acesso restrito (por exemplo, fontes, JavaScript, etc.) em uma página web ser solicitado de outro domínio fora do domínio a partir do qual o recurso foi originado."
+msgstr ""
+"O compartilhamento de recursos de origem cruzada (CORS) é um mecanismo que "
+"permite que os recursos de acesso restrito (por exemplo, fontes, JavaScript, "
+"etc.) em uma página web ser solicitado de outro domínio fora do domínio a "
+"partir do qual o recurso foi originado."
msgid "Custom"
msgstr "Personalizadas"
@@ -108,7 +122,9 @@ msgid "Debug"
msgstr "Depuração"
msgid "Delay (in seconds) during system boot before Radicale start"
-msgstr "Atraso (em segundos) durante a inicialização do sistema antes do Radicale iniciar"
+msgstr ""
+"Atraso (em segundos) durante a inicialização do sistema antes do Radicale "
+"iniciar"
#, fuzzy
msgid "Directory"
@@ -131,7 +147,9 @@ msgstr "Ativar HTTPS"
msgid ""
"Enable/Disable auto-start of Radicale on system start-up and interface events"
-msgstr "Ativar/Desativar iniciação automática do Radicale na iniciação do sistema e em eventos de interface"
+msgstr ""
+"Ativar/Desativar iniciação automática do Radicale na iniciação do sistema e "
+"em eventos de interface"
msgid "Encoding"
msgstr "Codificação"
@@ -164,7 +182,9 @@ msgstr "Sistema de arquivos"
msgid ""
"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' "
"means 'anybody' (including anonymous users)."
-msgstr "Por exemplo, para a chave 'user', '.+' Significa 'usuário autenticado' e '.*' Significa 'qualquer um' (incluindo usuários anônimos)."
+msgstr ""
+"Por exemplo, para a chave 'user', '.+' Significa 'usuário autenticado' e '."
+"*' Significa 'qualquer um' (incluindo usuários anônimos)."
msgid "Full access for Owner only"
msgstr "Acesso completo somente para o proprietário"
@@ -228,7 +248,8 @@ msgid "Number of backup files of log to create."
msgstr "Número de backups dos arquivos de registros(log) a serem criados."
msgid "OPTIONAL: See python's ssl module for available ciphers"
-msgstr "Opcional: veja o módulo SSL do python para conhecer as cifras disponíveis"
+msgstr ""
+"Opcional: veja o módulo SSL do python para conhecer as cifras disponíveis"
msgid "One or more missing/invalid fields on tab"
msgstr "Um ou campos inválidos/ausentes na aba"
@@ -242,7 +263,9 @@ msgstr "O caminho/arquivo é necessário!"
msgid ""
"Place here the 'user:password' pairs for your users which should have access "
"to Radicale."
-msgstr "Coloque aqui os pares 'usuário:senha' para os seus usuários que devem ter acesso a Radicale."
+msgstr ""
+"Coloque aqui os pares 'usuário:senha' para os seus usuários que devem ter "
+"acesso a Radicale."
msgid "Please install current version !"
msgstr "Por favor, instale a versão atual!"
@@ -263,7 +286,9 @@ msgid "Radicale CalDAV/CardDAV Server"
msgstr "Radicale Servidor CalDAV/CardDAV"
msgid "Radicale uses '/etc/radicale/rights' as regexp-based file."
-msgstr "Radicale usa o '/etc/radicale/rights' como arquivo baseado em expressão regular."
+msgstr ""
+"Radicale usa o '/etc/radicale/rights' como arquivo baseado em expressão "
+"regular."
msgid "Radicale uses '/etc/radicale/users' as htpasswd file."
msgstr "Radicale usa o '/etc/radicale/users' como o arquivo htpasswd."
@@ -307,7 +332,9 @@ msgid "Server"
msgstr "Servidor"
msgid "Setting this parameter to '0' will disable rotation of log-file."
-msgstr "Definindo este parâmetro para '0' irá desativar a rotação dos arquivos de registros(log)."
+msgstr ""
+"Definindo este parâmetro para '0' irá desativar a rotação dos arquivos de "
+"registros(log)."
msgid "Software package '%s' is not installed."
msgstr "O pacote de software '%s' não está instalado."
@@ -349,18 +376,23 @@ msgstr "Sistema"
msgid ""
"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) "
"server solution."
-msgstr "O Projeto Radicale é uma solução completa de CalDAV (agenda) e CardDAV (contatos)."
+msgstr ""
+"O Projeto Radicale é uma solução completa de CalDAV (agenda) e CardDAV "
+"(contatos)."
msgid ""
"They can be viewed and edited by calendar and contact clients on mobile "
"phones or computers."
-msgstr "Eles podem ser visualizados e editados pelos clientes de agenda e de contatos em telefones celulares ou computadores."
+msgstr ""
+"Eles podem ser visualizados e editados pelos clientes de agenda e de "
+"contatos em telefones celulares ou computadores."
msgid "To edit the file follow this link!"
msgstr "Para editar o arquivo, siga este link!"
msgid "To view latest log file follow this link!"
-msgstr "Para visualizar mais recente arquivo de registros(log), siga este link!"
+msgstr ""
+"Para visualizar mais recente arquivo de registros(log), siga este link!"
msgid "Value is not a number"
msgstr "O valor não é um número"
@@ -384,7 +416,9 @@ msgstr "Informação da Versão"
msgid ""
"WARNING: Only 'File-system' is documented and tested by Radicale development"
-msgstr "AVISO: Apenas 'Sistema de Arquivos "está documentado e testado pelo desenvolvimento do Radicale"
+msgstr ""
+"AVISO: Apenas 'Sistema de Arquivos está documentado e testado pelo "
+"desenvolvimento do Radicale"
#, fuzzy
msgid "Warning"
@@ -393,12 +427,16 @@ msgstr "Alerta"
msgid ""
"You can also get groups from the user regex in the collection with {0}, {1}, "
"etc."
-msgstr "Você também pode obter grupos a partir da expressão regular do usuário na coleção com {0}, {1} , etc."
+msgstr ""
+"Você também pode obter grupos a partir da expressão regular do usuário na "
+"coleção com {0}, {1} , etc."
msgid ""
"You can use Python's ConfigParser interpolation values %(login)s and "
"%(path)s."
-msgstr "Você pode usar a interpolação de valores %(login)s e %(path)s do ConfigParser do Python."
+msgstr ""
+"Você pode usar a interpolação de valores %(login)s e %(path)s do "
+"ConfigParser do Python."
msgid "crypt"
msgstr "cifrar"
@@ -429,4 +467,3 @@ msgstr "necessário"
msgid "salted SHA-1"
msgstr "SHA-1 com salto"
-
diff --git a/applications/luci-app-samba/luasrc/model/cbi/samba.lua b/applications/luci-app-samba/luasrc/model/cbi/samba.lua
index 68a5b3a9bc..2e533c3f57 100644
--- a/applications/luci-app-samba/luasrc/model/cbi/samba.lua
+++ b/applications/luci-app-samba/luasrc/model/cbi/samba.lua
@@ -36,7 +36,8 @@ function tmpl.write(self, section, value)
end
-s = m:section(TypedSection, "sambashare", translate("Shared Directories"))
+s = m:section(TypedSection, "sambashare", translate("Shared Directories")
+ , translate("Please add directories to share. Each directory refers to a folder on a mounted device."))
s.anonymous = true
s.addremove = true
s.template = "cbi/tblsection"
diff --git a/applications/luci-app-samba/po/ca/samba.po b/applications/luci-app-samba/po/ca/samba.po
index fadcbdfdb9..eb6be15cd0 100644
--- a/applications/luci-app-samba/po/ca/samba.po
+++ b/applications/luci-app-samba/po/ca/samba.po
@@ -65,6 +65,11 @@ msgstr "Comparticions de xarxa"
msgid "Path"
msgstr "Ruta"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Només lectura"
diff --git a/applications/luci-app-samba/po/cs/samba.po b/applications/luci-app-samba/po/cs/samba.po
index 4a00124fb9..d66d87674d 100644
--- a/applications/luci-app-samba/po/cs/samba.po
+++ b/applications/luci-app-samba/po/cs/samba.po
@@ -63,6 +63,11 @@ msgstr "Síťová sdílení"
msgid "Path"
msgstr "Cesta"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Pouze pro čtení"
diff --git a/applications/luci-app-samba/po/de/samba.po b/applications/luci-app-samba/po/de/samba.po
index 1bcac0c9bc..4e8da53b5a 100644
--- a/applications/luci-app-samba/po/de/samba.po
+++ b/applications/luci-app-samba/po/de/samba.po
@@ -65,6 +65,11 @@ msgstr "Netzwerkfreigaben"
msgid "Path"
msgstr "Pfad"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Nur Lesen"
diff --git a/applications/luci-app-samba/po/el/samba.po b/applications/luci-app-samba/po/el/samba.po
index 9a15ad1e03..878416a638 100644
--- a/applications/luci-app-samba/po/el/samba.po
+++ b/applications/luci-app-samba/po/el/samba.po
@@ -61,6 +61,11 @@ msgstr ""
msgid "Path"
msgstr ""
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr ""
diff --git a/applications/luci-app-samba/po/en/samba.po b/applications/luci-app-samba/po/en/samba.po
index 94cfdb5168..642580e9de 100644
--- a/applications/luci-app-samba/po/en/samba.po
+++ b/applications/luci-app-samba/po/en/samba.po
@@ -61,6 +61,11 @@ msgstr "Network Shares"
msgid "Path"
msgstr "Path"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Read-only"
diff --git a/applications/luci-app-samba/po/es/samba.po b/applications/luci-app-samba/po/es/samba.po
index c14ebd2c32..57c4b862d6 100644
--- a/applications/luci-app-samba/po/es/samba.po
+++ b/applications/luci-app-samba/po/es/samba.po
@@ -63,6 +63,11 @@ msgstr "Comparticiones de red"
msgid "Path"
msgstr "Dirección"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Solo lectura"
diff --git a/applications/luci-app-samba/po/fr/samba.po b/applications/luci-app-samba/po/fr/samba.po
index ff040b50d7..63960fca17 100644
--- a/applications/luci-app-samba/po/fr/samba.po
+++ b/applications/luci-app-samba/po/fr/samba.po
@@ -63,6 +63,11 @@ msgstr "Partages réseau"
msgid "Path"
msgstr "Chemin"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Lecture seule"
diff --git a/applications/luci-app-samba/po/he/samba.po b/applications/luci-app-samba/po/he/samba.po
index 620f56cf84..010d2b2480 100644
--- a/applications/luci-app-samba/po/he/samba.po
+++ b/applications/luci-app-samba/po/he/samba.po
@@ -56,6 +56,11 @@ msgstr ""
msgid "Path"
msgstr ""
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr ""
diff --git a/applications/luci-app-samba/po/hu/samba.po b/applications/luci-app-samba/po/hu/samba.po
index 38a9a08439..0263edb6c1 100644
--- a/applications/luci-app-samba/po/hu/samba.po
+++ b/applications/luci-app-samba/po/hu/samba.po
@@ -63,6 +63,11 @@ msgstr "Hálózati megosztások"
msgid "Path"
msgstr "Elérési út"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Csak olvasható"
diff --git a/applications/luci-app-samba/po/it/samba.po b/applications/luci-app-samba/po/it/samba.po
index a2bb9b6735..8725902031 100644
--- a/applications/luci-app-samba/po/it/samba.po
+++ b/applications/luci-app-samba/po/it/samba.po
@@ -3,8 +3,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2012-04-19 22:28+0200\n"
-"Last-Translator: claudyus <claudyus84@gmail.com>\n"
+"PO-Revision-Date: 2017-09-06 01:28+0200\n"
+"Last-Translator: bubu83 <bubu83@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
@@ -25,10 +25,10 @@ msgid "Allowed users"
msgstr "Utenti ammessi"
msgid "Browseable"
-msgstr ""
+msgstr "Sfogliabile"
msgid "Create mask"
-msgstr "Mask di creazione dei file"
+msgstr "Crea maschera"
msgid "Description"
msgstr "Descrizione"
@@ -64,6 +64,13 @@ msgstr "Condivisioni di rete"
msgid "Path"
msgstr "Percorso"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+"Per favore aggiungi le directory da condividere. Ogni directory si riferisce a una "
+"cartella su un dispositivo montato."
+
msgid "Read-only"
msgstr "Solo lettura"
diff --git a/applications/luci-app-samba/po/ja/samba.po b/applications/luci-app-samba/po/ja/samba.po
index 9f338defbb..eca10efcc0 100644
--- a/applications/luci-app-samba/po/ja/samba.po
+++ b/applications/luci-app-samba/po/ja/samba.po
@@ -1,17 +1,17 @@
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2011-11-03 18:09+0200\n"
-"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-08-16 00:41+0900\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.0.4\n"
+"X-Generator: Poedit 2.0.3\n"
+"Language-Team: \n"
msgid "Allow guests"
msgstr "ゲストアクセスを許可"
@@ -61,6 +61,13 @@ msgstr "ネットワーク共有"
msgid "Path"
msgstr "パス"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+"共有するディレクトリを追加してください。マウントされたデバイス等のディレクト"
+"リを設定し、公開することができます。"
+
msgid "Read-only"
msgstr "読み込みのみ"
diff --git a/applications/luci-app-samba/po/ms/samba.po b/applications/luci-app-samba/po/ms/samba.po
index de4ed7c365..d5f1ce15e7 100644
--- a/applications/luci-app-samba/po/ms/samba.po
+++ b/applications/luci-app-samba/po/ms/samba.po
@@ -55,6 +55,11 @@ msgstr ""
msgid "Path"
msgstr ""
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr ""
diff --git a/applications/luci-app-samba/po/no/samba.po b/applications/luci-app-samba/po/no/samba.po
index 7059d7748d..349f6b9def 100644
--- a/applications/luci-app-samba/po/no/samba.po
+++ b/applications/luci-app-samba/po/no/samba.po
@@ -52,6 +52,11 @@ msgstr "Nettverks Mapper"
msgid "Path"
msgstr "Fysisk bane"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Skrivebeskyttet"
diff --git a/applications/luci-app-samba/po/pl/samba.po b/applications/luci-app-samba/po/pl/samba.po
index bf54e78c3d..d997268cda 100644
--- a/applications/luci-app-samba/po/pl/samba.po
+++ b/applications/luci-app-samba/po/pl/samba.po
@@ -62,6 +62,11 @@ msgstr "Udziały sieciowe"
msgid "Path"
msgstr "Ścieżka"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Tylko do odczytu"
diff --git a/applications/luci-app-samba/po/pt-br/samba.po b/applications/luci-app-samba/po/pt-br/samba.po
index 43ea3b9b97..a2e6e220c0 100644
--- a/applications/luci-app-samba/po/pt-br/samba.po
+++ b/applications/luci-app-samba/po/pt-br/samba.po
@@ -63,6 +63,11 @@ msgstr "Compartilhamentos de Rede"
msgid "Path"
msgstr "Caminho"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Somente leitura"
diff --git a/applications/luci-app-samba/po/pt/samba.po b/applications/luci-app-samba/po/pt/samba.po
index 6d4f003868..f58b58818e 100644
--- a/applications/luci-app-samba/po/pt/samba.po
+++ b/applications/luci-app-samba/po/pt/samba.po
@@ -63,6 +63,11 @@ msgstr "Partilhas da Rede"
msgid "Path"
msgstr "Caminho"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Apenas Leitura"
diff --git a/applications/luci-app-samba/po/ro/samba.po b/applications/luci-app-samba/po/ro/samba.po
index 78c55e4eb4..7cfcda7d11 100644
--- a/applications/luci-app-samba/po/ro/samba.po
+++ b/applications/luci-app-samba/po/ro/samba.po
@@ -62,6 +62,11 @@ msgstr "Partajari pe retea"
msgid "Path"
msgstr "Cale"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Doar citire"
diff --git a/applications/luci-app-samba/po/ru/samba.po b/applications/luci-app-samba/po/ru/samba.po
index 4823dc46d7..534770f5f1 100644
--- a/applications/luci-app-samba/po/ru/samba.po
+++ b/applications/luci-app-samba/po/ru/samba.po
@@ -64,6 +64,11 @@ msgstr "Сетевые ресурсы"
msgid "Path"
msgstr "Путь"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Только для чтения"
diff --git a/applications/luci-app-samba/po/sk/samba.po b/applications/luci-app-samba/po/sk/samba.po
index 2c511c8152..21f102d325 100644
--- a/applications/luci-app-samba/po/sk/samba.po
+++ b/applications/luci-app-samba/po/sk/samba.po
@@ -56,6 +56,11 @@ msgstr ""
msgid "Path"
msgstr ""
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr ""
diff --git a/applications/luci-app-samba/po/sv/samba.po b/applications/luci-app-samba/po/sv/samba.po
index 549a69c5c0..f58f8b87d7 100644
--- a/applications/luci-app-samba/po/sv/samba.po
+++ b/applications/luci-app-samba/po/sv/samba.po
@@ -58,6 +58,11 @@ msgstr "Nätverksdelningar"
msgid "Path"
msgstr "Genväg"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Endast läsbar"
diff --git a/applications/luci-app-samba/po/templates/samba.pot b/applications/luci-app-samba/po/templates/samba.pot
index 9e4ab7ff17..674ed331ca 100644
--- a/applications/luci-app-samba/po/templates/samba.pot
+++ b/applications/luci-app-samba/po/templates/samba.pot
@@ -49,6 +49,11 @@ msgstr ""
msgid "Path"
msgstr ""
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr ""
diff --git a/applications/luci-app-samba/po/tr/samba.po b/applications/luci-app-samba/po/tr/samba.po
index 486768f2ee..98d47beecf 100644
--- a/applications/luci-app-samba/po/tr/samba.po
+++ b/applications/luci-app-samba/po/tr/samba.po
@@ -56,6 +56,11 @@ msgstr ""
msgid "Path"
msgstr ""
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr ""
diff --git a/applications/luci-app-samba/po/uk/samba.po b/applications/luci-app-samba/po/uk/samba.po
index 077315e214..a4469f961e 100644
--- a/applications/luci-app-samba/po/uk/samba.po
+++ b/applications/luci-app-samba/po/uk/samba.po
@@ -63,6 +63,11 @@ msgstr "Загальні мережеві ресурси"
msgid "Path"
msgstr "Шлях"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "Тільки читання"
diff --git a/applications/luci-app-samba/po/vi/samba.po b/applications/luci-app-samba/po/vi/samba.po
index c5f6e02dfa..7c088cebe3 100644
--- a/applications/luci-app-samba/po/vi/samba.po
+++ b/applications/luci-app-samba/po/vi/samba.po
@@ -69,6 +69,11 @@ msgstr "Mạng chia sẻ"
msgid "Path"
msgstr ""
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
#, fuzzy
msgid "Read-only"
msgstr "Chỉ đọc "
diff --git a/applications/luci-app-samba/po/zh-cn/samba.po b/applications/luci-app-samba/po/zh-cn/samba.po
index 2294b611aa..b6fd8f31da 100644
--- a/applications/luci-app-samba/po/zh-cn/samba.po
+++ b/applications/luci-app-samba/po/zh-cn/samba.po
@@ -61,6 +61,11 @@ msgstr "网络共享"
msgid "Path"
msgstr "目录"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "只读"
diff --git a/applications/luci-app-samba/po/zh-tw/samba.po b/applications/luci-app-samba/po/zh-tw/samba.po
index bfa2d7d6dd..ed0dabb807 100644
--- a/applications/luci-app-samba/po/zh-tw/samba.po
+++ b/applications/luci-app-samba/po/zh-tw/samba.po
@@ -59,6 +59,11 @@ msgstr "網路分享"
msgid "Path"
msgstr "路徑"
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
msgid "Read-only"
msgstr "唯讀"
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 d9a61d0bf7..22f3106d03 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/cbi/shadowsocks-libev/rules.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua
index fe5f9c31b8..4a01bed247 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua
@@ -9,18 +9,28 @@ m = Map("shadowsocks-libev",
translate("Redir Rules"),
translate("On this page you can configure how traffics are to be \
forwarded to ss-redir instances. \
- If enabled, packets will first have their source ip addresses checked \
- against <em>Src ip bypass</em>, <em>Src ip forward</em>, \
- <em>Src ip checkdst</em> and if none matches <em>Src default</em> \
+ If enabled, packets will first have their src ip addresses checked \
+ against <em>Src ip/net bypass</em>, <em>Src ip/net forward</em>, \
+ <em>Src ip/net checkdst</em> and if none matches <em>Src default</em> \
will give the default action to be taken. \
If the prior check results in action <em>checkdst</em>, packets will continue \
- to have their destination addresses checked."))
+ to have their dst addresses checked."))
+local sdata = m:get('ss_rules')
+if not sdata then
+ m:set('ss_rules', nil, 'ss_rules')
+ m:set('ss_rules', 'disabled', "1")
+end
-s = m:section(NamedSection, "ss_rules", "ss-rules")
+function src_dst_option(s, ...)
+ local o = s:taboption(...)
+ o.datatype = "or(ip4addr,cidr4)"
+end
+
+s = m:section(NamedSection, "ss_rules", "ss_rules")
s:tab("general", translate("General Settings"))
-s:tab("srcip", translate("Source Settings"))
-s:tab("dstip", translate("Destination Settings"))
+s:tab("src", translate("Source Settings"))
+s:tab("dst", translate("Destination Settings"))
s:taboption('general', Flag, "disabled", translate("Disable"))
ss.option_install_package(s, 'general')
@@ -34,40 +44,66 @@ ss.values_redir(o, 'udp')
o = s:taboption('general', ListValue, "local_default",
translate("Local-out default"),
- translate("Default action for locally generated packets"))
+ translate("Default action for locally generated TCP packets"))
ss.values_actions(o)
+o = s:taboption('general', DynamicList, "ifnames",
+ translate("Ingress interfaces"),
+ translate("Only apply rules on packets from these network interfaces"))
+ss.values_ifnames(o)
s:taboption('general', Value, "ipt_args",
translate("Extra arguments"),
translate("Passes additional arguments to iptables. Use with care!"))
-s:taboption('srcip', DynamicList, "src_ips_bypass",
- translate("Src ip bypass"),
- translate("Bypass redir action for packets with source addresses in this list"))
-s:taboption('srcip', DynamicList, "src_ips_forward",
- translate("Src ip forward"),
- translate("Go through redir action for packets with source addresses in this list"))
-s:taboption('srcip', DynamicList, "src_ips_checkdst",
- translate("Src ip checkdst"),
- translate("Continue to have dst address checked for packets with source addresses in this list"))
-o = s:taboption('srcip', ListValue, "src_default",
+src_dst_option(s, 'src', DynamicList, "src_ips_bypass",
+ translate("Src ip/net bypass"),
+ translate("Bypass ss-redir for packets with src address in this list"))
+src_dst_option(s, 'src', DynamicList, "src_ips_forward",
+ translate("Src ip/net forward"),
+ translate("Forward through ss-redir for packets with src address in this list"))
+src_dst_option(s, 'src', DynamicList, "src_ips_checkdst",
+ translate("Src ip/net checkdst"),
+ translate("Continue to have dst address checked for packets with src address in this list"))
+o = s:taboption('src', ListValue, "src_default",
translate("Src default"),
- translate("Default action for packets whose source addresses do not match any of the source ip list"))
+ translate("Default action for packets whose src address do not match any of the src ip/net list"))
ss.values_actions(o)
-s:taboption('dstip', DynamicList, "dst_ips_bypass",
- translate("Dst ip bypass"),
- translate("Bypass redir action for packets with destination addresses in this list"))
-s:taboption('dstip', DynamicList, "dst_ips_forward",
- translate("Dst ip forward"),
- translate("Go through redir action for packets with destination addresses in this list"))
+src_dst_option(s, 'dst', DynamicList, "dst_ips_bypass",
+ translate("Dst ip/net bypass"),
+ translate("Bypass ss-redir for packets with dst address in this list"))
+src_dst_option(s, 'dst', DynamicList, "dst_ips_forward",
+ translate("Dst ip/net forward"),
+ translate("Forward through ss-redir for packets with dst address in this list"))
-o = s:taboption('dstip', FileBrowser, "dst_ips_bypass_file",
- translate("Dst ip bypass file"),
- translate("File containing ip addresses for the purposes as with <em>Dst ip bypass</em>"))
+o = s:taboption('dst', FileBrowser, "dst_ips_bypass_file",
+ translate("Dst ip/net bypass file"),
+ translate("File containing ip/net for the purposes as with <em>Dst ip/net bypass</em>"))
o.datatype = "file"
-s:taboption('dstip', FileBrowser, "dst_ips_forward_file",
- translate("Dst ip forward file"),
- translate("File containing ip addresses for the purposes as with <em>Dst ip forward</em>"))
+s:taboption('dst', FileBrowser, "dst_ips_forward_file",
+ translate("Dst ip/net forward file"),
+ translate("File containing ip/net for the purposes as with <em>Dst ip/net forward</em>"))
o.datatype = "file"
+o = s:taboption('dst', ListValue, "dst_default",
+ translate("Dst default"),
+ translate("Default action for packets whose dst address do not match any of the dst ip list"))
+ss.values_actions(o)
+
+local installed = os.execute("iptables -m recent -h &>/dev/null") == 0
+if installed then
+ o = s:taboption('dst', Flag, "dst_forward_recentrst")
+else
+ m:set('ss_rules', 'dst_forward_recentrst', "0")
+ o = s:taboption("dst", Button, "_install")
+ o.inputtitle = translate("Install package iptables-mod-conntrack-extra")
+ o.inputstyle = "apply"
+ o.write = function()
+ return luci.http.redirect(
+ luci.dispatcher.build_url("admin/system/packages") ..
+ "?submit=1&install=iptables-mod-conntrack-extra"
+ )
+ end
+end
+o.title = translate("Forward recentrst")
+o.description = translate("Forward those packets whose dst have recently sent to us multiple tcp-rst")
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 b11890f89d..7ba6b40c53 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
@@ -3,6 +3,7 @@
local _up = getfenv(3)
local ut = require("luci.util")
+local sys = require("luci.sys")
local ds = require("luci.dispatcher")
local nw = require("luci.model.network")
nw.init()
@@ -14,20 +15,25 @@ module("luci.model.shadowsocks-libev", function(m)
end)
function values_actions(o)
- for _, a in ipairs(actions) do
- o:value(a)
+ o:value("bypass")
+ o:value("forward")
+ if o.option ~= "dst_default" then
+ o:value("checkdst")
end
end
function values_redir(o, xmode)
o.map.uci.foreach("shadowsocks-libev", "ss_redir", function(sdata)
+ local disabled = ucival_to_bool(sdata["disabled"])
local sname = sdata[".name"]
- local mode = sdata["mode"]
- if mode and mode:find(xmode) then
+ local mode = sdata["mode"] or "tcp_only"
+ if not disabled and mode:find(xmode) then
local desc = "%s - %s" % {sname, mode}
o:value(sname, desc)
end
end)
+ o:value("", "<unset>")
+ o.default = ""
end
function values_serverlist(o)
@@ -43,7 +49,6 @@ function values_serverlist(o)
end
function values_ipaddr(o)
- local keys, vals = {}, {}
for _, v in ipairs(nw:get_interfaces()) do
for _, a in ipairs(v:ipaddrs()) do
o:value(a:host():string(), '%s (%s)' %{ a:host(), v:shortname() })
@@ -51,6 +56,12 @@ function values_ipaddr(o)
end
end
+function values_ifnames(o)
+ for _, v in ipairs(sys.net.devices()) do
+ o:value(v)
+ end
+end
+
function options_client(s, tab)
local o
@@ -132,6 +143,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
@@ -154,6 +167,9 @@ function cfgvalue_overview_(sdata, lines, names)
for _, n in ipairs(names) do
local v = sdata[n]
if v ~= nil then
+ if n == "key" or n == "password" then
+ v = translate("<hidden>")
+ end
local fv = "<var>%s</var>" % ut.pcdata(v)
if sdata[".type"] ~= "ss_server" and n == "server" then
fv = '<a class="label" href="%s">%s</a>' % {
@@ -221,17 +237,13 @@ modes = {
"udp_only",
}
-actions = {
- "bypass",
- "forward",
- "checkdst",
-}
-
methods = {
-- aead
"aes-128-gcm",
"aes-192-gcm",
"aes-256-gcm",
+ "chacha20-ietf-poly1305",
+ "xchacha20-ietf-poly1305",
-- stream
"table",
"rc4",
diff --git a/applications/luci-app-simple-adblock/po/sv/simple-adblock.po b/applications/luci-app-simple-adblock/po/sv/simple-adblock.po
new file mode 100644
index 0000000000..e95f95f02b
--- /dev/null
+++ b/applications/luci-app-simple-adblock/po/sv/simple-adblock.po
@@ -0,0 +1,80 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Blacklisted Domain URLs"
+msgstr "Svartlistade domänadresser"
+
+msgid "Blacklisted Domains"
+msgstr "Svartlistade domäner"
+
+msgid "Blacklisted Hosts URLs"
+msgstr "Svartlistade värdadresser"
+
+msgid "Controls system log and console output verbosity"
+msgstr "Kontrollerar systemloggar och detaljnivån för konsoll-utmatningen"
+
+msgid "Enable/start service"
+msgstr "Aktivera/starta tjänsten"
+
+msgid "Force Router DNS"
+msgstr ""
+
+msgid "Force Router DNS server to all local devices"
+msgstr ""
+
+msgid "Forces Router DNS use on local devices, also known as DNS Hijacking"
+msgstr ""
+
+msgid "Individual domains to be blacklisted"
+msgstr "Individuella domäner som ska svartlistas"
+
+msgid "Individual domains to be whitelisted"
+msgstr "Individulla domäner som ska svartlistas"
+
+msgid "LED to indicate status"
+msgstr "LED för att indikera status"
+
+msgid "Let local devices use their own DNS servers if set"
+msgstr ""
+
+msgid "Output Verbosity Setting"
+msgstr ""
+
+msgid "Pick the LED not already used in"
+msgstr ""
+
+msgid "Simple AdBlock"
+msgstr "Simple AdBlock"
+
+msgid "Simple AdBlock Settings"
+msgstr "Inställningar för Simple AdBlock"
+
+msgid "Some output"
+msgstr "Viss utmatning"
+
+msgid "Suppress output"
+msgstr "Förträng utmatning"
+
+msgid "System LED Configuration"
+msgstr ""
+
+msgid "URLs to lists of domains to be blacklisted"
+msgstr ""
+
+msgid "URLs to lists of domains to be whitelisted"
+msgstr ""
+
+msgid "URLs to lists of hosts to be blacklisted"
+msgstr ""
+
+msgid "Verbose output"
+msgstr "Utförlig utmatning"
+
+msgid "Whitelisted Domain URLs"
+msgstr "Vitlistade domänadresser"
+
+msgid "Whitelisted Domains"
+msgstr "Vitlistade domäner"
+
+msgid "none"
+msgstr "ingen"
diff --git a/applications/luci-app-splash/po/sv/splash.po b/applications/luci-app-splash/po/sv/splash.po
index 055c67b866..a5ebcb7efe 100644
--- a/applications/luci-app-splash/po/sv/splash.po
+++ b/applications/luci-app-splash/po/sv/splash.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
"Language-Team: none\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
@@ -45,6 +45,8 @@ msgstr ""
msgid ""
"Become an active member of this community and help by operating your own node"
msgstr ""
+"Bli en aktiv medlem av det här sällskapet och hjälp till genom att "
+"tillhandahålla en egen nod"
msgid "Blacklist"
msgstr "Svartlista"
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua
index 009ed805db..e5a048fa88 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua
@@ -12,6 +12,7 @@ end
m = SimpleForm("input", nil)
m:append(Template("travelmate/config_css"))
+m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua
index 4d43637d9c..0096d6a8c2 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua
@@ -12,6 +12,7 @@ end
m = SimpleForm("input", nil)
m:append(Template("travelmate/config_css"))
+m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua
index a025c1379f..7ef9920a08 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua
@@ -12,6 +12,7 @@ end
m = SimpleForm("input", nil)
m:append(Template("travelmate/config_css"))
+m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua
index 4233da6ac7..8a20ab9cce 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua
@@ -14,6 +14,7 @@ end
m = SimpleForm("input", nil)
m:append(Template("travelmate/config_css"))
+m.submit = translate("Save")
m.reset = false
s = m:section(SimpleSection, nil,
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
index 12cb72cbe5..27971dfdad 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
@@ -4,8 +4,8 @@
local fs = require("nixio.fs")
local uci = require("luci.model.uci").cursor()
local json = require("luci.jsonc")
-local nw = require("luci.model.network").init()
-local fw = require("luci.model.firewall").init()
+local nw = require("luci.model.network").init()
+local fw = require("luci.model.firewall").init()
local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
local trminput = uci.get("travelmate", "global", "trm_rtfile") or "/tmp/trm_runtime.json"
local uplink = uci.get("network", trmiface) or ""
@@ -18,7 +18,7 @@ m = Map("travelmate", translate("Travelmate"),
.. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md"))
function m.on_after_commit(self)
- luci.sys.call("/etc/init.d/travelmate restart >/dev/null 2>&1")
+ luci.sys.call("env -i /etc/init.d/travelmate restart >/dev/null 2>&1")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
end
@@ -27,39 +27,38 @@ s = m:section(NamedSection, "global", "travelmate")
-- Interface Wizard
if uplink == "" then
- dv = s:option(DummyValue, "nil", translate("Interface Wizard"))
+ dv = s:option(DummyValue, "", translate("Interface Wizard"))
dv.template = "cbi/nullsection"
- o = s:option(Value, "trm_iface", translate("Uplink interface"))
+ o = s:option(Value, "", translate("Uplink interface"))
o.datatype = "and(uciname,rangelength(3,15))"
- o.default = "trm_wwan"
+ o.default = trmiface
o.rmempty = false
- function o.write(self, section, value)
- iface = o:formvalue(section)
- uci:set("travelmate", section, "trm_iface", iface)
- uci:save("travelmate")
- uci:commit("travelmate")
- end
-
- btn = s:option(Button, "", translate("Create Uplink Interface"),
+ btn = s:option(Button, "trm_iface", translate("Create Uplink Interface"),
translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
.. translate("add it to the wan zone of the firewall. This step has only to be done once."))
btn.inputtitle = translate("Add Interface")
btn.inputstyle = "apply"
btn.disabled = false
- function btn.write()
- local net = nw:add_network(iface, { proto = "dhcp" })
- if net then
- nw:save("network")
- nw:commit("network")
- local zone = fw:get_zone_by_network("wan")
- if zone then
- zone:add_network(iface)
- fw:save("firewall")
- fw:commit("firewall")
- luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
+ function btn.write(self, section, value)
+ local iface = o:formvalue(section)
+ if iface then
+ uci:set("travelmate", section, "trm_iface", iface)
+ uci:save("travelmate")
+ uci:commit("travelmate")
+ local net = nw:add_network(iface, { proto = "dhcp" })
+ if net then
+ nw:save("network")
+ nw:commit("network")
+ local zone = fw:get_zone_by_network("wan")
+ if zone then
+ zone:add_network(iface)
+ fw:save("firewall")
+ fw:commit("firewall")
+ end
end
+ luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
end
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
end
@@ -83,7 +82,7 @@ btn.inputtitle = translate("Rescan")
btn.inputstyle = "find"
btn.disabled = false
function btn.write()
- luci.sys.call("/etc/init.d/travelmate start >/dev/null 2>&1")
+ luci.sys.call("env -i /etc/init.d/travelmate start >/dev/null 2>&1")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
end
@@ -164,25 +163,27 @@ e = m:section(NamedSection, "global", "travelmate", translate("Extra options"),
translate("Options for further tweaking in case the defaults are not suitable for you."))
e1 = e:option(Value, "trm_radio", translate("Radio selection"),
- translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'"))
+ translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'."))
+e1.datatype = "and(uciname,rangelength(6,6))"
e1.rmempty = true
e2 = e:option(Value, "trm_maxretry", translate("Connection Limit"),
- translate("How many times should travelmate try to connect to an Uplink"))
+ translate("How many times should travelmate try to connect to an Uplink. ")
+ .. translate("To disable this feature set it to '0' which means unlimited retries."))
e2.default = 3
-e2.datatype = "range(1,10)"
+e2.datatype = "range(0,30)"
e2.rmempty = false
e3 = e:option(Value, "trm_maxwait", translate("Interface Timeout"),
- translate("How long should travelmate wait for a successful wlan interface reload"))
+ translate("How long should travelmate wait for a successful wlan interface reload."))
e3.default = 30
e3.datatype = "range(5,60)"
e3.rmempty = false
e4 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
- translate("Timeout in seconds between retries in 'automatic' mode"))
+ translate("Timeout in seconds between retries in 'automatic' mode."))
e4.default = 60
-e4.datatype = "range(5,300)"
+e4.datatype = "range(60,300)"
e4.rmempty = false
return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
index 979307e001..dcfa17c8b5 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
@@ -7,6 +7,7 @@ local http = require("luci.http")
local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
m = SimpleForm("add", translate("Add Wireless Uplink Configuration"))
+m.submit = translate("Save")
m.cancel = translate("Back to overview")
m.reset = false
@@ -18,7 +19,7 @@ m.hidden = {
device = http.formvalue("device"),
ssid = http.formvalue("ssid"),
wep = http.formvalue("wep"),
- wpa_suites = http.formvalue("wpa_suites"),
+ wpa_suites = http.formvalue("wpa_suites"),
wpa_version = http.formvalue("wpa_version")
}
@@ -45,11 +46,11 @@ end
function wssid.write(self, section, value)
newsection = uci:section("wireless", "wifi-iface", nil, {
- mode = "sta",
- network = trmiface,
- device = m.hidden.device,
- ssid = wssid:formvalue(section),
- disabled = "1"
+ mode = "sta",
+ network = trmiface,
+ device = m.hidden.device,
+ ssid = wssid:formvalue(section),
+ disabled = "1"
})
if (tonumber(m.hidden.wep) or 0) == 1 then
uci:set("wireless", newsection, "encryption", "wep-open")
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua
index 97ec1ca3ca..0c3cc1865b 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua
@@ -10,5 +10,4 @@ if cfg ~= nil then
uci:save("wireless")
uci:commit("wireless")
end
-
http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
index 0bae98460f..c60ff22c4d 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
@@ -6,6 +6,7 @@ local uci = require("luci.model.uci").cursor()
local http = require("luci.http")
m = SimpleForm("edit", translate("Edit Wireless Uplink Configuration"))
+m.submit = translate("Save")
m.cancel = translate("Back to overview")
m.reset = false
@@ -21,11 +22,15 @@ local s = uci:get_all("wireless", m.hidden.cfg)
if s ~= nil then
wssid = m:field(Value, "ssid", translate("SSID"))
wssid.default = s.ssid
-
+ wssid.datatype = "rangelength(1,32)"
if s.encryption and s.key then
wkey = m:field(Value, "key", translatef("Passphrase (%s)", s.encryption))
+ elseif s.encryption and s.password then
+ wkey = m:field(Value, "password", translatef("Passphrase (%s)", s.encryption))
+ end
+ if s.encryption and (s.key or s.password) then
wkey.password = true
- wkey.default = s.key
+ wkey.default = s.key or s.password
if s.encryption == "wep" then
wkey.datatype = "wepkey"
else
@@ -33,17 +38,19 @@ if s ~= nil then
end
end
else
- http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+ m.on_cancel()
end
function wssid.write(self, section, value)
uci:set("wireless", m.hidden.cfg, "ssid", wssid:formvalue(section))
if s.encryption and s.key then
uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section))
+ elseif s.encryption and s.password then
+ uci:set("wireless", m.hidden.cfg, "password", wkey:formvalue(section))
end
uci:save("wireless")
uci:commit("wireless")
- http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+ m.on_cancel()
end
return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua
index d53e1f55e5..6eb4c72063 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua
@@ -8,44 +8,29 @@ local uci = require("luci.model.uci").cursor()
local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
if cfg ~= nil then
- local iface = ""
local section = ""
local idx = ""
local idx_change = ""
- if dir == "up" then
- uci:foreach("wireless", "wifi-iface", function(s)
- iface = s.network
- if iface == trmiface then
- section = s['.name']
- if cfg == section then
- idx = s['.index']
- else
- idx_change = s['.index']
- end
- if idx ~= "" and idx_change ~= "" and idx_change < idx then
- uci:reorder("wireless", cfg, idx_change)
- idx = ""
- end
+ local changed = ""
+ uci:foreach("wireless", "wifi-iface", function(s)
+ local iface = s.network or ""
+ if iface == trmiface then
+ section = s['.name']
+ if cfg == section then
+ idx = s['.index']
+ else
+ idx_change = s['.index']
end
- end)
- elseif dir == "down" then
- uci:foreach("wireless", "wifi-iface", function(s)
- iface = s.network
- if iface == trmiface then
- section = s['.name']
- if cfg == section then
- idx = s['.index']
- else
- idx_change = s['.index']
- end
- if idx ~= "" and idx_change ~= "" and idx_change > idx then
- uci:reorder("wireless", cfg, idx_change)
- idx = ""
- end
+ if (dir == "up" and idx ~= "" and idx_change ~= "" and idx_change < idx) or
+ (dir == "down" and idx ~= "" and idx_change ~= "" and idx_change > idx) then
+ changed = uci:reorder("wireless", cfg, idx_change)
+ idx = ""
end
- end)
+ end
+ end)
+ if changed ~= "" then
+ uci:save("wireless")
+ uci:commit("wireless")
end
- uci:save("wireless")
- uci:commit("wireless")
end
http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
index f1f26801ce..cbb6c189b8 100644
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
@@ -5,7 +5,7 @@ This is free software, licensed under the Apache License, Version 2.0
<%-
local write = io.write
- local uci = require "luci.model.uci".cursor()
+ local uci = require("luci.model.uci").cursor()
local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
-%>
@@ -29,9 +29,8 @@ This is free software, licensed under the Apache License, Version 2.0
uci:foreach("wireless", "wifi-iface", function(s)
local iface = s.network or ""
if iface == trmiface then
- local section = s['.name']
+ local section = s['.name'] or ""
local device = s.device or ""
- local mode = s.mode or ""
local ssid = s.ssid or ""
local encryption = s.encryption or ""
local disabled = s.disabled or ""
@@ -53,7 +52,7 @@ This is free software, licensed under the Apache License, Version 2.0
<input type="button" class="cbi-button cbi-button-remove" onclick="location.href='<%=url('admin/services/travelmate/wifidelete')%>?cfg=<%=section%>'" title="<%:Delete this Uplink%>" value="<%:Delete%>"/>
</td>
</tr>
-<%
+<%
end
end)
%>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
index dea107eef4..af90c18d23 100644
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
@@ -4,8 +4,8 @@ This is free software, licensed under the Apache License, Version 2.0
-%>
<%-
- local sys = require "luci.sys"
- local utl = require "luci.util"
+ local sys = require("luci.sys")
+ local utl = require("luci.util")
local dev = luci.http.formvalue("device")
local iw = luci.sys.wifi.getiwinfo(dev)
@@ -28,7 +28,7 @@ This is free software, licensed under the Apache License, Version 2.0
function percent_wifi_signal(info)
local qc = info.quality or 0
local qm = info.quality_max or 0
- if info.bssid and qc > 0 and qm > 0 then
+ if info.ssid and qc > 0 and qm > 0 then
return math.floor((100 / qm) * qc)
else
return 0
@@ -47,7 +47,7 @@ This is free software, licensed under the Apache License, Version 2.0
<th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
<th class="cbi-section-table-cell" style="text-align:left" colspan="2"><%:Signal strength%></th>
</tr>
- <% for i, net in ipairs(iw.scanlist or { }) do%>
+ <% for i, net in ipairs(iw.scanlist or { }) do %>
<tr class="cbi-section-table-row cbi-rowstyle-1">
<td class="cbi-value-field" style="text-align:left">
<strong><%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%></strong>
@@ -76,14 +76,14 @@ This is free software, licensed under the Apache License, Version 2.0
</table>
</fieldset>
<div class="cbi-page-actions right">
- <form class="inline" action="<%=url('admin/services/travelmate/stations')%>" method="post">
- <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>"/>
- </form>
<form class="inline" action="<%=url('admin/services/travelmate/wifiscan')%>" method="post">
<input type="hidden" name="token" value="<%=token%>"/>
<input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/>
<input class="cbi-button cbi-input-find" type="submit" value="<%:Repeat scan%>"/>
</form>
+ <form class="inline" action="<%=url('admin/services/travelmate/stations')%>" method="post">
+ <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>"/>
+ </form>
</div>
</div>
diff --git a/applications/luci-app-travelmate/po/ja/travelmate.po b/applications/luci-app-travelmate/po/ja/travelmate.po
index 150ef7047c..febdbd5833 100644
--- a/applications/luci-app-travelmate/po/ja/travelmate.po
+++ b/applications/luci-app-travelmate/po/ja/travelmate.po
@@ -107,12 +107,12 @@ msgstr ""
"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン ドキュメント</a> を"
"確認してください。"
-msgid "How long should travelmate wait for a successful wlan interface reload"
+msgid "How long should travelmate wait for a successful wlan interface reload."
msgstr ""
"無線LAN インターフェースのリロードが成功するまでの、Travelmate の待機時間で"
"す。"
-msgid "How many times should travelmate try to connect to an Uplink"
+msgid "How many times should travelmate try to connect to an Uplink."
msgstr "Travelmate がアップリンクへの接続を試行する回数です。"
msgid "Input file not found, please check your configuration."
@@ -128,8 +128,8 @@ msgid ""
"Keep travelmate in an active state. Check every n seconds the connection "
"status, i.e. the uplink availability."
msgstr ""
-"Travelmate をアクティブ状態で維持します。 n秒ごとにアップリンクの可用性確認と"
-"して、接続状態をチェックします"
+"Travelmate をアクティブ状態で維持します。\"実行間隔\" で設定された時間毎"
+"(秒)に、アップリンクの可用性を確認するために接続状態をチェックします"
msgid "Last rundate"
msgstr "最終実行日時"
@@ -161,7 +161,7 @@ msgid ""
msgstr "デフォルトの設定が適切でない場合、さらに設定するためのオプションです。"
msgid "Overall Timeout"
-msgstr "全体タイムアウト"
+msgstr "実行間隔"
msgid "Overview"
msgstr "概要"
@@ -188,8 +188,8 @@ msgstr "再スキャン"
msgid "Rescan"
msgstr "再スキャン"
-msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
-msgstr "Travelmate が特定の無線に接続するようにします。例: 'radio0'"
+msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
+msgstr "Travelmate が指定された無線に接続するよう制御します。(例: 'radio0')"
msgid "Runtime information"
msgstr "実行情報"
@@ -200,6 +200,9 @@ msgstr "SSID"
msgid "SSID (hidden)"
msgstr "SSID(ステルス)"
+msgid "Save"
+msgstr "保存"
+
msgid "Scan"
msgstr "スキャン:"
@@ -253,8 +256,12 @@ msgstr ""
"このフォームには、システムログ内の Travelmate に関するメッセージのみが表示さ"
"れます。"
-msgid "Timeout in seconds between retries in 'automatic' mode"
-msgstr "'automatic' モード時に接続を再試行する間隔(秒)です。"
+msgid "Timeout in seconds between retries in 'automatic' mode."
+msgstr "'automatic' モード時に接続を確認または再試行する間隔(秒)です。"
+
+msgid "To disable this feature set it to '0' which means unlimited retries."
+msgstr ""
+"この機能を無効にして接続の再試行を無制限にする場合、 '0' を設定します。"
msgid "Travelmate"
msgstr "Travelmate"
@@ -272,7 +279,7 @@ msgid "Unknown"
msgstr "不明"
msgid "Uplink / Trigger interface"
-msgstr "アップリンク/トリガー インターフェース"
+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 d74373d8c5..41fab70149 100644
--- a/applications/luci-app-travelmate/po/pt-br/travelmate.po
+++ b/applications/luci-app-travelmate/po/pt-br/travelmate.po
@@ -102,10 +102,10 @@ msgid ""
"documentation</a>"
msgstr ""
-msgid "How long should travelmate wait for a successful wlan interface reload"
+msgid "How long should travelmate wait for a successful wlan interface reload."
msgstr ""
-msgid "How many times should travelmate try to connect to an Uplink"
+msgid "How many times should travelmate try to connect to an Uplink."
msgstr ""
msgid "Input file not found, please check your configuration."
@@ -173,7 +173,7 @@ msgstr ""
msgid "Rescan"
msgstr ""
-msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
+msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
msgstr ""
msgid "Runtime information"
@@ -185,6 +185,9 @@ msgstr ""
msgid "SSID (hidden)"
msgstr ""
+msgid "Save"
+msgstr ""
+
msgid "Scan"
msgstr ""
@@ -228,7 +231,10 @@ msgid ""
"messages only."
msgstr ""
-msgid "Timeout in seconds between retries in 'automatic' mode"
+msgid "Timeout in seconds between retries in 'automatic' mode."
+msgstr ""
+
+msgid "To disable this feature set it to '0' which means unlimited retries."
msgstr ""
msgid "Travelmate"
diff --git a/applications/luci-app-travelmate/po/templates/travelmate.pot b/applications/luci-app-travelmate/po/templates/travelmate.pot
index dc0583fb70..a9ceafe237 100644
--- a/applications/luci-app-travelmate/po/templates/travelmate.pot
+++ b/applications/luci-app-travelmate/po/templates/travelmate.pot
@@ -91,10 +91,10 @@ msgid ""
"documentation</a>"
msgstr ""
-msgid "How long should travelmate wait for a successful wlan interface reload"
+msgid "How long should travelmate wait for a successful wlan interface reload."
msgstr ""
-msgid "How many times should travelmate try to connect to an Uplink"
+msgid "How many times should travelmate try to connect to an Uplink."
msgstr ""
msgid "Input file not found, please check your configuration."
@@ -162,7 +162,7 @@ msgstr ""
msgid "Rescan"
msgstr ""
-msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
+msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
msgstr ""
msgid "Runtime information"
@@ -174,6 +174,9 @@ msgstr ""
msgid "SSID (hidden)"
msgstr ""
+msgid "Save"
+msgstr ""
+
msgid "Scan"
msgstr ""
@@ -217,7 +220,10 @@ msgid ""
"messages only."
msgstr ""
-msgid "Timeout in seconds between retries in 'automatic' mode"
+msgid "Timeout in seconds between retries in 'automatic' mode."
+msgstr ""
+
+msgid "To disable this feature set it to '0' which means unlimited retries."
msgstr ""
msgid "Travelmate"
diff --git a/applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua b/applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua
index 03821ad9b5..883e1bb631 100644
--- a/applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua
+++ b/applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua
@@ -202,14 +202,17 @@ o = ucs:taboption("advanced", Value, "max_requests", translate("Maximum number o
o.optional = true
o.datatype = "uinteger"
-local s = m:section(NamedSection, "px5g", "cert", translate("uHTTPd Self-signed Certificate Parameters"))
+local s = m:section(TypedSection, "cert", translate("uHTTPd Self-signed Certificate Parameters"))
+
+s.template = "cbi/tsection"
+s.anonymous = true
o = s:option(Value, "days", translate("Valid for # of Days"))
o.default = 730
o.datatype = "uinteger"
o = s:option(Value, "bits", translate("Length of key in bits"))
-o.default = 1024
+o.default = 2048
o.datatype = "min(1024)"
o = s:option(Value, "commonname", translate("Server Hostname"), translate("a.k.a CommonName"))
@@ -222,6 +225,6 @@ o = s:option(Value, "state", translate("State"))
o.default = "Unknown"
o = s:option(Value, "location", translate("Location"))
-o.default = "Somewhere"
+o.default = "Unknown"
return m
diff --git a/applications/luci-app-unbound/luasrc/controller/unbound.lua b/applications/luci-app-unbound/luasrc/controller/unbound.lua
index 0a5abc5a5e..b44bf038eb 100644
--- a/applications/luci-app-unbound/luasrc/controller/unbound.lua
+++ b/applications/luci-app-unbound/luasrc/controller/unbound.lua
@@ -1,17 +1,151 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- Copyright 2017 Eric Luehrsen <ericluehrsen@hotmail.com>
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.unbound", package.seeall)
+
function index()
- if not nixio.fs.access("/etc/config/unbound") then
- return
- end
+ local ucl = luci.model.uci.cursor()
+ local valexp = ucl:get_first("unbound", "unbound", "extended_luci")
+ local valman = ucl:get_first("unbound", "unbound", "manual_conf")
+
+
+ if not nixio.fs.access("/etc/config/unbound") then
+ return
+ end
+
+
+ if valexp == "1" then
+ -- Expanded View
+ entry({"admin", "services", "unbound"}, firstchild(), _("Recursive DNS")).dependent = false
+
+ -- UCI Tab(s)
+ entry({"admin", "services", "unbound", "configure"}, cbi("unbound/configure"), _("Settings"), 10)
+
+ -- Status Tab(s)
+ entry({"admin", "services", "unbound", "status"}, firstchild(), _("Status"), 20)
+ entry({"admin", "services", "unbound", "status", "syslog"}, call("QuerySysLog"), _("Log"), 50).leaf = true
+
+
+ if nixio.fs.access("/usr/sbin/unbound-control") then
+ -- Require unbound-control to execute
+ entry({"admin", "services", "unbound", "status", "statistics"}, call("QueryStatistics"), _("Statistics"), 10).leaf = true
+ entry({"admin", "services", "unbound", "status", "localdata"}, call("QueryLocalData"), _("Local Data"), 20).leaf = true
+ entry({"admin", "services", "unbound", "status", "localzone"}, call("QueryLocalZone"), _("Local Zones"), 30).leaf = true
+
+ else
+ entry({"admin", "services", "unbound", "status", "statistics"}, call("ShowEmpty"), _("Statistics"), 10).leaf = true
+ end
+
+
+ -- Raw File Tab(s)
+ entry({"admin", "services", "unbound", "files"}, firstchild(), _("Files"), 30)
+
+
+ if valman ~= "1" then
+ entry({"admin", "services", "unbound", "files", "base"}, call("ShowUnboundConf"), _("UCI: Unbound"), 10).leaf = true
+ else
+ entry({"admin", "services", "unbound", "files", "base"}, cbi("unbound/manual"), _("Edit: Unbound"), 10).leaf = true
+ end
+
+
+ entry({"admin", "services", "unbound", "files", "server"}, cbi("unbound/server"), _("Edit: Server"), 20).leaf = true
+ entry({"admin", "services", "unbound", "files", "extended"}, cbi("unbound/extended"), _("Edit: Extended"), 30).leaf = true
+
+
+ if nixio.fs.access("/var/lib/unbound/unbound_dhcp.conf") then
+ entry({"admin", "services", "unbound", "files", "dhcp"}, call("ShowDHCPConf"), _("Include: DHCP"), 40).leaf = true
+ end
+
+
+ if nixio.fs.access("/var/lib/unbound/adb_list.overall") then
+ entry({"admin", "services", "unbound", "files", "adblock"}, call("ShowAdblock"), _("Include: Adblock"), 50).leaf = true
+ end
+
+ else
+ -- Simple View to UCI only
+ entry({"admin", "services", "unbound"}, cbi("unbound/configure"), _("Recursive DNS")).dependent = false
+ end
+end
+
+
+function ShowEmpty()
+ local lclhead = "Unbound Control"
+ local lcldesc = luci.i18n.translate("This could display more statistics with the unbound-control package.")
+ luci.template.render("unbound/show-empty", {heading = lclhead, description = lcldesc})
+end
+
+
+function QuerySysLog()
+ local lclhead = "System Log"
+ local lcldata = luci.util.exec("logread | grep -i unbound")
+ local lcldesc = luci.i18n.translate("This shows syslog filtered for events involving Unbound.")
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function QueryStatistics()
+ local lclhead = "Unbound Control Stats"
+ local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf stats_noreset")
+ local lcldesc = luci.i18n.translate("This shows some performance statistics tracked by Unbound.")
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function QueryLocalData()
+ local lclhead = "Unbound Control Local Data"
+ local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_data")
+ local lcldesc = luci.i18n.translate("This shows local host records that shortcut recursion.")
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function QueryLocalZone()
+ local lclhead = "Unbound Control Local Zones"
+ local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_zones")
+ local lcldesc = luci.i18n.translate("This shows local zone definitions that affect recursion routing or processing. ")
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function ShowUnboundConf()
+ local unboundfile = "/var/lib/unbound/unbound.conf"
+ local lclhead = "Unbound Conf"
+ local lcldata = nixio.fs.readfile(unboundfile)
+ local lcldesc = luci.i18n.translate("This shows configuration generated by UCI:")
+ lcldesc = lcldesc .. " (" .. unboundfile .. ")"
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function ShowDHCPConf()
+ local dhcpfile = "/var/lib/unbound/unbound_dhcp.conf"
+ local lclhead = "DHCP Conf"
+ local lcldata = nixio.fs.readfile(dhcpfile)
+ local lcldesc = luci.i18n.translate("This shows LAN hosts added by DHCP hook scripts:")
+ lcldesc = lcldesc .. " (" .. dhcpfile .. ")"
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function ShowAdblock()
+ local adblockfile = "/var/lib/unbound/adb_list.overall"
+ local lclhead = "Adblock Conf"
+ local lcldata, lcldesc
+
- local page
+ if nixio.fs.stat(adblockfile).size > 262144 then
+ lcldesc = luci.i18n.translate("Adblock domain list is too large for LuCI:")
+ lcldesc = lcldesc .. " (" .. adblockfile .. ")"
+ luci.template.render("unbound/show-empty", {heading = lclhead, description = lcldesc})
- page = entry({"admin", "services", "unbound"}, cbi("unbound"), _("Recursive DNS"))
- page.dependent = true
+ else
+ lcldata = nixio.fs.readfile(adblockfile)
+ lcldesc = luci.i18n.translate("This shows blocked domains provided by Adblock scripts:")
+ lcldesc = lcldesc .. " (" .. adblockfile .. ")"
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+ end
end
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua
deleted file mode 100644
index bfaacb40bc..0000000000
--- a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua
+++ /dev/null
@@ -1,216 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
--- Copyright 2016 Dan Luedtke <mail@danrl.com>
--- Licensed to the public under the Apache License 2.0.
-
-local m
-local s1
-local ena, mcf, lsv, rlh, rpv, vld, nvd, eds, prt, tlm
-local ctl, dlk, dom, dty, lfq, wfq, exa, ctl, d64, pfx, qry, qrs
-local pro, tgr, rsc, rsn, ag2
-
-m = Map("unbound", translate("Recursive DNS"),
- translatef("<a href=\"%s\" target=\"_blank\">Unbound</a>"
- .. " is a validating, recursive, and caching DNS resolver. "
- .. "UCI help can be found on "
- .. "<a href=\"%s\" target=\"_blank\">github</a>.",
- "https://www.unbound.net/",
- "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md"))
-
-
-s1 = m:section(TypedSection, "unbound")
-s1.addremove = false
-s1.anonymous = true
-s1:tab("service", translate("Basic Settings"))
-s1:tab("advanced", translate("Advanced Settings"))
-s1:tab("resource", translate("Resource Settings"))
-
---LuCI or Not
-
-ena = s1:taboption("service", Flag, "enabled", translate("Enable Unbound:"),
- translate("Enable the initialization scripts for Unbound"))
-ena.rmempty = false
-
-mcf = s1:taboption("service", Flag, "manual_conf", translate("Manual Conf:"),
- translate("Skip UCI and use /etc/unbound/unbound.conf"))
-mcf.rmempty = false
-
-function ena.cfgvalue(self, section)
- return luci.sys.init.enabled("unbound") and self.enabled or self.disabled
-end
-
-function ena.write(self, section, value)
- if value == "1" then
- luci.sys.init.enable("unbound")
- luci.sys.call("/etc/init.d/unbound start >/dev/null")
- else
- luci.sys.call("/etc/init.d/unbound stop >/dev/null")
- luci.sys.init.disable("unbound")
- end
-
- return Flag.write(self, section, value)
-end
-
---Basic Tab
-
-lsv = s1:taboption("service", Flag, "localservice", translate("Local Service:"),
- translate("Accept queries only from local subnets"))
-lsv.rmempty = false
-
-rlh = s1:taboption("service", Flag, "rebind_localhost", translate("Block Localhost Rebind:"),
- translate("Prevent upstream response of 127.0.0.0/8"))
-rlh.rmempty = false
-
-rpv = s1:taboption("service", Flag, "rebind_protection", translate("Block Private Rebind:"),
- translate("Prevent upstream response of RFC1918 ranges"))
-rpv.rmempty = false
-
-vld = s1:taboption("service", Flag, "validator", translate("Enable DNSSEC:"),
- translate("Enable the DNSSEC validator module"))
-vld.rmempty = false
-
-nvd = s1:taboption("service", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"),
- translate("Break the loop where DNSSEC needs NTP and NTP needs DNS"))
-nvd.rmempty = false
-nvd:depends({ validator = true })
-
-eds = s1:taboption("service", Value, "edns_size", translate("EDNS Size:"),
- translate("Limit extended DNS packet size"))
-eds.datatype = "and(uinteger,min(512),max(4096))"
-eds.rmempty = false
-
-prt = s1:taboption("service", Value, "listen_port", translate("Listening Port:"),
- translate("Choose Unbounds listening port"))
-prt.datatype = "port"
-prt.rmempty = false
-
-tlm = s1:taboption("service", Value, "ttl_min", translate("TTL Minimum:"),
- translate("Prevent excessively short cache periods"))
-tlm.datatype = "and(uinteger,min(0),max(600))"
-tlm.rmempty = false
-
---Advanced Tab
-
-ctl = s1:taboption("advanced", Flag, "unbound_control", translate("Unbound Control App:"),
- translate("Enable unecrypted localhost access for unbound-control"))
-ctl.rmempty = false
-
-dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"),
- translate("Link to supported programs to load DHCP into DNS"))
-dlk:value("none", translate("No Link"))
-dlk:value("dnsmasq", "dnsmasq")
-dlk:value("odhcpd", "odhcpd")
-dlk.rmempty = false
-
-dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"),
- translate("Domain suffix for this router and DHCP clients"))
-dom.placeholder = "lan"
-dom:depends({ dhcp_link = "none" })
-dom:depends({ dhcp_link = "odhcpd" })
-
-dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"),
- translate("How to treat queries of this local domain"))
-dty:value("deny", translate("Ignored"))
-dty:value("refuse", translate("Refused"))
-dty:value("static", translate("Only Local"))
-dty:value("transparent", translate("Also Forwarded"))
-dty:depends({ dhcp_link = "none" })
-dty:depends({ dhcp_link = "odhcpd" })
-
-lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"),
- translate("How to enter the LAN or local network router in DNS"))
-lfq:value("0", translate("No DNS"))
-lfq:value("1", translate("Hostname, Primary Address"))
-lfq:value("2", translate("Hostname, All Addresses"))
-lfq:value("3", translate("Host FQDN, All Addresses"))
-lfq:value("4", translate("Interface FQDN, All Addresses"))
-lfq:depends({ dhcp_link = "none" })
-lfq:depends({ dhcp_link = "odhcpd" })
-
-wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"),
- translate("Override the WAN side router entry in DNS"))
-wfq:value("0", translate("Upstream"))
-wfq:value("1", translate("Hostname, Primary Address"))
-wfq:value("2", translate("Hostname, All Addresses"))
-wfq:value("3", translate("Host FQDN, All Addresses"))
-wfq:value("4", translate("Interface FQDN, All Addresses"))
-wfq:depends({ dhcp_link = "none" })
-wfq:depends({ dhcp_link = "odhcpd" })
-
-exa = s1:taboption("advanced", ListValue, "add_extra_dns", translate("Extra DNS:"),
- translate("Use extra DNS entries found in /etc/config/dhcp"))
-exa:value("0", translate("Ignore"))
-exa:value("1", translate("Include Network/Hostnames"))
-exa:value("2", translate("Advanced MX/SRV RR"))
-exa:value("3", translate("Advanced CNAME RR"))
-exa:depends({ dhcp_link = "none" })
-exa:depends({ dhcp_link = "odhcpd" })
-
-ctl = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"),
- translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)"))
-ctl.rmempty = false
-
-d64 = s1:taboption("advanced", Flag, "dns64", translate("Enable DNS64:"),
- translate("Enable the DNS64 module"))
-d64.rmempty = false
-
-pfx = s1:taboption("advanced", Value, "dns64_prefix", translate("DNS64 Prefix:"),
- translate("Prefix for generated DNS64 addresses"))
-pfx.datatype = "ip6addr"
-pfx.placeholder = "64:ff9b::/96"
-pfx.optional = true
-pfx:depends({ dns64 = true })
-
-qry = s1:taboption("advanced", Flag, "query_minimize", translate("Query Minimize:"),
- translate("Break down query components for limited added privacy"))
-qry.rmempty = false
-
-qrs = s1:taboption("advanced", Flag, "query_min_strict", translate("Strict Minimize:"),
- translate("Strict version of 'query minimize' but it can break DNS"))
-qrs.rmempty = false
-qrs:depends({ query_minimize = true })
-
---TODO: dnsmasq needs to not reference resolve-file and get off port 53.
-
---Resource Tuning Tab
-
-pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"),
- translate("Chose the protocol recursion queries leave on"))
-pro:value("mixed", translate("IP4 and IP6"))
-pro:value("ip6_prefer", translate("IP6 Preferred"))
-pro:value("ip4_only", translate("IP4 Only"))
-pro:value("ip6_only", translate("IP6 Only"))
-pro.rmempty = false
-
-rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"),
- translate("Recursion activity affects memory growth and CPU load"))
-rsn:value("aggressive", translate("Aggressive"))
-rsn:value("default", translate("Default"))
-rsn:value("passive", translate("Passive"))
-rsn.rmempty = false
-
-rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"),
- translate("Use menu System/Processes to observe any memory growth"))
-rsc:value("large", translate("Large"))
-rsc:value("medium", translate("Medium"))
-rsc:value("small", translate("Small"))
-rsc:value("tiny", translate("Tiny"))
-rsc.rmempty = false
-
-ag2 = s1:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"),
- translate("Limit days between RFC5011 to reduce flash writes"))
-ag2.datatype = "and(uinteger,min(1),max(99))"
-ag2:value("3", "3")
-ag2:value("9", "9 ("..translate("default")..")")
-ag2:value("12", "12")
-ag2:value("24", "24")
-ag2:value("99", "99 ("..translate("never")..")")
-
-tgr = s1:taboption("resource", Value, "trigger", translate("Trigger Networks:"),
- translate("Networks that may trigger Unbound to reload (avoid wan6)"))
-tgr.template = "cbi/network_netlist"
-tgr.widget = "checkbox"
-tgr.cast = "string"
-
-return m
-
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua
new file mode 100644
index 0000000000..cdf7757e3a
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua
@@ -0,0 +1,273 @@
+-- Copyright 2008 Steven Barth <steven@midlink.org>
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Copyright 2016 Dan Luedtke <mail@danrl.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m1, s1
+local ena, mcf, lci, lsv, rlh, rpv, vld, nvd, eds, prt, tlm
+local ctl, dlk, dom, dty, lfq, wfq, exa, dp6, d64, pfx, qry, qrs
+local pro, tgr, rsc, rsn, ag2, stt
+local ucl = luci.model.uci.cursor()
+local valman = ucl:get_first("unbound", "unbound", "manual_conf")
+
+m1 = Map("unbound")
+
+s1 = m1:section(TypedSection, "unbound")
+s1.addremove = false
+s1.anonymous = true
+
+--LuCI, Unbound, or Not
+s1:tab("basic", translate("Basic"),
+ translatef("<h3>Unbound Basic Settings</h3>\n"
+ .. "<a href=\"%s\" target=\"_blank\">Unbound</a>"
+ .. " is a validating, recursive, and caching DNS resolver. "
+ .. "UCI help can be found on "
+ .. "<a href=\"%s\" target=\"_blank\">github</a>.",
+ "https://www.unbound.net/",
+ "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md"))
+
+ena = s1:taboption("basic", Flag, "enabled", translate("Enable Unbound:"),
+ translate("Enable the initialization scripts for Unbound"))
+ena.rmempty = false
+
+mcf = s1:taboption("basic", Flag, "manual_conf", translate("Manual Conf:"),
+ translate("Skip UCI and use /etc/unbound/unbound.conf"))
+mcf.rmempty = false
+
+lci = s1:taboption("basic", Flag, "extended_luci", translate("Advanced LuCI:"),
+ translate("See detailed tabs for debug and advanced manual configuration"))
+lci.rmempty = false
+
+
+function ena.cfgvalue(self, section)
+ return luci.sys.init.enabled("unbound") and self.enabled or self.disabled
+end
+
+
+function ena.write(self, section, value)
+ if value == "1" then
+ luci.sys.init.enable("unbound")
+ luci.sys.call("/etc/init.d/unbound start >/dev/null")
+ else
+ luci.sys.call("/etc/init.d/unbound stop >/dev/null")
+ luci.sys.init.disable("unbound")
+ end
+
+ return Flag.write(self, section, value)
+end
+
+
+if valman ~= "1" then
+ -- Not in manual configuration mode; show UCI
+ s1:tab("advanced", translate("Advanced"),
+ translatef("<h3>Unbound Advanced Settings</h3>\n"
+ .. "Advanced setttings and plugin modules for "
+ .. "<a href=\"%s\" target=\"_blank\">Unbound</a>"
+ .. " DNS resolver.", "https://www.unbound.net/"))
+
+ s1:tab("resource", translate("Resource"),
+ translatef("<h3>Unbound Resource Settings</h3>\n"
+ .. "Memory and protocol setttings for "
+ .. "<a href=\"%s\" target=\"_blank\">Unbound</a>"
+ .. " DNS resolver.", "https://www.unbound.net/"))
+
+ --Basic Tab
+ lsv = s1:taboption("basic", Flag, "localservice", translate("Local Service:"),
+ translate("Accept queries only from local subnets"))
+ lsv.rmempty = false
+
+ rlh = s1:taboption("basic", Flag, "rebind_localhost", translate("Block Localhost Rebind:"),
+ translate("Prevent upstream response of 127.0.0.0/8"))
+ rlh.rmempty = false
+
+ rpv = s1:taboption("basic", Flag, "rebind_protection", translate("Block Private Rebind:"),
+ translate("Prevent upstream response of RFC1918 ranges"))
+ rpv.rmempty = false
+
+ vld = s1:taboption("basic", Flag, "validator", translate("Enable DNSSEC:"),
+ translate("Enable the DNSSEC validator module"))
+ vld.rmempty = false
+
+ nvd = s1:taboption("basic", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"),
+ translate("Break the loop where DNSSEC needs NTP and NTP needs DNS"))
+ nvd.rmempty = false
+ nvd:depends({ validator = true })
+
+ eds = s1:taboption("basic", Value, "edns_size", translate("EDNS Size:"),
+ translate("Limit extended DNS packet size"))
+ eds.datatype = "and(uinteger,min(512),max(4096))"
+ eds.rmempty = false
+
+ prt = s1:taboption("basic", Value, "listen_port", translate("Listening Port:"),
+ translate("Choose Unbounds listening port"))
+ prt.datatype = "port"
+ prt.rmempty = false
+
+ tlm = s1:taboption("basic", Value, "ttl_min", translate("TTL Minimum:"),
+ translate("Prevent excessively short cache periods"))
+ tlm.datatype = "and(uinteger,min(0),max(600))"
+ tlm.rmempty = false
+
+ --Advanced Tab
+ ctl = s1:taboption("advanced", ListValue, "unbound_control", translate("Unbound Control App:"),
+ translate("Enable access for unbound-control"))
+ ctl.rmempty = false
+ ctl:value("0", translate("No Remote Control"))
+ ctl:value("1", translate("Local Host, No Encryption"))
+ ctl:value("2", translate("Local Host, Encrypted"))
+ ctl:value("3", translate("Local Subnet, Encrypted"))
+ ctl:value("4", translate("Local Subnet, Static Encryption"))
+
+ dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"),
+ translate("Link to supported programs to load DHCP into DNS"))
+ dlk:value("none", translate("No Link"))
+ dlk:value("dnsmasq", "dnsmasq")
+ dlk:value("odhcpd", "odhcpd")
+ dlk.rmempty = false
+
+ dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"),
+ translate("Domain suffix for this router and DHCP clients"))
+ dom.placeholder = "lan"
+ dom:depends({ dhcp_link = "none" })
+ dom:depends({ dhcp_link = "odhcpd" })
+
+ dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"),
+ translate("How to treat queries of this local domain"))
+ dty:value("deny", translate("Ignored"))
+ dty:value("refuse", translate("Refused"))
+ dty:value("static", translate("Only Local"))
+ dty:value("transparent", translate("Also Forwarded"))
+ dty:depends({ dhcp_link = "none" })
+ dty:depends({ dhcp_link = "odhcpd" })
+
+ lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"),
+ translate("How to enter the LAN or local network router in DNS"))
+ lfq:value("0", translate("No DNS"))
+ lfq:value("1", translate("Hostname, Primary Address"))
+ lfq:value("2", translate("Hostname, All Addresses"))
+ lfq:value("3", translate("Host FQDN, All Addresses"))
+ lfq:value("4", translate("Interface FQDN, All Addresses"))
+ lfq:depends({ dhcp_link = "none" })
+ lfq:depends({ dhcp_link = "odhcpd" })
+
+ wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"),
+ translate("Override the WAN side router entry in DNS"))
+ wfq:value("0", translate("Upstream"))
+ wfq:value("1", translate("Hostname, Primary Address"))
+ wfq:value("2", translate("Hostname, All Addresses"))
+ wfq:value("3", translate("Host FQDN, All Addresses"))
+ wfq:value("4", translate("Interface FQDN, All Addresses"))
+ wfq:depends({ dhcp_link = "none" })
+ wfq:depends({ dhcp_link = "odhcpd" })
+
+ exa = s1:taboption("advanced", ListValue, "add_extra_dns", translate("Extra DNS:"),
+ translate("Use extra DNS entries found in /etc/config/dhcp"))
+ exa:value("0", translate("Ignore"))
+ exa:value("1", translate("Include Network/Hostnames"))
+ exa:value("2", translate("Advanced MX/SRV RR"))
+ exa:value("3", translate("Advanced CNAME RR"))
+ exa:depends({ dhcp_link = "none" })
+ exa:depends({ dhcp_link = "odhcpd" })
+
+ dp6 = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"),
+ translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)"))
+ dp6.rmempty = false
+
+ d64 = s1:taboption("advanced", Flag, "dns64", translate("Enable DNS64:"),
+ translate("Enable the DNS64 module"))
+ d64.rmempty = false
+
+ pfx = s1:taboption("advanced", Value, "dns64_prefix", translate("DNS64 Prefix:"),
+ translate("Prefix for generated DNS64 addresses"))
+ pfx.datatype = "ip6addr"
+ pfx.placeholder = "64:ff9b::/96"
+ pfx.optional = true
+ pfx:depends({ dns64 = true })
+
+ qry = s1:taboption("advanced", Flag, "query_minimize", translate("Query Minimize:"),
+ translate("Break down query components for limited added privacy"))
+ qry.rmempty = false
+
+ qrs = s1:taboption("advanced", Flag, "query_min_strict", translate("Strict Minimize:"),
+ translate("Strict version of 'query minimize' but it can break DNS"))
+ qrs.rmempty = false
+ qrs:depends({ query_minimize = true })
+
+ --TODO: dnsmasq needs to not reference resolve-file and get off port 53.
+
+ --Resource Tuning Tab
+ pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"),
+ translate("Chose the protocol recursion queries leave on"))
+ pro:value("mixed", translate("IP4 and IP6"))
+ pro:value("ip6_prefer", translate("IP6 Preferred"))
+ pro:value("ip4_only", translate("IP4 Only"))
+ pro:value("ip6_only", translate("IP6 Only"))
+ pro.rmempty = false
+
+ rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"),
+ translate("Recursion activity affects memory growth and CPU load"))
+ rsn:value("aggressive", translate("Aggressive"))
+ rsn:value("default", translate("Default"))
+ rsn:value("passive", translate("Passive"))
+ rsn.rmempty = false
+
+ rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"),
+ translate("Use menu System/Processes to observe any memory growth"))
+ rsc:value("large", translate("Large"))
+ rsc:value("medium", translate("Medium"))
+ rsc:value("small", translate("Small"))
+ rsc:value("tiny", translate("Tiny"))
+ rsc.rmempty = false
+
+ ag2 = s1:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"),
+ translate("Limit days between RFC5011 to reduce flash writes"))
+ ag2.datatype = "and(uinteger,min(1),max(99))"
+ ag2:value("3", "3")
+ ag2:value("9", "9 ("..translate("default")..")")
+ ag2:value("12", "12")
+ ag2:value("24", "24")
+ ag2:value("99", "99 ("..translate("never")..")")
+
+ stt = s1:taboption("resource", Flag, "extended_stats", translate("Extended Statistics:"),
+ translate("Extended statistics are printed from unbound-control"))
+ stt.rmempty = false
+
+ tgr = s1:taboption("resource", Value, "trigger", translate("Trigger Networks:"),
+ translate("Networks that may trigger Unbound to reload (avoid wan6)"))
+ tgr.template = "cbi/network_netlist"
+ tgr.widget = "checkbox"
+ tgr.cast = "string"
+
+else
+ s1:tab("rfc5011", translate("RFC5011"),
+ translatef("<h3>Unbound RFC5011 Settings</h3>\n"
+ .. "RFC5011 copy scripts protect flash ROM even with UCI disabled."))
+
+ ag2 = s1:taboption("rfc5011", Value, "root_age", translate("Root DSKEY Age:"),
+ translate("Limit days to copy /var/->/etc/ to reduce flash writes"))
+ ag2.datatype = "and(uinteger,min(1),max(99))"
+ ag2:value("3", "3")
+ ag2:value("9", "9 ("..translate("default")..")")
+ ag2:value("12", "12")
+ ag2:value("24", "24")
+ ag2:value("99", "99 ("..translate("never")..")")
+end
+
+
+function m1.on_after_commit(self)
+ function ena.validate(self, value)
+ if value ~= "0" then
+ luci.sys.call("/etc/init.d/unbound restart >/dev/null 2>&1")
+ else
+ luci.sys.call("/etc/init.d/unbound stop >/dev/null 2>&1")
+ end
+ end
+
+
+ -- Restart Unbound with configuration and reload the page (some options hide)
+ luci.http.redirect(luci.dispatcher.build_url("admin", "services", "unbound"))
+end
+
+
+return m1
+
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua
new file mode 100644
index 0000000000..67d2ec6c6b
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua
@@ -0,0 +1,30 @@
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m4, s4, frm
+local filename = "/etc/unbound/unbound_ext.conf"
+local description = translatef("Here you may edit 'forward:' and 'remote-control:' in an extended 'include:'")
+description = description .. " (" .. filename .. ")"
+
+m4 = SimpleForm("editing", nil)
+m4:append(Template("unbound/css-editing"))
+m4.submit = translate("Save")
+m4.reset = false
+s4 = m4:section(SimpleSection, "Unbound Extended Conf", description)
+frm = s4:option(TextValue, "data")
+frm.datatype = "string"
+frm.rows = 20
+
+
+function frm.cfgvalue()
+ return nixio.fs.readfile(filename) or ""
+end
+
+
+function frm.write(self, section, data)
+ return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
+end
+
+
+return m4
+
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua
new file mode 100644
index 0000000000..5cfb9c32c1
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua
@@ -0,0 +1,30 @@
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m2, s2, frm
+local filename = "/etc/unbound/unbound.conf"
+local description = translatef("Here you may edit raw 'unbound.conf' when you don't use UCI:")
+description = description .. " (" .. filename .. ")"
+
+m2 = SimpleForm("editing", nil)
+m2:append(Template("unbound/css-editing"))
+m2.submit = translate("Save")
+m2.reset = false
+s2 = m2:section(SimpleSection, "Unbound Conf", description)
+frm = s2:option(TextValue, "data")
+frm.datatype = "string"
+frm.rows = 20
+
+
+function frm.cfgvalue()
+ return nixio.fs.readfile(filename) or ""
+end
+
+
+function frm.write(self, section, data)
+ return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
+end
+
+
+return m2
+
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua
new file mode 100644
index 0000000000..d0ac407847
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua
@@ -0,0 +1,30 @@
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m3, s3, frm
+local filename = "/etc/unbound/unbound_srv.conf"
+local description = translatef("Here you may edit the 'server:' clause in an internal 'include:'")
+description = description .. " (" .. filename .. ")"
+
+m3 = SimpleForm("editing", nil)
+m3:append(Template("unbound/css-editing"))
+m3.submit = translate("Save")
+m3.reset = false
+s3 = m3:section(SimpleSection, "Unbound Server Conf", description)
+frm = s3:option(TextValue, "data")
+frm.datatype = "string"
+frm.rows = 20
+
+
+function frm.cfgvalue()
+ return nixio.fs.readfile(filename) or ""
+end
+
+
+function frm.write(self, section, data)
+ return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
+end
+
+
+return m3
+
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm b/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm
new file mode 100644
index 0000000000..44d09378c3
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm
@@ -0,0 +1,8 @@
+<style type="text/css">
+ textarea
+ {
+ background-color: #fffff0;
+ font-family: monospace;
+ }
+</style>
+
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm b/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm
new file mode 100644
index 0000000000..87d6cc68cb
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm
@@ -0,0 +1,5 @@
+<%+header%>
+<h3><%=heading:pcdata()%></h3>
+<p><%=description:pcdata()%></p>
+<%+footer%>
+
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm b/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm
new file mode 100644
index 0000000000..c0a7d133dc
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm
@@ -0,0 +1,8 @@
+<%+header%>
+<h3><%=heading:pcdata()%></h3>
+<p><%=description:pcdata()%></p>
+<div>
+<textarea style="width: 100%; height: 480px; font-family: monospace;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+</div>
+<%+footer%>
+
diff --git a/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound b/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound
index cc714ac53e..c2ac8c93b6 100644
--- a/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound
+++ b/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound
@@ -8,18 +8,5 @@ uci -q batch <<-EOF >/dev/null
EOF
rm -f /tmp/luci-indexcache
-[ ! -x /usr/sbin/unbound-control ] && exit 0
-
-uci -q batch <<-EOF >/dev/null
- set luci.unboundhosts=command
- set luci.unboundhosts.name='Unbound Local Hosts'
- set luci.unboundhosts.command='unbound-control -c /var/lib/unbound/unbound.conf list_local_data'
- set luci.unboundzones=command
- set luci.unboundzones.name='Unbound Local Zones'
- set luci.unboundzones.command='unbound-control -c /var/lib/unbound/unbound.conf list_local_zones'
- commit luci
-EOF
-
-rm -f /tmp/luci-indexcache
exit 0
diff --git a/applications/luci-app-upnp/po/zh-cn/upnp.po b/applications/luci-app-upnp/po/zh-cn/upnp.po
index 693bbc12e9..022e16ec00 100644
--- a/applications/luci-app-upnp/po/zh-cn/upnp.po
+++ b/applications/luci-app-upnp/po/zh-cn/upnp.po
@@ -82,7 +82,7 @@ msgid "External ports"
msgstr "外部端口"
msgid "General Settings"
-msgstr "一般设置"
+msgstr "基本设置"
msgid "Internal addresses"
msgstr "内部地址"
diff --git a/applications/luci-app-wifischedule/po/it/wifischedule.po b/applications/luci-app-wifischedule/po/it/wifischedule.po
new file mode 100644
index 0000000000..18a9dce23a
--- /dev/null
+++ b/applications/luci-app-wifischedule/po/it/wifischedule.po
@@ -0,0 +1,101 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Activate wifi"
+msgstr "Attiva wifi"
+
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Impossibile trovare /usr/bin/wifi_schedule.sh o /sbin/wifi"
+
+msgid "Could not find required programm /usr/bin/iwinfo"
+msgstr "Impossibile trovare il programma /usr/bin/iwinfo"
+
+msgid "Cron Jobs"
+msgstr "Operazioni Programmate"
+
+msgid "Day(s) of Week"
+msgstr "Giorno(i) della Settimana"
+
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Definisce un piano di accensione o spegnimento del wifi"
+
+msgid "Determine Modules Automatically"
+msgstr "Determina i Moduli Automaticamente"
+
+msgid "Disable wifi gracefully"
+msgstr "Disabilita wifi con grazia"
+
+msgid "Disabled wifi forced"
+msgstr "Disabilita wifi con forza"
+
+msgid "Enable"
+msgstr "Abilita"
+
+msgid "Enable Wifi Schedule"
+msgstr "Abilita il Piano Wifi"
+
+msgid "Enable logging"
+msgstr "Abilita il registro"
+
+msgid "Force disabling wifi even if stations associated"
+msgstr "Forza disattivazione wifi anche con stazioni associate"
+
+msgid "Friday"
+msgstr "Venerdì"
+
+msgid "Global Settings"
+msgstr "Impostazioni Globali"
+
+msgid "Monday"
+msgstr "Lunedì"
+
+msgid "Saturday"
+msgstr "Sabato"
+
+msgid "Schedule"
+msgstr "Piano"
+
+msgid "Schedule events"
+msgstr "Piano eventi"
+
+msgid "Start Time"
+msgstr "Orario di Inizio"
+
+msgid "Start WiFi"
+msgstr ""
+
+msgid "Stop Time"
+msgstr "Orario di Stop"
+
+msgid "Stop WiFi"
+msgstr ""
+
+msgid "Sunday"
+msgstr "Domenica"
+
+msgid "The value %s is invalid"
+msgstr "Il valore %s è invalido"
+
+msgid "Thursday"
+msgstr "Giovedì"
+
+msgid "Tuesday"
+msgstr "Martedì"
+
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Scarica Moduli (sperimentale; risparmia più energia)"
+
+msgid "View Cron Jobs"
+msgstr "Vedi Operazioni Programmate"
+
+msgid "View Logfile"
+msgstr "Vedi il Registro"
+
+msgid "Wednesday"
+msgstr "Mercoledì"
+
+msgid "Wifi Schedule"
+msgstr "Piano Wifi"
+
+msgid "Wifi Schedule Logfile"
+msgstr "Registro Piano Wifi"
diff --git a/applications/luci-app-wireguard/po/sv/wireguard.po b/applications/luci-app-wireguard/po/sv/wireguard.po
index 1aa68e251e..3422ae91e9 100644
--- a/applications/luci-app-wireguard/po/sv/wireguard.po
+++ b/applications/luci-app-wireguard/po/sv/wireguard.po
@@ -20,7 +20,7 @@ msgid "Endpoint"
msgstr "Slutpunkt"
msgid "Firewall Mark"
-msgstr ""
+msgstr "Brandväggsmarkering"
msgid "Interface"
msgstr "Gränssnitt"
@@ -38,10 +38,10 @@ msgid "Never"
msgstr "Aldrig"
msgid "Peer"
-msgstr ""
+msgstr "Jämlike"
msgid "Persistent Keepalive"
-msgstr ""
+msgstr "Hålla vid liv ständigt"
msgid "Public Key"
msgstr "Publik nyckel"
diff --git a/applications/luci-app-wol/po/it/wol.po b/applications/luci-app-wol/po/it/wol.po
index bf23eb8ce0..d0c35f497b 100644
--- a/applications/luci-app-wol/po/it/wol.po
+++ b/applications/luci-app-wol/po/it/wol.po
@@ -16,7 +16,7 @@ msgstr ""
"X-Generator: Pootle 2.0.6\n"
msgid "Broadcast on all interfaces"
-msgstr "Broadcast su tutte le interfaccie"
+msgstr "Broadcast su tutte le interfacce"
msgid "Choose the host to wake up or enter a custom MAC address to use"
msgstr "Scegli l'host da \"svegliare\" o inserisci il MAC address da usare"
@@ -25,20 +25,20 @@ msgid "Host to wake up"
msgstr "Host da \"svegliare\""
msgid "Network interface to use"
-msgstr "Interfacci di rete da usare"
+msgstr "Interfaccia di rete da usare"
msgid "Send to broadcast address"
-msgstr ""
+msgstr "Manda a indirizzo di broadcast"
#, fuzzy
msgid ""
"Sometimes only one of the two tools works. If one fails, try the other one"
msgstr ""
-"Avvolte solo uno dei due tools funziona. Se uno fallisce, tenta di usare il "
+"A volte solo uno dei due tools funziona. Se uno fallisce, tenta di usare il "
"secondo"
msgid "Specifies the interface the WoL packet is sent on"
-msgstr "Secifica l'interfaccia su cui il pacchetto \"magico\" WoL è inviato"
+msgstr "Specifica l'interfaccia su cui il pacchetto \"magico\" WoL è inviato"
msgid "Starting WoL utility:"
msgstr "Avvia l'utility WoL:"
@@ -49,8 +49,8 @@ msgstr "Wake on LAN"
msgid ""
"Wake on LAN is a mechanism to remotely boot computers in the local network."
msgstr ""
-"Wake on LAN è un meccanismo che ti permette di avviare da remoto un computer "
-"collegato alla LAN."
+"Wake on LAN è un meccanismo che permette di avviare da remoto i computer "
+"nella rete locale"
msgid "Wake up host"
msgstr "Sveglia Host"