diff options
Diffstat (limited to 'applications/luci-app-unbound')
11 files changed, 3048 insertions, 367 deletions
diff --git a/applications/luci-app-unbound/luasrc/controller/unbound.lua b/applications/luci-app-unbound/luasrc/controller/unbound.lua index 730ca724a4..32879cb9f2 100644 --- a/applications/luci-app-unbound/luasrc/controller/unbound.lua +++ b/applications/luci-app-unbound/luasrc/controller/unbound.lua @@ -1,151 +1,229 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> --- Copyright 2017 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Copyright 2017 Eric Luehrsen <ericluehrsen@gmail.com> -- Licensed to the public under the Apache License 2.0. module("luci.controller.unbound", package.seeall) function index() - local ucl = luci.model.uci.cursor() - local valexp = ucl:get_first("unbound", "unbound", "extended_luci") - local valman = ucl:get_first("unbound", "unbound", "manual_conf") + local fs = require "nixio.fs" + local ucl = luci.model.uci.cursor() + local valman = ucl:get_first("unbound", "unbound", "manual_conf") - if not nixio.fs.access("/etc/config/unbound") then - return - end + if not fs.access("/etc/config/unbound") then + return + end - if valexp == "1" then -- Expanded View - entry({"admin", "services", "unbound"}, firstchild(), _("Recursive DNS")).dependent = false + entry({"admin", "services", "unbound"}, + firstchild(), _("Recursive DNS")).dependent = false -- UCI Tab(s) - entry({"admin", "services", "unbound", "configure"}, cbi("unbound/configure"), _("Settings"), 10) + entry({"admin", "services", "unbound", "configure"}, + cbi("unbound/configure"), _("Unbound"), 10) + + + if (valman == "0") then + entry({"admin", "services", "unbound", "zones"}, + arcombine(cbi("unbound/zones"), cbi("unbound/zone-details")), + _("Zones"), 15).leaf = true + end + -- Status Tab(s) - entry({"admin", "services", "unbound", "status"}, firstchild(), _("Status"), 20) - entry({"admin", "services", "unbound", "status", "syslog"}, call("QuerySysLog"), _("Log"), 50).leaf = true + 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 + if 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 + + entry({"admin", "services", "unbound", "status", "dumpcache"}, + call("QueryDumpCache"), _("DNS Cache"), 40).leaf = true else - entry({"admin", "services", "unbound", "status", "statistics"}, call("ShowEmpty"), _("Statistics"), 10).leaf = true + 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) + entry({"admin", "services", "unbound", "files"}, + firstchild(), _("Files"), 30) + + + if (valman == "0") then + entry({"admin", "services", "unbound", "files", "uci"}, + form("unbound/uciedit"), _("Edit: UCI"), 5).leaf = true + entry({"admin", "services", "unbound", "files", "base"}, + call("ShowUnboundConf"), _("Show: Unbound"), 10).leaf = true - if valman ~= "1" then - entry({"admin", "services", "unbound", "files", "base"}, call("ShowUnboundConf"), _("UCI: Unbound"), 10).leaf = true else - entry({"admin", "services", "unbound", "files", "base"}, form("unbound/manual"), _("Edit: Unbound"), 10).leaf = true + entry({"admin", "services", "unbound", "files", "base"}, + form("unbound/manual"), _("Edit: Unbound"), 10).leaf = true end - entry({"admin", "services", "unbound", "files", "server"}, form("unbound/server"), _("Edit: Server"), 20).leaf = true - entry({"admin", "services", "unbound", "files", "extended"}, form("unbound/extended"), _("Edit: Extended"), 30).leaf = true + entry({"admin", "services", "unbound", "files", "server"}, + form("unbound/server"), _("Edit: Server"), 20).leaf = true + entry({"admin", "services", "unbound", "files", "extended"}, + form("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 + + if fs.access("/var/lib/unbound/dhcp.conf") then + entry({"admin", "services", "unbound", "files", "dhcp"}, + call("ShowDHCPConf"), _("Show: 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 + if fs.access("/var/lib/unbound/adb_list.overall") then + entry({"admin", "services", "unbound", "files", "adblock"}, + call("ShowAdblock"), _("Show: 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}) + 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}) + local lcldata = luci.util.exec("logread -e 'unbound'") + local lcldesc = luci.i18n.translate( + "This shows syslog filtered for events involving Unbound.") + + luci.template.render("unbound/show-textbox", + {heading = "", 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}) + local lcldata = luci.util.exec( + "unbound-control -c /var/lib/unbound/unbound.conf stats_noreset") + + local lcldesc = luci.i18n.translate( + "This shows Unbound self reported performance statistics.") + + luci.template.render("unbound/show-textbox", + {heading = "", 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}) + local lcldata = luci.util.exec( + "unbound-control -c /var/lib/unbound/unbound.conf list_local_data") + + local lcldesc = luci.i18n.translate( + "This shows Unbound 'local-data:' entries from default, .conf, or control.") + + luci.template.render("unbound/show-textbox", + {heading = "", 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}) + local lcldata = luci.util.exec( + "unbound-control -c /var/lib/unbound/unbound.conf list_local_zones") + + local lcldesc = luci.i18n.translate( + "This shows Unbound 'local-zone:' entries from default, .conf, or control.") + + luci.template.render("unbound/show-textbox", + {heading = "", description = lcldesc, content = lcldata}) +end + + +function QueryDumpCache() + local tp = require "luci.template" + local tr = require "luci.i18n" + local lcldesc + local lcldata = luci.util.exec( + "unbound-control -c /var/lib/unbound/unbound.conf dump_cache") + + + if #lcldata > 262144 then + lcldesc = tr.translate( + "Unbound cache is too large to display in LuCI.") + + tp.render("unbound/show-empty", + {heading = "", description = lcldesc}) + + else + lcldesc = tr.translate( + "This shows 'ubound-control dump_cache' for auditing records including DNSSEC.") + + tp.render("unbound/show-textbox", + {heading = "", description = lcldesc, content = lcldata}) + end + 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}) + local unboundfile = "/var/lib/unbound/unbound.conf" + local lcldata = nixio.fs.readfile(unboundfile) + local lcldesc = luci.i18n.translate( + "This shows '" .. unboundfile .. "' generated from UCI configuration.") + + luci.template.render("unbound/show-textbox", + {heading = "", 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}) + local dhcpfile = "/var/lib/unbound/dhcp.conf" + local lcldata = nixio.fs.readfile(dhcpfile) + local lcldesc = luci.i18n.translate( + "This shows '" .. dhcpfile .. "' list of hosts from DHCP hook scripts.") + + luci.template.render("unbound/show-textbox", + {heading = "", description = lcldesc, content = lcldata}) end function ShowAdblock() - local adblockfile = "/var/lib/unbound/adb_list.overall" - local lclhead = "Adblock Conf" - local lcldata, lcldesc - - - 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}) - - 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 + local fs = require "nixio.fs" + local tp = require "luci.template" + local tr = require "luci.i18n" + local adblockfile = "/var/lib/unbound/adb_list.overall" + local lcldata, lcldesc + + + if fs.stat(adblockfile).size > 262144 then + lcldesc = tr.translate( + "Adblock domain list is too large to display in LuCI.") + + tp.render("unbound/show-empty", + {heading = "", description = lcldesc}) + + else + lcldata = fs.readfile(adblockfile) + lcldesc = tr.translate( + "This shows '" .. adblockfile .. "' list of adblock domains." ) + + tp.render("unbound/show-textbox", + {heading = "", description = lcldesc, content = lcldata}) + end end diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua index 256bbb8392..60d0477d53 100644 --- a/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua @@ -1,5 +1,5 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> --- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Copyright 2016 Eric Luehrsen <ericluehrsen@gmail.com> -- Copyright 2016 Dan Luedtke <mail@danrl.com> -- Licensed to the public under the Apache License 2.0. @@ -9,307 +9,320 @@ local rlh, rpv, vld, nvd, eds, prt, tlm local ctl, dlk, dom, dty, lfq, wfq, exa local dp6, d64, pfx, qry, qrs local pro, tgr, rsc, rsn, ag2, stt -local rpn, din, dfw, ath +local rpn, din, ath + +local ut = require "luci.util" +local sy = require "luci.sys" +local ht = require "luci.http" +local ds = require "luci.dispatcher" local ucl = luci.model.uci.cursor() local valman = ucl:get_first("unbound", "unbound", "manual_conf") m1 = Map("unbound") +s1 = m1:section(TypedSection, "unbound", translate("Recursive DNS"), + translatef("Unbound <a href=\"%s\" target=\"_blank\">(NLnet Labs)</a>" + .. " is a validating, recursive, and caching DNS resolver" + .. " <a href=\"%s\" target=\"_blank\">(help)</a>.", + "https://www.unbound.net/", + "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md")) -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 (link)</a>" - .. " is a validating, recursive, and caching DNS resolver. " - .. "UCI documentation can be found on " - .. "<a href=\"%s\" target=\"_blank\">github (link)</a>.", - "https://www.unbound.net/", - "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md")) - - -if valman ~= "1" then - -- Not in manual configuration mode; show UCI - s1:tab("advanced", translate("Advanced"), - translatef("<h3>Unbound Advanced Settings</h3>\n" - .. "Domain manipulation, lookup protection, and workarounds for " - .. "<a href=\"%s\" target=\"_blank\">Unbound </a>" - .. " DNS resolver.", "https://www.unbound.net/")) - - s1:tab("DHCP", translate("DHCP"), - translatef("<h3>Unbound DHCP Settings</h3>\n" - .. "Link your DHCP server to " - .. "<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/")) -end +s1:tab("basic", translate("Basic")) -s1:tab("trigger", translate("Trigger"), - translatef("<h3>Unbound Event Trigger Settings</h3>\n" - .. "Start, reload, and save RFC5011 DNSKEY records for " - .. "<a href=\"%s\" target=\"_blank\">Unbound </a>" - .. " DNS resolver.", "https://www.unbound.net/")) +if (valman == "0") then + -- Not in manual configuration mode; show UCI + s1:tab("advanced", translate("Advanced")) + s1:tab("DHCP", translate("DHCP")) + s1:tab("resource", translate("Resource")) +end --Basic Tab, unconditional pieces -ena = s1:taboption("basic", Flag, "enabled", translate("Enable Unbound:"), - translate("Enable the initialization scripts for Unbound")) +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 = 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("Extended Tabs:"), - translate("See detailed tabs for statistics, debug, and manual configuration")) -lci.rmempty = false - - -if valman ~= "1" then - -- Not in manual configuration mode; show UCI - --Basic Tab - lsv = s1:taboption("basic", Flag, "localservice", translate("Local Service:"), - translate("Accept queries only from local subnets")) - lsv.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 }) - - d64 = s1:taboption("basic", Flag, "dns64", translate("Enable DNS64:"), - translate("Enable the DNS64 module")) - d64.rmempty = false - - pfx = s1:taboption("basic", 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 }) - - prt = s1:taboption("basic", Value, "listen_port", translate("Listening Port:"), - translate("Choose Unbounds listening port")) - prt.datatype = "port" - prt.rmempty = false - - --Avanced Tab - din = s1:taboption("advanced", DynamicList, "domain_insecure", - translate("Domain Insecure:"), - translate("List domains to bypass checks of DNSSEC")) - din:depends({ validator = true }) - - dfw = s1:taboption("advanced", DynamicList, "domain_forward", - translate("Domain Forward:"), - translate("List domains to simply forward to stub resolvers in /tmp/resolve.auto")) - - rlh = s1:taboption("advanced", Flag, "rebind_localhost", translate("Filter Localhost Rebind:"), - translate("Protect against upstream response of 127.0.0.0/8")) - rlh.rmempty = false - - rpv = s1:taboption("advanced", ListValue, "rebind_protection", translate("Filter Private Rebind:"), - translate("Protect against upstream responses within local subnets")) - rpv:value("0", translate("No Filter")) - rpv:value("1", translate("Filter RFC1918/4193")) - rpv:value("2", translate("Filter Entire Subnet")) - rpv.rmempty = false - - rpn = s1:taboption("advanced", Value, "rebind_interface", translate("Rebind Network Filter:"), - translate("Network subnets to filter from upstream responses")) - rpn.template = "cbi/network_netlist" - rpn.widget = "checkbox" - rpn.rmempty = true - rpn.cast = "string" - rpn.nocreate = true - rpn:depends({ rebind_protection = 2 }) - rpn:depends({ rebind_protection = 3 }) - - --DHCP Tab - dlk = s1:taboption("DHCP", 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 - - dp6 = s1:taboption("DHCP", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"), - translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)")) - dp6.rmempty = false - dp6:depends({ dhcp_link = "odhcpd" }) - - dom = s1:taboption("DHCP", 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("DHCP", 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("DHCP", ListValue, "add_local_fqdn", translate("LAN DNS:"), - translate("How to enter the LAN or local network router in DNS")) - lfq:value("0", translate("No Entry")) - 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("DHCP", ListValue, "add_wan_fqdn", translate("WAN DNS:"), - translate("Override the WAN side router entry in DNS")) - wfq:value("0", translate("Use 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("DHCP", 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" }) - - --TODO: dnsmasq needs to not reference resolve-file and get off port 53. - - --Resource Tuning Tab - ctl = s1:taboption("resource", 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")) - - pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"), - translate("Chose the protocol recursion queries leave on")) - pro:value("default", translate("Default")) - pro:value("ip4_only", translate("IP4 Only")) - pro:value("ip6_only", translate("IP6 Only")) - pro:value("ip6_prefer", translate("IP6 Preferred")) - pro:value("mixed", translate("IP4 and IP6")) - pro.rmempty = false - - rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"), - translate("Use menu System/Processes to observe any memory growth")) - rsc:value("default", translate("Default")) - rsc:value("tiny", translate("Tiny")) - rsc:value("small", translate("Small")) - rsc:value("medium", translate("Medium")) - rsc:value("large", translate("Large")) - rsc.rmempty = false - - rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"), - translate("Recursion activity affects memory growth and CPU load")) - rsn:value("default", translate("Default")) - rsn:value("passive", translate("Passive")) - rsn:value("aggressive", translate("Aggressive")) - rsn.rmempty = false - - qry = s1:taboption("resource", Flag, "query_minimize", translate("Query Minimize:"), - translate("Break down query components for limited added privacy")) - qry.rmempty = false - qry:depends({ recursion = "passive" }) - qry:depends({ recursion = "aggressive" }) - - qrs = s1:taboption("resource", 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 }) - - ath = s1:taboption("resource", Flag, "prefetch_root", translate("Prefetch Root:"), - translate("Obtain complete root zone files and install in auth-zone: clause")) - ath.rmempty = false - - eds = s1:taboption("resource", Value, "edns_size", translate("EDNS Size:"), - translate("Limit extended DNS packet size")) - eds.datatype = "and(uinteger,min(512),max(4096))" - eds.rmempty = false - - tlm = s1:taboption("resource", Value, "ttl_min", translate("TTL Minimum:"), - translate("Prevent excessively short cache periods")) - tlm.datatype = "and(uinteger,min(0),max(600))" - tlm.rmempty = false - - stt = s1:taboption("resource", Flag, "extended_stats", translate("Extended Statistics:"), - translate("Extended statistics are printed from unbound-control")) - stt.rmempty = false -end - - ---Trigger Tab, always unconditional -ag2 = s1:taboption("trigger", Value, "root_age", translate("Root DSKEY Age:"), - translate("Limit days between RFC5011 copies 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("trigger", Value, "trigger_interface", translate("Trigger Networks:"), - translate("Networks that may trigger Unbound to reload (avoid wan6)")) -tgr.template = "cbi/network_netlist" -tgr.widget = "checkbox" -tgr.rmempty = true -tgr.cast = "string" -tgr.nocreate = true +if (valman == "0") then + -- Not in manual configuration mode; show UCI + --Basic Tab + lsv = s1:taboption("basic", Flag, "localservice", + translate("Local Service"), + translate("Accept queries only from local subnets")) + lsv.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.optional = true + nvd:depends("validator", true) + + prt = s1:taboption("basic", Value, "listen_port", + translate("Listening Port"), + translate("Choose Unbounds listening port")) + prt.datatype = "port" + prt.placeholder = "53" + + --Avanced Tab + rlh = s1:taboption("advanced", Flag, "rebind_localhost", + translate("Filter Localhost Rebind"), + translate("Protect against upstream response of 127.0.0.0/8")) + rlh.rmempty = false + + rpv = s1:taboption("advanced", ListValue, "rebind_protection", + translate("Filter Private Rebind"), + translate("Protect against upstream responses within local subnets")) + rpv:value("0", translate("No Filter")) + rpv:value("1", translate("Filter Private Address")) + rpv:value("2", translate("Filter Entire Subnet")) + rpv.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) + + din = s1:taboption("advanced", DynamicList, "domain_insecure", + translate("Domain Insecure"), + translate("List domains to bypass checks of DNSSEC")) + din:depends("validator", true) + + ag2 = s1:taboption("advanced", Value, "root_age", + translate("Root DSKEY Age"), + translate("Limit days between RFC5011 copies 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("advanced", Value, "trigger_interface", + translate("Trigger Networks"), + translate("Networks that may trigger Unbound to reload (avoid wan6)")) + tgr.template = "cbi/network_netlist" + tgr.widget = "checkbox" + tgr.rmempty = true + tgr.cast = "string" + tgr.nocreate = true + + --DHCP Tab + dlk = s1:taboption("DHCP", 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 + + dp6 = s1:taboption("DHCP", Flag, "dhcp4_slaac6", + translate("DHCPv4 to SLAAC"), + translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)")) + dp6.optional = true + dp6:depends("dhcp_link", "odhcpd") + + dom = s1:taboption("DHCP", Value, "domain", + translate("Local Domain"), + translate("Domain suffix for this router and DHCP clients")) + dom.placeholder = "lan" + dom.optional = true + dom:depends("dhcp_link", "none") + dom:depends("dhcp_link", "odhcpd") + + dty = s1:taboption("DHCP", ListValue, "domain_type", + translate("Local Domain Type"), + translate("How to treat queries of this local domain")) + dty.optional = true + dty:value("deny", translate("Denied (nxdomain)")) + dty:value("refuse", translate("Refused")) + dty:value("static", translate("Static (local only)")) + dty:value("transparent", translate("Transparent (local/global)")) + dty:depends("dhcp_link", "none") + dty:depends("dhcp_link", "odhcpd") + + lfq = s1:taboption("DHCP", ListValue, "add_local_fqdn", + translate("LAN DNS"), + translate("How to enter the LAN or local network router in DNS")) + lfq.optional = true + lfq:value("0", translate("No Entry")) + 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("DHCP", ListValue, "add_wan_fqdn", + translate("WAN DNS"), + translate("Override the WAN side router entry in DNS")) + wfq.optional = true + wfq:value("0", translate("Use 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("DHCP", ListValue, "add_extra_dns", + translate("Extra DNS"), + translate("Use extra DNS entries found in /etc/config/dhcp")) + exa.optional = true + exa:value("0", translate("Ignore")) + exa:value("1", translate("Host Records")) + exa:value("2", translate("Host/MX/SRV RR")) + exa:value("3", translate("Host/MX/SRV/CNAME RR")) + exa:depends("dhcp_link", "none") + exa:depends("dhcp_link", "odhcpd") + + --TODO: dnsmasq needs to not reference resolve-file and get off port 53. + + --Resource Tuning Tab + ctl = s1:taboption("resource", 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")) + + pro = s1:taboption("resource", ListValue, "protocol", + translate("Recursion Protocol"), + translate("Chose the IP versions used upstream and downstream")) + pro:value("default", translate("Default")) + pro:value("ip4_only", translate("IP4 Only")) + pro:value("ip6_local", translate("IP4 All and IP6 Local")) + pro:value("ip6_only", translate("IP6 Only*")) + pro:value("ip6_prefer", translate("IP6 Preferred")) + pro:value("mixed", translate("IP4 and IP6")) + pro.rmempty = false + + rsc = s1:taboption("resource", ListValue, "resource", + translate("Memory Resource"), + translate("Use menu System/Processes to observe any memory growth")) + rsc:value("default", translate("Default")) + rsc:value("tiny", translate("Tiny")) + rsc:value("small", translate("Small")) + rsc:value("medium", translate("Medium")) + rsc:value("large", translate("Large")) + rsc.rmempty = false + + rsn = s1:taboption("resource", ListValue, "recursion", + translate("Recursion Strength"), + translate("Recursion activity affects memory growth and CPU load")) + rsn:value("default", translate("Default")) + rsn:value("passive", translate("Passive")) + rsn:value("aggressive", translate("Aggressive")) + rsn.rmempty = false + + qry = s1:taboption("resource", Flag, "query_minimize", + translate("Query Minimize"), + translate("Break down query components for limited added privacy")) + qry.optional = true + qry:depends("recursion", "passive") + qry:depends("recursion", "aggressive") + + qrs = s1:taboption("resource", Flag, "query_min_strict", + translate("Strict Minimize"), + translate("Strict version of 'query minimize' but it can break DNS")) + qrs.optional = true + qrs:depends("query_minimize", true) + + eds = s1:taboption("resource", Value, "edns_size", + translate("EDNS Size"), + translate("Limit extended DNS packet size")) + eds.datatype = "and(uinteger,min(512),max(4096))" + eds.placeholder = "1280" + + tlm = s1:taboption("resource", Value, "ttl_min", + translate("TTL Minimum"), + translate("Prevent excessively short cache periods")) + tlm.datatype = "and(uinteger,min(0),max(1200))" + tlm.placeholder = "120" + + stt = s1:taboption("resource", Flag, "extended_stats", + translate("Extended Statistics"), + translate("Extended statistics are printed from unbound-control")) + stt.rmempty = false + +else + ag2 = s1:taboption("basic", Value, "root_age", + translate("Root DSKEY Age"), + translate("Limit days between RFC5011 copies 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("basic", Value, "trigger_interface", + translate("Trigger Networks"), + translate("Networks that may trigger Unbound to reload (avoid wan6)")) + tgr.template = "cbi/network_netlist" + tgr.widget = "checkbox" + tgr.rmempty = true + tgr.cast = "string" + tgr.nocreate = true +end function ena.cfgvalue(self, section) - return luci.sys.init.enabled("unbound") and self.enabled or self.disabled + return sy.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) + if (value == "1") then + sy.init.enable("unbound") + sy.call("/etc/init.d/unbound start >/dev/null 2>&1") + + else + sy.call("/etc/init.d/unbound stop >/dev/null 2>&1") + sy.init.disable("unbound") + end + + + return Flag.write(self, section, value) end -function m1.on_apply(self) - function ena.validate(self, value) - if value ~= "0" then - luci.sys.call("/etc/init.d/unbound restart >/dev/null 2>&1") +function m1.on_commit(self) + if sy.init.enabled("unbound") then + -- Restart Unbound with configuration + sy.call("/etc/init.d/unbound restart >/dev/null 2>&1") + else - luci.sys.call("/etc/init.d/unbound stop >/dev/null 2>&1") + sy.call("/etc/init.d/unbound stop >/dev/null 2>&1") end - end +end - -- Restart Unbound with configuration and reload the page (some options hide) - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "unbound")) +function m1.on_apply(self) + -- reload the page because some options hide + ht.redirect(ds.build_url("admin", "services", "unbound", "configure")) end diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua index 67d2ec6c6b..6c5e8c23ef 100644 --- a/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua @@ -1,28 +1,31 @@ --- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Copyright 2016 Eric Luehrsen <ericluehrsen@gmail.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 .. ")" +local fs = require "nixio.fs" +local ut = require "luci.util" 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) +s4 = m4:section(SimpleSection, "", + translatef( + "Edit clauses such as 'forward-zone:' for 'include: " .. filename .. "'")) + frm = s4:option(TextValue, "data") frm.datatype = "string" frm.rows = 20 function frm.cfgvalue() - return nixio.fs.readfile(filename) or "" + return fs.readfile(filename) or "" end function frm.write(self, section, data) - return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n"))) + return fs.writefile(filename, ut.trim(data:gsub("\r\n", "\n"))) end diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua index 5cfb9c32c1..317c23fda0 100644 --- a/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua @@ -1,28 +1,31 @@ --- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Copyright 2016 Eric Luehrsen <ericluehrsen@gmail.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 .. ")" +local fs = require "nixio.fs" +local ut = require "luci.util" m2 = SimpleForm("editing", nil) m2:append(Template("unbound/css-editing")) m2.submit = translate("Save") m2.reset = false -s2 = m2:section(SimpleSection, "Unbound Conf", description) +s2 = m2:section(SimpleSection, "", + translatef( + "Edit '" .. filename .. "' when you do not use UCI.")) + frm = s2:option(TextValue, "data") frm.datatype = "string" frm.rows = 20 function frm.cfgvalue() - return nixio.fs.readfile(filename) or "" + return fs.readfile(filename) or "" end function frm.write(self, section, data) - return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n"))) + return fs.writefile(filename, ut.trim(data:gsub("\r\n", "\n"))) end diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua index d0ac407847..5cef2a67b0 100644 --- a/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua @@ -1,28 +1,31 @@ --- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Copyright 2016 Eric Luehrsen <ericluehrsen@gmail.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 .. ")" +local fs = require "nixio.fs" +local ut = require "luci.util" 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) +s3 = m3:section(SimpleSection, "", + translatef( + "Edit 'server:' clause options for 'include: " .. filename .. "'")) + frm = s3:option(TextValue, "data") frm.datatype = "string" frm.rows = 20 function frm.cfgvalue() - return nixio.fs.readfile(filename) or "" + return fs.readfile(filename) or "" end function frm.write(self, section, data) - return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n"))) + return fs.writefile(filename, ut.trim(data:gsub("\r\n", "\n"))) end diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/uciedit.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/uciedit.lua new file mode 100644 index 0000000000..f1e1d842a1 --- /dev/null +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/uciedit.lua @@ -0,0 +1,37 @@ +-- Copyright 2016 Eric Luehrsen <ericluehrsen@gmail.com> +-- Licensed to the public under the Apache License 2.0. + +local m6, s6, frm +local filename = "/etc/config/unbound" +local fs = require "nixio.fs" +local ut = require "luci.util" + +m6 = SimpleForm("editing", nil) +m6:append(Template("unbound/css-editing")) +m6.submit = translate("Save") +m6.reset = false +s6 = m6:section(SimpleSection, "", + translatef("Edit '" .. filename .. "' " + .. "and recipes can be found in OpenWrt " + .. "<a href=\"%s\" target=\"_blank\">Guides</a> " + .. "and <a href=\"%s\" target=\"_blank\">Github</a>.", + "https://openwrt.org/docs/guide-user/services/dns/unbound", + "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md")) + +frm = s6:option(TextValue, "data") +frm.datatype = "string" +frm.rows = 20 + + +function frm.cfgvalue() + return fs.readfile(filename) or "" +end + + +function frm.write(self, section, data) + return fs.writefile(filename, ut.trim(data:gsub("\r\n", "\n"))) +end + + +return m6 + diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua new file mode 100644 index 0000000000..dcaa877fd0 --- /dev/null +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua @@ -0,0 +1,95 @@ +-- Copyright 2018 Eric Luehrsen <ericluehrsen@gmail.com> +-- Licensed to the public under the Apache License 2.0. + +local sy = require "luci.sys" +local ds = require "luci.dispatcher" +local hp = require "luci.http" +local m7, s7 +local ena, flb, zty, znm, srv, rlv, tlu +local prt, tlp, tli, url + +arg[1] = arg[1] or "" +m7 = Map("unbound") +m7.redirect = ds.build_url("admin/services/unbound/zones") + + +if (arg[1] == "") then + hp.redirect(m7.redirect) + return + +else + s7 = m7:section(NamedSection, arg[1], "zone", + translatef("Directed Zone"), + translatef("Edit a forward, stub, or zone-file-cache zone " + .. "for Unbound to use instead of recursion.")) + + s7.anonymous = true + s7.addremove = false + + ena = s7:option(Flag, "enabled", translate("Enabled"), + translate("Enable this directed zone")) + ena.rmempty = false + + flb = s7:option(Flag, "fallback", translate("Fall Back"), + translate("Allow open recursion when record not in zone")) + flb.rmempty = false + + zty = s7:option(ListValue, "zone_type", translate("Zone Type")) + zty:value("auth_zone", translate("Authoritative (zone file)")) + zty:value("stub_zone", translate("Stub (forced recursion)")) + zty:value("forward_zone", translate("Forward (simple handoff)")) + zty.rmempty = false + + znm = s7:option(DynamicList, "zone_name", translate("Zone Names"), + translate("Zone (Domain) names included in this zone combination")) + znm.placeholder="new.example.net." + + srv = s7:option(DynamicList, "server", translate("Servers"), + translate("Servers for this zone; see README.md for optional form")) + srv.placeholder="192.0.2.53" + + rlv = s7:option(Flag, "resolv_conf", translate("Use 'resolv.conf.auto'"), + translate("Forward to upstream nameservers (ISP)")) + rlv:depends("zone_type", "forward_zone") + + tlu = s7:option(Flag, "tls_upstream", translate("DNS over TLS"), + translate("Connect to servers using TLS")) + tlu:depends("zone_type", "forward_zone") + + prt = s7:option(Value, "port", translate("Server Port"), + translate("Port servers will receive queries on")) + prt:depends("tls_upstream", false) + prt.datatype = "port" + prt.placeholder="53" + + tlp = s7:option(Value, "tls_port", translate("Server TLS Port"), + translate("Port servers will receive queries on")) + tlp:depends("tls_upstream", true) + tlp.datatype = "port" + tlp.placeholder="853" + + tli = s7:option(Value, "tls_index", translate("TLS Name Index"), + translate("Domain name to verify TLS certificate")) + tli:depends("tls_upstream", true) + tli.placeholder="dns.example.net" + + url = s7:option(Value, "url_dir", translate("Zone Download URL"), + translate("Directory only part of URL")) + url:depends("zone_type", "auth_zone") + url.placeholder="https://www.example.net/dl/zones/" +end + + +function m7.on_commit(self) + if sy.init.enabled("unbound") then + -- Restart Unbound with configuration + sy.call("/etc/init.d/unbound restart >/dev/null 2>&1") + + else + sy.call("/etc/init.d/unbound stop >/dev/null 2>&1") + end +end + + +return m7 + diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua new file mode 100644 index 0000000000..3a13c23df9 --- /dev/null +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua @@ -0,0 +1,232 @@ +-- Copyright 2018 Eric Luehrsen <ericluehrsen@gmail.com> +-- Licensed to the public under the Apache License 2.0. + +local m5, s5 +local ztype, zones, servers, fallback, enabled + +local fs = require "nixio.fs" +local ut = require "luci.util" +local sy = require "luci.sys" +local ds = require "luci.dispatcher" +local resolvfile = "/tmp/resolv.conf.auto" +local logerr = ut.exec("logread -e 'unbound.*error.*ssl library'") + +m5 = Map("unbound") +s5 = m5:section(TypedSection, "zone", "Zones", + translatef("Organize directed forward, stub, and authoritative zones" + .. " <a href=\"%s\" target=\"_blank\">(help)</a>.", + "https://www.unbound.net/", + "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md")) + +s5.addremove = true +s5.anonymous = true +s5.sortable = true +s5.template = "cbi/tblsection" +s5.extedit = ds.build_url("admin/services/unbound/zones/%s") + +ztype = s5:option(DummyValue, "DummyType", translate("Type")) +ztype.rawhtml = true + +zones = s5:option(DummyValue, "DummyZones", translate("Zones")) +zones.rawhtml = true + +servers = s5:option(DummyValue, "DummyServers", translate("Servers")) +servers.rawhtml = true + +fallback = s5:option(Flag, "fallback", translate("Fallback")) +fallback.rmempty = false + +enabled = s5:option(Flag, "enabled", translate("Enable")) +enabled.rmempty = false + + +if logerr and (#logerr > 0) then + logerr = logerr:sub((1 + #logerr - math.min(#logerr, 250)), #logerr) + m5.message = translatef( "Note: SSL/TLS library is missing an API. " + .. "Please review syslog. >> logread ... " .. logerr ) +end + + +function s5.create(self, section) + created = TypedSection.create(self, section) +end + + +function s5.parse(self, ...) + TypedSection.parse(self, ...) +end + + +function ztype.cfgvalue(self, s) + -- Format a meaningful tile for the Zone Type column + local itxt = self.map:get(s, "zone_type") + local itls = self.map:get(s, "tls_upstream") + + + if itxt and itxt:match("forward") then + if itls and (itls == "1") then + return translate("Forward TLS") + + else + return translate("Forward") + end + + elseif itxt and itxt:match("stub") then + return translate("Recurse") + + elseif itxt and itxt:match("auth") then + return translate("AXFR") + + else + return translate("Undefined") + end +end + + +function zones.cfgvalue(self, s) + -- Format a meaningful sentence for the Zones viewed column + local xtxt, otxt + local itxt = self.map:get(s, "zone_name") + local itype = self.map:get(s, "zone_type") + + + for xtxt in ut.imatch(itxt) do + if (xtxt == ".") then + -- zone_name lists + xtxt = translate("(root)") + end + + + if otxt and (#otxt > 0) then + otxt = otxt .. ", <var>%s</var>" % xtxt + + else + otxt = "<var>%s</var>" % xtxt + end + end + + + if otxt and (#otxt > 0) then + if itype and itype:match("forward") then + -- from zone_type create a readable hint for the action + otxt = translate("accept upstream results for ") .. otxt + + elseif itype and itype:match("stub") then + otxt = translate("select recursion for ") .. otxt + + elseif itype and itype:match("auth") then + otxt = translate("prefetch zone files for ") .. otxt + + else + otxt = translate("unknown action for ") .. otxt + end + + + return otxt + + else + return "(empty)" + end +end + + +function servers.cfgvalue(self, s) + -- Format a meaningful sentence for the Servers (and URL) column + local xtxt, otxt, rtxt, found + local itxt = self.map:get(s, "server") + local iurl = self.map:get(s, "url_dir") + local itype = self.map:get(s, "zone_type") + local itls = self.map:get(s, "tls_upstream") + local iidx = self.map:get(s, "tls_index") + local irslv = self.map:get(s, "resolv_conf") + + + for xtxt in ut.imatch(itxt) do + if otxt and (#otxt > 0) then + -- bundle and make pretty the server list + otxt = otxt .. ", <var>%s</var>" % xtxt + + else + otxt = "<var>%s</var>" % xtxt + end + end + + + if otxt and (#otxt > 0) then + otxt = translate("use nameservers ") .. otxt + end + + + if otxt and (#otxt > 0) + and itls and (itls == "1") + and iidx and (#iidx > 0) then + -- show TLS certificate name index if provided + otxt = otxt .. translatef( + " with default certificate for <var>%s</var>", iidx) + end + + + if iurl and (#iurl > 0) and itype and itype:match("auth") then + if otxt and (#otxt > 0) then + -- include optional URL filed for auth-zone: type + otxt = otxt .. translatef(", and try <var>%s</var>", iurl) + + else + otxt = translatef("download from <var>%s</var>", iurl) + end + end + + + if irslv and (irslv == "1") and itype and itype:match("forward") then + for xtxt in ut.imatch(fs.readfile(resolvfile)) do + if xtxt:match("nameserver") then + found = true + + elseif (found == true) then + if rtxt and (#rtxt > 0) then + -- fetch name servers from resolv.conf + rtxt = rtxt .. ", <var>%s</var>" % xtxt + + else + rtxt = "<var>%s</var>" % xtxt + end + + + found = false + end + end + + + if otxt and (#otxt > 0) and rtxt and (#rtxt > 0) then + otxt = otxt .. translatef( + ", and <var>%s</var> entries ", resolvfile) .. rtxt + + elseif rtxt and (#rtxt > 0) then + otxt = translatef( + "use <var>%s</var> nameservers ", resolvfile) .. rtxt + end + end + + + if otxt and (#otxt > 0) then + return otxt + + else + return "(empty)" + end +end + + +function m5.on_commit(self) + if sy.init.enabled("unbound") then + -- Restart Unbound with configuration + sy.call("/etc/init.d/unbound restart >/dev/null 2>&1") + + else + sy.call("/etc/init.d/unbound stop >/dev/null 2>&1") + end +end + + +return m5 + diff --git a/applications/luci-app-unbound/po/templates/unbound.pot b/applications/luci-app-unbound/po/templates/unbound.pot new file mode 100644 index 0000000000..661ecc6996 --- /dev/null +++ b/applications/luci-app-unbound/po/templates/unbound.pot @@ -0,0 +1,737 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:96 +msgid "(root)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:201 +msgid ", and <var>%s</var> entries" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:172 +msgid ", and try <var>%s</var>" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:78 +msgid "AXFR" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:59 +msgid "Accept queries only from local subnets" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:198 +msgid "Adblock domain list '" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:38 +msgid "Advanced" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:237 +msgid "Aggressive" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:34 +msgid "Allow open recursion when record not in zone" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:38 +msgid "Authoritative (zone file)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:33 +msgid "Basic" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:242 +msgid "Break down query components for limited added privacy" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:69 +msgid "Break the loop where DNSSEC needs NTP and NTP needs DNS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:56 +msgid "Cache Dump" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:75 +msgid "Choose Unbounds listening port" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:213 +msgid "Chose the IP versions used upstream and downstream" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:56 +msgid "Connect to servers using TLS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:39 +msgid "DHCP" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:131 +msgid "DHCP Link" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:139 +msgid "DHCPv4 to SLAAC" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:55 +msgid "DNS over TLS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:98 +msgid "DNS64 Prefix" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:68 +msgid "DNSSEC NTP Fix" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:214 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:225 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:235 +msgid "Default" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:156 +msgid "Denied (nxdomain)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:22 +msgid "Directed Zone" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:77 +msgid "Directory only part of URL" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:106 +msgid "Domain Insecure" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:72 +msgid "Domain name to verify TLS certificate" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:146 +msgid "Domain suffix for this router and DHCP clients" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:254 +msgid "EDNS Size" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua:14 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/uciedit.lua:14 +msgid "Edit '" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua:14 +msgid "Edit 'server:' clause options for 'include:" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:23 +msgid "" +"Edit a forward, stub, or zone-file-cache zone for Unbound to use instead of " +"recursion." +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua:14 +msgid "Edit clauses such as 'forward-zone:' for 'include:" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:85 +msgid "Edit: Extended" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:82 +msgid "Edit: Server" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:70 +msgid "Edit: UCI" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:77 +msgid "Edit: Unbound" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:39 +msgid "Enable" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:93 +msgid "Enable DNS64" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:63 +msgid "Enable DNSSEC" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:45 +msgid "Enable Unbound" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:203 +msgid "Enable access for unbound-control" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:94 +msgid "Enable the DNS64 module" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:64 +msgid "Enable the DNSSEC validator module" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:46 +msgid "Enable the initialization scripts for Unbound" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:30 +msgid "Enable this directed zone" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:29 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:266 +msgid "Extended Statistics" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:267 +msgid "Extended statistics are printed from unbound-control" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:188 +msgid "Extra DNS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:33 +msgid "Fall Back" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:36 +msgid "Fallback" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:65 +msgid "Files" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:90 +msgid "Filter Entire Subnet" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:81 +msgid "Filter Localhost Rebind" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:89 +msgid "Filter Private Address" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:86 +msgid "Filter Private Rebind" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:71 +msgid "Forward" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:40 +msgid "Forward (simple handoff)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:68 +msgid "Forward TLS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:52 +msgid "Forward to upstream nameservers (ISP)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:170 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:182 +msgid "Host FQDN, All Addresses" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:192 +msgid "Host Records" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:193 +msgid "Host/MX/SRV RR" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:194 +msgid "Host/MX/SRV/CNAME RR" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:169 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:181 +msgid "Hostname, All Addresses" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:168 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:180 +msgid "Hostname, Primary Address" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:165 +msgid "How to enter the LAN or local network router in DNS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:154 +msgid "How to treat queries of this local domain" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:216 +msgid "IP4 All and IP6 Local" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:215 +msgid "IP4 Only" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:219 +msgid "IP4 and IP6" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:217 +msgid "IP6 Only*" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:218 +msgid "IP6 Preferred" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:191 +msgid "Ignore" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:171 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:183 +msgid "Interface FQDN, All Addresses" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:164 +msgid "LAN DNS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:229 +msgid "Large" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:112 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:273 +msgid "Limit days between RFC5011 copies to reduce flash writes" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:255 +msgid "Limit extended DNS packet size" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:132 +msgid "Link to supported programs to load DHCP into DNS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:107 +msgid "List domains to bypass checks of DNSSEC" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:74 +msgid "Listening Port" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:50 +msgid "Local Data" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:145 +msgid "Local Domain" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:153 +msgid "Local Domain Type" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:207 +msgid "Local Host, Encrypted" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:206 +msgid "Local Host, No Encryption" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:58 +msgid "Local Service" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:208 +msgid "Local Subnet, Encrypted" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:209 +msgid "Local Subnet, Static Encryption" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:53 +msgid "Local Zones" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:41 +msgid "Log" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:49 +msgid "Manual Conf" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:228 +msgid "Medium" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:223 +msgid "Memory Resource" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:122 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:283 +msgid "Networks that may trigger Unbound to reload (avoid wan6)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:167 +msgid "No Entry" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:88 +msgid "No Filter" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:133 +msgid "No Link" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:205 +msgid "No Remote Control" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:45 +msgid "" +"Note: SSL/TLS library is missing an API. Please review syslog. >> logread ..." +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:16 +msgid "" +"Organize directed forward, stub, and authoritative zones <a href=\"%s\" " +"target=\"_blank\">(help)</a>." +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:177 +msgid "Override the WAN side router entry in DNS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:236 +msgid "Passive" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:60 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:66 +msgid "Port servers will receive queries on" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:99 +msgid "Prefix for generated DNS64 addresses" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:261 +msgid "Prevent excessively short cache periods" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:82 +msgid "Protect against upstream response of 127.0.0.0/8" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:87 +msgid "Protect against upstream responses within local subnets" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:241 +msgid "Query Minimize" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:75 +msgid "Recurse" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:212 +msgid "Recursion Protocol" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:233 +msgid "Recursion Strength" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:234 +msgid "Recursion activity affects memory growth and CPU load" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:22 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:22 +msgid "Recursive DNS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:157 +msgid "Refused" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:40 +msgid "Resource" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:111 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:272 +msgid "Root DSKEY Age" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua:11 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua:11 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua:11 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/uciedit.lua:11 +msgid "Save" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:59 +msgid "Server Port" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:65 +msgid "Server TLS Port" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:47 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:33 +msgid "Servers" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:48 +msgid "Servers for this zone; see README.md for optional form" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:96 +msgid "Show: Adblock" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:90 +msgid "Show: DHCP" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:73 +msgid "Show: Unbound" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:50 +msgid "Skip UCI and use /etc/unbound/unbound.conf" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:227 +msgid "Small" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:158 +msgid "Static (local only)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:47 +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:59 +msgid "Statistics" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:38 +msgid "Status" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:248 +msgid "Strict Minimize" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:249 +msgid "Strict version of 'query minimize' but it can break DNS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:39 +msgid "Stub (forced recursion)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:71 +msgid "TLS Name Index" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:260 +msgid "TTL Minimum" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:103 +msgid "This could display more statistics with the unbound-control package." +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:170 +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:181 +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:206 +msgid "This shows '" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:160 +msgid "" +"This shows Unbound 'cache_dump'. Useful to check if unbound is actually " +"caching dns entities." +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:137 +msgid "" +"This shows Unbound 'local-data:' entries from default, .conf, or control." +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:149 +msgid "" +"This shows Unbound 'local-zone:' entries from default, .conf, or control." +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:125 +msgid "This shows Unbound self reported performance statistics." +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:113 +msgid "This shows syslog filtered for events involving Unbound." +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:226 +msgid "Tiny" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:159 +msgid "Transparent (local/global)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:121 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:282 +msgid "Trigger Networks" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:27 +msgid "Type" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:26 +msgid "Unbound" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:23 +msgid "" +"Unbound <a href=\"%s\" target=\"_blank\">(NLnet Labs)</a> is a validating, " +"recursive, and caching DNS resolver <a href=\"%s\" target=\"_blank\">(help)</" +"a>." +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:202 +msgid "Unbound Control App" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:81 +msgid "Undefined" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:51 +msgid "Use 'resolv.conf.auto'" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:140 +msgid "Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:179 +msgid "Use Upstream" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:189 +msgid "Use extra DNS entries found in /etc/config/dhcp" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:224 +msgid "Use menu System/Processes to observe any memory growth" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:176 +msgid "WAN DNS" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:44 +msgid "Zone (Domain) names included in this zone combination" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:76 +msgid "Zone Download URL" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:43 +msgid "Zone Names" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:37 +msgid "Zone Type" +msgstr "" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:32 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:30 +msgid "Zones" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:112 +msgid "accept upstream results for" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:115 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:276 +msgid "default" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:175 +msgid "download from <var>%s</var>" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:118 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:279 +msgid "never" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:118 +msgid "prefetch zone files for" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:115 +msgid "select recursion for" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:121 +msgid "unknown action for" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:205 +msgid "use <var>%s</var> nameservers" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:156 +msgid "use nameservers" +msgstr "" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:164 +msgid "with default certificate for <var>%s</var>" +msgstr "" diff --git a/applications/luci-app-unbound/po/zh-cn/unbound.po b/applications/luci-app-unbound/po/zh-cn/unbound.po new file mode 100644 index 0000000000..a87b74ca78 --- /dev/null +++ b/applications/luci-app-unbound/po/zh-cn/unbound.po @@ -0,0 +1,740 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:96 +msgid "(root)" +msgstr "(根)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:201 +msgid ", and <var>%s</var> entries" +msgstr ",及 <var>%s</var> 条目" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:172 +msgid ", and try <var>%s</var>" +msgstr ",并尝试 <var>%s</var> " + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:78 +msgid "AXFR" +msgstr "AXFR" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:59 +msgid "Accept queries only from local subnets" +msgstr "仅接受来自本地子网的查询" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:198 +msgid "Adblock domain list '" +msgstr "Adblock 域名列表'" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:38 +msgid "Advanced" +msgstr "高级" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:237 +msgid "Aggressive" +msgstr "激进" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:34 +msgid "Allow open recursion when record not in zone" +msgstr "记录不在区域中时允许递归查询" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:38 +msgid "Authoritative (zone file)" +msgstr "权威(区域文件)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:33 +msgid "Basic" +msgstr "基本" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:242 +msgid "Break down query components for limited added privacy" +msgstr "细分查询组件以增加有限的隐私" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:69 +msgid "Break the loop where DNSSEC needs NTP and NTP needs DNS" +msgstr "打破 DNSSEC 需要 NTP,NTP 又需要 DNS 的循环" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:56 +msgid "Cache Dump" +msgstr "缓存转储" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:75 +msgid "Choose Unbounds listening port" +msgstr "选择 Unbounds 监听端口" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:213 +msgid "Chose the IP versions used upstream and downstream" +msgstr "选择上游和下游使用的 IP 版本" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:56 +msgid "Connect to servers using TLS" +msgstr "使用 TLS 连接到服务器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:39 +msgid "DHCP" +msgstr "DHCP" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:131 +msgid "DHCP Link" +msgstr "DHCP 链接" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:139 +msgid "DHCPv4 to SLAAC" +msgstr "DHCPv4 到 SLAAC" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:55 +msgid "DNS over TLS" +msgstr "DNS over TLS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:98 +msgid "DNS64 Prefix" +msgstr "DNS64 前缀" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:68 +msgid "DNSSEC NTP Fix" +msgstr "DNSSEC NTP 修复" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:214 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:225 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:235 +msgid "Default" +msgstr "默认" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:156 +msgid "Denied (nxdomain)" +msgstr "否认(nxdomain)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:22 +msgid "Directed Zone" +msgstr "转移区域" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:77 +msgid "Directory only part of URL" +msgstr "目录只是 URL 的一部分" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:106 +msgid "Domain Insecure" +msgstr "域不安全" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:72 +msgid "Domain name to verify TLS certificate" +msgstr "用于验证 TLS 证书的域名" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:146 +msgid "Domain suffix for this router and DHCP clients" +msgstr "此路由器和 DHCP 客户端的域名后缀" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:254 +msgid "EDNS Size" +msgstr "EDNS 大小" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua:14 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/uciedit.lua:14 +msgid "Edit '" +msgstr "编辑'" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua:14 +msgid "Edit 'server:' clause options for 'include:" +msgstr "编辑“server:”子选项,位于'include:" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:23 +msgid "" +"Edit a forward, stub, or zone-file-cache zone for Unbound to use instead of " +"recursion." +msgstr "编辑 Unbound 使用的转发、存根或区域文件缓存区域,而不进行递归查询。" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua:14 +msgid "Edit clauses such as 'forward-zone:' for 'include:" +msgstr "编辑子选项,例如“forward-zone:”,位于'include:" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:85 +msgid "Edit: Extended" +msgstr "编辑:扩展" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:82 +msgid "Edit: Server" +msgstr "编辑:服务器" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:70 +msgid "Edit: UCI" +msgstr "编辑:UCI" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:77 +msgid "Edit: Unbound" +msgstr "编辑:Unbound" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:39 +msgid "Enable" +msgstr "启用" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:93 +msgid "Enable DNS64" +msgstr "启用 DNS64" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:63 +msgid "Enable DNSSEC" +msgstr "启用 DNSSEC" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:45 +msgid "Enable Unbound" +msgstr "启用 Unbound" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:203 +msgid "Enable access for unbound-control" +msgstr "启用 unbound-control 访问" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:94 +msgid "Enable the DNS64 module" +msgstr "启用 DNS64 模块" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:64 +msgid "Enable the DNSSEC validator module" +msgstr "启用 DNSSEC 验证模块" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:46 +msgid "Enable the initialization scripts for Unbound" +msgstr "启用 Unbound 的初始化脚本" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:30 +msgid "Enable this directed zone" +msgstr "启用此转移区域" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:29 +msgid "Enabled" +msgstr "启用" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:266 +msgid "Extended Statistics" +msgstr "扩展统计" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:267 +msgid "Extended statistics are printed from unbound-control" +msgstr "扩展统计信息从 unbound-control 打印" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:188 +msgid "Extra DNS" +msgstr "额外的 DNS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:33 +msgid "Fall Back" +msgstr "回退" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:36 +msgid "Fallback" +msgstr "回退" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:65 +msgid "Files" +msgstr "文件" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:90 +msgid "Filter Entire Subnet" +msgstr "过滤整个子网" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:81 +msgid "Filter Localhost Rebind" +msgstr "过滤本地主机重绑定" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:89 +msgid "Filter Private Address" +msgstr "过滤私有地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:86 +msgid "Filter Private Rebind" +msgstr "过滤私有地址重绑定" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:71 +msgid "Forward" +msgstr "转发" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:40 +msgid "Forward (simple handoff)" +msgstr "转发(简单切换)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:68 +msgid "Forward TLS" +msgstr "转发 TLS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:52 +msgid "Forward to upstream nameservers (ISP)" +msgstr "转发到上游名称服务器(ISP)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:170 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:182 +msgid "Host FQDN, All Addresses" +msgstr "主机 FQDN,所有地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:192 +msgid "Host Records" +msgstr "主机记录" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:193 +msgid "Host/MX/SRV RR" +msgstr "主机/MX/SRV RR" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:194 +msgid "Host/MX/SRV/CNAME RR" +msgstr "主机/MX/SRV/CNAME RR" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:169 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:181 +msgid "Hostname, All Addresses" +msgstr "主机名,所有地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:168 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:180 +msgid "Hostname, Primary Address" +msgstr "主机名,主要地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:165 +msgid "How to enter the LAN or local network router in DNS" +msgstr "如何在 DNS 中进入 LAN 或本地网络路由器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:154 +msgid "How to treat queries of this local domain" +msgstr "如何处理此本地域的查询" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:216 +msgid "IP4 All and IP6 Local" +msgstr "所有 IP4 及本地 IP6" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:215 +msgid "IP4 Only" +msgstr "仅 IP4" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:219 +msgid "IP4 and IP6" +msgstr "IP4 及 IP6" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:217 +msgid "IP6 Only*" +msgstr "仅 IP6*" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:218 +msgid "IP6 Preferred" +msgstr "首选 IP6" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:191 +msgid "Ignore" +msgstr "忽视" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:171 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:183 +msgid "Interface FQDN, All Addresses" +msgstr "接口 FQDN,所有地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:164 +msgid "LAN DNS" +msgstr "局域网 DNS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:229 +msgid "Large" +msgstr "大" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:112 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:273 +msgid "Limit days between RFC5011 copies to reduce flash writes" +msgstr "限制 RFC5011 副本之间的天数,以减少闪存写入" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:255 +msgid "Limit extended DNS packet size" +msgstr "限制扩展 DNS 数据包大小" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:132 +msgid "Link to supported programs to load DHCP into DNS" +msgstr "链接到支持的程序,以将 DHCP 加载到 DNS 中" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:107 +msgid "List domains to bypass checks of DNSSEC" +msgstr "列出要绕过 DNSSEC 检查的域名" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:74 +msgid "Listening Port" +msgstr "监听端口" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:50 +msgid "Local Data" +msgstr "本地数据" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:145 +msgid "Local Domain" +msgstr "本地域名" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:153 +msgid "Local Domain Type" +msgstr "本地域名类型" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:207 +msgid "Local Host, Encrypted" +msgstr "本地主机,加密" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:206 +msgid "Local Host, No Encryption" +msgstr "本地主机,无加密" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:58 +msgid "Local Service" +msgstr "本地服务" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:208 +msgid "Local Subnet, Encrypted" +msgstr "本地子网,加密" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:209 +msgid "Local Subnet, Static Encryption" +msgstr "本地子网,静态加密" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:53 +msgid "Local Zones" +msgstr "本地区域" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:41 +msgid "Log" +msgstr "日志" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:49 +msgid "Manual Conf" +msgstr "手动配置" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:228 +msgid "Medium" +msgstr "介质" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:223 +msgid "Memory Resource" +msgstr "内存资源" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:122 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:283 +msgid "Networks that may trigger Unbound to reload (avoid wan6)" +msgstr "可触发 Unbound 重新加载的网络(避免 wan6)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:167 +msgid "No Entry" +msgstr "无条目" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:88 +msgid "No Filter" +msgstr "无过滤器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:133 +msgid "No Link" +msgstr "无链接" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:205 +msgid "No Remote Control" +msgstr "无远程控制" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:45 +msgid "" +"Note: SSL/TLS library is missing an API. Please review syslog. >> logread ..." +msgstr "注意:SSL/TLS库缺少 API。请查看 syslog。 >> logread ..." + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:16 +msgid "" +"Organize directed forward, stub, and authoritative zones <a href=\"%s\" " +"target=\"_blank\">(help)</a>." +msgstr "" +"组织转移转发、存根和权威区域<a href=\"%s\" target=\"_blank\">(帮助)</a>。" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:177 +msgid "Override the WAN side router entry in DNS" +msgstr "覆盖路由器中的 WAN 端 DNS 条目" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:236 +msgid "Passive" +msgstr "被动" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:60 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:66 +msgid "Port servers will receive queries on" +msgstr "服务器将接收查询的端口" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:99 +msgid "Prefix for generated DNS64 addresses" +msgstr "生成 DNS64 地址的前缀" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:261 +msgid "Prevent excessively short cache periods" +msgstr "防止缓存期过短" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:82 +msgid "Protect against upstream response of 127.0.0.0/8" +msgstr "防止 127.0.0.0/8 的上游响应" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:87 +msgid "Protect against upstream responses within local subnets" +msgstr "防止本地子网内的上游响应" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:241 +msgid "Query Minimize" +msgstr "最小化查询" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:75 +msgid "Recurse" +msgstr "递归" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:212 +msgid "Recursion Protocol" +msgstr "递归协议" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:233 +msgid "Recursion Strength" +msgstr "递归强度" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:234 +msgid "Recursion activity affects memory growth and CPU load" +msgstr "递归活动会增大内存使用和 CPU 负载" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:22 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:22 +msgid "Recursive DNS" +msgstr "递归 DNS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:157 +msgid "Refused" +msgstr "拒绝" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:40 +msgid "Resource" +msgstr "资源" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:111 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:272 +msgid "Root DSKEY Age" +msgstr "Root DSKEY 年龄" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua:11 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua:11 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua:11 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/uciedit.lua:11 +msgid "Save" +msgstr "保存" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:59 +msgid "Server Port" +msgstr "服务器端口" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:65 +msgid "Server TLS Port" +msgstr "服务器 TLS 端口" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:47 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:33 +msgid "Servers" +msgstr "服务器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:48 +msgid "Servers for this zone; see README.md for optional form" +msgstr "该区域的服务器;有关选项格式,请参阅 README.md" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:96 +msgid "Show: Adblock" +msgstr "显示:Adblock" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:90 +msgid "Show: DHCP" +msgstr "显示:DHCP" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:73 +msgid "Show: Unbound" +msgstr "显示:Unbound" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:50 +msgid "Skip UCI and use /etc/unbound/unbound.conf" +msgstr "跳过 UCI 并使用 /etc/unbound/unbound.conf" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:227 +msgid "Small" +msgstr "小" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:158 +msgid "Static (local only)" +msgstr "静态(仅限本地)" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:47 +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:59 +msgid "Statistics" +msgstr "统计" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:38 +msgid "Status" +msgstr "状态" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:248 +msgid "Strict Minimize" +msgstr "严格最小化" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:249 +msgid "Strict version of 'query minimize' but it can break DNS" +msgstr "严格版本的“最小化查询”,但会破坏 DNS 标准" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:39 +msgid "Stub (forced recursion)" +msgstr "存根(强制递归)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:71 +msgid "TLS Name Index" +msgstr "TLS 名称索引" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:260 +msgid "TTL Minimum" +msgstr "最小 TTL" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:103 +msgid "This could display more statistics with the unbound-control package." +msgstr "可以使用 unbound-control 包显示更多统计信息。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:170 +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:181 +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:206 +msgid "This shows '" +msgstr "显示'" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:160 +msgid "" +"This shows Unbound 'cache_dump'. Useful to check if unbound is actually " +"caching dns entities." +msgstr "显示 Unbound的“cache_dump”。用于检查 unbound 是否实际缓存 dns 实体。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:137 +msgid "" +"This shows Unbound 'local-data:' entries from default, .conf, or control." +msgstr "显示来自默认、.conf 或 control 的 Unbound “local-data:”条目。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:149 +msgid "" +"This shows Unbound 'local-zone:' entries from default, .conf, or control." +msgstr "显示来自默认、.conf 或 control 的 Unbound “local-zone:”条目。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:125 +msgid "This shows Unbound self reported performance statistics." +msgstr "显示 Unbound 自我报告的性能统计信息。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:113 +msgid "This shows syslog filtered for events involving Unbound." +msgstr "显示筛选出的涉及 Unbound 事件的 syslog。" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:226 +msgid "Tiny" +msgstr "小" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:159 +msgid "Transparent (local/global)" +msgstr "透明(本地/全球)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:121 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:282 +msgid "Trigger Networks" +msgstr "触发网络" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:27 +msgid "Type" +msgstr "类型" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:26 +msgid "Unbound" +msgstr "Unbound" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:23 +msgid "" +"Unbound <a href=\"%s\" target=\"_blank\">(NLnet Labs)</a> is a validating, " +"recursive, and caching DNS resolver <a href=\"%s\" target=\"_blank\">(help)</" +"a>." +msgstr "" +"Unbound <a href=\"%s\" target=\"_blank\">(NLnet Labs)</a>是一个验证、递归和缓" +"存 DNS 解析器<a href=\"%s\" target=\"_blank\">(帮助)</a>。" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:202 +msgid "Unbound Control App" +msgstr "Unbound 控制应用程序" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:81 +msgid "Undefined" +msgstr "未定义" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:51 +msgid "Use 'resolv.conf.auto'" +msgstr "使用“resolv.conf.auto”" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:140 +msgid "Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)" +msgstr "使用 DHCPv4 MAC 发现 IP6 主机 SLAAC(EUI64)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:179 +msgid "Use Upstream" +msgstr "使用上游" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:189 +msgid "Use extra DNS entries found in /etc/config/dhcp" +msgstr "使用 /etc/config/dhcp 中的额外 DNS 条目" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:224 +msgid "Use menu System/Processes to observe any memory growth" +msgstr "使用 系统/进程 菜单观察内存增长" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:176 +msgid "WAN DNS" +msgstr "WAN DNS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:44 +msgid "Zone (Domain) names included in this zone combination" +msgstr "包含在此区域组合中的区域(域)名称" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:76 +msgid "Zone Download URL" +msgstr "区域下载 URL" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:43 +msgid "Zone Names" +msgstr "区域名称" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:37 +msgid "Zone Type" +msgstr "区域类型" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:32 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:30 +msgid "Zones" +msgstr "区域" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:112 +msgid "accept upstream results for" +msgstr "接受上游结果" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:115 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:276 +msgid "default" +msgstr "默认" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:175 +msgid "download from <var>%s</var>" +msgstr "从 <var>%s</var> 下载" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:118 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:279 +msgid "never" +msgstr "从不" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:118 +msgid "prefetch zone files for" +msgstr "预取区域文件,为" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:115 +msgid "select recursion for" +msgstr "进行递归,为" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:121 +msgid "unknown action for" +msgstr "未知行为,为" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:205 +msgid "use <var>%s</var> nameservers" +msgstr "使用 <var>%s</var> 名称服务器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:156 +msgid "use nameservers" +msgstr "使用名称服务器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:164 +msgid "with default certificate for <var>%s</var>" +msgstr "使用 <var>%s</var> 的默认证书" diff --git a/applications/luci-app-unbound/po/zh-tw/unbound.po b/applications/luci-app-unbound/po/zh-tw/unbound.po new file mode 100644 index 0000000000..b51ad0a800 --- /dev/null +++ b/applications/luci-app-unbound/po/zh-tw/unbound.po @@ -0,0 +1,740 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:96 +msgid "(root)" +msgstr "(根)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:201 +msgid ", and <var>%s</var> entries" +msgstr ",及 <var>%s</var> 條目" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:172 +msgid ", and try <var>%s</var>" +msgstr ",並嘗試 <var>%s</var> " + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:78 +msgid "AXFR" +msgstr "AXFR" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:59 +msgid "Accept queries only from local subnets" +msgstr "僅接受來自本地子網的查詢" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:198 +msgid "Adblock domain list '" +msgstr "Adblock 域名列表'" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:38 +msgid "Advanced" +msgstr "高階" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:237 +msgid "Aggressive" +msgstr "激進" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:34 +msgid "Allow open recursion when record not in zone" +msgstr "記錄不在區域中時允許遞迴查詢" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:38 +msgid "Authoritative (zone file)" +msgstr "權威(區域檔案)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:33 +msgid "Basic" +msgstr "基本" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:242 +msgid "Break down query components for limited added privacy" +msgstr "細分查詢元件以增加有限的隱私" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:69 +msgid "Break the loop where DNSSEC needs NTP and NTP needs DNS" +msgstr "打破 DNSSEC 需要 NTP,NTP 又需要 DNS 的迴圈" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:56 +msgid "Cache Dump" +msgstr "快取轉儲" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:75 +msgid "Choose Unbounds listening port" +msgstr "選擇 Unbounds 監聽埠" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:213 +msgid "Chose the IP versions used upstream and downstream" +msgstr "選擇上游和下游使用的 IP 版本" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:56 +msgid "Connect to servers using TLS" +msgstr "使用 TLS 連線到伺服器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:39 +msgid "DHCP" +msgstr "DHCP" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:131 +msgid "DHCP Link" +msgstr "DHCP 連結" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:139 +msgid "DHCPv4 to SLAAC" +msgstr "DHCPv4 到 SLAAC" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:55 +msgid "DNS over TLS" +msgstr "DNS over TLS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:98 +msgid "DNS64 Prefix" +msgstr "DNS64 字首" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:68 +msgid "DNSSEC NTP Fix" +msgstr "DNSSEC NTP 修復" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:214 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:225 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:235 +msgid "Default" +msgstr "預設" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:156 +msgid "Denied (nxdomain)" +msgstr "否認(nxdomain)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:22 +msgid "Directed Zone" +msgstr "轉移區域" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:77 +msgid "Directory only part of URL" +msgstr "目錄只是 URL 的一部分" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:106 +msgid "Domain Insecure" +msgstr "域不安全" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:72 +msgid "Domain name to verify TLS certificate" +msgstr "用於驗證 TLS 證書的域名" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:146 +msgid "Domain suffix for this router and DHCP clients" +msgstr "此路由器和 DHCP 客戶端的域名字尾" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:254 +msgid "EDNS Size" +msgstr "EDNS 大小" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua:14 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/uciedit.lua:14 +msgid "Edit '" +msgstr "編輯'" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua:14 +msgid "Edit 'server:' clause options for 'include:" +msgstr "編輯“server:”子選項,位於'include:" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:23 +msgid "" +"Edit a forward, stub, or zone-file-cache zone for Unbound to use instead of " +"recursion." +msgstr "編輯 Unbound 使用的轉發、存根或區域檔案快取區域,而不進行遞迴查詢。" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua:14 +msgid "Edit clauses such as 'forward-zone:' for 'include:" +msgstr "編輯子選項,例如“forward-zone:”,位於'include:" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:85 +msgid "Edit: Extended" +msgstr "編輯:擴充套件" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:82 +msgid "Edit: Server" +msgstr "編輯:伺服器" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:70 +msgid "Edit: UCI" +msgstr "編輯:UCI" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:77 +msgid "Edit: Unbound" +msgstr "編輯:Unbound" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:39 +msgid "Enable" +msgstr "啟用" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:93 +msgid "Enable DNS64" +msgstr "啟用 DNS64" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:63 +msgid "Enable DNSSEC" +msgstr "啟用 DNSSEC" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:45 +msgid "Enable Unbound" +msgstr "啟用 Unbound" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:203 +msgid "Enable access for unbound-control" +msgstr "啟用 unbound-control 訪問" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:94 +msgid "Enable the DNS64 module" +msgstr "啟用 DNS64 模組" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:64 +msgid "Enable the DNSSEC validator module" +msgstr "啟用 DNSSEC 驗證模組" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:46 +msgid "Enable the initialization scripts for Unbound" +msgstr "啟用 Unbound 的初始化指令碼" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:30 +msgid "Enable this directed zone" +msgstr "啟用此轉移區域" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:29 +msgid "Enabled" +msgstr "啟用" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:266 +msgid "Extended Statistics" +msgstr "擴充套件統計" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:267 +msgid "Extended statistics are printed from unbound-control" +msgstr "擴充套件統計資訊從 unbound-control 列印" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:188 +msgid "Extra DNS" +msgstr "額外的 DNS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:33 +msgid "Fall Back" +msgstr "回退" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:36 +msgid "Fallback" +msgstr "回退" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:65 +msgid "Files" +msgstr "檔案" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:90 +msgid "Filter Entire Subnet" +msgstr "過濾整個子網" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:81 +msgid "Filter Localhost Rebind" +msgstr "過濾本地主機重繫結" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:89 +msgid "Filter Private Address" +msgstr "過濾私有地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:86 +msgid "Filter Private Rebind" +msgstr "過濾私有地址重繫結" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:71 +msgid "Forward" +msgstr "轉發" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:40 +msgid "Forward (simple handoff)" +msgstr "轉發(簡單切換)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:68 +msgid "Forward TLS" +msgstr "轉發 TLS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:52 +msgid "Forward to upstream nameservers (ISP)" +msgstr "轉發到上游名稱伺服器(ISP)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:170 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:182 +msgid "Host FQDN, All Addresses" +msgstr "主機 FQDN,所有地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:192 +msgid "Host Records" +msgstr "主機記錄" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:193 +msgid "Host/MX/SRV RR" +msgstr "主機/MX/SRV RR" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:194 +msgid "Host/MX/SRV/CNAME RR" +msgstr "主機/MX/SRV/CNAME RR" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:169 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:181 +msgid "Hostname, All Addresses" +msgstr "主機名,所有地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:168 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:180 +msgid "Hostname, Primary Address" +msgstr "主機名,主要地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:165 +msgid "How to enter the LAN or local network router in DNS" +msgstr "如何在 DNS 中進入 LAN 或本地網路路由器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:154 +msgid "How to treat queries of this local domain" +msgstr "如何處理此本地域的查詢" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:216 +msgid "IP4 All and IP6 Local" +msgstr "所有 IP4 及本地 IP6" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:215 +msgid "IP4 Only" +msgstr "僅 IP4" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:219 +msgid "IP4 and IP6" +msgstr "IP4 及 IP6" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:217 +msgid "IP6 Only*" +msgstr "僅 IP6*" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:218 +msgid "IP6 Preferred" +msgstr "首選 IP6" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:191 +msgid "Ignore" +msgstr "忽視" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:171 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:183 +msgid "Interface FQDN, All Addresses" +msgstr "介面 FQDN,所有地址" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:164 +msgid "LAN DNS" +msgstr "區域網 DNS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:229 +msgid "Large" +msgstr "大" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:112 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:273 +msgid "Limit days between RFC5011 copies to reduce flash writes" +msgstr "限制 RFC5011 副本之間的天數,以減少快閃記憶體寫入" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:255 +msgid "Limit extended DNS packet size" +msgstr "限制擴充套件 DNS 資料包大小" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:132 +msgid "Link to supported programs to load DHCP into DNS" +msgstr "連結到支援的程式,以將 DHCP 載入到 DNS 中" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:107 +msgid "List domains to bypass checks of DNSSEC" +msgstr "列出要繞過 DNSSEC 檢查的域名" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:74 +msgid "Listening Port" +msgstr "監聽埠" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:50 +msgid "Local Data" +msgstr "本地資料" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:145 +msgid "Local Domain" +msgstr "本地域名" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:153 +msgid "Local Domain Type" +msgstr "本地域名型別" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:207 +msgid "Local Host, Encrypted" +msgstr "本地主機,加密" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:206 +msgid "Local Host, No Encryption" +msgstr "本地主機,無加密" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:58 +msgid "Local Service" +msgstr "本地服務" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:208 +msgid "Local Subnet, Encrypted" +msgstr "本地子網,加密" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:209 +msgid "Local Subnet, Static Encryption" +msgstr "本地子網,靜態加密" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:53 +msgid "Local Zones" +msgstr "本地區域" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:41 +msgid "Log" +msgstr "日誌" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:49 +msgid "Manual Conf" +msgstr "手動配置" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:228 +msgid "Medium" +msgstr "介質" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:223 +msgid "Memory Resource" +msgstr "記憶體資源" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:122 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:283 +msgid "Networks that may trigger Unbound to reload (avoid wan6)" +msgstr "可觸發 Unbound 重新載入的網路(避免 wan6)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:167 +msgid "No Entry" +msgstr "無條目" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:88 +msgid "No Filter" +msgstr "無過濾器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:133 +msgid "No Link" +msgstr "無連結" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:205 +msgid "No Remote Control" +msgstr "無遠端控制" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:45 +msgid "" +"Note: SSL/TLS library is missing an API. Please review syslog. >> logread ..." +msgstr "注意:SSL/TLS庫缺少 API。請檢視 syslog。 >> logread ..." + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:16 +msgid "" +"Organize directed forward, stub, and authoritative zones <a href=\"%s\" " +"target=\"_blank\">(help)</a>." +msgstr "" +"組織轉移轉發、存根和權威區域<a href=\"%s\" target=\"_blank\">(幫助)</a>。" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:177 +msgid "Override the WAN side router entry in DNS" +msgstr "覆蓋路由器中的 WAN 端 DNS 條目" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:236 +msgid "Passive" +msgstr "被動" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:60 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:66 +msgid "Port servers will receive queries on" +msgstr "伺服器將接收查詢的埠" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:99 +msgid "Prefix for generated DNS64 addresses" +msgstr "生成 DNS64 地址的字首" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:261 +msgid "Prevent excessively short cache periods" +msgstr "防止快取期過短" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:82 +msgid "Protect against upstream response of 127.0.0.0/8" +msgstr "防止 127.0.0.0/8 的上游響應" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:87 +msgid "Protect against upstream responses within local subnets" +msgstr "防止本地子網內的上游響應" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:241 +msgid "Query Minimize" +msgstr "最小化查詢" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:75 +msgid "Recurse" +msgstr "遞迴" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:212 +msgid "Recursion Protocol" +msgstr "遞迴協議" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:233 +msgid "Recursion Strength" +msgstr "遞迴強度" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:234 +msgid "Recursion activity affects memory growth and CPU load" +msgstr "遞迴活動會增大記憶體使用和 CPU 負載" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:22 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:22 +msgid "Recursive DNS" +msgstr "遞迴 DNS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:157 +msgid "Refused" +msgstr "拒絕" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:40 +msgid "Resource" +msgstr "資源" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:111 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:272 +msgid "Root DSKEY Age" +msgstr "Root DSKEY 年齡" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua:11 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua:11 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua:11 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/uciedit.lua:11 +msgid "Save" +msgstr "儲存" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:59 +msgid "Server Port" +msgstr "伺服器埠" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:65 +msgid "Server TLS Port" +msgstr "伺服器 TLS 埠" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:47 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:33 +msgid "Servers" +msgstr "伺服器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:48 +msgid "Servers for this zone; see README.md for optional form" +msgstr "該區域的伺服器;有關選項格式,請參閱 README.md" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:96 +msgid "Show: Adblock" +msgstr "顯示:Adblock" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:90 +msgid "Show: DHCP" +msgstr "顯示:DHCP" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:73 +msgid "Show: Unbound" +msgstr "顯示:Unbound" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:50 +msgid "Skip UCI and use /etc/unbound/unbound.conf" +msgstr "跳過 UCI 並使用 /etc/unbound/unbound.conf" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:227 +msgid "Small" +msgstr "小" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:158 +msgid "Static (local only)" +msgstr "靜態(僅限本地)" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:47 +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:59 +msgid "Statistics" +msgstr "統計" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:38 +msgid "Status" +msgstr "狀態" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:248 +msgid "Strict Minimize" +msgstr "嚴格最小化" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:249 +msgid "Strict version of 'query minimize' but it can break DNS" +msgstr "嚴格版本的“最小化查詢”,但會破壞 DNS 標準" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:39 +msgid "Stub (forced recursion)" +msgstr "存根(強制遞迴)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:71 +msgid "TLS Name Index" +msgstr "TLS 名稱索引" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:260 +msgid "TTL Minimum" +msgstr "最小 TTL" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:103 +msgid "This could display more statistics with the unbound-control package." +msgstr "可以使用 unbound-control 包顯示更多統計資訊。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:170 +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:181 +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:206 +msgid "This shows '" +msgstr "顯示'" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:160 +msgid "" +"This shows Unbound 'cache_dump'. Useful to check if unbound is actually " +"caching dns entities." +msgstr "顯示 Unbound的“cache_dump”。用於檢查 unbound 是否實際快取 dns 實體。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:137 +msgid "" +"This shows Unbound 'local-data:' entries from default, .conf, or control." +msgstr "顯示來自預設、.conf 或 control 的 Unbound “local-data:”條目。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:149 +msgid "" +"This shows Unbound 'local-zone:' entries from default, .conf, or control." +msgstr "顯示來自預設、.conf 或 control 的 Unbound “local-zone:”條目。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:125 +msgid "This shows Unbound self reported performance statistics." +msgstr "顯示 Unbound 自我報告的效能統計資訊。" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:113 +msgid "This shows syslog filtered for events involving Unbound." +msgstr "顯示篩選出的涉及 Unbound 事件的 syslog。" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:226 +msgid "Tiny" +msgstr "小" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:159 +msgid "Transparent (local/global)" +msgstr "透明(本地/全球)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:121 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:282 +msgid "Trigger Networks" +msgstr "觸發網路" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:27 +msgid "Type" +msgstr "型別" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:26 +msgid "Unbound" +msgstr "Unbound" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:23 +msgid "" +"Unbound <a href=\"%s\" target=\"_blank\">(NLnet Labs)</a> is a validating, " +"recursive, and caching DNS resolver <a href=\"%s\" target=\"_blank\">(help)</" +"a>." +msgstr "" +"Unbound <a href=\"%s\" target=\"_blank\">(NLnet Labs)</a>是一個驗證、遞迴和緩" +"存 DNS 解析器<a href=\"%s\" target=\"_blank\">(幫助)</a>。" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:202 +msgid "Unbound Control App" +msgstr "Unbound 控制應用程式" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:81 +msgid "Undefined" +msgstr "未定義" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:51 +msgid "Use 'resolv.conf.auto'" +msgstr "使用“resolv.conf.auto”" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:140 +msgid "Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)" +msgstr "使用 DHCPv4 MAC 發現 IP6 主機 SLAAC(EUI64)" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:179 +msgid "Use Upstream" +msgstr "使用上游" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:189 +msgid "Use extra DNS entries found in /etc/config/dhcp" +msgstr "使用 /etc/config/dhcp 中的額外 DNS 條目" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:224 +msgid "Use menu System/Processes to observe any memory growth" +msgstr "使用 系統/程序 選單觀察記憶體增長" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:176 +msgid "WAN DNS" +msgstr "WAN DNS" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:44 +msgid "Zone (Domain) names included in this zone combination" +msgstr "包含在此區域組合中的區域(域)名稱" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:76 +msgid "Zone Download URL" +msgstr "區域下載 URL" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:43 +msgid "Zone Names" +msgstr "區域名稱" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zone-details.lua:37 +msgid "Zone Type" +msgstr "區域型別" + +#: applications/luci-app-unbound/luasrc/controller/unbound.lua:32 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:30 +msgid "Zones" +msgstr "區域" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:112 +msgid "accept upstream results for" +msgstr "接受上游結果" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:115 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:276 +msgid "default" +msgstr "預設" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:175 +msgid "download from <var>%s</var>" +msgstr "從 <var>%s</var> 下載" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:118 +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua:279 +msgid "never" +msgstr "從不" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:118 +msgid "prefetch zone files for" +msgstr "預取區域檔案,為" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:115 +msgid "select recursion for" +msgstr "進行遞迴,為" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:121 +msgid "unknown action for" +msgstr "未知行為,為" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:205 +msgid "use <var>%s</var> nameservers" +msgstr "使用 <var>%s</var> 名稱伺服器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:156 +msgid "use nameservers" +msgstr "使用名稱伺服器" + +#: applications/luci-app-unbound/luasrc/model/cbi/unbound/zones.lua:164 +msgid "with default certificate for <var>%s</var>" +msgstr "使用 <var>%s</var> 的預設證書" |