summaryrefslogtreecommitdiffhomepage
path: root/applications
diff options
context:
space:
mode:
Diffstat (limited to 'applications')
-rw-r--r--applications/luci-app-adblock/po/sv/adblock.po32
-rw-r--r--applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po17
-rw-r--r--applications/luci-app-aria2/po/zh-cn/aria2.po242
-rw-r--r--applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm74
-rw-r--r--applications/luci-app-ddns/po/it/ddns.po2
-rw-r--r--applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po16
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua12
-rw-r--r--applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua2
-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/overview_tab.lua192
-rw-r--r--applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po117
-rw-r--r--applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot81
-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.lua2
-rw-r--r--applications/luci-app-minidlna/po/ca/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/cs/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/de/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/el/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/en/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/es/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/fr/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/he/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/hu/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/it/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/ja/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/ms/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/no/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/pl/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/pt-br/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/pt/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/ro/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/ru/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/sk/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/sv/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/templates/minidlna.pot2
-rw-r--r--applications/luci-app-minidlna/po/tr/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/uk/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/vi/minidlna.po2
-rw-r--r--applications/luci-app-minidlna/po/zh-cn/minidlna.po4
-rw-r--r--applications/luci-app-minidlna/po/zh-tw/minidlna.po2
-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.po3
-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-simple-adblock/po/sv/simple-adblock.po80
-rw-r--r--applications/luci-app-splash/po/sv/splash.po4
-rw-r--r--applications/luci-app-upnp/po/zh-cn/upnp.po2
81 files changed, 1303 insertions, 358 deletions
diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po
index 4cb932c601..449b22eae5 100644
--- a/applications/luci-app-adblock/po/sv/adblock.po
+++ b/applications/luci-app-adblock/po/sv/adblock.po
@@ -2,7 +2,7 @@ msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "-------"
-msgstr ""
+msgstr "-------"
msgid "Adblock"
msgstr "Adblock"
@@ -11,10 +11,10 @@ msgid "Adblock Logfile"
msgstr "Adblock's loggfil"
msgid "Adblock Status"
-msgstr ""
+msgstr "Status för Adblock"
msgid "Adblock Version"
-msgstr "Version för Adblock"
+msgstr "Version av Adblock"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr ""
@@ -35,11 +35,15 @@ 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..."
@@ -56,10 +60,10 @@ msgid ""
msgstr ""
msgid "DNS Backend (DNS Directory)"
-msgstr ""
+msgstr "DNS-bakände (DNS-mapp)"
msgid "DNS Directory"
-msgstr ""
+msgstr "DNS-mapp"
msgid "Description"
msgstr "Beskrivning"
@@ -135,7 +139,7 @@ msgid "Invalid domain specified!"
msgstr "Ogiltig domän angiven!"
msgid "Last Run"
-msgstr ""
+msgstr "Kördes senast"
msgid ""
"List URLs and Shallalist category selections are configurable in the "
@@ -180,7 +184,7 @@ msgid "Please edit this file directly in a terminal session."
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 ""
+msgstr "Vänligen uppdatera din adblock's konfigurationsfil till att använda det här paketet."
msgid "Query"
msgstr "Fråga"
@@ -192,7 +196,7 @@ msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
msgid "Resume"
-msgstr ""
+msgstr "Återuppta"
msgid "Runtime Information"
msgstr "Information om körtid"
@@ -204,10 +208,10 @@ msgid "Save"
msgstr "Spara"
msgid "Startup Trigger"
-msgstr ""
+msgstr "Uppstartslösare"
msgid "Suspend"
-msgstr ""
+msgstr "Stäng av"
msgid "Suspend / Resume Adblock"
msgstr "Upphäv / Återuppta adblock"
@@ -275,19 +279,19 @@ msgid "Yes"
msgstr "Ja"
msgid "disabled"
-msgstr ""
+msgstr "inaktiverad"
msgid "enabled"
-msgstr ""
+msgstr "aktiverad"
msgid "error"
-msgstr ""
+msgstr "fel"
msgid "n/a"
msgstr "n/a"
msgid "paused"
-msgstr ""
+msgstr "pausad"
#~ msgid "Blocked domains (overall)"
#~ msgstr "Blockerade domäner (övergripande)"
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
index cac09d76a6..20d77cbcf7 100644
--- 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
@@ -1,5 +1,5 @@
msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
msgid "Action"
msgstr "Åtgärd"
@@ -74,9 +74,9 @@ msgid ""
"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."
+"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 "
@@ -94,12 +94,13 @@ msgid ""
"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."
+"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!"
+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!"
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/luasrc/view/attendedsysupgrade.htm b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
index 1e423b49f0..d04745abd1 100644
--- a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
+++ b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
@@ -79,19 +79,28 @@
<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>
-<input class="cbi-button" value="search for updates" onclick="update_request()" type="button" id="update_button">
+<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="keep">search for package updates:</label>
- <div class="cbi-value-field">
- <input type="checkbox" name="update_packages" id="update_packages" />
- </div>
+ <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">keep settings:</label>
- <div class="cbi-value-field">
- <input type="checkbox" name="keep" id="keep" checked="checked" />
- </div>
+ <label class="cbi-value-title" for="keep">
+ <input type="checkbox" name="keep" id="keep" checked="checked" />
+ Keep settings
+ </label>
</div>
<script type="text/javascript">
@@ -102,6 +111,13 @@ 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
@@ -238,6 +254,8 @@ function update_request_callback(response_object) {
} 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)
}
}
@@ -280,11 +298,18 @@ function update_request_200(response_content) {
// 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
- request_dict.packages = data.packages;
+ 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)
}
@@ -294,7 +319,12 @@ function image_request_handler(response) {
response_content = JSON.parse(response.responseText)
update_error(response_content.error)
} else if (response.status === 500) {
- image_request_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
@@ -317,10 +347,14 @@ function image_request_handler(response) {
setTimeout(image_request, 5000)
} else if (response.status === 200) {
// ready to download
- response_content = JSON.parse(response.responseText)
- update_info("image created")
- document.getElementById("update_button").value = "sysupgrade"
- document.getElementById("update_button").onclick = function() {download_image(response_content.url); }
+ 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";
}
}
@@ -338,7 +372,7 @@ function upload_image(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/
+ 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');
});
@@ -352,12 +386,12 @@ function upload_image(blob) {
}
// download image from server once the url was received by image_request
-function download_image(url) {
+function download_image() {
console.log("download_image")
- document.getElementById("update_button").value = "flashing..."
+ document.getElementById("update_button").value = "downloading image";
document.getElementById("update_button").disabled = true;
var download_request = new XMLHttpRequest();
- download_request.open("GET", url);
+ download_request.open("GET", data.image_url);
download_request.responseType = "arraybuffer";
download_request.onload = function () {
@@ -366,7 +400,7 @@ function download_image(url) {
upload_image(blob)
}
};
- document.getElementById("update_info").innerHTML = "downloading image"
+ document.getElementById("update_info").innerHTML = "downloading image";
download_request.send();
}
diff --git a/applications/luci-app-ddns/po/it/ddns.po b/applications/luci-app-ddns/po/it/ddns.po
index 3b9d5f48de..4b8d2f844e 100644
--- a/applications/luci-app-ddns/po/it/ddns.po
+++ b/applications/luci-app-ddns/po/it/ddns.po
@@ -725,7 +725,7 @@ msgid "missing / required"
msgstr "mancante / richiesto"
msgid "must be greater or equal 'Check Interval'"
-msgstr "deve essere più grande o uguale "Controlla Intervallo'"
+msgstr "deve essere più grande o uguale 'Controlla Intervallo'"
msgid "must start with 'http://'"
msgstr "deve iniziare con 'http://'"
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 c735323955..d68116bf7b 100644
--- a/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po
+++ b/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po
@@ -91,7 +91,7 @@ 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 "Modell"
@@ -109,7 +109,7 @@ msgid "Networks to scan for devices"
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 "Inga SIP-enheter"
@@ -118,10 +118,10 @@ msgid "No devices detected"
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,13 +129,13 @@ 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 "Information om telefon"
msgid "Phone Scan"
-msgstr "Skanning av telefon"
+msgstr "Skanna telefon"
msgid "Phone Scanning Configuration"
msgstr "Konfiguration av skanning i telefon"
@@ -156,7 +156,7 @@ msgid "Repeat Scans (this can take a few minutes)"
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 ""
@@ -195,7 +195,7 @@ msgid "Time to wait for responses in seconds (default 10)"
msgstr "Tid att vänta på svar i sekunder (standard 10)"
msgid "Timeout"
-msgstr ""
+msgstr "Avbrott"
msgid "Use Configuration"
msgstr "Använd konfiguration"
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua b/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua
index 6d6790a839..9f6472e7de 100644
--- a/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua
+++ b/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua
@@ -17,8 +17,8 @@ function index()
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", "view_reslist"}, call("view_reslist"), _("View Resolver List"), 130).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()
@@ -27,6 +27,12 @@ function view_reslist()
end
function logread()
- local logfile = util.trim(util.exec("logread -e 'dnscrypt-proxy'"))
+ 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
index d22abbfd39..6e75ac9f97 100644
--- 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
@@ -7,6 +7,8 @@ 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
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/overview_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua
index 7ab84ab7fa..368c6673ad 100644
--- 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
@@ -11,15 +11,16 @@ local plug_cnt = tonumber(luci.sys.exec("env -i /usr/sbin/dnscrypt-proxy --vers
local res_list = {}
local url = "https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-resolvers.csv"
-if not fs.access("/lib/libustream-ssl.so") then
- m = SimpleForm("error", nil, translate("SSL support not available, please install an libustream-ssl variant to use this package."))
- m.submit = false
- m.reset = false
- return m
-end
-
if not fs.access(res_input) then
- luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1")
+ 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
@@ -29,23 +30,64 @@ if not uci:get_first("dnscrypt-proxy", "global") then
end
for line in io.lines(res_input) do
- local name = line:match("^[%w_.-]*")
- res_list[#res_list + 1] = { name = name }
+ 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. ")
- .. translate("Keep in mind to configure Dnsmasq as well. ")
.. 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)
- luci.sys.call("env -i /etc/init.d/dnsmasq restart >/dev/null 2>&1")
+ 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 = m:section(TypedSection, "global", translate("General Options"))
s.anonymous = true
-- Main dnscrypt-proxy resource list
@@ -62,21 +104,53 @@ o3 = s:option(DummyValue, "", translate("File Checksum"))
o3.template = "dnscrypt-proxy/res_options"
o3.value = luci.sys.exec("sha256sum " .. res_input .. " | awk '{print $1}'")
-btn = s:option(Button, "", translate("Refresh Resolver List"))
-btn.inputtitle = translate("Refresh List")
-btn.inputstyle = "apply"
-btn.disabled = false
-function btn.write(self, section, value)
- 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"))
+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(DynamicList, "procd_trigger", translate("Startup Trigger"),
- translate("By default the DNSCrypt-Proxy startup will be triggered by ifup events of multiple network interfaces. ")
- .. translate("To restrict the trigger, add only the relevant network interface(s). ")
- .. translate("Usually the 'wan' interface should work for most users."))
+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
@@ -85,57 +159,38 @@ if dump then
end
end
end
+t.default = procd_trigger or "All"
t.rmempty = true
--- Extra options
-
-ds = s:option(DummyValue, "_dummy", translate("Extra options"),
- translate("Options for further tweaking in case the defaults are not suitable for you."))
-ds.template = "cbi/nullsection"
-
-btn = 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. ")
- .. translatef("For further information "
- .. "<a href=\"%s\" target=\"_blank\">"
- .. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt"))
-btn.inputtitle = translate("Create Config File")
-btn.inputstyle = "apply"
-btn.disabled = false
-function btn.write(self, section, value)
- if not fs.access("/etc/resolv-crypt.conf") then
- luci.sys.call("env -i echo 'options timeout:1' > '/etc/resolv-crypt.conf'")
- end
-end
-
-- Mandatory options per instance
-s = m:section(TypedSection, "dnscrypt-proxy", translate("Instance options"))
+s = m:section(TypedSection, "dnscrypt-proxy", translate("Instance Options"))
s.anonymous = true
s.addremove = true
-o1 = s:option(Value, "address", translate("IP Address"),
+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]'."))
-o1.default = address or "127.0.0.1"
-o1.rmempty = false
+i1.default = address or "127.0.0.1"
+i1.rmempty = false
-o2 = s:option(Value, "port", translate("Port"),
+i2 = s:option(Value, "port", translate("Port"),
translate("The listening port for DNS queries."))
-o2.datatype = "port"
-o2.default = port
-o2.rmempty = false
-
-o3 = s:option(ListValue, "resolver", translate("Resolver"),
- translate("Name of the remote DNS service for resolving queries."))
-o3.datatype = "hostname"
-o3.widget = "select"
+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 ~= "Name" then
- o3:value(v.name)
+ if v.name then
+ i3:value(v.name, v.name .. " (" .. v.location .. "/" .. v.dnssec .. "/" .. v.nolog .. ")")
end
end
-o3.default = resolver
-o3.rmempty = false
+i3.default = resolver
+i3.rmempty = false
-- Extra options per instance
@@ -174,4 +229,17 @@ if plug_cnt > 0 then
e6.optional = true
end
-return m
+-- 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/po/ja/dnscrypt-proxy.po b/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po
index 0328df2279..2cd01c019e 100644
--- a/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po
+++ b/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po
@@ -7,17 +7,24 @@ msgstr ""
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.3\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 "ブラックリスト"
@@ -26,26 +33,26 @@ msgstr "IPv6 のブロック"
msgid ""
"By default the DNSCrypt-Proxy startup will be triggered by ifup events of "
-"multiple network interfaces."
+"'All' available network interfaces.<br />"
msgstr ""
-"デフォルトでは、 DNSCrypt-Proxy は全ネットワーク インターフェースの ifup イベ"
-"ントによりトリガされ起動します。"
+"デフォルトでは、 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."
+"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"
+msgid "Create Custom Config File"
msgstr "カスタム設定ファイルの作成"
msgid "DNS Query Logfile"
@@ -66,21 +73,28 @@ 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 "Extra options"
-msgstr "拡張オプション"
-
msgid "File Checksum"
msgstr "ファイル チェックサム"
@@ -94,8 +108,8 @@ msgstr ""
"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン Wiki</a> を確認して"
"ください。"
-msgid "General options"
-msgstr "全般設定"
+msgid "General Options"
+msgstr "全般オプション"
msgid "IP Address"
msgstr "IP アドレス"
@@ -107,12 +121,9 @@ msgstr ""
msgid "Input file not found, please check your configuration."
msgstr "入力ファイルが見つかりません。設定を確認してください。"
-msgid "Instance options"
+msgid "Instance Options"
msgstr "インスタンス オプション"
-msgid "Keep in mind to configure Dnsmasq as well."
-msgstr "Dnsmasq を適切に設定する必要があることに留意してください。"
-
msgid "Local Cache"
msgstr "ローカル キャッシュ"
@@ -129,16 +140,47 @@ msgstr ""
"受信した DNS クエリをファイルに記録します。これにより、ネットワークで何が起き"
"ているかをリアルタイムに把握することが可能です。"
-msgid "Name of the remote DNS service for resolving queries."
-msgstr "クエリの名前解決を行う、リモートの DNS サービス名です。"
-
msgid ""
-"Options for further tweaking in case the defaults are not suitable for you."
-msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。"
+"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 "ポート"
@@ -148,15 +190,8 @@ msgstr "リストのリフレッシュ"
msgid "Refresh Resolver List"
msgstr "リゾルバ リストのリフレッシュ"
-msgid "Resolver"
-msgstr "リゾルバ"
-
-msgid ""
-"SSL support not available, please install an libustream-ssl variant to use "
-"this package."
-msgstr ""
-"SSL サポートが利用できません。このパッケージを使用するには libustream-ssl 等"
-"をインストールし、 SSL サポートを有効にしてください。"
+msgid "Resolver (LOC/SEC/NOLOG)"
+msgstr "リゾルバ(LOC/SEC/NOLOG)"
msgid "Save"
msgstr "保存"
@@ -167,6 +202,9 @@ 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 クエリを待ち受けるポートです。"
@@ -199,6 +237,13 @@ 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 リゾルバ リストの内容が表示されます。"
@@ -217,13 +262,15 @@ msgstr ""
"このオプションは、通常よりも CPU リソースを多く使用するほか、ほとんどの "
"DNSCrypt サーバーでは不要なものです。"
-msgid "To restrict the trigger, add only the relevant network interface(s)."
+msgid ""
+"To restrict the trigger, select only the relevant network interface. Usually "
+"the 'wan' interface should work for most users."
msgstr ""
-"トリガを限定するには、適切なネットワーク インターフェースのみを追加してくださ"
-"い。"
+"トリガを限定するには、適切なインターフェースを選択してください。通常、 'wan' "
+"インターフェースがほとんどのユーザーに適しています。"
-msgid "Usually the 'wan' interface should work for most users."
-msgstr "通常、 'wan' インターフェースがほとんどのユーザーに適しています。"
+msgid "Transfer Options To Dnsmasq"
+msgstr "Dnsmasq の転送オプション"
msgid "View Logfile"
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
index ea83e7a184..59bded87b8 100644
--- a/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot
+++ b/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot
@@ -1,12 +1,19 @@
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 ""
@@ -15,7 +22,7 @@ msgstr ""
msgid ""
"By default the DNSCrypt-Proxy startup will be triggered by ifup events of "
-"multiple network interfaces."
+"'All' available network interfaces.<br />"
msgstr ""
msgid "Configuration of the DNSCrypt-Proxy package."
@@ -23,13 +30,13 @@ msgstr ""
msgid ""
"Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS "
-"upstream timeouts with multiple DNSCrypt instances."
+"upstream timeouts with multiple DNSCrypt instances.<br />"
msgstr ""
msgid "Create Config File"
msgstr ""
-msgid "Create custom config file"
+msgid "Create Custom Config File"
msgstr ""
msgid "DNS Query Logfile"
@@ -50,19 +57,25 @@ 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 "Enable Caching to speed up DNSCcrypt-Proxy."
+msgid "Edit Resolvcrypt Configuration"
msgstr ""
-msgid "Ephemeral Keys"
+msgid "Enable Caching to speed up DNSCcrypt-Proxy."
msgstr ""
-msgid "Extra options"
+msgid "Ephemeral Keys"
msgstr ""
msgid "File Checksum"
@@ -76,7 +89,7 @@ msgid ""
"online</a>"
msgstr ""
-msgid "General options"
+msgid "General Options"
msgstr ""
msgid "IP Address"
@@ -88,10 +101,7 @@ msgstr ""
msgid "Input file not found, please check your configuration."
msgstr ""
-msgid "Instance options"
-msgstr ""
-
-msgid "Keep in mind to configure Dnsmasq as well."
+msgid "Instance Options"
msgstr ""
msgid "Local Cache"
@@ -106,16 +116,38 @@ msgid ""
"is happening on the network."
msgstr ""
-msgid "Name of the remote DNS service for resolving queries."
+msgid ""
+"Name of the remote DNS service for resolving queries incl. Location, DNSSEC- "
+"and NOLOG-Flag."
msgstr ""
-msgid ""
-"Options for further tweaking in case the defaults are not suitable for you."
+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 ""
@@ -125,12 +157,7 @@ msgstr ""
msgid "Refresh Resolver List"
msgstr ""
-msgid "Resolver"
-msgstr ""
-
-msgid ""
-"SSL support not available, please install an libustream-ssl variant to use "
-"this package."
+msgid "Resolver (LOC/SEC/NOLOG)"
msgstr ""
msgid "Save"
@@ -142,6 +169,9 @@ 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 ""
@@ -165,6 +195,11 @@ msgid ""
"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 ""
@@ -178,10 +213,12 @@ msgid ""
"server."
msgstr ""
-msgid "To restrict the trigger, add only the relevant network interface(s)."
+msgid ""
+"To restrict the trigger, select only the relevant network interface. Usually "
+"the 'wan' interface should work for most users."
msgstr ""
-msgid "Usually the 'wan' interface should work for most users."
+msgid "Transfer Options To Dnsmasq"
msgstr ""
msgid "View Logfile"
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 bc467fde40..3f59e53643 100644
--- a/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua
+++ b/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua
@@ -130,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 5b2915dc75..ed710e5a97 100644
--- a/applications/luci-app-minidlna/po/ca/minidlna.po
+++ b/applications/luci-app-minidlna/po/ca/minidlna.po
@@ -134,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 3f0f87ccb2..f642510776 100644
--- a/applications/luci-app-minidlna/po/cs/minidlna.po
+++ b/applications/luci-app-minidlna/po/cs/minidlna.po
@@ -136,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 3d866e8824..4d20ec2a8d 100644
--- a/applications/luci-app-minidlna/po/de/minidlna.po
+++ b/applications/luci-app-minidlna/po/de/minidlna.po
@@ -152,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 b6780c3ce4..d7af11cd5d 100644
--- a/applications/luci-app-minidlna/po/el/minidlna.po
+++ b/applications/luci-app-minidlna/po/el/minidlna.po
@@ -131,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 ef1ebe2f6f..fefcfcc946 100644
--- a/applications/luci-app-minidlna/po/en/minidlna.po
+++ b/applications/luci-app-minidlna/po/en/minidlna.po
@@ -148,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 ea0605624f..e08fff7efc 100644
--- a/applications/luci-app-minidlna/po/es/minidlna.po
+++ b/applications/luci-app-minidlna/po/es/minidlna.po
@@ -145,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 dde8f1bcef..5eb2e1bba2 100644
--- a/applications/luci-app-minidlna/po/fr/minidlna.po
+++ b/applications/luci-app-minidlna/po/fr/minidlna.po
@@ -131,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 b6780c3ce4..d7af11cd5d 100644
--- a/applications/luci-app-minidlna/po/he/minidlna.po
+++ b/applications/luci-app-minidlna/po/he/minidlna.po
@@ -131,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 dcb6064eb7..4f259c1028 100644
--- a/applications/luci-app-minidlna/po/hu/minidlna.po
+++ b/applications/luci-app-minidlna/po/hu/minidlna.po
@@ -150,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 3adb8c1e99..b118916f6a 100644
--- a/applications/luci-app-minidlna/po/it/minidlna.po
+++ b/applications/luci-app-minidlna/po/it/minidlna.po
@@ -152,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 c29c10d75e..66bc503a24 100644
--- a/applications/luci-app-minidlna/po/ja/minidlna.po
+++ b/applications/luci-app-minidlna/po/ja/minidlna.po
@@ -146,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 f0e6bb25e4..a9f875e1bb 100644
--- a/applications/luci-app-minidlna/po/ms/minidlna.po
+++ b/applications/luci-app-minidlna/po/ms/minidlna.po
@@ -130,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 dac9c4be4c..4d70e39c5b 100644
--- a/applications/luci-app-minidlna/po/no/minidlna.po
+++ b/applications/luci-app-minidlna/po/no/minidlna.po
@@ -150,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 c06bfc3cd6..6215dc8f15 100644
--- a/applications/luci-app-minidlna/po/pl/minidlna.po
+++ b/applications/luci-app-minidlna/po/pl/minidlna.po
@@ -149,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 583bb3d806..29c7a7ca15 100644
--- a/applications/luci-app-minidlna/po/pt-br/minidlna.po
+++ b/applications/luci-app-minidlna/po/pt-br/minidlna.po
@@ -151,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 30b4e1ddfb..95d6b32666 100644
--- a/applications/luci-app-minidlna/po/pt/minidlna.po
+++ b/applications/luci-app-minidlna/po/pt/minidlna.po
@@ -138,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 65737c4002..786ac98489 100644
--- a/applications/luci-app-minidlna/po/ro/minidlna.po
+++ b/applications/luci-app-minidlna/po/ro/minidlna.po
@@ -135,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 f97ed05cce..893fc71a89 100644
--- a/applications/luci-app-minidlna/po/ru/minidlna.po
+++ b/applications/luci-app-minidlna/po/ru/minidlna.po
@@ -151,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 8ae7cb3ae7..0ea592e249 100644
--- a/applications/luci-app-minidlna/po/sk/minidlna.po
+++ b/applications/luci-app-minidlna/po/sk/minidlna.po
@@ -131,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 7140555048..169d55ab6b 100644
--- a/applications/luci-app-minidlna/po/sv/minidlna.po
+++ b/applications/luci-app-minidlna/po/sv/minidlna.po
@@ -132,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 033dfa5264..d5658249d0 100644
--- a/applications/luci-app-minidlna/po/templates/minidlna.pot
+++ b/applications/luci-app-minidlna/po/templates/minidlna.pot
@@ -124,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 a819da5b4f..973dbd0791 100644
--- a/applications/luci-app-minidlna/po/tr/minidlna.po
+++ b/applications/luci-app-minidlna/po/tr/minidlna.po
@@ -131,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 2eb83bd75d..8bf5160f37 100644
--- a/applications/luci-app-minidlna/po/uk/minidlna.po
+++ b/applications/luci-app-minidlna/po/uk/minidlna.po
@@ -132,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 a819da5b4f..973dbd0791 100644
--- a/applications/luci-app-minidlna/po/vi/minidlna.po
+++ b/applications/luci-app-minidlna/po/vi/minidlna.po
@@ -131,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 bd569344e9..393b116e34 100644
--- a/applications/luci-app-minidlna/po/zh-cn/minidlna.po
+++ b/applications/luci-app-minidlna/po/zh-cn/minidlna.po
@@ -132,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 c563adbb34..5dad93e583 100644
--- a/applications/luci-app-minidlna/po/zh-tw/minidlna.po
+++ b/applications/luci-app-minidlna/po/zh-tw/minidlna.po
@@ -134,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-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 c03e1495cb..838f4650dd 100644
--- a/applications/luci-app-openvpn/po/sv/openvpn.po
+++ b/applications/luci-app-openvpn/po/sv/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/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-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-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 "内部地址"