summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-smartdns
diff options
context:
space:
mode:
Diffstat (limited to 'applications/luci-app-smartdns')
-rw-r--r--applications/luci-app-smartdns/Makefile26
-rw-r--r--applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js483
-rw-r--r--applications/luci-app-smartdns/po/de/smartdns.po457
-rw-r--r--applications/luci-app-smartdns/po/es/smartdns.po516
-rw-r--r--applications/luci-app-smartdns/po/templates/smartdns.pot448
-rw-r--r--applications/luci-app-smartdns/po/zh_Hans/smartdns.po455
-rw-r--r--applications/luci-app-smartdns/root/usr/share/luci/menu.d/luci-app-smartdns.json12
-rw-r--r--applications/luci-app-smartdns/root/usr/share/rpcd/acl.d/luci-app-smartdns.json23
8 files changed, 2420 insertions, 0 deletions
diff --git a/applications/luci-app-smartdns/Makefile b/applications/luci-app-smartdns/Makefile
new file mode 100644
index 0000000000..878fbf7394
--- /dev/null
+++ b/applications/luci-app-smartdns/Makefile
@@ -0,0 +1,26 @@
+#
+# Copyright 2018-2020 Nick Peng <pymumu@gmail.com>
+# Licensed to the public under the GPL V3 License.
+
+include $(TOPDIR)/rules.mk
+
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_MAINTAINER:=Nick Peng <pymumu@gmail.com>
+PKG_VERSION:=1.2020.30
+PKG_RELEASE:=1
+
+LUCI_TITLE:=LuCI for smartdns
+LUCI_DESCRIPTION:=Provides Luci for smartdns
+LUCI_DEPENDS:=+smartdns
+LUCI_PKGARCH:=all
+
+define Package/$(PKG_NAME)/config
+# shown in make menuconfig <Help>
+help
+ $(LUCI_TITLE)
+ Version: $(PKG_VERSION)-$(PKG_RELEASE)
+endef
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js b/applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js
new file mode 100644
index 0000000000..549482b469
--- /dev/null
+++ b/applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js
@@ -0,0 +1,483 @@
+/*************************************************************************
+ *
+ * Copyright (C) 2018-2020 Ruilin Peng (Nick) <pymumu@gmail.com>.
+ *
+ * smartdns is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * smartdns is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+'use strict';
+'require fs';
+'require uci';
+'require form';
+'require rpc';
+
+var conf = 'smartdns';
+var callServiceList = rpc.declare({
+ object: 'service',
+ method: 'list',
+ params: ['name'],
+ expect: { '': {} }
+});
+
+function getPidOfSmartdns() {
+ return L.resolveDefault(callServiceList(conf), {})
+ .then(function (res) {
+ var isrunning = false;
+ try {
+ isrunning = res[conf]['instances']['smartdns']['running'];
+ } catch (e) { }
+ return isrunning;
+ });
+}
+
+function getIPTablesRedirect() {
+ return fs.exec('/usr/sbin/iptables', ['-t', 'nat', '-nL', 'PREROUTING']).then(function (res) {
+ if (res.code === 0) {
+ return res.stdout.trim();
+ } else {
+ return "";
+ }
+ });
+}
+
+function getIP6TablesRedirect() {
+ return fs.exec('/usr/sbin/ip6tables', ['-t', 'nat', '-nL', 'PREROUTING']).then(function (res) {
+ if (res.code === 0) {
+ return res.stdout.trim();
+ } else {
+ return "";
+ }
+ });
+}
+
+function smartdnsServiceStatus() {
+ return Promise.all([
+ getPidOfSmartdns(),
+ getIPTablesRedirect(),
+ getIP6TablesRedirect()
+ ]);
+}
+
+function smartdnsRenderStatus(res) {
+ var renderHTML = "";
+ var isRunning = res[0];
+ var ipt = res[1];
+ var ip6t = res[2];
+
+ var serverPort = uci.get_first('smartdns', 'smartdns', 'port');
+ var redirectMode = uci.get_first('smartdns', 'smartdns', 'redirect');
+ var ipv6Enabled = uci.get_first('smartdns', 'smartdns', 'ipv6_server');
+
+ if (isRunning) {
+ renderHTML += "<span style=\"color:green;font-weight:bold\">SmartDNS - " + _("RUNNING") + "</span>";
+ } else {
+ renderHTML += "<span style=\"color:red;font-weight:bold\">SmartDNS - " + _("NOT RUNNING") + "</span>";
+ return renderHTML;
+ }
+
+ if (redirectMode === "dnsmasq-upstream") {
+ var matchLine = "127.0.0.1#" + serverPort;
+ var dnsmasqServer = uci.get_first('dhcp', 'dnsmasq', 'server') || "";
+
+ if (dnsmasqServer.indexOf(matchLine) < 0) {
+ renderHTML += "<br /><span style=\"color:red;font-weight:bold\">" + _("Dnsmasq Forwared To Smartdns Failure") + "</span>";
+ }
+ } else if (redirectMode === "redirect") {
+ var redirectRules = (ipt || '').split(/\n/).filter(function (rule) {
+ return rule.match(/REDIRECT/) && rule.match(/dpt:53/) && rule.match("ports " + serverPort);
+ });
+
+ if (redirectRules.length <= 0) {
+ renderHTML += "<br /><span style=\"color:red;font-weight:bold\">" + _("IPV4 53 Port Redirect Failure") + "</span>";
+ if (ipv6Enabled) {
+ var redirectRules = (ip6t || '').split(/\n/).filter(function (rule) {
+ return rule.match(/REDIRECT/) && rule.match(/dpt:53/) && rule.match("ports " + serverPort);
+ });
+ if (redirectRules.length <= 0) {
+ renderHTML += "<br /><span style=\"color:red;font-weight:bold\">" + _("IPV6 53 Port Redirect Failure") + "</span>";
+ }
+ }
+ }
+ }
+
+ return renderHTML;
+}
+
+return L.view.extend({
+ load: function () {
+ return Promise.all([
+ uci.load('smartdns'),
+ uci.load('dhcp')
+ ]);
+ },
+ render: function (stats) {
+ var m, s, o;
+
+ m = new form.Map('smartdns', _('SmartDNS'));
+ m.title = _("SmartDNS Server");
+ m.description = _("SmartDNS is a local high-performance DNS server, supports finding fastest IP, "
+ + "supports ad filtering, and supports avoiding DNS poisoning.");
+
+ s = m.section(form.NamedSection, '_status');
+ s.anonymous = true;
+ s.render = function (section_id) {
+ L.Poll.add(function () {
+ return L.resolveDefault(smartdnsServiceStatus()).then(function (res) {
+ var view = document.getElementById("service_status");
+ view.innerHTML = smartdnsRenderStatus(res);
+ });
+ });
+
+ return E('div', { class: 'cbi-map' },
+ E('div', { class: 'cbi-section' }, [
+ E('div', { id: 'service_status' },
+ _('Collecting data ...'))
+ ])
+ );
+ }
+
+ // Basic;
+ s = m.section(form.TypedSection, "smartdns", _("Settings"), _("General Settings"));
+ s.anonymous = true;
+
+ s.tab("settings", _("General Settings"));
+ s.tab("seconddns", _("Second Server Settings"));
+ s.tab("custom", _("Custom Settings"));
+
+ // Eanble;
+ o = s.taboption("settings", form.Flag, "enabled", _("Enable"), _("Enable or disable smartdns server"));
+ o.default = o.disabled;
+ o.rempty = false;
+
+ // server name;
+ o = s.taboption("settings", form.Value, "server_name", _("Server Name"), _("Smartdns server name"));
+ o.default = "smartdns";
+ o.datatype = "hostname";
+ o.rempty = false;
+
+ // Port;
+ o = s.taboption("settings", form.Value, "port", _("Local Port"), _("Smartdns local server port"));
+ o.placeholder = 6053;
+ o.default = 6053;
+ o.datatype = "port";
+ o.rempty = false;
+
+ // Enable TCP server;
+ o = s.taboption("settings", form.Flag, "tcp_server", _("TCP Server"), _("Enable TCP DNS Server"));
+ o.rmempty = false;
+ o.default = o.enabled;
+
+ // Support IPV6;
+ o = s.taboption("settings", form.Flag, "ipv6_server", _("IPV6 Server"), _("Enable IPV6 DNS Server"));
+ o.rmempty = false;
+ o.default = o.enabled;
+
+ // Support DualStack ip selection;
+ o = s.taboption("settings", form.Flag, "dualstack_ip_selection", _("Dual-stack IP Selection"),
+ _("Enable IP selection between IPV4 and IPV6"));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // Domain prefetch load ;
+ o = s.taboption("settings", form.Flag, "prefetch_domain", _("Domain prefetch"),
+ _("Enable domain prefetch, accelerate domain response speed."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // Domain Serve expired
+ o = s.taboption("settings", form.Flag, "serve_expired", _("Serve expired"),
+ _("Attempts to serve old responses from cache with a TTL of 0 in the response without waiting for the actual resolution to finish."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // Redirect;
+ o = s.taboption("settings", form.ListValue, "redirect", _("Redirect"), _("SmartDNS redirect mode"));
+ o.placeholder = "none";
+ o.value("none", _("none"));
+ o.value("dnsmasq-upstream", _("Run as dnsmasq upstream server"));
+ o.value("redirect", _("Redirect 53 port to SmartDNS"));
+ o.default = "none";
+ o.rempty = false;
+
+ // cache-size;
+ o = s.taboption("settings", form.Value, "cache_size", _("Cache Size"), _("DNS domain result cache size"));
+ o.rempty = true;
+
+ // rr-ttl;
+ o = s.taboption("settings", form.Value, "rr_ttl", _("Domain TTL"), _("TTL for all domain result."));
+ o.rempty = true;
+
+ // rr-ttl-min;
+ o = s.taboption("settings", form.Value, "rr_ttl_min", _("Domain TTL Min"),
+ _("Minimum TTL for all domain result."));
+ o.rempty = true;
+ o.placeholder = "300";
+ o.default = 300;
+ o.optional = true;
+
+ // second dns server;
+ // rr-ttl-max;
+ o = s.taboption("settings", form.Value, "rr_ttl_max", _("Domain TTL Max"),
+ _("Maximum TTL for all domain result."));
+ o.rempty = true;
+
+ // Eanble;
+ o = s.taboption("seconddns", form.Flag, "seconddns_enabled", _("Enable"),
+ _("Enable or disable second DNS server."));
+ o.default = o.disabled;
+ o.rempty = false;
+
+ // Port;
+ o = s.taboption("seconddns", form.Value, "seconddns_port", _("Local Port"), _("Smartdns local server port"));
+ o.placeholder = 6553;
+ o.default = 6553;
+ o.datatype = "port";
+ o.rempty = false;
+
+ // Enable TCP server;
+ o = s.taboption("seconddns", form.Flag, "seconddns_tcp_server", _("TCP Server"), _("Enable TCP DNS Server"));
+ o.rmempty = false;
+ o.default = o.enabled;
+
+ // dns server group;
+ o = s.taboption("seconddns", form.Value, "seconddns_server_group", _("Server Group"),
+ _("Query DNS through specific dns server group, such as office, home."));
+ o.rmempty = true;
+ o.placeholder = "default";
+ o.datatype = "hostname";
+ o.rempty = true;
+
+ o = s.taboption("seconddns", form.Flag, "seconddns_no_speed_check", _("Skip Speed Check"),
+ _("Do not check speed."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // skip address rules;
+ o = s.taboption("seconddns", form.Flag, "seconddns_no_rule_addr", _("Skip Address Rules"),
+ _("Skip address rules."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // skip name server rules;
+ o = s.taboption("seconddns", form.Flag, "seconddns_no_rule_nameserver", _("Skip Nameserver Rule"),
+ _("Skip nameserver rules."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // skip ipset rules;
+ o = s.taboption("seconddns", form.Flag, "seconddns_no_rule_ipset", _("Skip Ipset Rule"),
+ _("Skip ipset rules."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // skip soa address rule;
+ o = s.taboption("seconddns", form.Flag, "seconddns_no_rule_soa", _("Skip SOA Address Rule"),
+ _("Skip SOA address rules."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ o = s.taboption("seconddns", form.Flag, "seconddns_no_dualstack_selection", _("Skip Dualstack Selection"),
+ _("Skip Dualstack Selection."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // skip cache;
+ o = s.taboption("seconddns", form.Flag, "seconddns_no_cache", _("Skip Cache"), _("Skip Cache."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // Force AAAA SOA
+ o = s.taboption("seconddns", form.Flag, "force_aaaa_soa", _("Force AAAA SOA"), _("Force AAAA SOA."));
+ o.rmempty = false;
+ o.default = o.disabled;
+
+ // custom settings;
+ o = s.taboption("custom", form.TextValue, "custom_conf",
+ "", _("smartdns custom settings"));
+
+ o.rows = 20;
+ o.cfgvalue = function (section_id) {
+ return fs.trimmed('/etc/smartdns/custom.conf');
+ };
+ o.write = function (section_id, formvalue) {
+ return fs.write('/etc/smartdns/custom.conf', formvalue.trim().replace(/\r\n/g, '\n') + '\n');
+ };
+
+ o = s.taboption("custom", form.Flag, "coredump", _("Generate Coredump"),
+ _("Generate Coredump file when smartdns crash, coredump file is located at /tmp/smartdns.xxx.core."));
+ o.rmempty = false;
+ o.default = o.disabled;
+ // Upstream servers;
+ s = m.section(form.GridSection, "server", _("Upstream Servers"),
+ _("Upstream Servers, support UDP, TCP protocol. Please configure multiple DNS servers, "
+ + "including multiple foreign DNS servers."));
+ s.anonymous = true;
+ s.addremove = true;
+
+ s.tab('general', _('General Settings'));
+ s.tab('advanced', _('Advanced Settings'));
+
+ // enable flag;
+ o = s.taboption("general", form.Flag, "enabled", _("Enable"), _("Enable"));
+ o.rmempty = false;
+ o.default = o.enabled;
+ o.editable = true;
+
+ // name;
+ o = s.taboption("general", form.Value, "name", _("DNS Server Name"), _("DNS Server Name"));
+
+ // IP address;
+ o = s.taboption("general", form.Value, "ip", _("ip"), _("DNS Server ip"));
+ o.datatype = "or(ipaddr, string)";
+ o.rmempty = false;
+
+ // port;
+ o = s.taboption("general", form.Value, "port", _("port"), _("DNS Server port"));
+ o.placeholder = "default";
+ o.datatype = "port";
+ o.rempty = true;
+ o.depends("type", "udp");
+ o.depends("type", "tcp");
+ o.depends("type", "tls");
+
+ // type;
+ o = s.taboption("general", form.ListValue, "type", _("type"), _("DNS Server type"));
+ o.placeholder = "udp";
+ o.value("udp", _("udp"));
+ o.value("tcp", _("tcp"));
+ o.value("tls", _("tls"));
+ o.value("https", _("https"));
+ o.default = "udp";
+ o.rempty = false;
+
+ // Advanced Options
+ // server group
+ o = s.taboption("advanced", form.Value, "server_group", _("Server Group"), _("DNS Server group belongs to, "
+ + "used with nameserver, such as office, home."))
+ o.rmempty = true
+ o.placeholder = "default"
+ o.datatype = "hostname"
+ o.rempty = true
+ o.modalonly = true;
+
+ // blacklist_ip
+ o = s.taboption("advanced", form.Flag, "blacklist_ip", _("IP Blacklist Filtering"),
+ _("Filtering IP with blacklist"))
+ o.rmempty = false
+ o.default = o.disabled
+ o.modalonly = true;
+
+ // TLS host verify
+ o = s.taboption("advanced", form.Value, "tls_host_verify", _("TLS Hostname Verify"),
+ _("Set TLS hostname to verify."))
+ o.default = ""
+ o.datatype = "string"
+ o.rempty = true
+ o.modalonly = true;
+ o.depends("type", "tls")
+ o.depends("type", "https")
+
+ // SNI host name
+ o = s.taboption("advanced", form.Value, "host_name", _("TLS SNI name"),
+ _("Sets the server name indication for query."))
+ o.default = ""
+ o.datatype = "hostname"
+ o.rempty = true
+ o.modalonly = true;
+ o.depends("type", "tls")
+ o.depends("type", "https")
+
+ // http host
+ o = s.taboption("advanced", form.Value, "http_host", _("HTTP Host"),
+ _("Set the HTTP host used for the query. Use this parameter when the host of the URL address is an IP address."))
+ o.default = ""
+ o.datatype = "hostname"
+ o.rempty = true
+ o.modalonly = true;
+ o.depends("type", "https")
+
+ // SPKI pin
+ o = s.taboption("advanced", form.Value, "spki_pin", _("TLS SPKI Pinning"),
+ _("Used to verify the validity of the TLS server, The value is Base64 encoded SPKI fingerprint, "
+ + "leaving blank to indicate that the validity of TLS is not verified."))
+ o.default = ""
+ o.datatype = "string"
+ o.rempty = true
+ o.modalonly = true;
+ o.depends("type", "tls")
+ o.depends("type", "https")
+
+ // other args
+ o = s.taboption("advanced", form.Value, "addition_arg", _("Additional Server Args"),
+ _("Additional Args for upstream dns servers"))
+ o.default = ""
+ o.rempty = true
+ o.modalonly = true;
+
+ // Doman addresss;
+ s = m.section(form.TypedSection, "smartdns", _("Advanced Settings"), _("Advanced Settings"));
+ s.anonymous = true;
+
+ s.tab("domain-address", _("Domain Address"), _("Set Specific domain ip address."));
+ s.tab("blackip-list", _("IP Blacklist"), _("Set Specific ip blacklist."));
+
+ o = s.taboption("domain-address", form.TextValue, "address_conf",
+ "",
+ _("Specify an IP address to return for any host in the given domains, Queries in the domains are never "
+ + "forwarded and always replied to with the specified IP address which may be IPv4 or IPv6."));
+ o.rows = 20;
+ o.cfgvalue = function (section_id) {
+ return fs.trimmed('/etc/smartdns/address.conf');
+ };
+ o.write = function (section_id, formvalue) {
+ return fs.write('/etc/smartdns/address.conf', formvalue.trim().replace(/\r\n/g, '\n') + '\n');
+ };
+
+ // IP Blacklist;
+ // blacklist;
+ o = s.taboption("blackip-list", form.TextValue, "blackip_ip_conf",
+ "", _("Configure IP blacklists that will be filtered from the results of specific DNS server."));
+ o.rows = 20;
+ o.cfgvalue = function (section_id) {
+ return fs.trimmed('/etc/smartdns/blacklist-ip.conf');
+ };
+ o.write = function (section_id, formvalue) {
+ return fs.write('/etc/smartdns/blacklist-ip.conf', formvalue.trim().replace(/\r\n/g, '\n') + '\n');
+ };
+
+ // Doman addresss;
+ s = m.section(form.TypedSection, "smartdns", _("Technical Support"),
+ _("If you like this software, please buy me a cup of coffee."));
+ s.anonymous = true;
+
+ o = s.option(form.Button, "web");
+ o.title = _("SmartDNS official website");
+ o.inputtitle = _("open website");
+ o.inputstyle = "apply";
+ o.onclick = function () {
+ window.open("https://pymumu.github.io/smartdns", '_blank');
+ };
+
+ o = s.option(form.Button, "Donate");
+ o.title = _("Donate to smartdns");
+ o.inputtitle = _("Donate");
+ o.inputstyle = "apply";
+ o.onclick = function () {
+ window.open("https://pymumu.github.io/smartdns/#donate", '_blank');
+ };
+
+ return m.render();
+ }
+});
diff --git a/applications/luci-app-smartdns/po/de/smartdns.po b/applications/luci-app-smartdns/po/de/smartdns.po
new file mode 100644
index 0000000000..e175083c49
--- /dev/null
+++ b/applications/luci-app-smartdns/po/de/smartdns.po
@@ -0,0 +1,457 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2020-07-11 21:29+0000\n"
+"Last-Translator: ssantos <ssantos@web.de>\n"
+"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationssmartdns/de/>\n"
+"Language: de\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.2-dev\n"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:424
+msgid "Additional Args for upstream dns servers"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:423
+msgid "Additional Server Args"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:330
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:430
+msgid "Advanced Settings"
+msgstr "Erweiterte Einstellungen"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:201
+msgid ""
+"Attempts to serve old responses from cache with a TTL of 0 in the response "
+"without waiting for the actual resolution to finish."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:215
+msgid "Cache Size"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:146
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:451
+msgid ""
+"Configure IP blacklists that will be filtered from the results of specific "
+"DNS server."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:157
+msgid "Custom Settings"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:339
+msgid "DNS Server Name"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:367
+msgid ""
+"DNS Server group belongs to, used with nameserver, such as office, home."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:342
+msgid "DNS Server ip"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:347
+msgid "DNS Server port"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:356
+msgid "DNS Server type"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:215
+msgid "DNS domain result cache size"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:95
+msgid "Dnsmasq Forwared To Smartdns Failure"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:263
+msgid "Do not check speed."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:433
+msgid "Domain Address"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:219
+msgid "Domain TTL"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:232
+msgid "Domain TTL Max"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:223
+msgid "Domain TTL Min"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:194
+msgid "Domain prefetch"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:475
+msgid "Donate"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:474
+msgid "Donate to smartdns"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:188
+msgid "Dual-stack IP Selection"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:237
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:333
+msgid "Enable"
+msgstr "Aktivieren"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:189
+msgid "Enable IP selection between IPV4 and IPV6"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:183
+msgid "Enable IPV6 DNS Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:178
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:250
+msgid "Enable TCP DNS Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:195
+msgid "Enable domain prefetch, accelerate domain response speed."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:238
+msgid "Enable or disable second DNS server."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
+msgid "Enable or disable smartdns server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:377
+msgid "Filtering IP with blacklist"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:302
+msgid "Force AAAA SOA"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:302
+msgid "Force AAAA SOA."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:152
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:155
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:329
+msgid "General Settings"
+msgstr "Allgemeine Einstellungen"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:318
+msgid "Generate Coredump"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:319
+msgid ""
+"Generate Coredump file when smartdns crash, coredump file is located at /tmp/"
+"smartdns.xxx.core."
+msgstr ""
+
+#: applications/luci-app-smartdns/root/usr/share/rpcd/acl.d/luci-app-smartdns.json:3
+msgid "Grant access to LuCI app smartdns"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:403
+msgid "HTTP Host"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:434
+msgid "IP Blacklist"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:376
+msgid "IP Blacklist Filtering"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:103
+msgid "IPV4 53 Port Redirect Failure"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:109
+msgid "IPV6 53 Port Redirect Failure"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:183
+msgid "IPV6 Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:462
+msgid "If you like this software, please buy me a cup of coffee."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:171
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:243
+msgid "Local Port"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:233
+msgid "Maximum TTL for all domain result."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:224
+msgid "Minimum TTL for all domain result."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:86
+msgid "NOT RUNNING"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:256
+msgid "Query DNS through specific dns server group, such as office, home."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:84
+msgid "RUNNING"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:206
+msgid "Redirect"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:210
+msgid "Redirect 53 port to SmartDNS"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:209
+msgid "Run as dnsmasq upstream server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:156
+msgid "Second Server Settings"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:200
+msgid "Serve expired"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:255
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:367
+msgid "Server Group"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:165
+msgid "Server Name"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:433
+msgid "Set Specific domain ip address."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:434
+msgid "Set Specific ip blacklist."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:384
+msgid "Set TLS hostname to verify."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:404
+msgid ""
+"Set the HTTP host used for the query. Use this parameter when the host of "
+"the URL address is an IP address."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:394
+msgid "Sets the server name indication for query."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:152
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:268
+msgid "Skip Address Rules"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:297
+msgid "Skip Cache"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:297
+msgid "Skip Cache."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:291
+msgid "Skip Dualstack Selection"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:292
+msgid "Skip Dualstack Selection."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:280
+msgid "Skip Ipset Rule"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:274
+msgid "Skip Nameserver Rule"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:286
+msgid "Skip SOA Address Rule"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:287
+msgid "Skip SOA address rules."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:262
+msgid "Skip Speed Check"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:269
+msgid "Skip address rules."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:281
+msgid "Skip ipset rules."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:275
+msgid "Skip nameserver rules."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:128
+#: applications/luci-app-smartdns/root/usr/share/luci/menu.d/luci-app-smartdns.json:3
+msgid "SmartDNS"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:129
+msgid "SmartDNS Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:130
+msgid ""
+"SmartDNS is a local high-performance DNS server, supports finding fastest "
+"IP, supports ad filtering, and supports avoiding DNS poisoning."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:466
+msgid "SmartDNS official website"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:206
+msgid "SmartDNS redirect mode"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:171
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:243
+msgid "Smartdns local server port"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:165
+msgid "Smartdns server name"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:438
+msgid ""
+"Specify an IP address to return for any host in the given domains, Queries "
+"in the domains are never forwarded and always replied to with the specified "
+"IP address which may be IPv4 or IPv6."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:178
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:250
+msgid "TCP Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:383
+msgid "TLS Hostname Verify"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:393
+msgid "TLS SNI name"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:412
+msgid "TLS SPKI Pinning"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:219
+msgid "TTL for all domain result."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:461
+msgid "Technical Support"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:323
+msgid "Upstream Servers"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:324
+msgid ""
+"Upstream Servers, support UDP, TCP protocol. Please configure multiple DNS "
+"servers, including multiple foreign DNS servers."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:413
+msgid ""
+"Used to verify the validity of the TLS server, The value is Base64 encoded "
+"SPKI fingerprint, leaving blank to indicate that the validity of TLS is not "
+"verified."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:361
+msgid "https"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:342
+msgid "ip"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:208
+msgid "none"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:467
+msgid "open website"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:347
+msgid "port"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:308
+msgid "smartdns custom settings"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:359
+msgid "tcp"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:360
+msgid "tls"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:356
+msgid "type"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:358
+msgid "udp"
+msgstr ""
diff --git a/applications/luci-app-smartdns/po/es/smartdns.po b/applications/luci-app-smartdns/po/es/smartdns.po
new file mode 100644
index 0000000000..e2f49e5032
--- /dev/null
+++ b/applications/luci-app-smartdns/po/es/smartdns.po
@@ -0,0 +1,516 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: 2020-07-02 17:20-0300\n"
+"PO-Revision-Date: 2020-07-10 10:42+0000\n"
+"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
+"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationssmartdns/es/>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.2-dev\n"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:424
+msgid "Additional Args for upstream dns servers"
+msgstr "Args adicionales para servidores DNS aguas arriba"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:423
+msgid "Additional Server Args"
+msgstr "Args adicionales del servidor"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:330
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:430
+msgid "Advanced Settings"
+msgstr "Configuraciones avanzadas"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:201
+msgid ""
+"Attempts to serve old responses from cache with a TTL of 0 in the response "
+"without waiting for the actual resolution to finish."
+msgstr ""
+"Intenta servir respuestas antiguas de la memoria caché con un TTL de 0 en la "
+"respuesta sin esperar a que finalice la resolución real."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:215
+msgid "Cache Size"
+msgstr "Tamaño del caché"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:146
+msgid "Collecting data ..."
+msgstr "Recolectando datos..."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:451
+msgid ""
+"Configure IP blacklists that will be filtered from the results of specific "
+"DNS server."
+msgstr ""
+"Configure listas negras de IP que se filtrarán de los resultados de un "
+"servidor DNS específico."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:157
+msgid "Custom Settings"
+msgstr "Configuraciones personalizadas"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:339
+msgid "DNS Server Name"
+msgstr "Nombre del servidor DNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:367
+msgid ""
+"DNS Server group belongs to, used with nameserver, such as office, home."
+msgstr ""
+"El grupo del servidor DNS pertenece a, usado con el servidor de nombres, "
+"como la oficina, el hogar."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:342
+msgid "DNS Server ip"
+msgstr "IP del servidor DNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:347
+msgid "DNS Server port"
+msgstr "Puerto del servidor DNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:356
+msgid "DNS Server type"
+msgstr "Tipo de servidor DNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:215
+msgid "DNS domain result cache size"
+msgstr "Tamaño del caché de resultados del dominio DNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:95
+msgid "Dnsmasq Forwared To Smartdns Failure"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:263
+msgid "Do not check speed."
+msgstr "No verifique la velocidad."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:433
+msgid "Domain Address"
+msgstr "Dirección de dominio"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:219
+msgid "Domain TTL"
+msgstr "Dominio TTL"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:232
+msgid "Domain TTL Max"
+msgstr "Dominio TTL máx."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:223
+msgid "Domain TTL Min"
+msgstr "Dominio TTL min."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:194
+msgid "Domain prefetch"
+msgstr "Prebúsqueda de dominios"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:475
+msgid "Donate"
+msgstr "Donar"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:474
+msgid "Donate to smartdns"
+msgstr "Donar a smartdns"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:188
+msgid "Dual-stack IP Selection"
+msgstr "Selección de IP de doble pila"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:237
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:333
+msgid "Enable"
+msgstr "Activar"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:189
+msgid "Enable IP selection between IPV4 and IPV6"
+msgstr "Activar la selección de IP entre IPv4 e IPv6"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:183
+msgid "Enable IPV6 DNS Server"
+msgstr "Activar servidor DNS IPv6"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:178
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:250
+msgid "Enable TCP DNS Server"
+msgstr "Activar el servidor DNS TCP"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:195
+msgid "Enable domain prefetch, accelerate domain response speed."
+msgstr ""
+"Active la captación previa del dominio, acelere la velocidad de respuesta "
+"del dominio."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:238
+msgid "Enable or disable second DNS server."
+msgstr "Activar o desactivar el segundo servidor DNS."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
+msgid "Enable or disable smartdns server"
+msgstr "Activar o desactivar el servidor smartdns"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:377
+msgid "Filtering IP with blacklist"
+msgstr "Filtrado de IP con lista negra"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:302
+msgid "Force AAAA SOA"
+msgstr "Forzar AAAA SOA"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:302
+msgid "Force AAAA SOA."
+msgstr "Forzar AAAA SOA."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:152
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:155
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:329
+msgid "General Settings"
+msgstr "Configuración general"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:318
+msgid "Generate Coredump"
+msgstr "Generar Coredump"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:319
+msgid ""
+"Generate Coredump file when smartdns crash, coredump file is located at /tmp/"
+"smartdns.xxx.core."
+msgstr ""
+"Genere el archivo Coredump cuando smartdns falla, el archivo coredump se "
+"encuentra en /tmp/smartdns.xxx.core."
+
+#: applications/luci-app-smartdns/root/usr/share/rpcd/acl.d/luci-app-smartdns.json:3
+msgid "Grant access to LuCI app smartdns"
+msgstr "Conceder acceso a la aplicación LuCI smartdns"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:403
+msgid "HTTP Host"
+msgstr "Host HTTP"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:434
+msgid "IP Blacklist"
+msgstr "Lista negra de IP"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:376
+msgid "IP Blacklist Filtering"
+msgstr "Filtrado de la lista negra de IP"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:103
+msgid "IPV4 53 Port Redirect Failure"
+msgstr "Error de reenvío de puerto IPv4 53"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:109
+msgid "IPV6 53 Port Redirect Failure"
+msgstr "Error de reenvío de puerto IPv6 53"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:183
+msgid "IPV6 Server"
+msgstr "Servidor IPv6"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:462
+msgid "If you like this software, please buy me a cup of coffee."
+msgstr "Si le gusta este software, cómpreme una taza de café."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:171
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:243
+msgid "Local Port"
+msgstr "Puerto local"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:233
+msgid "Maximum TTL for all domain result."
+msgstr "TTL máximo para todos los resultados de dominio."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:224
+msgid "Minimum TTL for all domain result."
+msgstr "TTL mínimo para todos los resultados de dominio."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:86
+msgid "NOT RUNNING"
+msgstr "NO CORRIENDO"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:256
+msgid "Query DNS through specific dns server group, such as office, home."
+msgstr ""
+"Consulta DNS a través de un grupo de servidores dns específico, como "
+"oficina, hogar."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:84
+msgid "RUNNING"
+msgstr "CORRIENDO"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:206
+msgid "Redirect"
+msgstr "Redirigir"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:210
+msgid "Redirect 53 port to SmartDNS"
+msgstr "Redirigir el puerto 53 a SmartDNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:209
+msgid "Run as dnsmasq upstream server"
+msgstr "Ejecutar como servidor dnsmasq aguas arriba"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:156
+msgid "Second Server Settings"
+msgstr "Segunda configuración del servidor"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:200
+msgid "Serve expired"
+msgstr "Servir expirado"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:255
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:367
+msgid "Server Group"
+msgstr "Grupo de servidores"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:165
+msgid "Server Name"
+msgstr "Nombre del servidor"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:433
+msgid "Set Specific domain ip address."
+msgstr "Establecer dirección IP de dominio específico."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:434
+msgid "Set Specific ip blacklist."
+msgstr "Establecer lista negra de IP específica."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:384
+msgid "Set TLS hostname to verify."
+msgstr "Establezca el nombre de host TLS para verificar."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:404
+msgid ""
+"Set the HTTP host used for the query. Use this parameter when the host of "
+"the URL address is an IP address."
+msgstr ""
+"Establezca el host HTTP utilizado para la consulta. Use este parámetro "
+"cuando el host de la dirección URL sea una dirección IP."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:394
+msgid "Sets the server name indication for query."
+msgstr "Establece la indicación del nombre del servidor para la consulta."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:152
+msgid "Settings"
+msgstr "Configuraciones"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:268
+msgid "Skip Address Rules"
+msgstr "Omitir reglas de dirección"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:297
+msgid "Skip Cache"
+msgstr "Omitir caché"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:297
+msgid "Skip Cache."
+msgstr "Omitir caché."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:291
+msgid "Skip Dualstack Selection"
+msgstr "Omitir selección de pila doble"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:292
+msgid "Skip Dualstack Selection."
+msgstr "Omitir selección de pila doble."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:280
+msgid "Skip Ipset Rule"
+msgstr "Omitir regla de Ipset"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:274
+msgid "Skip Nameserver Rule"
+msgstr "Omitir regla de servidor de nombres"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:286
+msgid "Skip SOA Address Rule"
+msgstr "Omitir regla de dirección SOA"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:287
+msgid "Skip SOA address rules."
+msgstr "Omita las reglas de dirección SOA."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:262
+msgid "Skip Speed Check"
+msgstr "Omitir comprobación de velocidad"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:269
+msgid "Skip address rules."
+msgstr "Omitir reglas de dirección."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:281
+msgid "Skip ipset rules."
+msgstr "Omitir las reglas de ipset."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:275
+msgid "Skip nameserver rules."
+msgstr "Omitir las reglas del servidor de nombres."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:128
+#: applications/luci-app-smartdns/root/usr/share/luci/menu.d/luci-app-smartdns.json:3
+msgid "SmartDNS"
+msgstr "SmartDNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:129
+msgid "SmartDNS Server"
+msgstr "Servidor SmartDNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:130
+msgid ""
+"SmartDNS is a local high-performance DNS server, supports finding fastest "
+"IP, supports ad filtering, and supports avoiding DNS poisoning."
+msgstr ""
+"SmartDNS es un servidor DNS local de alto rendimiento, admite la búsqueda de "
+"la IP más rápida, admite el filtrado de anuncios y evita el envenenamiento "
+"de DNS."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:466
+msgid "SmartDNS official website"
+msgstr "Sitio web oficial de SmartDNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:206
+msgid "SmartDNS redirect mode"
+msgstr "Modo de redireccionamiento SmartDNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:171
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:243
+msgid "Smartdns local server port"
+msgstr "Puerto del servidor local Smartdns"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:165
+msgid "Smartdns server name"
+msgstr "Nombre del servidor de Smartdns"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:438
+msgid ""
+"Specify an IP address to return for any host in the given domains, Queries "
+"in the domains are never forwarded and always replied to with the specified "
+"IP address which may be IPv4 or IPv6."
+msgstr ""
+"Especifique una dirección IP para devolver para cualquier host en los "
+"dominios dados, las consultas en los dominios nunca se reenvían y siempre se "
+"responden con la dirección IP especificada que puede ser IPv4 o IPv6."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:178
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:250
+msgid "TCP Server"
+msgstr "Servidor TCP"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:383
+msgid "TLS Hostname Verify"
+msgstr "Verificar nombre de host TLS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:393
+msgid "TLS SNI name"
+msgstr "Nombre SNI de TLS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:412
+msgid "TLS SPKI Pinning"
+msgstr "TLS SPKI Anclado"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:219
+msgid "TTL for all domain result."
+msgstr "TTL para todos los resultados de dominio."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:461
+msgid "Technical Support"
+msgstr "Soporte técnico"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:323
+msgid "Upstream Servers"
+msgstr "Servidores aguas arriba"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:324
+msgid ""
+"Upstream Servers, support UDP, TCP protocol. Please configure multiple DNS "
+"servers, including multiple foreign DNS servers."
+msgstr ""
+"Servidores aguas arriba, soporte UDP, protocolo TCP. Configure varios "
+"servidores DNS, incluidos varios servidores DNS externos."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:413
+msgid ""
+"Used to verify the validity of the TLS server, The value is Base64 encoded "
+"SPKI fingerprint, leaving blank to indicate that the validity of TLS is not "
+"verified."
+msgstr ""
+"Se utiliza para verificar la validez del servidor TLS. El valor es la huella "
+"digital SPKI codificada en Base64, y se deja en blanco para indicar que no "
+"se verifica la validez de TLS."
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:361
+msgid "https"
+msgstr "https"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:342
+msgid "ip"
+msgstr "ip"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:208
+msgid "none"
+msgstr "ninguno"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:467
+msgid "open website"
+msgstr "abrir sitio web"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:347
+msgid "port"
+msgstr "puerto"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:308
+msgid "smartdns custom settings"
+msgstr "configuraciones personalizadas de smartdns"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:359
+msgid "tcp"
+msgstr "tcp"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:360
+msgid "tls"
+msgstr "tls"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:356
+msgid "type"
+msgstr "tipo"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:358
+msgid "udp"
+msgstr "udp"
+
+#~ msgid "DNS Server group belongs to,"
+#~ msgstr "El grupo del servidor DNS pertenece a,"
+
+#~ msgid ""
+#~ "SmartDNS is a local high-performance DNS server, supports finding fastest "
+#~ "IP,"
+#~ msgstr ""
+#~ "SmartDNS es un servidor DNS local de alto rendimiento, admite la búsqueda "
+#~ "de IP más rápida,"
+
+#~ msgid ""
+#~ "Specify an IP address to return for any host in the given domains, "
+#~ "Queries in the domains are never"
+#~ msgstr ""
+#~ "Especifique una dirección IP para devolver para cualquier host en los "
+#~ "dominios dados, las consultas en los dominios nunca son"
+
+#~ msgid ""
+#~ "Upstream Servers, support UDP, TCP protocol. Please configure multiple "
+#~ "DNS servers,"
+#~ msgstr ""
+#~ "Servidores aguas arriba, soporte UDP, protocolo TCP. Configura varios "
+#~ "servidores DNS,"
+
+#~ msgid ""
+#~ "Used to verify the validity of the TLS server, The value is Base64 "
+#~ "encoded SPKI fingerprint,"
+#~ msgstr ""
+#~ "Se utiliza para verificar la validez del servidor TLS. El valor es la "
+#~ "huella digital SPKI codificada en Base64,"
diff --git a/applications/luci-app-smartdns/po/templates/smartdns.pot b/applications/luci-app-smartdns/po/templates/smartdns.pot
new file mode 100644
index 0000000000..2f61dc4528
--- /dev/null
+++ b/applications/luci-app-smartdns/po/templates/smartdns.pot
@@ -0,0 +1,448 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:424
+msgid "Additional Args for upstream dns servers"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:423
+msgid "Additional Server Args"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:330
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:430
+msgid "Advanced Settings"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:201
+msgid ""
+"Attempts to serve old responses from cache with a TTL of 0 in the response "
+"without waiting for the actual resolution to finish."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:215
+msgid "Cache Size"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:146
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:451
+msgid ""
+"Configure IP blacklists that will be filtered from the results of specific "
+"DNS server."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:157
+msgid "Custom Settings"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:339
+msgid "DNS Server Name"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:367
+msgid ""
+"DNS Server group belongs to, used with nameserver, such as office, home."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:342
+msgid "DNS Server ip"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:347
+msgid "DNS Server port"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:356
+msgid "DNS Server type"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:215
+msgid "DNS domain result cache size"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:95
+msgid "Dnsmasq Forwared To Smartdns Failure"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:263
+msgid "Do not check speed."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:433
+msgid "Domain Address"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:219
+msgid "Domain TTL"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:232
+msgid "Domain TTL Max"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:223
+msgid "Domain TTL Min"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:194
+msgid "Domain prefetch"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:475
+msgid "Donate"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:474
+msgid "Donate to smartdns"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:188
+msgid "Dual-stack IP Selection"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:237
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:333
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:189
+msgid "Enable IP selection between IPV4 and IPV6"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:183
+msgid "Enable IPV6 DNS Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:178
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:250
+msgid "Enable TCP DNS Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:195
+msgid "Enable domain prefetch, accelerate domain response speed."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:238
+msgid "Enable or disable second DNS server."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
+msgid "Enable or disable smartdns server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:377
+msgid "Filtering IP with blacklist"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:302
+msgid "Force AAAA SOA"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:302
+msgid "Force AAAA SOA."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:152
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:155
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:329
+msgid "General Settings"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:318
+msgid "Generate Coredump"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:319
+msgid ""
+"Generate Coredump file when smartdns crash, coredump file is located at /tmp/"
+"smartdns.xxx.core."
+msgstr ""
+
+#: applications/luci-app-smartdns/root/usr/share/rpcd/acl.d/luci-app-smartdns.json:3
+msgid "Grant access to LuCI app smartdns"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:403
+msgid "HTTP Host"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:434
+msgid "IP Blacklist"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:376
+msgid "IP Blacklist Filtering"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:103
+msgid "IPV4 53 Port Redirect Failure"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:109
+msgid "IPV6 53 Port Redirect Failure"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:183
+msgid "IPV6 Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:462
+msgid "If you like this software, please buy me a cup of coffee."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:171
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:243
+msgid "Local Port"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:233
+msgid "Maximum TTL for all domain result."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:224
+msgid "Minimum TTL for all domain result."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:86
+msgid "NOT RUNNING"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:256
+msgid "Query DNS through specific dns server group, such as office, home."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:84
+msgid "RUNNING"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:206
+msgid "Redirect"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:210
+msgid "Redirect 53 port to SmartDNS"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:209
+msgid "Run as dnsmasq upstream server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:156
+msgid "Second Server Settings"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:200
+msgid "Serve expired"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:255
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:367
+msgid "Server Group"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:165
+msgid "Server Name"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:433
+msgid "Set Specific domain ip address."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:434
+msgid "Set Specific ip blacklist."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:384
+msgid "Set TLS hostname to verify."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:404
+msgid ""
+"Set the HTTP host used for the query. Use this parameter when the host of "
+"the URL address is an IP address."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:394
+msgid "Sets the server name indication for query."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:152
+msgid "Settings"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:268
+msgid "Skip Address Rules"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:297
+msgid "Skip Cache"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:297
+msgid "Skip Cache."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:291
+msgid "Skip Dualstack Selection"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:292
+msgid "Skip Dualstack Selection."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:280
+msgid "Skip Ipset Rule"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:274
+msgid "Skip Nameserver Rule"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:286
+msgid "Skip SOA Address Rule"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:287
+msgid "Skip SOA address rules."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:262
+msgid "Skip Speed Check"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:269
+msgid "Skip address rules."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:281
+msgid "Skip ipset rules."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:275
+msgid "Skip nameserver rules."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:128
+#: applications/luci-app-smartdns/root/usr/share/luci/menu.d/luci-app-smartdns.json:3
+msgid "SmartDNS"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:129
+msgid "SmartDNS Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:130
+msgid ""
+"SmartDNS is a local high-performance DNS server, supports finding fastest "
+"IP, supports ad filtering, and supports avoiding DNS poisoning."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:466
+msgid "SmartDNS official website"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:206
+msgid "SmartDNS redirect mode"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:171
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:243
+msgid "Smartdns local server port"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:165
+msgid "Smartdns server name"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:438
+msgid ""
+"Specify an IP address to return for any host in the given domains, Queries "
+"in the domains are never forwarded and always replied to with the specified "
+"IP address which may be IPv4 or IPv6."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:178
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:250
+msgid "TCP Server"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:383
+msgid "TLS Hostname Verify"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:393
+msgid "TLS SNI name"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:412
+msgid "TLS SPKI Pinning"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:219
+msgid "TTL for all domain result."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:461
+msgid "Technical Support"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:323
+msgid "Upstream Servers"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:324
+msgid ""
+"Upstream Servers, support UDP, TCP protocol. Please configure multiple DNS "
+"servers, including multiple foreign DNS servers."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:413
+msgid ""
+"Used to verify the validity of the TLS server, The value is Base64 encoded "
+"SPKI fingerprint, leaving blank to indicate that the validity of TLS is not "
+"verified."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:361
+msgid "https"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:342
+msgid "ip"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:208
+msgid "none"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:467
+msgid "open website"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:347
+msgid "port"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:308
+msgid "smartdns custom settings"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:359
+msgid "tcp"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:360
+msgid "tls"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:356
+msgid "type"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:358
+msgid "udp"
+msgstr ""
diff --git a/applications/luci-app-smartdns/po/zh_Hans/smartdns.po b/applications/luci-app-smartdns/po/zh_Hans/smartdns.po
new file mode 100644
index 0000000000..c1d7634b1c
--- /dev/null
+++ b/applications/luci-app-smartdns/po/zh_Hans/smartdns.po
@@ -0,0 +1,455 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:424
+msgid "Additional Args for upstream dns servers"
+msgstr "额外的上游DNS服务器参数"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:423
+msgid "Additional Server Args"
+msgstr "额外的服务器参数"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:330
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:430
+msgid "Advanced Settings"
+msgstr "高级设置"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:201
+msgid ""
+"Attempts to serve old responses from cache with a TTL of 0 in the response "
+"without waiting for the actual resolution to finish."
+msgstr "查询性能优化,有请求时尝试回应TTL为0的过期记录,以避免查询等待。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:215
+msgid "Cache Size"
+msgstr "缓存大小"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:146
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:451
+msgid ""
+"Configure IP blacklists that will be filtered from the results of specific "
+"DNS server."
+msgstr "配置需要从指定域名服务器结果过滤的IP黑名单。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:157
+msgid "Custom Settings"
+msgstr "自定义设置"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:339
+msgid "DNS Server Name"
+msgstr "DNS服务器名称"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:367
+msgid ""
+"DNS Server group belongs to, used with nameserver, such as office, home."
+msgstr "DNS服务器所属组, 配合nameserver使用,例如:office,home。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:342
+msgid "DNS Server ip"
+msgstr "DNS服务器IP"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:347
+msgid "DNS Server port"
+msgstr "DNS服务器端口"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:356
+msgid "DNS Server type"
+msgstr "协议类型"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:215
+msgid "DNS domain result cache size"
+msgstr "缓存DNS的结果,缓存大小,配置零则不缓存"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:95
+msgid "Dnsmasq Forwared To Smartdns Failure"
+msgstr "重定向dnsmasq到smartdns失败"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:263
+msgid "Do not check speed."
+msgstr "禁用测速。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:433
+msgid "Domain Address"
+msgstr "域名地址"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:219
+msgid "Domain TTL"
+msgstr "域名TTL"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:232
+msgid "Domain TTL Max"
+msgstr "域名TTL最大值"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:223
+msgid "Domain TTL Min"
+msgstr "域名TTL最小值"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:194
+msgid "Domain prefetch"
+msgstr "域名预加载"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:475
+msgid "Donate"
+msgstr "捐助"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:474
+msgid "Donate to smartdns"
+msgstr "捐助smartdns项目"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:188
+msgid "Dual-stack IP Selection"
+msgstr "双栈IP优选"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:237
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:333
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:189
+msgid "Enable IP selection between IPV4 and IPV6"
+msgstr "启用或禁用IPV4,IPV6间的IP优选策略。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:183
+msgid "Enable IPV6 DNS Server"
+msgstr "启用IPV6服务器"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:178
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:250
+msgid "Enable TCP DNS Server"
+msgstr "启用TCP服务器"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:195
+msgid "Enable domain prefetch, accelerate domain response speed."
+msgstr "启用域名预加载,加速域名响应速度。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:238
+msgid "Enable or disable second DNS server."
+msgstr "是否启用第二DNS服务器。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
+msgid "Enable or disable smartdns server"
+msgstr "启用或禁用SmartDNS服务"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:377
+msgid "Filtering IP with blacklist"
+msgstr "使用IP黑名单过滤"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:302
+msgid "Force AAAA SOA"
+msgstr "停用IPV6地址解析"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:302
+msgid "Force AAAA SOA."
+msgstr "停用IPV6地址解析。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:152
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:155
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:329
+msgid "General Settings"
+msgstr "基本设置"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:318
+msgid "Generate Coredump"
+msgstr "生成coredump"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:319
+msgid ""
+"Generate Coredump file when smartdns crash, coredump file is located at /tmp/"
+"smartdns.xxx.core."
+msgstr ""
+"当smartdns异常时生成coredump文件,coredump文件在/tmp/smartdns.xxx.core."
+
+#: applications/luci-app-smartdns/root/usr/share/rpcd/acl.d/luci-app-smartdns.json:3
+msgid "Grant access to LuCI app smartdns"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:403
+msgid "HTTP Host"
+msgstr "HTTP主机"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:434
+msgid "IP Blacklist"
+msgstr "IP黑名单"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:376
+msgid "IP Blacklist Filtering"
+msgstr "IP黑名单过滤"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:103
+msgid "IPV4 53 Port Redirect Failure"
+msgstr "IPV4 53端口重定向失败"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:109
+msgid "IPV6 53 Port Redirect Failure"
+msgstr "IPV6 53端口重定向失败"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:183
+msgid "IPV6 Server"
+msgstr "IPV6服务器"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:462
+msgid "If you like this software, please buy me a cup of coffee."
+msgstr "如果本软件对你有帮助,请给作者加个蛋。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:171
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:243
+msgid "Local Port"
+msgstr "本地端口"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:233
+msgid "Maximum TTL for all domain result."
+msgstr "设置所有域名的TTL最大值"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:224
+msgid "Minimum TTL for all domain result."
+msgstr "设置所有域名的TTL最小值"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:86
+msgid "NOT RUNNING"
+msgstr "未运行"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:256
+msgid "Query DNS through specific dns server group, such as office, home."
+msgstr "使用指定服务器组查询,比如office, home。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:84
+msgid "RUNNING"
+msgstr "运行中"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:206
+msgid "Redirect"
+msgstr "重定向"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:210
+msgid "Redirect 53 port to SmartDNS"
+msgstr "重定向53端口到SmartDNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:209
+msgid "Run as dnsmasq upstream server"
+msgstr "作为dnsmasq的上游服务器"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:156
+msgid "Second Server Settings"
+msgstr "第二DNS服务器"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:200
+msgid "Serve expired"
+msgstr "缓存过期服务"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:255
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:367
+msgid "Server Group"
+msgstr "服务器组"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:165
+msgid "Server Name"
+msgstr "服务器名称"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:433
+msgid "Set Specific domain ip address."
+msgstr "指定特定域名的IP地址"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:434
+msgid "Set Specific ip blacklist."
+msgstr "设置IP黑名单列表"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:384
+msgid "Set TLS hostname to verify."
+msgstr "设置校验TLS主机名。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:404
+msgid ""
+"Set the HTTP host used for the query. Use this parameter when the host of "
+"the URL address is an IP address."
+msgstr "设置查询时使用的HTTP主机,当URL地址的host是IP地址时,使用此参数。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:394
+msgid "Sets the server name indication for query."
+msgstr "设置查询时使用的服务器SNI名称。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:152
+msgid "Settings"
+msgstr "设置"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:268
+msgid "Skip Address Rules"
+msgstr "跳过address规则"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:297
+msgid "Skip Cache"
+msgstr "跳过cache"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:297
+msgid "Skip Cache."
+msgstr "跳过cache。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:291
+msgid "Skip Dualstack Selection"
+msgstr "跳过双栈优选"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:292
+msgid "Skip Dualstack Selection."
+msgstr "跳过双栈优选。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:280
+msgid "Skip Ipset Rule"
+msgstr "跳过ipset规则"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:274
+msgid "Skip Nameserver Rule"
+msgstr "跳过Nameserver规则"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:286
+msgid "Skip SOA Address Rule"
+msgstr "跳过address SOA(#)规则"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:287
+msgid "Skip SOA address rules."
+msgstr "跳过address SOA(#)规则。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:262
+msgid "Skip Speed Check"
+msgstr "跳过测速"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:269
+msgid "Skip address rules."
+msgstr "跳过address规则。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:281
+msgid "Skip ipset rules."
+msgstr "跳过ipset规则。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:275
+msgid "Skip nameserver rules."
+msgstr "跳过Nameserver规则。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:128
+#: applications/luci-app-smartdns/root/usr/share/luci/menu.d/luci-app-smartdns.json:3
+msgid "SmartDNS"
+msgstr "SmartDNS"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:129
+msgid "SmartDNS Server"
+msgstr "SmartDNS 服务器"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:130
+msgid ""
+"SmartDNS is a local high-performance DNS server, supports finding fastest "
+"IP, supports ad filtering, and supports avoiding DNS poisoning."
+msgstr "SmartDNS是一个本地高性能DNS服务器,支持返回最快IP,支持广告过滤。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:466
+msgid "SmartDNS official website"
+msgstr "SmartDNS官方网站"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:206
+msgid "SmartDNS redirect mode"
+msgstr "SmartDNS 重定向模式"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:171
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:243
+msgid "Smartdns local server port"
+msgstr "SmartDNS本地服务端口"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:165
+msgid "Smartdns server name"
+msgstr "SmartDNS的服务器名称,默认为smartdns,留空为主机名"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:438
+msgid ""
+"Specify an IP address to return for any host in the given domains, Queries "
+"in the domains are never forwarded and always replied to with the specified "
+"IP address which may be IPv4 or IPv6."
+msgstr ""
+"配置特定域名返回特定的IP地址,域名查询将不到上游服务器请求,直接返回配置的IP"
+"地址,可用于广告屏蔽。"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:178
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:250
+msgid "TCP Server"
+msgstr "TCP服务器"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:383
+msgid "TLS Hostname Verify"
+msgstr "校验TLS主机名"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:393
+msgid "TLS SNI name"
+msgstr "TLS SNI名称"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:412
+msgid "TLS SPKI Pinning"
+msgstr "TLS SPKI 指纹"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:219
+msgid "TTL for all domain result."
+msgstr "设置所有域名的TTL值"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:461
+msgid "Technical Support"
+msgstr "技术支持"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:323
+msgid "Upstream Servers"
+msgstr "上游服务器"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:324
+msgid ""
+"Upstream Servers, support UDP, TCP protocol. Please configure multiple DNS "
+"servers, including multiple foreign DNS servers."
+msgstr ""
+"上游DNS服务器列表,支持UDP,TCP协议,请配置多个上游DNS服务器,包括多个国内外"
+"服务器"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:413
+msgid ""
+"Used to verify the validity of the TLS server, The value is Base64 encoded "
+"SPKI fingerprint, leaving blank to indicate that the validity of TLS is not "
+"verified."
+msgstr ""
+"用于校验TLS服务器的有效性,数值为Base64编码的SPKI指纹, 留空表示不验证TLS的合"
+"法性"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:361
+msgid "https"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:342
+msgid "ip"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:208
+msgid "none"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:467
+msgid "open website"
+msgstr "打开网站"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:347
+msgid "port"
+msgstr "端口"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:308
+msgid "smartdns custom settings"
+msgstr "smartdns 自定义设置,具体配置参数参考指导"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:359
+msgid "tcp"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:360
+msgid "tls"
+msgstr ""
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:356
+msgid "type"
+msgstr "类型"
+
+#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:358
+msgid "udp"
+msgstr ""
diff --git a/applications/luci-app-smartdns/root/usr/share/luci/menu.d/luci-app-smartdns.json b/applications/luci-app-smartdns/root/usr/share/luci/menu.d/luci-app-smartdns.json
new file mode 100644
index 0000000000..91b4402484
--- /dev/null
+++ b/applications/luci-app-smartdns/root/usr/share/luci/menu.d/luci-app-smartdns.json
@@ -0,0 +1,12 @@
+{
+ "admin/services/smartdns": {
+ "title": "SmartDNS",
+ "action": {
+ "type": "view",
+ "path": "smartdns/smartdns"
+ },
+ "depends": {
+ "uci": { "smartdns": true }
+ }
+ }
+}
diff --git a/applications/luci-app-smartdns/root/usr/share/rpcd/acl.d/luci-app-smartdns.json b/applications/luci-app-smartdns/root/usr/share/rpcd/acl.d/luci-app-smartdns.json
new file mode 100644
index 0000000000..78fbb1c509
--- /dev/null
+++ b/applications/luci-app-smartdns/root/usr/share/rpcd/acl.d/luci-app-smartdns.json
@@ -0,0 +1,23 @@
+{
+ "luci-app-smartdns": {
+ "description": "Grant access to LuCI app smartdns",
+ "read": {
+ "file": {
+ "/etc/smartdns/*": [ "read" ],
+ "/usr/sbin/iptables -t nat -nL PREROUTING": [ "exec" ],
+ "/usr/sbin/ip6tables -t nat -nL PREROUTING": [ "exec" ],
+ "/usr/sbin/smartdns": [ "exec" ]
+ },
+ "ubus": {
+ "service": [ "list" ]
+ },
+ "uci": [ "smartdns" ]
+ },
+ "write": {
+ "file": {
+ "/etc/smartdns/*": [ "write" ]
+ },
+ "uci": [ "smartdns" ]
+ }
+ }
+}