Make zapret optional and handle missing package gracefully
This commit is contained in:
@@ -28,4 +28,4 @@ sh <(wget -O - https://raw.githubusercontent.com/ushan0v/podkop-plus/main/instal
|
|||||||
- ручное управление очередью и fwmark: `--qnum`, `--dpi-desync-fwmark`;
|
- ручное управление очередью и fwmark: `--qnum`, `--dpi-desync-fwmark`;
|
||||||
- режимы, которые ломают lifecycle процесса: `--daemon`;
|
- режимы, которые ломают lifecycle процесса: `--daemon`;
|
||||||
- режимы, которые не должны быть итоговой стратегией запуска: `--dry-run`, `--version`;
|
- режимы, которые не должны быть итоговой стратегией запуска: `--dry-run`, `--version`;
|
||||||
- внешние конфиги вида `@file` или `$file`, которые обходят встроенную валидацию и управление очередями.
|
- внешние конфиги вида `@file` или `$file`, которые обходят встроенную валидацию и управление очередями.
|
||||||
|
|||||||
+187
-131
@@ -5,6 +5,13 @@
|
|||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/dashboard/initController.ts:345",
|
"src/podkop/tabs/dashboard/initController.ts:345",
|
||||||
"src/podkop/tabs/dashboard/initController.ts:356",
|
"src/podkop/tabs/dashboard/initController.ts:356",
|
||||||
|
"src/podkop/tabs/dashboard/initController.ts:369"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"call": "✘ Not installed",
|
||||||
|
"key": "✘ Not installed",
|
||||||
|
"places": [
|
||||||
"src/podkop/tabs/dashboard/initController.ts:367"
|
"src/podkop/tabs/dashboard/initController.ts:367"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -14,7 +21,7 @@
|
|||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/dashboard/initController.ts:346",
|
"src/podkop/tabs/dashboard/initController.ts:346",
|
||||||
"src/podkop/tabs/dashboard/initController.ts:357",
|
"src/podkop/tabs/dashboard/initController.ts:357",
|
||||||
"src/podkop/tabs/dashboard/initController.ts:368"
|
"src/podkop/tabs/dashboard/initController.ts:370"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -28,7 +35,7 @@
|
|||||||
"call": "A latency-tested group of proxy URLs for this section",
|
"call": "A latency-tested group of proxy URLs for this section",
|
||||||
"key": "A latency-tested group of proxy URLs for this section",
|
"key": "A latency-tested group of proxy URLs for this section",
|
||||||
"places": [
|
"places": [
|
||||||
"../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:1700"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -42,15 +49,15 @@
|
|||||||
"call": "A manual group of proxy URLs for this section",
|
"call": "A manual group of proxy URLs for this section",
|
||||||
"key": "A manual group of proxy URLs for this section",
|
"key": "A manual group of proxy URLs for this section",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1533"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1682"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Action",
|
"call": "Action",
|
||||||
"key": "Action",
|
"key": "Action",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1401",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1524",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1426"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1556"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -71,7 +78,7 @@
|
|||||||
"call": "Add URLs or local paths to .srs lists",
|
"call": "Add URLs or local paths to .srs lists",
|
||||||
"key": "Add URLs or local paths to .srs lists",
|
"key": "Add URLs or local paths to .srs lists",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1935"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2084"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -100,21 +107,21 @@
|
|||||||
"key": "Applicable for SOCKS and Shadowsocks links",
|
"key": "Applicable for SOCKS and Shadowsocks links",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170",
|
"../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:1646"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1795"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "At least one valid domain must be specified.",
|
"call": "At least one valid domain must be specified.",
|
||||||
"key": "At least one valid domain must be specified.",
|
"key": "At least one valid domain must be specified.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:681"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:834"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "At least one valid IP or subnet must be specified.",
|
"call": "At least one valid IP or subnet must be specified.",
|
||||||
"key": "At least one valid IP or subnet must be specified.",
|
"key": "At least one valid IP or subnet must be specified.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:692"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:845"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -135,7 +142,7 @@
|
|||||||
"call": "Backend validation failed: %s",
|
"call": "Backend validation failed: %s",
|
||||||
"key": "Backend validation failed: %s",
|
"key": "Backend validation failed: %s",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:783"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:936"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -145,6 +152,14 @@
|
|||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:21"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:21"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"call": "Block",
|
||||||
|
"key": "Block",
|
||||||
|
"places": [
|
||||||
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:229",
|
||||||
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:262"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"call": "Bootsrap DNS",
|
"call": "Bootsrap DNS",
|
||||||
"key": "Bootsrap DNS",
|
"key": "Bootsrap DNS",
|
||||||
@@ -177,7 +192,7 @@
|
|||||||
"call": "Built-in rule sets",
|
"call": "Built-in rule sets",
|
||||||
"key": "Built-in rule sets",
|
"key": "Built-in rule sets",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1840"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1989"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -228,7 +243,6 @@
|
|||||||
"call": "Checks failed",
|
"call": "Checks failed",
|
||||||
"key": "Checks failed",
|
"key": "Checks failed",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38",
|
|
||||||
"src/podkop/tabs/diagnostic/helpers/getMeta.ts:26"
|
"src/podkop/tabs/diagnostic/helpers/getMeta.ts:26"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -236,7 +250,8 @@
|
|||||||
"call": "Checks passed",
|
"call": "Checks passed",
|
||||||
"key": "Checks passed",
|
"key": "Checks passed",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38",
|
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:40",
|
||||||
|
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:82",
|
||||||
"src/podkop/tabs/diagnostic/helpers/getMeta.ts:13"
|
"src/podkop/tabs/diagnostic/helpers/getMeta.ts:13"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -265,7 +280,7 @@
|
|||||||
"call": "Conditions",
|
"call": "Conditions",
|
||||||
"key": "Conditions",
|
"key": "Conditions",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1389"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1512"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -286,14 +301,14 @@
|
|||||||
"call": "Connection",
|
"call": "Connection",
|
||||||
"key": "Connection",
|
"key": "Connection",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1492"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1637"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Connection Type",
|
"call": "Connection Type",
|
||||||
"key": "Connection Type",
|
"key": "Connection Type",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1475"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1620"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -301,7 +316,7 @@
|
|||||||
"key": "Connection URL",
|
"key": "Connection URL",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19",
|
"../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:1478"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -408,7 +423,7 @@
|
|||||||
"key": "DNS over HTTPS (DoH)",
|
"key": "DNS over HTTPS (DoH)",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227",
|
"../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:1711",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860",
|
||||||
"../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:15"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -417,7 +432,7 @@
|
|||||||
"key": "DNS over TLS (DoT)",
|
"key": "DNS over TLS (DoT)",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228",
|
"../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:1712",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1861",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:16"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:16"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -425,7 +440,7 @@
|
|||||||
"call": "DNS protocol",
|
"call": "DNS protocol",
|
||||||
"key": "DNS protocol",
|
"key": "DNS protocol",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1709"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1858"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -453,7 +468,7 @@
|
|||||||
"call": "DNS server",
|
"call": "DNS server",
|
||||||
"key": "DNS server",
|
"key": "DNS server",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1727"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1876"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -482,21 +497,21 @@
|
|||||||
"call": "Domain keyword",
|
"call": "Domain keyword",
|
||||||
"key": "Domain keyword",
|
"key": "Domain keyword",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1810"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1959"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Domain regex",
|
"call": "Domain regex",
|
||||||
"key": "Domain regex",
|
"key": "Domain regex",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1817"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1966"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Domains",
|
"call": "Domains",
|
||||||
"key": "Domains",
|
"key": "Domains",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1782"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1931"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -567,9 +582,9 @@
|
|||||||
"call": "Duplicate value",
|
"call": "Duplicate value",
|
||||||
"key": "Duplicate value",
|
"key": "Duplicate value",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:248",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:367",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:263",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:382",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:283"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:402"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -578,7 +593,7 @@
|
|||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8",
|
"../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:8",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:8",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1391"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -592,7 +607,7 @@
|
|||||||
"call": "Enable a dedicated DNS resolver when this section uses an interface",
|
"call": "Enable a dedicated DNS resolver when this section uses an interface",
|
||||||
"key": "Enable a dedicated DNS resolver when this section uses an interface",
|
"key": "Enable a dedicated DNS resolver when this section uses an interface",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1698"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1847"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -606,7 +621,7 @@
|
|||||||
"call": "Enable Mixed Proxy",
|
"call": "Enable Mixed Proxy",
|
||||||
"key": "Enable Mixed Proxy",
|
"key": "Enable Mixed Proxy",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1749"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -635,7 +650,7 @@
|
|||||||
"key": "Enter a complete sing-box outbound object",
|
"key": "Enter a complete sing-box outbound object",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52",
|
"../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:1514"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1660"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -643,7 +658,7 @@
|
|||||||
"key": "Every 3 minutes",
|
"key": "Every 3 minutes",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103",
|
"../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:1572"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -651,7 +666,7 @@
|
|||||||
"key": "Every 30 seconds",
|
"key": "Every 30 seconds",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101",
|
"../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:1570"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -659,7 +674,7 @@
|
|||||||
"key": "Every 5 minutes",
|
"key": "Every 5 minutes",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104",
|
"../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:1573"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -667,14 +682,14 @@
|
|||||||
"key": "Every minute",
|
"key": "Every minute",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102",
|
"../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:1571"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1720"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Exact full domain",
|
"call": "Exact full domain",
|
||||||
"key": "Exact full domain",
|
"key": "Exact full domain",
|
||||||
"places": [
|
"places": [
|
||||||
"../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:1945"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -702,14 +717,14 @@
|
|||||||
"call": "Expose this section as a local HTTP+SOCKS proxy",
|
"call": "Expose this section as a local HTTP+SOCKS proxy",
|
||||||
"key": "Expose this section as a local HTTP+SOCKS proxy",
|
"key": "Expose this section as a local HTTP+SOCKS proxy",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1750"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1899"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "External nfqws config files bypass Podkop Plus queue management and explicit validation.",
|
"call": "External nfqws config files bypass Podkop Plus queue management and explicit validation.",
|
||||||
"key": "External nfqws config files bypass Podkop Plus queue management and explicit validation.",
|
"key": "External nfqws config files bypass Podkop Plus queue management and explicit validation.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:844"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:997"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -723,12 +738,12 @@
|
|||||||
"call": "Failed to execute!",
|
"call": "Failed to execute!",
|
||||||
"key": "Failed to execute!",
|
"key": "Failed to execute!",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:250",
|
"src/podkop/tabs/diagnostic/initController.ts:251",
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:254",
|
"src/podkop/tabs/diagnostic/initController.ts:255",
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:300",
|
"src/podkop/tabs/diagnostic/initController.ts:301",
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:304",
|
"src/podkop/tabs/diagnostic/initController.ts:305",
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:341",
|
"src/podkop/tabs/diagnostic/initController.ts:342",
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:345"
|
"src/podkop/tabs/diagnostic/initController.ts:346"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -757,7 +772,7 @@
|
|||||||
"call": "Global check",
|
"call": "Global check",
|
||||||
"key": "Global check",
|
"key": "Global check",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:245"
|
"src/podkop/tabs/diagnostic/initController.ts:246"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -771,7 +786,7 @@
|
|||||||
"call": "How to configure the proxy connection for this section",
|
"call": "How to configure the proxy connection for this section",
|
||||||
"key": "How to configure the proxy connection for this section",
|
"key": "How to configure the proxy connection for this section",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1476"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1621"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -787,8 +802,8 @@
|
|||||||
"places": [
|
"places": [
|
||||||
"../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:23",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179",
|
"../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:1482",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1627",
|
||||||
"../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:1806"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -950,7 +965,7 @@
|
|||||||
"call": "Invalid port number. Must be between 1 and 65535",
|
"call": "Invalid port number. Must be between 1 and 65535",
|
||||||
"key": "Invalid port number. Must be between 1 and 65535",
|
"key": "Invalid port number. Must be between 1 and 65535",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1777",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1926",
|
||||||
"src/validators/validateShadowsocksUrl.ts:85"
|
"src/validators/validateShadowsocksUrl.ts:85"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -958,7 +973,7 @@
|
|||||||
"call": "Invalid regular expression",
|
"call": "Invalid regular expression",
|
||||||
"key": "Invalid regular expression",
|
"key": "Invalid regular expression",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:191"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:310"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1134,7 +1149,7 @@
|
|||||||
"call": "IPs",
|
"call": "IPs",
|
||||||
"key": "IPs",
|
"key": "IPs",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1789"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1938"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1148,14 +1163,14 @@
|
|||||||
"call": "Keyword must not contain spaces",
|
"call": "Keyword must not contain spaces",
|
||||||
"key": "Keyword must not contain spaces",
|
"key": "Keyword must not contain spaces",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:201"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:320"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Latest",
|
"call": "Latest",
|
||||||
"key": "Latest",
|
"key": "Latest",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:501"
|
"src/podkop/tabs/diagnostic/initController.ts:502"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1197,42 +1212,42 @@
|
|||||||
"call": "Match destination IPs or subnets",
|
"call": "Match destination IPs or subnets",
|
||||||
"key": "Match destination IPs or subnets",
|
"key": "Match destination IPs or subnets",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1790"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1939"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Match domains containing a substring",
|
"call": "Match domains containing a substring",
|
||||||
"key": "Match domains containing a substring",
|
"key": "Match domains containing a substring",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1811"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1960"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Match domains including all subdomains",
|
"call": "Match domains including all subdomains",
|
||||||
"key": "Match domains including all subdomains",
|
"key": "Match domains including all subdomains",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1783"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1932"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Match domains using a regular expression",
|
"call": "Match domains using a regular expression",
|
||||||
"key": "Match domains using a regular expression",
|
"key": "Match domains using a regular expression",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1818"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1967"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Match only one exact full domain name",
|
"call": "Match only one exact full domain name",
|
||||||
"key": "Match only one exact full domain name",
|
"key": "Match only one exact full domain name",
|
||||||
"places": [
|
"places": [
|
||||||
"../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:1946"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Match source IPs or subnets",
|
"call": "Match source IPs or subnets",
|
||||||
"key": "Match source IPs or subnets",
|
"key": "Match source IPs or subnets",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1825"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1974"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1240,7 +1255,7 @@
|
|||||||
"key": "Maximum response time delta in milliseconds",
|
"key": "Maximum response time delta in milliseconds",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114",
|
"../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:1584"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1733"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1254,7 +1269,7 @@
|
|||||||
"call": "Mixed Proxy Port",
|
"call": "Mixed Proxy Port",
|
||||||
"key": "Mixed Proxy Port",
|
"key": "Mixed Proxy Port",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1761"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1910"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1269,21 +1284,21 @@
|
|||||||
"key": "Must be a number in the range of 50 - 1000",
|
"key": "Must be a number in the range of 50 - 1000",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136",
|
"../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:1606"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1755"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "NFQWS Strategy",
|
"call": "NFQWS Strategy",
|
||||||
"key": "NFQWS Strategy",
|
"key": "NFQWS Strategy",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1441"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1586"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "NFQWS strategy cannot be empty",
|
"call": "NFQWS strategy cannot be empty",
|
||||||
"key": "NFQWS strategy cannot be empty",
|
"key": "NFQWS strategy cannot be empty",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:974"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1127"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1293,6 +1308,13 @@
|
|||||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105"
|
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"call": "No rules use zapret",
|
||||||
|
"key": "No rules use zapret",
|
||||||
|
"places": [
|
||||||
|
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:45"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"call": "Node Type",
|
"call": "Node Type",
|
||||||
"key": "Node Type",
|
"key": "Node Type",
|
||||||
@@ -1307,6 +1329,13 @@
|
|||||||
"src/podkop/tabs/diagnostic/partials/renderCheckSection.ts:189"
|
"src/podkop/tabs/diagnostic/partials/renderCheckSection.ts:189"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"call": "not installed",
|
||||||
|
"key": "not installed",
|
||||||
|
"places": [
|
||||||
|
"src/podkop/tabs/diagnostic/initController.ts:523"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"call": "Not responding",
|
"call": "Not responding",
|
||||||
"key": "Not responding",
|
"key": "Not responding",
|
||||||
@@ -1320,12 +1349,12 @@
|
|||||||
"call": "Not running",
|
"call": "Not running",
|
||||||
"key": "Not running",
|
"key": "Not running",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:56",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:57",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:64",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:65",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:72",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:73",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:80",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:81",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:88",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:89",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:96"
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:97"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1353,7 +1382,7 @@
|
|||||||
"call": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws.",
|
"call": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws.",
|
||||||
"key": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws.",
|
"key": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1052"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1205"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1362,15 +1391,15 @@
|
|||||||
"places": [
|
"places": [
|
||||||
"../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:22",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51",
|
"../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:1481",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1626",
|
||||||
"../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:1659"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Outdated",
|
"call": "Outdated",
|
||||||
"key": "Outdated",
|
"key": "Outdated",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:491"
|
"src/podkop/tabs/diagnostic/initController.ts:492"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1419,12 +1448,12 @@
|
|||||||
"call": "Pending",
|
"call": "Pending",
|
||||||
"key": "Pending",
|
"key": "Pending",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:112",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:113",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:120",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:121",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:128",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:129",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:136",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:137",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:144",
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:145",
|
||||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:152"
|
"src/podkop/tabs/diagnostic/diagnostic.store.ts:153"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1438,7 +1467,7 @@
|
|||||||
"call": "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here.",
|
"call": "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here.",
|
||||||
"key": "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here.",
|
"key": "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:862"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1015"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1459,14 +1488,22 @@
|
|||||||
"call": "Port cannot be empty",
|
"call": "Port cannot be empty",
|
||||||
"key": "Port cannot be empty",
|
"key": "Port cannot be empty",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1769"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1918"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Port for the local mixed proxy of this section",
|
"call": "Port for the local mixed proxy of this section",
|
||||||
"key": "Port for the local mixed proxy of this section",
|
"key": "Port for the local mixed proxy of this section",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1911"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"call": "Proxy",
|
||||||
|
"key": "Proxy",
|
||||||
|
"places": [
|
||||||
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:238",
|
||||||
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:260"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1494,7 +1531,7 @@
|
|||||||
"call": "Regional options cannot be used together",
|
"call": "Regional options cannot be used together",
|
||||||
"key": "Regional options cannot be used together",
|
"key": "Regional options cannot be used together",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1879"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2028"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1515,7 +1552,7 @@
|
|||||||
"call": "Resolver for interface outbound",
|
"call": "Resolver for interface outbound",
|
||||||
"key": "Resolver for interface outbound",
|
"key": "Resolver for interface outbound",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1697"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1846"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1529,14 +1566,14 @@
|
|||||||
"call": "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE.",
|
"call": "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE.",
|
||||||
"key": "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE.",
|
"key": "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:847"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1000"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE.",
|
"call": "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE.",
|
||||||
"key": "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE.",
|
"key": "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:850"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1003"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1571,9 +1608,9 @@
|
|||||||
"call": "Rule set must be a direct .srs URL or a local .srs path",
|
"call": "Rule set must be a direct .srs URL or a local .srs path",
|
||||||
"key": "Rule set must be a direct .srs URL or a local .srs path",
|
"key": "Rule set must be a direct .srs URL or a local .srs path",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1313",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1466",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1322",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1475",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1325"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1478"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1587,7 +1624,7 @@
|
|||||||
"call": "Rule sets",
|
"call": "Rule sets",
|
||||||
"key": "Rule sets",
|
"key": "Rule sets",
|
||||||
"places": [
|
"places": [
|
||||||
"../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:2083"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1643,7 +1680,7 @@
|
|||||||
"call": "Russia inside restrictions",
|
"call": "Russia inside restrictions",
|
||||||
"key": "Russia inside restrictions",
|
"key": "Russia inside restrictions",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2047"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1671,7 +1708,7 @@
|
|||||||
"call": "Section name",
|
"call": "Section name",
|
||||||
"key": "Section name",
|
"key": "Section name",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1413"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1543"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1685,7 +1722,7 @@
|
|||||||
"call": "Select a predefined list for routing",
|
"call": "Select a predefined list for routing",
|
||||||
"key": "Select a predefined list for routing",
|
"key": "Select a predefined list for routing",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1841"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1756,14 +1793,14 @@
|
|||||||
"key": "Selector",
|
"key": "Selector",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:20",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:20",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1479"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1624"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Selector connections",
|
"call": "Selector connections",
|
||||||
"key": "Selector connections",
|
"key": "Selector connections",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1532"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1681"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1777,7 +1814,7 @@
|
|||||||
"call": "Service list",
|
"call": "Service list",
|
||||||
"key": "Service list",
|
"key": "Service list",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1844"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1993"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1792,14 +1829,14 @@
|
|||||||
"key": "Settings",
|
"key": "Settings",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:391",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:391",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1388"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1511"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Show sing-box config",
|
"call": "Show sing-box config",
|
||||||
"key": "Show sing-box config",
|
"key": "Show sing-box config",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:329",
|
"src/podkop/tabs/diagnostic/initController.ts:330",
|
||||||
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116"
|
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1863,7 +1900,7 @@
|
|||||||
"call": "Source IPs",
|
"call": "Source IPs",
|
||||||
"key": "Source IPs",
|
"key": "Source IPs",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1824"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1973"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1933,7 +1970,7 @@
|
|||||||
"call": "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here.",
|
"call": "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here.",
|
||||||
"key": "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here.",
|
"key": "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:859"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1012"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1947,35 +1984,43 @@
|
|||||||
"call": "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here.",
|
"call": "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here.",
|
||||||
"key": "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here.",
|
"key": "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:856"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1009"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"call": "There are rules using zapret",
|
||||||
|
"key": "There are rules using zapret",
|
||||||
|
"places": [
|
||||||
|
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:69",
|
||||||
|
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:92"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here.",
|
"call": "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here.",
|
||||||
"key": "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here.",
|
"key": "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:865"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1018"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "This field must start a working nfqws strategy; --version exits immediately and is not allowed here.",
|
"call": "This field must start a working nfqws strategy; --version exits immediately and is not allowed here.",
|
||||||
"key": "This field must start a working nfqws strategy; --version exits immediately and is not allowed here.",
|
"key": "This field must start a working nfqws strategy; --version exits immediately and is not allowed here.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:868"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1021"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "This flag does not accept a value.",
|
"call": "This flag does not accept a value.",
|
||||||
"key": "This flag does not accept a value.",
|
"key": "This flag does not accept a value.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1037"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1190"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "This option requires a value.",
|
"call": "This option requires a value.",
|
||||||
"key": "This option requires a value.",
|
"key": "This option requires a value.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1068"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1221"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2032,7 +2077,7 @@
|
|||||||
"key": "UDP",
|
"key": "UDP",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:229",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:229",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2047,21 +2092,21 @@
|
|||||||
"key": "UDP over TCP",
|
"key": "UDP over TCP",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169",
|
"../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:1645"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1794"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Unable to validate the NFQWS strategy through the backend parser.",
|
"call": "Unable to validate the NFQWS strategy through the backend parser.",
|
||||||
"key": "Unable to validate the NFQWS strategy through the backend parser.",
|
"key": "Unable to validate the NFQWS strategy through the backend parser.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:779"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:932"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Unexpected standalone token. Use explicit flags such as --name or --name=value.",
|
"call": "Unexpected standalone token. Use explicit flags such as --name or --name=value.",
|
||||||
"key": "Unexpected standalone token. Use explicit flags such as --name or --name=value.",
|
"key": "Unexpected standalone token. Use explicit flags such as --name or --name=value.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1017"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1170"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2080,9 +2125,9 @@
|
|||||||
"src/podkop/tabs/diagnostic/initController.ts:28",
|
"src/podkop/tabs/diagnostic/initController.ts:28",
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:29",
|
"src/podkop/tabs/diagnostic/initController.ts:29",
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:30",
|
"src/podkop/tabs/diagnostic/initController.ts:30",
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:31",
|
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:32",
|
"src/podkop/tabs/diagnostic/initController.ts:32",
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:463"
|
"src/podkop/tabs/diagnostic/initController.ts:33",
|
||||||
|
"src/podkop/tabs/diagnostic/initController.ts:464"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2096,7 +2141,7 @@
|
|||||||
"call": "Unknown NFQWS flag.",
|
"call": "Unknown NFQWS flag.",
|
||||||
"key": "Unknown NFQWS flag.",
|
"key": "Unknown NFQWS flag.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1028"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1181"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2133,21 +2178,21 @@
|
|||||||
"key": "URLTest",
|
"key": "URLTest",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:21",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:21",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "URLTest connections",
|
"call": "URLTest connections",
|
||||||
"key": "URLTest connections",
|
"key": "URLTest connections",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1550"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1699"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "URLTest interval",
|
"call": "URLTest interval",
|
||||||
"key": "URLTest interval",
|
"key": "URLTest interval",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1568"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1717"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2168,7 +2213,7 @@
|
|||||||
"call": "URLTest tolerance",
|
"call": "URLTest tolerance",
|
||||||
"key": "URLTest tolerance",
|
"key": "URLTest tolerance",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1732"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2183,7 +2228,7 @@
|
|||||||
"key": "URLTest URL",
|
"key": "URLTest URL",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139",
|
"../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:1613"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2197,7 +2242,7 @@
|
|||||||
"call": "Use a network interface as the outbound for this section",
|
"call": "Use a network interface as the outbound for this section",
|
||||||
"key": "Use a network interface as the outbound for this section",
|
"key": "Use a network interface as the outbound for this section",
|
||||||
"places": [
|
"places": [
|
||||||
"../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:1807"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2224,16 +2269,16 @@
|
|||||||
"call": "Validation errors:",
|
"call": "Validation errors:",
|
||||||
"key": "Validation errors:",
|
"key": "Validation errors:",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:255",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:374",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:275",
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:394",
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:279"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:398"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "View logs",
|
"call": "View logs",
|
||||||
"key": "View logs",
|
"key": "View logs",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/initController.ts:289",
|
"src/podkop/tabs/diagnostic/initController.ts:290",
|
||||||
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107"
|
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -2241,7 +2286,7 @@
|
|||||||
"call": "Visible name of this section",
|
"call": "Visible name of this section",
|
||||||
"key": "Visible name of this section",
|
"key": "Visible name of this section",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1414"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1544"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2249,28 +2294,28 @@
|
|||||||
"key": "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links",
|
"key": "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32",
|
"../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:1493"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1638"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Warning: %s cannot be used together with %s. Previous selections have been removed.",
|
"call": "Warning: %s cannot be used together with %s. Previous selections have been removed.",
|
||||||
"key": "Warning: %s cannot be used together with %s. Previous selections have been removed.",
|
"key": "Warning: %s cannot be used together with %s. Previous selections have been removed.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1881"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection.",
|
"call": "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection.",
|
||||||
"key": "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection.",
|
"key": "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection.",
|
||||||
"places": [
|
"places": [
|
||||||
"../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:2049"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "What Podkop Plus should do when this section matches",
|
"call": "What Podkop Plus should do when this section matches",
|
||||||
"key": "What Podkop Plus should do when this section matches",
|
"key": "What Podkop Plus should do when this section matches",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1427"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1557"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2291,28 +2336,39 @@
|
|||||||
"call": "Zapret",
|
"call": "Zapret",
|
||||||
"key": "Zapret",
|
"key": "Zapret",
|
||||||
"places": [
|
"places": [
|
||||||
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:234",
|
||||||
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:246",
|
||||||
"src/podkop/tabs/dashboard/initController.ts:365"
|
"src/podkop/tabs/dashboard/initController.ts:365"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"call": "Zapret (package not installed)",
|
||||||
|
"key": "Zapret (package not installed)",
|
||||||
|
"places": [
|
||||||
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:235",
|
||||||
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:282"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"call": "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies.",
|
"call": "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies.",
|
||||||
"key": "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies.",
|
"key": "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies.",
|
||||||
"places": [
|
"places": [
|
||||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:853"
|
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1006"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Zapret installed",
|
"call": "Zapret installed",
|
||||||
"key": "Zapret installed",
|
"key": "Zapret installed",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43"
|
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:87"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"call": "Zapret not installed",
|
"call": "Zapret not installed",
|
||||||
"key": "Zapret not installed",
|
"key": "Zapret not installed",
|
||||||
"places": [
|
"places": [
|
||||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43"
|
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:59",
|
||||||
|
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:64"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
+169
-134
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PODKOP PLUS\n"
|
"Project-Id-Version: PODKOP PLUS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-04-07 18:03+0300\n"
|
"POT-Creation-Date: 2026-04-11 18:16+0300\n"
|
||||||
"PO-Revision-Date: 2026-04-07 18:03+0300\n"
|
"PO-Revision-Date: 2026-04-11 18:16+0300\n"
|
||||||
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
|
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
@@ -18,13 +18,17 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:345
|
#: src/podkop/tabs/dashboard/initController.ts:345
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:356
|
#: src/podkop/tabs/dashboard/initController.ts:356
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:367
|
#: src/podkop/tabs/dashboard/initController.ts:369
|
||||||
msgid "✔ Running"
|
msgid "✔ Running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/podkop/tabs/dashboard/initController.ts:367
|
||||||
|
msgid "✘ Not installed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:346
|
#: src/podkop/tabs/dashboard/initController.ts:346
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:357
|
#: src/podkop/tabs/dashboard/initController.ts:357
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:368
|
#: src/podkop/tabs/dashboard/initController.ts:370
|
||||||
msgid "✘ Stopped"
|
msgid "✘ Stopped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -32,7 +36,7 @@ msgstr ""
|
|||||||
msgid "A latency-tested group of proxy URLs for this node"
|
msgid "A latency-tested group of proxy URLs for this node"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../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:1700
|
||||||
msgid "A latency-tested group of proxy URLs for this section"
|
msgid "A latency-tested group of proxy URLs for this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -40,12 +44,12 @@ msgstr ""
|
|||||||
msgid "A manual group of proxy URLs for this node"
|
msgid "A manual group of proxy URLs for this node"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1533
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1682
|
||||||
msgid "A manual group of proxy URLs for this section"
|
msgid "A manual group of proxy URLs for this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1401
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1524
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1426
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1556
|
||||||
msgid "Action"
|
msgid "Action"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -57,7 +61,7 @@ msgstr ""
|
|||||||
msgid "Add a section"
|
msgid "Add a section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1935
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2084
|
||||||
msgid "Add URLs or local paths to .srs lists"
|
msgid "Add URLs or local paths to .srs lists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -74,15 +78,15 @@ msgid "An error occurred while saving the form:"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170
|
#: ../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:1646
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1795
|
||||||
msgid "Applicable for SOCKS and Shadowsocks links"
|
msgid "Applicable for SOCKS and Shadowsocks links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:681
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:834
|
||||||
msgid "At least one valid domain must be specified."
|
msgid "At least one valid domain must be specified."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:692
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:845
|
||||||
msgid "At least one valid IP or subnet must be specified."
|
msgid "At least one valid IP or subnet must be specified."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -94,7 +98,7 @@ msgstr ""
|
|||||||
msgid "Available actions"
|
msgid "Available actions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:783
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:936
|
||||||
msgid "Backend validation failed: %s"
|
msgid "Backend validation failed: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -102,6 +106,11 @@ msgstr ""
|
|||||||
msgid "Binary file"
|
msgid "Binary file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:229
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:262
|
||||||
|
msgid "Block"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65
|
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65
|
||||||
msgid "Bootsrap DNS"
|
msgid "Bootsrap DNS"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -118,7 +127,7 @@ msgstr ""
|
|||||||
msgid "Browser is using FakeIP correctly"
|
msgid "Browser is using FakeIP correctly"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1840
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1989
|
||||||
msgid "Built-in rule sets"
|
msgid "Built-in rule sets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -151,12 +160,12 @@ msgstr ""
|
|||||||
msgid "checks"
|
msgid "checks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38
|
|
||||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:26
|
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:26
|
||||||
msgid "Checks failed"
|
msgid "Checks failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:40
|
||||||
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:82
|
||||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:13
|
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:13
|
||||||
msgid "Checks passed"
|
msgid "Checks passed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -173,7 +182,7 @@ msgstr ""
|
|||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1389
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1512
|
||||||
msgid "Conditions"
|
msgid "Conditions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -185,16 +194,16 @@ msgstr ""
|
|||||||
msgid "Configuration for Podkop Plus service"
|
msgid "Configuration for Podkop Plus service"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1492
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1637
|
||||||
msgid "Connection"
|
msgid "Connection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1475
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1620
|
||||||
msgid "Connection Type"
|
msgid "Connection Type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19
|
#: ../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:1478
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623
|
||||||
msgid "Connection URL"
|
msgid "Connection URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -256,18 +265,18 @@ msgid "DNS on router"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227
|
#: ../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:1711
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860
|
||||||
#: ../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:15
|
||||||
msgid "DNS over HTTPS (DoH)"
|
msgid "DNS over HTTPS (DoH)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228
|
#: ../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:1712
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1861
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:16
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:16
|
||||||
msgid "DNS over TLS (DoT)"
|
msgid "DNS over TLS (DoT)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1709
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1858
|
||||||
msgid "DNS protocol"
|
msgid "DNS protocol"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -283,7 +292,7 @@ msgstr ""
|
|||||||
msgid "DNS Rewrite TTL"
|
msgid "DNS Rewrite TTL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1727
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1876
|
||||||
msgid "DNS server"
|
msgid "DNS server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -300,15 +309,15 @@ msgstr ""
|
|||||||
msgid "Do not panic, everything can be fixed, just..."
|
msgid "Do not panic, everything can be fixed, just..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1810
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1959
|
||||||
msgid "Domain keyword"
|
msgid "Domain keyword"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1817
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1966
|
||||||
msgid "Domain regex"
|
msgid "Domain regex"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1782
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1931
|
||||||
msgid "Domains"
|
msgid "Domains"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -349,15 +358,15 @@ msgstr ""
|
|||||||
msgid "Drag rows to change priority. The rule at the top is checked first."
|
msgid "Drag rows to change priority. The rule at the top is checked first."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:248
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:367
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:263
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:382
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:283
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:402
|
||||||
msgid "Duplicate value"
|
msgid "Duplicate value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8
|
#: ../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:8
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:8
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1391
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514
|
||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -365,7 +374,7 @@ msgstr ""
|
|||||||
msgid "Enable a dedicated DNS resolver when this node uses an interface"
|
msgid "Enable a dedicated DNS resolver when this node uses an interface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1698
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1847
|
||||||
msgid "Enable a dedicated DNS resolver when this section uses an interface"
|
msgid "Enable a dedicated DNS resolver when this section uses an interface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -373,7 +382,7 @@ msgstr ""
|
|||||||
msgid "Enable autostart"
|
msgid "Enable autostart"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1749
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898
|
||||||
msgid "Enable Mixed Proxy"
|
msgid "Enable Mixed Proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -390,31 +399,31 @@ msgid "Enable YACD WAN Access"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52
|
#: ../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:1514
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1660
|
||||||
msgid "Enter a complete sing-box outbound object"
|
msgid "Enter a complete sing-box outbound object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103
|
#: ../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:1572
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721
|
||||||
msgid "Every 3 minutes"
|
msgid "Every 3 minutes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101
|
#: ../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:1570
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719
|
||||||
msgid "Every 30 seconds"
|
msgid "Every 30 seconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104
|
#: ../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:1573
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722
|
||||||
msgid "Every 5 minutes"
|
msgid "Every 5 minutes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102
|
#: ../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:1571
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1720
|
||||||
msgid "Every minute"
|
msgid "Every minute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../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:1945
|
||||||
msgid "Exact full domain"
|
msgid "Exact full domain"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -430,11 +439,11 @@ msgstr ""
|
|||||||
msgid "Expecting: %s"
|
msgid "Expecting: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1750
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1899
|
||||||
msgid "Expose this section as a local HTTP+SOCKS proxy"
|
msgid "Expose this section as a local HTTP+SOCKS proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:844
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:997
|
||||||
msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation."
|
msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -442,12 +451,12 @@ msgstr ""
|
|||||||
msgid "Failed to copy!"
|
msgid "Failed to copy!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:250
|
#: src/podkop/tabs/diagnostic/initController.ts:251
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:254
|
#: src/podkop/tabs/diagnostic/initController.ts:255
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:300
|
#: src/podkop/tabs/diagnostic/initController.ts:301
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:304
|
#: src/podkop/tabs/diagnostic/initController.ts:305
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:341
|
#: src/podkop/tabs/diagnostic/initController.ts:342
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:345
|
#: src/podkop/tabs/diagnostic/initController.ts:346
|
||||||
msgid "Failed to execute!"
|
msgid "Failed to execute!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -464,7 +473,7 @@ msgstr ""
|
|||||||
msgid "Get global check"
|
msgid "Get global check"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:245
|
#: src/podkop/tabs/diagnostic/initController.ts:246
|
||||||
msgid "Global check"
|
msgid "Global check"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -472,7 +481,7 @@ msgstr ""
|
|||||||
msgid "How often this remote rule set should be refreshed"
|
msgid "How often this remote rule set should be refreshed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1476
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1621
|
||||||
msgid "How to configure the proxy connection for this section"
|
msgid "How to configure the proxy connection for this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -482,8 +491,8 @@ 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:23
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179
|
#: ../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:1482
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1627
|
||||||
#: ../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:1806
|
||||||
msgid "Interface"
|
msgid "Interface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -576,12 +585,12 @@ msgstr ""
|
|||||||
msgid "Invalid path format. Path must start with \"/\" and contain valid characters"
|
msgid "Invalid path format. Path must start with \"/\" and contain valid characters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1777
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1926
|
||||||
#: src/validators/validateShadowsocksUrl.ts:85
|
#: src/validators/validateShadowsocksUrl.ts:85
|
||||||
msgid "Invalid port number. Must be between 1 and 65535"
|
msgid "Invalid port number. Must be between 1 and 65535"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:191
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:310
|
||||||
msgid "Invalid regular expression"
|
msgid "Invalid regular expression"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -682,7 +691,7 @@ msgstr ""
|
|||||||
msgid "IP address 0.0.0.0 is not allowed"
|
msgid "IP address 0.0.0.0 is not allowed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1789
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1938
|
||||||
msgid "IPs"
|
msgid "IPs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -690,11 +699,11 @@ msgstr ""
|
|||||||
msgid "Issues detected"
|
msgid "Issues detected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:201
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:320
|
||||||
msgid "Keyword must not contain spaces"
|
msgid "Keyword must not contain spaces"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:501
|
#: src/podkop/tabs/diagnostic/initController.ts:502
|
||||||
msgid "Latest"
|
msgid "Latest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -718,32 +727,32 @@ msgstr ""
|
|||||||
msgid "Main DNS"
|
msgid "Main DNS"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1790
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1939
|
||||||
msgid "Match destination IPs or subnets"
|
msgid "Match destination IPs or subnets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1811
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1960
|
||||||
msgid "Match domains containing a substring"
|
msgid "Match domains containing a substring"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1783
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1932
|
||||||
msgid "Match domains including all subdomains"
|
msgid "Match domains including all subdomains"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1818
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1967
|
||||||
msgid "Match domains using a regular expression"
|
msgid "Match domains using a regular expression"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../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:1946
|
||||||
msgid "Match only one exact full domain name"
|
msgid "Match only one exact full domain name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1825
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1974
|
||||||
msgid "Match source IPs or subnets"
|
msgid "Match source IPs or subnets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114
|
#: ../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:1584
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1733
|
||||||
msgid "Maximum response time delta in milliseconds"
|
msgid "Maximum response time delta in milliseconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -751,7 +760,7 @@ msgstr ""
|
|||||||
msgid "Memory Usage"
|
msgid "Memory Usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1761
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1910
|
||||||
msgid "Mixed Proxy Port"
|
msgid "Mixed Proxy Port"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -760,15 +769,15 @@ msgid "Monitored Interfaces"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136
|
#: ../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:1606
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1755
|
||||||
msgid "Must be a number in the range of 50 - 1000"
|
msgid "Must be a number in the range of 50 - 1000"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1441
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1586
|
||||||
msgid "NFQWS Strategy"
|
msgid "NFQWS Strategy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:974
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1127
|
||||||
msgid "NFQWS strategy cannot be empty"
|
msgid "NFQWS strategy cannot be empty"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -776,6 +785,10 @@ msgstr ""
|
|||||||
msgid "No other marking rules found"
|
msgid "No other marking rules found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:45
|
||||||
|
msgid "No rules use zapret"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:16
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:16
|
||||||
msgid "Node Type"
|
msgid "Node Type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -784,18 +797,22 @@ msgstr ""
|
|||||||
msgid "Not implement yet"
|
msgid "Not implement yet"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/podkop/tabs/diagnostic/initController.ts:523
|
||||||
|
msgid "not installed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:75
|
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:75
|
||||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:81
|
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:81
|
||||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:100
|
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:100
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:56
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:57
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:64
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:65
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:72
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:73
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:80
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:81
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:88
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:89
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:96
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:97
|
||||||
msgid "Not running"
|
msgid "Not running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -811,18 +828,18 @@ msgstr ""
|
|||||||
msgid "Optional node used to download this remote rule set"
|
msgid "Optional node used to download this remote rule set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1052
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1205
|
||||||
msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws."
|
msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws."
|
||||||
msgstr ""
|
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:22
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51
|
#: ../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:1481
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1626
|
||||||
#: ../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:1659
|
||||||
msgid "Outbound JSON"
|
msgid "Outbound JSON"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:491
|
#: src/podkop/tabs/diagnostic/initController.ts:492
|
||||||
msgid "Outdated"
|
msgid "Outdated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -850,12 +867,12 @@ msgstr ""
|
|||||||
msgid "Path must end with cache.db"
|
msgid "Path must end with cache.db"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:112
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:113
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:120
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:121
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:128
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:129
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:136
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:137
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:144
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:145
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:152
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:153
|
||||||
msgid "Pending"
|
msgid "Pending"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -863,7 +880,7 @@ msgstr ""
|
|||||||
msgid "Podkop Plus"
|
msgid "Podkop Plus"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:862
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1015
|
||||||
msgid "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here."
|
msgid "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -875,14 +892,19 @@ msgstr ""
|
|||||||
msgid "Podkop Plus will not modify your DHCP configuration"
|
msgid "Podkop Plus will not modify your DHCP configuration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1769
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1918
|
||||||
msgid "Port cannot be empty"
|
msgid "Port cannot be empty"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1911
|
||||||
msgid "Port for the local mixed proxy of this section"
|
msgid "Port for the local mixed proxy of this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:238
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:260
|
||||||
|
msgid "Proxy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:31
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:31
|
||||||
msgid "Proxy Configuration URL"
|
msgid "Proxy Configuration URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -895,7 +917,7 @@ msgstr ""
|
|||||||
msgid "Proxy traffic is routed via FakeIP"
|
msgid "Proxy traffic is routed via FakeIP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1879
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2028
|
||||||
msgid "Regional options cannot be used together"
|
msgid "Regional options cannot be used together"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -907,7 +929,7 @@ msgstr ""
|
|||||||
msgid "Remote URL to a sing-box rule set"
|
msgid "Remote URL to a sing-box rule set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1697
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1846
|
||||||
msgid "Resolver for interface outbound"
|
msgid "Resolver for interface outbound"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -915,11 +937,11 @@ msgstr ""
|
|||||||
msgid "Resolver For Interface Outbound"
|
msgid "Resolver For Interface Outbound"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:847
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1000
|
||||||
msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:850
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1003
|
||||||
msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -939,9 +961,9 @@ msgstr ""
|
|||||||
msgid "Routing Excluded IPs"
|
msgid "Routing Excluded IPs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1313
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1466
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1322
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1475
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1325
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1478
|
||||||
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -949,7 +971,7 @@ msgstr ""
|
|||||||
msgid "Rule set URL"
|
msgid "Rule set URL"
|
||||||
msgstr ""
|
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:2083
|
||||||
msgid "Rule sets"
|
msgid "Rule sets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -981,7 +1003,7 @@ msgstr ""
|
|||||||
msgid "Run Diagnostic"
|
msgid "Run Diagnostic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2047
|
||||||
msgid "Russia inside restrictions"
|
msgid "Russia inside restrictions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -997,7 +1019,7 @@ msgstr ""
|
|||||||
msgid "Section"
|
msgid "Section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1413
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1543
|
||||||
msgid "Section name"
|
msgid "Section name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1005,7 +1027,7 @@ msgstr ""
|
|||||||
msgid "Sections"
|
msgid "Sections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1841
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990
|
||||||
msgid "Select a predefined list for routing"
|
msgid "Select a predefined list for routing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1046,11 +1068,11 @@ msgid "Select the WAN interfaces to be monitored"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:20
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:20
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1479
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1624
|
||||||
msgid "Selector"
|
msgid "Selector"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1532
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1681
|
||||||
msgid "Selector connections"
|
msgid "Selector connections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1058,7 +1080,7 @@ msgstr ""
|
|||||||
msgid "Selector Links"
|
msgid "Selector Links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1844
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1993
|
||||||
msgid "Service list"
|
msgid "Service list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1067,11 +1089,11 @@ msgid "Services info"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:391
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:391
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1388
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1511
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:329
|
#: src/podkop/tabs/diagnostic/initController.ts:330
|
||||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
||||||
msgid "Show sing-box config"
|
msgid "Show sing-box config"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1108,7 +1130,7 @@ msgstr ""
|
|||||||
msgid "Source file"
|
msgid "Source file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1824
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1973
|
||||||
msgid "Source IPs"
|
msgid "Source IPs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1148,7 +1170,7 @@ msgstr ""
|
|||||||
msgid "Test latency"
|
msgid "Test latency"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:859
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1012
|
||||||
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
|
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1156,23 +1178,28 @@ msgstr ""
|
|||||||
msgid "The DNS server used to look up the IP address of an upstream DNS server"
|
msgid "The DNS server used to look up the IP address of an upstream DNS server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:856
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1009
|
||||||
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:865
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:69
|
||||||
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:92
|
||||||
|
msgid "There are rules using zapret"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1018
|
||||||
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:868
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1021
|
||||||
msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here."
|
msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1037
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1190
|
||||||
msgid "This flag does not accept a value."
|
msgid "This flag does not accept a value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1068
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1221
|
||||||
msgid "This option requires a value."
|
msgid "This option requires a value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1205,7 +1232,7 @@ msgid "Type"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:229
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:229
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862
|
||||||
msgid "UDP"
|
msgid "UDP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1214,15 +1241,15 @@ msgid "UDP (Unprotected DNS)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169
|
#: ../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:1645
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1794
|
||||||
msgid "UDP over TCP"
|
msgid "UDP over TCP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:779
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:932
|
||||||
msgid "Unable to validate the NFQWS strategy through the backend parser."
|
msgid "Unable to validate the NFQWS strategy through the backend parser."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1017
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1170
|
||||||
msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value."
|
msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1235,9 +1262,9 @@ msgstr ""
|
|||||||
#: src/podkop/tabs/diagnostic/initController.ts:28
|
#: src/podkop/tabs/diagnostic/initController.ts:28
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:29
|
#: src/podkop/tabs/diagnostic/initController.ts:29
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:30
|
#: src/podkop/tabs/diagnostic/initController.ts:30
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:31
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:32
|
#: src/podkop/tabs/diagnostic/initController.ts:32
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:463
|
#: src/podkop/tabs/diagnostic/initController.ts:33
|
||||||
|
#: src/podkop/tabs/diagnostic/initController.ts:464
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1245,7 +1272,7 @@ msgstr ""
|
|||||||
msgid "Unknown error"
|
msgid "Unknown error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1028
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1181
|
||||||
msgid "Unknown NFQWS flag."
|
msgid "Unknown NFQWS flag."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1267,15 +1294,15 @@ msgid "URL must use one of the following protocols:"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:21
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:21
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625
|
||||||
msgid "URLTest"
|
msgid "URLTest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1550
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1699
|
||||||
msgid "URLTest connections"
|
msgid "URLTest connections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1568
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1717
|
||||||
msgid "URLTest interval"
|
msgid "URLTest interval"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1287,7 +1314,7 @@ msgstr ""
|
|||||||
msgid "URLTest Links"
|
msgid "URLTest Links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1732
|
||||||
msgid "URLTest tolerance"
|
msgid "URLTest tolerance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1296,7 +1323,7 @@ msgid "URLTest Tolerance"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139
|
#: ../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:1613
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762
|
||||||
msgid "URLTest URL"
|
msgid "URLTest URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1304,7 +1331,7 @@ msgstr ""
|
|||||||
msgid "Use a network interface as the outbound for this node"
|
msgid "Use a network interface as the outbound for this node"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../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:1807
|
||||||
msgid "Use a network interface as the outbound for this section"
|
msgid "Use a network interface as the outbound for this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1325,35 +1352,35 @@ msgstr ""
|
|||||||
msgid "Valid"
|
msgid "Valid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:255
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:374
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:275
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:394
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:279
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:398
|
||||||
msgid "Validation errors:"
|
msgid "Validation errors:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:289
|
#: src/podkop/tabs/diagnostic/initController.ts:290
|
||||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
||||||
msgid "View logs"
|
msgid "View logs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1414
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1544
|
||||||
msgid "Visible name of this section"
|
msgid "Visible name of this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32
|
#: ../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:1493
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1638
|
||||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1881
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030
|
||||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||||
msgstr ""
|
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:2049
|
||||||
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
|
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1427
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1557
|
||||||
msgid "What Podkop Plus should do when this section matches"
|
msgid "What Podkop Plus should do when this section matches"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1365,18 +1392,26 @@ msgstr ""
|
|||||||
msgid "You can select Output Network Interface, by default autodetect"
|
msgid "You can select Output Network Interface, by default autodetect"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:234
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:246
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:365
|
#: src/podkop/tabs/dashboard/initController.ts:365
|
||||||
msgid "Zapret"
|
msgid "Zapret"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:853
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:235
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:282
|
||||||
|
msgid "Zapret (package not installed)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1006
|
||||||
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:87
|
||||||
msgid "Zapret installed"
|
msgid "Zapret installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:59
|
||||||
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:64
|
||||||
msgid "Zapret not installed"
|
msgid "Zapret not installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PODKOP PLUS\n"
|
"Project-Id-Version: PODKOP PLUS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-04-07 21:03+0300\n"
|
"POT-Creation-Date: 2026-04-11 21:16+0300\n"
|
||||||
"PO-Revision-Date: 2026-04-07 21:03+0300\n"
|
"PO-Revision-Date: 2026-04-11 21:16+0300\n"
|
||||||
"Last-Translator: ushan0v\n"
|
"Last-Translator: ushan0v\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: none\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
@@ -20,6 +20,9 @@ msgstr ""
|
|||||||
msgid "✔ Running"
|
msgid "✔ Running"
|
||||||
msgstr "✔ Работает"
|
msgstr "✔ Работает"
|
||||||
|
|
||||||
|
msgid "✘ Not installed"
|
||||||
|
msgstr "✘ Не установлен"
|
||||||
|
|
||||||
msgid "✘ Stopped"
|
msgid "✘ Stopped"
|
||||||
msgstr "✘ Остановлен"
|
msgstr "✘ Остановлен"
|
||||||
|
|
||||||
@@ -77,6 +80,9 @@ msgstr "Backend-проверка завершилась ошибкой: %s"
|
|||||||
msgid "Binary file"
|
msgid "Binary file"
|
||||||
msgstr "Бинарный файл"
|
msgstr "Бинарный файл"
|
||||||
|
|
||||||
|
msgid "Block"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Bootsrap DNS"
|
msgid "Bootsrap DNS"
|
||||||
msgstr "Bootstrap DNS"
|
msgstr "Bootstrap DNS"
|
||||||
|
|
||||||
@@ -551,12 +557,18 @@ msgstr "Стратегия NFQWS не может быть пустой"
|
|||||||
msgid "No other marking rules found"
|
msgid "No other marking rules found"
|
||||||
msgstr "Другие правила маркировки не найдены"
|
msgstr "Другие правила маркировки не найдены"
|
||||||
|
|
||||||
|
msgid "No rules use zapret"
|
||||||
|
msgstr "Нет правил использующих zapret"
|
||||||
|
|
||||||
msgid "Node Type"
|
msgid "Node Type"
|
||||||
msgstr "Тип узла"
|
msgstr "Тип узла"
|
||||||
|
|
||||||
msgid "Not implement yet"
|
msgid "Not implement yet"
|
||||||
msgstr "Ещё не реализовано"
|
msgstr "Ещё не реализовано"
|
||||||
|
|
||||||
|
msgid "not installed"
|
||||||
|
msgstr "не установлен"
|
||||||
|
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "Не отвечает"
|
msgstr "Не отвечает"
|
||||||
|
|
||||||
@@ -620,6 +632,9 @@ msgstr "Порт не может быть пустым"
|
|||||||
msgid "Port for the local mixed proxy of this section"
|
msgid "Port for the local mixed proxy of this section"
|
||||||
msgstr "Порт локального смешанного прокси для этой секции"
|
msgstr "Порт локального смешанного прокси для этой секции"
|
||||||
|
|
||||||
|
msgid "Proxy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Proxy Configuration URL"
|
msgid "Proxy Configuration URL"
|
||||||
msgstr "URL конфигурации прокси"
|
msgstr "URL конфигурации прокси"
|
||||||
|
|
||||||
@@ -824,6 +839,9 @@ msgstr "DNS-сервер, используемый для поиска IP-адр
|
|||||||
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
||||||
msgstr "Номер NFQUEUE назначается Podkop Plus для каждого правила и не должен переопределяться здесь."
|
msgstr "Номер NFQUEUE назначается Podkop Plus для каждого правила и не должен переопределяться здесь."
|
||||||
|
|
||||||
|
msgid "There are rules using zapret"
|
||||||
|
msgstr "Есть правила использующие zapret"
|
||||||
|
|
||||||
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
||||||
msgstr "Это поле должно запускать рабочую стратегию nfqws; --dry-run сразу завершает процесс и здесь запрещён."
|
msgstr "Это поле должно запускать рабочую стратегию nfqws; --dry-run сразу завершает процесс и здесь запрещён."
|
||||||
|
|
||||||
@@ -959,6 +977,9 @@ msgstr "Вы можете выбрать выходной сетевой инт
|
|||||||
msgid "Zapret"
|
msgid "Zapret"
|
||||||
msgstr "Zapret"
|
msgstr "Zapret"
|
||||||
|
|
||||||
|
msgid "Zapret (package not installed)"
|
||||||
|
msgstr "Zapret (пакет не установлен)"
|
||||||
|
|
||||||
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
||||||
msgstr "Шаблоны hostlist zapret здесь не поддерживаются, потому что Podkop Plus не разворачивает их для per-rule стратегий NFQWS."
|
msgstr "Шаблоны hostlist zapret здесь не поддерживаются, потому что Podkop Plus не разворачивает их для per-rule стратегий NFQWS."
|
||||||
|
|
||||||
|
|||||||
@@ -34,10 +34,7 @@ export async function fetchServicesInfo() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const podkop = getSettledMethodResponse('getStatus', podkopResult);
|
const podkop = getSettledMethodResponse('getStatus', podkopResult);
|
||||||
const singbox = getSettledMethodResponse(
|
const singbox = getSettledMethodResponse('getSingBoxStatus', singboxResult);
|
||||||
'getSingBoxStatus',
|
|
||||||
singboxResult,
|
|
||||||
);
|
|
||||||
const zapret = getSettledMethodResponse('getZapretStatus', zapretResult);
|
const zapret = getSettledMethodResponse('getZapretStatus', zapretResult);
|
||||||
|
|
||||||
store.set({
|
store.set({
|
||||||
@@ -49,6 +46,7 @@ export async function fetchServicesInfo() {
|
|||||||
podkopRunning: podkop.success ? podkop.data.running : 0,
|
podkopRunning: podkop.success ? podkop.data.running : 0,
|
||||||
podkopEnabled: podkop.success ? podkop.data.enabled : 0,
|
podkopEnabled: podkop.success ? podkop.data.enabled : 0,
|
||||||
zapret: zapret.success ? zapret.data.ready : 0,
|
zapret: zapret.success ? zapret.data.ready : 0,
|
||||||
|
zapretInstalled: zapret.success ? zapret.data.installed : 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,6 +4,40 @@ import { logger } from './logger.service';
|
|||||||
import { PodkopLogWatcher } from './podkopLogWatcher.service';
|
import { PodkopLogWatcher } from './podkopLogWatcher.service';
|
||||||
import { PodkopShellMethods } from '../methods';
|
import { PodkopShellMethods } from '../methods';
|
||||||
|
|
||||||
|
const LOG_NOTIFICATION_DEDUPE_WINDOW_MS = 15000;
|
||||||
|
const recentErrorNotifications = new Map<string, number>();
|
||||||
|
|
||||||
|
function getNotificationKey(line: string) {
|
||||||
|
const lower = line.toLowerCase();
|
||||||
|
const errorIndex = lower.indexOf('[error]');
|
||||||
|
const fatalIndex = lower.indexOf('[fatal]');
|
||||||
|
const markerIndex =
|
||||||
|
errorIndex >= 0 && fatalIndex >= 0
|
||||||
|
? Math.min(errorIndex, fatalIndex)
|
||||||
|
: Math.max(errorIndex, fatalIndex);
|
||||||
|
|
||||||
|
return (markerIndex >= 0 ? line.slice(markerIndex) : line).trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
function shouldNotifyAboutLogLine(line: string) {
|
||||||
|
const key = getNotificationKey(line);
|
||||||
|
const now = Date.now();
|
||||||
|
const lastShownAt = recentErrorNotifications.get(key) ?? 0;
|
||||||
|
|
||||||
|
recentErrorNotifications.forEach((shownAt, storedKey) => {
|
||||||
|
if (now - shownAt > LOG_NOTIFICATION_DEDUPE_WINDOW_MS) {
|
||||||
|
recentErrorNotifications.delete(storedKey);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (now - lastShownAt < LOG_NOTIFICATION_DEDUPE_WINDOW_MS) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
recentErrorNotifications.set(key, now);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
export function coreService() {
|
export function coreService() {
|
||||||
TabServiceInstance.onChange((activeId, tabs) => {
|
TabServiceInstance.onChange((activeId, tabs) => {
|
||||||
logger.info('[TAB]', activeId);
|
logger.info('[TAB]', activeId);
|
||||||
@@ -31,14 +65,11 @@ export function coreService() {
|
|||||||
intervalMs: 3000,
|
intervalMs: 3000,
|
||||||
onNewLog: (line) => {
|
onNewLog: (line) => {
|
||||||
if (
|
if (
|
||||||
line.toLowerCase().includes('[error]') ||
|
(line.toLowerCase().includes('[error]') ||
|
||||||
line.toLowerCase().includes('[fatal]')
|
line.toLowerCase().includes('[fatal]')) &&
|
||||||
|
shouldNotifyAboutLogLine(line)
|
||||||
) {
|
) {
|
||||||
ui.addNotification(
|
ui.addNotification('Podkop Plus Error', E('div', {}, line), 'error');
|
||||||
'Podkop Plus Error',
|
|
||||||
E('div', {}, line),
|
|
||||||
'error',
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ export interface StoreType {
|
|||||||
podkopRunning: number;
|
podkopRunning: number;
|
||||||
podkopEnabled: number;
|
podkopEnabled: number;
|
||||||
zapret: number;
|
zapret: number;
|
||||||
|
zapretInstalled: number;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
sectionsWidget: {
|
sectionsWidget: {
|
||||||
@@ -193,6 +194,7 @@ export interface StoreType {
|
|||||||
luci_app_version: string;
|
luci_app_version: string;
|
||||||
sing_box_version: string;
|
sing_box_version: string;
|
||||||
zapret_version: string;
|
zapret_version: string;
|
||||||
|
zapret_installed: number;
|
||||||
openwrt_version: string;
|
openwrt_version: string;
|
||||||
device_model: string;
|
device_model: string;
|
||||||
};
|
};
|
||||||
@@ -221,7 +223,13 @@ const initialStore: StoreType = {
|
|||||||
servicesInfoWidget: {
|
servicesInfoWidget: {
|
||||||
loading: true,
|
loading: true,
|
||||||
failed: false,
|
failed: false,
|
||||||
data: { singbox: 0, podkopRunning: 0, podkopEnabled: 0, zapret: 0 },
|
data: {
|
||||||
|
singbox: 0,
|
||||||
|
podkopRunning: 0,
|
||||||
|
podkopEnabled: 0,
|
||||||
|
zapret: 0,
|
||||||
|
zapretInstalled: 0,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
sectionsWidget: {
|
sectionsWidget: {
|
||||||
loading: true,
|
loading: true,
|
||||||
|
|||||||
@@ -363,13 +363,17 @@ async function renderServicesInfoWidget() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: _('Zapret'),
|
key: _('Zapret'),
|
||||||
value: servicesInfoWidget.data.zapret
|
value: !servicesInfoWidget.data.zapretInstalled
|
||||||
? _('✔ Running')
|
? _('✘ Not installed')
|
||||||
: _('✘ Stopped'),
|
: servicesInfoWidget.data.zapret
|
||||||
|
? _('✔ Running')
|
||||||
|
: _('✘ Stopped'),
|
||||||
attributes: {
|
attributes: {
|
||||||
class: servicesInfoWidget.data.zapret
|
class:
|
||||||
? 'pdk_dashboard-page__widgets-section__item__row--success'
|
servicesInfoWidget.data.zapretInstalled &&
|
||||||
: 'pdk_dashboard-page__widgets-section__item__row--error',
|
servicesInfoWidget.data.zapret
|
||||||
|
? 'pdk_dashboard-page__widgets-section__item__row--success'
|
||||||
|
: 'pdk_dashboard-page__widgets-section__item__row--error',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ export async function runZapretCheck() {
|
|||||||
items: [],
|
items: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
const zapretChecks = await PodkopShellMethods.checkZapretRuntime();
|
const zapretStatus = await PodkopShellMethods.getZapretStatus();
|
||||||
|
|
||||||
if (!zapretChecks.success) {
|
if (!zapretStatus.success) {
|
||||||
updateCheckStore({
|
updateCheckStore({
|
||||||
order,
|
order,
|
||||||
code,
|
code,
|
||||||
@@ -29,24 +29,76 @@ export async function runZapretCheck() {
|
|||||||
throw new Error('Zapret checks failed');
|
throw new Error('Zapret checks failed');
|
||||||
}
|
}
|
||||||
|
|
||||||
const installed = Boolean(zapretChecks.data.zapret_installed);
|
const installed = Boolean(zapretStatus.data.installed);
|
||||||
|
const hasZapretRules = Number(zapretStatus.data.enabled_rule_count || 0) > 0;
|
||||||
|
|
||||||
|
if (installed) {
|
||||||
|
updateCheckStore({
|
||||||
|
order,
|
||||||
|
code,
|
||||||
|
title,
|
||||||
|
description: _('Checks passed'),
|
||||||
|
state: 'success',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
state: 'success',
|
||||||
|
key: _('Zapret installed'),
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
state: 'success',
|
||||||
|
key: hasZapretRules
|
||||||
|
? _('There are rules using zapret')
|
||||||
|
: _('No rules use zapret'),
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasZapretRules) {
|
||||||
|
updateCheckStore({
|
||||||
|
order,
|
||||||
|
code,
|
||||||
|
title,
|
||||||
|
description: _('Zapret not installed'),
|
||||||
|
state: 'error',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
state: 'error',
|
||||||
|
key: _('Zapret not installed'),
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
state: 'error',
|
||||||
|
key: _('There are rules using zapret'),
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
updateCheckStore({
|
updateCheckStore({
|
||||||
order,
|
order,
|
||||||
code,
|
code,
|
||||||
title,
|
title,
|
||||||
description: installed ? _('Checks passed') : _('Checks failed'),
|
description: _('Zapret not installed'),
|
||||||
state: installed ? 'success' : 'error',
|
state: 'warning',
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
state: installed ? 'success' : 'error',
|
state: 'warning',
|
||||||
key: installed ? _('Zapret installed') : _('Zapret not installed'),
|
key: _('Zapret not installed'),
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
state: 'success',
|
||||||
|
key: _('No rules use zapret'),
|
||||||
value: '',
|
value: '',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!installed) {
|
|
||||||
throw new Error('Zapret checks failed');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ export const initialDiagnosticStore: Pick<
|
|||||||
luci_app_version: 'loading',
|
luci_app_version: 'loading',
|
||||||
sing_box_version: 'loading',
|
sing_box_version: 'loading',
|
||||||
zapret_version: 'loading',
|
zapret_version: 'loading',
|
||||||
|
zapret_installed: 0,
|
||||||
openwrt_version: 'loading',
|
openwrt_version: 'loading',
|
||||||
device_model: 'loading',
|
device_model: 'loading',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ const UNKNOWN_DIAGNOSTICS_SYSTEM_INFO = {
|
|||||||
luci_app_version: _('unknown'),
|
luci_app_version: _('unknown'),
|
||||||
sing_box_version: _('unknown'),
|
sing_box_version: _('unknown'),
|
||||||
zapret_version: _('unknown'),
|
zapret_version: _('unknown'),
|
||||||
|
zapret_installed: 0,
|
||||||
openwrt_version: _('unknown'),
|
openwrt_version: _('unknown'),
|
||||||
device_model: _('unknown'),
|
device_model: _('unknown'),
|
||||||
};
|
};
|
||||||
@@ -517,7 +518,9 @@ function renderDiagnosticSystemInfoWidget() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'Zapret',
|
key: 'Zapret',
|
||||||
value: diagnosticsSystemInfo.zapret_version,
|
value: diagnosticsSystemInfo.zapret_installed
|
||||||
|
? diagnosticsSystemInfo.zapret_version
|
||||||
|
: _('not installed'),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'OS',
|
key: 'OS',
|
||||||
|
|||||||
@@ -187,6 +187,7 @@ export namespace Podkop {
|
|||||||
luci_app_version: string;
|
luci_app_version: string;
|
||||||
sing_box_version: string;
|
sing_box_version: string;
|
||||||
zapret_version: string;
|
zapret_version: string;
|
||||||
|
zapret_installed: 0 | 1;
|
||||||
openwrt_version: string;
|
openwrt_version: string;
|
||||||
device_model: string;
|
device_model: string;
|
||||||
}
|
}
|
||||||
|
|||||||
+197
-59
@@ -4,14 +4,7 @@
|
|||||||
REPO_OWNER="ushan0v"
|
REPO_OWNER="ushan0v"
|
||||||
REPO_NAME="podkop-plus"
|
REPO_NAME="podkop-plus"
|
||||||
|
|
||||||
PODKOP_PLUS_RELEASE_TAG="${PODKOP_PLUS_RELEASE_TAG:-}"
|
|
||||||
PODKOP_PLUS_SOURCE_REF="${PODKOP_PLUS_SOURCE_REF:-}"
|
|
||||||
ZAPRET_RELEASE_TAG="${ZAPRET_RELEASE_TAG:-}"
|
|
||||||
|
|
||||||
DOWNLOAD_RETRIES="${DOWNLOAD_RETRIES:-3}"
|
|
||||||
REQUIRED_SPACE_KB=15360
|
REQUIRED_SPACE_KB=15360
|
||||||
PODKOP_PLUS_ASSUME_YES="${PODKOP_PLUS_ASSUME_YES:-0}"
|
|
||||||
PODKOP_PLUS_KEEP_EXISTING_ZAPRET="${PODKOP_PLUS_KEEP_EXISTING_ZAPRET:-0}"
|
|
||||||
|
|
||||||
PKG_IS_APK=0
|
PKG_IS_APK=0
|
||||||
FETCHER=""
|
FETCHER=""
|
||||||
@@ -20,8 +13,12 @@ PODKOP_WAS_ENABLED=0
|
|||||||
TARGET_ARCH=""
|
TARGET_ARCH=""
|
||||||
ZAPRET_ARCH=""
|
ZAPRET_ARCH=""
|
||||||
ZAPRET_ARCH_CANDIDATES=""
|
ZAPRET_ARCH_CANDIDATES=""
|
||||||
|
ZAPRET_ALREADY_PRESENT=0
|
||||||
|
ZAPRET_REQUESTED=0
|
||||||
|
ZAPRET_SKIPPED_REASON=""
|
||||||
|
|
||||||
PODKOP_PLUS_RELEASE_JSON=""
|
PODKOP_PLUS_RELEASE_JSON=""
|
||||||
|
PODKOP_PLUS_RELEASE_TAG=""
|
||||||
PODKOP_PLUS_PACKAGE_URL=""
|
PODKOP_PLUS_PACKAGE_URL=""
|
||||||
PODKOP_PLUS_PACKAGE_NAME=""
|
PODKOP_PLUS_PACKAGE_NAME=""
|
||||||
PODKOP_PLUS_PACKAGE_FILE=""
|
PODKOP_PLUS_PACKAGE_FILE=""
|
||||||
@@ -57,6 +54,24 @@ cleanup() {
|
|||||||
[ -n "$TMP_DIR" ] && rm -rf "$TMP_DIR"
|
[ -n "$TMP_DIR" ] && rm -rf "$TMP_DIR"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clear_zapret_download_state() {
|
||||||
|
ZAPRET_RELEASE_JSON=""
|
||||||
|
ZAPRET_RELEASE_TAG_RESOLVED=""
|
||||||
|
ZAPRET_BUNDLE_URL=""
|
||||||
|
ZAPRET_BUNDLE_NAME=""
|
||||||
|
ZAPRET_PACKAGE_NAME=""
|
||||||
|
ZAPRET_PACKAGE_FILE=""
|
||||||
|
ZAPRET_PACKAGE_VERSION=""
|
||||||
|
ZAPRET_ARCH=""
|
||||||
|
}
|
||||||
|
|
||||||
|
read_openwrt_release_value() {
|
||||||
|
key="$1"
|
||||||
|
|
||||||
|
[ -f /etc/openwrt_release ] || return 0
|
||||||
|
sed -n "s/^${key}='\(.*\)'/\1/p" /etc/openwrt_release 2>/dev/null | head -n 1
|
||||||
|
}
|
||||||
|
|
||||||
command_exists() {
|
command_exists() {
|
||||||
command -v "$1" >/dev/null 2>&1
|
command -v "$1" >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
@@ -117,9 +132,10 @@ download_with_retry() {
|
|||||||
output_path="$2"
|
output_path="$2"
|
||||||
label="$3"
|
label="$3"
|
||||||
attempt=1
|
attempt=1
|
||||||
|
max_attempts=3
|
||||||
|
|
||||||
while [ "$attempt" -le "$DOWNLOAD_RETRIES" ]; do
|
while [ "$attempt" -le "$max_attempts" ]; do
|
||||||
msg "Downloading $label ($attempt/$DOWNLOAD_RETRIES)"
|
msg "Downloading $label ($attempt/$max_attempts)"
|
||||||
|
|
||||||
if download_file_once "$url" "$output_path" && [ -s "$output_path" ]; then
|
if download_file_once "$url" "$output_path" && [ -s "$output_path" ]; then
|
||||||
return 0
|
return 0
|
||||||
@@ -151,6 +167,10 @@ pkg_is_installed() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_zapret_present() {
|
||||||
|
pkg_is_installed "zapret" || [ -x /opt/zapret/nfq/nfqws ]
|
||||||
|
}
|
||||||
|
|
||||||
pkg_list_update() {
|
pkg_list_update() {
|
||||||
if [ "$PKG_IS_APK" -eq 1 ]; then
|
if [ "$PKG_IS_APK" -eq 1 ]; then
|
||||||
apk update
|
apk update
|
||||||
@@ -241,7 +261,7 @@ check_system() {
|
|||||||
model="$(cat /tmp/sysinfo/model 2>/dev/null || true)"
|
model="$(cat /tmp/sysinfo/model 2>/dev/null || true)"
|
||||||
[ -n "$model" ] && msg "Router model: $model"
|
[ -n "$model" ] && msg "Router model: $model"
|
||||||
|
|
||||||
release="$(sed -n "s/^DISTRIB_RELEASE='\(.*\)'/\1/p" /etc/openwrt_release | head -n 1)"
|
release="$(read_openwrt_release_value "DISTRIB_RELEASE")"
|
||||||
major="$(printf '%s' "$release" | sed 's/[^0-9].*$//' | cut -d. -f1)"
|
major="$(printf '%s' "$release" | sed 's/[^0-9].*$//' | cut -d. -f1)"
|
||||||
|
|
||||||
if [ -n "$major" ] && [ "$major" -lt 24 ]; then
|
if [ -n "$major" ] && [ "$major" -lt 24 ]; then
|
||||||
@@ -260,10 +280,6 @@ confirm_prompt() {
|
|||||||
prompt_text="$1"
|
prompt_text="$1"
|
||||||
answer=""
|
answer=""
|
||||||
|
|
||||||
if [ "$PODKOP_PLUS_ASSUME_YES" = "1" ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf '%s [y/N]: ' "$prompt_text"
|
printf '%s [y/N]: ' "$prompt_text"
|
||||||
read -r answer || return 1
|
read -r answer || return 1
|
||||||
|
|
||||||
@@ -332,16 +348,9 @@ extract_package_version() {
|
|||||||
fetch_github_release_json() {
|
fetch_github_release_json() {
|
||||||
owner="$1"
|
owner="$1"
|
||||||
repo="$2"
|
repo="$2"
|
||||||
tag="$3"
|
|
||||||
url=""
|
|
||||||
response=""
|
response=""
|
||||||
message=""
|
message=""
|
||||||
|
url="https://api.github.com/repos/${owner}/${repo}/releases/latest"
|
||||||
if [ -n "$tag" ]; then
|
|
||||||
url="https://api.github.com/repos/${owner}/${repo}/releases/tags/${tag}"
|
|
||||||
else
|
|
||||||
url="https://api.github.com/repos/${owner}/${repo}/releases/latest"
|
|
||||||
fi
|
|
||||||
|
|
||||||
response="$(http_get "$url" 2>/dev/null || true)"
|
response="$(http_get "$url" 2>/dev/null || true)"
|
||||||
[ -n "$response" ] || fail "Failed to query GitHub release metadata for ${owner}/${repo}"
|
[ -n "$response" ] || fail "Failed to query GitHub release metadata for ${owner}/${repo}"
|
||||||
@@ -351,12 +360,9 @@ fetch_github_release_json() {
|
|||||||
message="$(printf '%s' "$response" | jq -r '.message // empty')"
|
message="$(printf '%s' "$response" | jq -r '.message // empty')"
|
||||||
case "$message" in
|
case "$message" in
|
||||||
*"API rate limit"*|*"rate limit exceeded"*)
|
*"API rate limit"*|*"rate limit exceeded"*)
|
||||||
fail "GitHub API rate limit reached. Try again later or set PODKOP_PLUS_RELEASE_TAG/ZAPRET_RELEASE_TAG manually."
|
fail "GitHub API rate limit reached. Try again later."
|
||||||
;;
|
;;
|
||||||
"Not Found")
|
"Not Found")
|
||||||
if [ -n "$tag" ]; then
|
|
||||||
fail "GitHub release tag not found: ${owner}/${repo}@${tag}"
|
|
||||||
fi
|
|
||||||
fail "No published releases found for ${owner}/${repo}"
|
fail "No published releases found for ${owner}/${repo}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -369,12 +375,10 @@ resolve_podkop_plus_release() {
|
|||||||
|
|
||||||
[ "$PKG_IS_APK" -eq 1 ] && asset_ext="apk"
|
[ "$PKG_IS_APK" -eq 1 ] && asset_ext="apk"
|
||||||
|
|
||||||
PODKOP_PLUS_RELEASE_JSON="$(fetch_github_release_json "$REPO_OWNER" "$REPO_NAME" "$PODKOP_PLUS_RELEASE_TAG")"
|
PODKOP_PLUS_RELEASE_JSON="$(fetch_github_release_json "$REPO_OWNER" "$REPO_NAME")"
|
||||||
PODKOP_PLUS_RELEASE_TAG="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r '.tag_name // empty')"
|
PODKOP_PLUS_RELEASE_TAG="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r '.tag_name // empty')"
|
||||||
[ -n "$PODKOP_PLUS_RELEASE_TAG" ] || fail "Failed to detect the Podkop Plus release tag"
|
[ -n "$PODKOP_PLUS_RELEASE_TAG" ] || fail "Failed to detect the Podkop Plus release tag"
|
||||||
|
|
||||||
[ -n "$PODKOP_PLUS_SOURCE_REF" ] || PODKOP_PLUS_SOURCE_REF="$PODKOP_PLUS_RELEASE_TAG"
|
|
||||||
|
|
||||||
PODKOP_PLUS_PACKAGE_URL="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r --arg ext "$asset_ext" '.assets[] | select((.name | startswith("luci-app-podkop-plus_")) and (.name | endswith("." + $ext))) | .browser_download_url' | sed -n '1p')"
|
PODKOP_PLUS_PACKAGE_URL="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r --arg ext "$asset_ext" '.assets[] | select((.name | startswith("luci-app-podkop-plus_")) and (.name | endswith("." + $ext))) | .browser_download_url' | sed -n '1p')"
|
||||||
PODKOP_PLUS_I18N_URL="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r --arg ext "$asset_ext" '.assets[] | select((.name | startswith("luci-i18n-podkop-plus-ru_")) and (.name | endswith("." + $ext))) | .browser_download_url' | sed -n '1p')"
|
PODKOP_PLUS_I18N_URL="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r --arg ext "$asset_ext" '.assets[] | select((.name | startswith("luci-i18n-podkop-plus-ru_")) and (.name | endswith("." + $ext))) | .browser_download_url' | sed -n '1p')"
|
||||||
|
|
||||||
@@ -426,7 +430,7 @@ reset_legacy_config_if_needed() {
|
|||||||
backup_path="/etc/config/podkop-070.$(date +%Y%m%d%H%M%S 2>/dev/null || echo "$$")"
|
backup_path="/etc/config/podkop-070.$(date +%Y%m%d%H%M%S 2>/dev/null || echo "$$")"
|
||||||
mv /etc/config/podkop "$backup_path" || fail "Failed to back up /etc/config/podkop"
|
mv /etc/config/podkop "$backup_path" || fail "Failed to back up /etc/config/podkop"
|
||||||
|
|
||||||
default_config_url="https://raw.githubusercontent.com/${REPO_OWNER}/${REPO_NAME}/${PODKOP_PLUS_SOURCE_REF}/podkop/files/etc/config/podkop"
|
default_config_url="https://raw.githubusercontent.com/${REPO_OWNER}/${REPO_NAME}/${PODKOP_PLUS_RELEASE_TAG}/podkop/files/etc/config/podkop"
|
||||||
default_config_tmp="$TMP_DIR/default-podkop-config"
|
default_config_tmp="$TMP_DIR/default-podkop-config"
|
||||||
|
|
||||||
download_with_retry "$default_config_url" "$default_config_tmp" "default Podkop Plus config" || fail "Failed to download the default Podkop Plus config"
|
download_with_retry "$default_config_url" "$default_config_tmp" "default Podkop Plus config" || fail "Failed to download the default Podkop Plus config"
|
||||||
@@ -512,6 +516,12 @@ append_arch_candidate() {
|
|||||||
|
|
||||||
[ -n "$candidate" ] || return 0
|
[ -n "$candidate" ] || return 0
|
||||||
|
|
||||||
|
case "$candidate" in
|
||||||
|
all|noarch)
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
case " $ZAPRET_ARCH_CANDIDATES " in
|
case " $ZAPRET_ARCH_CANDIDATES " in
|
||||||
*" $candidate "*)
|
*" $candidate "*)
|
||||||
return 0
|
return 0
|
||||||
@@ -525,66 +535,143 @@ append_arch_candidate() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
append_arch_candidate_variants() {
|
||||||
|
candidate="$1"
|
||||||
|
base_candidate=""
|
||||||
|
|
||||||
|
[ -n "$candidate" ] || return 0
|
||||||
|
|
||||||
|
append_arch_candidate "$candidate"
|
||||||
|
|
||||||
|
case "$candidate" in
|
||||||
|
*+*)
|
||||||
|
append_arch_candidate "${candidate%%+*}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
for suffix in _musl _uclibc _glibc -musl -uclibc -glibc .musl .uclibc .glibc; do
|
||||||
|
case "$candidate" in
|
||||||
|
*"$suffix")
|
||||||
|
base_candidate="${candidate%"$suffix"}"
|
||||||
|
append_arch_candidate "$base_candidate"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
add_arch_family_fallbacks() {
|
add_arch_family_fallbacks() {
|
||||||
arch="$1"
|
arch="$1"
|
||||||
|
|
||||||
append_arch_candidate "$arch"
|
append_arch_candidate_variants "$arch"
|
||||||
|
|
||||||
case "$arch" in
|
case "$arch" in
|
||||||
aarch64_*)
|
aarch64_*)
|
||||||
append_arch_candidate "aarch64_generic"
|
append_arch_candidate_variants "aarch64_generic"
|
||||||
;;
|
;;
|
||||||
riscv64_*)
|
riscv64_*)
|
||||||
append_arch_candidate "riscv64_generic"
|
append_arch_candidate_variants "riscv64_generic"
|
||||||
;;
|
;;
|
||||||
arm_cortex-a7_neon-vfpv4)
|
arm_cortex-a7_neon-vfpv4)
|
||||||
append_arch_candidate "arm_cortex-a7_vfpv4"
|
append_arch_candidate_variants "arm_cortex-a7_vfpv4"
|
||||||
append_arch_candidate "arm_cortex-a7"
|
append_arch_candidate_variants "arm_cortex-a7"
|
||||||
;;
|
;;
|
||||||
arm_cortex-a7_*)
|
arm_cortex-a7_*)
|
||||||
append_arch_candidate "arm_cortex-a7"
|
append_arch_candidate_variants "arm_cortex-a7"
|
||||||
;;
|
;;
|
||||||
arm_cortex-a9_*)
|
arm_cortex-a9_*)
|
||||||
append_arch_candidate "arm_cortex-a9"
|
append_arch_candidate_variants "arm_cortex-a9"
|
||||||
;;
|
;;
|
||||||
mipsel_24kc_24kf)
|
mipsel_24kc_24kf)
|
||||||
append_arch_candidate "mipsel_24kc"
|
append_arch_candidate_variants "mipsel_24kc"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve_arch_candidates() {
|
resolve_arch_candidates() {
|
||||||
arch_list=""
|
arch_list=""
|
||||||
|
apk_arch_list=""
|
||||||
|
release_arch=""
|
||||||
|
|
||||||
if [ "$PKG_IS_APK" -eq 1 ]; then
|
if [ "$PKG_IS_APK" -eq 1 ]; then
|
||||||
arch_list="$(apk --print-arch 2>/dev/null || true)"
|
if [ -f /etc/apk/arch ]; then
|
||||||
|
apk_arch_list="$(tr '\r\n' ' ' </etc/apk/arch)"
|
||||||
|
[ -n "$apk_arch_list" ] && arch_list="$arch_list $apk_arch_list"
|
||||||
|
fi
|
||||||
|
|
||||||
|
apk_arch_list="$(apk --print-arch 2>/dev/null || true)"
|
||||||
|
[ -n "$apk_arch_list" ] && arch_list="$arch_list $apk_arch_list"
|
||||||
else
|
else
|
||||||
arch_list="$(opkg print-architecture 2>/dev/null | awk '$1 == "arch" && $2 !~ /^(all|noarch)$/ {print $2 " " $3}' | sort -k2,2nr | awk '{print $1}')"
|
arch_list="$(opkg print-architecture 2>/dev/null | awk '$1 == "arch" && $2 !~ /^(all|noarch)$/ {print $2 " " $3}' | sort -k2,2nr | awk '{print $1}')"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$arch_list" ]; then
|
release_arch="$(read_openwrt_release_value "DISTRIB_ARCH")"
|
||||||
|
[ -n "$release_arch" ] && arch_list="$arch_list $release_arch"
|
||||||
|
|
||||||
|
if [ -z "$(printf '%s' "$arch_list" | tr -d '[:space:]')" ]; then
|
||||||
arch_list="$(uname -m 2>/dev/null || true)"
|
arch_list="$(uname -m 2>/dev/null || true)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for arch in $arch_list; do
|
for arch in $arch_list; do
|
||||||
|
case "$arch" in
|
||||||
|
all|noarch)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
[ -n "$TARGET_ARCH" ] || TARGET_ARCH="$arch"
|
[ -n "$TARGET_ARCH" ] || TARGET_ARCH="$arch"
|
||||||
add_arch_family_fallbacks "$arch"
|
add_arch_family_fallbacks "$arch"
|
||||||
done
|
done
|
||||||
|
|
||||||
[ -n "$TARGET_ARCH" ] || fail "Failed to detect the router package architecture"
|
[ -n "$TARGET_ARCH" ] || fail "Failed to detect the router package architecture"
|
||||||
|
msg "Detected zapret architecture candidates: $ZAPRET_ARCH_CANDIDATES"
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve_zapret_release() {
|
resolve_zapret_release() {
|
||||||
candidate_name=""
|
candidate_name=""
|
||||||
|
message=""
|
||||||
|
url="https://api.github.com/repos/remittor/zapret-openwrt/releases/latest"
|
||||||
|
|
||||||
if [ "$PODKOP_PLUS_KEEP_EXISTING_ZAPRET" = "1" ] && pkg_is_installed "zapret"; then
|
clear_zapret_download_state
|
||||||
warn "Keeping the existing zapret package because PODKOP_PLUS_KEEP_EXISTING_ZAPRET=1"
|
|
||||||
|
[ "$ZAPRET_REQUESTED" -eq 1 ] || return 0
|
||||||
|
|
||||||
|
ZAPRET_RELEASE_JSON="$(http_get "$url" 2>/dev/null || true)"
|
||||||
|
if [ -z "$ZAPRET_RELEASE_JSON" ]; then
|
||||||
|
warn "Failed to query zapret release metadata. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="release metadata unavailable"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ZAPRET_RELEASE_JSON="$(fetch_github_release_json "remittor" "zapret-openwrt" "$ZAPRET_RELEASE_TAG")"
|
if ! printf '%s' "$ZAPRET_RELEASE_JSON" | jq -e . >/dev/null 2>&1; then
|
||||||
|
warn "GitHub returned an invalid zapret release response. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="invalid release metadata"
|
||||||
|
clear_zapret_download_state
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
message="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r '.message // empty')"
|
||||||
|
case "$message" in
|
||||||
|
*"API rate limit"*|*"rate limit exceeded"*)
|
||||||
|
warn "GitHub API rate limit reached while resolving zapret. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="GitHub API rate limit"
|
||||||
|
clear_zapret_download_state
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
"Not Found")
|
||||||
|
warn "No published releases found for remittor/zapret-openwrt. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="release not found"
|
||||||
|
clear_zapret_download_state
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
ZAPRET_RELEASE_TAG_RESOLVED="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r '.tag_name // empty')"
|
ZAPRET_RELEASE_TAG_RESOLVED="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r '.tag_name // empty')"
|
||||||
[ -n "$ZAPRET_RELEASE_TAG_RESOLVED" ] || fail "Failed to detect the zapret release tag"
|
if [ -z "$ZAPRET_RELEASE_TAG_RESOLVED" ]; then
|
||||||
|
warn "Failed to detect the zapret release tag. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="release tag unavailable"
|
||||||
|
clear_zapret_download_state
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
for arch in $ZAPRET_ARCH_CANDIDATES; do
|
for arch in $ZAPRET_ARCH_CANDIDATES; do
|
||||||
candidate_name="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r --arg arch "$arch" '.assets[] | select(.name | endswith("_" + $arch + ".zip")) | .name' | sed -n '1p')"
|
candidate_name="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r --arg arch "$arch" '.assets[] | select(.name | endswith("_" + $arch + ".zip")) | .name' | sed -n '1p')"
|
||||||
@@ -596,10 +683,36 @@ resolve_zapret_release() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
[ -n "$ZAPRET_BUNDLE_NAME" ] || fail "No zapret package was found for architecture: $TARGET_ARCH. Tried: $ZAPRET_ARCH_CANDIDATES"
|
if [ -z "$ZAPRET_BUNDLE_NAME" ]; then
|
||||||
|
warn "No zapret package was found for architecture: $TARGET_ARCH. Tried: $ZAPRET_ARCH_CANDIDATES. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="package not found for architecture"
|
||||||
|
clear_zapret_download_state
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
ZAPRET_BUNDLE_URL="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r --arg name "$ZAPRET_BUNDLE_NAME" '.assets[] | select(.name == $name) | .browser_download_url' | sed -n '1p')"
|
ZAPRET_BUNDLE_URL="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r --arg name "$ZAPRET_BUNDLE_NAME" '.assets[] | select(.name == $name) | .browser_download_url' | sed -n '1p')"
|
||||||
[ -n "$ZAPRET_BUNDLE_URL" ] || fail "Failed to resolve the zapret download URL for $ZAPRET_BUNDLE_NAME"
|
if [ -z "$ZAPRET_BUNDLE_URL" ]; then
|
||||||
|
warn "Failed to resolve the zapret download URL for $ZAPRET_BUNDLE_NAME. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="download URL unavailable"
|
||||||
|
clear_zapret_download_state
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
decide_zapret_installation() {
|
||||||
|
if is_zapret_present; then
|
||||||
|
ZAPRET_ALREADY_PRESENT=1
|
||||||
|
msg "Detected an existing zapret installation. Skipping zapret installation."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if confirm_prompt "Install optional zapret package?"; then
|
||||||
|
ZAPRET_REQUESTED=1
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZAPRET_SKIPPED_REASON="installation declined by user"
|
||||||
|
warn "Continuing without zapret."
|
||||||
}
|
}
|
||||||
|
|
||||||
download_podkop_plus_packages() {
|
download_podkop_plus_packages() {
|
||||||
@@ -617,7 +730,12 @@ download_and_extract_zapret_package() {
|
|||||||
[ -n "$ZAPRET_BUNDLE_URL" ] || return 0
|
[ -n "$ZAPRET_BUNDLE_URL" ] || return 0
|
||||||
|
|
||||||
bundle_file="$TMP_DIR/$ZAPRET_BUNDLE_NAME"
|
bundle_file="$TMP_DIR/$ZAPRET_BUNDLE_NAME"
|
||||||
download_with_retry "$ZAPRET_BUNDLE_URL" "$bundle_file" "$ZAPRET_BUNDLE_NAME" || fail "Failed to download $ZAPRET_BUNDLE_NAME"
|
if ! download_with_retry "$ZAPRET_BUNDLE_URL" "$bundle_file" "$ZAPRET_BUNDLE_NAME"; then
|
||||||
|
warn "Failed to download $ZAPRET_BUNDLE_NAME. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="download failed"
|
||||||
|
clear_zapret_download_state
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$PKG_IS_APK" -eq 1 ]; then
|
if [ "$PKG_IS_APK" -eq 1 ]; then
|
||||||
inner_package_path="$(unzip -l "$bundle_file" | awk '{print $4}' | grep -E '^apk/zapret-.*\.apk$' | sed -n '1p')"
|
inner_package_path="$(unzip -l "$bundle_file" | awk '{print $4}' | grep -E '^apk/zapret-.*\.apk$' | sed -n '1p')"
|
||||||
@@ -626,24 +744,41 @@ download_and_extract_zapret_package() {
|
|||||||
[ -n "$inner_package_path" ] || inner_package_path="$(unzip -l "$bundle_file" | awk '{print $4}' | grep -E '^zapret_.*\.ipk$' | sed -n '1p')"
|
[ -n "$inner_package_path" ] || inner_package_path="$(unzip -l "$bundle_file" | awk '{print $4}' | grep -E '^zapret_.*\.ipk$' | sed -n '1p')"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$inner_package_path" ] || fail "Failed to locate the zapret package inside $ZAPRET_BUNDLE_NAME"
|
if [ -z "$inner_package_path" ]; then
|
||||||
|
warn "Failed to locate the zapret package inside $ZAPRET_BUNDLE_NAME. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="package archive layout is unsupported"
|
||||||
|
clear_zapret_download_state
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
ZAPRET_PACKAGE_NAME="$(basename "$inner_package_path")"
|
ZAPRET_PACKAGE_NAME="$(basename "$inner_package_path")"
|
||||||
ZAPRET_PACKAGE_FILE="$TMP_DIR/$ZAPRET_PACKAGE_NAME"
|
ZAPRET_PACKAGE_FILE="$TMP_DIR/$ZAPRET_PACKAGE_NAME"
|
||||||
ZAPRET_PACKAGE_VERSION="$(extract_package_version "$ZAPRET_PACKAGE_NAME")"
|
ZAPRET_PACKAGE_VERSION="$(extract_package_version "$ZAPRET_PACKAGE_NAME")"
|
||||||
|
|
||||||
unzip -p "$bundle_file" "$inner_package_path" > "$ZAPRET_PACKAGE_FILE" || fail "Failed to extract $ZAPRET_PACKAGE_NAME"
|
if ! unzip -p "$bundle_file" "$inner_package_path" > "$ZAPRET_PACKAGE_FILE"; then
|
||||||
[ -s "$ZAPRET_PACKAGE_FILE" ] || fail "The extracted zapret package is empty"
|
warn "Failed to extract $ZAPRET_PACKAGE_NAME. Continuing without zapret."
|
||||||
}
|
ZAPRET_SKIPPED_REASON="package extraction failed"
|
||||||
|
clear_zapret_download_state
|
||||||
install_packages() {
|
|
||||||
if [ "$PODKOP_PLUS_KEEP_EXISTING_ZAPRET" = "1" ] && pkg_is_installed "zapret"; then
|
|
||||||
pkg_install_files "$PODKOP_PLUS_PACKAGE_FILE" "$PODKOP_PLUS_I18N_FILE" || fail "Podkop Plus package installation failed"
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pkg_remove_if_installed "zapret"
|
if [ ! -s "$ZAPRET_PACKAGE_FILE" ]; then
|
||||||
pkg_install_files "$ZAPRET_PACKAGE_FILE" "$PODKOP_PLUS_PACKAGE_FILE" "$PODKOP_PLUS_I18N_FILE" || fail "Package installation failed"
|
warn "The extracted zapret package is empty. Continuing without zapret."
|
||||||
|
ZAPRET_SKIPPED_REASON="empty package archive"
|
||||||
|
clear_zapret_download_state
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_packages() {
|
||||||
|
set -- "$PODKOP_PLUS_PACKAGE_FILE" "$PODKOP_PLUS_I18N_FILE"
|
||||||
|
|
||||||
|
if [ -n "$ZAPRET_PACKAGE_FILE" ]; then
|
||||||
|
pkg_remove_if_installed "zapret"
|
||||||
|
set -- "$ZAPRET_PACKAGE_FILE" "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkg_install_files "$@" || fail "Package installation failed"
|
||||||
}
|
}
|
||||||
|
|
||||||
post_install() {
|
post_install() {
|
||||||
@@ -673,6 +808,7 @@ main() {
|
|||||||
remove_conflicting_dns_proxy
|
remove_conflicting_dns_proxy
|
||||||
remove_old_sing_box_if_needed
|
remove_old_sing_box_if_needed
|
||||||
resolve_arch_candidates
|
resolve_arch_candidates
|
||||||
|
decide_zapret_installation
|
||||||
resolve_zapret_release
|
resolve_zapret_release
|
||||||
|
|
||||||
cleanup_legacy_installation
|
cleanup_legacy_installation
|
||||||
@@ -687,8 +823,10 @@ main() {
|
|||||||
if [ -n "$ZAPRET_PACKAGE_VERSION" ]; then
|
if [ -n "$ZAPRET_PACKAGE_VERSION" ]; then
|
||||||
msg "zapret $ZAPRET_PACKAGE_VERSION installed for architecture $ZAPRET_ARCH"
|
msg "zapret $ZAPRET_PACKAGE_VERSION installed for architecture $ZAPRET_ARCH"
|
||||||
msg "zapret source: remittor/zapret-openwrt@${ZAPRET_RELEASE_TAG_RESOLVED}"
|
msg "zapret source: remittor/zapret-openwrt@${ZAPRET_RELEASE_TAG_RESOLVED}"
|
||||||
elif [ "$PODKOP_PLUS_KEEP_EXISTING_ZAPRET" = "1" ] && pkg_is_installed "zapret"; then
|
elif [ "$ZAPRET_ALREADY_PRESENT" -eq 1 ]; then
|
||||||
warn "Keeping the existing zapret package"
|
msg "Using the existing zapret installation"
|
||||||
|
elif [ -n "$ZAPRET_SKIPPED_REASON" ]; then
|
||||||
|
warn "zapret was not installed: $ZAPRET_SKIPPED_REASON"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
warn "Open LuCI and review your rules before enabling Podkop Plus"
|
warn "Open LuCI and review your rules before enabling Podkop Plus"
|
||||||
|
|||||||
@@ -1198,6 +1198,7 @@ var initialDiagnosticStore = {
|
|||||||
luci_app_version: "loading",
|
luci_app_version: "loading",
|
||||||
sing_box_version: "loading",
|
sing_box_version: "loading",
|
||||||
zapret_version: "loading",
|
zapret_version: "loading",
|
||||||
|
zapret_installed: 0,
|
||||||
openwrt_version: "loading",
|
openwrt_version: "loading",
|
||||||
device_model: "loading"
|
device_model: "loading"
|
||||||
},
|
},
|
||||||
@@ -1445,7 +1446,13 @@ var initialStore = {
|
|||||||
servicesInfoWidget: {
|
servicesInfoWidget: {
|
||||||
loading: true,
|
loading: true,
|
||||||
failed: false,
|
failed: false,
|
||||||
data: { singbox: 0, podkopRunning: 0, podkopEnabled: 0, zapret: 0 }
|
data: {
|
||||||
|
singbox: 0,
|
||||||
|
podkopRunning: 0,
|
||||||
|
podkopEnabled: 0,
|
||||||
|
zapret: 0,
|
||||||
|
zapretInstalled: 0
|
||||||
|
}
|
||||||
},
|
},
|
||||||
sectionsWidget: {
|
sectionsWidget: {
|
||||||
loading: true,
|
loading: true,
|
||||||
@@ -1617,6 +1624,30 @@ var PodkopLogWatcher = class _PodkopLogWatcher {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// src/podkop/services/core.service.ts
|
// src/podkop/services/core.service.ts
|
||||||
|
var LOG_NOTIFICATION_DEDUPE_WINDOW_MS = 15e3;
|
||||||
|
var recentErrorNotifications = /* @__PURE__ */ new Map();
|
||||||
|
function getNotificationKey(line) {
|
||||||
|
const lower = line.toLowerCase();
|
||||||
|
const errorIndex = lower.indexOf("[error]");
|
||||||
|
const fatalIndex = lower.indexOf("[fatal]");
|
||||||
|
const markerIndex = errorIndex >= 0 && fatalIndex >= 0 ? Math.min(errorIndex, fatalIndex) : Math.max(errorIndex, fatalIndex);
|
||||||
|
return (markerIndex >= 0 ? line.slice(markerIndex) : line).trim();
|
||||||
|
}
|
||||||
|
function shouldNotifyAboutLogLine(line) {
|
||||||
|
const key = getNotificationKey(line);
|
||||||
|
const now = Date.now();
|
||||||
|
const lastShownAt = recentErrorNotifications.get(key) ?? 0;
|
||||||
|
recentErrorNotifications.forEach((shownAt, storedKey) => {
|
||||||
|
if (now - shownAt > LOG_NOTIFICATION_DEDUPE_WINDOW_MS) {
|
||||||
|
recentErrorNotifications.delete(storedKey);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (now - lastShownAt < LOG_NOTIFICATION_DEDUPE_WINDOW_MS) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
recentErrorNotifications.set(key, now);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
function coreService() {
|
function coreService() {
|
||||||
TabServiceInstance.onChange((activeId, tabs) => {
|
TabServiceInstance.onChange((activeId, tabs) => {
|
||||||
logger.info("[TAB]", activeId);
|
logger.info("[TAB]", activeId);
|
||||||
@@ -1639,12 +1670,8 @@ function coreService() {
|
|||||||
{
|
{
|
||||||
intervalMs: 3e3,
|
intervalMs: 3e3,
|
||||||
onNewLog: (line) => {
|
onNewLog: (line) => {
|
||||||
if (line.toLowerCase().includes("[error]") || line.toLowerCase().includes("[fatal]")) {
|
if ((line.toLowerCase().includes("[error]") || line.toLowerCase().includes("[fatal]")) && shouldNotifyAboutLogLine(line)) {
|
||||||
ui.addNotification(
|
ui.addNotification("Podkop Plus Error", E("div", {}, line), "error");
|
||||||
"Podkop Plus Error",
|
|
||||||
E("div", {}, line),
|
|
||||||
"error"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2048,10 +2075,7 @@ async function fetchServicesInfo() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const podkop = getSettledMethodResponse("getStatus", podkopResult);
|
const podkop = getSettledMethodResponse("getStatus", podkopResult);
|
||||||
const singbox = getSettledMethodResponse(
|
const singbox = getSettledMethodResponse("getSingBoxStatus", singboxResult);
|
||||||
"getSingBoxStatus",
|
|
||||||
singboxResult
|
|
||||||
);
|
|
||||||
const zapret = getSettledMethodResponse("getZapretStatus", zapretResult);
|
const zapret = getSettledMethodResponse("getZapretStatus", zapretResult);
|
||||||
store.set({
|
store.set({
|
||||||
servicesInfoWidget: {
|
servicesInfoWidget: {
|
||||||
@@ -2061,7 +2085,8 @@ async function fetchServicesInfo() {
|
|||||||
singbox: singbox.success ? singbox.data.running : 0,
|
singbox: singbox.success ? singbox.data.running : 0,
|
||||||
podkopRunning: podkop.success ? podkop.data.running : 0,
|
podkopRunning: podkop.success ? podkop.data.running : 0,
|
||||||
podkopEnabled: podkop.success ? podkop.data.enabled : 0,
|
podkopEnabled: podkop.success ? podkop.data.enabled : 0,
|
||||||
zapret: zapret.success ? zapret.data.ready : 0
|
zapret: zapret.success ? zapret.data.ready : 0,
|
||||||
|
zapretInstalled: zapret.success ? zapret.data.installed : 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -2364,9 +2389,9 @@ async function renderServicesInfoWidget() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: _("Zapret"),
|
key: _("Zapret"),
|
||||||
value: servicesInfoWidget.data.zapret ? _("\u2714 Running") : _("\u2718 Stopped"),
|
value: !servicesInfoWidget.data.zapretInstalled ? _("\u2718 Not installed") : servicesInfoWidget.data.zapret ? _("\u2714 Running") : _("\u2718 Stopped"),
|
||||||
attributes: {
|
attributes: {
|
||||||
class: servicesInfoWidget.data.zapret ? "pdk_dashboard-page__widgets-section__item__row--success" : "pdk_dashboard-page__widgets-section__item__row--error"
|
class: servicesInfoWidget.data.zapretInstalled && servicesInfoWidget.data.zapret ? "pdk_dashboard-page__widgets-section__item__row--success" : "pdk_dashboard-page__widgets-section__item__row--error"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2915,8 +2940,8 @@ async function runZapretCheck() {
|
|||||||
state: "loading",
|
state: "loading",
|
||||||
items: []
|
items: []
|
||||||
});
|
});
|
||||||
const zapretChecks = await PodkopShellMethods.checkZapretRuntime();
|
const zapretStatus = await PodkopShellMethods.getZapretStatus();
|
||||||
if (!zapretChecks.success) {
|
if (!zapretStatus.success) {
|
||||||
updateCheckStore({
|
updateCheckStore({
|
||||||
order,
|
order,
|
||||||
code,
|
code,
|
||||||
@@ -2927,24 +2952,71 @@ async function runZapretCheck() {
|
|||||||
});
|
});
|
||||||
throw new Error("Zapret checks failed");
|
throw new Error("Zapret checks failed");
|
||||||
}
|
}
|
||||||
const installed = Boolean(zapretChecks.data.zapret_installed);
|
const installed = Boolean(zapretStatus.data.installed);
|
||||||
|
const hasZapretRules = Number(zapretStatus.data.enabled_rule_count || 0) > 0;
|
||||||
|
if (installed) {
|
||||||
|
updateCheckStore({
|
||||||
|
order,
|
||||||
|
code,
|
||||||
|
title,
|
||||||
|
description: _("Checks passed"),
|
||||||
|
state: "success",
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
state: "success",
|
||||||
|
key: _("Zapret installed"),
|
||||||
|
value: ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
state: "success",
|
||||||
|
key: hasZapretRules ? _("There are rules using zapret") : _("No rules use zapret"),
|
||||||
|
value: ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (hasZapretRules) {
|
||||||
|
updateCheckStore({
|
||||||
|
order,
|
||||||
|
code,
|
||||||
|
title,
|
||||||
|
description: _("Zapret not installed"),
|
||||||
|
state: "error",
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
state: "error",
|
||||||
|
key: _("Zapret not installed"),
|
||||||
|
value: ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
state: "error",
|
||||||
|
key: _("There are rules using zapret"),
|
||||||
|
value: ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
updateCheckStore({
|
updateCheckStore({
|
||||||
order,
|
order,
|
||||||
code,
|
code,
|
||||||
title,
|
title,
|
||||||
description: installed ? _("Checks passed") : _("Checks failed"),
|
description: _("Zapret not installed"),
|
||||||
state: installed ? "success" : "error",
|
state: "warning",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
state: installed ? "success" : "error",
|
state: "warning",
|
||||||
key: installed ? _("Zapret installed") : _("Zapret not installed"),
|
key: _("Zapret not installed"),
|
||||||
|
value: ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
state: "success",
|
||||||
|
key: _("No rules use zapret"),
|
||||||
value: ""
|
value: ""
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
if (!installed) {
|
|
||||||
throw new Error("Zapret checks failed");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/partials/button/styles.ts
|
// src/partials/button/styles.ts
|
||||||
@@ -4260,6 +4332,7 @@ var UNKNOWN_DIAGNOSTICS_SYSTEM_INFO = {
|
|||||||
luci_app_version: _("unknown"),
|
luci_app_version: _("unknown"),
|
||||||
sing_box_version: _("unknown"),
|
sing_box_version: _("unknown"),
|
||||||
zapret_version: _("unknown"),
|
zapret_version: _("unknown"),
|
||||||
|
zapret_installed: 0,
|
||||||
openwrt_version: _("unknown"),
|
openwrt_version: _("unknown"),
|
||||||
device_model: _("unknown")
|
device_model: _("unknown")
|
||||||
};
|
};
|
||||||
@@ -4684,7 +4757,7 @@ function renderDiagnosticSystemInfoWidget() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "Zapret",
|
key: "Zapret",
|
||||||
value: diagnosticsSystemInfo.zapret_version
|
value: diagnosticsSystemInfo.zapret_installed ? diagnosticsSystemInfo.zapret_version : _("not installed")
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "OS",
|
key: "OS",
|
||||||
|
|||||||
@@ -164,6 +164,125 @@ const NFQWS_REQUIRED_ARG_OPTIONS = new Set([
|
|||||||
"--wssize-cutoff",
|
"--wssize-cutoff",
|
||||||
"--wssize-forced-cutoff",
|
"--wssize-forced-cutoff",
|
||||||
]);
|
]);
|
||||||
|
const zapretAvailabilityState = {
|
||||||
|
loaded: false,
|
||||||
|
installed: true,
|
||||||
|
};
|
||||||
|
let zapretAvailabilityPromise = null;
|
||||||
|
|
||||||
|
function ensureZapretAvailabilityLoaded() {
|
||||||
|
if (zapretAvailabilityState.loaded) {
|
||||||
|
return Promise.resolve(zapretAvailabilityState);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zapretAvailabilityPromise) {
|
||||||
|
return zapretAvailabilityPromise;
|
||||||
|
}
|
||||||
|
|
||||||
|
zapretAvailabilityPromise = main.PodkopShellMethods.getZapretStatus()
|
||||||
|
.then((result) => {
|
||||||
|
zapretAvailabilityState.loaded = true;
|
||||||
|
zapretAvailabilityState.installed = Boolean(
|
||||||
|
result && result.success && result.data && result.data.installed,
|
||||||
|
);
|
||||||
|
return zapretAvailabilityState;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
zapretAvailabilityState.loaded = true;
|
||||||
|
zapretAvailabilityState.installed = true;
|
||||||
|
return zapretAvailabilityState;
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
zapretAvailabilityPromise = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
return zapretAvailabilityPromise;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isZapretInstalledForUi() {
|
||||||
|
return zapretAvailabilityState.installed;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRuleResolvedAction(section_id) {
|
||||||
|
const action = uci.get("podkop", section_id, "action");
|
||||||
|
if (action) {
|
||||||
|
return `${action}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const connectionType = uci.get("podkop", section_id, "connection_type");
|
||||||
|
switch (connectionType) {
|
||||||
|
case "proxy":
|
||||||
|
case "vpn":
|
||||||
|
return "proxy";
|
||||||
|
case "block":
|
||||||
|
return "block";
|
||||||
|
case "exclusion":
|
||||||
|
return "direct";
|
||||||
|
default:
|
||||||
|
return "proxy";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getActionOptionLabel(action) {
|
||||||
|
switch (`${action}`) {
|
||||||
|
case "block":
|
||||||
|
return _("Block");
|
||||||
|
case "direct":
|
||||||
|
return "Direct";
|
||||||
|
case "zapret":
|
||||||
|
return isZapretInstalledForUi()
|
||||||
|
? _("Zapret")
|
||||||
|
: _("Zapret (package not installed)");
|
||||||
|
case "proxy":
|
||||||
|
default:
|
||||||
|
return _("Proxy");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRuleActionDisplayValue(section_id) {
|
||||||
|
const action = getRuleResolvedAction(section_id);
|
||||||
|
|
||||||
|
if (action === "zapret") {
|
||||||
|
return _("Zapret");
|
||||||
|
}
|
||||||
|
|
||||||
|
return getActionOptionLabel(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRuleActionDisplayMarkup(section_id) {
|
||||||
|
return getRuleActionDisplayValue(section_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
function populateActionOptionValues(option) {
|
||||||
|
delete option.keylist;
|
||||||
|
delete option.vallist;
|
||||||
|
|
||||||
|
option.value("proxy", _("Proxy"));
|
||||||
|
option.value("direct", "Direct");
|
||||||
|
option.value("block", _("Block"));
|
||||||
|
option.value("zapret", getActionOptionLabel("zapret"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function disableUnavailableZapretOption(node) {
|
||||||
|
if (!node || isZapretInstalledForUi()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const select =
|
||||||
|
typeof node.querySelector === "function"
|
||||||
|
? node.querySelector("select")
|
||||||
|
: null;
|
||||||
|
if (!select || !select.options) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Array.from(select.options).forEach((option) => {
|
||||||
|
if (option.value === "zapret") {
|
||||||
|
option.disabled = true;
|
||||||
|
option.textContent = _("Zapret (package not installed)");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function getConfigListValues(section_id, key) {
|
function getConfigListValues(section_id, key) {
|
||||||
return normalizeOptionValues(uci.get("podkop", section_id, key));
|
return normalizeOptionValues(uci.get("podkop", section_id, key));
|
||||||
@@ -360,7 +479,10 @@ function applyTextareaInputAttributes(textarea) {
|
|||||||
|
|
||||||
if (nextMinHeight > 0) {
|
if (nextMinHeight > 0) {
|
||||||
if (storedMinHeight <= 0) {
|
if (storedMinHeight <= 0) {
|
||||||
textarea.setAttribute("data-pdk-default-min-height", `${nextMinHeight}`);
|
textarea.setAttribute(
|
||||||
|
"data-pdk-default-min-height",
|
||||||
|
`${nextMinHeight}`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
textarea.style.minHeight = `${nextMinHeight}px`;
|
textarea.style.minHeight = `${nextMinHeight}px`;
|
||||||
@@ -1383,36 +1505,6 @@ function getCustomRulesetReferences(section_id) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRuleActionDisplayValue(section_id) {
|
|
||||||
const action = uci.get("podkop", section_id, "action");
|
|
||||||
if (action) {
|
|
||||||
switch (`${action}`) {
|
|
||||||
case "block":
|
|
||||||
return "Block";
|
|
||||||
case "direct":
|
|
||||||
return "Direct";
|
|
||||||
case "zapret":
|
|
||||||
return "Zapret";
|
|
||||||
case "proxy":
|
|
||||||
default:
|
|
||||||
return "Proxy";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const connectionType = uci.get("podkop", section_id, "connection_type");
|
|
||||||
switch (connectionType) {
|
|
||||||
case "proxy":
|
|
||||||
case "vpn":
|
|
||||||
return "Proxy";
|
|
||||||
case "block":
|
|
||||||
return "Block";
|
|
||||||
case "exclusion":
|
|
||||||
return "Direct";
|
|
||||||
default:
|
|
||||||
return "Proxy";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function createSectionContent(section) {
|
function createSectionContent(section) {
|
||||||
let o;
|
let o;
|
||||||
|
|
||||||
@@ -1432,6 +1524,13 @@ function createSectionContent(section) {
|
|||||||
_("Action"),
|
_("Action"),
|
||||||
);
|
);
|
||||||
o.modalonly = false;
|
o.modalonly = false;
|
||||||
|
o.rawhtml = true;
|
||||||
|
o.load = function () {
|
||||||
|
return ensureZapretAvailabilityLoaded();
|
||||||
|
};
|
||||||
|
o.cfgvalue = function (section_id) {
|
||||||
|
return getRuleActionDisplayMarkup(section_id);
|
||||||
|
};
|
||||||
o.textvalue = function (section_id) {
|
o.textvalue = function (section_id) {
|
||||||
return getRuleActionDisplayValue(section_id);
|
return getRuleActionDisplayValue(section_id);
|
||||||
};
|
};
|
||||||
@@ -1457,13 +1556,28 @@ function createSectionContent(section) {
|
|||||||
_("Action"),
|
_("Action"),
|
||||||
_("What Podkop Plus should do when this section matches"),
|
_("What Podkop Plus should do when this section matches"),
|
||||||
);
|
);
|
||||||
o.value("proxy", "Proxy");
|
populateActionOptionValues(o);
|
||||||
o.value("direct", "Direct");
|
|
||||||
o.value("block", "Block");
|
|
||||||
o.value("zapret", "Zapret");
|
|
||||||
o.default = "proxy";
|
o.default = "proxy";
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.modalonly = true;
|
o.modalonly = true;
|
||||||
|
o.load = function () {
|
||||||
|
return ensureZapretAvailabilityLoaded().then(() => {
|
||||||
|
populateActionOptionValues(this);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
{
|
||||||
|
const originalRenderWidget = o.renderWidget;
|
||||||
|
o.renderWidget = function (section_id, option_index, cfgvalue) {
|
||||||
|
const node = originalRenderWidget.call(
|
||||||
|
this,
|
||||||
|
section_id,
|
||||||
|
option_index,
|
||||||
|
cfgvalue,
|
||||||
|
);
|
||||||
|
disableUnavailableZapretOption(node);
|
||||||
|
return node;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
o = section.taboption(
|
o = section.taboption(
|
||||||
"settings",
|
"settings",
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PODKOP PLUS\n"
|
"Project-Id-Version: PODKOP PLUS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-04-07 21:03+0300\n"
|
"POT-Creation-Date: 2026-04-11 21:16+0300\n"
|
||||||
"PO-Revision-Date: 2026-04-07 21:03+0300\n"
|
"PO-Revision-Date: 2026-04-11 21:16+0300\n"
|
||||||
"Last-Translator: ushan0v\n"
|
"Last-Translator: ushan0v\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: none\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
@@ -20,6 +20,9 @@ msgstr ""
|
|||||||
msgid "✔ Running"
|
msgid "✔ Running"
|
||||||
msgstr "✔ Работает"
|
msgstr "✔ Работает"
|
||||||
|
|
||||||
|
msgid "✘ Not installed"
|
||||||
|
msgstr "✘ Не установлен"
|
||||||
|
|
||||||
msgid "✘ Stopped"
|
msgid "✘ Stopped"
|
||||||
msgstr "✘ Остановлен"
|
msgstr "✘ Остановлен"
|
||||||
|
|
||||||
@@ -77,6 +80,9 @@ msgstr "Backend-проверка завершилась ошибкой: %s"
|
|||||||
msgid "Binary file"
|
msgid "Binary file"
|
||||||
msgstr "Бинарный файл"
|
msgstr "Бинарный файл"
|
||||||
|
|
||||||
|
msgid "Block"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Bootsrap DNS"
|
msgid "Bootsrap DNS"
|
||||||
msgstr "Bootstrap DNS"
|
msgstr "Bootstrap DNS"
|
||||||
|
|
||||||
@@ -551,12 +557,18 @@ msgstr "Стратегия NFQWS не может быть пустой"
|
|||||||
msgid "No other marking rules found"
|
msgid "No other marking rules found"
|
||||||
msgstr "Другие правила маркировки не найдены"
|
msgstr "Другие правила маркировки не найдены"
|
||||||
|
|
||||||
|
msgid "No rules use zapret"
|
||||||
|
msgstr "Нет правил использующих zapret"
|
||||||
|
|
||||||
msgid "Node Type"
|
msgid "Node Type"
|
||||||
msgstr "Тип узла"
|
msgstr "Тип узла"
|
||||||
|
|
||||||
msgid "Not implement yet"
|
msgid "Not implement yet"
|
||||||
msgstr "Ещё не реализовано"
|
msgstr "Ещё не реализовано"
|
||||||
|
|
||||||
|
msgid "not installed"
|
||||||
|
msgstr "не установлен"
|
||||||
|
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr "Не отвечает"
|
msgstr "Не отвечает"
|
||||||
|
|
||||||
@@ -620,6 +632,9 @@ msgstr "Порт не может быть пустым"
|
|||||||
msgid "Port for the local mixed proxy of this section"
|
msgid "Port for the local mixed proxy of this section"
|
||||||
msgstr "Порт локального смешанного прокси для этой секции"
|
msgstr "Порт локального смешанного прокси для этой секции"
|
||||||
|
|
||||||
|
msgid "Proxy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Proxy Configuration URL"
|
msgid "Proxy Configuration URL"
|
||||||
msgstr "URL конфигурации прокси"
|
msgstr "URL конфигурации прокси"
|
||||||
|
|
||||||
@@ -824,6 +839,9 @@ msgstr "DNS-сервер, используемый для поиска IP-адр
|
|||||||
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
||||||
msgstr "Номер NFQUEUE назначается Podkop Plus для каждого правила и не должен переопределяться здесь."
|
msgstr "Номер NFQUEUE назначается Podkop Plus для каждого правила и не должен переопределяться здесь."
|
||||||
|
|
||||||
|
msgid "There are rules using zapret"
|
||||||
|
msgstr "Есть правила использующие zapret"
|
||||||
|
|
||||||
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
||||||
msgstr "Это поле должно запускать рабочую стратегию nfqws; --dry-run сразу завершает процесс и здесь запрещён."
|
msgstr "Это поле должно запускать рабочую стратегию nfqws; --dry-run сразу завершает процесс и здесь запрещён."
|
||||||
|
|
||||||
@@ -959,6 +977,9 @@ msgstr "Вы можете выбрать выходной сетевой инт
|
|||||||
msgid "Zapret"
|
msgid "Zapret"
|
||||||
msgstr "Zapret"
|
msgstr "Zapret"
|
||||||
|
|
||||||
|
msgid "Zapret (package not installed)"
|
||||||
|
msgstr "Zapret (пакет не установлен)"
|
||||||
|
|
||||||
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
||||||
msgstr "Шаблоны hostlist zapret здесь не поддерживаются, потому что Podkop Plus не разворачивает их для per-rule стратегий NFQWS."
|
msgstr "Шаблоны hostlist zapret здесь не поддерживаются, потому что Podkop Plus не разворачивает их для per-rule стратегий NFQWS."
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PODKOP PLUS\n"
|
"Project-Id-Version: PODKOP PLUS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-04-07 18:03+0300\n"
|
"POT-Creation-Date: 2026-04-11 18:16+0300\n"
|
||||||
"PO-Revision-Date: 2026-04-07 18:03+0300\n"
|
"PO-Revision-Date: 2026-04-11 18:16+0300\n"
|
||||||
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
|
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
@@ -18,13 +18,17 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:345
|
#: src/podkop/tabs/dashboard/initController.ts:345
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:356
|
#: src/podkop/tabs/dashboard/initController.ts:356
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:367
|
#: src/podkop/tabs/dashboard/initController.ts:369
|
||||||
msgid "✔ Running"
|
msgid "✔ Running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/podkop/tabs/dashboard/initController.ts:367
|
||||||
|
msgid "✘ Not installed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:346
|
#: src/podkop/tabs/dashboard/initController.ts:346
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:357
|
#: src/podkop/tabs/dashboard/initController.ts:357
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:368
|
#: src/podkop/tabs/dashboard/initController.ts:370
|
||||||
msgid "✘ Stopped"
|
msgid "✘ Stopped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -32,7 +36,7 @@ msgstr ""
|
|||||||
msgid "A latency-tested group of proxy URLs for this node"
|
msgid "A latency-tested group of proxy URLs for this node"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../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:1700
|
||||||
msgid "A latency-tested group of proxy URLs for this section"
|
msgid "A latency-tested group of proxy URLs for this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -40,12 +44,12 @@ msgstr ""
|
|||||||
msgid "A manual group of proxy URLs for this node"
|
msgid "A manual group of proxy URLs for this node"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1533
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1682
|
||||||
msgid "A manual group of proxy URLs for this section"
|
msgid "A manual group of proxy URLs for this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1401
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1524
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1426
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1556
|
||||||
msgid "Action"
|
msgid "Action"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -57,7 +61,7 @@ msgstr ""
|
|||||||
msgid "Add a section"
|
msgid "Add a section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1935
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2084
|
||||||
msgid "Add URLs or local paths to .srs lists"
|
msgid "Add URLs or local paths to .srs lists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -74,15 +78,15 @@ msgid "An error occurred while saving the form:"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170
|
#: ../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:1646
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1795
|
||||||
msgid "Applicable for SOCKS and Shadowsocks links"
|
msgid "Applicable for SOCKS and Shadowsocks links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:681
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:834
|
||||||
msgid "At least one valid domain must be specified."
|
msgid "At least one valid domain must be specified."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:692
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:845
|
||||||
msgid "At least one valid IP or subnet must be specified."
|
msgid "At least one valid IP or subnet must be specified."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -94,7 +98,7 @@ msgstr ""
|
|||||||
msgid "Available actions"
|
msgid "Available actions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:783
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:936
|
||||||
msgid "Backend validation failed: %s"
|
msgid "Backend validation failed: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -102,6 +106,11 @@ msgstr ""
|
|||||||
msgid "Binary file"
|
msgid "Binary file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:229
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:262
|
||||||
|
msgid "Block"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65
|
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65
|
||||||
msgid "Bootsrap DNS"
|
msgid "Bootsrap DNS"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -118,7 +127,7 @@ msgstr ""
|
|||||||
msgid "Browser is using FakeIP correctly"
|
msgid "Browser is using FakeIP correctly"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1840
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1989
|
||||||
msgid "Built-in rule sets"
|
msgid "Built-in rule sets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -151,12 +160,12 @@ msgstr ""
|
|||||||
msgid "checks"
|
msgid "checks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38
|
|
||||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:26
|
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:26
|
||||||
msgid "Checks failed"
|
msgid "Checks failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:40
|
||||||
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:82
|
||||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:13
|
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:13
|
||||||
msgid "Checks passed"
|
msgid "Checks passed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -173,7 +182,7 @@ msgstr ""
|
|||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1389
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1512
|
||||||
msgid "Conditions"
|
msgid "Conditions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -185,16 +194,16 @@ msgstr ""
|
|||||||
msgid "Configuration for Podkop Plus service"
|
msgid "Configuration for Podkop Plus service"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1492
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1637
|
||||||
msgid "Connection"
|
msgid "Connection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1475
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1620
|
||||||
msgid "Connection Type"
|
msgid "Connection Type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19
|
#: ../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:1478
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623
|
||||||
msgid "Connection URL"
|
msgid "Connection URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -256,18 +265,18 @@ msgid "DNS on router"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227
|
#: ../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:1711
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860
|
||||||
#: ../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:15
|
||||||
msgid "DNS over HTTPS (DoH)"
|
msgid "DNS over HTTPS (DoH)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228
|
#: ../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:1712
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1861
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:16
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:16
|
||||||
msgid "DNS over TLS (DoT)"
|
msgid "DNS over TLS (DoT)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1709
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1858
|
||||||
msgid "DNS protocol"
|
msgid "DNS protocol"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -283,7 +292,7 @@ msgstr ""
|
|||||||
msgid "DNS Rewrite TTL"
|
msgid "DNS Rewrite TTL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1727
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1876
|
||||||
msgid "DNS server"
|
msgid "DNS server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -300,15 +309,15 @@ msgstr ""
|
|||||||
msgid "Do not panic, everything can be fixed, just..."
|
msgid "Do not panic, everything can be fixed, just..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1810
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1959
|
||||||
msgid "Domain keyword"
|
msgid "Domain keyword"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1817
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1966
|
||||||
msgid "Domain regex"
|
msgid "Domain regex"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1782
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1931
|
||||||
msgid "Domains"
|
msgid "Domains"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -349,15 +358,15 @@ msgstr ""
|
|||||||
msgid "Drag rows to change priority. The rule at the top is checked first."
|
msgid "Drag rows to change priority. The rule at the top is checked first."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:248
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:367
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:263
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:382
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:283
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:402
|
||||||
msgid "Duplicate value"
|
msgid "Duplicate value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8
|
#: ../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:8
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:8
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1391
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514
|
||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -365,7 +374,7 @@ msgstr ""
|
|||||||
msgid "Enable a dedicated DNS resolver when this node uses an interface"
|
msgid "Enable a dedicated DNS resolver when this node uses an interface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1698
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1847
|
||||||
msgid "Enable a dedicated DNS resolver when this section uses an interface"
|
msgid "Enable a dedicated DNS resolver when this section uses an interface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -373,7 +382,7 @@ msgstr ""
|
|||||||
msgid "Enable autostart"
|
msgid "Enable autostart"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1749
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898
|
||||||
msgid "Enable Mixed Proxy"
|
msgid "Enable Mixed Proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -390,31 +399,31 @@ msgid "Enable YACD WAN Access"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52
|
#: ../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:1514
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1660
|
||||||
msgid "Enter a complete sing-box outbound object"
|
msgid "Enter a complete sing-box outbound object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103
|
#: ../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:1572
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721
|
||||||
msgid "Every 3 minutes"
|
msgid "Every 3 minutes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101
|
#: ../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:1570
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719
|
||||||
msgid "Every 30 seconds"
|
msgid "Every 30 seconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104
|
#: ../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:1573
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722
|
||||||
msgid "Every 5 minutes"
|
msgid "Every 5 minutes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102
|
#: ../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:1571
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1720
|
||||||
msgid "Every minute"
|
msgid "Every minute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../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:1945
|
||||||
msgid "Exact full domain"
|
msgid "Exact full domain"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -430,11 +439,11 @@ msgstr ""
|
|||||||
msgid "Expecting: %s"
|
msgid "Expecting: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1750
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1899
|
||||||
msgid "Expose this section as a local HTTP+SOCKS proxy"
|
msgid "Expose this section as a local HTTP+SOCKS proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:844
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:997
|
||||||
msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation."
|
msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -442,12 +451,12 @@ msgstr ""
|
|||||||
msgid "Failed to copy!"
|
msgid "Failed to copy!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:250
|
#: src/podkop/tabs/diagnostic/initController.ts:251
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:254
|
#: src/podkop/tabs/diagnostic/initController.ts:255
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:300
|
#: src/podkop/tabs/diagnostic/initController.ts:301
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:304
|
#: src/podkop/tabs/diagnostic/initController.ts:305
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:341
|
#: src/podkop/tabs/diagnostic/initController.ts:342
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:345
|
#: src/podkop/tabs/diagnostic/initController.ts:346
|
||||||
msgid "Failed to execute!"
|
msgid "Failed to execute!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -464,7 +473,7 @@ msgstr ""
|
|||||||
msgid "Get global check"
|
msgid "Get global check"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:245
|
#: src/podkop/tabs/diagnostic/initController.ts:246
|
||||||
msgid "Global check"
|
msgid "Global check"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -472,7 +481,7 @@ msgstr ""
|
|||||||
msgid "How often this remote rule set should be refreshed"
|
msgid "How often this remote rule set should be refreshed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1476
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1621
|
||||||
msgid "How to configure the proxy connection for this section"
|
msgid "How to configure the proxy connection for this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -482,8 +491,8 @@ 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:23
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179
|
#: ../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:1482
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1627
|
||||||
#: ../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:1806
|
||||||
msgid "Interface"
|
msgid "Interface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -576,12 +585,12 @@ msgstr ""
|
|||||||
msgid "Invalid path format. Path must start with \"/\" and contain valid characters"
|
msgid "Invalid path format. Path must start with \"/\" and contain valid characters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1777
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1926
|
||||||
#: src/validators/validateShadowsocksUrl.ts:85
|
#: src/validators/validateShadowsocksUrl.ts:85
|
||||||
msgid "Invalid port number. Must be between 1 and 65535"
|
msgid "Invalid port number. Must be between 1 and 65535"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:191
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:310
|
||||||
msgid "Invalid regular expression"
|
msgid "Invalid regular expression"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -682,7 +691,7 @@ msgstr ""
|
|||||||
msgid "IP address 0.0.0.0 is not allowed"
|
msgid "IP address 0.0.0.0 is not allowed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1789
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1938
|
||||||
msgid "IPs"
|
msgid "IPs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -690,11 +699,11 @@ msgstr ""
|
|||||||
msgid "Issues detected"
|
msgid "Issues detected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:201
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:320
|
||||||
msgid "Keyword must not contain spaces"
|
msgid "Keyword must not contain spaces"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:501
|
#: src/podkop/tabs/diagnostic/initController.ts:502
|
||||||
msgid "Latest"
|
msgid "Latest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -718,32 +727,32 @@ msgstr ""
|
|||||||
msgid "Main DNS"
|
msgid "Main DNS"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1790
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1939
|
||||||
msgid "Match destination IPs or subnets"
|
msgid "Match destination IPs or subnets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1811
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1960
|
||||||
msgid "Match domains containing a substring"
|
msgid "Match domains containing a substring"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1783
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1932
|
||||||
msgid "Match domains including all subdomains"
|
msgid "Match domains including all subdomains"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1818
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1967
|
||||||
msgid "Match domains using a regular expression"
|
msgid "Match domains using a regular expression"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../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:1946
|
||||||
msgid "Match only one exact full domain name"
|
msgid "Match only one exact full domain name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1825
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1974
|
||||||
msgid "Match source IPs or subnets"
|
msgid "Match source IPs or subnets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114
|
#: ../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:1584
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1733
|
||||||
msgid "Maximum response time delta in milliseconds"
|
msgid "Maximum response time delta in milliseconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -751,7 +760,7 @@ msgstr ""
|
|||||||
msgid "Memory Usage"
|
msgid "Memory Usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1761
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1910
|
||||||
msgid "Mixed Proxy Port"
|
msgid "Mixed Proxy Port"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -760,15 +769,15 @@ msgid "Monitored Interfaces"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136
|
#: ../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:1606
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1755
|
||||||
msgid "Must be a number in the range of 50 - 1000"
|
msgid "Must be a number in the range of 50 - 1000"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1441
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1586
|
||||||
msgid "NFQWS Strategy"
|
msgid "NFQWS Strategy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:974
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1127
|
||||||
msgid "NFQWS strategy cannot be empty"
|
msgid "NFQWS strategy cannot be empty"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -776,6 +785,10 @@ msgstr ""
|
|||||||
msgid "No other marking rules found"
|
msgid "No other marking rules found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:45
|
||||||
|
msgid "No rules use zapret"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:16
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:16
|
||||||
msgid "Node Type"
|
msgid "Node Type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -784,18 +797,22 @@ msgstr ""
|
|||||||
msgid "Not implement yet"
|
msgid "Not implement yet"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/podkop/tabs/diagnostic/initController.ts:523
|
||||||
|
msgid "not installed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:75
|
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:75
|
||||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:81
|
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:81
|
||||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:100
|
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:100
|
||||||
msgid "Not responding"
|
msgid "Not responding"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:56
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:57
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:64
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:65
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:72
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:73
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:80
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:81
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:88
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:89
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:96
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:97
|
||||||
msgid "Not running"
|
msgid "Not running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -811,18 +828,18 @@ msgstr ""
|
|||||||
msgid "Optional node used to download this remote rule set"
|
msgid "Optional node used to download this remote rule set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1052
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1205
|
||||||
msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws."
|
msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws."
|
||||||
msgstr ""
|
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:22
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51
|
#: ../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:1481
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1626
|
||||||
#: ../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:1659
|
||||||
msgid "Outbound JSON"
|
msgid "Outbound JSON"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:491
|
#: src/podkop/tabs/diagnostic/initController.ts:492
|
||||||
msgid "Outdated"
|
msgid "Outdated"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -850,12 +867,12 @@ msgstr ""
|
|||||||
msgid "Path must end with cache.db"
|
msgid "Path must end with cache.db"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:112
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:113
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:120
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:121
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:128
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:129
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:136
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:137
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:144
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:145
|
||||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:152
|
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:153
|
||||||
msgid "Pending"
|
msgid "Pending"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -863,7 +880,7 @@ msgstr ""
|
|||||||
msgid "Podkop Plus"
|
msgid "Podkop Plus"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:862
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1015
|
||||||
msgid "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here."
|
msgid "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -875,14 +892,19 @@ msgstr ""
|
|||||||
msgid "Podkop Plus will not modify your DHCP configuration"
|
msgid "Podkop Plus will not modify your DHCP configuration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1769
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1918
|
||||||
msgid "Port cannot be empty"
|
msgid "Port cannot be empty"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1911
|
||||||
msgid "Port for the local mixed proxy of this section"
|
msgid "Port for the local mixed proxy of this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:238
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:260
|
||||||
|
msgid "Proxy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:31
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:31
|
||||||
msgid "Proxy Configuration URL"
|
msgid "Proxy Configuration URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -895,7 +917,7 @@ msgstr ""
|
|||||||
msgid "Proxy traffic is routed via FakeIP"
|
msgid "Proxy traffic is routed via FakeIP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1879
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2028
|
||||||
msgid "Regional options cannot be used together"
|
msgid "Regional options cannot be used together"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -907,7 +929,7 @@ msgstr ""
|
|||||||
msgid "Remote URL to a sing-box rule set"
|
msgid "Remote URL to a sing-box rule set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1697
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1846
|
||||||
msgid "Resolver for interface outbound"
|
msgid "Resolver for interface outbound"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -915,11 +937,11 @@ msgstr ""
|
|||||||
msgid "Resolver For Interface Outbound"
|
msgid "Resolver For Interface Outbound"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:847
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1000
|
||||||
msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:850
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1003
|
||||||
msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -939,9 +961,9 @@ msgstr ""
|
|||||||
msgid "Routing Excluded IPs"
|
msgid "Routing Excluded IPs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1313
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1466
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1322
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1475
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1325
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1478
|
||||||
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -949,7 +971,7 @@ msgstr ""
|
|||||||
msgid "Rule set URL"
|
msgid "Rule set URL"
|
||||||
msgstr ""
|
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:2083
|
||||||
msgid "Rule sets"
|
msgid "Rule sets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -981,7 +1003,7 @@ msgstr ""
|
|||||||
msgid "Run Diagnostic"
|
msgid "Run Diagnostic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2047
|
||||||
msgid "Russia inside restrictions"
|
msgid "Russia inside restrictions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -997,7 +1019,7 @@ msgstr ""
|
|||||||
msgid "Section"
|
msgid "Section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1413
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1543
|
||||||
msgid "Section name"
|
msgid "Section name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1005,7 +1027,7 @@ msgstr ""
|
|||||||
msgid "Sections"
|
msgid "Sections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1841
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990
|
||||||
msgid "Select a predefined list for routing"
|
msgid "Select a predefined list for routing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1046,11 +1068,11 @@ msgid "Select the WAN interfaces to be monitored"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:20
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:20
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1479
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1624
|
||||||
msgid "Selector"
|
msgid "Selector"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1532
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1681
|
||||||
msgid "Selector connections"
|
msgid "Selector connections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1058,7 +1080,7 @@ msgstr ""
|
|||||||
msgid "Selector Links"
|
msgid "Selector Links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1844
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1993
|
||||||
msgid "Service list"
|
msgid "Service list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1067,11 +1089,11 @@ msgid "Services info"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:391
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:391
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1388
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1511
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:329
|
#: src/podkop/tabs/diagnostic/initController.ts:330
|
||||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
||||||
msgid "Show sing-box config"
|
msgid "Show sing-box config"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1108,7 +1130,7 @@ msgstr ""
|
|||||||
msgid "Source file"
|
msgid "Source file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1824
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1973
|
||||||
msgid "Source IPs"
|
msgid "Source IPs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1148,7 +1170,7 @@ msgstr ""
|
|||||||
msgid "Test latency"
|
msgid "Test latency"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:859
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1012
|
||||||
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
|
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1156,23 +1178,28 @@ msgstr ""
|
|||||||
msgid "The DNS server used to look up the IP address of an upstream DNS server"
|
msgid "The DNS server used to look up the IP address of an upstream DNS server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:856
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1009
|
||||||
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:865
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:69
|
||||||
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:92
|
||||||
|
msgid "There are rules using zapret"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1018
|
||||||
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:868
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1021
|
||||||
msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here."
|
msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1037
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1190
|
||||||
msgid "This flag does not accept a value."
|
msgid "This flag does not accept a value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1068
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1221
|
||||||
msgid "This option requires a value."
|
msgid "This option requires a value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1205,7 +1232,7 @@ msgid "Type"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:229
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:229
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862
|
||||||
msgid "UDP"
|
msgid "UDP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1214,15 +1241,15 @@ msgid "UDP (Unprotected DNS)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169
|
#: ../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:1645
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1794
|
||||||
msgid "UDP over TCP"
|
msgid "UDP over TCP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:779
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:932
|
||||||
msgid "Unable to validate the NFQWS strategy through the backend parser."
|
msgid "Unable to validate the NFQWS strategy through the backend parser."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1017
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1170
|
||||||
msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value."
|
msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1235,9 +1262,9 @@ msgstr ""
|
|||||||
#: src/podkop/tabs/diagnostic/initController.ts:28
|
#: src/podkop/tabs/diagnostic/initController.ts:28
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:29
|
#: src/podkop/tabs/diagnostic/initController.ts:29
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:30
|
#: src/podkop/tabs/diagnostic/initController.ts:30
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:31
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:32
|
#: src/podkop/tabs/diagnostic/initController.ts:32
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:463
|
#: src/podkop/tabs/diagnostic/initController.ts:33
|
||||||
|
#: src/podkop/tabs/diagnostic/initController.ts:464
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1245,7 +1272,7 @@ msgstr ""
|
|||||||
msgid "Unknown error"
|
msgid "Unknown error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1028
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1181
|
||||||
msgid "Unknown NFQWS flag."
|
msgid "Unknown NFQWS flag."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1267,15 +1294,15 @@ msgid "URL must use one of the following protocols:"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:21
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:21
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625
|
||||||
msgid "URLTest"
|
msgid "URLTest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1550
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1699
|
||||||
msgid "URLTest connections"
|
msgid "URLTest connections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1568
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1717
|
||||||
msgid "URLTest interval"
|
msgid "URLTest interval"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1287,7 +1314,7 @@ msgstr ""
|
|||||||
msgid "URLTest Links"
|
msgid "URLTest Links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1732
|
||||||
msgid "URLTest tolerance"
|
msgid "URLTest tolerance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1296,7 +1323,7 @@ msgid "URLTest Tolerance"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139
|
#: ../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:1613
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762
|
||||||
msgid "URLTest URL"
|
msgid "URLTest URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1304,7 +1331,7 @@ msgstr ""
|
|||||||
msgid "Use a network interface as the outbound for this node"
|
msgid "Use a network interface as the outbound for this node"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../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:1807
|
||||||
msgid "Use a network interface as the outbound for this section"
|
msgid "Use a network interface as the outbound for this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1325,35 +1352,35 @@ msgstr ""
|
|||||||
msgid "Valid"
|
msgid "Valid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:255
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:374
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:275
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:394
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:279
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:398
|
||||||
msgid "Validation errors:"
|
msgid "Validation errors:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/initController.ts:289
|
#: src/podkop/tabs/diagnostic/initController.ts:290
|
||||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
||||||
msgid "View logs"
|
msgid "View logs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1414
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1544
|
||||||
msgid "Visible name of this section"
|
msgid "Visible name of this section"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32
|
#: ../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:1493
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1638
|
||||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1881
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030
|
||||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||||
msgstr ""
|
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:2049
|
||||||
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
|
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1427
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1557
|
||||||
msgid "What Podkop Plus should do when this section matches"
|
msgid "What Podkop Plus should do when this section matches"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1365,18 +1392,26 @@ msgstr ""
|
|||||||
msgid "You can select Output Network Interface, by default autodetect"
|
msgid "You can select Output Network Interface, by default autodetect"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:234
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:246
|
||||||
#: src/podkop/tabs/dashboard/initController.ts:365
|
#: src/podkop/tabs/dashboard/initController.ts:365
|
||||||
msgid "Zapret"
|
msgid "Zapret"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:853
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:235
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:282
|
||||||
|
msgid "Zapret (package not installed)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1006
|
||||||
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:87
|
||||||
msgid "Zapret installed"
|
msgid "Zapret installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:59
|
||||||
|
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:64
|
||||||
msgid "Zapret not installed"
|
msgid "Zapret not installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ PODKOP_RUNTIME_STATE_DIR="/var/run/podkop-plus"
|
|||||||
PODKOP_RELOAD_STATE_FILE="$PODKOP_RUNTIME_STATE_DIR/reload-state"
|
PODKOP_RELOAD_STATE_FILE="$PODKOP_RUNTIME_STATE_DIR/reload-state"
|
||||||
PODKOP_RELOAD_STATE_FORMAT=1
|
PODKOP_RELOAD_STATE_FORMAT=1
|
||||||
PODKOP_NFT_POPULATE_ENABLED=1
|
PODKOP_NFT_POPULATE_ENABLED=1
|
||||||
|
PODKOP_ZAPRET_MISSING_WARNING_EMITTED=0
|
||||||
|
|
||||||
config_load "$PODKOP_CONFIG"
|
config_load "$PODKOP_CONFIG"
|
||||||
|
|
||||||
@@ -1182,6 +1183,16 @@ process_validate_rule() {
|
|||||||
|
|
||||||
action="$(get_rule_action "$section")"
|
action="$(get_rule_action "$section")"
|
||||||
if [ "$action" = "zapret" ]; then
|
if [ "$action" = "zapret" ]; then
|
||||||
|
if ! is_zapret_installed; then
|
||||||
|
if [ "$PODKOP_ZAPRET_MISSING_WARNING_EMITTED" -eq 0 ]; then
|
||||||
|
log "There are enabled rules with action 'zapret', but the zapret package is not installed. These rules will be skipped." "error"
|
||||||
|
PODKOP_ZAPRET_MISSING_WARNING_EMITTED=1
|
||||||
|
fi
|
||||||
|
config_list_foreach "$section" "community_lists" validate_service
|
||||||
|
config_list_foreach "$section" "rule_set" validate_ruleset_reference
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
validate_rule_nfqws_opt "$section"
|
validate_rule_nfqws_opt "$section"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1769,6 +1780,10 @@ configure_outbound_handler() {
|
|||||||
proxy_config_type="$(get_proxy_config_type "$section")"
|
proxy_config_type="$(get_proxy_config_type "$section")"
|
||||||
|
|
||||||
if [ "$action" = "zapret" ]; then
|
if [ "$action" = "zapret" ]; then
|
||||||
|
if ! is_zapret_installed; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
local routing_mark outbound_tag zapret_index
|
local routing_mark outbound_tag zapret_index
|
||||||
|
|
||||||
zapret_index="$(get_zapret_rule_index "$section")"
|
zapret_index="$(get_zapret_rule_index "$section")"
|
||||||
@@ -2225,6 +2240,10 @@ configure_route_rule_handler() {
|
|||||||
action="$(get_rule_action "$section")"
|
action="$(get_rule_action "$section")"
|
||||||
[ -n "$action" ] || return 0
|
[ -n "$action" ] || return 0
|
||||||
|
|
||||||
|
if [ "$action" = "zapret" ] && ! is_zapret_installed; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
log "Configuring route rule '$section' with action '$action'"
|
log "Configuring route rule '$section' with action '$action'"
|
||||||
|
|
||||||
if ! rule_has_primary_matchers "$section"; then
|
if ! rule_has_primary_matchers "$section"; then
|
||||||
@@ -3535,7 +3554,7 @@ get_podkop_latest_version() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get_system_info() {
|
get_system_info() {
|
||||||
local podkop_version podkop_latest_version luci_app_version sing_box_version zapret_version openwrt_version device_model
|
local podkop_version podkop_latest_version luci_app_version sing_box_version zapret_version zapret_installed openwrt_version device_model
|
||||||
|
|
||||||
podkop_version="$PODKOP_VERSION"
|
podkop_version="$PODKOP_VERSION"
|
||||||
|
|
||||||
@@ -3555,7 +3574,9 @@ get_system_info() {
|
|||||||
sing_box_version="not installed"
|
sing_box_version="not installed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -x "$ZAPRET_SOURCE_NFQWS_BIN" ]; then
|
zapret_installed=0
|
||||||
|
if is_zapret_installed; then
|
||||||
|
zapret_installed=1
|
||||||
zapret_version="$(get_zapret_package_version)"
|
zapret_version="$(get_zapret_package_version)"
|
||||||
[ -z "$zapret_version" ] && zapret_version="unknown"
|
[ -z "$zapret_version" ] && zapret_version="unknown"
|
||||||
else
|
else
|
||||||
@@ -3582,6 +3603,7 @@ get_system_info() {
|
|||||||
--arg luci_app_version "$luci_app_version" \
|
--arg luci_app_version "$luci_app_version" \
|
||||||
--arg sing_box_version "$sing_box_version" \
|
--arg sing_box_version "$sing_box_version" \
|
||||||
--arg zapret_version "$zapret_version" \
|
--arg zapret_version "$zapret_version" \
|
||||||
|
--argjson zapret_installed "$zapret_installed" \
|
||||||
--arg openwrt_version "$openwrt_version" \
|
--arg openwrt_version "$openwrt_version" \
|
||||||
--arg device_model "$device_model" \
|
--arg device_model "$device_model" \
|
||||||
'{
|
'{
|
||||||
@@ -3590,6 +3612,7 @@ get_system_info() {
|
|||||||
luci_app_version: $luci_app_version,
|
luci_app_version: $luci_app_version,
|
||||||
sing_box_version: $sing_box_version,
|
sing_box_version: $sing_box_version,
|
||||||
zapret_version: $zapret_version,
|
zapret_version: $zapret_version,
|
||||||
|
zapret_installed: $zapret_installed,
|
||||||
openwrt_version: $openwrt_version,
|
openwrt_version: $openwrt_version,
|
||||||
device_model: $device_model
|
device_model: $device_model
|
||||||
}'
|
}'
|
||||||
@@ -4553,5 +4576,3 @@ validate_nfqws_strategy_json)
|
|||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -436,6 +436,10 @@ run_nfqws_dry_run_validation() {
|
|||||||
local raw_opt="$1"
|
local raw_opt="$1"
|
||||||
local old_ifs output_file output summary needles rc
|
local old_ifs output_file output summary needles rc
|
||||||
|
|
||||||
|
if ! is_zapret_installed; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
if ! prepare_zapret_runtime; then
|
if ! prepare_zapret_runtime; then
|
||||||
set_nfqws_validation_failure \
|
set_nfqws_validation_failure \
|
||||||
"The Podkop Plus zapret runtime is unavailable. Install the upstream zapret package so $ZAPRET_SOURCE_NFQWS_BIN exists."
|
"The Podkop Plus zapret runtime is unavailable. Install the upstream zapret package so $ZAPRET_SOURCE_NFQWS_BIN exists."
|
||||||
@@ -650,6 +654,10 @@ prepare_zapret_runtime() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_zapret_installed() {
|
||||||
|
[ -x "$ZAPRET_SOURCE_NFQWS_BIN" ]
|
||||||
|
}
|
||||||
|
|
||||||
rewrite_zapret_runtime_paths() {
|
rewrite_zapret_runtime_paths() {
|
||||||
local source_path runtime_path
|
local source_path runtime_path
|
||||||
|
|
||||||
@@ -869,9 +877,9 @@ build_generated_zapret_hostlist() {
|
|||||||
check_zapret_requirements() {
|
check_zapret_requirements() {
|
||||||
has_enabled_zapret_rules || return 0
|
has_enabled_zapret_rules || return 0
|
||||||
|
|
||||||
if [ ! -x "$ZAPRET_SOURCE_NFQWS_BIN" ]; then
|
if ! is_zapret_installed; then
|
||||||
log "Action 'zapret' requires the upstream zapret runtime package. Missing binary: $ZAPRET_SOURCE_NFQWS_BIN. Aborted." "fatal"
|
log "Zapret package is not installed. Rules with action 'zapret' will be skipped until zapret is installed." "error"
|
||||||
exit 1
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! prepare_zapret_runtime; then
|
if ! prepare_zapret_runtime; then
|
||||||
@@ -1100,6 +1108,7 @@ _create_zapret_nft_rule_handler() {
|
|||||||
|
|
||||||
create_zapret_nft_rules() {
|
create_zapret_nft_rules() {
|
||||||
has_enabled_zapret_rules || return 0
|
has_enabled_zapret_rules || return 0
|
||||||
|
is_zapret_installed || return 0
|
||||||
|
|
||||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output meta mark \& "$ZAPRET_DESYNC_MARK" == "$ZAPRET_DESYNC_MARK" return
|
nft add rule inet "$NFT_TABLE_NAME" mangle_output meta mark \& "$ZAPRET_DESYNC_MARK" == "$ZAPRET_DESYNC_MARK" return
|
||||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output meta mark \& "$ZAPRET_DESYNC_MARK_POSTNAT" == "$ZAPRET_DESYNC_MARK_POSTNAT" return
|
nft add rule inet "$NFT_TABLE_NAME" mangle_output meta mark \& "$ZAPRET_DESYNC_MARK_POSTNAT" == "$ZAPRET_DESYNC_MARK_POSTNAT" return
|
||||||
@@ -1158,6 +1167,7 @@ _start_zapret_runtime_handler() {
|
|||||||
|
|
||||||
start_zapret_runtime() {
|
start_zapret_runtime() {
|
||||||
has_enabled_zapret_rules || return 0
|
has_enabled_zapret_rules || return 0
|
||||||
|
is_zapret_installed || return 0
|
||||||
|
|
||||||
stop_zapret_runtime
|
stop_zapret_runtime
|
||||||
check_zapret_requirements
|
check_zapret_requirements
|
||||||
|
|||||||
Reference in New Issue
Block a user