Add source rulesets and mixed domain/IP list support
This commit is contained in:
+163
-137
File diff suppressed because it is too large
Load Diff
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-04-11 22:33+0300\n"
|
||||
"PO-Revision-Date: 2026-04-11 22:33+0300\n"
|
||||
"POT-Creation-Date: 2026-04-12 03:08+0300\n"
|
||||
"PO-Revision-Date: 2026-04-12 03:08+0300\n"
|
||||
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -36,7 +36,7 @@ msgstr ""
|
||||
msgid "A latency-tested group of proxy URLs for this node"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1702
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1731
|
||||
msgid "A latency-tested group of proxy URLs for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -44,12 +44,12 @@ msgstr ""
|
||||
msgid "A manual group of proxy URLs for this node"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1684
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713
|
||||
msgid "A manual group of proxy URLs for this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1526
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1558
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1551
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
|
||||
@@ -61,15 +61,19 @@ msgstr ""
|
||||
msgid "Add a section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2086
|
||||
msgid "Add URLs or local paths to .srs lists"
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2130
|
||||
msgid "Add URLs or local paths to .lst lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2115
|
||||
msgid "Add URLs or local paths to .srs / .json lists"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:106
|
||||
msgid "Additional marking rules found"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:249
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:253
|
||||
msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall."
|
||||
msgstr ""
|
||||
|
||||
@@ -78,7 +82,7 @@ msgid "An error occurred while saving the form:"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1797
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1826
|
||||
msgid "Applicable for SOCKS and Shadowsocks links"
|
||||
msgstr ""
|
||||
|
||||
@@ -110,7 +114,7 @@ msgstr ""
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:47
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:51
|
||||
msgid "Bootstrap DNS server"
|
||||
msgstr ""
|
||||
|
||||
@@ -122,15 +126,15 @@ msgstr ""
|
||||
msgid "Browser is using FakeIP correctly"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2020
|
||||
msgid "Built-in rule sets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:354
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:382
|
||||
msgid "Cache File Path"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:368
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:396
|
||||
msgid "Cache file path cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -176,11 +180,11 @@ msgstr ""
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1539
|
||||
msgid "Conditions"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:341
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:369
|
||||
msgid "Config File Path"
|
||||
msgstr ""
|
||||
|
||||
@@ -188,16 +192,16 @@ msgstr ""
|
||||
msgid "Configuration for Podkop Plus service"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1639
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1668
|
||||
msgid "Connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1622
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1651
|
||||
msgid "Connection Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1654
|
||||
msgid "Connection URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -217,11 +221,11 @@ msgstr ""
|
||||
msgid "Dashboard currently unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:224
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:228
|
||||
msgid "Delay in milliseconds before reloading Podkop Plus after interface UP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:231
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:235
|
||||
msgid "Delay value cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -242,11 +246,11 @@ msgstr ""
|
||||
msgid "Disable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:267
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:271
|
||||
msgid "Disable QUIC"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:268
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:272
|
||||
msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming"
|
||||
msgstr ""
|
||||
|
||||
@@ -259,18 +263,18 @@ msgid "DNS on router"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1891
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:21
|
||||
msgid "DNS over HTTPS (DoH)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1863
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1892
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:22
|
||||
msgid "DNS over TLS (DoT)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1889
|
||||
msgid "DNS protocol"
|
||||
msgstr ""
|
||||
|
||||
@@ -278,20 +282,20 @@ msgstr ""
|
||||
msgid "DNS Protocol"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:14
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18
|
||||
msgid "DNS Protocol Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:70
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:74
|
||||
msgid "DNS Rewrite TTL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1907
|
||||
msgid "DNS server"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:238
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:26
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:30
|
||||
msgid "DNS Server"
|
||||
msgstr ""
|
||||
|
||||
@@ -303,19 +307,23 @@ msgstr ""
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1961
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2129
|
||||
msgid "Domain and IP Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990
|
||||
msgid "Domain keyword"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1968
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1997
|
||||
msgid "Domain regex"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1933
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962
|
||||
msgid "Domains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:332
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:360
|
||||
msgid "Dont Touch My DHCP!"
|
||||
msgstr ""
|
||||
|
||||
@@ -328,15 +336,15 @@ msgstr ""
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:300
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:328
|
||||
msgid "Download external rule sets through one of the enabled proxy sections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:290
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:318
|
||||
msgid "Download Lists via Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:299
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:327
|
||||
msgid "Download Lists via specific proxy section"
|
||||
msgstr ""
|
||||
|
||||
@@ -344,7 +352,7 @@ msgstr ""
|
||||
msgid "Download Node"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:291
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:319
|
||||
msgid "Downloading all lists via specific Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -360,7 +368,7 @@ msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:10
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1516
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1541
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
@@ -368,7 +376,7 @@ msgstr ""
|
||||
msgid "Enable a dedicated DNS resolver when this node uses an interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1849
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878
|
||||
msgid "Enable a dedicated DNS resolver when this section uses an interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -376,56 +384,56 @@ msgstr ""
|
||||
msgid "Enable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1900
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1929
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:128
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:132
|
||||
msgid "Enable Output Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:239
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:243
|
||||
msgid "Enable YACD"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:248
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:252
|
||||
msgid "Enable YACD WAN Access"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1662
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1691
|
||||
msgid "Enter a complete sing-box outbound object"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1723
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1752
|
||||
msgid "Every 3 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1750
|
||||
msgid "Every 30 seconds"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1724
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1753
|
||||
msgid "Every 5 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1751
|
||||
msgid "Every minute"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1947
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976
|
||||
msgid "Exact full domain"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:408
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:436
|
||||
msgid "Exclude NTP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:437
|
||||
msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -433,7 +441,7 @@ msgstr ""
|
||||
msgid "Expecting: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1901
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1930
|
||||
msgid "Expose this section as a local HTTP+SOCKS proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -475,7 +483,7 @@ msgstr ""
|
||||
msgid "How often this remote rule set should be refreshed"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1652
|
||||
msgid "How to configure the proxy connection for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -485,20 +493,20 @@ msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:23
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1629
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1808
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1658
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1837
|
||||
msgid "Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:191
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:195
|
||||
msgid "Interface Monitoring"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:223
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:227
|
||||
msgid "Interface Monitoring Delay"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:192
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:196
|
||||
msgid "Interface monitoring for Bad WAN"
|
||||
msgstr ""
|
||||
|
||||
@@ -579,7 +587,7 @@ msgstr ""
|
||||
msgid "Invalid path format. Path must start with \"/\" and contain valid characters"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1928
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1957
|
||||
#: src/validators/validateShadowsocksUrl.ts:85
|
||||
msgid "Invalid port number. Must be between 1 and 65535"
|
||||
msgstr ""
|
||||
@@ -685,7 +693,7 @@ msgstr ""
|
||||
msgid "IP address 0.0.0.0 is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1940
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969
|
||||
msgid "IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -701,7 +709,11 @@ msgstr ""
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:278
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1504
|
||||
msgid "List must be a direct .lst URL or a local .lst path"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:282
|
||||
msgid "List Update Frequency"
|
||||
msgstr ""
|
||||
|
||||
@@ -713,7 +725,7 @@ msgstr ""
|
||||
msgid "Local file path to a sing-box rule set"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:390
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:418
|
||||
msgid "Log Level"
|
||||
msgstr ""
|
||||
|
||||
@@ -721,32 +733,32 @@ msgstr ""
|
||||
msgid "Main DNS"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1970
|
||||
msgid "Match destination IPs or subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991
|
||||
msgid "Match domains containing a substring"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1963
|
||||
msgid "Match domains including all subdomains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1998
|
||||
msgid "Match domains using a regular expression"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1948
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1977
|
||||
msgid "Match only one exact full domain name"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2005
|
||||
msgid "Match source IPs or subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1735
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764
|
||||
msgid "Maximum response time delta in milliseconds"
|
||||
msgstr ""
|
||||
|
||||
@@ -754,20 +766,20 @@ msgstr ""
|
||||
msgid "Memory Usage"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1912
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:200
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:204
|
||||
msgid "Monitored Interfaces"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1757
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1786
|
||||
msgid "Must be a number in the range of 50 - 1000"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1588
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1617
|
||||
msgid "NFQWS Strategy"
|
||||
msgstr ""
|
||||
|
||||
@@ -792,7 +804,7 @@ msgstr ""
|
||||
msgid "Not implement yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:523
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:525
|
||||
msgid "not installed"
|
||||
msgstr ""
|
||||
|
||||
@@ -829,8 +841,8 @@ msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:22
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1628
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1661
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1657
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1690
|
||||
msgid "Outbound JSON"
|
||||
msgstr ""
|
||||
|
||||
@@ -838,7 +850,7 @@ msgstr ""
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:137
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:141
|
||||
msgid "Output Network Interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -850,15 +862,15 @@ msgstr ""
|
||||
msgid "Path cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:372
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:400
|
||||
msgid "Path must be absolute (start with /)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:381
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409
|
||||
msgid "Path must contain at least one directory (like /tmp/cache.db)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:376
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:404
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr ""
|
||||
|
||||
@@ -879,15 +891,15 @@ msgstr ""
|
||||
msgid "Podkop Plus Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:333
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:361
|
||||
msgid "Podkop Plus will not modify your DHCP configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1920
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1949
|
||||
msgid "Port cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1913
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1942
|
||||
msgid "Port for the local mixed proxy of this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -903,7 +915,7 @@ msgstr ""
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2059
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr ""
|
||||
|
||||
@@ -915,7 +927,7 @@ msgstr ""
|
||||
msgid "Remote URL to a sing-box rule set"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1848
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1877
|
||||
msgid "Resolver for interface outbound"
|
||||
msgstr ""
|
||||
|
||||
@@ -943,21 +955,19 @@ msgstr ""
|
||||
msgid "Router DNS is routed through sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:447
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1468
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1477
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480
|
||||
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1496
|
||||
msgid "Rule set must be a direct .srs / .json URL or a local .srs / .json path"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:48
|
||||
msgid "Rule set URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2085
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2114
|
||||
msgid "Rule sets"
|
||||
msgstr ""
|
||||
|
||||
@@ -989,7 +999,7 @@ msgstr ""
|
||||
msgid "Run Diagnostic"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2078
|
||||
msgid "Russia inside restrictions"
|
||||
msgstr ""
|
||||
|
||||
@@ -997,7 +1007,7 @@ msgstr ""
|
||||
msgid "Save error"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:259
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:263
|
||||
msgid "Secret key for authenticating remote access to YACD when WAN access is enabled."
|
||||
msgstr ""
|
||||
|
||||
@@ -1005,7 +1015,7 @@ msgstr ""
|
||||
msgid "Section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1545
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1570
|
||||
msgid "Section name"
|
||||
msgstr ""
|
||||
|
||||
@@ -1013,47 +1023,43 @@ msgstr ""
|
||||
msgid "Sections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1992
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2021
|
||||
msgid "Select a predefined list for routing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19
|
||||
msgid "Select DNS protocol to use"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:279
|
||||
msgid "Select how often the domain or subnet lists are updated automatically"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:27
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:31
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:355
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:383
|
||||
msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:342
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:370
|
||||
msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:391
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419
|
||||
msgid "Select the log level for sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:92
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:96
|
||||
msgid "Select the network interface from which the traffic will originate"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:138
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:142
|
||||
msgid "Select the network interface to which the traffic will originate"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:201
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:205
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1683
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1712
|
||||
msgid "Selector connections"
|
||||
msgstr ""
|
||||
|
||||
@@ -1061,7 +1067,7 @@ msgstr ""
|
||||
msgid "Selector Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1995
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2024
|
||||
msgid "Service list"
|
||||
msgstr ""
|
||||
|
||||
@@ -1070,7 +1076,7 @@ msgid "Services info"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:394
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1538
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
@@ -1107,15 +1113,15 @@ msgstr ""
|
||||
msgid "Source file"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1975
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2004
|
||||
msgid "Source IPs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:91
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:95
|
||||
msgid "Source Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:420
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:448
|
||||
msgid "Specify a local IP address to be excluded from routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -1151,7 +1157,7 @@ msgstr ""
|
||||
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:48
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:52
|
||||
msgid "The DNS server used to look up the IP address of an upstream DNS server"
|
||||
msgstr ""
|
||||
|
||||
@@ -1180,7 +1186,7 @@ msgstr ""
|
||||
msgid "This option requires a value."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:71
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:75
|
||||
msgid "Time in seconds for DNS record caching (default: 60)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1196,11 +1202,11 @@ msgstr ""
|
||||
msgid "Troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:82
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:86
|
||||
msgid "TTL must be a positive number"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:77
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:81
|
||||
msgid "TTL value cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -1208,12 +1214,12 @@ msgstr ""
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:23
|
||||
msgid "UDP (Unprotected DNS)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1825
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
@@ -1265,11 +1271,11 @@ msgstr ""
|
||||
msgid "URL must use one of the following protocols:"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1701
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1730
|
||||
msgid "URLTest connections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1748
|
||||
msgid "URLTest interval"
|
||||
msgstr ""
|
||||
|
||||
@@ -1281,7 +1287,7 @@ msgstr ""
|
||||
msgid "URLTest Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1734
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1763
|
||||
msgid "URLTest tolerance"
|
||||
msgstr ""
|
||||
|
||||
@@ -1290,7 +1296,7 @@ msgid "URLTest Tolerance"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1793
|
||||
msgid "URLTest URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -1298,10 +1304,18 @@ msgstr ""
|
||||
msgid "Use a network interface as the outbound for this node"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1809
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1838
|
||||
msgid "Use a network interface as the outbound for this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:312
|
||||
msgid "Use sing-box duration format like 1d, 12h or 30m"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:283
|
||||
msgid "Use sing-box duration format. Leave empty to disable automatic updates."
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateDns.ts:14
|
||||
#: src/validators/validateDns.ts:18
|
||||
#: src/validators/validateDomain.ts:13
|
||||
@@ -1330,32 +1344,32 @@ msgstr ""
|
||||
msgid "View logs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1546
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1571
|
||||
msgid "Visible name of this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1640
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1669
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2032
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2061
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2051
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2080
|
||||
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1559
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1584
|
||||
msgid "What Podkop Plus should do when this section matches"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:258
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:262
|
||||
msgid "YACD Secret Key"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:129
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:133
|
||||
msgid "You can select Output Network Interface, by default autodetect"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-04-11 01:33+0300\n"
|
||||
"PO-Revision-Date: 2026-04-11 01:33+0300\n"
|
||||
"POT-Creation-Date: 2026-04-12 06:08+0300\n"
|
||||
"PO-Revision-Date: 2026-04-12 06:08+0300\n"
|
||||
"Last-Translator: ushan0v\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -47,8 +47,11 @@ msgstr "Активные соединения"
|
||||
msgid "Add a section"
|
||||
msgstr "Добавить секцию"
|
||||
|
||||
msgid "Add URLs or local paths to .srs lists"
|
||||
msgstr "Добавляйте URL или локальные пути к спискам .srs"
|
||||
msgid "Add URLs or local paths to .lst lists"
|
||||
msgstr "Добавляйте URL или локальные пути к спискам .lst"
|
||||
|
||||
msgid "Add URLs or local paths to .srs / .json lists"
|
||||
msgstr "Добавляйте URL или локальные пути к спискам .srs / .json"
|
||||
|
||||
msgid "Additional marking rules found"
|
||||
msgstr "Найдены дополнительные правила маркировки"
|
||||
@@ -215,6 +218,9 @@ msgstr "Адрес DNS-сервера не может быть пустым"
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr "Не паникуйте, всё можно исправить, просто..."
|
||||
|
||||
msgid "Domain and IP Lists"
|
||||
msgstr "Списки доменов и IPs"
|
||||
|
||||
msgid "Domain keyword"
|
||||
msgstr "Ключевое слово домена"
|
||||
|
||||
@@ -497,6 +503,9 @@ msgstr "Ключевое слово не должно содержать про
|
||||
msgid "Latest"
|
||||
msgstr "Последняя"
|
||||
|
||||
msgid "List must be a direct .lst URL or a local .lst path"
|
||||
msgstr "Список должен быть прямым URL на .lst или локальным путём к .lst"
|
||||
|
||||
msgid "List Update Frequency"
|
||||
msgstr "Частота обновления списков"
|
||||
|
||||
@@ -668,8 +677,8 @@ msgstr "DNS роутера проходит через sing-box"
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr "Исключённые из маршрутизации IP-адреса"
|
||||
|
||||
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
||||
msgstr "Набор правил должен быть прямым URL на .srs или локальным путём к .srs"
|
||||
msgid "Rule set must be a direct .srs / .json URL or a local .srs / .json path"
|
||||
msgstr "Набор правил должен быть прямым URL на .srs / .json или локальным путём к .srs / .json"
|
||||
|
||||
msgid "Rule set URL"
|
||||
msgstr "URL набора правил"
|
||||
@@ -722,9 +731,6 @@ msgstr "Выберите предустановленный набор прав
|
||||
msgid "Select DNS protocol to use"
|
||||
msgstr "Выберите протокол DNS"
|
||||
|
||||
msgid "Select how often the domain or subnet lists are updated automatically"
|
||||
msgstr "Выберите частоту автоматического обновления списков доменов или подсетей."
|
||||
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr "Выберите или введите адрес DNS-сервера"
|
||||
|
||||
@@ -923,6 +929,12 @@ msgstr "Использовать сетевой интерфейс как outbou
|
||||
msgid "Use a network interface as the outbound for this section"
|
||||
msgstr "Использовать сетевой интерфейс как outbound для этой секции"
|
||||
|
||||
msgid "Use sing-box duration format like 1d, 12h or 30m"
|
||||
msgstr "Используйте формат длительности sing-box, например 1d, 12h или 30m"
|
||||
|
||||
msgid "Use sing-box duration format. Leave empty to disable automatic updates."
|
||||
msgstr "Используйте формат длительности sing-box. Оставьте поле пустым, чтобы отключить автоматическое обновление."
|
||||
|
||||
msgid "Valid"
|
||||
msgstr "Валидно"
|
||||
|
||||
|
||||
@@ -518,7 +518,9 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
},
|
||||
{
|
||||
key: 'Zapret',
|
||||
value: diagnosticsSystemInfo.zapret_installed
|
||||
value: diagnosticsSystemInfo.loading
|
||||
? 'loading'
|
||||
: diagnosticsSystemInfo.zapret_installed
|
||||
? diagnosticsSystemInfo.zapret_version
|
||||
: _('not installed'),
|
||||
},
|
||||
|
||||
@@ -111,6 +111,8 @@ export namespace Podkop {
|
||||
proxy_config_type?: ProxyConfigType;
|
||||
node?: string;
|
||||
rule_set?: string[];
|
||||
domain_ip_lists?: string[];
|
||||
update_interval?: string;
|
||||
proxy_string?: string;
|
||||
nfqws_opt?: string;
|
||||
selector_proxy_links?: string[];
|
||||
|
||||
@@ -4762,7 +4762,7 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
},
|
||||
{
|
||||
key: "Zapret",
|
||||
value: diagnosticsSystemInfo.zapret_installed ? diagnosticsSystemInfo.zapret_version : _("not installed")
|
||||
value: diagnosticsSystemInfo.loading ? "loading" : diagnosticsSystemInfo.zapret_installed ? diagnosticsSystemInfo.zapret_version : _("not installed")
|
||||
},
|
||||
{
|
||||
key: "OS",
|
||||
|
||||
@@ -1454,30 +1454,55 @@ function isBuiltinRulesetValue(value) {
|
||||
return Object.prototype.hasOwnProperty.call(main.DOMAIN_LIST_OPTIONS, value);
|
||||
}
|
||||
|
||||
function validateCustomRulesetReference(value) {
|
||||
function normalizeReferenceForExtensionCheck(value) {
|
||||
return `${value || ""}`.split(/[?#]/, 1)[0].toLowerCase();
|
||||
}
|
||||
|
||||
function hasAllowedReferenceExtension(value, extensions) {
|
||||
const normalized = normalizeReferenceForExtensionCheck(value);
|
||||
return extensions.some((extension) => normalized.endsWith(extension));
|
||||
}
|
||||
|
||||
function validateFileReference(value, extensions, errorMessage) {
|
||||
if (!value || value.length === 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (value.startsWith("http://") || value.startsWith("https://")) {
|
||||
const validation = main.validateUrl(value);
|
||||
if (validation.valid && value.endsWith(".srs")) {
|
||||
if (validation.valid && hasAllowedReferenceExtension(value, extensions)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return _("Rule set must be a direct .srs URL or a local .srs path");
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
if (value.startsWith("/")) {
|
||||
const validation = main.validatePath(value);
|
||||
if (validation.valid && value.endsWith(".srs")) {
|
||||
if (validation.valid && hasAllowedReferenceExtension(value, extensions)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return _("Rule set must be a direct .srs URL or a local .srs path");
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
return _("Rule set must be a direct .srs URL or a local .srs path");
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
function validateCustomRulesetReference(value) {
|
||||
return validateFileReference(
|
||||
value,
|
||||
[".srs", ".json"],
|
||||
_("Rule set must be a direct .srs / .json URL or a local .srs / .json path"),
|
||||
);
|
||||
}
|
||||
|
||||
function validatePlainListReference(value) {
|
||||
return validateFileReference(
|
||||
value,
|
||||
[".lst"],
|
||||
_("List must be a direct .lst URL or a local .lst path"),
|
||||
);
|
||||
}
|
||||
|
||||
function getRulesetReferences(section_id) {
|
||||
@@ -1562,9 +1587,13 @@ function createSectionContent(section) {
|
||||
o.default = "proxy";
|
||||
o.rmempty = false;
|
||||
o.modalonly = true;
|
||||
o.load = function () {
|
||||
o.cfgvalue = function (section_id) {
|
||||
return getRuleResolvedAction(section_id);
|
||||
};
|
||||
o.load = function (section_id) {
|
||||
return ensureZapretAvailabilityLoaded().then(() => {
|
||||
populateActionOptionValues(this);
|
||||
return this.cfgvalue(section_id);
|
||||
});
|
||||
};
|
||||
{
|
||||
@@ -2083,7 +2112,7 @@ function createSectionContent(section) {
|
||||
form.DynamicList,
|
||||
"rule_set",
|
||||
_("Rule sets"),
|
||||
_("Add URLs or local paths to .srs lists"),
|
||||
_("Add URLs or local paths to .srs / .json lists"),
|
||||
);
|
||||
ruleSetOption.modalonly = true;
|
||||
ruleSetOption.load = function (section_id) {
|
||||
@@ -2092,6 +2121,21 @@ function createSectionContent(section) {
|
||||
ruleSetOption.validate = function (_section_id, value) {
|
||||
return validateCustomRulesetReference(value);
|
||||
};
|
||||
|
||||
const domainIpListsOption = section.taboption(
|
||||
"conditions",
|
||||
form.DynamicList,
|
||||
"domain_ip_lists",
|
||||
_("Domain and IP Lists"),
|
||||
_("Add URLs or local paths to .lst lists"),
|
||||
);
|
||||
domainIpListsOption.modalonly = true;
|
||||
domainIpListsOption.load = function (section_id) {
|
||||
return getConfigListValues(section_id, "domain_ip_lists");
|
||||
};
|
||||
domainIpListsOption.validate = function (_section_id, value) {
|
||||
return validatePlainListReference(value);
|
||||
};
|
||||
}
|
||||
|
||||
const EntryPoint = {
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
|
||||
const UCI_PACKAGE = main.PODKOP_UCI_PACKAGE;
|
||||
|
||||
function isSingBoxDuration(value) {
|
||||
return /^([0-9]+(?:\.[0-9]+)?(?:ns|us|ms|s|m|h|d))+$/.test(value);
|
||||
}
|
||||
|
||||
function createSettingsContent(section) {
|
||||
let o = section.option(
|
||||
form.ListValue,
|
||||
@@ -273,16 +277,40 @@ function createSettingsContent(section) {
|
||||
o.rmempty = false;
|
||||
|
||||
o = section.option(
|
||||
form.ListValue,
|
||||
form.Value,
|
||||
"update_interval",
|
||||
_("List Update Frequency"),
|
||||
_("Select how often the domain or subnet lists are updated automatically"),
|
||||
_(
|
||||
"Use sing-box duration format. Leave empty to disable automatic updates.",
|
||||
),
|
||||
);
|
||||
Object.entries(main.UPDATE_INTERVAL_OPTIONS).forEach(([key, label]) => {
|
||||
o.value(key, _(label));
|
||||
});
|
||||
o.default = "1d";
|
||||
o.rmempty = false;
|
||||
o.placeholder = "1d";
|
||||
o.rmempty = true;
|
||||
o.cfgvalue = function (section_id) {
|
||||
return uci.get(UCI_PACKAGE, section_id, "update_interval") || "";
|
||||
};
|
||||
o.write = function (section_id, value) {
|
||||
const normalized = value ? `${value}`.trim() : "";
|
||||
|
||||
if (normalized.length) {
|
||||
uci.set(UCI_PACKAGE, section_id, "update_interval", normalized);
|
||||
} else {
|
||||
uci.unset(UCI_PACKAGE, section_id, "update_interval");
|
||||
}
|
||||
};
|
||||
o.validate = function (_section_id, value) {
|
||||
const normalized = value ? `${value}`.trim() : "";
|
||||
|
||||
if (!normalized.length) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (isSingBoxDuration(normalized)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return _("Use sing-box duration format like 1d, 12h or 30m");
|
||||
};
|
||||
|
||||
o = section.option(
|
||||
form.Flag,
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-04-11 01:33+0300\n"
|
||||
"PO-Revision-Date: 2026-04-11 01:33+0300\n"
|
||||
"POT-Creation-Date: 2026-04-12 06:08+0300\n"
|
||||
"PO-Revision-Date: 2026-04-12 06:08+0300\n"
|
||||
"Last-Translator: ushan0v\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -47,8 +47,11 @@ msgstr "Активные соединения"
|
||||
msgid "Add a section"
|
||||
msgstr "Добавить секцию"
|
||||
|
||||
msgid "Add URLs or local paths to .srs lists"
|
||||
msgstr "Добавляйте URL или локальные пути к спискам .srs"
|
||||
msgid "Add URLs or local paths to .lst lists"
|
||||
msgstr "Добавляйте URL или локальные пути к спискам .lst"
|
||||
|
||||
msgid "Add URLs or local paths to .srs / .json lists"
|
||||
msgstr "Добавляйте URL или локальные пути к спискам .srs / .json"
|
||||
|
||||
msgid "Additional marking rules found"
|
||||
msgstr "Найдены дополнительные правила маркировки"
|
||||
@@ -215,6 +218,9 @@ msgstr "Адрес DNS-сервера не может быть пустым"
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr "Не паникуйте, всё можно исправить, просто..."
|
||||
|
||||
msgid "Domain and IP Lists"
|
||||
msgstr "Списки доменов и IPs"
|
||||
|
||||
msgid "Domain keyword"
|
||||
msgstr "Ключевое слово домена"
|
||||
|
||||
@@ -497,6 +503,9 @@ msgstr "Ключевое слово не должно содержать про
|
||||
msgid "Latest"
|
||||
msgstr "Последняя"
|
||||
|
||||
msgid "List must be a direct .lst URL or a local .lst path"
|
||||
msgstr "Список должен быть прямым URL на .lst или локальным путём к .lst"
|
||||
|
||||
msgid "List Update Frequency"
|
||||
msgstr "Частота обновления списков"
|
||||
|
||||
@@ -668,8 +677,8 @@ msgstr "DNS роутера проходит через sing-box"
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr "Исключённые из маршрутизации IP-адреса"
|
||||
|
||||
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
||||
msgstr "Набор правил должен быть прямым URL на .srs или локальным путём к .srs"
|
||||
msgid "Rule set must be a direct .srs / .json URL or a local .srs / .json path"
|
||||
msgstr "Набор правил должен быть прямым URL на .srs / .json или локальным путём к .srs / .json"
|
||||
|
||||
msgid "Rule set URL"
|
||||
msgstr "URL набора правил"
|
||||
@@ -722,9 +731,6 @@ msgstr "Выберите предустановленный набор прав
|
||||
msgid "Select DNS protocol to use"
|
||||
msgstr "Выберите протокол DNS"
|
||||
|
||||
msgid "Select how often the domain or subnet lists are updated automatically"
|
||||
msgstr "Выберите частоту автоматического обновления списков доменов или подсетей."
|
||||
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr "Выберите или введите адрес DNS-сервера"
|
||||
|
||||
@@ -923,6 +929,12 @@ msgstr "Использовать сетевой интерфейс как outbou
|
||||
msgid "Use a network interface as the outbound for this section"
|
||||
msgstr "Использовать сетевой интерфейс как outbound для этой секции"
|
||||
|
||||
msgid "Use sing-box duration format like 1d, 12h or 30m"
|
||||
msgstr "Используйте формат длительности sing-box, например 1d, 12h или 30m"
|
||||
|
||||
msgid "Use sing-box duration format. Leave empty to disable automatic updates."
|
||||
msgstr "Используйте формат длительности sing-box. Оставьте поле пустым, чтобы отключить автоматическое обновление."
|
||||
|
||||
msgid "Valid"
|
||||
msgstr "Валидно"
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-04-11 22:33+0300\n"
|
||||
"PO-Revision-Date: 2026-04-11 22:33+0300\n"
|
||||
"POT-Creation-Date: 2026-04-12 03:08+0300\n"
|
||||
"PO-Revision-Date: 2026-04-12 03:08+0300\n"
|
||||
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -36,7 +36,7 @@ msgstr ""
|
||||
msgid "A latency-tested group of proxy URLs for this node"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1702
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1731
|
||||
msgid "A latency-tested group of proxy URLs for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -44,12 +44,12 @@ msgstr ""
|
||||
msgid "A manual group of proxy URLs for this node"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1684
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713
|
||||
msgid "A manual group of proxy URLs for this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1526
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1558
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1551
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
|
||||
@@ -61,15 +61,19 @@ msgstr ""
|
||||
msgid "Add a section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2086
|
||||
msgid "Add URLs or local paths to .srs lists"
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2130
|
||||
msgid "Add URLs or local paths to .lst lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2115
|
||||
msgid "Add URLs or local paths to .srs / .json lists"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:106
|
||||
msgid "Additional marking rules found"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:249
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:253
|
||||
msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall."
|
||||
msgstr ""
|
||||
|
||||
@@ -78,7 +82,7 @@ msgid "An error occurred while saving the form:"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1797
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1826
|
||||
msgid "Applicable for SOCKS and Shadowsocks links"
|
||||
msgstr ""
|
||||
|
||||
@@ -110,7 +114,7 @@ msgstr ""
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:47
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:51
|
||||
msgid "Bootstrap DNS server"
|
||||
msgstr ""
|
||||
|
||||
@@ -122,15 +126,15 @@ msgstr ""
|
||||
msgid "Browser is using FakeIP correctly"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2020
|
||||
msgid "Built-in rule sets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:354
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:382
|
||||
msgid "Cache File Path"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:368
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:396
|
||||
msgid "Cache file path cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -176,11 +180,11 @@ msgstr ""
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1539
|
||||
msgid "Conditions"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:341
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:369
|
||||
msgid "Config File Path"
|
||||
msgstr ""
|
||||
|
||||
@@ -188,16 +192,16 @@ msgstr ""
|
||||
msgid "Configuration for Podkop Plus service"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1639
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1668
|
||||
msgid "Connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1622
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1651
|
||||
msgid "Connection Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1654
|
||||
msgid "Connection URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -217,11 +221,11 @@ msgstr ""
|
||||
msgid "Dashboard currently unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:224
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:228
|
||||
msgid "Delay in milliseconds before reloading Podkop Plus after interface UP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:231
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:235
|
||||
msgid "Delay value cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -242,11 +246,11 @@ msgstr ""
|
||||
msgid "Disable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:267
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:271
|
||||
msgid "Disable QUIC"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:268
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:272
|
||||
msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming"
|
||||
msgstr ""
|
||||
|
||||
@@ -259,18 +263,18 @@ msgid "DNS on router"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1891
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:21
|
||||
msgid "DNS over HTTPS (DoH)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1863
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1892
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:22
|
||||
msgid "DNS over TLS (DoT)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1889
|
||||
msgid "DNS protocol"
|
||||
msgstr ""
|
||||
|
||||
@@ -278,20 +282,20 @@ msgstr ""
|
||||
msgid "DNS Protocol"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:14
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18
|
||||
msgid "DNS Protocol Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:70
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:74
|
||||
msgid "DNS Rewrite TTL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1907
|
||||
msgid "DNS server"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:238
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:26
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:30
|
||||
msgid "DNS Server"
|
||||
msgstr ""
|
||||
|
||||
@@ -303,19 +307,23 @@ msgstr ""
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1961
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2129
|
||||
msgid "Domain and IP Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990
|
||||
msgid "Domain keyword"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1968
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1997
|
||||
msgid "Domain regex"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1933
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962
|
||||
msgid "Domains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:332
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:360
|
||||
msgid "Dont Touch My DHCP!"
|
||||
msgstr ""
|
||||
|
||||
@@ -328,15 +336,15 @@ msgstr ""
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:300
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:328
|
||||
msgid "Download external rule sets through one of the enabled proxy sections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:290
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:318
|
||||
msgid "Download Lists via Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:299
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:327
|
||||
msgid "Download Lists via specific proxy section"
|
||||
msgstr ""
|
||||
|
||||
@@ -344,7 +352,7 @@ msgstr ""
|
||||
msgid "Download Node"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:291
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:319
|
||||
msgid "Downloading all lists via specific Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -360,7 +368,7 @@ msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:10
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1516
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1541
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
@@ -368,7 +376,7 @@ msgstr ""
|
||||
msgid "Enable a dedicated DNS resolver when this node uses an interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1849
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878
|
||||
msgid "Enable a dedicated DNS resolver when this section uses an interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -376,56 +384,56 @@ msgstr ""
|
||||
msgid "Enable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1900
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1929
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:128
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:132
|
||||
msgid "Enable Output Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:239
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:243
|
||||
msgid "Enable YACD"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:248
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:252
|
||||
msgid "Enable YACD WAN Access"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1662
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1691
|
||||
msgid "Enter a complete sing-box outbound object"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1723
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1752
|
||||
msgid "Every 3 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1750
|
||||
msgid "Every 30 seconds"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1724
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1753
|
||||
msgid "Every 5 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1751
|
||||
msgid "Every minute"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1947
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976
|
||||
msgid "Exact full domain"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:408
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:436
|
||||
msgid "Exclude NTP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:437
|
||||
msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -433,7 +441,7 @@ msgstr ""
|
||||
msgid "Expecting: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1901
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1930
|
||||
msgid "Expose this section as a local HTTP+SOCKS proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -475,7 +483,7 @@ msgstr ""
|
||||
msgid "How often this remote rule set should be refreshed"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1652
|
||||
msgid "How to configure the proxy connection for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -485,20 +493,20 @@ msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:23
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1629
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1808
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1658
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1837
|
||||
msgid "Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:191
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:195
|
||||
msgid "Interface Monitoring"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:223
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:227
|
||||
msgid "Interface Monitoring Delay"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:192
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:196
|
||||
msgid "Interface monitoring for Bad WAN"
|
||||
msgstr ""
|
||||
|
||||
@@ -579,7 +587,7 @@ msgstr ""
|
||||
msgid "Invalid path format. Path must start with \"/\" and contain valid characters"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1928
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1957
|
||||
#: src/validators/validateShadowsocksUrl.ts:85
|
||||
msgid "Invalid port number. Must be between 1 and 65535"
|
||||
msgstr ""
|
||||
@@ -685,7 +693,7 @@ msgstr ""
|
||||
msgid "IP address 0.0.0.0 is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1940
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969
|
||||
msgid "IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -701,7 +709,11 @@ msgstr ""
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:278
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1504
|
||||
msgid "List must be a direct .lst URL or a local .lst path"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:282
|
||||
msgid "List Update Frequency"
|
||||
msgstr ""
|
||||
|
||||
@@ -713,7 +725,7 @@ msgstr ""
|
||||
msgid "Local file path to a sing-box rule set"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:390
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:418
|
||||
msgid "Log Level"
|
||||
msgstr ""
|
||||
|
||||
@@ -721,32 +733,32 @@ msgstr ""
|
||||
msgid "Main DNS"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1970
|
||||
msgid "Match destination IPs or subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991
|
||||
msgid "Match domains containing a substring"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1963
|
||||
msgid "Match domains including all subdomains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1998
|
||||
msgid "Match domains using a regular expression"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1948
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1977
|
||||
msgid "Match only one exact full domain name"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2005
|
||||
msgid "Match source IPs or subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1735
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764
|
||||
msgid "Maximum response time delta in milliseconds"
|
||||
msgstr ""
|
||||
|
||||
@@ -754,20 +766,20 @@ msgstr ""
|
||||
msgid "Memory Usage"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1912
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:200
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:204
|
||||
msgid "Monitored Interfaces"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1757
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1786
|
||||
msgid "Must be a number in the range of 50 - 1000"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1588
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1617
|
||||
msgid "NFQWS Strategy"
|
||||
msgstr ""
|
||||
|
||||
@@ -792,7 +804,7 @@ msgstr ""
|
||||
msgid "Not implement yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:523
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:525
|
||||
msgid "not installed"
|
||||
msgstr ""
|
||||
|
||||
@@ -829,8 +841,8 @@ msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:22
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1628
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1661
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1657
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1690
|
||||
msgid "Outbound JSON"
|
||||
msgstr ""
|
||||
|
||||
@@ -838,7 +850,7 @@ msgstr ""
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:137
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:141
|
||||
msgid "Output Network Interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -850,15 +862,15 @@ msgstr ""
|
||||
msgid "Path cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:372
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:400
|
||||
msgid "Path must be absolute (start with /)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:381
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409
|
||||
msgid "Path must contain at least one directory (like /tmp/cache.db)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:376
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:404
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr ""
|
||||
|
||||
@@ -879,15 +891,15 @@ msgstr ""
|
||||
msgid "Podkop Plus Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:333
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:361
|
||||
msgid "Podkop Plus will not modify your DHCP configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1920
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1949
|
||||
msgid "Port cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1913
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1942
|
||||
msgid "Port for the local mixed proxy of this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -903,7 +915,7 @@ msgstr ""
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2059
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr ""
|
||||
|
||||
@@ -915,7 +927,7 @@ msgstr ""
|
||||
msgid "Remote URL to a sing-box rule set"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1848
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1877
|
||||
msgid "Resolver for interface outbound"
|
||||
msgstr ""
|
||||
|
||||
@@ -943,21 +955,19 @@ msgstr ""
|
||||
msgid "Router DNS is routed through sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:447
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1468
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1477
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480
|
||||
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1496
|
||||
msgid "Rule set must be a direct .srs / .json URL or a local .srs / .json path"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:48
|
||||
msgid "Rule set URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2085
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2114
|
||||
msgid "Rule sets"
|
||||
msgstr ""
|
||||
|
||||
@@ -989,7 +999,7 @@ msgstr ""
|
||||
msgid "Run Diagnostic"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2078
|
||||
msgid "Russia inside restrictions"
|
||||
msgstr ""
|
||||
|
||||
@@ -997,7 +1007,7 @@ msgstr ""
|
||||
msgid "Save error"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:259
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:263
|
||||
msgid "Secret key for authenticating remote access to YACD when WAN access is enabled."
|
||||
msgstr ""
|
||||
|
||||
@@ -1005,7 +1015,7 @@ msgstr ""
|
||||
msgid "Section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1545
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1570
|
||||
msgid "Section name"
|
||||
msgstr ""
|
||||
|
||||
@@ -1013,47 +1023,43 @@ msgstr ""
|
||||
msgid "Sections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1992
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2021
|
||||
msgid "Select a predefined list for routing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19
|
||||
msgid "Select DNS protocol to use"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:279
|
||||
msgid "Select how often the domain or subnet lists are updated automatically"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:27
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:31
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:355
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:383
|
||||
msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:342
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:370
|
||||
msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:391
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419
|
||||
msgid "Select the log level for sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:92
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:96
|
||||
msgid "Select the network interface from which the traffic will originate"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:138
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:142
|
||||
msgid "Select the network interface to which the traffic will originate"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:201
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:205
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1683
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1712
|
||||
msgid "Selector connections"
|
||||
msgstr ""
|
||||
|
||||
@@ -1061,7 +1067,7 @@ msgstr ""
|
||||
msgid "Selector Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1995
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2024
|
||||
msgid "Service list"
|
||||
msgstr ""
|
||||
|
||||
@@ -1070,7 +1076,7 @@ msgid "Services info"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:394
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1538
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
@@ -1107,15 +1113,15 @@ msgstr ""
|
||||
msgid "Source file"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1975
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2004
|
||||
msgid "Source IPs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:91
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:95
|
||||
msgid "Source Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:420
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:448
|
||||
msgid "Specify a local IP address to be excluded from routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -1151,7 +1157,7 @@ msgstr ""
|
||||
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:48
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:52
|
||||
msgid "The DNS server used to look up the IP address of an upstream DNS server"
|
||||
msgstr ""
|
||||
|
||||
@@ -1180,7 +1186,7 @@ msgstr ""
|
||||
msgid "This option requires a value."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:71
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:75
|
||||
msgid "Time in seconds for DNS record caching (default: 60)"
|
||||
msgstr ""
|
||||
|
||||
@@ -1196,11 +1202,11 @@ msgstr ""
|
||||
msgid "Troubleshooting"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:82
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:86
|
||||
msgid "TTL must be a positive number"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:77
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:81
|
||||
msgid "TTL value cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -1208,12 +1214,12 @@ msgstr ""
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:23
|
||||
msgid "UDP (Unprotected DNS)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1825
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
@@ -1265,11 +1271,11 @@ msgstr ""
|
||||
msgid "URL must use one of the following protocols:"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1701
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1730
|
||||
msgid "URLTest connections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1748
|
||||
msgid "URLTest interval"
|
||||
msgstr ""
|
||||
|
||||
@@ -1281,7 +1287,7 @@ msgstr ""
|
||||
msgid "URLTest Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1734
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1763
|
||||
msgid "URLTest tolerance"
|
||||
msgstr ""
|
||||
|
||||
@@ -1290,7 +1296,7 @@ msgid "URLTest Tolerance"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1793
|
||||
msgid "URLTest URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -1298,10 +1304,18 @@ msgstr ""
|
||||
msgid "Use a network interface as the outbound for this node"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1809
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1838
|
||||
msgid "Use a network interface as the outbound for this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:312
|
||||
msgid "Use sing-box duration format like 1d, 12h or 30m"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:283
|
||||
msgid "Use sing-box duration format. Leave empty to disable automatic updates."
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateDns.ts:14
|
||||
#: src/validators/validateDns.ts:18
|
||||
#: src/validators/validateDomain.ts:13
|
||||
@@ -1330,32 +1344,32 @@ msgstr ""
|
||||
msgid "View logs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1546
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1571
|
||||
msgid "Visible name of this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1640
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1669
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2032
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2061
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2051
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2080
|
||||
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1559
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1584
|
||||
msgid "What Podkop Plus should do when this section matches"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:258
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:262
|
||||
msgid "YACD Secret Key"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:129
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:133
|
||||
msgid "You can select Output Network Interface, by default autodetect"
|
||||
msgstr ""
|
||||
|
||||
|
||||
+434
-59
@@ -36,6 +36,11 @@ check_required_file "$PODKOP_LIB/rulesets.sh"
|
||||
PODKOP_INTERNAL_CONFIG_TRIGGER_GUARD="/var/run/podkop-plus.internal-config-change"
|
||||
PODKOP_RUNTIME_STATE_DIR="/var/run/podkop-plus"
|
||||
PODKOP_RELOAD_STATE_FILE="$PODKOP_RUNTIME_STATE_DIR/reload-state"
|
||||
PODKOP_LIST_UPDATE_STATE_FILE="$PODKOP_RUNTIME_STATE_DIR/list-update.timestamp"
|
||||
PODKOP_LIST_UPDATE_CRON_MARKER="# podkop-plus-list-update"
|
||||
# sing-box falls back to 1d when update_interval is empty, so use a large
|
||||
# duration to emulate disabled automatic refreshes for remote rule sets.
|
||||
SING_BOX_DISABLED_UPDATE_INTERVAL="876000h"
|
||||
PODKOP_RELOAD_STATE_FORMAT=1
|
||||
PODKOP_NFT_POPULATE_ENABLED=1
|
||||
PODKOP_ZAPRET_MISSING_WARNING_EMITTED=0
|
||||
@@ -119,7 +124,7 @@ build_dnsmasq_signature() {
|
||||
append_sing_box_rule_signature() {
|
||||
local section="$1"
|
||||
local action proxy_config_type domain domain_suffix domain_keyword domain_regex ip_cidr source_ip_cidr \
|
||||
community_lists rule_set mixed_proxy_enabled mixed_proxy_port
|
||||
community_lists rule_set domain_ip_lists mixed_proxy_enabled mixed_proxy_port
|
||||
|
||||
rule_is_enabled "$section" || return 0
|
||||
|
||||
@@ -197,6 +202,7 @@ append_sing_box_rule_signature() {
|
||||
source_ip_cidr="$(get_rule_condition_commas_string "$section" "source_ip_cidr" "subnets")"
|
||||
config_get community_lists "$section" "community_lists"
|
||||
config_get rule_set "$section" "rule_set"
|
||||
config_get domain_ip_lists "$section" "domain_ip_lists"
|
||||
|
||||
signature_add "rule.$section.domain" "$domain"
|
||||
signature_add "rule.$section.domain_suffix" "$domain_suffix"
|
||||
@@ -206,6 +212,7 @@ append_sing_box_rule_signature() {
|
||||
signature_add "rule.$section.source_ip_cidr" "$source_ip_cidr"
|
||||
signature_add "rule.$section.community_lists" "$community_lists"
|
||||
signature_add "rule.$section.rule_set" "$rule_set"
|
||||
signature_add "rule.$section.domain_ip_lists" "$domain_ip_lists"
|
||||
}
|
||||
|
||||
build_sing_box_signature() {
|
||||
@@ -222,7 +229,7 @@ build_sing_box_signature() {
|
||||
config_get output_network_interface "settings" "output_network_interface"
|
||||
config_get_bool disable_quic "settings" "disable_quic" 0
|
||||
config_get routing_excluded_ips "settings" "routing_excluded_ips"
|
||||
config_get update_interval "settings" "update_interval" "1d"
|
||||
config_get update_interval "settings" "update_interval"
|
||||
config_get cache_path "settings" "cache_path" "/tmp/sing-box/cache.db"
|
||||
config_get config_path "settings" "config_path"
|
||||
config_get log_level "settings" "log_level" "warn"
|
||||
@@ -304,7 +311,7 @@ build_zapret_queue_signature() {
|
||||
|
||||
append_zapret_runtime_signature() {
|
||||
local section="$1"
|
||||
local domain domain_suffix community_lists rule_set user_domain_list_type items
|
||||
local domain domain_suffix community_lists rule_set domain_ip_lists user_domain_list_type items
|
||||
|
||||
rule_is_enabled "$section" || return 0
|
||||
[ "$(get_rule_action "$section")" = "zapret" ] || return 0
|
||||
@@ -313,6 +320,7 @@ append_zapret_runtime_signature() {
|
||||
domain_suffix="$(get_rule_condition_commas_string "$section" "domain_suffix" "domains")"
|
||||
config_get community_lists "$section" "community_lists"
|
||||
config_get rule_set "$section" "rule_set"
|
||||
config_get domain_ip_lists "$section" "domain_ip_lists"
|
||||
config_get user_domain_list_type "$section" "user_domain_list_type" "disabled"
|
||||
|
||||
signature_add "zapret.$section.nfqws_opt" "$(get_rule_nfqws_opt "$section")"
|
||||
@@ -320,6 +328,7 @@ append_zapret_runtime_signature() {
|
||||
signature_add "zapret.$section.domain_suffix" "$domain_suffix"
|
||||
signature_add "zapret.$section.community_lists" "$community_lists"
|
||||
signature_add "zapret.$section.rule_set" "$rule_set"
|
||||
signature_add "zapret.$section.domain_ip_lists" "$domain_ip_lists"
|
||||
signature_add "zapret.$section.user_domain_list_type" "$user_domain_list_type"
|
||||
config_get items "$section" "local_domain_lists"
|
||||
signature_add "zapret.$section.local_domain_lists" "$items"
|
||||
@@ -342,17 +351,19 @@ build_zapret_runtime_signature() {
|
||||
|
||||
append_list_update_signature() {
|
||||
local section="$1"
|
||||
local community_lists remote_domain_lists remote_subnet_lists
|
||||
local community_lists remote_domain_lists remote_subnet_lists domain_ip_lists
|
||||
|
||||
rule_is_enabled "$section" || return 0
|
||||
|
||||
config_get community_lists "$section" "community_lists"
|
||||
config_get remote_domain_lists "$section" "remote_domain_lists"
|
||||
config_get remote_subnet_lists "$section" "remote_subnet_lists"
|
||||
config_get domain_ip_lists "$section" "domain_ip_lists"
|
||||
|
||||
signature_add "lists.$section.community_lists" "$community_lists"
|
||||
signature_add "lists.$section.remote_domain_lists" "$remote_domain_lists"
|
||||
signature_add "lists.$section.remote_subnet_lists" "$remote_subnet_lists"
|
||||
signature_add "lists.$section.domain_ip_lists" "$domain_ip_lists"
|
||||
}
|
||||
|
||||
build_list_update_signature() {
|
||||
@@ -365,12 +376,46 @@ build_cron_signature() {
|
||||
local update_interval
|
||||
|
||||
signature_begin
|
||||
config_get update_interval "settings" "update_interval" "1d"
|
||||
config_get update_interval "settings" "update_interval"
|
||||
signature_add "settings.update_interval" "$update_interval"
|
||||
config_foreach append_list_update_signature "rule"
|
||||
signature_finish
|
||||
}
|
||||
|
||||
list_has_remote_references() {
|
||||
local items="$1"
|
||||
local item
|
||||
|
||||
for item in $items; do
|
||||
case "$item" in
|
||||
http://* | https://*)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
get_settings_update_interval() {
|
||||
local update_interval
|
||||
|
||||
config_get update_interval "settings" "update_interval"
|
||||
printf '%s\n' "$update_interval"
|
||||
}
|
||||
|
||||
get_remote_ruleset_update_interval() {
|
||||
local update_interval
|
||||
|
||||
update_interval="$(get_settings_update_interval)"
|
||||
if [ -n "$update_interval" ]; then
|
||||
printf '%s\n' "$update_interval"
|
||||
else
|
||||
printf '%s\n' "$SING_BOX_DISABLED_UPDATE_INTERVAL"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
capture_reload_state() {
|
||||
config_load "$PODKOP_CONFIG"
|
||||
RELOAD_STATE_RESTART_SIGNATURE="$(build_restart_signature)"
|
||||
@@ -402,14 +447,18 @@ EOF
|
||||
|
||||
enabled_rule_has_list_sources() {
|
||||
local section="$1"
|
||||
local community_lists remote_domain_lists remote_subnet_lists
|
||||
local community_lists remote_domain_lists remote_subnet_lists domain_ip_lists
|
||||
|
||||
rule_is_enabled "$section" || return 0
|
||||
config_get community_lists "$section" "community_lists"
|
||||
config_get remote_domain_lists "$section" "remote_domain_lists"
|
||||
config_get remote_subnet_lists "$section" "remote_subnet_lists"
|
||||
config_get domain_ip_lists "$section" "domain_ip_lists"
|
||||
|
||||
if [ -n "$community_lists" ] || [ -n "$remote_domain_lists" ] || [ -n "$remote_subnet_lists" ]; then
|
||||
if [ -n "$community_lists" ] ||
|
||||
[ -n "$remote_domain_lists" ] ||
|
||||
[ -n "$remote_subnet_lists" ] ||
|
||||
list_has_remote_references "$domain_ip_lists"; then
|
||||
RELOAD_LIST_SOURCES_PRESENT=1
|
||||
fi
|
||||
}
|
||||
@@ -422,13 +471,16 @@ has_list_update_sources() {
|
||||
|
||||
enabled_rule_has_nft_list_sources() {
|
||||
local section="$1"
|
||||
local community_lists remote_subnet_lists
|
||||
local community_lists remote_subnet_lists domain_ip_lists
|
||||
|
||||
rule_is_enabled "$section" || return 0
|
||||
config_get community_lists "$section" "community_lists"
|
||||
config_get remote_subnet_lists "$section" "remote_subnet_lists"
|
||||
config_get domain_ip_lists "$section" "domain_ip_lists"
|
||||
|
||||
if [ -n "$community_lists" ] || [ -n "$remote_subnet_lists" ]; then
|
||||
if [ -n "$community_lists" ] ||
|
||||
[ -n "$remote_subnet_lists" ] ||
|
||||
list_has_remote_references "$domain_ip_lists"; then
|
||||
RELOAD_NFT_LIST_SOURCES_PRESENT=1
|
||||
fi
|
||||
}
|
||||
@@ -465,7 +517,7 @@ rebuild_nft_runtime() {
|
||||
}
|
||||
|
||||
refresh_list_update_cron() {
|
||||
local cron_job
|
||||
local cron_job update_interval
|
||||
|
||||
remove_cron_job
|
||||
|
||||
@@ -473,8 +525,14 @@ refresh_list_update_cron() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
update_interval="$(get_settings_update_interval)"
|
||||
if [ -z "$update_interval" ]; then
|
||||
log "Remote list auto-update is disabled"
|
||||
return 0
|
||||
fi
|
||||
|
||||
cron_job="$(build_list_update_cron_job)" || return 1
|
||||
crontab -l | {
|
||||
crontab -l 2> /dev/null | {
|
||||
cat
|
||||
echo "$cron_job"
|
||||
} | crontab -
|
||||
@@ -1063,6 +1121,7 @@ validate_service() {
|
||||
|
||||
validate_ruleset_reference() {
|
||||
local reference="$1"
|
||||
local extension
|
||||
|
||||
if [ -z "$reference" ]; then
|
||||
return 0
|
||||
@@ -1073,7 +1132,13 @@ validate_ruleset_reference() {
|
||||
fi
|
||||
|
||||
case "$reference" in
|
||||
http://*.srs | https://*.srs | /*.srs)
|
||||
http://* | https://*)
|
||||
extension="$(url_get_file_extension "$reference")"
|
||||
if [ "$extension" = "srs" ] || [ "$extension" = "json" ]; then
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
/*.srs | /*.json)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
@@ -1082,6 +1147,28 @@ validate_ruleset_reference() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
validate_plain_domain_ip_list_reference() {
|
||||
local reference="$1"
|
||||
local extension
|
||||
|
||||
if [ -z "$reference" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
case "$reference" in
|
||||
http://* | https://*)
|
||||
extension="$(url_get_file_extension "$reference")"
|
||||
[ "$extension" = "lst" ] && return 0
|
||||
;;
|
||||
/*.lst)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
log "Unknown plain list reference '$reference'. Aborted." "fatal"
|
||||
exit 1
|
||||
}
|
||||
|
||||
ruleset_kind_from_reference_hint() {
|
||||
local reference="$1"
|
||||
|
||||
@@ -1143,9 +1230,32 @@ detect_local_binary_ruleset_kind() {
|
||||
echo "$kind"
|
||||
}
|
||||
|
||||
detect_local_source_ruleset_kind() {
|
||||
local filepath="$1"
|
||||
local kind
|
||||
|
||||
kind="$(ruleset_kind_from_reference_hint "$filepath")"
|
||||
if [ "$kind" != "unknown" ]; then
|
||||
echo "$kind"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! file_exists "$filepath"; then
|
||||
echo "unknown"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if json_ruleset_has_domain_matchers "$filepath"; then
|
||||
echo "domains"
|
||||
else
|
||||
echo "subnets"
|
||||
fi
|
||||
}
|
||||
|
||||
detect_inline_ruleset_reference_kind() {
|
||||
local reference="$1"
|
||||
local kind
|
||||
local extension
|
||||
|
||||
kind="$(ruleset_kind_from_reference_hint "$reference")"
|
||||
if [ "$kind" != "unknown" ]; then
|
||||
@@ -1157,8 +1267,17 @@ detect_inline_ruleset_reference_kind() {
|
||||
/*.srs)
|
||||
detect_local_binary_ruleset_kind "$reference"
|
||||
;;
|
||||
http://*.srs|https://*.srs)
|
||||
echo "domains"
|
||||
/*.json)
|
||||
detect_local_source_ruleset_kind "$reference"
|
||||
;;
|
||||
http://* | https://*)
|
||||
extension="$(url_get_file_extension "$reference")"
|
||||
[ "$extension" = "srs" ] || [ "$extension" = "json" ] || {
|
||||
echo "unknown"
|
||||
return 0
|
||||
}
|
||||
[ "$kind" = "unknown" ] && kind="domains"
|
||||
echo "$kind"
|
||||
;;
|
||||
*)
|
||||
echo "unknown"
|
||||
@@ -1181,6 +1300,7 @@ process_validate_rule() {
|
||||
fi
|
||||
config_list_foreach "$section" "community_lists" validate_service
|
||||
config_list_foreach "$section" "rule_set" validate_ruleset_reference
|
||||
config_list_foreach "$section" "domain_ip_lists" validate_plain_domain_ip_list_reference
|
||||
return 0
|
||||
fi
|
||||
|
||||
@@ -1189,6 +1309,7 @@ process_validate_rule() {
|
||||
|
||||
config_list_foreach "$section" "community_lists" validate_service
|
||||
config_list_foreach "$section" "rule_set" validate_ruleset_reference
|
||||
config_list_foreach "$section" "domain_ip_lists" validate_plain_domain_ip_list_reference
|
||||
}
|
||||
|
||||
br_netfilter_disable() {
|
||||
@@ -1286,7 +1407,7 @@ ensure_builtin_ruleset() {
|
||||
if ! ruleset_registered "$tag"; then
|
||||
local detour update_interval url
|
||||
detour="$(get_download_detour_tag)"
|
||||
config_get update_interval "settings" "update_interval" "1d"
|
||||
update_interval="$(get_remote_ruleset_update_interval)"
|
||||
url="$SRS_MAIN_URL/$name.srs"
|
||||
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "binary" "$url" "$detour" "$update_interval")
|
||||
register_ruleset_tag "$tag"
|
||||
@@ -1313,20 +1434,21 @@ ensure_custom_ruleset() {
|
||||
config_get path "$section" "path"
|
||||
config_get url "$section" "url"
|
||||
config_get outbound "$section" "outbound"
|
||||
config_get update_interval "$section" "update_interval" "1d"
|
||||
config_get update_interval "$section" "update_interval"
|
||||
|
||||
case "$type" in
|
||||
local)
|
||||
if [ "$format" = "binary" ]; then
|
||||
kind="$(detect_local_binary_ruleset_kind "$path")"
|
||||
else
|
||||
kind="$(ruleset_kind_from_reference_hint "$path")"
|
||||
kind="$(detect_local_source_ruleset_kind "$path")"
|
||||
fi
|
||||
config=$(sing_box_cm_add_local_ruleset "$config" "$tag" "$format" "$path")
|
||||
;;
|
||||
remote)
|
||||
kind="$(ruleset_kind_from_reference_hint "$url")"
|
||||
[ "$kind" = "unknown" ] && kind="domains"
|
||||
[ -z "$update_interval" ] && update_interval="$SING_BOX_DISABLED_UPDATE_INTERVAL"
|
||||
[ -n "$outbound" ] && detour="$(get_outbound_tag_by_section "$outbound")"
|
||||
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "$format" "$url" "$detour" "$update_interval")
|
||||
;;
|
||||
@@ -1343,7 +1465,7 @@ ensure_custom_ruleset() {
|
||||
|
||||
ensure_inline_custom_ruleset() {
|
||||
local reference="$1"
|
||||
local tag hash detour update_interval
|
||||
local tag hash detour update_interval extension
|
||||
|
||||
hash="$(printf '%s' "$reference" | md5sum | cut -c1-12)"
|
||||
tag="inline-custom-$hash-ruleset"
|
||||
@@ -1351,15 +1473,29 @@ ensure_inline_custom_ruleset() {
|
||||
ENSURED_RULESET_KIND="$(detect_inline_ruleset_reference_kind "$reference")"
|
||||
|
||||
if ! ruleset_registered "$tag"; then
|
||||
config_get update_interval "settings" "update_interval" "1d"
|
||||
update_interval="$(get_remote_ruleset_update_interval)"
|
||||
|
||||
case "$reference" in
|
||||
/*.srs)
|
||||
config=$(sing_box_cm_add_local_ruleset "$config" "$tag" "binary" "$reference")
|
||||
;;
|
||||
http://*.srs | https://*.srs)
|
||||
/*.json)
|
||||
config=$(sing_box_cm_add_local_ruleset "$config" "$tag" "source" "$reference")
|
||||
;;
|
||||
http://* | https://*)
|
||||
extension="$(url_get_file_extension "$reference")"
|
||||
detour="$(get_download_detour_tag)"
|
||||
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "binary" "$reference" "$detour" "$update_interval")
|
||||
case "$extension" in
|
||||
srs)
|
||||
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "binary" "$reference" "$detour" "$update_interval")
|
||||
;;
|
||||
json)
|
||||
config=$(sing_box_cm_add_remote_ruleset "$config" "$tag" "source" "$reference" "$detour" "$update_interval")
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
@@ -1570,39 +1706,119 @@ dnsmasq_restore() {
|
||||
}
|
||||
|
||||
build_list_update_cron_job() {
|
||||
local update_interval cron_job
|
||||
local update_interval
|
||||
|
||||
config_get update_interval "settings" "update_interval"
|
||||
case "$update_interval" in
|
||||
"1h")
|
||||
cron_job="13 * * * * $PODKOP_BIN list_update"
|
||||
;;
|
||||
"3h")
|
||||
cron_job="13 */3 * * * $PODKOP_BIN list_update"
|
||||
;;
|
||||
"12h")
|
||||
cron_job="13 */12 * * * $PODKOP_BIN list_update"
|
||||
;;
|
||||
"1d")
|
||||
cron_job="13 9 * * * $PODKOP_BIN list_update"
|
||||
;;
|
||||
"3d")
|
||||
cron_job="13 9 */3 * * $PODKOP_BIN list_update"
|
||||
;;
|
||||
*)
|
||||
log "Invalid update_interval value: $update_interval"
|
||||
update_interval="$(get_settings_update_interval)"
|
||||
[ -n "$update_interval" ] || return 1
|
||||
|
||||
if ! duration_to_seconds "$update_interval" >/dev/null 2>&1; then
|
||||
log "Invalid update_interval value: $update_interval" "error"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
printf '%s\n' "$cron_job"
|
||||
printf '* * * * * %s list_update_if_due %s\n' "$PODKOP_BIN" "$PODKOP_LIST_UPDATE_CRON_MARKER"
|
||||
}
|
||||
|
||||
remove_cron_job() {
|
||||
(crontab -l | grep -v "$PODKOP_BIN list_update") | crontab -
|
||||
(crontab -l 2>/dev/null | grep -Fv "$PODKOP_LIST_UPDATE_CRON_MARKER") | crontab -
|
||||
log "The cron job removed"
|
||||
}
|
||||
|
||||
duration_to_seconds() {
|
||||
local input="$1"
|
||||
local rest value remainder unit multiplier total
|
||||
|
||||
[ -n "$input" ] || return 1
|
||||
|
||||
rest="$input"
|
||||
total="0"
|
||||
|
||||
while [ -n "$rest" ]; do
|
||||
value="$(printf '%s' "$rest" | sed -n 's/^\([0-9][0-9]*\(\.[0-9][0-9]*\)\?\).*/\1/p')"
|
||||
[ -n "$value" ] || return 1
|
||||
|
||||
remainder="${rest#$value}"
|
||||
case "$remainder" in
|
||||
ns*)
|
||||
unit="ns"
|
||||
multiplier="0.000000001"
|
||||
;;
|
||||
us*)
|
||||
unit="us"
|
||||
multiplier="0.000001"
|
||||
;;
|
||||
ms*)
|
||||
unit="ms"
|
||||
multiplier="0.001"
|
||||
;;
|
||||
s*)
|
||||
unit="s"
|
||||
multiplier="1"
|
||||
;;
|
||||
m*)
|
||||
unit="m"
|
||||
multiplier="60"
|
||||
;;
|
||||
h*)
|
||||
unit="h"
|
||||
multiplier="3600"
|
||||
;;
|
||||
d*)
|
||||
unit="d"
|
||||
multiplier="86400"
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
rest="${remainder#$unit}"
|
||||
total="$(awk -v total="$total" -v value="$value" -v multiplier="$multiplier" 'BEGIN { printf "%.9f", total + (value * multiplier) }')" || return 1
|
||||
done
|
||||
|
||||
awk -v total="$total" 'BEGIN { if (total <= 0) exit 1; printf "%d\n", int(total + 0.5) }' || return 1
|
||||
}
|
||||
|
||||
read_list_update_timestamp() {
|
||||
sed -n '1p' "$PODKOP_LIST_UPDATE_STATE_FILE" 2>/dev/null
|
||||
}
|
||||
|
||||
write_list_update_timestamp() {
|
||||
local timestamp="$1"
|
||||
|
||||
mkdir -p "$PODKOP_RUNTIME_STATE_DIR"
|
||||
printf '%s\n' "$timestamp" > "$PODKOP_LIST_UPDATE_STATE_FILE"
|
||||
}
|
||||
|
||||
list_update_if_due() {
|
||||
local update_interval interval_seconds now last_run
|
||||
|
||||
config_load "$PODKOP_CONFIG_NAME"
|
||||
update_interval="$(get_settings_update_interval)"
|
||||
[ -n "$update_interval" ] || return 0
|
||||
|
||||
interval_seconds="$(duration_to_seconds "$update_interval")" || {
|
||||
log "Invalid update_interval value: $update_interval" "error"
|
||||
return 1
|
||||
}
|
||||
now="$(date +%s 2>/dev/null)"
|
||||
last_run="$(read_list_update_timestamp)"
|
||||
|
||||
case "$now" in
|
||||
'' | *[!0-9]*) return 1 ;;
|
||||
esac
|
||||
|
||||
case "$last_run" in
|
||||
'' | *[!0-9]*) last_run=0 ;;
|
||||
esac
|
||||
|
||||
if [ "$last_run" -gt 0 ] && [ $((now - last_run)) -lt "$interval_seconds" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
list_update
|
||||
}
|
||||
|
||||
list_update() {
|
||||
echolog "🔄 Starting lists update..."
|
||||
|
||||
@@ -1673,19 +1889,32 @@ list_update() {
|
||||
|
||||
echolog "📥 Downloading and processing lists..."
|
||||
|
||||
config_foreach import_builtin_subnets_from_rule "rule"
|
||||
config_foreach import_domains_from_remote_domain_lists "rule"
|
||||
config_foreach import_subnets_from_remote_subnet_lists "rule"
|
||||
# Keep arbitrary .srs rule_set references inside sing-box only.
|
||||
local update_status now
|
||||
update_status=0
|
||||
|
||||
config_foreach rebuild_domain_ip_lists_from_rule "rule" || update_status=1
|
||||
config_foreach import_builtin_subnets_from_rule "rule" || update_status=1
|
||||
config_foreach import_domains_from_remote_domain_lists "rule" || update_status=1
|
||||
config_foreach import_subnets_from_remote_subnet_lists "rule" || update_status=1
|
||||
# Keep arbitrary .srs / .json rule_set references inside sing-box only.
|
||||
# Mirroring them into nft via decompile/import regressed compared to the
|
||||
# original Podkop behavior and causes long-running list updates plus
|
||||
# unstable routing when third-party SRS files are large or incompatible.
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
if [ "$update_status" -eq 0 ]; then
|
||||
now="$(date +%s 2>/dev/null)"
|
||||
case "$now" in
|
||||
'' | *[!0-9]*) ;;
|
||||
*)
|
||||
write_list_update_timestamp "$now"
|
||||
;;
|
||||
esac
|
||||
echolog "✅ Lists update completed successfully"
|
||||
else
|
||||
echolog "❌ Lists update failed"
|
||||
fi
|
||||
|
||||
[ "$update_status" -eq 0 ] || return 1
|
||||
}
|
||||
|
||||
# sing-box funcs
|
||||
@@ -2195,9 +2424,130 @@ configure_rule_set_reference_handler() {
|
||||
fi
|
||||
}
|
||||
|
||||
get_domain_ip_list_ruleset_tag() {
|
||||
local section="$1"
|
||||
local kind="$2"
|
||||
|
||||
get_ruleset_tag "$section" "lists" "$kind"
|
||||
}
|
||||
|
||||
get_domain_ip_list_ruleset_path() {
|
||||
local section="$1"
|
||||
local kind="$2"
|
||||
|
||||
printf '%s/%s.json\n' "$TMP_RULESET_FOLDER" "$(get_domain_ip_list_ruleset_tag "$section" "$kind")"
|
||||
}
|
||||
|
||||
reset_domain_ip_list_rulesets() {
|
||||
local section="$1"
|
||||
local domain_ruleset_filepath subnet_ruleset_filepath
|
||||
|
||||
domain_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "domains")"
|
||||
subnet_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "subnets")"
|
||||
|
||||
rm -f "$domain_ruleset_filepath" "$subnet_ruleset_filepath"
|
||||
create_source_rule_set "$domain_ruleset_filepath" >/dev/null 2>&1
|
||||
create_source_rule_set "$subnet_ruleset_filepath" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
ensure_domain_ip_list_rulesets() {
|
||||
local section="$1"
|
||||
local route_rule_tag="$2"
|
||||
local domain_ruleset_tag subnet_ruleset_tag domain_ruleset_filepath subnet_ruleset_filepath
|
||||
|
||||
domain_ruleset_tag="$(get_domain_ip_list_ruleset_tag "$section" "domains")"
|
||||
subnet_ruleset_tag="$(get_domain_ip_list_ruleset_tag "$section" "subnets")"
|
||||
domain_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "domains")"
|
||||
subnet_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "subnets")"
|
||||
|
||||
config=$(sing_box_cm_add_local_ruleset "$config" "$domain_ruleset_tag" "source" "$domain_ruleset_filepath")
|
||||
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$domain_ruleset_tag")
|
||||
config=$(sing_box_cm_patch_dns_route_rule "$config" "$SB_FAKEIP_RULESET_DNS_RULE_TAG" "rule_set" "$domain_ruleset_tag")
|
||||
|
||||
config=$(sing_box_cm_add_local_ruleset "$config" "$subnet_ruleset_tag" "source" "$subnet_ruleset_filepath")
|
||||
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$subnet_ruleset_tag")
|
||||
}
|
||||
|
||||
import_domain_ip_list_file_into_rulesets() {
|
||||
local filepath="$1"
|
||||
local section="$2"
|
||||
local domains_tmpfile subnets_tmpfile domain_ruleset_filepath subnet_ruleset_filepath
|
||||
|
||||
[ -f "$filepath" ] || return 0
|
||||
|
||||
domains_tmpfile="$(mktemp)"
|
||||
subnets_tmpfile="$(mktemp)"
|
||||
domain_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "domains")"
|
||||
subnet_ruleset_filepath="$(get_domain_ip_list_ruleset_path "$section" "subnets")"
|
||||
|
||||
split_domain_or_subnet_file "$filepath" "$domains_tmpfile" "$subnets_tmpfile"
|
||||
import_plain_domain_list_to_local_source_ruleset_chunked "$domains_tmpfile" "$domain_ruleset_filepath"
|
||||
import_plain_subnet_list_to_local_source_ruleset_chunked "$subnets_tmpfile" "$subnet_ruleset_filepath"
|
||||
nft_add_set_elements_from_file_chunked "$subnets_tmpfile" "$NFT_TABLE_NAME" "$NFT_COMMON_SET_NAME"
|
||||
|
||||
rm -f "$domains_tmpfile" "$subnets_tmpfile"
|
||||
}
|
||||
|
||||
import_domain_ip_list_reference_into_rulesets() {
|
||||
local reference="$1"
|
||||
local section="$2"
|
||||
local tmpfile http_proxy_address
|
||||
|
||||
case "$reference" in
|
||||
http://* | https://*)
|
||||
tmpfile="$(mktemp)"
|
||||
http_proxy_address="$(get_service_proxy_address)"
|
||||
download_to_file "$reference" "$tmpfile" "$http_proxy_address"
|
||||
if [ $? -eq 0 ] && [ -s "$tmpfile" ]; then
|
||||
convert_crlf_to_lf "$tmpfile"
|
||||
import_domain_ip_list_file_into_rulesets "$tmpfile" "$section"
|
||||
else
|
||||
log "Download $reference list failed" "error"
|
||||
fi
|
||||
rm -f "$tmpfile"
|
||||
;;
|
||||
*)
|
||||
import_domain_ip_list_file_into_rulesets "$reference" "$section"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
configure_domain_ip_lists() {
|
||||
local section="$1"
|
||||
local route_rule_tag="$2"
|
||||
|
||||
reset_domain_ip_list_rulesets "$section"
|
||||
ensure_domain_ip_list_rulesets "$section" "$route_rule_tag"
|
||||
|
||||
config_list_foreach "$section" "domain_ip_lists" configure_domain_ip_lists_reference_handler "$section"
|
||||
}
|
||||
|
||||
configure_domain_ip_lists_reference_handler() {
|
||||
local reference="$1"
|
||||
local section="$2"
|
||||
|
||||
case "$reference" in
|
||||
http://* | https://*) return 0 ;;
|
||||
esac
|
||||
|
||||
import_domain_ip_list_reference_into_rulesets "$reference" "$section"
|
||||
}
|
||||
|
||||
rebuild_domain_ip_lists_from_rule() {
|
||||
local section="$1"
|
||||
local references
|
||||
|
||||
rule_is_enabled "$section" || return 0
|
||||
config_get references "$section" "domain_ip_lists"
|
||||
[ -n "$references" ] || return 0
|
||||
|
||||
reset_domain_ip_list_rulesets "$section"
|
||||
config_list_foreach "$section" "domain_ip_lists" import_domain_ip_list_reference_into_rulesets "$section"
|
||||
}
|
||||
|
||||
rule_has_primary_matchers() {
|
||||
local section="$1"
|
||||
local domain domain_suffix domain_keyword domain_regex ip_cidr source_ip_cidr community_lists rule_set
|
||||
local domain domain_suffix domain_keyword domain_regex ip_cidr source_ip_cidr community_lists rule_set domain_ip_lists
|
||||
|
||||
domain="$(get_rule_condition_commas_string "$section" "domain" "domains")"
|
||||
domain_suffix="$(get_rule_condition_commas_string "$section" "domain_suffix" "domains")"
|
||||
@@ -2207,6 +2557,7 @@ rule_has_primary_matchers() {
|
||||
source_ip_cidr="$(get_rule_condition_commas_string "$section" "source_ip_cidr" "subnets")"
|
||||
config_get community_lists "$section" "community_lists"
|
||||
config_get rule_set "$section" "rule_set"
|
||||
config_get domain_ip_lists "$section" "domain_ip_lists"
|
||||
|
||||
if [ -n "$domain" ] ||
|
||||
[ -n "$domain_suffix" ] ||
|
||||
@@ -2215,7 +2566,8 @@ rule_has_primary_matchers() {
|
||||
[ -n "$ip_cidr" ] ||
|
||||
[ -n "$source_ip_cidr" ] ||
|
||||
[ -n "$community_lists" ] ||
|
||||
[ -n "$rule_set" ]; then
|
||||
[ -n "$rule_set" ] ||
|
||||
[ -n "$domain_ip_lists" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
@@ -2283,8 +2635,13 @@ configure_route_rule_handler() {
|
||||
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "source_ip_cidr" "$source_ip_values_json")
|
||||
fi
|
||||
|
||||
local domain_ip_lists
|
||||
config_get domain_ip_lists "$section" "domain_ip_lists"
|
||||
config_list_foreach "$section" "community_lists" configure_community_list_handler "$section" "$route_rule_tag"
|
||||
config_list_foreach "$section" "rule_set" configure_rule_set_reference_handler "$route_rule_tag"
|
||||
if [ -n "$domain_ip_lists" ]; then
|
||||
configure_domain_ip_lists "$section" "$route_rule_tag"
|
||||
fi
|
||||
}
|
||||
|
||||
include_source_ips_in_routing_handler() {
|
||||
@@ -2443,7 +2800,7 @@ configure_community_list_handler() {
|
||||
format="binary"
|
||||
url="$SRS_MAIN_URL/$tag.srs"
|
||||
detour="$(get_download_detour_tag)"
|
||||
config_get update_interval "settings" "update_interval" "1d"
|
||||
update_interval="$(get_remote_ruleset_update_interval)"
|
||||
|
||||
config=$(sing_box_cm_add_remote_ruleset "$config" "$ruleset_tag" "$format" "$url" "$detour" "$update_interval")
|
||||
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
|
||||
@@ -2576,7 +2933,7 @@ configure_remote_domain_or_subnet_list_handler() {
|
||||
ruleset_tag=$(get_ruleset_tag "$section" "$basename" "remote-$type")
|
||||
format="$(get_ruleset_format_by_file_extension "$file_extension")"
|
||||
detour="$(get_download_detour_tag)"
|
||||
config_get update_interval "settings" "update_interval" "1d"
|
||||
update_interval="$(get_remote_ruleset_update_interval)"
|
||||
|
||||
config=$(sing_box_cm_add_remote_ruleset "$config" "$ruleset_tag" "$format" "$url" "$detour" "$update_interval")
|
||||
config=$(sing_box_cm_patch_route_rule "$config" "$route_rule_tag" "rule_set" "$ruleset_tag")
|
||||
@@ -2747,13 +3104,25 @@ import_inline_custom_ruleset_subnets_from_rule() {
|
||||
|
||||
import_inline_custom_ruleset_subnets_reference_handler() {
|
||||
local reference="$1"
|
||||
local extension
|
||||
|
||||
case "$reference" in
|
||||
/*.srs)
|
||||
import_custom_ruleset_subnets_from_local "$reference" "binary"
|
||||
;;
|
||||
http://*.srs | https://*.srs)
|
||||
import_custom_ruleset_subnets_from_remote "$reference" "binary"
|
||||
/*.json)
|
||||
import_custom_ruleset_subnets_from_local "$reference" "source"
|
||||
;;
|
||||
http://* | https://*)
|
||||
extension="$(url_get_file_extension "$reference")"
|
||||
case "$extension" in
|
||||
srs)
|
||||
import_custom_ruleset_subnets_from_remote "$reference" "binary"
|
||||
;;
|
||||
json)
|
||||
import_custom_ruleset_subnets_from_remote "$reference" "source"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
@@ -3144,7 +3513,7 @@ section_by_connection_type_exists() {
|
||||
section_has_enabled_lists() {
|
||||
local section="$1"
|
||||
local domain domain_suffix domain_keyword domain_regex community_lists user_domain_list_type user_subnet_list_type \
|
||||
local_domain_lists local_subnet_lists remote_domain_lists remote_subnet_lists
|
||||
local_domain_lists local_subnet_lists remote_domain_lists remote_subnet_lists domain_ip_lists
|
||||
|
||||
rule_is_enabled "$section" || return 1
|
||||
|
||||
@@ -3159,6 +3528,7 @@ section_has_enabled_lists() {
|
||||
config_get local_subnet_lists "$section" "local_subnet_lists"
|
||||
config_get remote_domain_lists "$section" "remote_domain_lists"
|
||||
config_get remote_subnet_lists "$section" "remote_subnet_lists"
|
||||
config_get domain_ip_lists "$section" "domain_ip_lists"
|
||||
|
||||
if [ -n "$domain" ] ||
|
||||
[ -n "$domain_suffix" ] ||
|
||||
@@ -3170,7 +3540,8 @@ section_has_enabled_lists() {
|
||||
[ -n "$local_domain_lists" ] ||
|
||||
[ -n "$local_subnet_lists" ] ||
|
||||
[ -n "$remote_domain_lists" ] ||
|
||||
[ -n "$remote_subnet_lists" ]; then
|
||||
[ -n "$remote_subnet_lists" ] ||
|
||||
[ -n "$domain_ip_lists" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@@ -4449,7 +4820,8 @@ Available commands:
|
||||
disable Disable Podkop Plus autostart
|
||||
uninstall Remove Podkop Plus files installed outside opkg/apk
|
||||
main Run main Podkop Plus process
|
||||
list_update Update domain lists
|
||||
list_update Update remote lists
|
||||
list_update_if_due Update remote lists only when the configured interval has elapsed
|
||||
check_proxy Check proxy connectivity
|
||||
check_nft Check NFT rules
|
||||
check_nft_rules Check NFT rules status
|
||||
@@ -4505,6 +4877,9 @@ main)
|
||||
list_update)
|
||||
list_update
|
||||
;;
|
||||
list_update_if_due)
|
||||
list_update_if_due
|
||||
;;
|
||||
check_proxy)
|
||||
check_proxy
|
||||
;;
|
||||
|
||||
@@ -183,6 +183,7 @@ url_get_basename() {
|
||||
local url="$1"
|
||||
|
||||
local filename="${url##*/}"
|
||||
filename="${filename%%[?#]*}"
|
||||
local basename="${filename%%.*}"
|
||||
|
||||
echo "$basename"
|
||||
@@ -193,8 +194,9 @@ url_get_file_extension() {
|
||||
local url="$1"
|
||||
|
||||
local basename="${url##*/}"
|
||||
basename="${basename%%[?#]*}"
|
||||
case "$basename" in
|
||||
*.*) echo "${basename##*.}" ;;
|
||||
*.*) echo "${basename##*.}" | tr '[:upper:]' '[:lower:]' ;;
|
||||
*) echo "" ;;
|
||||
esac
|
||||
}
|
||||
@@ -355,3 +357,40 @@ parse_domain_or_subnet_file_to_comma_string() {
|
||||
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
#######################################
|
||||
# Splits a plain list file into separate domain and subnet files.
|
||||
# Invalid items are skipped.
|
||||
# Arguments:
|
||||
# $1 - Path to the input file
|
||||
# $2 - Output file for domains
|
||||
# $3 - Output file for IPv4 / IPv4 CIDR entries
|
||||
#######################################
|
||||
split_domain_or_subnet_file() {
|
||||
local filepath="$1"
|
||||
local domains_output="$2"
|
||||
local subnets_output="$3"
|
||||
local line
|
||||
|
||||
: > "$domains_output"
|
||||
: > "$subnets_output"
|
||||
|
||||
while IFS= read -r line; do
|
||||
line=$(printf "%s\n" "$line" | sed -e 's/[[:space:]]*\/\/.*$//' -e 's/[[:space:]]*#.*$//')
|
||||
line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||
|
||||
[ -z "$line" ] && continue
|
||||
|
||||
if is_domain_suffix "$line"; then
|
||||
printf '%s\n' "$line" >> "$domains_output"
|
||||
continue
|
||||
fi
|
||||
|
||||
if is_ipv4_ip_or_ipv4_cidr "$line"; then
|
||||
printf '%s\n' "$line" >> "$subnets_output"
|
||||
continue
|
||||
fi
|
||||
|
||||
log "'$line' is neither a valid domain nor IPv4 / IPv4 CIDR" "debug"
|
||||
done < "$filepath"
|
||||
}
|
||||
|
||||
@@ -857,6 +857,7 @@ build_generated_zapret_hostlist() {
|
||||
config_list_foreach "$section" "local_domain_lists" _append_zapret_hostlist_reference_handler "$tmpfile"
|
||||
config_list_foreach "$section" "remote_domain_lists" _append_zapret_hostlist_reference_handler "$tmpfile"
|
||||
config_list_foreach "$section" "rule_set" _append_zapret_hostlist_reference_handler "$tmpfile"
|
||||
config_list_foreach "$section" "domain_ip_lists" _append_zapret_hostlist_reference_handler "$tmpfile"
|
||||
|
||||
config_get user_domain_list_type "$section" "user_domain_list_type" "disabled"
|
||||
case "$user_domain_list_type" in
|
||||
|
||||
Reference in New Issue
Block a user