summaryrefslogtreecommitdiffhomepage
path: root/applications
diff options
context:
space:
mode:
Diffstat (limited to 'applications')
-rw-r--r--applications/luci-app-adblock/po/it/adblock.po337
-rw-r--r--applications/luci-app-adblock/po/pt-br/adblock.po50
-rw-r--r--applications/luci-app-adblock/po/sv/adblock.po75
-rw-r--r--applications/luci-app-adblock/po/zh-cn/adblock.po45
-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.po253
-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-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.po3
-rw-r--r--applications/luci-app-unbound/luasrc/controller/unbound.lua146
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound.lua216
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua273
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua30
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua30
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua30
-rw-r--r--applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm8
-rw-r--r--applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm5
-rw-r--r--applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm8
-rw-r--r--applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound13
65 files changed, 2105 insertions, 650 deletions
diff --git a/applications/luci-app-adblock/po/it/adblock.po b/applications/luci-app-adblock/po/it/adblock.po
new file mode 100644
index 0000000000..1901228634
--- /dev/null
+++ b/applications/luci-app-adblock/po/it/adblock.po
@@ -0,0 +1,337 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 17/09/2017\n"
+"Last-Translator: Bubu83 <bubu83@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.3\n"
+"Language: it\n"
+
+msgid "-------"
+msgstr ""
+
+msgid "Adblock"
+msgstr "Adblock"
+
+msgid "Adblock Logfile"
+msgstr "Registro Adblock"
+
+msgid "Adblock Status"
+msgstr "Status Adblock"
+
+msgid "Adblock Version"
+msgstr "Versione Adblock"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr "Tempo addizionale in secondi di attesa prima che adblock si avvii."
+
+msgid "Advanced"
+msgstr "Avanzato"
+
+msgid "Available blocklist sources."
+msgstr "Fonti lista di blocco disponibili."
+
+msgid "Backup Directory"
+msgstr "Directory del Backup"
+
+msgid "Blocklist Sources"
+msgstr "Fonti lista di Blocco"
+
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+"Attenzione: Per favore non selezionare grandi liste o molte liste alla volta "
+"su dispositivi con poca memoria per prevenire errori OOM!"
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"Scegli 'none' per disabilitare l'avvio automatico, 'timed' per usare un "
+"classico timeout (default 30 sec.) o seleziona un'altra interfaccia di avvio."
+
+msgid "Collecting data..."
+msgstr "Raccogliendo dati..."
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+msgstr ""
+"Configurazione del pacchetto adblock per bloccare domini pubblicità/abuso "
+"usando i DNS."
+
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+"Crea i backup compressi delle liste di blocco, saranno usati in caso di "
+"errori di download o durante l'avvio in modalità manuale."
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr "Directory DNS"
+
+msgid "Description"
+msgstr "Descrizione"
+
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"Non aggiornare automaticamente le liste durante l'avvio, usa invece i backup "
+"della lista di blocco."
+
+msgid "Download Utility (SSL Library)"
+msgstr ""
+
+msgid "Edit Blacklist"
+msgstr "Modifica Lista Nera"
+
+msgid "Edit Configuration"
+msgstr "Modifica Configurazione"
+
+msgid "Edit Whitelist"
+msgstr "Modifica Lista Bianca"
+
+msgid "Enable Adblock"
+msgstr "Attiva Adblock"
+
+msgid "Enable Blocklist Backup"
+msgstr "Attiva Backup Lista di Blocco"
+
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB RAM)"
+msgstr ""
+"Attiva l'ordinamento globale / rimozione duplicati stressante per la memoria "
+"su dispositivi con poca memoria (&lt; 64 MB RAM)"
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
+"Abilita il registro dettagliato in caso di qualsiasi errore di processo."
+
+msgid "Enabled"
+msgstr "Abilitato"
+
+msgid "Extra Options"
+msgstr "Opzioni Extra"
+
+msgid ""
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+"Per le fonti delle liste protette da SSL hai bisogno di una libreria SSL "
+"adatta, p.e. 'libustream-ssl' o wget 'built-in'."
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+"Per ulteriori informazioni <a href=\"%s\" target=\"_blank\">vedi "
+"documentazione online</a>"
+
+msgid "Force Local DNS"
+msgstr "Forza DNS Locale"
+
+msgid "Force Overall Sort"
+msgstr "Forza Ordinamento Globale"
+
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
+"In OPKG usa l'opzione '--force-maintainer' per sovrascrivere il pre-"
+"esistente file di configurazione o scarica una nuova configurazione di "
+"default da <a href=\"%s\" target=\"_blank\">qui</a>"
+
+msgid "Input file not found, please check your configuration."
+msgstr "File di input non trovato, per favore controlla la tua configurazione."
+
+msgid "Invalid domain specified!"
+msgstr "Dominio invalido specificato!"
+
+msgid "Last Run"
+msgstr "Ultimo Avvio"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+"Le selezioni degli URL delle liste e categorie Shallalist sono configurabili "
+"nella sezione 'Avanzato'.<br />"
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+"Lista delle interfacce di rete disponibili. Per default l'avvio sarà "
+"innescato dall'interfaccia 'wan'.<br />"
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+"Lista dei backend DNS supportati con la loro directory di default di esporto "
+"della lista.<br />"
+
+msgid "Loading"
+msgstr "Caricando"
+
+msgid "Manual / Backup mode"
+msgstr "Modalità Manuale / Backup"
+
+msgid "No"
+msgstr "No"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+"Opzioni per ulteriori modifiche in caso che quelle di default non ti sono "
+"adatte."
+
+msgid "Overall Blocked Domains"
+msgstr "Totale Domini Bloccati"
+
+msgid "Overview"
+msgstr "Riassunto"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+"Per favore aggiungi solo un dominio per linea. I commenti introdotti con '#' "
+"sono consentiti - indirizzi ip , jolly e regex non lo sono."
+
+msgid "Please edit this file directly in a terminal session."
+msgstr ""
+"Per favore modifica questo file direttamente in una sessione al terminale."
+
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+"Per favore aggiorna il tuo file configurazione di adblock per usare questo "
+"pacchetto."
+
+msgid "Query"
+msgstr "Interrogazione"
+
+msgid "Query domains"
+msgstr "Interrogazione domini"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+"Reindirizza tutte le richieste DNS dalla zona 'lan' al risolvitore locale."
+
+msgid "Resume"
+msgstr "Riprendi"
+
+msgid "Runtime Information"
+msgstr "Informazione di Runtime"
+
+msgid "SSL req."
+msgstr "Ric. SSL"
+
+msgid "Save"
+msgstr "Salva"
+
+msgid "Startup Trigger"
+msgstr "Innesco d'Avvio"
+
+msgid "Suspend"
+msgstr "Sospendi"
+
+msgid "Suspend / Resume Adblock"
+msgstr "Sospendi / Riprendi Adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+"Directory per i backup di adblock. Per favore usa solo dischi non volatili, "
+"non dischi ram/tmpfs."
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "Directory per la lista di blocco generata 'adb_list.overall'."
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+"La grandezza del file è troppo grande per modificarla online in LuCI (&gt; "
+"512 KB)."
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"Questo form ti consente di modificare il contenuto della lista nera di "
+"adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"Questo form ti consente di modificare il contenuto della lista bianca di "
+"adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"Questo form ti consente di modificare il contenuto del file principale di "
+"configurazione di adblock (/etc/config/adblock)."
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+"Questo form ti consente di interrogare le liste di blocco attive per "
+"determinati domini, p.e. per metterli nella lista bianca."
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+"Questo form mostra l'output del registro, prefiltrato per messaggi relativi "
+"solo ad adblock."
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+"Per sovrascrivere il percorso di default usa l'opzione 'Directory DNS' nella "
+"sezione aggiuntiva sotto."
+
+msgid "Trigger Delay"
+msgstr "Ritardo Innesco"
+
+msgid "Verbose Debug Logging"
+msgstr "Registro di Debug Dettagliato"
+
+msgid "View Logfile"
+msgstr "Vedi Registro"
+
+msgid "Waiting for command to complete..."
+msgstr "Aspettando che il comando venga completato..."
+
+msgid "Yes"
+msgstr "Sì"
+
+msgid "disabled"
+msgstr "disabilitato"
+
+msgid "enabled"
+msgstr "abilitato"
+
+msgid "error"
+msgstr "errore"
+
+msgid "n/a"
+msgstr "n/d"
+
+msgid "paused"
+msgstr "in pausa"
diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po
index ba54a45b89..b4c8675f07 100644
--- a/applications/luci-app-adblock/po/pt-br/adblock.po
+++ b/applications/luci-app-adblock/po/pt-br/adblock.po
@@ -25,7 +25,7 @@ msgid "Adblock Status"
msgstr ""
msgid "Adblock Version"
-msgstr ""
+msgstr "Versão do Adblock"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr ""
@@ -39,10 +39,10 @@ msgid "Available blocklist sources."
msgstr "Fontes de listas de bloqueio disponíveis."
msgid "Backup Directory"
-msgstr ""
+msgstr "Diretório da cópia de segurança"
msgid "Blocklist Sources"
-msgstr ""
+msgstr "Fontes de listas de bloqueio"
msgid ""
"Caution: Please don't select big lists or many lists at once on low memory "
@@ -99,10 +99,10 @@ msgid "Edit Whitelist"
msgstr "Editar Lista Permitida"
msgid "Enable Adblock"
-msgstr ""
+msgstr "Habilitar adblock"
msgid "Enable Blocklist Backup"
-msgstr ""
+msgstr "Habilitar cópia de segurança da lista de bloqueio"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
@@ -118,7 +118,7 @@ msgid "Enabled"
msgstr "Habilitado"
msgid "Extra Options"
-msgstr ""
+msgstr "Opções adicionais"
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
@@ -135,7 +135,7 @@ msgstr ""
"online</a>"
msgid "Force Local DNS"
-msgstr ""
+msgstr "Force o DNS local"
msgid "Force Overall Sort"
msgstr "Force Tipo Geral"
@@ -215,7 +215,7 @@ msgid "Resume"
msgstr ""
msgid "Runtime Information"
-msgstr ""
+msgstr "Informação de execução"
msgid "SSL req."
msgstr "req. de SSL"
@@ -230,7 +230,7 @@ msgid "Suspend"
msgstr ""
msgid "Suspend / Resume Adblock"
-msgstr ""
+msgstr "Suspender / Resumir adblock"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, no "
@@ -285,7 +285,7 @@ msgid ""
msgstr ""
msgid "Trigger Delay"
-msgstr ""
+msgstr "Atraso no gatilho"
msgid "Verbose Debug Logging"
msgstr ""
@@ -314,36 +314,15 @@ msgstr "n/d"
msgid "paused"
msgstr ""
-#~ msgid "Adblock version"
-#~ msgstr "Versão do Adblock"
-
-#~ msgid "Backup directory"
-#~ msgstr "Diretório da cópia de segurança"
-
#~ msgid "Blocked domains (overall)"
#~ msgstr "Domínios bloqueados (total)"
-#~ msgid "Blocklist sources"
-#~ msgstr "Fontes de listas de bloqueio"
-
#~ msgid "DNS backend"
#~ msgstr "Porta dos fundos de DNS"
-#~ msgid "Enable adblock"
-#~ msgstr "Habilitar adblock"
-
-#~ msgid "Enable blocklist backup"
-#~ msgstr "Habilitar cópia de segurança da lista de bloqueio"
-
#~ msgid "Enable verbose debug logging"
#~ msgstr "Habilite registros detalhados para depuração"
-#~ msgid "Extra options"
-#~ msgstr "Opções adicionais"
-
-#~ msgid "Force local DNS"
-#~ msgstr "Force o DNS local"
-
#~ msgid "Last rundate"
#~ msgstr "Última data de execução"
@@ -363,18 +342,9 @@ msgstr ""
#~ msgid "Resume adblock"
#~ msgstr "Resumir adblock"
-#~ msgid "Runtime information"
-#~ msgstr "Informação de execução"
-
#~ msgid "Status"
#~ msgstr "Estado"
-#~ msgid "Suspend / Resume adblock"
-#~ msgstr "Suspender / Resumir adblock"
-
-#~ msgid "Trigger delay"
-#~ msgstr "Atraso no gatilho"
-
#~ msgid "active"
#~ msgstr "ativo"
diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po
index 9507475a84..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 ""
+msgstr "Version av Adblock"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr ""
@@ -26,20 +26,24 @@ msgid "Available blocklist sources."
msgstr "Tillgängliga källor för blockeringslistor"
msgid "Backup Directory"
-msgstr ""
+msgstr "Säkerhetskopiera mapp"
msgid "Blocklist Sources"
-msgstr ""
+msgstr "Källor för blockeringslistor"
msgid ""
"Caution: Please don't select big lists or many lists at once on low memory "
"devices to prevent OOM exceptions!"
msgstr ""
+"Försiktig: Vänligen välj inte stora listor eller många listor på samma gång för enheter "
+"med lite minne för att undvika OOM-undantag!"
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
msgstr ""
+"Välj 'inga' för att stänga av automatiska uppstarter, 'tidsinställd för att använda ett klassiskt "
+"avbrott (30 sek. är standard) eller välj ett annat utlösande gränssnitt."
msgid "Collecting data..."
msgstr "Samlar in data..."
@@ -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"
@@ -84,10 +88,10 @@ msgid "Edit Whitelist"
msgstr "Redigera vitlista"
msgid "Enable Adblock"
-msgstr ""
+msgstr "Aktivera adblock"
msgid "Enable Blocklist Backup"
-msgstr ""
+msgstr "Aktivera säkerhetskopiering av blockeringslistan"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
@@ -101,7 +105,7 @@ msgid "Enabled"
msgstr "Aktiverad"
msgid "Extra Options"
-msgstr ""
+msgstr "Extra alternativ"
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
@@ -116,7 +120,7 @@ msgstr ""
"internet</a>"
msgid "Force Local DNS"
-msgstr ""
+msgstr "Tvinga lokal DNS"
msgid "Force Overall Sort"
msgstr ""
@@ -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,10 +196,10 @@ msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
msgid "Resume"
-msgstr ""
+msgstr "Återuppta"
msgid "Runtime Information"
-msgstr ""
+msgstr "Information om körtid"
msgid "SSL req."
msgstr "SSL-rek."
@@ -204,13 +208,13 @@ msgid "Save"
msgstr "Spara"
msgid "Startup Trigger"
-msgstr ""
+msgstr "Uppstartslösare"
msgid "Suspend"
-msgstr ""
+msgstr "Stäng av"
msgid "Suspend / Resume Adblock"
-msgstr ""
+msgstr "Upphäv / Återuppta adblock"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, no "
@@ -275,50 +279,29 @@ 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 ""
-
-#~ msgid "Adblock version"
-#~ msgstr "Version för Adblock"
-
-#~ msgid "Backup directory"
-#~ msgstr "Säkerhetskopiera mapp"
+msgstr "pausad"
#~ msgid "Blocked domains (overall)"
#~ msgstr "Blockerade domäner (övergripande)"
-#~ msgid "Blocklist sources"
-#~ msgstr "Källor för blockeringslistor"
-
#~ msgid "DNS backend"
#~ msgstr "Bakände för DNS"
-#~ msgid "Enable adblock"
-#~ msgstr "Aktivera adblock"
-
-#~ msgid "Enable blocklist backup"
-#~ msgstr "Aktivera säkerhetskopiering av blockeringslistan"
-
#~ msgid "Enable verbose debug logging"
#~ msgstr "Aktivera utförlig loggning för avlusning"
-#~ msgid "Extra options"
-#~ msgstr "Extra alternativ"
-
-#~ msgid "Force local DNS"
-#~ msgstr "Tvinga lokal DNS"
-
#~ msgid "Last rundate"
#~ msgstr "Senaste kördatum"
@@ -328,15 +311,9 @@ msgstr ""
#~ msgid "Resume adblock"
#~ msgstr "Återuppta adblock"
-#~ msgid "Runtime information"
-#~ msgstr "Information om körtid"
-
#~ msgid "Status"
#~ msgstr "Status"
-#~ msgid "Suspend / Resume adblock"
-#~ msgstr "Upphäv / Återuppta adblock"
-
#~ msgid "Suspend adblock"
#~ msgstr "Upphäv adblock"
diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po
index dca81d4e47..d5f5104a05 100644
--- a/applications/luci-app-adblock/po/zh-cn/adblock.po
+++ b/applications/luci-app-adblock/po/zh-cn/adblock.po
@@ -26,7 +26,7 @@ msgid "Adblock Status"
msgstr ""
msgid "Adblock Version"
-msgstr ""
+msgstr "Adblock 版本"
msgid "Additional trigger delay in seconds before adblock processing begins."
msgstr ""
@@ -38,10 +38,10 @@ msgid "Available blocklist sources."
msgstr "可用的 blocklist 来源"
msgid "Backup Directory"
-msgstr ""
+msgstr "备份目录"
msgid "Blocklist Sources"
-msgstr ""
+msgstr "拦截列表来源"
msgid ""
"Caution: Please don't select big lists or many lists at once on low memory "
@@ -92,10 +92,10 @@ msgid "Edit Whitelist"
msgstr "编辑白名单"
msgid "Enable Adblock"
-msgstr ""
+msgstr "启用Adblock"
msgid "Enable Blocklist Backup"
-msgstr ""
+msgstr "启用拦截规则备份"
msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
@@ -109,7 +109,7 @@ msgid "Enabled"
msgstr "启用"
msgid "Extra Options"
-msgstr ""
+msgstr "额外选项"
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
@@ -200,7 +200,7 @@ msgid "Resume"
msgstr ""
msgid "Runtime Information"
-msgstr ""
+msgstr "运行信息"
msgid "SSL req."
msgstr ""
@@ -215,7 +215,7 @@ msgid "Suspend"
msgstr ""
msgid "Suspend / Resume Adblock"
-msgstr ""
+msgstr "暂停/恢复 Adblock"
msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, no "
@@ -259,7 +259,7 @@ msgid ""
msgstr ""
msgid "Trigger Delay"
-msgstr ""
+msgstr "触发延迟"
msgid "Verbose Debug Logging"
msgstr ""
@@ -288,48 +288,21 @@ msgstr ""
msgid "paused"
msgstr ""
-#~ msgid "Adblock version"
-#~ msgstr "Adblock 版本"
-
-#~ msgid "Backup directory"
-#~ msgstr "备份目录"
-
-#~ msgid "Blocklist sources"
-#~ msgstr "拦截列表来源"
-
#~ msgid "DNS backend"
#~ msgstr "DNS 后端"
-#~ msgid "Enable adblock"
-#~ msgstr "启用Adblock"
-
-#~ msgid "Enable blocklist backup"
-#~ msgstr "启用拦截规则备份"
-
#~ msgid "Enable verbose debug logging"
#~ msgstr "启用详细调试输出"
-#~ msgid "Extra options"
-#~ msgstr "额外选项"
-
#~ msgid "Resume adblock"
#~ msgstr "恢复 Adblock"
-#~ msgid "Runtime information"
-#~ msgstr "运行信息"
-
#~ msgid "Status"
#~ msgstr "状态"
-#~ msgid "Suspend / Resume adblock"
-#~ msgstr "暂停/恢复 Adblock"
-
#~ msgid "Suspend adblock"
#~ msgstr "暂停 Adblock"
-#~ msgid "Trigger delay"
-#~ msgstr "触发延迟"
-
#~ msgid "active"
#~ msgstr "已启用"
diff --git a/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po b/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po
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..b53299bf51 100644
--- a/applications/luci-app-aria2/po/zh-cn/aria2.po
+++ b/applications/luci-app-aria2/po/zh-cn/aria2.po
@@ -1,200 +1,211 @@
-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 "General settings"
-msgstr "一般设置"
-
-msgid "Files and Locations"
-msgstr "文件和目录"
+msgid "Aria2 Status"
+msgstr "Aria2 状态"
-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 "Generate Randomly"
-msgstr "随机生成"
+msgid "Extra Settings"
+msgstr "附加选项"
-msgid "Enable log"
-msgstr "启用日志"
+msgid "Falloc"
+msgstr ""
-msgid "Log file is in the config file dir."
-msgstr "日志文件在配置文件目录下"
+msgid "Files and Locations"
+msgstr "文件和目录"
-msgid "Log level"
-msgstr "日志记录等级"
+msgid "Follow torrent"
+msgstr "自动添加下载的种子"
-msgid "Debug"
-msgstr "调试"
+msgid "General Settings"
+msgstr ""
+
+msgid "Generate Randomly"
+msgstr "随机生成"
msgid "Info"
msgstr "信息"
-msgid "Notice"
-msgstr "注意"
+msgid "List of additional Bt tracker"
+msgstr "附加Tracker列表"
-msgid "Warn"
-msgstr "警告"
+msgid "List of extra settings"
+msgstr "附加选项列表"
-msgid "Error"
-msgstr "错误"
+msgid "Log file is in the config file dir."
+msgstr "日志文件在配置文件目录下"
-msgid "Config file directory"
-msgstr "配置文件目录"
+msgid "Log level"
+msgstr "日志记录等级"
-msgid "Default download directory"
-msgstr "默认下载目录"
+msgid "Max concurrent downloads"
+msgstr "最大同时下载任务数"
-msgid "Disk cache"
-msgstr "磁盘缓存"
+msgid "Max connection per server"
+msgstr "单服务器最大连接数"
-msgid "in bytes, You can append K or M."
-msgstr "单位 B, 你可以在数字后跟上 K 或 M"
+msgid "Max number of peers per torrent"
+msgstr "单个种子最大连接数"
-msgid "Preallocation"
-msgstr "磁盘预分配"
+msgid "Max number of split"
+msgstr "单文件最大线程数"
-msgid "Off"
-msgstr "关闭"
+msgid "Min split size"
+msgstr "最小文件分片大小"
-msgid "Prealloc"
-msgstr ""
+msgid "No Authentication"
+msgstr "无认证"
-msgid "Trunc"
-msgstr ""
+msgid "Notice"
+msgstr "注意"
-msgid "Falloc"
-msgstr ""
+msgid "Off"
+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"
+
+#~ msgid "General settings"
+#~ msgstr "一般设置"
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-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..8202497ee1
--- /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"
+
+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..a1be1ea6e8 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,7 @@ 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-unbound/luasrc/controller/unbound.lua b/applications/luci-app-unbound/luasrc/controller/unbound.lua
index 0a5abc5a5e..b44bf038eb 100644
--- a/applications/luci-app-unbound/luasrc/controller/unbound.lua
+++ b/applications/luci-app-unbound/luasrc/controller/unbound.lua
@@ -1,17 +1,151 @@
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- Copyright 2017 Eric Luehrsen <ericluehrsen@hotmail.com>
-- Licensed to the public under the Apache License 2.0.
module("luci.controller.unbound", package.seeall)
+
function index()
- if not nixio.fs.access("/etc/config/unbound") then
- return
- end
+ local ucl = luci.model.uci.cursor()
+ local valexp = ucl:get_first("unbound", "unbound", "extended_luci")
+ local valman = ucl:get_first("unbound", "unbound", "manual_conf")
+
+
+ if not nixio.fs.access("/etc/config/unbound") then
+ return
+ end
+
+
+ if valexp == "1" then
+ -- Expanded View
+ entry({"admin", "services", "unbound"}, firstchild(), _("Recursive DNS")).dependent = false
+
+ -- UCI Tab(s)
+ entry({"admin", "services", "unbound", "configure"}, cbi("unbound/configure"), _("Settings"), 10)
+
+ -- Status Tab(s)
+ entry({"admin", "services", "unbound", "status"}, firstchild(), _("Status"), 20)
+ entry({"admin", "services", "unbound", "status", "syslog"}, call("QuerySysLog"), _("Log"), 50).leaf = true
+
+
+ if nixio.fs.access("/usr/sbin/unbound-control") then
+ -- Require unbound-control to execute
+ entry({"admin", "services", "unbound", "status", "statistics"}, call("QueryStatistics"), _("Statistics"), 10).leaf = true
+ entry({"admin", "services", "unbound", "status", "localdata"}, call("QueryLocalData"), _("Local Data"), 20).leaf = true
+ entry({"admin", "services", "unbound", "status", "localzone"}, call("QueryLocalZone"), _("Local Zones"), 30).leaf = true
+
+ else
+ entry({"admin", "services", "unbound", "status", "statistics"}, call("ShowEmpty"), _("Statistics"), 10).leaf = true
+ end
+
+
+ -- Raw File Tab(s)
+ entry({"admin", "services", "unbound", "files"}, firstchild(), _("Files"), 30)
+
+
+ if valman ~= "1" then
+ entry({"admin", "services", "unbound", "files", "base"}, call("ShowUnboundConf"), _("UCI: Unbound"), 10).leaf = true
+ else
+ entry({"admin", "services", "unbound", "files", "base"}, cbi("unbound/manual"), _("Edit: Unbound"), 10).leaf = true
+ end
+
+
+ entry({"admin", "services", "unbound", "files", "server"}, cbi("unbound/server"), _("Edit: Server"), 20).leaf = true
+ entry({"admin", "services", "unbound", "files", "extended"}, cbi("unbound/extended"), _("Edit: Extended"), 30).leaf = true
+
+
+ if nixio.fs.access("/var/lib/unbound/unbound_dhcp.conf") then
+ entry({"admin", "services", "unbound", "files", "dhcp"}, call("ShowDHCPConf"), _("Include: DHCP"), 40).leaf = true
+ end
+
+
+ if nixio.fs.access("/var/lib/unbound/adb_list.overall") then
+ entry({"admin", "services", "unbound", "files", "adblock"}, call("ShowAdblock"), _("Include: Adblock"), 50).leaf = true
+ end
+
+ else
+ -- Simple View to UCI only
+ entry({"admin", "services", "unbound"}, cbi("unbound/configure"), _("Recursive DNS")).dependent = false
+ end
+end
+
+
+function ShowEmpty()
+ local lclhead = "Unbound Control"
+ local lcldesc = luci.i18n.translate("This could display more statistics with the unbound-control package.")
+ luci.template.render("unbound/show-empty", {heading = lclhead, description = lcldesc})
+end
+
+
+function QuerySysLog()
+ local lclhead = "System Log"
+ local lcldata = luci.util.exec("logread | grep -i unbound")
+ local lcldesc = luci.i18n.translate("This shows syslog filtered for events involving Unbound.")
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function QueryStatistics()
+ local lclhead = "Unbound Control Stats"
+ local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf stats_noreset")
+ local lcldesc = luci.i18n.translate("This shows some performance statistics tracked by Unbound.")
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function QueryLocalData()
+ local lclhead = "Unbound Control Local Data"
+ local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_data")
+ local lcldesc = luci.i18n.translate("This shows local host records that shortcut recursion.")
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function QueryLocalZone()
+ local lclhead = "Unbound Control Local Zones"
+ local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_zones")
+ local lcldesc = luci.i18n.translate("This shows local zone definitions that affect recursion routing or processing. ")
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function ShowUnboundConf()
+ local unboundfile = "/var/lib/unbound/unbound.conf"
+ local lclhead = "Unbound Conf"
+ local lcldata = nixio.fs.readfile(unboundfile)
+ local lcldesc = luci.i18n.translate("This shows configuration generated by UCI:")
+ lcldesc = lcldesc .. " (" .. unboundfile .. ")"
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function ShowDHCPConf()
+ local dhcpfile = "/var/lib/unbound/unbound_dhcp.conf"
+ local lclhead = "DHCP Conf"
+ local lcldata = nixio.fs.readfile(dhcpfile)
+ local lcldesc = luci.i18n.translate("This shows LAN hosts added by DHCP hook scripts:")
+ lcldesc = lcldesc .. " (" .. dhcpfile .. ")"
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function ShowAdblock()
+ local adblockfile = "/var/lib/unbound/adb_list.overall"
+ local lclhead = "Adblock Conf"
+ local lcldata, lcldesc
+
- local page
+ if nixio.fs.stat(adblockfile).size > 262144 then
+ lcldesc = luci.i18n.translate("Adblock domain list is too large for LuCI:")
+ lcldesc = lcldesc .. " (" .. adblockfile .. ")"
+ luci.template.render("unbound/show-empty", {heading = lclhead, description = lcldesc})
- page = entry({"admin", "services", "unbound"}, cbi("unbound"), _("Recursive DNS"))
- page.dependent = true
+ else
+ lcldata = nixio.fs.readfile(adblockfile)
+ lcldesc = luci.i18n.translate("This shows blocked domains provided by Adblock scripts:")
+ lcldesc = lcldesc .. " (" .. adblockfile .. ")"
+ luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+ end
end
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua
deleted file mode 100644
index bfaacb40bc..0000000000
--- a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua
+++ /dev/null
@@ -1,216 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
--- Copyright 2016 Dan Luedtke <mail@danrl.com>
--- Licensed to the public under the Apache License 2.0.
-
-local m
-local s1
-local ena, mcf, lsv, rlh, rpv, vld, nvd, eds, prt, tlm
-local ctl, dlk, dom, dty, lfq, wfq, exa, ctl, d64, pfx, qry, qrs
-local pro, tgr, rsc, rsn, ag2
-
-m = Map("unbound", translate("Recursive DNS"),
- translatef("<a href=\"%s\" target=\"_blank\">Unbound</a>"
- .. " is a validating, recursive, and caching DNS resolver. "
- .. "UCI help can be found on "
- .. "<a href=\"%s\" target=\"_blank\">github</a>.",
- "https://www.unbound.net/",
- "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md"))
-
-
-s1 = m:section(TypedSection, "unbound")
-s1.addremove = false
-s1.anonymous = true
-s1:tab("service", translate("Basic Settings"))
-s1:tab("advanced", translate("Advanced Settings"))
-s1:tab("resource", translate("Resource Settings"))
-
---LuCI or Not
-
-ena = s1:taboption("service", Flag, "enabled", translate("Enable Unbound:"),
- translate("Enable the initialization scripts for Unbound"))
-ena.rmempty = false
-
-mcf = s1:taboption("service", Flag, "manual_conf", translate("Manual Conf:"),
- translate("Skip UCI and use /etc/unbound/unbound.conf"))
-mcf.rmempty = false
-
-function ena.cfgvalue(self, section)
- return luci.sys.init.enabled("unbound") and self.enabled or self.disabled
-end
-
-function ena.write(self, section, value)
- if value == "1" then
- luci.sys.init.enable("unbound")
- luci.sys.call("/etc/init.d/unbound start >/dev/null")
- else
- luci.sys.call("/etc/init.d/unbound stop >/dev/null")
- luci.sys.init.disable("unbound")
- end
-
- return Flag.write(self, section, value)
-end
-
---Basic Tab
-
-lsv = s1:taboption("service", Flag, "localservice", translate("Local Service:"),
- translate("Accept queries only from local subnets"))
-lsv.rmempty = false
-
-rlh = s1:taboption("service", Flag, "rebind_localhost", translate("Block Localhost Rebind:"),
- translate("Prevent upstream response of 127.0.0.0/8"))
-rlh.rmempty = false
-
-rpv = s1:taboption("service", Flag, "rebind_protection", translate("Block Private Rebind:"),
- translate("Prevent upstream response of RFC1918 ranges"))
-rpv.rmempty = false
-
-vld = s1:taboption("service", Flag, "validator", translate("Enable DNSSEC:"),
- translate("Enable the DNSSEC validator module"))
-vld.rmempty = false
-
-nvd = s1:taboption("service", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"),
- translate("Break the loop where DNSSEC needs NTP and NTP needs DNS"))
-nvd.rmempty = false
-nvd:depends({ validator = true })
-
-eds = s1:taboption("service", Value, "edns_size", translate("EDNS Size:"),
- translate("Limit extended DNS packet size"))
-eds.datatype = "and(uinteger,min(512),max(4096))"
-eds.rmempty = false
-
-prt = s1:taboption("service", Value, "listen_port", translate("Listening Port:"),
- translate("Choose Unbounds listening port"))
-prt.datatype = "port"
-prt.rmempty = false
-
-tlm = s1:taboption("service", Value, "ttl_min", translate("TTL Minimum:"),
- translate("Prevent excessively short cache periods"))
-tlm.datatype = "and(uinteger,min(0),max(600))"
-tlm.rmempty = false
-
---Advanced Tab
-
-ctl = s1:taboption("advanced", Flag, "unbound_control", translate("Unbound Control App:"),
- translate("Enable unecrypted localhost access for unbound-control"))
-ctl.rmempty = false
-
-dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"),
- translate("Link to supported programs to load DHCP into DNS"))
-dlk:value("none", translate("No Link"))
-dlk:value("dnsmasq", "dnsmasq")
-dlk:value("odhcpd", "odhcpd")
-dlk.rmempty = false
-
-dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"),
- translate("Domain suffix for this router and DHCP clients"))
-dom.placeholder = "lan"
-dom:depends({ dhcp_link = "none" })
-dom:depends({ dhcp_link = "odhcpd" })
-
-dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"),
- translate("How to treat queries of this local domain"))
-dty:value("deny", translate("Ignored"))
-dty:value("refuse", translate("Refused"))
-dty:value("static", translate("Only Local"))
-dty:value("transparent", translate("Also Forwarded"))
-dty:depends({ dhcp_link = "none" })
-dty:depends({ dhcp_link = "odhcpd" })
-
-lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"),
- translate("How to enter the LAN or local network router in DNS"))
-lfq:value("0", translate("No DNS"))
-lfq:value("1", translate("Hostname, Primary Address"))
-lfq:value("2", translate("Hostname, All Addresses"))
-lfq:value("3", translate("Host FQDN, All Addresses"))
-lfq:value("4", translate("Interface FQDN, All Addresses"))
-lfq:depends({ dhcp_link = "none" })
-lfq:depends({ dhcp_link = "odhcpd" })
-
-wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"),
- translate("Override the WAN side router entry in DNS"))
-wfq:value("0", translate("Upstream"))
-wfq:value("1", translate("Hostname, Primary Address"))
-wfq:value("2", translate("Hostname, All Addresses"))
-wfq:value("3", translate("Host FQDN, All Addresses"))
-wfq:value("4", translate("Interface FQDN, All Addresses"))
-wfq:depends({ dhcp_link = "none" })
-wfq:depends({ dhcp_link = "odhcpd" })
-
-exa = s1:taboption("advanced", ListValue, "add_extra_dns", translate("Extra DNS:"),
- translate("Use extra DNS entries found in /etc/config/dhcp"))
-exa:value("0", translate("Ignore"))
-exa:value("1", translate("Include Network/Hostnames"))
-exa:value("2", translate("Advanced MX/SRV RR"))
-exa:value("3", translate("Advanced CNAME RR"))
-exa:depends({ dhcp_link = "none" })
-exa:depends({ dhcp_link = "odhcpd" })
-
-ctl = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"),
- translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)"))
-ctl.rmempty = false
-
-d64 = s1:taboption("advanced", Flag, "dns64", translate("Enable DNS64:"),
- translate("Enable the DNS64 module"))
-d64.rmempty = false
-
-pfx = s1:taboption("advanced", Value, "dns64_prefix", translate("DNS64 Prefix:"),
- translate("Prefix for generated DNS64 addresses"))
-pfx.datatype = "ip6addr"
-pfx.placeholder = "64:ff9b::/96"
-pfx.optional = true
-pfx:depends({ dns64 = true })
-
-qry = s1:taboption("advanced", Flag, "query_minimize", translate("Query Minimize:"),
- translate("Break down query components for limited added privacy"))
-qry.rmempty = false
-
-qrs = s1:taboption("advanced", Flag, "query_min_strict", translate("Strict Minimize:"),
- translate("Strict version of 'query minimize' but it can break DNS"))
-qrs.rmempty = false
-qrs:depends({ query_minimize = true })
-
---TODO: dnsmasq needs to not reference resolve-file and get off port 53.
-
---Resource Tuning Tab
-
-pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"),
- translate("Chose the protocol recursion queries leave on"))
-pro:value("mixed", translate("IP4 and IP6"))
-pro:value("ip6_prefer", translate("IP6 Preferred"))
-pro:value("ip4_only", translate("IP4 Only"))
-pro:value("ip6_only", translate("IP6 Only"))
-pro.rmempty = false
-
-rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"),
- translate("Recursion activity affects memory growth and CPU load"))
-rsn:value("aggressive", translate("Aggressive"))
-rsn:value("default", translate("Default"))
-rsn:value("passive", translate("Passive"))
-rsn.rmempty = false
-
-rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"),
- translate("Use menu System/Processes to observe any memory growth"))
-rsc:value("large", translate("Large"))
-rsc:value("medium", translate("Medium"))
-rsc:value("small", translate("Small"))
-rsc:value("tiny", translate("Tiny"))
-rsc.rmempty = false
-
-ag2 = s1:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"),
- translate("Limit days between RFC5011 to reduce flash writes"))
-ag2.datatype = "and(uinteger,min(1),max(99))"
-ag2:value("3", "3")
-ag2:value("9", "9 ("..translate("default")..")")
-ag2:value("12", "12")
-ag2:value("24", "24")
-ag2:value("99", "99 ("..translate("never")..")")
-
-tgr = s1:taboption("resource", Value, "trigger", translate("Trigger Networks:"),
- translate("Networks that may trigger Unbound to reload (avoid wan6)"))
-tgr.template = "cbi/network_netlist"
-tgr.widget = "checkbox"
-tgr.cast = "string"
-
-return m
-
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua
new file mode 100644
index 0000000000..cdf7757e3a
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua
@@ -0,0 +1,273 @@
+-- Copyright 2008 Steven Barth <steven@midlink.org>
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Copyright 2016 Dan Luedtke <mail@danrl.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m1, s1
+local ena, mcf, lci, lsv, rlh, rpv, vld, nvd, eds, prt, tlm
+local ctl, dlk, dom, dty, lfq, wfq, exa, dp6, d64, pfx, qry, qrs
+local pro, tgr, rsc, rsn, ag2, stt
+local ucl = luci.model.uci.cursor()
+local valman = ucl:get_first("unbound", "unbound", "manual_conf")
+
+m1 = Map("unbound")
+
+s1 = m1:section(TypedSection, "unbound")
+s1.addremove = false
+s1.anonymous = true
+
+--LuCI, Unbound, or Not
+s1:tab("basic", translate("Basic"),
+ translatef("<h3>Unbound Basic Settings</h3>\n"
+ .. "<a href=\"%s\" target=\"_blank\">Unbound</a>"
+ .. " is a validating, recursive, and caching DNS resolver. "
+ .. "UCI help can be found on "
+ .. "<a href=\"%s\" target=\"_blank\">github</a>.",
+ "https://www.unbound.net/",
+ "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md"))
+
+ena = s1:taboption("basic", Flag, "enabled", translate("Enable Unbound:"),
+ translate("Enable the initialization scripts for Unbound"))
+ena.rmempty = false
+
+mcf = s1:taboption("basic", Flag, "manual_conf", translate("Manual Conf:"),
+ translate("Skip UCI and use /etc/unbound/unbound.conf"))
+mcf.rmempty = false
+
+lci = s1:taboption("basic", Flag, "extended_luci", translate("Advanced LuCI:"),
+ translate("See detailed tabs for debug and advanced manual configuration"))
+lci.rmempty = false
+
+
+function ena.cfgvalue(self, section)
+ return luci.sys.init.enabled("unbound") and self.enabled or self.disabled
+end
+
+
+function ena.write(self, section, value)
+ if value == "1" then
+ luci.sys.init.enable("unbound")
+ luci.sys.call("/etc/init.d/unbound start >/dev/null")
+ else
+ luci.sys.call("/etc/init.d/unbound stop >/dev/null")
+ luci.sys.init.disable("unbound")
+ end
+
+ return Flag.write(self, section, value)
+end
+
+
+if valman ~= "1" then
+ -- Not in manual configuration mode; show UCI
+ s1:tab("advanced", translate("Advanced"),
+ translatef("<h3>Unbound Advanced Settings</h3>\n"
+ .. "Advanced setttings and plugin modules for "
+ .. "<a href=\"%s\" target=\"_blank\">Unbound</a>"
+ .. " DNS resolver.", "https://www.unbound.net/"))
+
+ s1:tab("resource", translate("Resource"),
+ translatef("<h3>Unbound Resource Settings</h3>\n"
+ .. "Memory and protocol setttings for "
+ .. "<a href=\"%s\" target=\"_blank\">Unbound</a>"
+ .. " DNS resolver.", "https://www.unbound.net/"))
+
+ --Basic Tab
+ lsv = s1:taboption("basic", Flag, "localservice", translate("Local Service:"),
+ translate("Accept queries only from local subnets"))
+ lsv.rmempty = false
+
+ rlh = s1:taboption("basic", Flag, "rebind_localhost", translate("Block Localhost Rebind:"),
+ translate("Prevent upstream response of 127.0.0.0/8"))
+ rlh.rmempty = false
+
+ rpv = s1:taboption("basic", Flag, "rebind_protection", translate("Block Private Rebind:"),
+ translate("Prevent upstream response of RFC1918 ranges"))
+ rpv.rmempty = false
+
+ vld = s1:taboption("basic", Flag, "validator", translate("Enable DNSSEC:"),
+ translate("Enable the DNSSEC validator module"))
+ vld.rmempty = false
+
+ nvd = s1:taboption("basic", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"),
+ translate("Break the loop where DNSSEC needs NTP and NTP needs DNS"))
+ nvd.rmempty = false
+ nvd:depends({ validator = true })
+
+ eds = s1:taboption("basic", Value, "edns_size", translate("EDNS Size:"),
+ translate("Limit extended DNS packet size"))
+ eds.datatype = "and(uinteger,min(512),max(4096))"
+ eds.rmempty = false
+
+ prt = s1:taboption("basic", Value, "listen_port", translate("Listening Port:"),
+ translate("Choose Unbounds listening port"))
+ prt.datatype = "port"
+ prt.rmempty = false
+
+ tlm = s1:taboption("basic", Value, "ttl_min", translate("TTL Minimum:"),
+ translate("Prevent excessively short cache periods"))
+ tlm.datatype = "and(uinteger,min(0),max(600))"
+ tlm.rmempty = false
+
+ --Advanced Tab
+ ctl = s1:taboption("advanced", ListValue, "unbound_control", translate("Unbound Control App:"),
+ translate("Enable access for unbound-control"))
+ ctl.rmempty = false
+ ctl:value("0", translate("No Remote Control"))
+ ctl:value("1", translate("Local Host, No Encryption"))
+ ctl:value("2", translate("Local Host, Encrypted"))
+ ctl:value("3", translate("Local Subnet, Encrypted"))
+ ctl:value("4", translate("Local Subnet, Static Encryption"))
+
+ dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"),
+ translate("Link to supported programs to load DHCP into DNS"))
+ dlk:value("none", translate("No Link"))
+ dlk:value("dnsmasq", "dnsmasq")
+ dlk:value("odhcpd", "odhcpd")
+ dlk.rmempty = false
+
+ dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"),
+ translate("Domain suffix for this router and DHCP clients"))
+ dom.placeholder = "lan"
+ dom:depends({ dhcp_link = "none" })
+ dom:depends({ dhcp_link = "odhcpd" })
+
+ dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"),
+ translate("How to treat queries of this local domain"))
+ dty:value("deny", translate("Ignored"))
+ dty:value("refuse", translate("Refused"))
+ dty:value("static", translate("Only Local"))
+ dty:value("transparent", translate("Also Forwarded"))
+ dty:depends({ dhcp_link = "none" })
+ dty:depends({ dhcp_link = "odhcpd" })
+
+ lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"),
+ translate("How to enter the LAN or local network router in DNS"))
+ lfq:value("0", translate("No DNS"))
+ lfq:value("1", translate("Hostname, Primary Address"))
+ lfq:value("2", translate("Hostname, All Addresses"))
+ lfq:value("3", translate("Host FQDN, All Addresses"))
+ lfq:value("4", translate("Interface FQDN, All Addresses"))
+ lfq:depends({ dhcp_link = "none" })
+ lfq:depends({ dhcp_link = "odhcpd" })
+
+ wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"),
+ translate("Override the WAN side router entry in DNS"))
+ wfq:value("0", translate("Upstream"))
+ wfq:value("1", translate("Hostname, Primary Address"))
+ wfq:value("2", translate("Hostname, All Addresses"))
+ wfq:value("3", translate("Host FQDN, All Addresses"))
+ wfq:value("4", translate("Interface FQDN, All Addresses"))
+ wfq:depends({ dhcp_link = "none" })
+ wfq:depends({ dhcp_link = "odhcpd" })
+
+ exa = s1:taboption("advanced", ListValue, "add_extra_dns", translate("Extra DNS:"),
+ translate("Use extra DNS entries found in /etc/config/dhcp"))
+ exa:value("0", translate("Ignore"))
+ exa:value("1", translate("Include Network/Hostnames"))
+ exa:value("2", translate("Advanced MX/SRV RR"))
+ exa:value("3", translate("Advanced CNAME RR"))
+ exa:depends({ dhcp_link = "none" })
+ exa:depends({ dhcp_link = "odhcpd" })
+
+ dp6 = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"),
+ translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)"))
+ dp6.rmempty = false
+
+ d64 = s1:taboption("advanced", Flag, "dns64", translate("Enable DNS64:"),
+ translate("Enable the DNS64 module"))
+ d64.rmempty = false
+
+ pfx = s1:taboption("advanced", Value, "dns64_prefix", translate("DNS64 Prefix:"),
+ translate("Prefix for generated DNS64 addresses"))
+ pfx.datatype = "ip6addr"
+ pfx.placeholder = "64:ff9b::/96"
+ pfx.optional = true
+ pfx:depends({ dns64 = true })
+
+ qry = s1:taboption("advanced", Flag, "query_minimize", translate("Query Minimize:"),
+ translate("Break down query components for limited added privacy"))
+ qry.rmempty = false
+
+ qrs = s1:taboption("advanced", Flag, "query_min_strict", translate("Strict Minimize:"),
+ translate("Strict version of 'query minimize' but it can break DNS"))
+ qrs.rmempty = false
+ qrs:depends({ query_minimize = true })
+
+ --TODO: dnsmasq needs to not reference resolve-file and get off port 53.
+
+ --Resource Tuning Tab
+ pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"),
+ translate("Chose the protocol recursion queries leave on"))
+ pro:value("mixed", translate("IP4 and IP6"))
+ pro:value("ip6_prefer", translate("IP6 Preferred"))
+ pro:value("ip4_only", translate("IP4 Only"))
+ pro:value("ip6_only", translate("IP6 Only"))
+ pro.rmempty = false
+
+ rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"),
+ translate("Recursion activity affects memory growth and CPU load"))
+ rsn:value("aggressive", translate("Aggressive"))
+ rsn:value("default", translate("Default"))
+ rsn:value("passive", translate("Passive"))
+ rsn.rmempty = false
+
+ rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"),
+ translate("Use menu System/Processes to observe any memory growth"))
+ rsc:value("large", translate("Large"))
+ rsc:value("medium", translate("Medium"))
+ rsc:value("small", translate("Small"))
+ rsc:value("tiny", translate("Tiny"))
+ rsc.rmempty = false
+
+ ag2 = s1:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"),
+ translate("Limit days between RFC5011 to reduce flash writes"))
+ ag2.datatype = "and(uinteger,min(1),max(99))"
+ ag2:value("3", "3")
+ ag2:value("9", "9 ("..translate("default")..")")
+ ag2:value("12", "12")
+ ag2:value("24", "24")
+ ag2:value("99", "99 ("..translate("never")..")")
+
+ stt = s1:taboption("resource", Flag, "extended_stats", translate("Extended Statistics:"),
+ translate("Extended statistics are printed from unbound-control"))
+ stt.rmempty = false
+
+ tgr = s1:taboption("resource", Value, "trigger", translate("Trigger Networks:"),
+ translate("Networks that may trigger Unbound to reload (avoid wan6)"))
+ tgr.template = "cbi/network_netlist"
+ tgr.widget = "checkbox"
+ tgr.cast = "string"
+
+else
+ s1:tab("rfc5011", translate("RFC5011"),
+ translatef("<h3>Unbound RFC5011 Settings</h3>\n"
+ .. "RFC5011 copy scripts protect flash ROM even with UCI disabled."))
+
+ ag2 = s1:taboption("rfc5011", Value, "root_age", translate("Root DSKEY Age:"),
+ translate("Limit days to copy /var/->/etc/ to reduce flash writes"))
+ ag2.datatype = "and(uinteger,min(1),max(99))"
+ ag2:value("3", "3")
+ ag2:value("9", "9 ("..translate("default")..")")
+ ag2:value("12", "12")
+ ag2:value("24", "24")
+ ag2:value("99", "99 ("..translate("never")..")")
+end
+
+
+function m1.on_after_commit(self)
+ function ena.validate(self, value)
+ if value ~= "0" then
+ luci.sys.call("/etc/init.d/unbound restart >/dev/null 2>&1")
+ else
+ luci.sys.call("/etc/init.d/unbound stop >/dev/null 2>&1")
+ end
+ end
+
+
+ -- Restart Unbound with configuration and reload the page (some options hide)
+ luci.http.redirect(luci.dispatcher.build_url("admin", "services", "unbound"))
+end
+
+
+return m1
+
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua
new file mode 100644
index 0000000000..67d2ec6c6b
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua
@@ -0,0 +1,30 @@
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m4, s4, frm
+local filename = "/etc/unbound/unbound_ext.conf"
+local description = translatef("Here you may edit 'forward:' and 'remote-control:' in an extended 'include:'")
+description = description .. " (" .. filename .. ")"
+
+m4 = SimpleForm("editing", nil)
+m4:append(Template("unbound/css-editing"))
+m4.submit = translate("Save")
+m4.reset = false
+s4 = m4:section(SimpleSection, "Unbound Extended Conf", description)
+frm = s4:option(TextValue, "data")
+frm.datatype = "string"
+frm.rows = 20
+
+
+function frm.cfgvalue()
+ return nixio.fs.readfile(filename) or ""
+end
+
+
+function frm.write(self, section, data)
+ return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
+end
+
+
+return m4
+
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua
new file mode 100644
index 0000000000..5cfb9c32c1
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua
@@ -0,0 +1,30 @@
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m2, s2, frm
+local filename = "/etc/unbound/unbound.conf"
+local description = translatef("Here you may edit raw 'unbound.conf' when you don't use UCI:")
+description = description .. " (" .. filename .. ")"
+
+m2 = SimpleForm("editing", nil)
+m2:append(Template("unbound/css-editing"))
+m2.submit = translate("Save")
+m2.reset = false
+s2 = m2:section(SimpleSection, "Unbound Conf", description)
+frm = s2:option(TextValue, "data")
+frm.datatype = "string"
+frm.rows = 20
+
+
+function frm.cfgvalue()
+ return nixio.fs.readfile(filename) or ""
+end
+
+
+function frm.write(self, section, data)
+ return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
+end
+
+
+return m2
+
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua
new file mode 100644
index 0000000000..d0ac407847
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua
@@ -0,0 +1,30 @@
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m3, s3, frm
+local filename = "/etc/unbound/unbound_srv.conf"
+local description = translatef("Here you may edit the 'server:' clause in an internal 'include:'")
+description = description .. " (" .. filename .. ")"
+
+m3 = SimpleForm("editing", nil)
+m3:append(Template("unbound/css-editing"))
+m3.submit = translate("Save")
+m3.reset = false
+s3 = m3:section(SimpleSection, "Unbound Server Conf", description)
+frm = s3:option(TextValue, "data")
+frm.datatype = "string"
+frm.rows = 20
+
+
+function frm.cfgvalue()
+ return nixio.fs.readfile(filename) or ""
+end
+
+
+function frm.write(self, section, data)
+ return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
+end
+
+
+return m3
+
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm b/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm
new file mode 100644
index 0000000000..44d09378c3
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm
@@ -0,0 +1,8 @@
+<style type="text/css">
+ textarea
+ {
+ background-color: #fffff0;
+ font-family: monospace;
+ }
+</style>
+
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm b/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm
new file mode 100644
index 0000000000..87d6cc68cb
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm
@@ -0,0 +1,5 @@
+<%+header%>
+<h3><%=heading:pcdata()%></h3>
+<p><%=description:pcdata()%></p>
+<%+footer%>
+
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm b/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm
new file mode 100644
index 0000000000..c0a7d133dc
--- /dev/null
+++ b/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm
@@ -0,0 +1,8 @@
+<%+header%>
+<h3><%=heading:pcdata()%></h3>
+<p><%=description:pcdata()%></p>
+<div>
+<textarea style="width: 100%; height: 480px; font-family: monospace;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+</div>
+<%+footer%>
+
diff --git a/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound b/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound
index cc714ac53e..c2ac8c93b6 100644
--- a/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound
+++ b/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound
@@ -8,18 +8,5 @@ uci -q batch <<-EOF >/dev/null
EOF
rm -f /tmp/luci-indexcache
-[ ! -x /usr/sbin/unbound-control ] && exit 0
-
-uci -q batch <<-EOF >/dev/null
- set luci.unboundhosts=command
- set luci.unboundhosts.name='Unbound Local Hosts'
- set luci.unboundhosts.command='unbound-control -c /var/lib/unbound/unbound.conf list_local_data'
- set luci.unboundzones=command
- set luci.unboundzones.name='Unbound Local Zones'
- set luci.unboundzones.command='unbound-control -c /var/lib/unbound/unbound.conf list_local_zones'
- commit luci
-EOF
-
-rm -f /tmp/luci-indexcache
exit 0