0 or 1 only."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1087
-#: htdocs/luci-static/resources/fchomo/listeners.js:1102
-#: htdocs/luci-static/resources/fchomo/listeners.js:1127
-#: htdocs/luci-static/resources/view/fchomo/node.js:1254
-#: htdocs/luci-static/resources/view/fchomo/node.js:1268
+#: htdocs/luci-static/resources/fchomo/listeners.js:1108
+#: htdocs/luci-static/resources/fchomo/listeners.js:1123
+#: htdocs/luci-static/resources/fchomo/listeners.js:1148
+#: htdocs/luci-static/resources/view/fchomo/node.js:1262
+#: htdocs/luci-static/resources/view/fchomo/node.js:1276
msgid "Save your configuration before uploading files!"
msgstr ""
@@ -205,11 +205,11 @@ msgstr ""
msgid "Add a inbound"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1647
+#: htdocs/luci-static/resources/view/fchomo/node.js:1671
msgid "Add a provider"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2135
+#: htdocs/luci-static/resources/view/fchomo/node.js:2159
msgid "Add a proxy chain"
msgstr ""
@@ -233,11 +233,11 @@ msgstr ""
msgid "Add a sub rule"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1944
+#: htdocs/luci-static/resources/view/fchomo/node.js:1968
msgid "Add prefix"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1948
+#: htdocs/luci-static/resources/view/fchomo/node.js:1972
msgid "Add suffix"
msgstr ""
@@ -276,7 +276,7 @@ msgid ""
"network from a public website, it must be enabled."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1023
+#: htdocs/luci-static/resources/fchomo/listeners.js:1027
msgid "Allow insecure connections"
msgstr ""
@@ -324,11 +324,11 @@ msgid "Authenticated length"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:361
-#: htdocs/luci-static/resources/fchomo/listeners.js:1285
+#: htdocs/luci-static/resources/fchomo/listeners.js:1315
#: htdocs/luci-static/resources/view/fchomo/global.js:423
#: htdocs/luci-static/resources/view/fchomo/node.js:450
#: htdocs/luci-static/resources/view/fchomo/node.js:474
-#: htdocs/luci-static/resources/view/fchomo/node.js:1453
+#: htdocs/luci-static/resources/view/fchomo/node.js:1477
msgid "Auto"
msgstr ""
@@ -379,13 +379,13 @@ msgid "Binary mrs"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:758
-#: htdocs/luci-static/resources/view/fchomo/node.js:1614
-#: htdocs/luci-static/resources/view/fchomo/node.js:2033
+#: htdocs/luci-static/resources/view/fchomo/node.js:1638
+#: htdocs/luci-static/resources/view/fchomo/node.js:2057
msgid "Bind interface"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1615
-#: htdocs/luci-static/resources/view/fchomo/node.js:2034
+#: htdocs/luci-static/resources/view/fchomo/node.js:1639
+#: htdocs/luci-static/resources/view/fchomo/node.js:2058
msgid "Bind outbound interface."
msgstr ""
@@ -454,17 +454,17 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1220
+#: htdocs/luci-static/resources/view/fchomo/node.js:1228
msgid "Cert fingerprint"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1221
+#: htdocs/luci-static/resources/view/fchomo/node.js:1229
msgid ""
"Certificate fingerprint. Used to implement SSL Pinning and prevent MitM."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1079
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+#: htdocs/luci-static/resources/fchomo/listeners.js:1087
+#: htdocs/luci-static/resources/view/fchomo/node.js:1255
msgid "Certificate path"
msgstr ""
@@ -522,25 +522,25 @@ msgid ""
"to download the latest initial package."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:819
-#: htdocs/luci-static/resources/fchomo/listeners.js:1118
+#: htdocs/luci-static/resources/fchomo/listeners.js:823
+#: htdocs/luci-static/resources/fchomo/listeners.js:1139
#: htdocs/luci-static/resources/view/fchomo/global.js:571
#: htdocs/luci-static/resources/view/fchomo/node.js:1076
-#: htdocs/luci-static/resources/view/fchomo/node.js:1248
-#: htdocs/luci-static/resources/view/fchomo/node.js:1262
+#: htdocs/luci-static/resources/view/fchomo/node.js:1256
+#: htdocs/luci-static/resources/view/fchomo/node.js:1270
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:22
msgid "Client"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1117
+#: htdocs/luci-static/resources/fchomo/listeners.js:1138
msgid "Client Auth Certificate path"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1109
+#: htdocs/luci-static/resources/fchomo/listeners.js:1130
msgid "Client Auth type"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1293
+#: htdocs/luci-static/resources/view/fchomo/node.js:1301
msgid "Client fingerprint"
msgstr ""
@@ -587,14 +587,14 @@ msgid "Content copied to clipboard!"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:687
-#: htdocs/luci-static/resources/view/fchomo/node.js:1804
-#: htdocs/luci-static/resources/view/fchomo/node.js:1830
+#: htdocs/luci-static/resources/view/fchomo/node.js:1828
+#: htdocs/luci-static/resources/view/fchomo/node.js:1854
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:348
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:374
msgid "Content will not be verified, Please make sure you enter it correctly."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1803
+#: htdocs/luci-static/resources/view/fchomo/node.js:1827
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:347
msgid "Contents"
msgstr ""
@@ -619,7 +619,7 @@ msgstr ""
msgid "Custom Direct List"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1935
+#: htdocs/luci-static/resources/view/fchomo/node.js:1959
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:420
msgid "Custom HTTP header."
msgstr ""
@@ -702,11 +702,11 @@ msgstr ""
msgid "Destination addresses allowed to be forwarded via Wireguard."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2158
+#: htdocs/luci-static/resources/view/fchomo/node.js:2182
msgid "Destination provider"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2169
+#: htdocs/luci-static/resources/view/fchomo/node.js:2193
msgid "Destination proxy node"
msgstr ""
@@ -714,8 +714,8 @@ msgstr ""
msgid "Dial fields"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2181
-#: htdocs/luci-static/resources/view/fchomo/node.js:2211
+#: htdocs/luci-static/resources/view/fchomo/node.js:2205
+#: htdocs/luci-static/resources/view/fchomo/node.js:2235
msgid "Different chain head/tail"
msgstr ""
@@ -784,18 +784,18 @@ msgid "Donot send server name in ClientHello."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1668
-#: htdocs/luci-static/resources/view/fchomo/node.js:1240
-#: htdocs/luci-static/resources/view/fchomo/node.js:2017
+#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+#: htdocs/luci-static/resources/view/fchomo/node.js:2041
msgid "Donot verifying server certificate."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1337
-#: htdocs/luci-static/resources/view/fchomo/node.js:1591
+#: htdocs/luci-static/resources/fchomo/listeners.js:1367
+#: htdocs/luci-static/resources/view/fchomo/node.js:1615
msgid "Download bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1338
-#: htdocs/luci-static/resources/view/fchomo/node.js:1592
+#: htdocs/luci-static/resources/fchomo/listeners.js:1368
+#: htdocs/luci-static/resources/view/fchomo/node.js:1616
msgid "Download bandwidth in Mbps."
msgstr ""
@@ -811,16 +811,16 @@ msgstr ""
msgid "Dual stack"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1287
+#: htdocs/luci-static/resources/view/fchomo/node.js:1295
msgid "ECH HTTPS record query servername"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1175
-#: htdocs/luci-static/resources/view/fchomo/node.js:1281
+#: htdocs/luci-static/resources/fchomo/listeners.js:1196
+#: htdocs/luci-static/resources/view/fchomo/node.js:1289
msgid "ECH config"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1134
+#: htdocs/luci-static/resources/fchomo/listeners.js:1155
msgid "ECH key"
msgstr ""
@@ -836,11 +836,11 @@ msgstr ""
msgid "ETag support"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1431
+#: htdocs/luci-static/resources/view/fchomo/node.js:1455
msgid "Early Data first packet length limit."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1437
+#: htdocs/luci-static/resources/view/fchomo/node.js:1461
msgid "Early Data header name"
msgstr ""
@@ -856,7 +856,7 @@ msgstr ""
msgid "Edit ruleset"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1801
+#: htdocs/luci-static/resources/view/fchomo/node.js:1825
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:345
msgid "Editer"
msgstr ""
@@ -880,9 +880,9 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:422
#: htdocs/luci-static/resources/view/fchomo/global.js:704
#: htdocs/luci-static/resources/view/fchomo/node.js:250
-#: htdocs/luci-static/resources/view/fchomo/node.js:1774
-#: htdocs/luci-static/resources/view/fchomo/node.js:2056
-#: htdocs/luci-static/resources/view/fchomo/node.js:2145
+#: htdocs/luci-static/resources/view/fchomo/node.js:1798
+#: htdocs/luci-static/resources/view/fchomo/node.js:2080
+#: htdocs/luci-static/resources/view/fchomo/node.js:2169
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:272
#: htdocs/luci-static/resources/view/fchomo/server.js:49
msgid "Enable"
@@ -905,17 +905,17 @@ msgid ""
"conversion for outbound connections"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1275
+#: htdocs/luci-static/resources/view/fchomo/node.js:1283
msgid "Enable ECH"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1325
-#: htdocs/luci-static/resources/view/fchomo/node.js:1579
+#: htdocs/luci-static/resources/fchomo/listeners.js:1355
+#: htdocs/luci-static/resources/view/fchomo/node.js:1603
msgid "Enable TCP Brutal"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1326
-#: htdocs/luci-static/resources/view/fchomo/node.js:1580
+#: htdocs/luci-static/resources/fchomo/listeners.js:1356
+#: htdocs/luci-static/resources/view/fchomo/node.js:1604
msgid "Enable TCP Brutal congestion control algorithm"
msgstr ""
@@ -923,7 +923,7 @@ msgstr ""
msgid "Enable fast open"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1568
+#: htdocs/luci-static/resources/view/fchomo/node.js:1592
msgid "Enable multiplexing only for TCP."
msgstr ""
@@ -932,17 +932,17 @@ msgstr ""
msgid "Enable obfuscate for downlink"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1320
-#: htdocs/luci-static/resources/view/fchomo/node.js:1562
+#: htdocs/luci-static/resources/fchomo/listeners.js:1350
+#: htdocs/luci-static/resources/view/fchomo/node.js:1586
msgid "Enable padding"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1573
+#: htdocs/luci-static/resources/view/fchomo/node.js:1597
msgid "Enable statistic"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:954
-#: htdocs/luci-static/resources/view/fchomo/node.js:1993
+#: htdocs/luci-static/resources/view/fchomo/node.js:2017
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with Multiplex."
msgstr ""
@@ -954,7 +954,7 @@ msgid ""
"connections, losing the ability to masquerade with HTTP/3."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:782
+#: htdocs/luci-static/resources/fchomo/listeners.js:786
msgid "Encryption method"
msgstr ""
@@ -981,7 +981,7 @@ msgid ""
"if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2114
+#: htdocs/luci-static/resources/view/fchomo/node.js:2138
msgid "Exclude matched node types."
msgstr ""
@@ -992,7 +992,7 @@ msgid ""
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1243
-#: htdocs/luci-static/resources/view/fchomo/node.js:2107
+#: htdocs/luci-static/resources/view/fchomo/node.js:2131
msgid "Exclude nodes that meet keywords or regexps."
msgstr ""
@@ -1001,12 +1001,12 @@ msgid "Expand/Collapse result"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1186
-#: htdocs/luci-static/resources/view/fchomo/node.js:2092
+#: htdocs/luci-static/resources/view/fchomo/node.js:2116
msgid "Expected HTTP code. 204 will be used if empty."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1188
-#: htdocs/luci-static/resources/view/fchomo/node.js:2094
+#: htdocs/luci-static/resources/view/fchomo/node.js:2118
msgid "Expected status"
msgstr ""
@@ -1036,9 +1036,9 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo.js:1968
#: htdocs/luci-static/resources/fchomo/listeners.js:284
#: htdocs/luci-static/resources/fchomo/listeners.js:331
-#: htdocs/luci-static/resources/fchomo/listeners.js:811
-#: htdocs/luci-static/resources/fchomo/listeners.js:842
-#: htdocs/luci-static/resources/fchomo/listeners.js:943
+#: htdocs/luci-static/resources/fchomo/listeners.js:815
+#: htdocs/luci-static/resources/fchomo/listeners.js:846
+#: htdocs/luci-static/resources/fchomo/listeners.js:947
#: htdocs/luci-static/resources/view/fchomo/client.js:71
#: htdocs/luci-static/resources/view/fchomo/client.js:1051
#: htdocs/luci-static/resources/view/fchomo/client.js:1596
@@ -1048,27 +1048,44 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:480
#: htdocs/luci-static/resources/view/fchomo/node.js:482
#: htdocs/luci-static/resources/view/fchomo/node.js:1099
-#: htdocs/luci-static/resources/view/fchomo/node.js:1226
-#: htdocs/luci-static/resources/view/fchomo/node.js:2181
-#: htdocs/luci-static/resources/view/fchomo/node.js:2211
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
+#: htdocs/luci-static/resources/view/fchomo/node.js:2205
+#: htdocs/luci-static/resources/view/fchomo/node.js:2235
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:300
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:314
msgid "Expecting: %s"
msgstr ""
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+msgid "Expecting: %s cannot be empty when %s is enabled."
+msgstr ""
+
#: htdocs/luci-static/resources/view/fchomo/node.js:278
#: htdocs/luci-static/resources/view/fchomo/node.js:296
msgid "Expecting: Least one of %s or %s."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:654
-#: htdocs/luci-static/resources/fchomo/listeners.js:1246
-#: htdocs/luci-static/resources/fchomo/listeners.js:1253
+#: htdocs/luci-static/resources/fchomo/listeners.js:1099
+msgid "Expecting: Cannot be empty."
+msgstr ""
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:1210
+msgid "Expecting: Cannot be enabled when %s is enabled."
+msgstr ""
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:1096
+msgid "Expecting: Keep empty when %s is enabled."
+msgstr ""
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:655
+#: htdocs/luci-static/resources/fchomo/listeners.js:659
+#: htdocs/luci-static/resources/fchomo/listeners.js:1276
+#: htdocs/luci-static/resources/fchomo/listeners.js:1283
#: htdocs/luci-static/resources/view/fchomo/node.js:985
-#: htdocs/luci-static/resources/view/fchomo/node.js:1346
-#: htdocs/luci-static/resources/view/fchomo/node.js:1353
-#: htdocs/luci-static/resources/view/fchomo/node.js:1361
-msgid "Expecting: only support %s."
+#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1377
+#: htdocs/luci-static/resources/view/fchomo/node.js:1385
+msgid "Expecting: Only support %s."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:723
@@ -1120,7 +1137,7 @@ msgid "Fallback filter"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1238
-#: htdocs/luci-static/resources/view/fchomo/node.js:2101
+#: htdocs/luci-static/resources/view/fchomo/node.js:2125
msgid "Filter nodes that meet keywords or regexps."
msgstr ""
@@ -1161,9 +1178,9 @@ msgid ""
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1187
-#: htdocs/luci-static/resources/view/fchomo/node.js:1954
-#: htdocs/luci-static/resources/view/fchomo/node.js:1962
-#: htdocs/luci-static/resources/view/fchomo/node.js:2093
+#: htdocs/luci-static/resources/view/fchomo/node.js:1978
+#: htdocs/luci-static/resources/view/fchomo/node.js:1986
+#: htdocs/luci-static/resources/view/fchomo/node.js:2117
msgid ""
"For format see %s."
@@ -1182,7 +1199,7 @@ msgstr ""
msgid "Format"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:729
+#: htdocs/luci-static/resources/fchomo/listeners.js:733
msgid "Forwarding rate limit"
msgstr ""
@@ -1193,7 +1210,7 @@ msgstr ""
msgid "FullCombo Shark!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1386
+#: htdocs/luci-static/resources/view/fchomo/node.js:1410
msgid "GET"
msgstr ""
@@ -1213,7 +1230,7 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:119
#: htdocs/luci-static/resources/view/fchomo/client.js:1042
#: htdocs/luci-static/resources/view/fchomo/node.js:236
-#: htdocs/luci-static/resources/view/fchomo/node.js:1764
+#: htdocs/luci-static/resources/view/fchomo/node.js:1788
msgid "General fields"
msgstr ""
@@ -1228,10 +1245,10 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:262
#: htdocs/luci-static/resources/fchomo/listeners.js:306
#: htdocs/luci-static/resources/fchomo/listeners.js:308
-#: htdocs/luci-static/resources/fchomo/listeners.js:915
-#: htdocs/luci-static/resources/fchomo/listeners.js:1167
+#: htdocs/luci-static/resources/fchomo/listeners.js:919
+#: htdocs/luci-static/resources/fchomo/listeners.js:1188
#: htdocs/luci-static/resources/view/fchomo/global.js:608
-#: htdocs/luci-static/resources/view/fchomo/node.js:1922
+#: htdocs/luci-static/resources/view/fchomo/node.js:1946
msgid "Generate"
msgstr ""
@@ -1300,17 +1317,17 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo.js:154
#: htdocs/luci-static/resources/fchomo.js:191
-#: htdocs/luci-static/resources/fchomo/listeners.js:665
+#: htdocs/luci-static/resources/fchomo/listeners.js:669
#: htdocs/luci-static/resources/view/fchomo/node.js:996
-#: htdocs/luci-static/resources/view/fchomo/node.js:1333
-#: htdocs/luci-static/resources/view/fchomo/node.js:1346
-#: htdocs/luci-static/resources/view/fchomo/node.js:1353
+#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1377
msgid "HTTP"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:316
-#: htdocs/luci-static/resources/view/fchomo/node.js:1408
-#: htdocs/luci-static/resources/view/fchomo/node.js:1934
+#: htdocs/luci-static/resources/view/fchomo/node.js:1432
+#: htdocs/luci-static/resources/view/fchomo/node.js:1958
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:419
msgid "HTTP header"
msgstr ""
@@ -1336,7 +1353,7 @@ msgstr ""
msgid "HTTP mask: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1385
+#: htdocs/luci-static/resources/view/fchomo/node.js:1409
msgid "HTTP request method"
msgstr ""
@@ -1355,9 +1372,9 @@ msgid ""
"returned if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1334
-#: htdocs/luci-static/resources/view/fchomo/node.js:1347
-#: htdocs/luci-static/resources/view/fchomo/node.js:1354
+#: htdocs/luci-static/resources/view/fchomo/node.js:1358
+#: htdocs/luci-static/resources/view/fchomo/node.js:1371
+#: htdocs/luci-static/resources/view/fchomo/node.js:1378
msgid "HTTPUpgrade"
msgstr ""
@@ -1369,11 +1386,11 @@ msgstr ""
msgid "Handshake mode"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:712
+#: htdocs/luci-static/resources/fchomo/listeners.js:716
msgid "Handshake target proxy"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:677
+#: htdocs/luci-static/resources/fchomo/listeners.js:681
msgid "Handshake target that supports TLS 1.3"
msgstr ""
@@ -1391,27 +1408,27 @@ msgid "Health check"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1156
-#: htdocs/luci-static/resources/view/fchomo/node.js:2061
+#: htdocs/luci-static/resources/view/fchomo/node.js:2085
msgid "Health check URL"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1185
-#: htdocs/luci-static/resources/view/fchomo/node.js:2091
+#: htdocs/luci-static/resources/view/fchomo/node.js:2115
msgid "Health check expected status"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:2071
+#: htdocs/luci-static/resources/view/fchomo/node.js:2095
msgid "Health check interval"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1172
-#: htdocs/luci-static/resources/view/fchomo/node.js:2078
+#: htdocs/luci-static/resources/view/fchomo/node.js:2102
msgid "Health check timeout"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1044
-#: htdocs/luci-static/resources/view/fchomo/node.js:1766
+#: htdocs/luci-static/resources/view/fchomo/node.js:1790
msgid "Health fields"
msgstr ""
@@ -1424,7 +1441,7 @@ msgstr ""
msgid "Hidden"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:670
+#: htdocs/luci-static/resources/fchomo/listeners.js:674
#: htdocs/luci-static/resources/view/fchomo/node.js:1001
msgid "Host that supports TLS 1.3"
msgstr ""
@@ -1441,7 +1458,7 @@ msgstr ""
msgid "Host/SNI override"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1030
+#: htdocs/luci-static/resources/fchomo/listeners.js:1034
#: htdocs/luci-static/resources/view/fchomo/node.js:1168
msgid ""
"Hostname that the client attempts to connect to at the start of the TLS "
@@ -1480,8 +1497,8 @@ msgstr ""
msgid "IP override"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1628
-#: htdocs/luci-static/resources/view/fchomo/node.js:2047
+#: htdocs/luci-static/resources/view/fchomo/node.js:1652
+#: htdocs/luci-static/resources/view/fchomo/node.js:2071
msgid "IP version"
msgstr ""
@@ -1542,8 +1559,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1804
#: htdocs/luci-static/resources/view/fchomo/client.js:1839
#: htdocs/luci-static/resources/view/fchomo/client.js:1860
-#: htdocs/luci-static/resources/view/fchomo/node.js:1654
-#: htdocs/luci-static/resources/view/fchomo/node.js:1752
+#: htdocs/luci-static/resources/view/fchomo/node.js:1678
+#: htdocs/luci-static/resources/view/fchomo/node.js:1776
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:154
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:249
msgid "Import mihomo config"
@@ -1559,16 +1576,16 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:472
#: htdocs/luci-static/resources/view/fchomo/node.js:683
#: htdocs/luci-static/resources/view/fchomo/node.js:689
-#: htdocs/luci-static/resources/view/fchomo/node.js:1999
-#: htdocs/luci-static/resources/view/fchomo/node.js:2005
+#: htdocs/luci-static/resources/view/fchomo/node.js:2023
+#: htdocs/luci-static/resources/view/fchomo/node.js:2029
msgid "In Mbps."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:730
+#: htdocs/luci-static/resources/fchomo/listeners.js:734
msgid "In bps. 0 means no speed limit."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1842
+#: htdocs/luci-static/resources/view/fchomo/node.js:1866
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:392
msgid "In bytes. %s will be used if empty."
msgstr ""
@@ -1581,11 +1598,11 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1173
#: htdocs/luci-static/resources/view/fchomo/client.js:1219
-#: htdocs/luci-static/resources/view/fchomo/node.js:2079
+#: htdocs/luci-static/resources/view/fchomo/node.js:2103
msgid "In millisecond. %s will be used if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1477
+#: htdocs/luci-static/resources/view/fchomo/node.js:1501
msgid "In milliseconds."
msgstr ""
@@ -1594,7 +1611,7 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:619
#: htdocs/luci-static/resources/view/fchomo/node.js:587
#: htdocs/luci-static/resources/view/fchomo/node.js:594
-#: htdocs/luci-static/resources/view/fchomo/node.js:1424
+#: htdocs/luci-static/resources/view/fchomo/node.js:1448
msgid "In seconds."
msgstr ""
@@ -1603,8 +1620,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:451
#: htdocs/luci-static/resources/view/fchomo/global.js:536
#: htdocs/luci-static/resources/view/fchomo/node.js:677
-#: htdocs/luci-static/resources/view/fchomo/node.js:1848
-#: htdocs/luci-static/resources/view/fchomo/node.js:2072
+#: htdocs/luci-static/resources/view/fchomo/node.js:1872
+#: htdocs/luci-static/resources/view/fchomo/node.js:2096
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:398
msgid "In seconds. %s will be used if empty."
msgstr ""
@@ -1615,7 +1632,7 @@ msgid ""
"connection timeout."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:831
+#: htdocs/luci-static/resources/fchomo/listeners.js:835
#: htdocs/luci-static/resources/view/fchomo/node.js:1088
msgid ""
"In the order of one Padding-Length and one Padding-"
@@ -1656,7 +1673,7 @@ msgstr ""
msgid "Info"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1781
+#: htdocs/luci-static/resources/view/fchomo/node.js:1805
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:288
msgid "Inline"
msgstr ""
@@ -1665,15 +1682,33 @@ msgstr ""
msgid "Interface Control"
msgstr ""
+#: htdocs/luci-static/resources/fchomo/listeners.js:648
+#: htdocs/luci-static/resources/fchomo/listeners.js:659
+#: htdocs/luci-static/resources/fchomo/listeners.js:1096
+#: htdocs/luci-static/resources/fchomo/listeners.js:1210
+#: htdocs/luci-static/resources/view/fchomo/node.js:978
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+#: htdocs/luci-static/resources/view/fchomo/node.js:1311
+msgid "JLS"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1321
+msgid "JLS password"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1316
+msgid "JLS username"
+msgstr ""
+
#: htdocs/luci-static/resources/fchomo.js:53
#: htdocs/luci-static/resources/fchomo.js:60
#: htdocs/luci-static/resources/fchomo.js:174
#: htdocs/luci-static/resources/fchomo.js:379
-#: htdocs/luci-static/resources/view/fchomo/node.js:2021
+#: htdocs/luci-static/resources/view/fchomo/node.js:2045
msgid "Keep default"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1513
+#: htdocs/luci-static/resources/view/fchomo/node.js:1537
msgid "Keep-alive period"
msgstr ""
@@ -1682,12 +1717,12 @@ msgstr ""
msgid "Key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1094
-#: htdocs/luci-static/resources/view/fchomo/node.js:1261
+#: htdocs/luci-static/resources/fchomo/listeners.js:1115
+#: htdocs/luci-static/resources/view/fchomo/node.js:1269
msgid "Key path"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:850
+#: htdocs/luci-static/resources/fchomo/listeners.js:854
msgid "Keypairs"
msgstr ""
@@ -1699,14 +1734,14 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1810
#: htdocs/luci-static/resources/view/fchomo/client.js:1866
#: htdocs/luci-static/resources/view/fchomo/node.js:245
-#: htdocs/luci-static/resources/view/fchomo/node.js:1769
-#: htdocs/luci-static/resources/view/fchomo/node.js:2140
+#: htdocs/luci-static/resources/view/fchomo/node.js:1793
+#: htdocs/luci-static/resources/view/fchomo/node.js:2164
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:267
msgid "Label"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1179
-#: htdocs/luci-static/resources/view/fchomo/node.js:2085
+#: htdocs/luci-static/resources/view/fchomo/node.js:2109
msgid "Lazy"
msgstr ""
@@ -1733,8 +1768,8 @@ msgstr ""
msgid "Less compatibility and sometimes better performance."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1036
-#: htdocs/luci-static/resources/view/fchomo/node.js:1174
+#: htdocs/luci-static/resources/fchomo/listeners.js:1040
+#: htdocs/luci-static/resources/view/fchomo/node.js:1182
msgid "List of supported application level protocols, in order of preference."
msgstr ""
@@ -1767,7 +1802,7 @@ msgstr ""
msgid "Load balance"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1779
+#: htdocs/luci-static/resources/view/fchomo/node.js:1803
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:286
msgid "Local"
msgstr ""
@@ -1855,7 +1890,7 @@ msgstr ""
msgid "Match rule set."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1430
+#: htdocs/luci-static/resources/view/fchomo/node.js:1454
msgid "Max Early Data"
msgstr ""
@@ -1864,15 +1899,15 @@ msgstr ""
msgid "Max UDP relay packet size"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1297
+#: htdocs/luci-static/resources/fchomo/listeners.js:1327
msgid "Max buffered posts"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1488
+#: htdocs/luci-static/resources/view/fchomo/node.js:1512
msgid "Max concurrency"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1493
+#: htdocs/luci-static/resources/view/fchomo/node.js:1517
msgid "Max connections"
msgstr ""
@@ -1885,8 +1920,8 @@ msgstr ""
msgid "Max download speed"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1308
-#: htdocs/luci-static/resources/view/fchomo/node.js:1470
+#: htdocs/luci-static/resources/fchomo/listeners.js:1338
+#: htdocs/luci-static/resources/view/fchomo/node.js:1494
msgid "Max each POST bytes"
msgstr ""
@@ -1902,15 +1937,15 @@ msgstr ""
msgid "Max realms per client IP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1503
+#: htdocs/luci-static/resources/view/fchomo/node.js:1527
msgid "Max request times"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1508
+#: htdocs/luci-static/resources/view/fchomo/node.js:1532
msgid "Max reusable seconds"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1498
+#: htdocs/luci-static/resources/view/fchomo/node.js:1522
msgid "Max reuse times"
msgstr ""
@@ -1919,12 +1954,12 @@ msgstr ""
msgid "Max upload speed"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1534
-#: htdocs/luci-static/resources/view/fchomo/node.js:1554
+#: htdocs/luci-static/resources/view/fchomo/node.js:1558
+#: htdocs/luci-static/resources/view/fchomo/node.js:1578
msgid "Maximum connections"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1552
+#: htdocs/luci-static/resources/view/fchomo/node.js:1576
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1942,7 +1977,7 @@ msgid ""
"rate."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1551
+#: htdocs/luci-static/resources/view/fchomo/node.js:1575
msgid "Maximum streams"
msgstr ""
@@ -1967,11 +2002,11 @@ msgstr ""
msgid "Min of idle sessions to keep"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1476
+#: htdocs/luci-static/resources/view/fchomo/node.js:1500
msgid "Min posts interval"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1543
+#: htdocs/luci-static/resources/view/fchomo/node.js:1567
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr ""
@@ -1981,8 +2016,8 @@ msgstr ""
msgid "Minimum padding rate"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1542
-#: htdocs/luci-static/resources/view/fchomo/node.js:1554
+#: htdocs/luci-static/resources/view/fchomo/node.js:1566
+#: htdocs/luci-static/resources/view/fchomo/node.js:1578
msgid "Minimum streams"
msgstr ""
@@ -1999,8 +2034,8 @@ msgstr ""
msgid "Mixed port"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1315
-#: htdocs/luci-static/resources/view/fchomo/node.js:1520
+#: htdocs/luci-static/resources/fchomo/listeners.js:1345
+#: htdocs/luci-static/resources/view/fchomo/node.js:1544
msgid "Multiplex"
msgstr ""
@@ -2022,7 +2057,7 @@ msgstr ""
msgid "Name of the Proxy group as outbound."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1854
+#: htdocs/luci-static/resources/view/fchomo/node.js:1878
msgid "Name of the Proxy group to download provider."
msgstr ""
@@ -2050,7 +2085,7 @@ msgstr ""
msgid "Network type"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2023
+#: htdocs/luci-static/resources/view/fchomo/node.js:2047
msgid "No"
msgstr ""
@@ -2058,7 +2093,7 @@ msgstr ""
msgid "No Authentication IP ranges"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1292
+#: htdocs/luci-static/resources/fchomo/listeners.js:1322
msgid "No SSE header"
msgstr ""
@@ -2066,12 +2101,12 @@ msgstr ""
msgid "No add'l params"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1460
+#: htdocs/luci-static/resources/view/fchomo/node.js:1484
msgid "No gRPC header"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1180
-#: htdocs/luci-static/resources/view/fchomo/node.js:2086
+#: htdocs/luci-static/resources/view/fchomo/node.js:2110
msgid "No testing is performed when this provider node is not in use."
msgstr ""
@@ -2089,17 +2124,17 @@ msgid "Node"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1242
-#: htdocs/luci-static/resources/view/fchomo/node.js:2106
+#: htdocs/luci-static/resources/view/fchomo/node.js:2130
msgid "Node exclude filter"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1247
-#: htdocs/luci-static/resources/view/fchomo/node.js:2113
+#: htdocs/luci-static/resources/view/fchomo/node.js:2137
msgid "Node exclude type"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1237
-#: htdocs/luci-static/resources/view/fchomo/node.js:2100
+#: htdocs/luci-static/resources/view/fchomo/node.js:2124
msgid "Node filter"
msgstr ""
@@ -2127,7 +2162,7 @@ msgstr ""
msgid "ON"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:664
+#: htdocs/luci-static/resources/fchomo/listeners.js:668
#: htdocs/luci-static/resources/view/fchomo/node.js:995
msgid "Obfs Mode"
msgstr ""
@@ -2165,7 +2200,7 @@ msgstr ""
msgid "One or more numbers in the range 0-63 separated by commas"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1024
+#: htdocs/luci-static/resources/fchomo/listeners.js:1028
msgid "Only applicable when %s are used as a frontend."
msgstr ""
@@ -2190,7 +2225,7 @@ msgstr ""
msgid "Option is deprecated. Please use %s instead."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1971
+#: htdocs/luci-static/resources/view/fchomo/node.js:1995
msgid "Other configuration items"
msgstr ""
@@ -2198,8 +2233,8 @@ msgstr ""
msgid "Outbound"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1233
-#: htdocs/luci-static/resources/view/fchomo/node.js:2010
+#: htdocs/luci-static/resources/view/fchomo/node.js:1241
+#: htdocs/luci-static/resources/view/fchomo/node.js:2034
msgid "Override cert DNSName"
msgstr ""
@@ -2209,7 +2244,7 @@ msgid "Override destination"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1043
-#: htdocs/luci-static/resources/view/fchomo/node.js:1765
+#: htdocs/luci-static/resources/view/fchomo/node.js:1789
msgid "Override fields"
msgstr ""
@@ -2229,7 +2264,7 @@ msgstr ""
msgid "Override the existing ECS in original request."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1288
+#: htdocs/luci-static/resources/view/fchomo/node.js:1296
msgid "Overrides the domain name used for HTTPS record queries."
msgstr ""
@@ -2237,11 +2272,11 @@ msgstr ""
msgid "Overview"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1387
+#: htdocs/luci-static/resources/view/fchomo/node.js:1411
msgid "POST"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1388
+#: htdocs/luci-static/resources/view/fchomo/node.js:1412
msgid "PUT"
msgstr ""
@@ -2249,7 +2284,7 @@ msgstr ""
msgid "Packet encoding"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1465
+#: htdocs/luci-static/resources/view/fchomo/node.js:1489
msgid "Padding bytes"
msgstr ""
@@ -2257,14 +2292,14 @@ msgstr ""
msgid "Padding scheme"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:829
+#: htdocs/luci-static/resources/fchomo/listeners.js:833
#: htdocs/luci-static/resources/view/fchomo/node.js:1086
msgid "Paddings"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:167
#: htdocs/luci-static/resources/fchomo/listeners.js:184
-#: htdocs/luci-static/resources/fchomo/listeners.js:691
+#: htdocs/luci-static/resources/fchomo/listeners.js:695
#: htdocs/luci-static/resources/view/fchomo/node.js:310
#: htdocs/luci-static/resources/view/fchomo/node.js:331
#: htdocs/luci-static/resources/view/fchomo/node.js:1014
@@ -2279,8 +2314,8 @@ msgstr ""
msgid "Path in bundle: %s"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:769
-#: htdocs/luci-static/resources/view/fchomo/node.js:1829
+#: htdocs/luci-static/resources/fchomo/listeners.js:773
+#: htdocs/luci-static/resources/view/fchomo/node.js:1853
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:373
msgid "Payload"
msgstr ""
@@ -2320,8 +2355,8 @@ msgid ""
"standards."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1802
-#: htdocs/luci-static/resources/view/fchomo/node.js:1828
+#: htdocs/luci-static/resources/view/fchomo/node.js:1826
+#: htdocs/luci-static/resources/view/fchomo/node.js:1852
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:346
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:372
msgid ""
@@ -2335,7 +2370,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1533
#: htdocs/luci-static/resources/view/fchomo/client.js:1788
#: htdocs/luci-static/resources/view/fchomo/client.js:1840
-#: htdocs/luci-static/resources/view/fchomo/node.js:1655
+#: htdocs/luci-static/resources/view/fchomo/node.js:1679
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:155
msgid "Please type %s fields of mihomo config."
msgstr ""
@@ -2350,7 +2385,7 @@ msgstr ""
msgid "Plugin fields"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:643
+#: htdocs/luci-static/resources/fchomo/listeners.js:644
#: htdocs/luci-static/resources/view/fchomo/node.js:972
msgid "Plugin type"
msgstr ""
@@ -2387,7 +2422,7 @@ msgstr ""
msgid "Pre-shared key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:967
+#: htdocs/luci-static/resources/fchomo/listeners.js:971
#: htdocs/luci-static/resources/view/fchomo/node.js:1121
msgid "Pre-shared key of rendezvous server"
msgstr ""
@@ -2407,10 +2442,10 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:760
#: htdocs/luci-static/resources/view/fchomo/global.js:777
-#: htdocs/luci-static/resources/view/fchomo/node.js:1616
-#: htdocs/luci-static/resources/view/fchomo/node.js:1623
-#: htdocs/luci-static/resources/view/fchomo/node.js:2035
-#: htdocs/luci-static/resources/view/fchomo/node.js:2042
+#: htdocs/luci-static/resources/view/fchomo/node.js:1640
+#: htdocs/luci-static/resources/view/fchomo/node.js:1647
+#: htdocs/luci-static/resources/view/fchomo/node.js:2059
+#: htdocs/luci-static/resources/view/fchomo/node.js:2066
msgid "Priority: Proxy Node > Global."
msgstr ""
@@ -2427,7 +2462,7 @@ msgstr ""
msgid "Private key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:737
+#: htdocs/luci-static/resources/fchomo/listeners.js:741
msgid ""
"Probe the QUIC version of the handshake target during the first connection."
msgstr ""
@@ -2436,12 +2471,12 @@ msgstr ""
msgid "Process matching mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1961
+#: htdocs/luci-static/resources/view/fchomo/node.js:1985
msgid "Programmable replacement"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:708
-#: htdocs/luci-static/resources/view/fchomo/node.js:1526
+#: htdocs/luci-static/resources/view/fchomo/node.js:1550
msgid "Protocol"
msgstr ""
@@ -2456,13 +2491,13 @@ msgid ""
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1100
-#: htdocs/luci-static/resources/view/fchomo/node.js:1638
-#: htdocs/luci-static/resources/view/fchomo/node.js:1647
-#: htdocs/luci-static/resources/view/fchomo/node.js:2151
+#: htdocs/luci-static/resources/view/fchomo/node.js:1662
+#: htdocs/luci-static/resources/view/fchomo/node.js:1671
+#: htdocs/luci-static/resources/view/fchomo/node.js:2175
msgid "Provider"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1835
+#: htdocs/luci-static/resources/view/fchomo/node.js:1859
msgid "Provider URL"
msgstr ""
@@ -2485,19 +2520,19 @@ msgid "Proxy MAC-s"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:222
-#: htdocs/luci-static/resources/view/fchomo/node.js:2150
+#: htdocs/luci-static/resources/view/fchomo/node.js:2174
msgid "Proxy Node"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2126
-#: htdocs/luci-static/resources/view/fchomo/node.js:2135
+#: htdocs/luci-static/resources/view/fchomo/node.js:2150
+#: htdocs/luci-static/resources/view/fchomo/node.js:2159
msgid "Proxy chain"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:585
#: htdocs/luci-static/resources/view/fchomo/client.js:801
#: htdocs/luci-static/resources/view/fchomo/client.js:1631
-#: htdocs/luci-static/resources/view/fchomo/node.js:1853
+#: htdocs/luci-static/resources/view/fchomo/node.js:1877
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:403
msgid "Proxy group"
msgstr ""
@@ -2524,7 +2559,7 @@ msgstr ""
msgid "QUIC based 0-RTT"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:736
+#: htdocs/luci-static/resources/fchomo/listeners.js:740
msgid "QUIC version probe"
msgstr ""
@@ -2538,34 +2573,35 @@ msgstr ""
msgid "Quick Reload"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1182
-#: htdocs/luci-static/resources/view/fchomo/node.js:1302
+#: htdocs/luci-static/resources/fchomo/listeners.js:1097
+#: htdocs/luci-static/resources/fchomo/listeners.js:1203
+#: htdocs/luci-static/resources/view/fchomo/node.js:1326
msgid "REALITY"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1317
+#: htdocs/luci-static/resources/view/fchomo/node.js:1341
msgid "REALITY X25519MLKEM768 PQC support"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1219
+#: htdocs/luci-static/resources/fchomo/listeners.js:1249
msgid "REALITY certificate issued to"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1187
+#: htdocs/luci-static/resources/fchomo/listeners.js:1217
msgid "REALITY handshake server"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1194
+#: htdocs/luci-static/resources/fchomo/listeners.js:1224
msgid "REALITY private key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1209
-#: htdocs/luci-static/resources/view/fchomo/node.js:1307
+#: htdocs/luci-static/resources/fchomo/listeners.js:1239
+#: htdocs/luci-static/resources/view/fchomo/node.js:1331
msgid "REALITY public key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1213
-#: htdocs/luci-static/resources/view/fchomo/node.js:1312
+#: htdocs/luci-static/resources/fchomo/listeners.js:1243
+#: htdocs/luci-static/resources/view/fchomo/node.js:1336
msgid "REALITY short ID"
msgstr ""
@@ -2575,8 +2611,8 @@ msgstr ""
msgid "REMATCH-NAME marking"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:800
-#: htdocs/luci-static/resources/fchomo/listeners.js:819
+#: htdocs/luci-static/resources/fchomo/listeners.js:804
+#: htdocs/luci-static/resources/fchomo/listeners.js:823
#: htdocs/luci-static/resources/view/fchomo/node.js:1076
msgid "RTT"
msgstr ""
@@ -2593,12 +2629,12 @@ msgstr ""
msgid "Randomized traffic characteristics"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:956
+#: htdocs/luci-static/resources/fchomo/listeners.js:960
#: htdocs/luci-static/resources/view/fchomo/node.js:1110
msgid "Realm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:972
+#: htdocs/luci-static/resources/fchomo/listeners.js:976
#: htdocs/luci-static/resources/view/fchomo/node.js:1126
msgid "Realm ID"
msgstr ""
@@ -2646,7 +2682,7 @@ msgstr ""
msgid "Rematching routing rules"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1780
+#: htdocs/luci-static/resources/view/fchomo/node.js:1804
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:287
msgid "Remote"
msgstr ""
@@ -2661,23 +2697,23 @@ msgid "Remove"
msgstr ""
#: htdocs/luci-static/resources/fchomo.js:1739
-#: htdocs/luci-static/resources/view/fchomo/node.js:1756
-#: htdocs/luci-static/resources/view/fchomo/node.js:1758
+#: htdocs/luci-static/resources/view/fchomo/node.js:1780
+#: htdocs/luci-static/resources/view/fchomo/node.js:1782
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:259
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:261
msgid "Remove idles"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:961
+#: htdocs/luci-static/resources/fchomo/listeners.js:965
#: htdocs/luci-static/resources/view/fchomo/node.js:1115
msgid "Rendezvous server"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1952
+#: htdocs/luci-static/resources/view/fchomo/node.js:1976
msgid "Replace name"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1953
+#: htdocs/luci-static/resources/view/fchomo/node.js:1977
msgid "Replace node name."
msgstr ""
@@ -2685,9 +2721,9 @@ msgstr ""
msgid "Request"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1271
-#: htdocs/luci-static/resources/view/fchomo/node.js:1394
-#: htdocs/luci-static/resources/view/fchomo/node.js:1401
+#: htdocs/luci-static/resources/fchomo/listeners.js:1301
+#: htdocs/luci-static/resources/view/fchomo/node.js:1418
+#: htdocs/luci-static/resources/view/fchomo/node.js:1425
msgid "Request path"
msgstr ""
@@ -2704,7 +2740,7 @@ msgid "Require any"
msgstr ""
#: htdocs/luci-static/resources/fchomo.js:406
-#: htdocs/luci-static/resources/view/fchomo/node.js:1318
+#: htdocs/luci-static/resources/view/fchomo/node.js:1342
msgid "Requires server support."
msgstr ""
@@ -2716,7 +2752,12 @@ msgstr ""
msgid "Resources management"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:705
+#: htdocs/luci-static/resources/fchomo/listeners.js:647
+#: htdocs/luci-static/resources/view/fchomo/node.js:977
+msgid "Restls"
+msgstr ""
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:709
#: htdocs/luci-static/resources/view/fchomo/node.js:1034
msgid "Restls script"
msgstr ""
@@ -2755,8 +2796,8 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:568
#: htdocs/luci-static/resources/view/fchomo/global.js:776
-#: htdocs/luci-static/resources/view/fchomo/node.js:1622
-#: htdocs/luci-static/resources/view/fchomo/node.js:2041
+#: htdocs/luci-static/resources/view/fchomo/node.js:1646
+#: htdocs/luci-static/resources/view/fchomo/node.js:2065
msgid "Routing mark (Fwmark)"
msgstr ""
@@ -2836,7 +2877,7 @@ msgstr ""
msgid "STUN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:978
+#: htdocs/luci-static/resources/fchomo/listeners.js:982
#: htdocs/luci-static/resources/view/fchomo/node.js:1132
msgid "STUN servers"
msgstr ""
@@ -2892,9 +2933,9 @@ msgstr ""
msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:800
-#: htdocs/luci-static/resources/fchomo/listeners.js:1080
-#: htdocs/luci-static/resources/fchomo/listeners.js:1095
+#: htdocs/luci-static/resources/fchomo/listeners.js:804
+#: htdocs/luci-static/resources/fchomo/listeners.js:1088
+#: htdocs/luci-static/resources/fchomo/listeners.js:1116
#: htdocs/luci-static/resources/view/fchomo/server.js:58
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:62
msgid "Server"
@@ -2904,9 +2945,9 @@ msgstr ""
msgid "Server address"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1265
-#: htdocs/luci-static/resources/view/fchomo/node.js:1373
-#: htdocs/luci-static/resources/view/fchomo/node.js:1379
+#: htdocs/luci-static/resources/fchomo/listeners.js:1295
+#: htdocs/luci-static/resources/view/fchomo/node.js:1397
+#: htdocs/luci-static/resources/view/fchomo/node.js:1403
msgid "Server hostname"
msgstr ""
@@ -2923,6 +2964,13 @@ msgstr ""
msgid "ShadowQUIC"
msgstr ""
+#: htdocs/luci-static/resources/fchomo/listeners.js:646
+#: htdocs/luci-static/resources/fchomo/listeners.js:656
+#: htdocs/luci-static/resources/view/fchomo/node.js:976
+#: htdocs/luci-static/resources/view/fchomo/node.js:986
+msgid "ShadowTLS"
+msgstr ""
+
#: htdocs/luci-static/resources/fchomo.js:157
#: htdocs/luci-static/resources/fchomo.js:193
msgid "Shadowsocks"
@@ -2943,7 +2991,7 @@ msgstr ""
msgid "Shadowsocks password"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1574
+#: htdocs/luci-static/resources/view/fchomo/node.js:1598
msgid "Show connections in the dashboard for breaking connections easier."
msgstr ""
@@ -2955,14 +3003,14 @@ msgstr ""
msgid "Simple round-robin all nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1841
+#: htdocs/luci-static/resources/view/fchomo/node.js:1865
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:391
msgid "Size limit"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1667
-#: htdocs/luci-static/resources/view/fchomo/node.js:1239
-#: htdocs/luci-static/resources/view/fchomo/node.js:2016
+#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+#: htdocs/luci-static/resources/view/fchomo/node.js:2040
msgid "Skip cert verify"
msgstr ""
@@ -3098,7 +3146,7 @@ msgstr ""
msgid "TCP concurrency"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1567
+#: htdocs/luci-static/resources/view/fchomo/node.js:1591
msgid "TCP only"
msgstr ""
@@ -3125,13 +3173,13 @@ msgstr ""
msgid "TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1598
-#: htdocs/luci-static/resources/view/fchomo/node.js:1977
+#: htdocs/luci-static/resources/view/fchomo/node.js:1622
+#: htdocs/luci-static/resources/view/fchomo/node.js:2001
msgid "TFO"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:666
-#: htdocs/luci-static/resources/fchomo/listeners.js:988
+#: htdocs/luci-static/resources/fchomo/listeners.js:670
+#: htdocs/luci-static/resources/fchomo/listeners.js:992
#: htdocs/luci-static/resources/view/fchomo/global.js:550
#: htdocs/luci-static/resources/view/fchomo/node.js:455
#: htdocs/luci-static/resources/view/fchomo/node.js:997
@@ -3139,13 +3187,14 @@ msgstr ""
msgid "TLS"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1035
-#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+#: htdocs/luci-static/resources/fchomo/listeners.js:1039
+#: htdocs/luci-static/resources/view/fchomo/node.js:1181
msgid "TLS ALPN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1029
+#: htdocs/luci-static/resources/fchomo/listeners.js:1033
#: htdocs/luci-static/resources/view/fchomo/node.js:1167
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
msgid "TLS SNI"
msgstr ""
@@ -3182,19 +3231,19 @@ msgstr ""
msgid "The %s address used by local machine in the Wireguard network."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1095
-#: htdocs/luci-static/resources/view/fchomo/node.js:1262
+#: htdocs/luci-static/resources/fchomo/listeners.js:1116
+#: htdocs/luci-static/resources/view/fchomo/node.js:1270
msgid "The %s private key, in PEM format."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1080
-#: htdocs/luci-static/resources/fchomo/listeners.js:1118
+#: htdocs/luci-static/resources/fchomo/listeners.js:1088
+#: htdocs/luci-static/resources/fchomo/listeners.js:1139
#: htdocs/luci-static/resources/view/fchomo/global.js:571
-#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+#: htdocs/luci-static/resources/view/fchomo/node.js:1256
msgid "The %s public key, in PEM format."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1282
+#: htdocs/luci-static/resources/view/fchomo/node.js:1290
msgid ""
"The ECH parameter of the HTTPS record for the domain. Leave empty to resolve "
"via DNS."
@@ -3218,7 +3267,7 @@ msgid ""
"connection timeout is used."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:832
+#: htdocs/luci-static/resources/fchomo/listeners.js:836
#: htdocs/luci-static/resources/view/fchomo/node.js:1089
msgid ""
"The first padding must have a probability of 100% and at least 35 bytes."
@@ -3234,23 +3283,23 @@ msgstr ""
msgid "The matching %s will be deemed as poisoned."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:713
+#: htdocs/luci-static/resources/fchomo/listeners.js:717
msgid "The proxy used to connect to the handshake target."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:830
+#: htdocs/luci-static/resources/fchomo/listeners.js:834
#: htdocs/luci-static/resources/view/fchomo/node.js:1087
msgid "The server and client can set different padding parameters."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1176
+#: htdocs/luci-static/resources/fchomo/listeners.js:1197
#: htdocs/luci-static/resources/view/fchomo/global.js:615
msgid "This ECH parameter needs to be added to the HTTPS record of the domain."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1670
-#: htdocs/luci-static/resources/view/fchomo/node.js:1242
-#: htdocs/luci-static/resources/view/fchomo/node.js:2019
+#: htdocs/luci-static/resources/view/fchomo/node.js:1250
+#: htdocs/luci-static/resources/view/fchomo/node.js:2043
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
@@ -3290,18 +3339,18 @@ msgstr ""
msgid "Traffic pattern"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2188
+#: htdocs/luci-static/resources/view/fchomo/node.js:2212
msgid "Transit proxy group"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2199
+#: htdocs/luci-static/resources/view/fchomo/node.js:2223
msgid "Transit proxy node"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:194
-#: htdocs/luci-static/resources/fchomo/listeners.js:1229
+#: htdocs/luci-static/resources/fchomo/listeners.js:1259
#: htdocs/luci-static/resources/view/fchomo/node.js:346
-#: htdocs/luci-static/resources/view/fchomo/node.js:1326
+#: htdocs/luci-static/resources/view/fchomo/node.js:1350
msgid "Transport"
msgstr ""
@@ -3310,8 +3359,8 @@ msgstr ""
msgid "Transport fields"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1234
-#: htdocs/luci-static/resources/view/fchomo/node.js:1331
+#: htdocs/luci-static/resources/fchomo/listeners.js:1264
+#: htdocs/luci-static/resources/view/fchomo/node.js:1355
msgid "Transport type"
msgstr ""
@@ -3360,8 +3409,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:863
#: htdocs/luci-static/resources/view/fchomo/client.js:1061
#: htdocs/luci-static/resources/view/fchomo/node.js:254
-#: htdocs/luci-static/resources/view/fchomo/node.js:1778
-#: htdocs/luci-static/resources/view/fchomo/node.js:2149
+#: htdocs/luci-static/resources/view/fchomo/node.js:1802
+#: htdocs/luci-static/resources/view/fchomo/node.js:2173
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:285
msgid "Type"
msgstr ""
@@ -3379,7 +3428,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:605
#: htdocs/luci-static/resources/view/fchomo/client.js:697
#: htdocs/luci-static/resources/view/fchomo/node.js:947
-#: htdocs/luci-static/resources/view/fchomo/node.js:1987
+#: htdocs/luci-static/resources/view/fchomo/node.js:2011
msgid "UDP"
msgstr ""
@@ -3449,7 +3498,7 @@ msgid "Unknown error: %s"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:953
-#: htdocs/luci-static/resources/view/fchomo/node.js:1992
+#: htdocs/luci-static/resources/view/fchomo/node.js:2016
msgid "UoT"
msgstr ""
@@ -3457,24 +3506,24 @@ msgstr ""
msgid "Update failed."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1847
+#: htdocs/luci-static/resources/view/fchomo/node.js:1871
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:397
msgid "Update interval"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1331
-#: htdocs/luci-static/resources/view/fchomo/node.js:1585
+#: htdocs/luci-static/resources/fchomo/listeners.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1609
msgid "Upload bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1332
-#: htdocs/luci-static/resources/view/fchomo/node.js:1586
+#: htdocs/luci-static/resources/fchomo/listeners.js:1362
+#: htdocs/luci-static/resources/view/fchomo/node.js:1610
msgid "Upload bandwidth in Mbps."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1086
-#: htdocs/luci-static/resources/fchomo/listeners.js:1126
-#: htdocs/luci-static/resources/view/fchomo/node.js:1253
+#: htdocs/luci-static/resources/fchomo/listeners.js:1107
+#: htdocs/luci-static/resources/fchomo/listeners.js:1147
+#: htdocs/luci-static/resources/view/fchomo/node.js:1261
msgid "Upload certificate"
msgstr ""
@@ -3482,17 +3531,17 @@ msgstr ""
msgid "Upload initial package"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1101
-#: htdocs/luci-static/resources/view/fchomo/node.js:1267
+#: htdocs/luci-static/resources/fchomo/listeners.js:1122
+#: htdocs/luci-static/resources/view/fchomo/node.js:1275
msgid "Upload key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1089
-#: htdocs/luci-static/resources/fchomo/listeners.js:1104
-#: htdocs/luci-static/resources/fchomo/listeners.js:1129
+#: htdocs/luci-static/resources/fchomo/listeners.js:1110
+#: htdocs/luci-static/resources/fchomo/listeners.js:1125
+#: htdocs/luci-static/resources/fchomo/listeners.js:1150
#: htdocs/luci-static/resources/view/fchomo/global.js:306
-#: htdocs/luci-static/resources/view/fchomo/node.js:1256
-#: htdocs/luci-static/resources/view/fchomo/node.js:1270
+#: htdocs/luci-static/resources/view/fchomo/node.js:1264
+#: htdocs/luci-static/resources/view/fchomo/node.js:1278
msgid "Upload..."
msgstr ""
@@ -3522,8 +3571,8 @@ msgstr ""
msgid "Used to resolve the domain of the Proxy node."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1234
-#: htdocs/luci-static/resources/view/fchomo/node.js:2011
+#: htdocs/luci-static/resources/view/fchomo/node.js:1242
+#: htdocs/luci-static/resources/view/fchomo/node.js:2035
msgid "Used to verify the hostname on the returned certificates."
msgstr ""
@@ -3536,7 +3585,7 @@ msgid "User-hint is mandatory"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:162
-#: htdocs/luci-static/resources/fchomo/listeners.js:685
+#: htdocs/luci-static/resources/fchomo/listeners.js:689
#: htdocs/luci-static/resources/view/fchomo/node.js:305
#: htdocs/luci-static/resources/view/fchomo/node.js:1008
msgid "Username"
@@ -3546,11 +3595,11 @@ msgstr ""
msgid "Users filter mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1442
+#: htdocs/luci-static/resources/view/fchomo/node.js:1466
msgid "V2ray HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1447
+#: htdocs/luci-static/resources/view/fchomo/node.js:1471
msgid "V2ray HTTPUpgrade fast open"
msgstr ""
@@ -3564,8 +3613,8 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1784
-#: htdocs/luci-static/resources/view/fchomo/node.js:2155
+#: htdocs/luci-static/resources/view/fchomo/node.js:1808
+#: htdocs/luci-static/resources/view/fchomo/node.js:2179
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:328
msgid "Value"
msgstr ""
@@ -3575,7 +3624,7 @@ msgid "Verify if given"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:384
-#: htdocs/luci-static/resources/fchomo/listeners.js:697
+#: htdocs/luci-static/resources/fchomo/listeners.js:701
#: htdocs/luci-static/resources/view/fchomo/node.js:497
#: htdocs/luci-static/resources/view/fchomo/node.js:1020
msgid "Version"
@@ -3599,15 +3648,15 @@ msgid "Warning"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:362
-#: htdocs/luci-static/resources/fchomo/listeners.js:1236
-#: htdocs/luci-static/resources/fchomo/listeners.js:1247
-#: htdocs/luci-static/resources/fchomo/listeners.js:1254
+#: htdocs/luci-static/resources/fchomo/listeners.js:1266
+#: htdocs/luci-static/resources/fchomo/listeners.js:1277
+#: htdocs/luci-static/resources/fchomo/listeners.js:1284
#: htdocs/luci-static/resources/view/fchomo/node.js:451
#: htdocs/luci-static/resources/view/fchomo/node.js:480
-#: htdocs/luci-static/resources/view/fchomo/node.js:1336
-#: htdocs/luci-static/resources/view/fchomo/node.js:1349
-#: htdocs/luci-static/resources/view/fchomo/node.js:1356
-#: htdocs/luci-static/resources/view/fchomo/node.js:1362
+#: htdocs/luci-static/resources/view/fchomo/node.js:1360
+#: htdocs/luci-static/resources/view/fchomo/node.js:1373
+#: htdocs/luci-static/resources/view/fchomo/node.js:1380
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
msgid "WebSocket"
msgstr ""
@@ -3635,32 +3684,32 @@ msgstr ""
msgid "WireGuard requires base64-encoded private keys."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1237
-#: htdocs/luci-static/resources/fchomo/listeners.js:1248
-#: htdocs/luci-static/resources/view/fchomo/node.js:1337
-#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/fchomo/listeners.js:1267
+#: htdocs/luci-static/resources/fchomo/listeners.js:1278
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1381
msgid "XHTTP"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1284
-#: htdocs/luci-static/resources/view/fchomo/node.js:1452
+#: htdocs/luci-static/resources/fchomo/listeners.js:1314
+#: htdocs/luci-static/resources/view/fchomo/node.js:1476
msgid "XHTTP mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1483
+#: htdocs/luci-static/resources/view/fchomo/node.js:1507
msgid "XMUX"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1488
-#: htdocs/luci-static/resources/view/fchomo/node.js:1493
-#: htdocs/luci-static/resources/view/fchomo/node.js:1498
-#: htdocs/luci-static/resources/view/fchomo/node.js:1503
-#: htdocs/luci-static/resources/view/fchomo/node.js:1508
-#: htdocs/luci-static/resources/view/fchomo/node.js:1513
+#: htdocs/luci-static/resources/view/fchomo/node.js:1512
+#: htdocs/luci-static/resources/view/fchomo/node.js:1517
+#: htdocs/luci-static/resources/view/fchomo/node.js:1522
+#: htdocs/luci-static/resources/view/fchomo/node.js:1527
+#: htdocs/luci-static/resources/view/fchomo/node.js:1532
+#: htdocs/luci-static/resources/view/fchomo/node.js:1537
msgid "XMUX:"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:791
+#: htdocs/luci-static/resources/fchomo/listeners.js:795
msgid "XOR mode"
msgstr ""
@@ -3672,7 +3721,7 @@ msgstr ""
msgid "Yaml text"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2022
+#: htdocs/luci-static/resources/view/fchomo/node.js:2046
msgid "Yes"
msgstr ""
@@ -3700,11 +3749,11 @@ msgstr ""
msgid "aes-256-gcm"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1869
+#: htdocs/luci-static/resources/view/fchomo/node.js:1893
msgid "age private key"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1930
+#: htdocs/luci-static/resources/view/fchomo/node.js:1954
msgid "age public key"
msgstr ""
@@ -3724,9 +3773,9 @@ msgstr ""
msgid "bbr"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1091
-#: htdocs/luci-static/resources/fchomo/listeners.js:1131
-#: htdocs/luci-static/resources/view/fchomo/node.js:1258
+#: htdocs/luci-static/resources/fchomo/listeners.js:1112
+#: htdocs/luci-static/resources/fchomo/listeners.js:1152
+#: htdocs/luci-static/resources/view/fchomo/node.js:1266
msgid "certificate"
msgstr ""
@@ -3744,8 +3793,8 @@ msgstr ""
msgid "cubic"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:743
-#: htdocs/luci-static/resources/fchomo/listeners.js:774
+#: htdocs/luci-static/resources/fchomo/listeners.js:747
+#: htdocs/luci-static/resources/fchomo/listeners.js:778
msgid "decryption"
msgstr ""
@@ -3753,11 +3802,11 @@ msgstr ""
msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:2004
+#: htdocs/luci-static/resources/view/fchomo/node.js:2028
msgid "down"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:778
+#: htdocs/luci-static/resources/fchomo/listeners.js:782
#: htdocs/luci-static/resources/view/fchomo/node.js:1041
#: htdocs/luci-static/resources/view/fchomo/node.js:1064
msgid "encryption"
@@ -3768,26 +3817,26 @@ msgstr ""
msgid "false = bandwidth optimized downlink; true = pure Sudoku downlink."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1235
-#: htdocs/luci-static/resources/fchomo/listeners.js:1246
-#: htdocs/luci-static/resources/fchomo/listeners.js:1253
-#: htdocs/luci-static/resources/view/fchomo/node.js:1335
-#: htdocs/luci-static/resources/view/fchomo/node.js:1348
-#: htdocs/luci-static/resources/view/fchomo/node.js:1355
-#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/fchomo/listeners.js:1265
+#: htdocs/luci-static/resources/fchomo/listeners.js:1276
+#: htdocs/luci-static/resources/fchomo/listeners.js:1283
+#: htdocs/luci-static/resources/view/fchomo/node.js:1359
+#: htdocs/luci-static/resources/view/fchomo/node.js:1372
+#: htdocs/luci-static/resources/view/fchomo/node.js:1379
+#: htdocs/luci-static/resources/view/fchomo/node.js:1385
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1418
+#: htdocs/luci-static/resources/view/fchomo/node.js:1442
msgid "gRPC User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1423
+#: htdocs/luci-static/resources/view/fchomo/node.js:1447
msgid "gRPC ping interval"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1278
-#: htdocs/luci-static/resources/view/fchomo/node.js:1414
+#: htdocs/luci-static/resources/fchomo/listeners.js:1308
+#: htdocs/luci-static/resources/view/fchomo/node.js:1438
msgid "gRPC service name"
msgstr ""
@@ -3799,7 +3848,7 @@ msgstr ""
msgid "h2"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1530
+#: htdocs/luci-static/resources/view/fchomo/node.js:1554
msgid "h2mux"
msgstr ""
@@ -3811,12 +3860,7 @@ msgstr ""
msgid "h3-l4proxy"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:647
-#: htdocs/luci-static/resources/view/fchomo/node.js:978
-msgid "jls"
-msgstr ""
-
-#: htdocs/luci-static/resources/fchomo/listeners.js:943
+#: htdocs/luci-static/resources/fchomo/listeners.js:947
msgid "least one keypair required"
msgstr ""
@@ -3830,7 +3874,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1568
#: htdocs/luci-static/resources/view/fchomo/client.js:1802
#: htdocs/luci-static/resources/view/fchomo/client.js:1858
-#: htdocs/luci-static/resources/view/fchomo/node.js:1750
+#: htdocs/luci-static/resources/view/fchomo/node.js:1774
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:247
msgid "mihomo config"
msgstr ""
@@ -3839,8 +3883,8 @@ msgstr ""
msgid "mlkem768x25519plus"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1603
-#: htdocs/luci-static/resources/view/fchomo/node.js:1982
+#: htdocs/luci-static/resources/view/fchomo/node.js:1627
+#: htdocs/luci-static/resources/view/fchomo/node.js:2006
msgid "mpTCP"
msgstr ""
@@ -3882,8 +3926,8 @@ msgstr ""
msgid "null"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:644
-#: htdocs/luci-static/resources/fchomo/listeners.js:654
+#: htdocs/luci-static/resources/fchomo/listeners.js:645
+#: htdocs/luci-static/resources/fchomo/listeners.js:655
#: htdocs/luci-static/resources/view/fchomo/node.js:973
#: htdocs/luci-static/resources/view/fchomo/node.js:985
msgid "obfs-simple"
@@ -3897,11 +3941,11 @@ msgstr ""
msgid "only applies when %s is not %s."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1963
+#: htdocs/luci-static/resources/view/fchomo/node.js:1987
msgid "override.override-expr"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1955
+#: htdocs/luci-static/resources/view/fchomo/node.js:1979
msgid "override.proxy-name"
msgstr ""
@@ -3909,8 +3953,8 @@ msgstr ""
msgid "packet addr (v2ray-core v5+)"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1288
-#: htdocs/luci-static/resources/view/fchomo/node.js:1456
+#: htdocs/luci-static/resources/fchomo/listeners.js:1318
+#: htdocs/luci-static/resources/view/fchomo/node.js:1480
msgid "packet-up"
msgstr ""
@@ -3919,8 +3963,8 @@ msgstr ""
msgid "poll"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1106
-#: htdocs/luci-static/resources/view/fchomo/node.js:1272
+#: htdocs/luci-static/resources/fchomo/listeners.js:1127
+#: htdocs/luci-static/resources/view/fchomo/node.js:1280
msgid "private key"
msgstr ""
@@ -3933,23 +3977,11 @@ msgstr ""
msgid "requires front-end adaptation using the API."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:646
-#: htdocs/luci-static/resources/view/fchomo/node.js:977
-msgid "restls"
-msgstr ""
-
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:232
msgid "rule-set"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:645
-#: htdocs/luci-static/resources/fchomo/listeners.js:655
-#: htdocs/luci-static/resources/view/fchomo/node.js:976
-#: htdocs/luci-static/resources/view/fchomo/node.js:986
-msgid "shadow-tls"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/fchomo/node.js:1528
+#: htdocs/luci-static/resources/view/fchomo/node.js:1552
msgid "smux"
msgstr ""
@@ -3962,17 +3994,17 @@ msgstr ""
msgid "src"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1286
-#: htdocs/luci-static/resources/view/fchomo/node.js:1454
+#: htdocs/luci-static/resources/fchomo/listeners.js:1316
+#: htdocs/luci-static/resources/view/fchomo/node.js:1478
msgid "stream-one"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1287
-#: htdocs/luci-static/resources/view/fchomo/node.js:1455
+#: htdocs/luci-static/resources/fchomo/listeners.js:1317
+#: htdocs/luci-static/resources/view/fchomo/node.js:1479
msgid "stream-up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1303
+#: htdocs/luci-static/resources/fchomo/listeners.js:1333
msgid "stream-up server seconds"
msgstr ""
@@ -4000,12 +4032,12 @@ msgstr ""
msgid "unique value"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1998
+#: htdocs/luci-static/resources/view/fchomo/node.js:2022
msgid "up"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:385
-#: htdocs/luci-static/resources/fchomo/listeners.js:698
+#: htdocs/luci-static/resources/fchomo/listeners.js:702
#: htdocs/luci-static/resources/view/fchomo/node.js:498
#: htdocs/luci-static/resources/view/fchomo/node.js:634
#: htdocs/luci-static/resources/view/fchomo/node.js:960
@@ -4014,7 +4046,7 @@ msgid "v1"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:386
-#: htdocs/luci-static/resources/fchomo/listeners.js:699
+#: htdocs/luci-static/resources/fchomo/listeners.js:703
#: htdocs/luci-static/resources/view/fchomo/node.js:499
#: htdocs/luci-static/resources/view/fchomo/node.js:961
#: htdocs/luci-static/resources/view/fchomo/node.js:1022
@@ -4022,7 +4054,7 @@ msgid "v2"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:387
-#: htdocs/luci-static/resources/fchomo/listeners.js:700
+#: htdocs/luci-static/resources/fchomo/listeners.js:704
#: htdocs/luci-static/resources/view/fchomo/node.js:500
#: htdocs/luci-static/resources/view/fchomo/node.js:1023
msgid "v3"
@@ -4043,7 +4075,7 @@ msgstr ""
msgid "valid JSON format"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1226
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
msgid "valid SHA256 string with %d characters"
msgstr ""
@@ -4089,7 +4121,7 @@ msgstr ""
msgid "yacd-meta"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1529
+#: htdocs/luci-static/resources/view/fchomo/node.js:1553
msgid "yamux"
msgstr ""
diff --git a/luci-app-fchomo/po/zh_Hans/fchomo.po b/luci-app-fchomo/po/zh_Hans/fchomo.po
index 5d0247eb..0de07731 100644
--- a/luci-app-fchomo/po/zh_Hans/fchomo.po
+++ b/luci-app-fchomo/po/zh_Hans/fchomo.po
@@ -27,15 +27,15 @@ msgstr "%s 端口"
msgid "(Imported)"
msgstr "(已导入)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1109
-#: htdocs/luci-static/resources/fchomo/listeners.js:1117
-#: htdocs/luci-static/resources/fchomo/listeners.js:1126
+#: htdocs/luci-static/resources/fchomo/listeners.js:1130
+#: htdocs/luci-static/resources/fchomo/listeners.js:1138
+#: htdocs/luci-static/resources/fchomo/listeners.js:1147
#: htdocs/luci-static/resources/view/fchomo/global.js:564
#: htdocs/luci-static/resources/view/fchomo/global.js:570
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
-#: htdocs/luci-static/resources/view/fchomo/node.js:1253
+#: htdocs/luci-static/resources/view/fchomo/node.js:1255
#: htdocs/luci-static/resources/view/fchomo/node.js:1261
-#: htdocs/luci-static/resources/view/fchomo/node.js:1267
+#: htdocs/luci-static/resources/view/fchomo/node.js:1269
+#: htdocs/luci-static/resources/view/fchomo/node.js:1275
msgid "(mTLS)"
msgstr ""
@@ -62,10 +62,10 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1105
#: htdocs/luci-static/resources/view/fchomo/client.js:1361
#: htdocs/luci-static/resources/view/fchomo/node.js:288
-#: htdocs/luci-static/resources/view/fchomo/node.js:2161
-#: htdocs/luci-static/resources/view/fchomo/node.js:2172
-#: htdocs/luci-static/resources/view/fchomo/node.js:2191
-#: htdocs/luci-static/resources/view/fchomo/node.js:2202
+#: htdocs/luci-static/resources/view/fchomo/node.js:2185
+#: htdocs/luci-static/resources/view/fchomo/node.js:2196
+#: htdocs/luci-static/resources/view/fchomo/node.js:2215
+#: htdocs/luci-static/resources/view/fchomo/node.js:2226
msgid "-- Please choose --"
msgstr "-- 请选择 --"
@@ -110,11 +110,11 @@ msgstr ""
msgid "0 or 1 only."
msgstr "仅限 0 或 1。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1087
-#: htdocs/luci-static/resources/fchomo/listeners.js:1102
-#: htdocs/luci-static/resources/fchomo/listeners.js:1127
-#: htdocs/luci-static/resources/view/fchomo/node.js:1254
-#: htdocs/luci-static/resources/view/fchomo/node.js:1268
+#: htdocs/luci-static/resources/fchomo/listeners.js:1108
+#: htdocs/luci-static/resources/fchomo/listeners.js:1123
+#: htdocs/luci-static/resources/fchomo/listeners.js:1148
+#: htdocs/luci-static/resources/view/fchomo/node.js:1262
+#: htdocs/luci-static/resources/view/fchomo/node.js:1276
msgid "Save your configuration before uploading files!"
msgstr "上传文件前请先保存配置!"
@@ -214,11 +214,11 @@ msgstr "新增 节点"
msgid "Add a inbound"
msgstr "新增 入站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1647
+#: htdocs/luci-static/resources/view/fchomo/node.js:1671
msgid "Add a provider"
msgstr "新增 供应商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2135
+#: htdocs/luci-static/resources/view/fchomo/node.js:2159
msgid "Add a proxy chain"
msgstr "新增 代理链"
@@ -242,11 +242,11 @@ msgstr "新增 服务器"
msgid "Add a sub rule"
msgstr "新增 子规则"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1944
+#: htdocs/luci-static/resources/view/fchomo/node.js:1968
msgid "Add prefix"
msgstr "添加前缀"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1948
+#: htdocs/luci-static/resources/view/fchomo/node.js:1972
msgid "Add suffix"
msgstr "添加后缀"
@@ -287,7 +287,7 @@ msgid ""
msgstr ""
"允许从私有网络访问。要从公共网站访问私有网络上的 API,则必须启用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1023
+#: htdocs/luci-static/resources/fchomo/listeners.js:1027
msgid "Allow insecure connections"
msgstr "允许不安全的连接"
@@ -335,11 +335,11 @@ msgid "Authenticated length"
msgstr "认证长度"
#: htdocs/luci-static/resources/fchomo/listeners.js:361
-#: htdocs/luci-static/resources/fchomo/listeners.js:1285
+#: htdocs/luci-static/resources/fchomo/listeners.js:1315
#: htdocs/luci-static/resources/view/fchomo/global.js:423
#: htdocs/luci-static/resources/view/fchomo/node.js:450
#: htdocs/luci-static/resources/view/fchomo/node.js:474
-#: htdocs/luci-static/resources/view/fchomo/node.js:1453
+#: htdocs/luci-static/resources/view/fchomo/node.js:1477
msgid "Auto"
msgstr "自动"
@@ -390,13 +390,13 @@ msgid "Binary mrs"
msgstr "二进制 mrs"
#: htdocs/luci-static/resources/view/fchomo/global.js:758
-#: htdocs/luci-static/resources/view/fchomo/node.js:1614
-#: htdocs/luci-static/resources/view/fchomo/node.js:2033
+#: htdocs/luci-static/resources/view/fchomo/node.js:1638
+#: htdocs/luci-static/resources/view/fchomo/node.js:2057
msgid "Bind interface"
msgstr "绑定接口"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1615
-#: htdocs/luci-static/resources/view/fchomo/node.js:2034
+#: htdocs/luci-static/resources/view/fchomo/node.js:1639
+#: htdocs/luci-static/resources/view/fchomo/node.js:2058
msgid "Bind outbound interface."
msgstr "绑定出站接口。"
@@ -465,17 +465,17 @@ msgstr "CORS 允许的来源,留空则使用 *。"
msgid "Cancel"
msgstr "取消"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1220
+#: htdocs/luci-static/resources/view/fchomo/node.js:1228
msgid "Cert fingerprint"
msgstr "证书指纹"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1221
+#: htdocs/luci-static/resources/view/fchomo/node.js:1229
msgid ""
"Certificate fingerprint. Used to implement SSL Pinning and prevent MitM."
msgstr "证书指纹。用于实现 SSL证书固定 并防止 MitM。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1079
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+#: htdocs/luci-static/resources/fchomo/listeners.js:1087
+#: htdocs/luci-static/resources/view/fchomo/node.js:1255
msgid "Certificate path"
msgstr "证书路径"
@@ -536,25 +536,25 @@ msgstr ""
"点击此处下载"
"最新的初始包。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:819
-#: htdocs/luci-static/resources/fchomo/listeners.js:1118
+#: htdocs/luci-static/resources/fchomo/listeners.js:823
+#: htdocs/luci-static/resources/fchomo/listeners.js:1139
#: htdocs/luci-static/resources/view/fchomo/global.js:571
#: htdocs/luci-static/resources/view/fchomo/node.js:1076
-#: htdocs/luci-static/resources/view/fchomo/node.js:1248
-#: htdocs/luci-static/resources/view/fchomo/node.js:1262
+#: htdocs/luci-static/resources/view/fchomo/node.js:1256
+#: htdocs/luci-static/resources/view/fchomo/node.js:1270
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:22
msgid "Client"
msgstr "客户端"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1117
+#: htdocs/luci-static/resources/fchomo/listeners.js:1138
msgid "Client Auth Certificate path"
msgstr "客户端认证证书路径"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1109
+#: htdocs/luci-static/resources/fchomo/listeners.js:1130
msgid "Client Auth type"
msgstr "客户端认证类型"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1293
+#: htdocs/luci-static/resources/view/fchomo/node.js:1301
msgid "Client fingerprint"
msgstr "客户端指纹"
@@ -601,14 +601,14 @@ msgid "Content copied to clipboard!"
msgstr "内容已复制到剪贴板!"
#: htdocs/luci-static/resources/view/fchomo/client.js:687
-#: htdocs/luci-static/resources/view/fchomo/node.js:1804
-#: htdocs/luci-static/resources/view/fchomo/node.js:1830
+#: htdocs/luci-static/resources/view/fchomo/node.js:1828
+#: htdocs/luci-static/resources/view/fchomo/node.js:1854
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:348
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:374
msgid "Content will not be verified, Please make sure you enter it correctly."
msgstr "内容将不会被验证,请确保输入正确。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1803
+#: htdocs/luci-static/resources/view/fchomo/node.js:1827
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:347
msgid "Contents"
msgstr "内容"
@@ -633,7 +633,7 @@ msgstr "Cron 表达式"
msgid "Custom Direct List"
msgstr "自定义直连列表"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1935
+#: htdocs/luci-static/resources/view/fchomo/node.js:1959
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:420
msgid "Custom HTTP header."
msgstr "自定义 HTTP header。"
@@ -716,11 +716,11 @@ msgstr "从私钥派生"
msgid "Destination addresses allowed to be forwarded via Wireguard."
msgstr "允许通过 WireGuard 转发的目的地址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2158
+#: htdocs/luci-static/resources/view/fchomo/node.js:2182
msgid "Destination provider"
msgstr "落地供应商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2169
+#: htdocs/luci-static/resources/view/fchomo/node.js:2193
msgid "Destination proxy node"
msgstr "落地代理节点"
@@ -728,8 +728,8 @@ msgstr "落地代理节点"
msgid "Dial fields"
msgstr "拨号字段"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2181
-#: htdocs/luci-static/resources/view/fchomo/node.js:2211
+#: htdocs/luci-static/resources/view/fchomo/node.js:2205
+#: htdocs/luci-static/resources/view/fchomo/node.js:2235
msgid "Different chain head/tail"
msgstr "不同的链头/链尾"
@@ -800,18 +800,18 @@ msgid "Donot send server name in ClientHello."
msgstr "不要在 ClientHello 中发送服务器名称。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1668
-#: htdocs/luci-static/resources/view/fchomo/node.js:1240
-#: htdocs/luci-static/resources/view/fchomo/node.js:2017
+#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+#: htdocs/luci-static/resources/view/fchomo/node.js:2041
msgid "Donot verifying server certificate."
msgstr "不验证服务器证书。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1337
-#: htdocs/luci-static/resources/view/fchomo/node.js:1591
+#: htdocs/luci-static/resources/fchomo/listeners.js:1367
+#: htdocs/luci-static/resources/view/fchomo/node.js:1615
msgid "Download bandwidth"
msgstr "下载带宽"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1338
-#: htdocs/luci-static/resources/view/fchomo/node.js:1592
+#: htdocs/luci-static/resources/fchomo/listeners.js:1368
+#: htdocs/luci-static/resources/view/fchomo/node.js:1616
msgid "Download bandwidth in Mbps."
msgstr "下载带宽(单位:Mbps)。"
@@ -827,16 +827,16 @@ msgstr "下载成功。"
msgid "Dual stack"
msgstr "双栈"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1287
+#: htdocs/luci-static/resources/view/fchomo/node.js:1295
msgid "ECH HTTPS record query servername"
msgstr "ECH HTTPS 记录查询域名"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1175
-#: htdocs/luci-static/resources/view/fchomo/node.js:1281
+#: htdocs/luci-static/resources/fchomo/listeners.js:1196
+#: htdocs/luci-static/resources/view/fchomo/node.js:1289
msgid "ECH config"
msgstr "ECH 配置"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1134
+#: htdocs/luci-static/resources/fchomo/listeners.js:1155
msgid "ECH key"
msgstr "ECH 密钥"
@@ -852,11 +852,11 @@ msgstr "EDNS 客户端子网"
msgid "ETag support"
msgstr "ETag 支持"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1431
+#: htdocs/luci-static/resources/view/fchomo/node.js:1455
msgid "Early Data first packet length limit."
msgstr "前置数据长度阈值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1437
+#: htdocs/luci-static/resources/view/fchomo/node.js:1461
msgid "Early Data header name"
msgstr "前置数据标头"
@@ -872,7 +872,7 @@ msgstr "编辑出站"
msgid "Edit ruleset"
msgstr "编辑规则集"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1801
+#: htdocs/luci-static/resources/view/fchomo/node.js:1825
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:345
msgid "Editer"
msgstr "编辑器"
@@ -896,9 +896,9 @@ msgstr "为空时回退"
#: htdocs/luci-static/resources/view/fchomo/global.js:422
#: htdocs/luci-static/resources/view/fchomo/global.js:704
#: htdocs/luci-static/resources/view/fchomo/node.js:250
-#: htdocs/luci-static/resources/view/fchomo/node.js:1774
-#: htdocs/luci-static/resources/view/fchomo/node.js:2056
-#: htdocs/luci-static/resources/view/fchomo/node.js:2145
+#: htdocs/luci-static/resources/view/fchomo/node.js:1798
+#: htdocs/luci-static/resources/view/fchomo/node.js:2080
+#: htdocs/luci-static/resources/view/fchomo/node.js:2169
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:272
#: htdocs/luci-static/resources/view/fchomo/server.js:49
msgid "Enable"
@@ -925,17 +925,17 @@ msgstr ""
"为出站连接启用 IP4P 转换"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1275
+#: htdocs/luci-static/resources/view/fchomo/node.js:1283
msgid "Enable ECH"
msgstr "启用 ECH"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1325
-#: htdocs/luci-static/resources/view/fchomo/node.js:1579
+#: htdocs/luci-static/resources/fchomo/listeners.js:1355
+#: htdocs/luci-static/resources/view/fchomo/node.js:1603
msgid "Enable TCP Brutal"
msgstr "启用 TCP Brutal"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1326
-#: htdocs/luci-static/resources/view/fchomo/node.js:1580
+#: htdocs/luci-static/resources/fchomo/listeners.js:1356
+#: htdocs/luci-static/resources/view/fchomo/node.js:1604
msgid "Enable TCP Brutal congestion control algorithm"
msgstr "启用 TCP Brutal 拥塞控制算法。"
@@ -943,7 +943,7 @@ msgstr "启用 TCP Brutal 拥塞控制算法。"
msgid "Enable fast open"
msgstr "启用 Fast open"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1568
+#: htdocs/luci-static/resources/view/fchomo/node.js:1592
msgid "Enable multiplexing only for TCP."
msgstr "仅为 TCP 启用多路复用。"
@@ -952,17 +952,17 @@ msgstr "仅为 TCP 启用多路复用。"
msgid "Enable obfuscate for downlink"
msgstr "启用下行链路混淆"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1320
-#: htdocs/luci-static/resources/view/fchomo/node.js:1562
+#: htdocs/luci-static/resources/fchomo/listeners.js:1350
+#: htdocs/luci-static/resources/view/fchomo/node.js:1586
msgid "Enable padding"
msgstr "启用填充"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1573
+#: htdocs/luci-static/resources/view/fchomo/node.js:1597
msgid "Enable statistic"
msgstr "启用统计"
#: htdocs/luci-static/resources/view/fchomo/node.js:954
-#: htdocs/luci-static/resources/view/fchomo/node.js:1993
+#: htdocs/luci-static/resources/view/fchomo/node.js:2017
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with Multiplex."
msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。"
@@ -974,7 +974,7 @@ msgid ""
"connections, losing the ability to masquerade with HTTP/3."
msgstr "启用混淆将使服务器与标准的 QUIC 连接不兼容,失去 HTTP/3 伪装的能力。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:782
+#: htdocs/luci-static/resources/fchomo/listeners.js:786
msgid "Encryption method"
msgstr "加密方法"
@@ -1001,7 +1001,7 @@ msgid ""
"if empty."
msgstr "超过此限制将会触发强制健康检查。留空则使用 5。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2114
+#: htdocs/luci-static/resources/view/fchomo/node.js:2138
msgid "Exclude matched node types."
msgstr "排除匹配的节点类型。"
@@ -1014,7 +1014,7 @@ msgstr ""
"rel=\"noreferrer noopener\">此处。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1243
-#: htdocs/luci-static/resources/view/fchomo/node.js:2107
+#: htdocs/luci-static/resources/view/fchomo/node.js:2131
msgid "Exclude nodes that meet keywords or regexps."
msgstr "排除匹配关键词或表达式的节点。"
@@ -1023,12 +1023,12 @@ msgid "Expand/Collapse result"
msgstr "展开/收起 结果"
#: htdocs/luci-static/resources/view/fchomo/client.js:1186
-#: htdocs/luci-static/resources/view/fchomo/node.js:2092
+#: htdocs/luci-static/resources/view/fchomo/node.js:2116
msgid "Expected HTTP code. 204 will be used if empty."
msgstr "预期的 HTTP code。留空则使用 204。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1188
-#: htdocs/luci-static/resources/view/fchomo/node.js:2094
+#: htdocs/luci-static/resources/view/fchomo/node.js:2118
msgid "Expected status"
msgstr "预期状态"
@@ -1058,9 +1058,9 @@ msgstr "预期状态"
#: htdocs/luci-static/resources/fchomo.js:1968
#: htdocs/luci-static/resources/fchomo/listeners.js:284
#: htdocs/luci-static/resources/fchomo/listeners.js:331
-#: htdocs/luci-static/resources/fchomo/listeners.js:811
-#: htdocs/luci-static/resources/fchomo/listeners.js:842
-#: htdocs/luci-static/resources/fchomo/listeners.js:943
+#: htdocs/luci-static/resources/fchomo/listeners.js:815
+#: htdocs/luci-static/resources/fchomo/listeners.js:846
+#: htdocs/luci-static/resources/fchomo/listeners.js:947
#: htdocs/luci-static/resources/view/fchomo/client.js:71
#: htdocs/luci-static/resources/view/fchomo/client.js:1051
#: htdocs/luci-static/resources/view/fchomo/client.js:1596
@@ -1070,27 +1070,44 @@ msgstr "预期状态"
#: htdocs/luci-static/resources/view/fchomo/node.js:480
#: htdocs/luci-static/resources/view/fchomo/node.js:482
#: htdocs/luci-static/resources/view/fchomo/node.js:1099
-#: htdocs/luci-static/resources/view/fchomo/node.js:1226
-#: htdocs/luci-static/resources/view/fchomo/node.js:2181
-#: htdocs/luci-static/resources/view/fchomo/node.js:2211
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
+#: htdocs/luci-static/resources/view/fchomo/node.js:2205
+#: htdocs/luci-static/resources/view/fchomo/node.js:2235
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:300
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:314
msgid "Expecting: %s"
msgstr "请输入:%s"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+msgid "Expecting: %s cannot be empty when %s is enabled."
+msgstr "请输入:%s 不能为空,当 %s 启用时。"
+
#: htdocs/luci-static/resources/view/fchomo/node.js:278
#: htdocs/luci-static/resources/view/fchomo/node.js:296
msgid "Expecting: Least one of %s or %s."
msgstr "请输入:至少包含 %s 或 %s 中的一个。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:654
-#: htdocs/luci-static/resources/fchomo/listeners.js:1246
-#: htdocs/luci-static/resources/fchomo/listeners.js:1253
+#: htdocs/luci-static/resources/fchomo/listeners.js:1099
+msgid "Expecting: Cannot be empty."
+msgstr "请输入:不能为空。"
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:1210
+msgid "Expecting: Cannot be enabled when %s is enabled."
+msgstr "请输入:当 %s 启用时,无法启用。"
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:1096
+msgid "Expecting: Keep empty when %s is enabled."
+msgstr "请输入:启用 %s 时保持为空。"
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:655
+#: htdocs/luci-static/resources/fchomo/listeners.js:659
+#: htdocs/luci-static/resources/fchomo/listeners.js:1276
+#: htdocs/luci-static/resources/fchomo/listeners.js:1283
#: htdocs/luci-static/resources/view/fchomo/node.js:985
-#: htdocs/luci-static/resources/view/fchomo/node.js:1346
-#: htdocs/luci-static/resources/view/fchomo/node.js:1353
-#: htdocs/luci-static/resources/view/fchomo/node.js:1361
-msgid "Expecting: only support %s."
+#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1377
+#: htdocs/luci-static/resources/view/fchomo/node.js:1385
+msgid "Expecting: Only support %s."
msgstr "请输入:仅支援 %s。"
#: htdocs/luci-static/resources/view/fchomo/global.js:723
@@ -1142,7 +1159,7 @@ msgid "Fallback filter"
msgstr "後備过滤器"
#: htdocs/luci-static/resources/view/fchomo/client.js:1238
-#: htdocs/luci-static/resources/view/fchomo/node.js:2101
+#: htdocs/luci-static/resources/view/fchomo/node.js:2125
msgid "Filter nodes that meet keywords or regexps."
msgstr "过滤匹配关键字或表达式的节点。"
@@ -1185,9 +1202,9 @@ msgstr ""
"noopener\">%s."
#: htdocs/luci-static/resources/view/fchomo/client.js:1187
-#: htdocs/luci-static/resources/view/fchomo/node.js:1954
-#: htdocs/luci-static/resources/view/fchomo/node.js:1962
-#: htdocs/luci-static/resources/view/fchomo/node.js:2093
+#: htdocs/luci-static/resources/view/fchomo/node.js:1978
+#: htdocs/luci-static/resources/view/fchomo/node.js:1986
+#: htdocs/luci-static/resources/view/fchomo/node.js:2117
msgid ""
"For format see %s."
@@ -1208,7 +1225,7 @@ msgstr "强制嗅探域名"
msgid "Format"
msgstr "格式"
-#: htdocs/luci-static/resources/fchomo/listeners.js:729
+#: htdocs/luci-static/resources/fchomo/listeners.js:733
msgid "Forwarding rate limit"
msgstr "转发速率限制"
@@ -1219,7 +1236,7 @@ msgstr "转发速率限制"
msgid "FullCombo Shark!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1386
+#: htdocs/luci-static/resources/view/fchomo/node.js:1410
msgid "GET"
msgstr ""
@@ -1239,7 +1256,7 @@ msgstr "常规"
#: htdocs/luci-static/resources/fchomo/listeners.js:119
#: htdocs/luci-static/resources/view/fchomo/client.js:1042
#: htdocs/luci-static/resources/view/fchomo/node.js:236
-#: htdocs/luci-static/resources/view/fchomo/node.js:1764
+#: htdocs/luci-static/resources/view/fchomo/node.js:1788
msgid "General fields"
msgstr "常规字段"
@@ -1254,10 +1271,10 @@ msgstr "常规设置"
#: htdocs/luci-static/resources/fchomo/listeners.js:262
#: htdocs/luci-static/resources/fchomo/listeners.js:306
#: htdocs/luci-static/resources/fchomo/listeners.js:308
-#: htdocs/luci-static/resources/fchomo/listeners.js:915
-#: htdocs/luci-static/resources/fchomo/listeners.js:1167
+#: htdocs/luci-static/resources/fchomo/listeners.js:919
+#: htdocs/luci-static/resources/fchomo/listeners.js:1188
#: htdocs/luci-static/resources/view/fchomo/global.js:608
-#: htdocs/luci-static/resources/view/fchomo/node.js:1922
+#: htdocs/luci-static/resources/view/fchomo/node.js:1946
msgid "Generate"
msgstr "生成"
@@ -1326,17 +1343,17 @@ msgstr "组"
#: htdocs/luci-static/resources/fchomo.js:154
#: htdocs/luci-static/resources/fchomo.js:191
-#: htdocs/luci-static/resources/fchomo/listeners.js:665
+#: htdocs/luci-static/resources/fchomo/listeners.js:669
#: htdocs/luci-static/resources/view/fchomo/node.js:996
-#: htdocs/luci-static/resources/view/fchomo/node.js:1333
-#: htdocs/luci-static/resources/view/fchomo/node.js:1346
-#: htdocs/luci-static/resources/view/fchomo/node.js:1353
+#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1377
msgid "HTTP"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:316
-#: htdocs/luci-static/resources/view/fchomo/node.js:1408
-#: htdocs/luci-static/resources/view/fchomo/node.js:1934
+#: htdocs/luci-static/resources/view/fchomo/node.js:1432
+#: htdocs/luci-static/resources/view/fchomo/node.js:1958
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:419
msgid "HTTP header"
msgstr "HTTP header"
@@ -1362,7 +1379,7 @@ msgstr "HTTP 伪装多路复用"
msgid "HTTP mask: %s"
msgstr "HTTP 伪装: %s"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1385
+#: htdocs/luci-static/resources/view/fchomo/node.js:1409
msgid "HTTP request method"
msgstr "HTTP 请求方法"
@@ -1381,9 +1398,9 @@ msgid ""
"returned if empty."
msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1334
-#: htdocs/luci-static/resources/view/fchomo/node.js:1347
-#: htdocs/luci-static/resources/view/fchomo/node.js:1354
+#: htdocs/luci-static/resources/view/fchomo/node.js:1358
+#: htdocs/luci-static/resources/view/fchomo/node.js:1371
+#: htdocs/luci-static/resources/view/fchomo/node.js:1378
msgid "HTTPUpgrade"
msgstr ""
@@ -1395,11 +1412,11 @@ msgstr "处理域名"
msgid "Handshake mode"
msgstr "握手模式"
-#: htdocs/luci-static/resources/fchomo/listeners.js:712
+#: htdocs/luci-static/resources/fchomo/listeners.js:716
msgid "Handshake target proxy"
msgstr "握手目标代理"
-#: htdocs/luci-static/resources/fchomo/listeners.js:677
+#: htdocs/luci-static/resources/fchomo/listeners.js:681
msgid "Handshake target that supports TLS 1.3"
msgstr "握手目标 (支援 TLS 1.3)"
@@ -1417,27 +1434,27 @@ msgid "Health check"
msgstr "健康检查"
#: htdocs/luci-static/resources/view/fchomo/client.js:1156
-#: htdocs/luci-static/resources/view/fchomo/node.js:2061
+#: htdocs/luci-static/resources/view/fchomo/node.js:2085
msgid "Health check URL"
msgstr "健康检查 URL"
#: htdocs/luci-static/resources/view/fchomo/client.js:1185
-#: htdocs/luci-static/resources/view/fchomo/node.js:2091
+#: htdocs/luci-static/resources/view/fchomo/node.js:2115
msgid "Health check expected status"
msgstr "健康检查预期状态"
#: htdocs/luci-static/resources/view/fchomo/client.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:2071
+#: htdocs/luci-static/resources/view/fchomo/node.js:2095
msgid "Health check interval"
msgstr "健康检查间隔"
#: htdocs/luci-static/resources/view/fchomo/client.js:1172
-#: htdocs/luci-static/resources/view/fchomo/node.js:2078
+#: htdocs/luci-static/resources/view/fchomo/node.js:2102
msgid "Health check timeout"
msgstr "健康检查超时"
#: htdocs/luci-static/resources/view/fchomo/client.js:1044
-#: htdocs/luci-static/resources/view/fchomo/node.js:1766
+#: htdocs/luci-static/resources/view/fchomo/node.js:1790
msgid "Health fields"
msgstr "健康字段"
@@ -1450,7 +1467,7 @@ msgstr "心跳间隔"
msgid "Hidden"
msgstr "隐藏"
-#: htdocs/luci-static/resources/fchomo/listeners.js:670
+#: htdocs/luci-static/resources/fchomo/listeners.js:674
#: htdocs/luci-static/resources/view/fchomo/node.js:1001
msgid "Host that supports TLS 1.3"
msgstr "主机名称 (支援 TLS 1.3)"
@@ -1467,7 +1484,7 @@ msgstr "主机密钥算法"
msgid "Host/SNI override"
msgstr "主机/SNI 覆盖"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1030
+#: htdocs/luci-static/resources/fchomo/listeners.js:1034
#: htdocs/luci-static/resources/view/fchomo/node.js:1168
msgid ""
"Hostname that the client attempts to connect to at the start of the TLS "
@@ -1506,8 +1523,8 @@ msgstr ""
msgid "IP override"
msgstr "IP 覆写"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1628
-#: htdocs/luci-static/resources/view/fchomo/node.js:2047
+#: htdocs/luci-static/resources/view/fchomo/node.js:1652
+#: htdocs/luci-static/resources/view/fchomo/node.js:2071
msgid "IP version"
msgstr "IP 版本"
@@ -1568,8 +1585,8 @@ msgstr "导入"
#: htdocs/luci-static/resources/view/fchomo/client.js:1804
#: htdocs/luci-static/resources/view/fchomo/client.js:1839
#: htdocs/luci-static/resources/view/fchomo/client.js:1860
-#: htdocs/luci-static/resources/view/fchomo/node.js:1654
-#: htdocs/luci-static/resources/view/fchomo/node.js:1752
+#: htdocs/luci-static/resources/view/fchomo/node.js:1678
+#: htdocs/luci-static/resources/view/fchomo/node.js:1776
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:154
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:249
msgid "Import mihomo config"
@@ -1585,16 +1602,16 @@ msgstr "导入规则集链接"
#: htdocs/luci-static/resources/fchomo/listeners.js:472
#: htdocs/luci-static/resources/view/fchomo/node.js:683
#: htdocs/luci-static/resources/view/fchomo/node.js:689
-#: htdocs/luci-static/resources/view/fchomo/node.js:1999
-#: htdocs/luci-static/resources/view/fchomo/node.js:2005
+#: htdocs/luci-static/resources/view/fchomo/node.js:2023
+#: htdocs/luci-static/resources/view/fchomo/node.js:2029
msgid "In Mbps."
msgstr "单位为 Mbps。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:730
+#: htdocs/luci-static/resources/fchomo/listeners.js:734
msgid "In bps. 0 means no speed limit."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1842
+#: htdocs/luci-static/resources/view/fchomo/node.js:1866
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:392
msgid "In bytes. %s will be used if empty."
msgstr "单位为字节。留空则使用 %s。"
@@ -1607,11 +1624,11 @@ msgstr "单位为毫秒。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1173
#: htdocs/luci-static/resources/view/fchomo/client.js:1219
-#: htdocs/luci-static/resources/view/fchomo/node.js:2079
+#: htdocs/luci-static/resources/view/fchomo/node.js:2103
msgid "In millisecond. %s will be used if empty."
msgstr "单位为毫秒。留空则使用 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1477
+#: htdocs/luci-static/resources/view/fchomo/node.js:1501
msgid "In milliseconds."
msgstr "单位为毫秒。"
@@ -1620,7 +1637,7 @@ msgstr "单位为毫秒。"
#: htdocs/luci-static/resources/fchomo/listeners.js:619
#: htdocs/luci-static/resources/view/fchomo/node.js:587
#: htdocs/luci-static/resources/view/fchomo/node.js:594
-#: htdocs/luci-static/resources/view/fchomo/node.js:1424
+#: htdocs/luci-static/resources/view/fchomo/node.js:1448
msgid "In seconds."
msgstr "单位为秒。"
@@ -1629,8 +1646,8 @@ msgstr "单位为秒。"
#: htdocs/luci-static/resources/view/fchomo/global.js:451
#: htdocs/luci-static/resources/view/fchomo/global.js:536
#: htdocs/luci-static/resources/view/fchomo/node.js:677
-#: htdocs/luci-static/resources/view/fchomo/node.js:1848
-#: htdocs/luci-static/resources/view/fchomo/node.js:2072
+#: htdocs/luci-static/resources/view/fchomo/node.js:1872
+#: htdocs/luci-static/resources/view/fchomo/node.js:2096
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:398
msgid "In seconds. %s will be used if empty."
msgstr "单位为秒。留空则使用 %s。"
@@ -1641,7 +1658,7 @@ msgid ""
"connection timeout."
msgstr "单位为秒。配置后握手时不受外层连接超时影响。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:831
+#: htdocs/luci-static/resources/fchomo/listeners.js:835
#: htdocs/luci-static/resources/view/fchomo/node.js:1088
msgid ""
"In the order of one Padding-Length and one Padding-"
@@ -1684,7 +1701,7 @@ msgstr "引入所有代理节点。"
msgid "Info"
msgstr "信息"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1781
+#: htdocs/luci-static/resources/view/fchomo/node.js:1805
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:288
msgid "Inline"
msgstr "内嵌"
@@ -1693,15 +1710,33 @@ msgstr "内嵌"
msgid "Interface Control"
msgstr "接口控制"
+#: htdocs/luci-static/resources/fchomo/listeners.js:648
+#: htdocs/luci-static/resources/fchomo/listeners.js:659
+#: htdocs/luci-static/resources/fchomo/listeners.js:1096
+#: htdocs/luci-static/resources/fchomo/listeners.js:1210
+#: htdocs/luci-static/resources/view/fchomo/node.js:978
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+#: htdocs/luci-static/resources/view/fchomo/node.js:1311
+msgid "JLS"
+msgstr "JLS"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1321
+msgid "JLS password"
+msgstr "JLS 密码"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1316
+msgid "JLS username"
+msgstr "JLS 用户名"
+
#: htdocs/luci-static/resources/fchomo.js:53
#: htdocs/luci-static/resources/fchomo.js:60
#: htdocs/luci-static/resources/fchomo.js:174
#: htdocs/luci-static/resources/fchomo.js:379
-#: htdocs/luci-static/resources/view/fchomo/node.js:2021
+#: htdocs/luci-static/resources/view/fchomo/node.js:2045
msgid "Keep default"
msgstr "保持缺省"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1513
+#: htdocs/luci-static/resources/view/fchomo/node.js:1537
msgid "Keep-alive period"
msgstr "Keep-alive 周期"
@@ -1710,12 +1745,12 @@ msgstr "Keep-alive 周期"
msgid "Key"
msgstr "密钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1094
-#: htdocs/luci-static/resources/view/fchomo/node.js:1261
+#: htdocs/luci-static/resources/fchomo/listeners.js:1115
+#: htdocs/luci-static/resources/view/fchomo/node.js:1269
msgid "Key path"
msgstr "证书路径"
-#: htdocs/luci-static/resources/fchomo/listeners.js:850
+#: htdocs/luci-static/resources/fchomo/listeners.js:854
msgid "Keypairs"
msgstr "密钥对"
@@ -1727,14 +1762,14 @@ msgstr "密钥对"
#: htdocs/luci-static/resources/view/fchomo/client.js:1810
#: htdocs/luci-static/resources/view/fchomo/client.js:1866
#: htdocs/luci-static/resources/view/fchomo/node.js:245
-#: htdocs/luci-static/resources/view/fchomo/node.js:1769
-#: htdocs/luci-static/resources/view/fchomo/node.js:2140
+#: htdocs/luci-static/resources/view/fchomo/node.js:1793
+#: htdocs/luci-static/resources/view/fchomo/node.js:2164
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:267
msgid "Label"
msgstr "标签"
#: htdocs/luci-static/resources/view/fchomo/client.js:1179
-#: htdocs/luci-static/resources/view/fchomo/node.js:2085
+#: htdocs/luci-static/resources/view/fchomo/node.js:2109
msgid "Lazy"
msgstr "怠惰状态"
@@ -1763,8 +1798,8 @@ msgstr ""
msgid "Less compatibility and sometimes better performance."
msgstr "有时性能更好。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1036
-#: htdocs/luci-static/resources/view/fchomo/node.js:1174
+#: htdocs/luci-static/resources/fchomo/listeners.js:1040
+#: htdocs/luci-static/resources/view/fchomo/node.js:1182
msgid "List of supported application level protocols, in order of preference."
msgstr "支持的应用层协议协商列表,按顺序排列。"
@@ -1797,7 +1832,7 @@ msgstr "监听路由标记 (Fwmark)"
msgid "Load balance"
msgstr "负载均衡"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1779
+#: htdocs/luci-static/resources/view/fchomo/node.js:1803
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:286
msgid "Local"
msgstr "本地"
@@ -1885,7 +1920,7 @@ msgstr "匹配响应通过 ipcidr"
msgid "Match rule set."
msgstr "匹配规则集。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1430
+#: htdocs/luci-static/resources/view/fchomo/node.js:1454
msgid "Max Early Data"
msgstr "前置数据最大值"
@@ -1894,15 +1929,15 @@ msgstr "前置数据最大值"
msgid "Max UDP relay packet size"
msgstr "UDP 中继数据包最大尺寸"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1297
+#: htdocs/luci-static/resources/fchomo/listeners.js:1327
msgid "Max buffered posts"
msgstr "POST 最大缓冲"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1488
+#: htdocs/luci-static/resources/view/fchomo/node.js:1512
msgid "Max concurrency"
msgstr "最大并发"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1493
+#: htdocs/luci-static/resources/view/fchomo/node.js:1517
msgid "Max connections"
msgstr "最大连接数"
@@ -1915,8 +1950,8 @@ msgstr "最大失败次数"
msgid "Max download speed"
msgstr "最大下载速度"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1308
-#: htdocs/luci-static/resources/view/fchomo/node.js:1470
+#: htdocs/luci-static/resources/fchomo/listeners.js:1338
+#: htdocs/luci-static/resources/view/fchomo/node.js:1494
msgid "Max each POST bytes"
msgstr "POST 最大字节数"
@@ -1932,15 +1967,15 @@ msgstr "最大 Realms 总数"
msgid "Max realms per client IP"
msgstr "每客户端 IP 最大 Realms 总数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1503
+#: htdocs/luci-static/resources/view/fchomo/node.js:1527
msgid "Max request times"
msgstr "最大请求次数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1508
+#: htdocs/luci-static/resources/view/fchomo/node.js:1532
msgid "Max reusable seconds"
msgstr "最大可复用秒数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1498
+#: htdocs/luci-static/resources/view/fchomo/node.js:1522
msgid "Max reuse times"
msgstr "最大复用次数"
@@ -1949,12 +1984,12 @@ msgstr "最大复用次数"
msgid "Max upload speed"
msgstr "最大上传速度"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1534
-#: htdocs/luci-static/resources/view/fchomo/node.js:1554
+#: htdocs/luci-static/resources/view/fchomo/node.js:1558
+#: htdocs/luci-static/resources/view/fchomo/node.js:1578
msgid "Maximum connections"
msgstr "最大连接数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1552
+#: htdocs/luci-static/resources/view/fchomo/node.js:1576
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1974,7 +2009,7 @@ msgid ""
"rate."
msgstr "最大填充率必须大于等于最小填充率。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1551
+#: htdocs/luci-static/resources/view/fchomo/node.js:1575
msgid "Maximum streams"
msgstr "最大流数量"
@@ -1999,11 +2034,11 @@ msgstr "Mihomo 服务端"
msgid "Min of idle sessions to keep"
msgstr "要保留的最少闲置会话数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1476
+#: htdocs/luci-static/resources/view/fchomo/node.js:1500
msgid "Min posts interval"
msgstr "POST 请求最小间隔时间"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1543
+#: htdocs/luci-static/resources/view/fchomo/node.js:1567
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr "在打开新连接之前,连接中的最小多路复用流数量。"
@@ -2013,8 +2048,8 @@ msgstr "在打开新连接之前,连接中的最小多路复用流数量。"
msgid "Minimum padding rate"
msgstr "最小填充率"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1542
-#: htdocs/luci-static/resources/view/fchomo/node.js:1554
+#: htdocs/luci-static/resources/view/fchomo/node.js:1566
+#: htdocs/luci-static/resources/view/fchomo/node.js:1578
msgid "Minimum streams"
msgstr "最小流数量"
@@ -2031,8 +2066,8 @@ msgstr "混合 系统 TCP 栈和 gVisor UDP 栈。"
msgid "Mixed port"
msgstr "混合端口"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1315
-#: htdocs/luci-static/resources/view/fchomo/node.js:1520
+#: htdocs/luci-static/resources/fchomo/listeners.js:1345
+#: htdocs/luci-static/resources/view/fchomo/node.js:1544
msgid "Multiplex"
msgstr "多路复用"
@@ -2054,7 +2089,7 @@ msgstr "NOT"
msgid "Name of the Proxy group as outbound."
msgstr "出站代理组的名称。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1854
+#: htdocs/luci-static/resources/view/fchomo/node.js:1878
msgid "Name of the Proxy group to download provider."
msgstr "用于下载供应商订阅的代理组名称。"
@@ -2082,7 +2117,7 @@ msgstr ""
msgid "Network type"
msgstr "网络类型"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2023
+#: htdocs/luci-static/resources/view/fchomo/node.js:2047
msgid "No"
msgstr ""
@@ -2090,7 +2125,7 @@ msgstr ""
msgid "No Authentication IP ranges"
msgstr "无需认证的 IP 范围"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1292
+#: htdocs/luci-static/resources/fchomo/listeners.js:1322
msgid "No SSE header"
msgstr "无 SSE header"
@@ -2098,12 +2133,12 @@ msgstr "无 SSE header"
msgid "No add'l params"
msgstr "无附加参数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1460
+#: htdocs/luci-static/resources/view/fchomo/node.js:1484
msgid "No gRPC header"
msgstr "无 gRPC header"
#: htdocs/luci-static/resources/view/fchomo/client.js:1180
-#: htdocs/luci-static/resources/view/fchomo/node.js:2086
+#: htdocs/luci-static/resources/view/fchomo/node.js:2110
msgid "No testing is performed when this provider node is not in use."
msgstr "当此供应商的节点未使用时,不执行任何测试。"
@@ -2121,17 +2156,17 @@ msgid "Node"
msgstr "节点"
#: htdocs/luci-static/resources/view/fchomo/client.js:1242
-#: htdocs/luci-static/resources/view/fchomo/node.js:2106
+#: htdocs/luci-static/resources/view/fchomo/node.js:2130
msgid "Node exclude filter"
msgstr "排除节点"
#: htdocs/luci-static/resources/view/fchomo/client.js:1247
-#: htdocs/luci-static/resources/view/fchomo/node.js:2113
+#: htdocs/luci-static/resources/view/fchomo/node.js:2137
msgid "Node exclude type"
msgstr "排除节点类型"
#: htdocs/luci-static/resources/view/fchomo/client.js:1237
-#: htdocs/luci-static/resources/view/fchomo/node.js:2100
+#: htdocs/luci-static/resources/view/fchomo/node.js:2124
msgid "Node filter"
msgstr "过滤节点"
@@ -2159,7 +2194,7 @@ msgstr ""
msgid "ON"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:664
+#: htdocs/luci-static/resources/fchomo/listeners.js:668
#: htdocs/luci-static/resources/view/fchomo/node.js:995
msgid "Obfs Mode"
msgstr "Obfs 模式"
@@ -2197,7 +2232,7 @@ msgstr "混淆为%s"
msgid "One or more numbers in the range 0-63 separated by commas"
msgstr "0-63 范围内的一个或多个数字,以逗号分隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1024
+#: htdocs/luci-static/resources/fchomo/listeners.js:1028
msgid "Only applicable when %s are used as a frontend."
msgstr "仅当 %s 用作前端时适用。"
@@ -2222,7 +2257,7 @@ msgstr "运行模式"
msgid "Option is deprecated. Please use %s instead."
msgstr "该选项已弃用,请使用%s作为代替。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1971
+#: htdocs/luci-static/resources/view/fchomo/node.js:1995
msgid "Other configuration items"
msgstr "其他配置项"
@@ -2230,8 +2265,8 @@ msgstr "其他配置项"
msgid "Outbound"
msgstr "出站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1233
-#: htdocs/luci-static/resources/view/fchomo/node.js:2010
+#: htdocs/luci-static/resources/view/fchomo/node.js:1241
+#: htdocs/luci-static/resources/view/fchomo/node.js:2034
msgid "Override cert DNSName"
msgstr "覆盖证书 DNSName"
@@ -2241,7 +2276,7 @@ msgid "Override destination"
msgstr "覆盖目标地址"
#: htdocs/luci-static/resources/view/fchomo/client.js:1043
-#: htdocs/luci-static/resources/view/fchomo/node.js:1765
+#: htdocs/luci-static/resources/view/fchomo/node.js:1789
msgid "Override fields"
msgstr "覆盖字段"
@@ -2261,7 +2296,7 @@ msgstr "使用嗅探到的域名覆盖连接目标。"
msgid "Override the existing ECS in original request."
msgstr "覆盖原始请求中已有的 ECS。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1288
+#: htdocs/luci-static/resources/view/fchomo/node.js:1296
msgid "Overrides the domain name used for HTTPS record queries."
msgstr "覆盖用于 HTTPS 记录查询的域名。"
@@ -2269,11 +2304,11 @@ msgstr "覆盖用于 HTTPS 记录查询的域名。"
msgid "Overview"
msgstr "概览"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1387
+#: htdocs/luci-static/resources/view/fchomo/node.js:1411
msgid "POST"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1388
+#: htdocs/luci-static/resources/view/fchomo/node.js:1412
msgid "PUT"
msgstr ""
@@ -2281,7 +2316,7 @@ msgstr ""
msgid "Packet encoding"
msgstr "数据包编码"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1465
+#: htdocs/luci-static/resources/view/fchomo/node.js:1489
msgid "Padding bytes"
msgstr "填充字节"
@@ -2289,14 +2324,14 @@ msgstr "填充字节"
msgid "Padding scheme"
msgstr "填充方案"
-#: htdocs/luci-static/resources/fchomo/listeners.js:829
+#: htdocs/luci-static/resources/fchomo/listeners.js:833
#: htdocs/luci-static/resources/view/fchomo/node.js:1086
msgid "Paddings"
msgstr "填充 (Paddings)"
#: htdocs/luci-static/resources/fchomo/listeners.js:167
#: htdocs/luci-static/resources/fchomo/listeners.js:184
-#: htdocs/luci-static/resources/fchomo/listeners.js:691
+#: htdocs/luci-static/resources/fchomo/listeners.js:695
#: htdocs/luci-static/resources/view/fchomo/node.js:310
#: htdocs/luci-static/resources/view/fchomo/node.js:331
#: htdocs/luci-static/resources/view/fchomo/node.js:1014
@@ -2311,8 +2346,8 @@ msgstr "捆绑包路径"
msgid "Path in bundle: %s"
msgstr "在捆绑包%s中的路径"
-#: htdocs/luci-static/resources/fchomo/listeners.js:769
-#: htdocs/luci-static/resources/view/fchomo/node.js:1829
+#: htdocs/luci-static/resources/fchomo/listeners.js:773
+#: htdocs/luci-static/resources/view/fchomo/node.js:1853
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:373
msgid "Payload"
msgstr "Payload"
@@ -2354,8 +2389,8 @@ msgid ""
"standards."
msgstr "链接格式标准请参考 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1802
-#: htdocs/luci-static/resources/view/fchomo/node.js:1828
+#: htdocs/luci-static/resources/view/fchomo/node.js:1826
+#: htdocs/luci-static/resources/view/fchomo/node.js:1852
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:346
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:372
msgid ""
@@ -2370,7 +2405,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1533
#: htdocs/luci-static/resources/view/fchomo/client.js:1788
#: htdocs/luci-static/resources/view/fchomo/client.js:1840
-#: htdocs/luci-static/resources/view/fchomo/node.js:1655
+#: htdocs/luci-static/resources/view/fchomo/node.js:1679
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:155
msgid "Please type %s fields of mihomo config."
msgstr "请输入 mihomo 配置的 %s 字段。"
@@ -2385,7 +2420,7 @@ msgstr "插件"
msgid "Plugin fields"
msgstr "插件字段"
-#: htdocs/luci-static/resources/fchomo/listeners.js:643
+#: htdocs/luci-static/resources/fchomo/listeners.js:644
#: htdocs/luci-static/resources/view/fchomo/node.js:972
msgid "Plugin type"
msgstr "插件类型"
@@ -2422,7 +2457,7 @@ msgstr "端口池"
msgid "Pre-shared key"
msgstr "预共享密钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:967
+#: htdocs/luci-static/resources/fchomo/listeners.js:971
#: htdocs/luci-static/resources/view/fchomo/node.js:1121
msgid "Pre-shared key of rendezvous server"
msgstr "牵线服务器的预共享密钥"
@@ -2442,10 +2477,10 @@ msgstr "防止某些情况下的 ICMP 环回问题。Ping 不会显示实际延
#: htdocs/luci-static/resources/view/fchomo/global.js:760
#: htdocs/luci-static/resources/view/fchomo/global.js:777
-#: htdocs/luci-static/resources/view/fchomo/node.js:1616
-#: htdocs/luci-static/resources/view/fchomo/node.js:1623
-#: htdocs/luci-static/resources/view/fchomo/node.js:2035
-#: htdocs/luci-static/resources/view/fchomo/node.js:2042
+#: htdocs/luci-static/resources/view/fchomo/node.js:1640
+#: htdocs/luci-static/resources/view/fchomo/node.js:1647
+#: htdocs/luci-static/resources/view/fchomo/node.js:2059
+#: htdocs/luci-static/resources/view/fchomo/node.js:2066
msgid "Priority: Proxy Node > Global."
msgstr "优先级: 代理节点 > 全局。"
@@ -2462,7 +2497,7 @@ msgstr "密钥密码"
msgid "Private key"
msgstr "私钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:737
+#: htdocs/luci-static/resources/fchomo/listeners.js:741
msgid ""
"Probe the QUIC version of the handshake target during the first connection."
msgstr "在首次连接期间探测握手目标的 QUIC 版本。"
@@ -2471,12 +2506,12 @@ msgstr "在首次连接期间探测握手目标的 QUIC 版本。"
msgid "Process matching mode"
msgstr "进程匹配模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1961
+#: htdocs/luci-static/resources/view/fchomo/node.js:1985
msgid "Programmable replacement"
msgstr "可编程替换"
#: htdocs/luci-static/resources/view/fchomo/global.js:708
-#: htdocs/luci-static/resources/view/fchomo/node.js:1526
+#: htdocs/luci-static/resources/view/fchomo/node.js:1550
msgid "Protocol"
msgstr "协议"
@@ -2491,13 +2526,13 @@ msgid ""
msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1100
-#: htdocs/luci-static/resources/view/fchomo/node.js:1638
-#: htdocs/luci-static/resources/view/fchomo/node.js:1647
-#: htdocs/luci-static/resources/view/fchomo/node.js:2151
+#: htdocs/luci-static/resources/view/fchomo/node.js:1662
+#: htdocs/luci-static/resources/view/fchomo/node.js:1671
+#: htdocs/luci-static/resources/view/fchomo/node.js:2175
msgid "Provider"
msgstr "供应商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1835
+#: htdocs/luci-static/resources/view/fchomo/node.js:1859
msgid "Provider URL"
msgstr "供应商订阅 URL"
@@ -2520,19 +2555,19 @@ msgid "Proxy MAC-s"
msgstr "代理 MAC 地址"
#: htdocs/luci-static/resources/view/fchomo/node.js:222
-#: htdocs/luci-static/resources/view/fchomo/node.js:2150
+#: htdocs/luci-static/resources/view/fchomo/node.js:2174
msgid "Proxy Node"
msgstr "代理节点"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2126
-#: htdocs/luci-static/resources/view/fchomo/node.js:2135
+#: htdocs/luci-static/resources/view/fchomo/node.js:2150
+#: htdocs/luci-static/resources/view/fchomo/node.js:2159
msgid "Proxy chain"
msgstr "代理链"
#: htdocs/luci-static/resources/fchomo/listeners.js:585
#: htdocs/luci-static/resources/view/fchomo/client.js:801
#: htdocs/luci-static/resources/view/fchomo/client.js:1631
-#: htdocs/luci-static/resources/view/fchomo/node.js:1853
+#: htdocs/luci-static/resources/view/fchomo/node.js:1877
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:403
msgid "Proxy group"
msgstr "代理组"
@@ -2559,7 +2594,7 @@ msgstr ""
msgid "QUIC based 0-RTT"
msgstr "基于 QUIC 的 0-RTT"
-#: htdocs/luci-static/resources/fchomo/listeners.js:736
+#: htdocs/luci-static/resources/fchomo/listeners.js:740
msgid "QUIC version probe"
msgstr "QUIC 版本探测"
@@ -2573,34 +2608,35 @@ msgstr "QUIC 版本"
msgid "Quick Reload"
msgstr "快速重载"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1182
-#: htdocs/luci-static/resources/view/fchomo/node.js:1302
+#: htdocs/luci-static/resources/fchomo/listeners.js:1097
+#: htdocs/luci-static/resources/fchomo/listeners.js:1203
+#: htdocs/luci-static/resources/view/fchomo/node.js:1326
msgid "REALITY"
msgstr "REALITY"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1317
+#: htdocs/luci-static/resources/view/fchomo/node.js:1341
msgid "REALITY X25519MLKEM768 PQC support"
msgstr "REALITY X25519MLKEM768 后量子加密支持"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1219
+#: htdocs/luci-static/resources/fchomo/listeners.js:1249
msgid "REALITY certificate issued to"
msgstr "REALITY 证书颁发给"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1187
+#: htdocs/luci-static/resources/fchomo/listeners.js:1217
msgid "REALITY handshake server"
msgstr "REALITY 握手服务器"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1194
+#: htdocs/luci-static/resources/fchomo/listeners.js:1224
msgid "REALITY private key"
msgstr "REALITY 私钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1209
-#: htdocs/luci-static/resources/view/fchomo/node.js:1307
+#: htdocs/luci-static/resources/fchomo/listeners.js:1239
+#: htdocs/luci-static/resources/view/fchomo/node.js:1331
msgid "REALITY public key"
msgstr "REALITY 公钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1213
-#: htdocs/luci-static/resources/view/fchomo/node.js:1312
+#: htdocs/luci-static/resources/fchomo/listeners.js:1243
+#: htdocs/luci-static/resources/view/fchomo/node.js:1336
msgid "REALITY short ID"
msgstr "REALITY 标识符"
@@ -2610,8 +2646,8 @@ msgstr "REALITY 标识符"
msgid "REMATCH-NAME marking"
msgstr "REMATCH-NAME 打标"
-#: htdocs/luci-static/resources/fchomo/listeners.js:800
-#: htdocs/luci-static/resources/fchomo/listeners.js:819
+#: htdocs/luci-static/resources/fchomo/listeners.js:804
+#: htdocs/luci-static/resources/fchomo/listeners.js:823
#: htdocs/luci-static/resources/view/fchomo/node.js:1076
msgid "RTT"
msgstr ""
@@ -2628,12 +2664,12 @@ msgstr "留空将使用随机令牌。"
msgid "Randomized traffic characteristics"
msgstr "随机化流量特征"
-#: htdocs/luci-static/resources/fchomo/listeners.js:956
+#: htdocs/luci-static/resources/fchomo/listeners.js:960
#: htdocs/luci-static/resources/view/fchomo/node.js:1110
msgid "Realm"
msgstr "Realm"
-#: htdocs/luci-static/resources/fchomo/listeners.js:972
+#: htdocs/luci-static/resources/fchomo/listeners.js:976
#: htdocs/luci-static/resources/view/fchomo/node.js:1126
msgid "Realm ID"
msgstr "Realm ID"
@@ -2681,7 +2717,7 @@ msgstr "再路由"
msgid "Rematching routing rules"
msgstr "重新匹配路由规则"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1780
+#: htdocs/luci-static/resources/view/fchomo/node.js:1804
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:287
msgid "Remote"
msgstr "远程"
@@ -2696,23 +2732,23 @@ msgid "Remove"
msgstr "移除"
#: htdocs/luci-static/resources/fchomo.js:1739
-#: htdocs/luci-static/resources/view/fchomo/node.js:1756
-#: htdocs/luci-static/resources/view/fchomo/node.js:1758
+#: htdocs/luci-static/resources/view/fchomo/node.js:1780
+#: htdocs/luci-static/resources/view/fchomo/node.js:1782
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:259
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:261
msgid "Remove idles"
msgstr "移除闲置"
-#: htdocs/luci-static/resources/fchomo/listeners.js:961
+#: htdocs/luci-static/resources/fchomo/listeners.js:965
#: htdocs/luci-static/resources/view/fchomo/node.js:1115
msgid "Rendezvous server"
msgstr "牵线服务器"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1952
+#: htdocs/luci-static/resources/view/fchomo/node.js:1976
msgid "Replace name"
msgstr "名称替换"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1953
+#: htdocs/luci-static/resources/view/fchomo/node.js:1977
msgid "Replace node name."
msgstr "替换节点名称"
@@ -2720,9 +2756,9 @@ msgstr "替换节点名称"
msgid "Request"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1271
-#: htdocs/luci-static/resources/view/fchomo/node.js:1394
-#: htdocs/luci-static/resources/view/fchomo/node.js:1401
+#: htdocs/luci-static/resources/fchomo/listeners.js:1301
+#: htdocs/luci-static/resources/view/fchomo/node.js:1418
+#: htdocs/luci-static/resources/view/fchomo/node.js:1425
msgid "Request path"
msgstr "请求路径"
@@ -2739,7 +2775,7 @@ msgid "Require any"
msgstr ""
#: htdocs/luci-static/resources/fchomo.js:406
-#: htdocs/luci-static/resources/view/fchomo/node.js:1318
+#: htdocs/luci-static/resources/view/fchomo/node.js:1342
msgid "Requires server support."
msgstr "需要服务器支持。"
@@ -2751,7 +2787,12 @@ msgstr "保留字段字节"
msgid "Resources management"
msgstr "资源管理"
-#: htdocs/luci-static/resources/fchomo/listeners.js:705
+#: htdocs/luci-static/resources/fchomo/listeners.js:647
+#: htdocs/luci-static/resources/view/fchomo/node.js:977
+msgid "Restls"
+msgstr ""
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:709
#: htdocs/luci-static/resources/view/fchomo/node.js:1034
msgid "Restls script"
msgstr "Restls 剧本"
@@ -2790,8 +2831,8 @@ msgstr "路由 GFW 流量"
#: htdocs/luci-static/resources/fchomo/listeners.js:568
#: htdocs/luci-static/resources/view/fchomo/global.js:776
-#: htdocs/luci-static/resources/view/fchomo/node.js:1622
-#: htdocs/luci-static/resources/view/fchomo/node.js:2041
+#: htdocs/luci-static/resources/view/fchomo/node.js:1646
+#: htdocs/luci-static/resources/view/fchomo/node.js:2065
msgid "Routing mark (Fwmark)"
msgstr "路由标记 (Fwmark)"
@@ -2871,7 +2912,7 @@ msgstr ""
msgid "STUN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:978
+#: htdocs/luci-static/resources/fchomo/listeners.js:982
#: htdocs/luci-static/resources/view/fchomo/node.js:1132
msgid "STUN servers"
msgstr "STUN 服务器"
@@ -2927,9 +2968,9 @@ msgstr "同时向%s和%s发起查询。"
msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse."
msgstr "发送 300-600 秒的随机票证,以供客户端 0-RTT 重用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:800
-#: htdocs/luci-static/resources/fchomo/listeners.js:1080
-#: htdocs/luci-static/resources/fchomo/listeners.js:1095
+#: htdocs/luci-static/resources/fchomo/listeners.js:804
+#: htdocs/luci-static/resources/fchomo/listeners.js:1088
+#: htdocs/luci-static/resources/fchomo/listeners.js:1116
#: htdocs/luci-static/resources/view/fchomo/server.js:58
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:62
msgid "Server"
@@ -2939,9 +2980,9 @@ msgstr "服务端"
msgid "Server address"
msgstr "服务器地址"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1265
-#: htdocs/luci-static/resources/view/fchomo/node.js:1373
-#: htdocs/luci-static/resources/view/fchomo/node.js:1379
+#: htdocs/luci-static/resources/fchomo/listeners.js:1295
+#: htdocs/luci-static/resources/view/fchomo/node.js:1397
+#: htdocs/luci-static/resources/view/fchomo/node.js:1403
msgid "Server hostname"
msgstr "服务器主机名称"
@@ -2958,6 +2999,13 @@ msgstr "服务状态"
msgid "ShadowQUIC"
msgstr ""
+#: htdocs/luci-static/resources/fchomo/listeners.js:646
+#: htdocs/luci-static/resources/fchomo/listeners.js:656
+#: htdocs/luci-static/resources/view/fchomo/node.js:976
+#: htdocs/luci-static/resources/view/fchomo/node.js:986
+msgid "ShadowTLS"
+msgstr ""
+
#: htdocs/luci-static/resources/fchomo.js:157
#: htdocs/luci-static/resources/fchomo.js:193
msgid "Shadowsocks"
@@ -2978,7 +3026,7 @@ msgstr "Shadowsocks 加密"
msgid "Shadowsocks password"
msgstr "Shadowsocks 密码"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1574
+#: htdocs/luci-static/resources/view/fchomo/node.js:1598
msgid "Show connections in the dashboard for breaking connections easier."
msgstr "在面板中显示连接以便于打断连接。"
@@ -2990,14 +3038,14 @@ msgstr "静音"
msgid "Simple round-robin all nodes"
msgstr "简单轮替所有节点"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1841
+#: htdocs/luci-static/resources/view/fchomo/node.js:1865
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:391
msgid "Size limit"
msgstr "大小限制"
#: htdocs/luci-static/resources/view/fchomo/client.js:1667
-#: htdocs/luci-static/resources/view/fchomo/node.js:1239
-#: htdocs/luci-static/resources/view/fchomo/node.js:2016
+#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+#: htdocs/luci-static/resources/view/fchomo/node.js:2040
msgid "Skip cert verify"
msgstr "跳过证书验证"
@@ -3135,7 +3183,7 @@ msgstr "TCP"
msgid "TCP concurrency"
msgstr "TCP 并发"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1567
+#: htdocs/luci-static/resources/view/fchomo/node.js:1591
msgid "TCP only"
msgstr "仅 TCP"
@@ -3162,13 +3210,13 @@ msgstr "TCP-Keep-Alive 间隔"
msgid "TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1598
-#: htdocs/luci-static/resources/view/fchomo/node.js:1977
+#: htdocs/luci-static/resources/view/fchomo/node.js:1622
+#: htdocs/luci-static/resources/view/fchomo/node.js:2001
msgid "TFO"
msgstr "TCP 快速打开 (TFO)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:666
-#: htdocs/luci-static/resources/fchomo/listeners.js:988
+#: htdocs/luci-static/resources/fchomo/listeners.js:670
+#: htdocs/luci-static/resources/fchomo/listeners.js:992
#: htdocs/luci-static/resources/view/fchomo/global.js:550
#: htdocs/luci-static/resources/view/fchomo/node.js:455
#: htdocs/luci-static/resources/view/fchomo/node.js:997
@@ -3176,13 +3224,14 @@ msgstr "TCP 快速打开 (TFO)"
msgid "TLS"
msgstr "TLS"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1035
-#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+#: htdocs/luci-static/resources/fchomo/listeners.js:1039
+#: htdocs/luci-static/resources/view/fchomo/node.js:1181
msgid "TLS ALPN"
msgstr "TLS ALPN"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1029
+#: htdocs/luci-static/resources/fchomo/listeners.js:1033
#: htdocs/luci-static/resources/view/fchomo/node.js:1167
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
msgid "TLS SNI"
msgstr ""
@@ -3219,19 +3268,19 @@ msgstr "Cloudflare WARP 网络中使用的本机 %s 地址。"
msgid "The %s address used by local machine in the Wireguard network."
msgstr "WireGuard 网络中使用的本机 %s 地址。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1095
-#: htdocs/luci-static/resources/view/fchomo/node.js:1262
+#: htdocs/luci-static/resources/fchomo/listeners.js:1116
+#: htdocs/luci-static/resources/view/fchomo/node.js:1270
msgid "The %s private key, in PEM format."
msgstr "%s私钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1080
-#: htdocs/luci-static/resources/fchomo/listeners.js:1118
+#: htdocs/luci-static/resources/fchomo/listeners.js:1088
+#: htdocs/luci-static/resources/fchomo/listeners.js:1139
#: htdocs/luci-static/resources/view/fchomo/global.js:571
-#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+#: htdocs/luci-static/resources/view/fchomo/node.js:1256
msgid "The %s public key, in PEM format."
msgstr "%s公钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1282
+#: htdocs/luci-static/resources/view/fchomo/node.js:1290
msgid ""
"The ECH parameter of the HTTPS record for the domain. Leave empty to resolve "
"via DNS."
@@ -3255,7 +3304,7 @@ msgid ""
"connection timeout is used."
msgstr "默认值为%s,表示仅使用外层连接超时。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:832
+#: htdocs/luci-static/resources/fchomo/listeners.js:836
#: htdocs/luci-static/resources/view/fchomo/node.js:1089
msgid ""
"The first padding must have a probability of 100% and at least 35 bytes."
@@ -3271,23 +3320,23 @@ msgstr "匹配 %s 的将被视为未被投毒污染。"
msgid "The matching %s will be deemed as poisoned."
msgstr "匹配 %s 的将被视为已被投毒污染。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:713
+#: htdocs/luci-static/resources/fchomo/listeners.js:717
msgid "The proxy used to connect to the handshake target."
msgstr "用于连接握手目标的代理。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:830
+#: htdocs/luci-static/resources/fchomo/listeners.js:834
#: htdocs/luci-static/resources/view/fchomo/node.js:1087
msgid "The server and client can set different padding parameters."
msgstr "服务器和客户端可以设置不同的填充参数。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1176
+#: htdocs/luci-static/resources/fchomo/listeners.js:1197
#: htdocs/luci-static/resources/view/fchomo/global.js:615
msgid "This ECH parameter needs to be added to the HTTPS record of the domain."
msgstr "此 ECH 参数需要添加到域名的 HTTPS 记录中。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1670
-#: htdocs/luci-static/resources/view/fchomo/node.js:1242
-#: htdocs/luci-static/resources/view/fchomo/node.js:2019
+#: htdocs/luci-static/resources/view/fchomo/node.js:1250
+#: htdocs/luci-static/resources/view/fchomo/node.js:2043
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
@@ -3331,18 +3380,18 @@ msgstr "Tproxy 端口"
msgid "Traffic pattern"
msgstr "流量模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2188
+#: htdocs/luci-static/resources/view/fchomo/node.js:2212
msgid "Transit proxy group"
msgstr "中转代理组"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2199
+#: htdocs/luci-static/resources/view/fchomo/node.js:2223
msgid "Transit proxy node"
msgstr "中转代理节点"
#: htdocs/luci-static/resources/fchomo/listeners.js:194
-#: htdocs/luci-static/resources/fchomo/listeners.js:1229
+#: htdocs/luci-static/resources/fchomo/listeners.js:1259
#: htdocs/luci-static/resources/view/fchomo/node.js:346
-#: htdocs/luci-static/resources/view/fchomo/node.js:1326
+#: htdocs/luci-static/resources/view/fchomo/node.js:1350
msgid "Transport"
msgstr "传输层"
@@ -3351,8 +3400,8 @@ msgstr "传输层"
msgid "Transport fields"
msgstr "传输层字段"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1234
-#: htdocs/luci-static/resources/view/fchomo/node.js:1331
+#: htdocs/luci-static/resources/fchomo/listeners.js:1264
+#: htdocs/luci-static/resources/view/fchomo/node.js:1355
msgid "Transport type"
msgstr "传输层类型"
@@ -3401,8 +3450,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:863
#: htdocs/luci-static/resources/view/fchomo/client.js:1061
#: htdocs/luci-static/resources/view/fchomo/node.js:254
-#: htdocs/luci-static/resources/view/fchomo/node.js:1778
-#: htdocs/luci-static/resources/view/fchomo/node.js:2149
+#: htdocs/luci-static/resources/view/fchomo/node.js:1802
+#: htdocs/luci-static/resources/view/fchomo/node.js:2173
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:285
msgid "Type"
msgstr "类型"
@@ -3420,7 +3469,7 @@ msgstr "类型"
#: htdocs/luci-static/resources/view/fchomo/client.js:605
#: htdocs/luci-static/resources/view/fchomo/client.js:697
#: htdocs/luci-static/resources/view/fchomo/node.js:947
-#: htdocs/luci-static/resources/view/fchomo/node.js:1987
+#: htdocs/luci-static/resources/view/fchomo/node.js:2011
msgid "UDP"
msgstr "UDP"
@@ -3490,7 +3539,7 @@ msgid "Unknown error: %s"
msgstr "未知错误:%s"
#: htdocs/luci-static/resources/view/fchomo/node.js:953
-#: htdocs/luci-static/resources/view/fchomo/node.js:1992
+#: htdocs/luci-static/resources/view/fchomo/node.js:2016
msgid "UoT"
msgstr "UDP over TCP (UoT)"
@@ -3498,24 +3547,24 @@ msgstr "UDP over TCP (UoT)"
msgid "Update failed."
msgstr "更新失败。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1847
+#: htdocs/luci-static/resources/view/fchomo/node.js:1871
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:397
msgid "Update interval"
msgstr "更新间隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1331
-#: htdocs/luci-static/resources/view/fchomo/node.js:1585
+#: htdocs/luci-static/resources/fchomo/listeners.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1609
msgid "Upload bandwidth"
msgstr "上传带宽"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1332
-#: htdocs/luci-static/resources/view/fchomo/node.js:1586
+#: htdocs/luci-static/resources/fchomo/listeners.js:1362
+#: htdocs/luci-static/resources/view/fchomo/node.js:1610
msgid "Upload bandwidth in Mbps."
msgstr "上传带宽(单位:Mbps)。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1086
-#: htdocs/luci-static/resources/fchomo/listeners.js:1126
-#: htdocs/luci-static/resources/view/fchomo/node.js:1253
+#: htdocs/luci-static/resources/fchomo/listeners.js:1107
+#: htdocs/luci-static/resources/fchomo/listeners.js:1147
+#: htdocs/luci-static/resources/view/fchomo/node.js:1261
msgid "Upload certificate"
msgstr "上传证书"
@@ -3523,17 +3572,17 @@ msgstr "上传证书"
msgid "Upload initial package"
msgstr "上传初始资源包"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1101
-#: htdocs/luci-static/resources/view/fchomo/node.js:1267
+#: htdocs/luci-static/resources/fchomo/listeners.js:1122
+#: htdocs/luci-static/resources/view/fchomo/node.js:1275
msgid "Upload key"
msgstr "上传密钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1089
-#: htdocs/luci-static/resources/fchomo/listeners.js:1104
-#: htdocs/luci-static/resources/fchomo/listeners.js:1129
+#: htdocs/luci-static/resources/fchomo/listeners.js:1110
+#: htdocs/luci-static/resources/fchomo/listeners.js:1125
+#: htdocs/luci-static/resources/fchomo/listeners.js:1150
#: htdocs/luci-static/resources/view/fchomo/global.js:306
-#: htdocs/luci-static/resources/view/fchomo/node.js:1256
-#: htdocs/luci-static/resources/view/fchomo/node.js:1270
+#: htdocs/luci-static/resources/view/fchomo/node.js:1264
+#: htdocs/luci-static/resources/view/fchomo/node.js:1278
msgid "Upload..."
msgstr "上传..."
@@ -3563,8 +3612,8 @@ msgstr "用于解析 DNS 服务器的域名。必须是 IP。"
msgid "Used to resolve the domain of the Proxy node."
msgstr "用于解析代理节点的域名。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1234
-#: htdocs/luci-static/resources/view/fchomo/node.js:2011
+#: htdocs/luci-static/resources/view/fchomo/node.js:1242
+#: htdocs/luci-static/resources/view/fchomo/node.js:2035
msgid "Used to verify the hostname on the returned certificates."
msgstr "用于验证返回的证书上的主机名。"
@@ -3577,7 +3626,7 @@ msgid "User-hint is mandatory"
msgstr "User-hint 是必填项"
#: htdocs/luci-static/resources/fchomo/listeners.js:162
-#: htdocs/luci-static/resources/fchomo/listeners.js:685
+#: htdocs/luci-static/resources/fchomo/listeners.js:689
#: htdocs/luci-static/resources/view/fchomo/node.js:305
#: htdocs/luci-static/resources/view/fchomo/node.js:1008
msgid "Username"
@@ -3587,11 +3636,11 @@ msgstr "用户名"
msgid "Users filter mode"
msgstr "使用者过滤模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1442
+#: htdocs/luci-static/resources/view/fchomo/node.js:1466
msgid "V2ray HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1447
+#: htdocs/luci-static/resources/view/fchomo/node.js:1471
msgid "V2ray HTTPUpgrade fast open"
msgstr ""
@@ -3605,8 +3654,8 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1784
-#: htdocs/luci-static/resources/view/fchomo/node.js:2155
+#: htdocs/luci-static/resources/view/fchomo/node.js:1808
+#: htdocs/luci-static/resources/view/fchomo/node.js:2179
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:328
msgid "Value"
msgstr "可视化值"
@@ -3616,7 +3665,7 @@ msgid "Verify if given"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:384
-#: htdocs/luci-static/resources/fchomo/listeners.js:697
+#: htdocs/luci-static/resources/fchomo/listeners.js:701
#: htdocs/luci-static/resources/view/fchomo/node.js:497
#: htdocs/luci-static/resources/view/fchomo/node.js:1020
msgid "Version"
@@ -3640,15 +3689,15 @@ msgid "Warning"
msgstr "警告"
#: htdocs/luci-static/resources/fchomo/listeners.js:362
-#: htdocs/luci-static/resources/fchomo/listeners.js:1236
-#: htdocs/luci-static/resources/fchomo/listeners.js:1247
-#: htdocs/luci-static/resources/fchomo/listeners.js:1254
+#: htdocs/luci-static/resources/fchomo/listeners.js:1266
+#: htdocs/luci-static/resources/fchomo/listeners.js:1277
+#: htdocs/luci-static/resources/fchomo/listeners.js:1284
#: htdocs/luci-static/resources/view/fchomo/node.js:451
#: htdocs/luci-static/resources/view/fchomo/node.js:480
-#: htdocs/luci-static/resources/view/fchomo/node.js:1336
-#: htdocs/luci-static/resources/view/fchomo/node.js:1349
-#: htdocs/luci-static/resources/view/fchomo/node.js:1356
-#: htdocs/luci-static/resources/view/fchomo/node.js:1362
+#: htdocs/luci-static/resources/view/fchomo/node.js:1360
+#: htdocs/luci-static/resources/view/fchomo/node.js:1373
+#: htdocs/luci-static/resources/view/fchomo/node.js:1380
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
msgid "WebSocket"
msgstr ""
@@ -3676,32 +3725,32 @@ msgstr "WireGuard 预共享密钥。"
msgid "WireGuard requires base64-encoded private keys."
msgstr "WireGuard 要求 base64 编码的私钥。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1237
-#: htdocs/luci-static/resources/fchomo/listeners.js:1248
-#: htdocs/luci-static/resources/view/fchomo/node.js:1337
-#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/fchomo/listeners.js:1267
+#: htdocs/luci-static/resources/fchomo/listeners.js:1278
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1381
msgid "XHTTP"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1284
-#: htdocs/luci-static/resources/view/fchomo/node.js:1452
+#: htdocs/luci-static/resources/fchomo/listeners.js:1314
+#: htdocs/luci-static/resources/view/fchomo/node.js:1476
msgid "XHTTP mode"
msgstr "XHTTP 模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1483
+#: htdocs/luci-static/resources/view/fchomo/node.js:1507
msgid "XMUX"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1488
-#: htdocs/luci-static/resources/view/fchomo/node.js:1493
-#: htdocs/luci-static/resources/view/fchomo/node.js:1498
-#: htdocs/luci-static/resources/view/fchomo/node.js:1503
-#: htdocs/luci-static/resources/view/fchomo/node.js:1508
-#: htdocs/luci-static/resources/view/fchomo/node.js:1513
+#: htdocs/luci-static/resources/view/fchomo/node.js:1512
+#: htdocs/luci-static/resources/view/fchomo/node.js:1517
+#: htdocs/luci-static/resources/view/fchomo/node.js:1522
+#: htdocs/luci-static/resources/view/fchomo/node.js:1527
+#: htdocs/luci-static/resources/view/fchomo/node.js:1532
+#: htdocs/luci-static/resources/view/fchomo/node.js:1537
msgid "XMUX:"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:791
+#: htdocs/luci-static/resources/fchomo/listeners.js:795
msgid "XOR mode"
msgstr "XOR 模式"
@@ -3713,7 +3762,7 @@ msgstr ""
msgid "Yaml text"
msgstr "Yaml 格式文本"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2022
+#: htdocs/luci-static/resources/view/fchomo/node.js:2046
msgid "Yes"
msgstr ""
@@ -3741,11 +3790,11 @@ msgstr ""
msgid "aes-256-gcm"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1869
+#: htdocs/luci-static/resources/view/fchomo/node.js:1893
msgid "age private key"
msgstr "age 私钥"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1930
+#: htdocs/luci-static/resources/view/fchomo/node.js:1954
msgid "age public key"
msgstr "age 公钥"
@@ -3765,9 +3814,9 @@ msgstr "自动"
msgid "bbr"
msgstr "bbr"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1091
-#: htdocs/luci-static/resources/fchomo/listeners.js:1131
-#: htdocs/luci-static/resources/view/fchomo/node.js:1258
+#: htdocs/luci-static/resources/fchomo/listeners.js:1112
+#: htdocs/luci-static/resources/fchomo/listeners.js:1152
+#: htdocs/luci-static/resources/view/fchomo/node.js:1266
msgid "certificate"
msgstr "证书"
@@ -3785,8 +3834,8 @@ msgstr ""
msgid "cubic"
msgstr "cubic"
-#: htdocs/luci-static/resources/fchomo/listeners.js:743
-#: htdocs/luci-static/resources/fchomo/listeners.js:774
+#: htdocs/luci-static/resources/fchomo/listeners.js:747
+#: htdocs/luci-static/resources/fchomo/listeners.js:778
msgid "decryption"
msgstr "decryption"
@@ -3794,11 +3843,11 @@ msgstr "decryption"
msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)"
msgstr "dnsmasq 自行选择上游服务器。 (可能影响 CDN 准确性)"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2004
+#: htdocs/luci-static/resources/view/fchomo/node.js:2028
msgid "down"
msgstr "Hysteria 下载速率"
-#: htdocs/luci-static/resources/fchomo/listeners.js:778
+#: htdocs/luci-static/resources/fchomo/listeners.js:782
#: htdocs/luci-static/resources/view/fchomo/node.js:1041
#: htdocs/luci-static/resources/view/fchomo/node.js:1064
msgid "encryption"
@@ -3809,26 +3858,26 @@ msgstr "encryption"
msgid "false = bandwidth optimized downlink; true = pure Sudoku downlink."
msgstr "false = 带宽优化下行 true = 纯 Sudoku 下行。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1235
-#: htdocs/luci-static/resources/fchomo/listeners.js:1246
-#: htdocs/luci-static/resources/fchomo/listeners.js:1253
-#: htdocs/luci-static/resources/view/fchomo/node.js:1335
-#: htdocs/luci-static/resources/view/fchomo/node.js:1348
-#: htdocs/luci-static/resources/view/fchomo/node.js:1355
-#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/fchomo/listeners.js:1265
+#: htdocs/luci-static/resources/fchomo/listeners.js:1276
+#: htdocs/luci-static/resources/fchomo/listeners.js:1283
+#: htdocs/luci-static/resources/view/fchomo/node.js:1359
+#: htdocs/luci-static/resources/view/fchomo/node.js:1372
+#: htdocs/luci-static/resources/view/fchomo/node.js:1379
+#: htdocs/luci-static/resources/view/fchomo/node.js:1385
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1418
+#: htdocs/luci-static/resources/view/fchomo/node.js:1442
msgid "gRPC User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1423
+#: htdocs/luci-static/resources/view/fchomo/node.js:1447
msgid "gRPC ping interval"
msgstr "gRPC ping 间隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1278
-#: htdocs/luci-static/resources/view/fchomo/node.js:1414
+#: htdocs/luci-static/resources/fchomo/listeners.js:1308
+#: htdocs/luci-static/resources/view/fchomo/node.js:1438
msgid "gRPC service name"
msgstr "gRPC 服务名称"
@@ -3840,7 +3889,7 @@ msgstr "gVisor"
msgid "h2"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1530
+#: htdocs/luci-static/resources/view/fchomo/node.js:1554
msgid "h2mux"
msgstr ""
@@ -3852,12 +3901,7 @@ msgstr ""
msgid "h3-l4proxy"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:647
-#: htdocs/luci-static/resources/view/fchomo/node.js:978
-msgid "jls"
-msgstr ""
-
-#: htdocs/luci-static/resources/fchomo/listeners.js:943
+#: htdocs/luci-static/resources/fchomo/listeners.js:947
msgid "least one keypair required"
msgstr "至少需要一对密钥"
@@ -3871,7 +3915,7 @@ msgstr "metacubexd"
#: htdocs/luci-static/resources/view/fchomo/client.js:1568
#: htdocs/luci-static/resources/view/fchomo/client.js:1802
#: htdocs/luci-static/resources/view/fchomo/client.js:1858
-#: htdocs/luci-static/resources/view/fchomo/node.js:1750
+#: htdocs/luci-static/resources/view/fchomo/node.js:1774
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:247
msgid "mihomo config"
msgstr "mihomo 配置"
@@ -3880,8 +3924,8 @@ msgstr "mihomo 配置"
msgid "mlkem768x25519plus"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1603
-#: htdocs/luci-static/resources/view/fchomo/node.js:1982
+#: htdocs/luci-static/resources/view/fchomo/node.js:1627
+#: htdocs/luci-static/resources/view/fchomo/node.js:2006
msgid "mpTCP"
msgstr "多路径 TCP (mpTCP)"
@@ -3923,8 +3967,8 @@ msgstr "不包含 \",\""
msgid "null"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:644
-#: htdocs/luci-static/resources/fchomo/listeners.js:654
+#: htdocs/luci-static/resources/fchomo/listeners.js:645
+#: htdocs/luci-static/resources/fchomo/listeners.js:655
#: htdocs/luci-static/resources/view/fchomo/node.js:973
#: htdocs/luci-static/resources/view/fchomo/node.js:985
msgid "obfs-simple"
@@ -3938,11 +3982,11 @@ msgstr "仅当 %s 为 %s 时适用。"
msgid "only applies when %s is not %s."
msgstr "仅当 %s 不为 %s 时适用。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1963
+#: htdocs/luci-static/resources/view/fchomo/node.js:1987
msgid "override.override-expr"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1955
+#: htdocs/luci-static/resources/view/fchomo/node.js:1979
msgid "override.proxy-name"
msgstr ""
@@ -3950,8 +3994,8 @@ msgstr ""
msgid "packet addr (v2ray-core v5+)"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1288
-#: htdocs/luci-static/resources/view/fchomo/node.js:1456
+#: htdocs/luci-static/resources/fchomo/listeners.js:1318
+#: htdocs/luci-static/resources/view/fchomo/node.js:1480
msgid "packet-up"
msgstr ""
@@ -3960,8 +4004,8 @@ msgstr ""
msgid "poll"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1106
-#: htdocs/luci-static/resources/view/fchomo/node.js:1272
+#: htdocs/luci-static/resources/fchomo/listeners.js:1127
+#: htdocs/luci-static/resources/view/fchomo/node.js:1280
msgid "private key"
msgstr "私钥"
@@ -3974,23 +4018,11 @@ msgstr "razord-meta"
msgid "requires front-end adaptation using the API."
msgstr "需要使用 API 的前端适配。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:646
-#: htdocs/luci-static/resources/view/fchomo/node.js:977
-msgid "restls"
-msgstr ""
-
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:232
msgid "rule-set"
msgstr "规则集"
-#: htdocs/luci-static/resources/fchomo/listeners.js:645
-#: htdocs/luci-static/resources/fchomo/listeners.js:655
-#: htdocs/luci-static/resources/view/fchomo/node.js:976
-#: htdocs/luci-static/resources/view/fchomo/node.js:986
-msgid "shadow-tls"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/fchomo/node.js:1528
+#: htdocs/luci-static/resources/view/fchomo/node.js:1552
msgid "smux"
msgstr ""
@@ -4003,17 +4035,17 @@ msgstr ""
msgid "src"
msgstr "src"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1286
-#: htdocs/luci-static/resources/view/fchomo/node.js:1454
+#: htdocs/luci-static/resources/fchomo/listeners.js:1316
+#: htdocs/luci-static/resources/view/fchomo/node.js:1478
msgid "stream-one"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1287
-#: htdocs/luci-static/resources/view/fchomo/node.js:1455
+#: htdocs/luci-static/resources/fchomo/listeners.js:1317
+#: htdocs/luci-static/resources/view/fchomo/node.js:1479
msgid "stream-up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1303
+#: htdocs/luci-static/resources/fchomo/listeners.js:1333
msgid "stream-up server seconds"
msgstr ""
@@ -4041,12 +4073,12 @@ msgstr "独立标识"
msgid "unique value"
msgstr "独立值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1998
+#: htdocs/luci-static/resources/view/fchomo/node.js:2022
msgid "up"
msgstr "Hysteria 上传速率"
#: htdocs/luci-static/resources/fchomo/listeners.js:385
-#: htdocs/luci-static/resources/fchomo/listeners.js:698
+#: htdocs/luci-static/resources/fchomo/listeners.js:702
#: htdocs/luci-static/resources/view/fchomo/node.js:498
#: htdocs/luci-static/resources/view/fchomo/node.js:634
#: htdocs/luci-static/resources/view/fchomo/node.js:960
@@ -4055,7 +4087,7 @@ msgid "v1"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:386
-#: htdocs/luci-static/resources/fchomo/listeners.js:699
+#: htdocs/luci-static/resources/fchomo/listeners.js:703
#: htdocs/luci-static/resources/view/fchomo/node.js:499
#: htdocs/luci-static/resources/view/fchomo/node.js:961
#: htdocs/luci-static/resources/view/fchomo/node.js:1022
@@ -4063,7 +4095,7 @@ msgid "v2"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:387
-#: htdocs/luci-static/resources/fchomo/listeners.js:700
+#: htdocs/luci-static/resources/fchomo/listeners.js:704
#: htdocs/luci-static/resources/view/fchomo/node.js:500
#: htdocs/luci-static/resources/view/fchomo/node.js:1023
msgid "v3"
@@ -4084,7 +4116,7 @@ msgstr ""
msgid "valid JSON format"
msgstr "有效的 JSON 格式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1226
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
msgid "valid SHA256 string with %d characters"
msgstr "包含 %d 个字符的有效 SHA256 字符串"
@@ -4130,7 +4162,7 @@ msgstr ""
msgid "yacd-meta"
msgstr "yacd-meta"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1529
+#: htdocs/luci-static/resources/view/fchomo/node.js:1553
msgid "yamux"
msgstr ""
diff --git a/luci-app-fchomo/po/zh_Hant/fchomo.po b/luci-app-fchomo/po/zh_Hant/fchomo.po
index 2d7858cd..c5e71415 100644
--- a/luci-app-fchomo/po/zh_Hant/fchomo.po
+++ b/luci-app-fchomo/po/zh_Hant/fchomo.po
@@ -27,15 +27,15 @@ msgstr "%s 連接埠"
msgid "(Imported)"
msgstr "(已導入)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1109
-#: htdocs/luci-static/resources/fchomo/listeners.js:1117
-#: htdocs/luci-static/resources/fchomo/listeners.js:1126
+#: htdocs/luci-static/resources/fchomo/listeners.js:1130
+#: htdocs/luci-static/resources/fchomo/listeners.js:1138
+#: htdocs/luci-static/resources/fchomo/listeners.js:1147
#: htdocs/luci-static/resources/view/fchomo/global.js:564
#: htdocs/luci-static/resources/view/fchomo/global.js:570
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
-#: htdocs/luci-static/resources/view/fchomo/node.js:1253
+#: htdocs/luci-static/resources/view/fchomo/node.js:1255
#: htdocs/luci-static/resources/view/fchomo/node.js:1261
-#: htdocs/luci-static/resources/view/fchomo/node.js:1267
+#: htdocs/luci-static/resources/view/fchomo/node.js:1269
+#: htdocs/luci-static/resources/view/fchomo/node.js:1275
msgid "(mTLS)"
msgstr ""
@@ -62,10 +62,10 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1105
#: htdocs/luci-static/resources/view/fchomo/client.js:1361
#: htdocs/luci-static/resources/view/fchomo/node.js:288
-#: htdocs/luci-static/resources/view/fchomo/node.js:2161
-#: htdocs/luci-static/resources/view/fchomo/node.js:2172
-#: htdocs/luci-static/resources/view/fchomo/node.js:2191
-#: htdocs/luci-static/resources/view/fchomo/node.js:2202
+#: htdocs/luci-static/resources/view/fchomo/node.js:2185
+#: htdocs/luci-static/resources/view/fchomo/node.js:2196
+#: htdocs/luci-static/resources/view/fchomo/node.js:2215
+#: htdocs/luci-static/resources/view/fchomo/node.js:2226
msgid "-- Please choose --"
msgstr "-- 請選擇 --"
@@ -110,11 +110,11 @@ msgstr ""
msgid "0 or 1 only."
msgstr "僅限 0 或 1。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1087
-#: htdocs/luci-static/resources/fchomo/listeners.js:1102
-#: htdocs/luci-static/resources/fchomo/listeners.js:1127
-#: htdocs/luci-static/resources/view/fchomo/node.js:1254
-#: htdocs/luci-static/resources/view/fchomo/node.js:1268
+#: htdocs/luci-static/resources/fchomo/listeners.js:1108
+#: htdocs/luci-static/resources/fchomo/listeners.js:1123
+#: htdocs/luci-static/resources/fchomo/listeners.js:1148
+#: htdocs/luci-static/resources/view/fchomo/node.js:1262
+#: htdocs/luci-static/resources/view/fchomo/node.js:1276
msgid "Save your configuration before uploading files!"
msgstr "上傳文件前請先保存配置!"
@@ -214,11 +214,11 @@ msgstr "新增 節點"
msgid "Add a inbound"
msgstr "新增 入站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1647
+#: htdocs/luci-static/resources/view/fchomo/node.js:1671
msgid "Add a provider"
msgstr "新增 供應商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2135
+#: htdocs/luci-static/resources/view/fchomo/node.js:2159
msgid "Add a proxy chain"
msgstr "新增 代理鏈"
@@ -242,11 +242,11 @@ msgstr "新增 伺服器"
msgid "Add a sub rule"
msgstr "新增 子規則"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1944
+#: htdocs/luci-static/resources/view/fchomo/node.js:1968
msgid "Add prefix"
msgstr "添加前綴"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1948
+#: htdocs/luci-static/resources/view/fchomo/node.js:1972
msgid "Add suffix"
msgstr "添加後綴"
@@ -287,7 +287,7 @@ msgid ""
msgstr ""
"允許從私有網路訪問。要從公共網站訪問私有網路上的 API,則必須啟用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1023
+#: htdocs/luci-static/resources/fchomo/listeners.js:1027
msgid "Allow insecure connections"
msgstr "允許不安全的連線"
@@ -335,11 +335,11 @@ msgid "Authenticated length"
msgstr "認證長度"
#: htdocs/luci-static/resources/fchomo/listeners.js:361
-#: htdocs/luci-static/resources/fchomo/listeners.js:1285
+#: htdocs/luci-static/resources/fchomo/listeners.js:1315
#: htdocs/luci-static/resources/view/fchomo/global.js:423
#: htdocs/luci-static/resources/view/fchomo/node.js:450
#: htdocs/luci-static/resources/view/fchomo/node.js:474
-#: htdocs/luci-static/resources/view/fchomo/node.js:1453
+#: htdocs/luci-static/resources/view/fchomo/node.js:1477
msgid "Auto"
msgstr "自動"
@@ -390,13 +390,13 @@ msgid "Binary mrs"
msgstr "二進位 mrs"
#: htdocs/luci-static/resources/view/fchomo/global.js:758
-#: htdocs/luci-static/resources/view/fchomo/node.js:1614
-#: htdocs/luci-static/resources/view/fchomo/node.js:2033
+#: htdocs/luci-static/resources/view/fchomo/node.js:1638
+#: htdocs/luci-static/resources/view/fchomo/node.js:2057
msgid "Bind interface"
msgstr "綁定介面"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1615
-#: htdocs/luci-static/resources/view/fchomo/node.js:2034
+#: htdocs/luci-static/resources/view/fchomo/node.js:1639
+#: htdocs/luci-static/resources/view/fchomo/node.js:2058
msgid "Bind outbound interface."
msgstr "綁定出站介面。"
@@ -465,17 +465,17 @@ msgstr "CORS 允許的來源,留空則使用 *。"
msgid "Cancel"
msgstr "取消"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1220
+#: htdocs/luci-static/resources/view/fchomo/node.js:1228
msgid "Cert fingerprint"
msgstr "憑證指紋"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1221
+#: htdocs/luci-static/resources/view/fchomo/node.js:1229
msgid ""
"Certificate fingerprint. Used to implement SSL Pinning and prevent MitM."
msgstr "憑證指紋。用於實現 SSL憑證固定 並防止 MitM。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1079
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+#: htdocs/luci-static/resources/fchomo/listeners.js:1087
+#: htdocs/luci-static/resources/view/fchomo/node.js:1255
msgid "Certificate path"
msgstr "憑證路徑"
@@ -536,25 +536,25 @@ msgstr ""
"點擊此處下載"
"最新的初始包。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:819
-#: htdocs/luci-static/resources/fchomo/listeners.js:1118
+#: htdocs/luci-static/resources/fchomo/listeners.js:823
+#: htdocs/luci-static/resources/fchomo/listeners.js:1139
#: htdocs/luci-static/resources/view/fchomo/global.js:571
#: htdocs/luci-static/resources/view/fchomo/node.js:1076
-#: htdocs/luci-static/resources/view/fchomo/node.js:1248
-#: htdocs/luci-static/resources/view/fchomo/node.js:1262
+#: htdocs/luci-static/resources/view/fchomo/node.js:1256
+#: htdocs/luci-static/resources/view/fchomo/node.js:1270
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:22
msgid "Client"
msgstr "客戶端"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1117
+#: htdocs/luci-static/resources/fchomo/listeners.js:1138
msgid "Client Auth Certificate path"
msgstr "客戶端認證憑證路徑"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1109
+#: htdocs/luci-static/resources/fchomo/listeners.js:1130
msgid "Client Auth type"
msgstr "客戶端認證類型"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1293
+#: htdocs/luci-static/resources/view/fchomo/node.js:1301
msgid "Client fingerprint"
msgstr "客戶端指紋"
@@ -601,14 +601,14 @@ msgid "Content copied to clipboard!"
msgstr "內容已複製到剪貼簿!"
#: htdocs/luci-static/resources/view/fchomo/client.js:687
-#: htdocs/luci-static/resources/view/fchomo/node.js:1804
-#: htdocs/luci-static/resources/view/fchomo/node.js:1830
+#: htdocs/luci-static/resources/view/fchomo/node.js:1828
+#: htdocs/luci-static/resources/view/fchomo/node.js:1854
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:348
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:374
msgid "Content will not be verified, Please make sure you enter it correctly."
msgstr "內容將不會被驗證,請確保輸入正確。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1803
+#: htdocs/luci-static/resources/view/fchomo/node.js:1827
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:347
msgid "Contents"
msgstr "內容"
@@ -633,7 +633,7 @@ msgstr "Cron 表達式"
msgid "Custom Direct List"
msgstr "自訂直連清單"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1935
+#: htdocs/luci-static/resources/view/fchomo/node.js:1959
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:420
msgid "Custom HTTP header."
msgstr "自訂 HTTP header。"
@@ -716,11 +716,11 @@ msgstr "從私鑰派生"
msgid "Destination addresses allowed to be forwarded via Wireguard."
msgstr "允許通過 WireGuard 轉發的目的位址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2158
+#: htdocs/luci-static/resources/view/fchomo/node.js:2182
msgid "Destination provider"
msgstr "落地供應商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2169
+#: htdocs/luci-static/resources/view/fchomo/node.js:2193
msgid "Destination proxy node"
msgstr "落地代理節點"
@@ -728,8 +728,8 @@ msgstr "落地代理節點"
msgid "Dial fields"
msgstr "撥號欄位"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2181
-#: htdocs/luci-static/resources/view/fchomo/node.js:2211
+#: htdocs/luci-static/resources/view/fchomo/node.js:2205
+#: htdocs/luci-static/resources/view/fchomo/node.js:2235
msgid "Different chain head/tail"
msgstr "不同的鏈頭/鏈尾"
@@ -800,18 +800,18 @@ msgid "Donot send server name in ClientHello."
msgstr "不要在 ClientHello 中傳送伺服器名稱。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1668
-#: htdocs/luci-static/resources/view/fchomo/node.js:1240
-#: htdocs/luci-static/resources/view/fchomo/node.js:2017
+#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+#: htdocs/luci-static/resources/view/fchomo/node.js:2041
msgid "Donot verifying server certificate."
msgstr "不驗證伺服器憑證。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1337
-#: htdocs/luci-static/resources/view/fchomo/node.js:1591
+#: htdocs/luci-static/resources/fchomo/listeners.js:1367
+#: htdocs/luci-static/resources/view/fchomo/node.js:1615
msgid "Download bandwidth"
msgstr "下載頻寬"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1338
-#: htdocs/luci-static/resources/view/fchomo/node.js:1592
+#: htdocs/luci-static/resources/fchomo/listeners.js:1368
+#: htdocs/luci-static/resources/view/fchomo/node.js:1616
msgid "Download bandwidth in Mbps."
msgstr "下載頻寬(單位:Mbps)。"
@@ -827,16 +827,16 @@ msgstr "下載成功。"
msgid "Dual stack"
msgstr "雙棧"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1287
+#: htdocs/luci-static/resources/view/fchomo/node.js:1295
msgid "ECH HTTPS record query servername"
msgstr "ECH HTTPS 記錄查詢網域"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1175
-#: htdocs/luci-static/resources/view/fchomo/node.js:1281
+#: htdocs/luci-static/resources/fchomo/listeners.js:1196
+#: htdocs/luci-static/resources/view/fchomo/node.js:1289
msgid "ECH config"
msgstr "ECH 配置"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1134
+#: htdocs/luci-static/resources/fchomo/listeners.js:1155
msgid "ECH key"
msgstr "ECH 密鑰"
@@ -852,11 +852,11 @@ msgstr "EDNS 客戶端子網"
msgid "ETag support"
msgstr "ETag 支援"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1431
+#: htdocs/luci-static/resources/view/fchomo/node.js:1455
msgid "Early Data first packet length limit."
msgstr "前置數據長度閾值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1437
+#: htdocs/luci-static/resources/view/fchomo/node.js:1461
msgid "Early Data header name"
msgstr "前置數據標頭"
@@ -872,7 +872,7 @@ msgstr "編輯出站"
msgid "Edit ruleset"
msgstr "編輯規則集"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1801
+#: htdocs/luci-static/resources/view/fchomo/node.js:1825
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:345
msgid "Editer"
msgstr "編輯器"
@@ -896,9 +896,9 @@ msgstr "為空時回退"
#: htdocs/luci-static/resources/view/fchomo/global.js:422
#: htdocs/luci-static/resources/view/fchomo/global.js:704
#: htdocs/luci-static/resources/view/fchomo/node.js:250
-#: htdocs/luci-static/resources/view/fchomo/node.js:1774
-#: htdocs/luci-static/resources/view/fchomo/node.js:2056
-#: htdocs/luci-static/resources/view/fchomo/node.js:2145
+#: htdocs/luci-static/resources/view/fchomo/node.js:1798
+#: htdocs/luci-static/resources/view/fchomo/node.js:2080
+#: htdocs/luci-static/resources/view/fchomo/node.js:2169
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:272
#: htdocs/luci-static/resources/view/fchomo/server.js:49
msgid "Enable"
@@ -925,17 +925,17 @@ msgstr ""
"為出站連線啟用 IP4P 轉換"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1275
+#: htdocs/luci-static/resources/view/fchomo/node.js:1283
msgid "Enable ECH"
msgstr "啟用 ECH"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1325
-#: htdocs/luci-static/resources/view/fchomo/node.js:1579
+#: htdocs/luci-static/resources/fchomo/listeners.js:1355
+#: htdocs/luci-static/resources/view/fchomo/node.js:1603
msgid "Enable TCP Brutal"
msgstr "啟用 TCP Brutal"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1326
-#: htdocs/luci-static/resources/view/fchomo/node.js:1580
+#: htdocs/luci-static/resources/fchomo/listeners.js:1356
+#: htdocs/luci-static/resources/view/fchomo/node.js:1604
msgid "Enable TCP Brutal congestion control algorithm"
msgstr "啟用 TCP Brutal 擁塞控制演算法。"
@@ -943,7 +943,7 @@ msgstr "啟用 TCP Brutal 擁塞控制演算法。"
msgid "Enable fast open"
msgstr "啟用 Fast open"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1568
+#: htdocs/luci-static/resources/view/fchomo/node.js:1592
msgid "Enable multiplexing only for TCP."
msgstr "僅為 TCP 啟用多路復用。"
@@ -952,17 +952,17 @@ msgstr "僅為 TCP 啟用多路復用。"
msgid "Enable obfuscate for downlink"
msgstr "啟用下行鏈路混淆"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1320
-#: htdocs/luci-static/resources/view/fchomo/node.js:1562
+#: htdocs/luci-static/resources/fchomo/listeners.js:1350
+#: htdocs/luci-static/resources/view/fchomo/node.js:1586
msgid "Enable padding"
msgstr "啟用填充"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1573
+#: htdocs/luci-static/resources/view/fchomo/node.js:1597
msgid "Enable statistic"
msgstr "啟用統計"
#: htdocs/luci-static/resources/view/fchomo/node.js:954
-#: htdocs/luci-static/resources/view/fchomo/node.js:1993
+#: htdocs/luci-static/resources/view/fchomo/node.js:2017
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with Multiplex."
msgstr "啟用 SUoT 協議,需要服務端支援。與多路復用衝突。"
@@ -974,7 +974,7 @@ msgid ""
"connections, losing the ability to masquerade with HTTP/3."
msgstr "啟用混淆將使伺服器與標準的 QUIC 連線不相容,失去 HTTP/3 偽裝的能力。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:782
+#: htdocs/luci-static/resources/fchomo/listeners.js:786
msgid "Encryption method"
msgstr "加密方法"
@@ -1001,7 +1001,7 @@ msgid ""
"if empty."
msgstr "超過此限制將會觸發強制健康檢查。留空則使用 5。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2114
+#: htdocs/luci-static/resources/view/fchomo/node.js:2138
msgid "Exclude matched node types."
msgstr "排除匹配的節點類型。"
@@ -1014,7 +1014,7 @@ msgstr ""
"rel=\"noreferrer noopener\">此處。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1243
-#: htdocs/luci-static/resources/view/fchomo/node.js:2107
+#: htdocs/luci-static/resources/view/fchomo/node.js:2131
msgid "Exclude nodes that meet keywords or regexps."
msgstr "排除匹配關鍵字或表達式的節點。"
@@ -1023,12 +1023,12 @@ msgid "Expand/Collapse result"
msgstr "展開/收起 結果"
#: htdocs/luci-static/resources/view/fchomo/client.js:1186
-#: htdocs/luci-static/resources/view/fchomo/node.js:2092
+#: htdocs/luci-static/resources/view/fchomo/node.js:2116
msgid "Expected HTTP code. 204 will be used if empty."
msgstr "預期的 HTTP code。留空則使用 204。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1188
-#: htdocs/luci-static/resources/view/fchomo/node.js:2094
+#: htdocs/luci-static/resources/view/fchomo/node.js:2118
msgid "Expected status"
msgstr "預期狀態"
@@ -1058,9 +1058,9 @@ msgstr "預期狀態"
#: htdocs/luci-static/resources/fchomo.js:1968
#: htdocs/luci-static/resources/fchomo/listeners.js:284
#: htdocs/luci-static/resources/fchomo/listeners.js:331
-#: htdocs/luci-static/resources/fchomo/listeners.js:811
-#: htdocs/luci-static/resources/fchomo/listeners.js:842
-#: htdocs/luci-static/resources/fchomo/listeners.js:943
+#: htdocs/luci-static/resources/fchomo/listeners.js:815
+#: htdocs/luci-static/resources/fchomo/listeners.js:846
+#: htdocs/luci-static/resources/fchomo/listeners.js:947
#: htdocs/luci-static/resources/view/fchomo/client.js:71
#: htdocs/luci-static/resources/view/fchomo/client.js:1051
#: htdocs/luci-static/resources/view/fchomo/client.js:1596
@@ -1070,27 +1070,44 @@ msgstr "預期狀態"
#: htdocs/luci-static/resources/view/fchomo/node.js:480
#: htdocs/luci-static/resources/view/fchomo/node.js:482
#: htdocs/luci-static/resources/view/fchomo/node.js:1099
-#: htdocs/luci-static/resources/view/fchomo/node.js:1226
-#: htdocs/luci-static/resources/view/fchomo/node.js:2181
-#: htdocs/luci-static/resources/view/fchomo/node.js:2211
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
+#: htdocs/luci-static/resources/view/fchomo/node.js:2205
+#: htdocs/luci-static/resources/view/fchomo/node.js:2235
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:300
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:314
msgid "Expecting: %s"
msgstr "請輸入:%s"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+msgid "Expecting: %s cannot be empty when %s is enabled."
+msgstr "請輸入:%s 不能為空,當 %s 啟用時。"
+
#: htdocs/luci-static/resources/view/fchomo/node.js:278
#: htdocs/luci-static/resources/view/fchomo/node.js:296
msgid "Expecting: Least one of %s or %s."
msgstr "請輸入:至少包含 %s 或 %s 中的一個。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:654
-#: htdocs/luci-static/resources/fchomo/listeners.js:1246
-#: htdocs/luci-static/resources/fchomo/listeners.js:1253
+#: htdocs/luci-static/resources/fchomo/listeners.js:1099
+msgid "Expecting: Cannot be empty."
+msgstr "請輸入:不能為空。"
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:1210
+msgid "Expecting: Cannot be enabled when %s is enabled."
+msgstr "請輸入:當 %s 啟用時,無法啟用。"
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:1096
+msgid "Expecting: Keep empty when %s is enabled."
+msgstr "請輸入:啟用 %s 時保持為空。"
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:655
+#: htdocs/luci-static/resources/fchomo/listeners.js:659
+#: htdocs/luci-static/resources/fchomo/listeners.js:1276
+#: htdocs/luci-static/resources/fchomo/listeners.js:1283
#: htdocs/luci-static/resources/view/fchomo/node.js:985
-#: htdocs/luci-static/resources/view/fchomo/node.js:1346
-#: htdocs/luci-static/resources/view/fchomo/node.js:1353
-#: htdocs/luci-static/resources/view/fchomo/node.js:1361
-msgid "Expecting: only support %s."
+#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1377
+#: htdocs/luci-static/resources/view/fchomo/node.js:1385
+msgid "Expecting: Only support %s."
msgstr "請輸入:僅支援 %s。"
#: htdocs/luci-static/resources/view/fchomo/global.js:723
@@ -1142,7 +1159,7 @@ msgid "Fallback filter"
msgstr "後備過濾器"
#: htdocs/luci-static/resources/view/fchomo/client.js:1238
-#: htdocs/luci-static/resources/view/fchomo/node.js:2101
+#: htdocs/luci-static/resources/view/fchomo/node.js:2125
msgid "Filter nodes that meet keywords or regexps."
msgstr "過濾匹配關鍵字或表達式的節點。"
@@ -1185,9 +1202,9 @@ msgstr ""
"noopener\">%s."
#: htdocs/luci-static/resources/view/fchomo/client.js:1187
-#: htdocs/luci-static/resources/view/fchomo/node.js:1954
-#: htdocs/luci-static/resources/view/fchomo/node.js:1962
-#: htdocs/luci-static/resources/view/fchomo/node.js:2093
+#: htdocs/luci-static/resources/view/fchomo/node.js:1978
+#: htdocs/luci-static/resources/view/fchomo/node.js:1986
+#: htdocs/luci-static/resources/view/fchomo/node.js:2117
msgid ""
"For format see %s."
@@ -1208,7 +1225,7 @@ msgstr "強制嗅探網域"
msgid "Format"
msgstr "格式"
-#: htdocs/luci-static/resources/fchomo/listeners.js:729
+#: htdocs/luci-static/resources/fchomo/listeners.js:733
msgid "Forwarding rate limit"
msgstr "轉發速率限制"
@@ -1219,7 +1236,7 @@ msgstr "轉發速率限制"
msgid "FullCombo Shark!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1386
+#: htdocs/luci-static/resources/view/fchomo/node.js:1410
msgid "GET"
msgstr ""
@@ -1239,7 +1256,7 @@ msgstr "常規"
#: htdocs/luci-static/resources/fchomo/listeners.js:119
#: htdocs/luci-static/resources/view/fchomo/client.js:1042
#: htdocs/luci-static/resources/view/fchomo/node.js:236
-#: htdocs/luci-static/resources/view/fchomo/node.js:1764
+#: htdocs/luci-static/resources/view/fchomo/node.js:1788
msgid "General fields"
msgstr "常規欄位"
@@ -1254,10 +1271,10 @@ msgstr "常規設定"
#: htdocs/luci-static/resources/fchomo/listeners.js:262
#: htdocs/luci-static/resources/fchomo/listeners.js:306
#: htdocs/luci-static/resources/fchomo/listeners.js:308
-#: htdocs/luci-static/resources/fchomo/listeners.js:915
-#: htdocs/luci-static/resources/fchomo/listeners.js:1167
+#: htdocs/luci-static/resources/fchomo/listeners.js:919
+#: htdocs/luci-static/resources/fchomo/listeners.js:1188
#: htdocs/luci-static/resources/view/fchomo/global.js:608
-#: htdocs/luci-static/resources/view/fchomo/node.js:1922
+#: htdocs/luci-static/resources/view/fchomo/node.js:1946
msgid "Generate"
msgstr "生成"
@@ -1326,17 +1343,17 @@ msgstr "組"
#: htdocs/luci-static/resources/fchomo.js:154
#: htdocs/luci-static/resources/fchomo.js:191
-#: htdocs/luci-static/resources/fchomo/listeners.js:665
+#: htdocs/luci-static/resources/fchomo/listeners.js:669
#: htdocs/luci-static/resources/view/fchomo/node.js:996
-#: htdocs/luci-static/resources/view/fchomo/node.js:1333
-#: htdocs/luci-static/resources/view/fchomo/node.js:1346
-#: htdocs/luci-static/resources/view/fchomo/node.js:1353
+#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1377
msgid "HTTP"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:316
-#: htdocs/luci-static/resources/view/fchomo/node.js:1408
-#: htdocs/luci-static/resources/view/fchomo/node.js:1934
+#: htdocs/luci-static/resources/view/fchomo/node.js:1432
+#: htdocs/luci-static/resources/view/fchomo/node.js:1958
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:419
msgid "HTTP header"
msgstr "HTTP header"
@@ -1362,7 +1379,7 @@ msgstr "HTTP 偽裝多路復用"
msgid "HTTP mask: %s"
msgstr "HTTP 偽裝: %s"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1385
+#: htdocs/luci-static/resources/view/fchomo/node.js:1409
msgid "HTTP request method"
msgstr "HTTP 請求方法"
@@ -1381,9 +1398,9 @@ msgid ""
"returned if empty."
msgstr "身份驗證失敗時的 HTTP3 伺服器回應。預設回傳 404 頁面。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1334
-#: htdocs/luci-static/resources/view/fchomo/node.js:1347
-#: htdocs/luci-static/resources/view/fchomo/node.js:1354
+#: htdocs/luci-static/resources/view/fchomo/node.js:1358
+#: htdocs/luci-static/resources/view/fchomo/node.js:1371
+#: htdocs/luci-static/resources/view/fchomo/node.js:1378
msgid "HTTPUpgrade"
msgstr ""
@@ -1395,11 +1412,11 @@ msgstr "處理網域"
msgid "Handshake mode"
msgstr "握手模式"
-#: htdocs/luci-static/resources/fchomo/listeners.js:712
+#: htdocs/luci-static/resources/fchomo/listeners.js:716
msgid "Handshake target proxy"
msgstr "握手目標代理"
-#: htdocs/luci-static/resources/fchomo/listeners.js:677
+#: htdocs/luci-static/resources/fchomo/listeners.js:681
msgid "Handshake target that supports TLS 1.3"
msgstr "握手目標 (支援 TLS 1.3)"
@@ -1417,27 +1434,27 @@ msgid "Health check"
msgstr "健康檢查"
#: htdocs/luci-static/resources/view/fchomo/client.js:1156
-#: htdocs/luci-static/resources/view/fchomo/node.js:2061
+#: htdocs/luci-static/resources/view/fchomo/node.js:2085
msgid "Health check URL"
msgstr "健康檢查 URL"
#: htdocs/luci-static/resources/view/fchomo/client.js:1185
-#: htdocs/luci-static/resources/view/fchomo/node.js:2091
+#: htdocs/luci-static/resources/view/fchomo/node.js:2115
msgid "Health check expected status"
msgstr "健康檢查预期状态"
#: htdocs/luci-static/resources/view/fchomo/client.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:2071
+#: htdocs/luci-static/resources/view/fchomo/node.js:2095
msgid "Health check interval"
msgstr "健康檢查間隔"
#: htdocs/luci-static/resources/view/fchomo/client.js:1172
-#: htdocs/luci-static/resources/view/fchomo/node.js:2078
+#: htdocs/luci-static/resources/view/fchomo/node.js:2102
msgid "Health check timeout"
msgstr "健康檢查逾時"
#: htdocs/luci-static/resources/view/fchomo/client.js:1044
-#: htdocs/luci-static/resources/view/fchomo/node.js:1766
+#: htdocs/luci-static/resources/view/fchomo/node.js:1790
msgid "Health fields"
msgstr "健康欄位"
@@ -1450,7 +1467,7 @@ msgstr "心跳間隔"
msgid "Hidden"
msgstr "隱藏"
-#: htdocs/luci-static/resources/fchomo/listeners.js:670
+#: htdocs/luci-static/resources/fchomo/listeners.js:674
#: htdocs/luci-static/resources/view/fchomo/node.js:1001
msgid "Host that supports TLS 1.3"
msgstr "主機名稱 (支援 TLS 1.3)"
@@ -1467,7 +1484,7 @@ msgstr "主機金鑰演算法"
msgid "Host/SNI override"
msgstr "主機/SNI 覆蓋"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1030
+#: htdocs/luci-static/resources/fchomo/listeners.js:1034
#: htdocs/luci-static/resources/view/fchomo/node.js:1168
msgid ""
"Hostname that the client attempts to connect to at the start of the TLS "
@@ -1506,8 +1523,8 @@ msgstr ""
msgid "IP override"
msgstr "IP 覆寫"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1628
-#: htdocs/luci-static/resources/view/fchomo/node.js:2047
+#: htdocs/luci-static/resources/view/fchomo/node.js:1652
+#: htdocs/luci-static/resources/view/fchomo/node.js:2071
msgid "IP version"
msgstr "IP 版本"
@@ -1568,8 +1585,8 @@ msgstr "導入"
#: htdocs/luci-static/resources/view/fchomo/client.js:1804
#: htdocs/luci-static/resources/view/fchomo/client.js:1839
#: htdocs/luci-static/resources/view/fchomo/client.js:1860
-#: htdocs/luci-static/resources/view/fchomo/node.js:1654
-#: htdocs/luci-static/resources/view/fchomo/node.js:1752
+#: htdocs/luci-static/resources/view/fchomo/node.js:1678
+#: htdocs/luci-static/resources/view/fchomo/node.js:1776
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:154
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:249
msgid "Import mihomo config"
@@ -1585,16 +1602,16 @@ msgstr "導入規則集連結"
#: htdocs/luci-static/resources/fchomo/listeners.js:472
#: htdocs/luci-static/resources/view/fchomo/node.js:683
#: htdocs/luci-static/resources/view/fchomo/node.js:689
-#: htdocs/luci-static/resources/view/fchomo/node.js:1999
-#: htdocs/luci-static/resources/view/fchomo/node.js:2005
+#: htdocs/luci-static/resources/view/fchomo/node.js:2023
+#: htdocs/luci-static/resources/view/fchomo/node.js:2029
msgid "In Mbps."
msgstr "單位為 Mbps。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:730
+#: htdocs/luci-static/resources/fchomo/listeners.js:734
msgid "In bps. 0 means no speed limit."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1842
+#: htdocs/luci-static/resources/view/fchomo/node.js:1866
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:392
msgid "In bytes. %s will be used if empty."
msgstr "單位為位元組。留空則使用 %s。"
@@ -1607,11 +1624,11 @@ msgstr "單位為毫秒。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1173
#: htdocs/luci-static/resources/view/fchomo/client.js:1219
-#: htdocs/luci-static/resources/view/fchomo/node.js:2079
+#: htdocs/luci-static/resources/view/fchomo/node.js:2103
msgid "In millisecond. %s will be used if empty."
msgstr "單位為毫秒。留空則使用 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1477
+#: htdocs/luci-static/resources/view/fchomo/node.js:1501
msgid "In milliseconds."
msgstr "單位為毫秒。"
@@ -1620,7 +1637,7 @@ msgstr "單位為毫秒。"
#: htdocs/luci-static/resources/fchomo/listeners.js:619
#: htdocs/luci-static/resources/view/fchomo/node.js:587
#: htdocs/luci-static/resources/view/fchomo/node.js:594
-#: htdocs/luci-static/resources/view/fchomo/node.js:1424
+#: htdocs/luci-static/resources/view/fchomo/node.js:1448
msgid "In seconds."
msgstr "單位為秒。"
@@ -1629,8 +1646,8 @@ msgstr "單位為秒。"
#: htdocs/luci-static/resources/view/fchomo/global.js:451
#: htdocs/luci-static/resources/view/fchomo/global.js:536
#: htdocs/luci-static/resources/view/fchomo/node.js:677
-#: htdocs/luci-static/resources/view/fchomo/node.js:1848
-#: htdocs/luci-static/resources/view/fchomo/node.js:2072
+#: htdocs/luci-static/resources/view/fchomo/node.js:1872
+#: htdocs/luci-static/resources/view/fchomo/node.js:2096
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:398
msgid "In seconds. %s will be used if empty."
msgstr "單位為秒。留空則使用 %s。"
@@ -1641,7 +1658,7 @@ msgid ""
"connection timeout."
msgstr "單位為秒。配置後握手時不受外層連線逾時影響。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:831
+#: htdocs/luci-static/resources/fchomo/listeners.js:835
#: htdocs/luci-static/resources/view/fchomo/node.js:1088
msgid ""
"In the order of one Padding-Length and one Padding-"
@@ -1684,7 +1701,7 @@ msgstr "引入所有代理節點。"
msgid "Info"
msgstr "訊息"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1781
+#: htdocs/luci-static/resources/view/fchomo/node.js:1805
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:288
msgid "Inline"
msgstr "內嵌"
@@ -1693,15 +1710,33 @@ msgstr "內嵌"
msgid "Interface Control"
msgstr "介面控制"
+#: htdocs/luci-static/resources/fchomo/listeners.js:648
+#: htdocs/luci-static/resources/fchomo/listeners.js:659
+#: htdocs/luci-static/resources/fchomo/listeners.js:1096
+#: htdocs/luci-static/resources/fchomo/listeners.js:1210
+#: htdocs/luci-static/resources/view/fchomo/node.js:978
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+#: htdocs/luci-static/resources/view/fchomo/node.js:1311
+msgid "JLS"
+msgstr "JLS"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1321
+msgid "JLS password"
+msgstr "JLS 密碼"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1316
+msgid "JLS username"
+msgstr "JLS 使用者名稱"
+
#: htdocs/luci-static/resources/fchomo.js:53
#: htdocs/luci-static/resources/fchomo.js:60
#: htdocs/luci-static/resources/fchomo.js:174
#: htdocs/luci-static/resources/fchomo.js:379
-#: htdocs/luci-static/resources/view/fchomo/node.js:2021
+#: htdocs/luci-static/resources/view/fchomo/node.js:2045
msgid "Keep default"
msgstr "保持預設"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1513
+#: htdocs/luci-static/resources/view/fchomo/node.js:1537
msgid "Keep-alive period"
msgstr "Keep-alive 週期"
@@ -1710,12 +1745,12 @@ msgstr "Keep-alive 週期"
msgid "Key"
msgstr "密鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1094
-#: htdocs/luci-static/resources/view/fchomo/node.js:1261
+#: htdocs/luci-static/resources/fchomo/listeners.js:1115
+#: htdocs/luci-static/resources/view/fchomo/node.js:1269
msgid "Key path"
msgstr "憑證路徑"
-#: htdocs/luci-static/resources/fchomo/listeners.js:850
+#: htdocs/luci-static/resources/fchomo/listeners.js:854
msgid "Keypairs"
msgstr "密鑰對"
@@ -1727,14 +1762,14 @@ msgstr "密鑰對"
#: htdocs/luci-static/resources/view/fchomo/client.js:1810
#: htdocs/luci-static/resources/view/fchomo/client.js:1866
#: htdocs/luci-static/resources/view/fchomo/node.js:245
-#: htdocs/luci-static/resources/view/fchomo/node.js:1769
-#: htdocs/luci-static/resources/view/fchomo/node.js:2140
+#: htdocs/luci-static/resources/view/fchomo/node.js:1793
+#: htdocs/luci-static/resources/view/fchomo/node.js:2164
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:267
msgid "Label"
msgstr "標籤"
#: htdocs/luci-static/resources/view/fchomo/client.js:1179
-#: htdocs/luci-static/resources/view/fchomo/node.js:2085
+#: htdocs/luci-static/resources/view/fchomo/node.js:2109
msgid "Lazy"
msgstr "怠惰狀態"
@@ -1763,8 +1798,8 @@ msgstr ""
msgid "Less compatibility and sometimes better performance."
msgstr "有時效能較好。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1036
-#: htdocs/luci-static/resources/view/fchomo/node.js:1174
+#: htdocs/luci-static/resources/fchomo/listeners.js:1040
+#: htdocs/luci-static/resources/view/fchomo/node.js:1182
msgid "List of supported application level protocols, in order of preference."
msgstr "支援的應用層協議協商清單,依序排列。"
@@ -1797,7 +1832,7 @@ msgstr "監聽路由標記 (Fwmark)"
msgid "Load balance"
msgstr "負載均衡"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1779
+#: htdocs/luci-static/resources/view/fchomo/node.js:1803
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:286
msgid "Local"
msgstr "本地"
@@ -1885,7 +1920,7 @@ msgstr "匹配回應通過 ipcidr"
msgid "Match rule set."
msgstr "匹配規則集。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1430
+#: htdocs/luci-static/resources/view/fchomo/node.js:1454
msgid "Max Early Data"
msgstr "前置數據最大值"
@@ -1894,15 +1929,15 @@ msgstr "前置數據最大值"
msgid "Max UDP relay packet size"
msgstr "UDP 中繼數據包最大尺寸"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1297
+#: htdocs/luci-static/resources/fchomo/listeners.js:1327
msgid "Max buffered posts"
msgstr "POST 最大緩衝"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1488
+#: htdocs/luci-static/resources/view/fchomo/node.js:1512
msgid "Max concurrency"
msgstr "最大並發"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1493
+#: htdocs/luci-static/resources/view/fchomo/node.js:1517
msgid "Max connections"
msgstr "最大連線數"
@@ -1915,8 +1950,8 @@ msgstr "最大失敗次數"
msgid "Max download speed"
msgstr "最大下載速度"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1308
-#: htdocs/luci-static/resources/view/fchomo/node.js:1470
+#: htdocs/luci-static/resources/fchomo/listeners.js:1338
+#: htdocs/luci-static/resources/view/fchomo/node.js:1494
msgid "Max each POST bytes"
msgstr "POST 最大位元組數"
@@ -1932,15 +1967,15 @@ msgstr "最大 Realms 數量"
msgid "Max realms per client IP"
msgstr "每客戶端 IP 最大 Realms 數量"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1503
+#: htdocs/luci-static/resources/view/fchomo/node.js:1527
msgid "Max request times"
msgstr "最大請求次數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1508
+#: htdocs/luci-static/resources/view/fchomo/node.js:1532
msgid "Max reusable seconds"
msgstr "最大可重用秒數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1498
+#: htdocs/luci-static/resources/view/fchomo/node.js:1522
msgid "Max reuse times"
msgstr "最大重用次數"
@@ -1949,12 +1984,12 @@ msgstr "最大重用次數"
msgid "Max upload speed"
msgstr "最大上傳速度"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1534
-#: htdocs/luci-static/resources/view/fchomo/node.js:1554
+#: htdocs/luci-static/resources/view/fchomo/node.js:1558
+#: htdocs/luci-static/resources/view/fchomo/node.js:1578
msgid "Maximum connections"
msgstr "最大連線數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1552
+#: htdocs/luci-static/resources/view/fchomo/node.js:1576
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1974,7 +2009,7 @@ msgid ""
"rate."
msgstr "最大填充率必須大於等于最小填充率。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1551
+#: htdocs/luci-static/resources/view/fchomo/node.js:1575
msgid "Maximum streams"
msgstr "最大流數量"
@@ -1999,11 +2034,11 @@ msgstr "Mihomo 服務端"
msgid "Min of idle sessions to keep"
msgstr "要保留的最少閒置會話數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1476
+#: htdocs/luci-static/resources/view/fchomo/node.js:1500
msgid "Min posts interval"
msgstr "POST 請求最小間隔時間"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1543
+#: htdocs/luci-static/resources/view/fchomo/node.js:1567
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr "在開啟新連線之前,連線中的最小多路復用流數量。"
@@ -2013,8 +2048,8 @@ msgstr "在開啟新連線之前,連線中的最小多路復用流數量。"
msgid "Minimum padding rate"
msgstr "最小填充率"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1542
-#: htdocs/luci-static/resources/view/fchomo/node.js:1554
+#: htdocs/luci-static/resources/view/fchomo/node.js:1566
+#: htdocs/luci-static/resources/view/fchomo/node.js:1578
msgid "Minimum streams"
msgstr "最小流數量"
@@ -2031,8 +2066,8 @@ msgstr "混合 系統 TCP 堆栈和 gVisor UDP 堆栈
msgid "Mixed port"
msgstr "混合連接埠"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1315
-#: htdocs/luci-static/resources/view/fchomo/node.js:1520
+#: htdocs/luci-static/resources/fchomo/listeners.js:1345
+#: htdocs/luci-static/resources/view/fchomo/node.js:1544
msgid "Multiplex"
msgstr "多路復用"
@@ -2054,7 +2089,7 @@ msgstr "NOT"
msgid "Name of the Proxy group as outbound."
msgstr "出站代理組的名稱。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1854
+#: htdocs/luci-static/resources/view/fchomo/node.js:1878
msgid "Name of the Proxy group to download provider."
msgstr "用於下載供應商訂閱的代理組名稱。"
@@ -2082,7 +2117,7 @@ msgstr ""
msgid "Network type"
msgstr "網路類型"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2023
+#: htdocs/luci-static/resources/view/fchomo/node.js:2047
msgid "No"
msgstr ""
@@ -2090,7 +2125,7 @@ msgstr ""
msgid "No Authentication IP ranges"
msgstr "無需認證的 IP 範圍"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1292
+#: htdocs/luci-static/resources/fchomo/listeners.js:1322
msgid "No SSE header"
msgstr "無 SSE header"
@@ -2098,12 +2133,12 @@ msgstr "無 SSE header"
msgid "No add'l params"
msgstr "無附加參數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1460
+#: htdocs/luci-static/resources/view/fchomo/node.js:1484
msgid "No gRPC header"
msgstr "無 gRPC header"
#: htdocs/luci-static/resources/view/fchomo/client.js:1180
-#: htdocs/luci-static/resources/view/fchomo/node.js:2086
+#: htdocs/luci-static/resources/view/fchomo/node.js:2110
msgid "No testing is performed when this provider node is not in use."
msgstr "當此供應商的節點未使用時,不執行任何測試。"
@@ -2121,17 +2156,17 @@ msgid "Node"
msgstr "節點"
#: htdocs/luci-static/resources/view/fchomo/client.js:1242
-#: htdocs/luci-static/resources/view/fchomo/node.js:2106
+#: htdocs/luci-static/resources/view/fchomo/node.js:2130
msgid "Node exclude filter"
msgstr "排除節點"
#: htdocs/luci-static/resources/view/fchomo/client.js:1247
-#: htdocs/luci-static/resources/view/fchomo/node.js:2113
+#: htdocs/luci-static/resources/view/fchomo/node.js:2137
msgid "Node exclude type"
msgstr "排除節點類型"
#: htdocs/luci-static/resources/view/fchomo/client.js:1237
-#: htdocs/luci-static/resources/view/fchomo/node.js:2100
+#: htdocs/luci-static/resources/view/fchomo/node.js:2124
msgid "Node filter"
msgstr "過濾節點"
@@ -2159,7 +2194,7 @@ msgstr ""
msgid "ON"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:664
+#: htdocs/luci-static/resources/fchomo/listeners.js:668
#: htdocs/luci-static/resources/view/fchomo/node.js:995
msgid "Obfs Mode"
msgstr "Obfs 模式"
@@ -2197,7 +2232,7 @@ msgstr "混淆為%s"
msgid "One or more numbers in the range 0-63 separated by commas"
msgstr "0-63 範圍內的一個或多個數字,以逗號分隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1024
+#: htdocs/luci-static/resources/fchomo/listeners.js:1028
msgid "Only applicable when %s are used as a frontend."
msgstr "僅當 %s 用作前端時適用。"
@@ -2222,7 +2257,7 @@ msgstr "運作模式"
msgid "Option is deprecated. Please use %s instead."
msgstr "該選項已棄用,請使用%s作為代替。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1971
+#: htdocs/luci-static/resources/view/fchomo/node.js:1995
msgid "Other configuration items"
msgstr "其他配置項"
@@ -2230,8 +2265,8 @@ msgstr "其他配置項"
msgid "Outbound"
msgstr "出站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1233
-#: htdocs/luci-static/resources/view/fchomo/node.js:2010
+#: htdocs/luci-static/resources/view/fchomo/node.js:1241
+#: htdocs/luci-static/resources/view/fchomo/node.js:2034
msgid "Override cert DNSName"
msgstr "覆蓋憑證 DNSName"
@@ -2241,7 +2276,7 @@ msgid "Override destination"
msgstr "覆蓋目標位址"
#: htdocs/luci-static/resources/view/fchomo/client.js:1043
-#: htdocs/luci-static/resources/view/fchomo/node.js:1765
+#: htdocs/luci-static/resources/view/fchomo/node.js:1789
msgid "Override fields"
msgstr "覆蓋欄位"
@@ -2261,7 +2296,7 @@ msgstr "使用嗅探到的網域覆寫連線目標。"
msgid "Override the existing ECS in original request."
msgstr "覆蓋原始請求中已有的 ECS。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1288
+#: htdocs/luci-static/resources/view/fchomo/node.js:1296
msgid "Overrides the domain name used for HTTPS record queries."
msgstr "覆蓋用於 HTTPS 記錄查詢的網域。"
@@ -2269,11 +2304,11 @@ msgstr "覆蓋用於 HTTPS 記錄查詢的網域。"
msgid "Overview"
msgstr "概覽"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1387
+#: htdocs/luci-static/resources/view/fchomo/node.js:1411
msgid "POST"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1388
+#: htdocs/luci-static/resources/view/fchomo/node.js:1412
msgid "PUT"
msgstr ""
@@ -2281,7 +2316,7 @@ msgstr ""
msgid "Packet encoding"
msgstr "數據包編碼"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1465
+#: htdocs/luci-static/resources/view/fchomo/node.js:1489
msgid "Padding bytes"
msgstr "填充位元組"
@@ -2289,14 +2324,14 @@ msgstr "填充位元組"
msgid "Padding scheme"
msgstr "填充方案"
-#: htdocs/luci-static/resources/fchomo/listeners.js:829
+#: htdocs/luci-static/resources/fchomo/listeners.js:833
#: htdocs/luci-static/resources/view/fchomo/node.js:1086
msgid "Paddings"
msgstr "填充 (Paddings)"
#: htdocs/luci-static/resources/fchomo/listeners.js:167
#: htdocs/luci-static/resources/fchomo/listeners.js:184
-#: htdocs/luci-static/resources/fchomo/listeners.js:691
+#: htdocs/luci-static/resources/fchomo/listeners.js:695
#: htdocs/luci-static/resources/view/fchomo/node.js:310
#: htdocs/luci-static/resources/view/fchomo/node.js:331
#: htdocs/luci-static/resources/view/fchomo/node.js:1014
@@ -2311,8 +2346,8 @@ msgstr "捆綁包路徑"
msgid "Path in bundle: %s"
msgstr "在捆綁包%s中的路徑"
-#: htdocs/luci-static/resources/fchomo/listeners.js:769
-#: htdocs/luci-static/resources/view/fchomo/node.js:1829
+#: htdocs/luci-static/resources/fchomo/listeners.js:773
+#: htdocs/luci-static/resources/view/fchomo/node.js:1853
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:373
msgid "Payload"
msgstr "Payload"
@@ -2354,8 +2389,8 @@ msgid ""
"standards."
msgstr "連結格式標準請參考 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1802
-#: htdocs/luci-static/resources/view/fchomo/node.js:1828
+#: htdocs/luci-static/resources/view/fchomo/node.js:1826
+#: htdocs/luci-static/resources/view/fchomo/node.js:1852
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:346
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:372
msgid ""
@@ -2370,7 +2405,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1533
#: htdocs/luci-static/resources/view/fchomo/client.js:1788
#: htdocs/luci-static/resources/view/fchomo/client.js:1840
-#: htdocs/luci-static/resources/view/fchomo/node.js:1655
+#: htdocs/luci-static/resources/view/fchomo/node.js:1679
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:155
msgid "Please type %s fields of mihomo config."
msgstr "請輸入 mihomo 配置的 %s 欄位。"
@@ -2385,7 +2420,7 @@ msgstr "外掛"
msgid "Plugin fields"
msgstr "外掛欄位"
-#: htdocs/luci-static/resources/fchomo/listeners.js:643
+#: htdocs/luci-static/resources/fchomo/listeners.js:644
#: htdocs/luci-static/resources/view/fchomo/node.js:972
msgid "Plugin type"
msgstr "外掛類型"
@@ -2422,7 +2457,7 @@ msgstr "連接埠池"
msgid "Pre-shared key"
msgstr "預先共用金鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:967
+#: htdocs/luci-static/resources/fchomo/listeners.js:971
#: htdocs/luci-static/resources/view/fchomo/node.js:1121
msgid "Pre-shared key of rendezvous server"
msgstr "牽線伺服器的預先共用金鑰"
@@ -2442,10 +2477,10 @@ msgstr "防止某些情況下的 ICMP 環回問題。 Ping 不會顯示實際延
#: htdocs/luci-static/resources/view/fchomo/global.js:760
#: htdocs/luci-static/resources/view/fchomo/global.js:777
-#: htdocs/luci-static/resources/view/fchomo/node.js:1616
-#: htdocs/luci-static/resources/view/fchomo/node.js:1623
-#: htdocs/luci-static/resources/view/fchomo/node.js:2035
-#: htdocs/luci-static/resources/view/fchomo/node.js:2042
+#: htdocs/luci-static/resources/view/fchomo/node.js:1640
+#: htdocs/luci-static/resources/view/fchomo/node.js:1647
+#: htdocs/luci-static/resources/view/fchomo/node.js:2059
+#: htdocs/luci-static/resources/view/fchomo/node.js:2066
msgid "Priority: Proxy Node > Global."
msgstr "優先權: 代理節點 > 全域。"
@@ -2462,7 +2497,7 @@ msgstr "金鑰密碼"
msgid "Private key"
msgstr "私鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:737
+#: htdocs/luci-static/resources/fchomo/listeners.js:741
msgid ""
"Probe the QUIC version of the handshake target during the first connection."
msgstr "在首次連線期間探測握手目標的 QUIC 版本。"
@@ -2471,12 +2506,12 @@ msgstr "在首次連線期間探測握手目標的 QUIC 版本。"
msgid "Process matching mode"
msgstr "進程匹配模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1961
+#: htdocs/luci-static/resources/view/fchomo/node.js:1985
msgid "Programmable replacement"
msgstr "可編程替換"
#: htdocs/luci-static/resources/view/fchomo/global.js:708
-#: htdocs/luci-static/resources/view/fchomo/node.js:1526
+#: htdocs/luci-static/resources/view/fchomo/node.js:1550
msgid "Protocol"
msgstr "協議"
@@ -2491,13 +2526,13 @@ msgid ""
msgstr "協議參數。 如啟用會隨機浪費流量(在 v2ray 中預設為啟用且無法停用)。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1100
-#: htdocs/luci-static/resources/view/fchomo/node.js:1638
-#: htdocs/luci-static/resources/view/fchomo/node.js:1647
-#: htdocs/luci-static/resources/view/fchomo/node.js:2151
+#: htdocs/luci-static/resources/view/fchomo/node.js:1662
+#: htdocs/luci-static/resources/view/fchomo/node.js:1671
+#: htdocs/luci-static/resources/view/fchomo/node.js:2175
msgid "Provider"
msgstr "供應商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1835
+#: htdocs/luci-static/resources/view/fchomo/node.js:1859
msgid "Provider URL"
msgstr "供應商訂閱 URL"
@@ -2520,19 +2555,19 @@ msgid "Proxy MAC-s"
msgstr "代理 MAC 位址"
#: htdocs/luci-static/resources/view/fchomo/node.js:222
-#: htdocs/luci-static/resources/view/fchomo/node.js:2150
+#: htdocs/luci-static/resources/view/fchomo/node.js:2174
msgid "Proxy Node"
msgstr "代理節點"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2126
-#: htdocs/luci-static/resources/view/fchomo/node.js:2135
+#: htdocs/luci-static/resources/view/fchomo/node.js:2150
+#: htdocs/luci-static/resources/view/fchomo/node.js:2159
msgid "Proxy chain"
msgstr "代理鏈"
#: htdocs/luci-static/resources/fchomo/listeners.js:585
#: htdocs/luci-static/resources/view/fchomo/client.js:801
#: htdocs/luci-static/resources/view/fchomo/client.js:1631
-#: htdocs/luci-static/resources/view/fchomo/node.js:1853
+#: htdocs/luci-static/resources/view/fchomo/node.js:1877
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:403
msgid "Proxy group"
msgstr "代理組"
@@ -2559,7 +2594,7 @@ msgstr ""
msgid "QUIC based 0-RTT"
msgstr "基於 QUIC 的 0-RTT"
-#: htdocs/luci-static/resources/fchomo/listeners.js:736
+#: htdocs/luci-static/resources/fchomo/listeners.js:740
msgid "QUIC version probe"
msgstr "QUIC 版本探測"
@@ -2573,34 +2608,35 @@ msgstr "QUIC 版本"
msgid "Quick Reload"
msgstr "快速重載"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1182
-#: htdocs/luci-static/resources/view/fchomo/node.js:1302
+#: htdocs/luci-static/resources/fchomo/listeners.js:1097
+#: htdocs/luci-static/resources/fchomo/listeners.js:1203
+#: htdocs/luci-static/resources/view/fchomo/node.js:1326
msgid "REALITY"
msgstr "REALITY"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1317
+#: htdocs/luci-static/resources/view/fchomo/node.js:1341
msgid "REALITY X25519MLKEM768 PQC support"
msgstr "REALITY X25519MLKEM768 後量子加密支援"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1219
+#: htdocs/luci-static/resources/fchomo/listeners.js:1249
msgid "REALITY certificate issued to"
msgstr "REALITY 憑證頒發給"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1187
+#: htdocs/luci-static/resources/fchomo/listeners.js:1217
msgid "REALITY handshake server"
msgstr "REALITY 握手伺服器"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1194
+#: htdocs/luci-static/resources/fchomo/listeners.js:1224
msgid "REALITY private key"
msgstr "REALITY 私鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1209
-#: htdocs/luci-static/resources/view/fchomo/node.js:1307
+#: htdocs/luci-static/resources/fchomo/listeners.js:1239
+#: htdocs/luci-static/resources/view/fchomo/node.js:1331
msgid "REALITY public key"
msgstr "REALITY 公鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1213
-#: htdocs/luci-static/resources/view/fchomo/node.js:1312
+#: htdocs/luci-static/resources/fchomo/listeners.js:1243
+#: htdocs/luci-static/resources/view/fchomo/node.js:1336
msgid "REALITY short ID"
msgstr "REALITY 標識符"
@@ -2610,8 +2646,8 @@ msgstr "REALITY 標識符"
msgid "REMATCH-NAME marking"
msgstr "REMATCH-NAME 打標"
-#: htdocs/luci-static/resources/fchomo/listeners.js:800
-#: htdocs/luci-static/resources/fchomo/listeners.js:819
+#: htdocs/luci-static/resources/fchomo/listeners.js:804
+#: htdocs/luci-static/resources/fchomo/listeners.js:823
#: htdocs/luci-static/resources/view/fchomo/node.js:1076
msgid "RTT"
msgstr ""
@@ -2628,12 +2664,12 @@ msgstr "留空將使用隨機令牌。"
msgid "Randomized traffic characteristics"
msgstr "隨機化流量特徵"
-#: htdocs/luci-static/resources/fchomo/listeners.js:956
+#: htdocs/luci-static/resources/fchomo/listeners.js:960
#: htdocs/luci-static/resources/view/fchomo/node.js:1110
msgid "Realm"
msgstr "Realm"
-#: htdocs/luci-static/resources/fchomo/listeners.js:972
+#: htdocs/luci-static/resources/fchomo/listeners.js:976
#: htdocs/luci-static/resources/view/fchomo/node.js:1126
msgid "Realm ID"
msgstr "Realm ID"
@@ -2681,7 +2717,7 @@ msgstr "再路由"
msgid "Rematching routing rules"
msgstr "重新匹配路由規則"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1780
+#: htdocs/luci-static/resources/view/fchomo/node.js:1804
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:287
msgid "Remote"
msgstr "遠端"
@@ -2696,23 +2732,23 @@ msgid "Remove"
msgstr "移除"
#: htdocs/luci-static/resources/fchomo.js:1739
-#: htdocs/luci-static/resources/view/fchomo/node.js:1756
-#: htdocs/luci-static/resources/view/fchomo/node.js:1758
+#: htdocs/luci-static/resources/view/fchomo/node.js:1780
+#: htdocs/luci-static/resources/view/fchomo/node.js:1782
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:259
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:261
msgid "Remove idles"
msgstr "移除閒置"
-#: htdocs/luci-static/resources/fchomo/listeners.js:961
+#: htdocs/luci-static/resources/fchomo/listeners.js:965
#: htdocs/luci-static/resources/view/fchomo/node.js:1115
msgid "Rendezvous server"
msgstr "牽線伺服器"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1952
+#: htdocs/luci-static/resources/view/fchomo/node.js:1976
msgid "Replace name"
msgstr "名稱替換"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1953
+#: htdocs/luci-static/resources/view/fchomo/node.js:1977
msgid "Replace node name."
msgstr "替換節點名稱"
@@ -2720,9 +2756,9 @@ msgstr "替換節點名稱"
msgid "Request"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1271
-#: htdocs/luci-static/resources/view/fchomo/node.js:1394
-#: htdocs/luci-static/resources/view/fchomo/node.js:1401
+#: htdocs/luci-static/resources/fchomo/listeners.js:1301
+#: htdocs/luci-static/resources/view/fchomo/node.js:1418
+#: htdocs/luci-static/resources/view/fchomo/node.js:1425
msgid "Request path"
msgstr "請求路徑"
@@ -2739,7 +2775,7 @@ msgid "Require any"
msgstr ""
#: htdocs/luci-static/resources/fchomo.js:406
-#: htdocs/luci-static/resources/view/fchomo/node.js:1318
+#: htdocs/luci-static/resources/view/fchomo/node.js:1342
msgid "Requires server support."
msgstr "需要伺服器支援。"
@@ -2751,7 +2787,12 @@ msgstr "保留字段位元組"
msgid "Resources management"
msgstr "資源管理"
-#: htdocs/luci-static/resources/fchomo/listeners.js:705
+#: htdocs/luci-static/resources/fchomo/listeners.js:647
+#: htdocs/luci-static/resources/view/fchomo/node.js:977
+msgid "Restls"
+msgstr ""
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:709
#: htdocs/luci-static/resources/view/fchomo/node.js:1034
msgid "Restls script"
msgstr "Restls 劇本"
@@ -2790,8 +2831,8 @@ msgstr "路由 GFW 流量"
#: htdocs/luci-static/resources/fchomo/listeners.js:568
#: htdocs/luci-static/resources/view/fchomo/global.js:776
-#: htdocs/luci-static/resources/view/fchomo/node.js:1622
-#: htdocs/luci-static/resources/view/fchomo/node.js:2041
+#: htdocs/luci-static/resources/view/fchomo/node.js:1646
+#: htdocs/luci-static/resources/view/fchomo/node.js:2065
msgid "Routing mark (Fwmark)"
msgstr "路由標記 (Fwmark)"
@@ -2871,7 +2912,7 @@ msgstr ""
msgid "STUN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:978
+#: htdocs/luci-static/resources/fchomo/listeners.js:982
#: htdocs/luci-static/resources/view/fchomo/node.js:1132
msgid "STUN servers"
msgstr "STUN 伺服器"
@@ -2927,9 +2968,9 @@ msgstr "同時向%s和%s發起查詢。"
msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse."
msgstr "發送 300-600 秒的隨機票證,以供客戶端 0-RTT 重用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:800
-#: htdocs/luci-static/resources/fchomo/listeners.js:1080
-#: htdocs/luci-static/resources/fchomo/listeners.js:1095
+#: htdocs/luci-static/resources/fchomo/listeners.js:804
+#: htdocs/luci-static/resources/fchomo/listeners.js:1088
+#: htdocs/luci-static/resources/fchomo/listeners.js:1116
#: htdocs/luci-static/resources/view/fchomo/server.js:58
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:62
msgid "Server"
@@ -2939,9 +2980,9 @@ msgstr "服務端"
msgid "Server address"
msgstr "伺服器位址"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1265
-#: htdocs/luci-static/resources/view/fchomo/node.js:1373
-#: htdocs/luci-static/resources/view/fchomo/node.js:1379
+#: htdocs/luci-static/resources/fchomo/listeners.js:1295
+#: htdocs/luci-static/resources/view/fchomo/node.js:1397
+#: htdocs/luci-static/resources/view/fchomo/node.js:1403
msgid "Server hostname"
msgstr "伺服器主機名稱"
@@ -2958,6 +2999,13 @@ msgstr "服務狀態"
msgid "ShadowQUIC"
msgstr ""
+#: htdocs/luci-static/resources/fchomo/listeners.js:646
+#: htdocs/luci-static/resources/fchomo/listeners.js:656
+#: htdocs/luci-static/resources/view/fchomo/node.js:976
+#: htdocs/luci-static/resources/view/fchomo/node.js:986
+msgid "ShadowTLS"
+msgstr ""
+
#: htdocs/luci-static/resources/fchomo.js:157
#: htdocs/luci-static/resources/fchomo.js:193
msgid "Shadowsocks"
@@ -2978,7 +3026,7 @@ msgstr "Shadowsocks 加密"
msgid "Shadowsocks password"
msgstr "Shadowsocks 密碼"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1574
+#: htdocs/luci-static/resources/view/fchomo/node.js:1598
msgid "Show connections in the dashboard for breaking connections easier."
msgstr "在面板中顯示連線以便於打斷連線。"
@@ -2990,14 +3038,14 @@ msgstr "靜音"
msgid "Simple round-robin all nodes"
msgstr "簡單輪替所有節點"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1841
+#: htdocs/luci-static/resources/view/fchomo/node.js:1865
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:391
msgid "Size limit"
msgstr "大小限制"
#: htdocs/luci-static/resources/view/fchomo/client.js:1667
-#: htdocs/luci-static/resources/view/fchomo/node.js:1239
-#: htdocs/luci-static/resources/view/fchomo/node.js:2016
+#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+#: htdocs/luci-static/resources/view/fchomo/node.js:2040
msgid "Skip cert verify"
msgstr "跳過憑證驗證"
@@ -3135,7 +3183,7 @@ msgstr "TCP"
msgid "TCP concurrency"
msgstr "TCP 併發"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1567
+#: htdocs/luci-static/resources/view/fchomo/node.js:1591
msgid "TCP only"
msgstr "僅 TCP"
@@ -3162,13 +3210,13 @@ msgstr "TCP-Keep-Alive 間隔"
msgid "TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1598
-#: htdocs/luci-static/resources/view/fchomo/node.js:1977
+#: htdocs/luci-static/resources/view/fchomo/node.js:1622
+#: htdocs/luci-static/resources/view/fchomo/node.js:2001
msgid "TFO"
msgstr "TCP 快速開啟 (TFO)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:666
-#: htdocs/luci-static/resources/fchomo/listeners.js:988
+#: htdocs/luci-static/resources/fchomo/listeners.js:670
+#: htdocs/luci-static/resources/fchomo/listeners.js:992
#: htdocs/luci-static/resources/view/fchomo/global.js:550
#: htdocs/luci-static/resources/view/fchomo/node.js:455
#: htdocs/luci-static/resources/view/fchomo/node.js:997
@@ -3176,13 +3224,14 @@ msgstr "TCP 快速開啟 (TFO)"
msgid "TLS"
msgstr "TLS"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1035
-#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+#: htdocs/luci-static/resources/fchomo/listeners.js:1039
+#: htdocs/luci-static/resources/view/fchomo/node.js:1181
msgid "TLS ALPN"
msgstr "TLS ALPN"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1029
+#: htdocs/luci-static/resources/fchomo/listeners.js:1033
#: htdocs/luci-static/resources/view/fchomo/node.js:1167
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
msgid "TLS SNI"
msgstr ""
@@ -3219,19 +3268,19 @@ msgstr "Cloudflare WARP 網路中使用的本機 %s 位址。"
msgid "The %s address used by local machine in the Wireguard network."
msgstr "WireGuard 網路中使用的本機 %s 位址。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1095
-#: htdocs/luci-static/resources/view/fchomo/node.js:1262
+#: htdocs/luci-static/resources/fchomo/listeners.js:1116
+#: htdocs/luci-static/resources/view/fchomo/node.js:1270
msgid "The %s private key, in PEM format."
msgstr "%s私鑰,需要 PEM 格式。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1080
-#: htdocs/luci-static/resources/fchomo/listeners.js:1118
+#: htdocs/luci-static/resources/fchomo/listeners.js:1088
+#: htdocs/luci-static/resources/fchomo/listeners.js:1139
#: htdocs/luci-static/resources/view/fchomo/global.js:571
-#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+#: htdocs/luci-static/resources/view/fchomo/node.js:1256
msgid "The %s public key, in PEM format."
msgstr "%s公鑰,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1282
+#: htdocs/luci-static/resources/view/fchomo/node.js:1290
msgid ""
"The ECH parameter of the HTTPS record for the domain. Leave empty to resolve "
"via DNS."
@@ -3255,7 +3304,7 @@ msgid ""
"connection timeout is used."
msgstr "預設值為%s,表示僅使用外層連線逾時。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:832
+#: htdocs/luci-static/resources/fchomo/listeners.js:836
#: htdocs/luci-static/resources/view/fchomo/node.js:1089
msgid ""
"The first padding must have a probability of 100% and at least 35 bytes."
@@ -3271,23 +3320,23 @@ msgstr "匹配 %s 的將被視為未被投毒汙染。"
msgid "The matching %s will be deemed as poisoned."
msgstr "匹配 %s 的將被視為已被投毒汙染。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:713
+#: htdocs/luci-static/resources/fchomo/listeners.js:717
msgid "The proxy used to connect to the handshake target."
msgstr "用於連接握手目標的代理。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:830
+#: htdocs/luci-static/resources/fchomo/listeners.js:834
#: htdocs/luci-static/resources/view/fchomo/node.js:1087
msgid "The server and client can set different padding parameters."
msgstr "伺服器和客戶端可以設定不同的填充參數。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1176
+#: htdocs/luci-static/resources/fchomo/listeners.js:1197
#: htdocs/luci-static/resources/view/fchomo/global.js:615
msgid "This ECH parameter needs to be added to the HTTPS record of the domain."
msgstr "此 ECH 參數需要加入到網域的 HTTPS 記錄中。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1670
-#: htdocs/luci-static/resources/view/fchomo/node.js:1242
-#: htdocs/luci-static/resources/view/fchomo/node.js:2019
+#: htdocs/luci-static/resources/view/fchomo/node.js:1250
+#: htdocs/luci-static/resources/view/fchomo/node.js:2043
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
@@ -3331,18 +3380,18 @@ msgstr "Tproxy 連接埠"
msgid "Traffic pattern"
msgstr "流量模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2188
+#: htdocs/luci-static/resources/view/fchomo/node.js:2212
msgid "Transit proxy group"
msgstr "中轉代理組"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2199
+#: htdocs/luci-static/resources/view/fchomo/node.js:2223
msgid "Transit proxy node"
msgstr "中轉代理節點"
#: htdocs/luci-static/resources/fchomo/listeners.js:194
-#: htdocs/luci-static/resources/fchomo/listeners.js:1229
+#: htdocs/luci-static/resources/fchomo/listeners.js:1259
#: htdocs/luci-static/resources/view/fchomo/node.js:346
-#: htdocs/luci-static/resources/view/fchomo/node.js:1326
+#: htdocs/luci-static/resources/view/fchomo/node.js:1350
msgid "Transport"
msgstr "傳輸層"
@@ -3351,8 +3400,8 @@ msgstr "傳輸層"
msgid "Transport fields"
msgstr "傳輸層欄位"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1234
-#: htdocs/luci-static/resources/view/fchomo/node.js:1331
+#: htdocs/luci-static/resources/fchomo/listeners.js:1264
+#: htdocs/luci-static/resources/view/fchomo/node.js:1355
msgid "Transport type"
msgstr "傳輸層類型"
@@ -3401,8 +3450,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:863
#: htdocs/luci-static/resources/view/fchomo/client.js:1061
#: htdocs/luci-static/resources/view/fchomo/node.js:254
-#: htdocs/luci-static/resources/view/fchomo/node.js:1778
-#: htdocs/luci-static/resources/view/fchomo/node.js:2149
+#: htdocs/luci-static/resources/view/fchomo/node.js:1802
+#: htdocs/luci-static/resources/view/fchomo/node.js:2173
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:285
msgid "Type"
msgstr "類型"
@@ -3420,7 +3469,7 @@ msgstr "類型"
#: htdocs/luci-static/resources/view/fchomo/client.js:605
#: htdocs/luci-static/resources/view/fchomo/client.js:697
#: htdocs/luci-static/resources/view/fchomo/node.js:947
-#: htdocs/luci-static/resources/view/fchomo/node.js:1987
+#: htdocs/luci-static/resources/view/fchomo/node.js:2011
msgid "UDP"
msgstr "UDP"
@@ -3490,7 +3539,7 @@ msgid "Unknown error: %s"
msgstr "未知錯誤:%s"
#: htdocs/luci-static/resources/view/fchomo/node.js:953
-#: htdocs/luci-static/resources/view/fchomo/node.js:1992
+#: htdocs/luci-static/resources/view/fchomo/node.js:2016
msgid "UoT"
msgstr "UDP over TCP (UoT)"
@@ -3498,24 +3547,24 @@ msgstr "UDP over TCP (UoT)"
msgid "Update failed."
msgstr "更新失敗。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1847
+#: htdocs/luci-static/resources/view/fchomo/node.js:1871
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:397
msgid "Update interval"
msgstr "更新間隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1331
-#: htdocs/luci-static/resources/view/fchomo/node.js:1585
+#: htdocs/luci-static/resources/fchomo/listeners.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1609
msgid "Upload bandwidth"
msgstr "上傳頻寬"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1332
-#: htdocs/luci-static/resources/view/fchomo/node.js:1586
+#: htdocs/luci-static/resources/fchomo/listeners.js:1362
+#: htdocs/luci-static/resources/view/fchomo/node.js:1610
msgid "Upload bandwidth in Mbps."
msgstr "上傳頻寬(單位:Mbps)。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1086
-#: htdocs/luci-static/resources/fchomo/listeners.js:1126
-#: htdocs/luci-static/resources/view/fchomo/node.js:1253
+#: htdocs/luci-static/resources/fchomo/listeners.js:1107
+#: htdocs/luci-static/resources/fchomo/listeners.js:1147
+#: htdocs/luci-static/resources/view/fchomo/node.js:1261
msgid "Upload certificate"
msgstr "上傳憑證"
@@ -3523,17 +3572,17 @@ msgstr "上傳憑證"
msgid "Upload initial package"
msgstr "上傳初始資源包"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1101
-#: htdocs/luci-static/resources/view/fchomo/node.js:1267
+#: htdocs/luci-static/resources/fchomo/listeners.js:1122
+#: htdocs/luci-static/resources/view/fchomo/node.js:1275
msgid "Upload key"
msgstr "上傳金鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1089
-#: htdocs/luci-static/resources/fchomo/listeners.js:1104
-#: htdocs/luci-static/resources/fchomo/listeners.js:1129
+#: htdocs/luci-static/resources/fchomo/listeners.js:1110
+#: htdocs/luci-static/resources/fchomo/listeners.js:1125
+#: htdocs/luci-static/resources/fchomo/listeners.js:1150
#: htdocs/luci-static/resources/view/fchomo/global.js:306
-#: htdocs/luci-static/resources/view/fchomo/node.js:1256
-#: htdocs/luci-static/resources/view/fchomo/node.js:1270
+#: htdocs/luci-static/resources/view/fchomo/node.js:1264
+#: htdocs/luci-static/resources/view/fchomo/node.js:1278
msgid "Upload..."
msgstr "上傳..."
@@ -3563,8 +3612,8 @@ msgstr "用於解析 DNS 伺服器的網域。必須是 IP。"
msgid "Used to resolve the domain of the Proxy node."
msgstr "用於解析代理節點的網域。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1234
-#: htdocs/luci-static/resources/view/fchomo/node.js:2011
+#: htdocs/luci-static/resources/view/fchomo/node.js:1242
+#: htdocs/luci-static/resources/view/fchomo/node.js:2035
msgid "Used to verify the hostname on the returned certificates."
msgstr "用於驗證傳回的憑證上的主機名稱。"
@@ -3577,7 +3626,7 @@ msgid "User-hint is mandatory"
msgstr "User-hint 是必填項"
#: htdocs/luci-static/resources/fchomo/listeners.js:162
-#: htdocs/luci-static/resources/fchomo/listeners.js:685
+#: htdocs/luci-static/resources/fchomo/listeners.js:689
#: htdocs/luci-static/resources/view/fchomo/node.js:305
#: htdocs/luci-static/resources/view/fchomo/node.js:1008
msgid "Username"
@@ -3587,11 +3636,11 @@ msgstr "使用者名稱"
msgid "Users filter mode"
msgstr "使用者過濾模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1442
+#: htdocs/luci-static/resources/view/fchomo/node.js:1466
msgid "V2ray HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1447
+#: htdocs/luci-static/resources/view/fchomo/node.js:1471
msgid "V2ray HTTPUpgrade fast open"
msgstr ""
@@ -3605,8 +3654,8 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1784
-#: htdocs/luci-static/resources/view/fchomo/node.js:2155
+#: htdocs/luci-static/resources/view/fchomo/node.js:1808
+#: htdocs/luci-static/resources/view/fchomo/node.js:2179
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:328
msgid "Value"
msgstr "可視化值"
@@ -3616,7 +3665,7 @@ msgid "Verify if given"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:384
-#: htdocs/luci-static/resources/fchomo/listeners.js:697
+#: htdocs/luci-static/resources/fchomo/listeners.js:701
#: htdocs/luci-static/resources/view/fchomo/node.js:497
#: htdocs/luci-static/resources/view/fchomo/node.js:1020
msgid "Version"
@@ -3640,15 +3689,15 @@ msgid "Warning"
msgstr "警告"
#: htdocs/luci-static/resources/fchomo/listeners.js:362
-#: htdocs/luci-static/resources/fchomo/listeners.js:1236
-#: htdocs/luci-static/resources/fchomo/listeners.js:1247
-#: htdocs/luci-static/resources/fchomo/listeners.js:1254
+#: htdocs/luci-static/resources/fchomo/listeners.js:1266
+#: htdocs/luci-static/resources/fchomo/listeners.js:1277
+#: htdocs/luci-static/resources/fchomo/listeners.js:1284
#: htdocs/luci-static/resources/view/fchomo/node.js:451
#: htdocs/luci-static/resources/view/fchomo/node.js:480
-#: htdocs/luci-static/resources/view/fchomo/node.js:1336
-#: htdocs/luci-static/resources/view/fchomo/node.js:1349
-#: htdocs/luci-static/resources/view/fchomo/node.js:1356
-#: htdocs/luci-static/resources/view/fchomo/node.js:1362
+#: htdocs/luci-static/resources/view/fchomo/node.js:1360
+#: htdocs/luci-static/resources/view/fchomo/node.js:1373
+#: htdocs/luci-static/resources/view/fchomo/node.js:1380
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
msgid "WebSocket"
msgstr ""
@@ -3676,32 +3725,32 @@ msgstr "WireGuard 預先共用金鑰。"
msgid "WireGuard requires base64-encoded private keys."
msgstr "WireGuard 要求 base64 編碼的私鑰。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1237
-#: htdocs/luci-static/resources/fchomo/listeners.js:1248
-#: htdocs/luci-static/resources/view/fchomo/node.js:1337
-#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/fchomo/listeners.js:1267
+#: htdocs/luci-static/resources/fchomo/listeners.js:1278
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1381
msgid "XHTTP"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1284
-#: htdocs/luci-static/resources/view/fchomo/node.js:1452
+#: htdocs/luci-static/resources/fchomo/listeners.js:1314
+#: htdocs/luci-static/resources/view/fchomo/node.js:1476
msgid "XHTTP mode"
msgstr "XHTTP 模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1483
+#: htdocs/luci-static/resources/view/fchomo/node.js:1507
msgid "XMUX"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1488
-#: htdocs/luci-static/resources/view/fchomo/node.js:1493
-#: htdocs/luci-static/resources/view/fchomo/node.js:1498
-#: htdocs/luci-static/resources/view/fchomo/node.js:1503
-#: htdocs/luci-static/resources/view/fchomo/node.js:1508
-#: htdocs/luci-static/resources/view/fchomo/node.js:1513
+#: htdocs/luci-static/resources/view/fchomo/node.js:1512
+#: htdocs/luci-static/resources/view/fchomo/node.js:1517
+#: htdocs/luci-static/resources/view/fchomo/node.js:1522
+#: htdocs/luci-static/resources/view/fchomo/node.js:1527
+#: htdocs/luci-static/resources/view/fchomo/node.js:1532
+#: htdocs/luci-static/resources/view/fchomo/node.js:1537
msgid "XMUX:"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:791
+#: htdocs/luci-static/resources/fchomo/listeners.js:795
msgid "XOR mode"
msgstr "XOR 模式"
@@ -3713,7 +3762,7 @@ msgstr ""
msgid "Yaml text"
msgstr "Yaml 格式文本"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2022
+#: htdocs/luci-static/resources/view/fchomo/node.js:2046
msgid "Yes"
msgstr ""
@@ -3741,11 +3790,11 @@ msgstr ""
msgid "aes-256-gcm"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1869
+#: htdocs/luci-static/resources/view/fchomo/node.js:1893
msgid "age private key"
msgstr "age 私鑰"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1930
+#: htdocs/luci-static/resources/view/fchomo/node.js:1954
msgid "age public key"
msgstr "age 公鑰"
@@ -3765,9 +3814,9 @@ msgstr "自動"
msgid "bbr"
msgstr "bbr"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1091
-#: htdocs/luci-static/resources/fchomo/listeners.js:1131
-#: htdocs/luci-static/resources/view/fchomo/node.js:1258
+#: htdocs/luci-static/resources/fchomo/listeners.js:1112
+#: htdocs/luci-static/resources/fchomo/listeners.js:1152
+#: htdocs/luci-static/resources/view/fchomo/node.js:1266
msgid "certificate"
msgstr "憑證"
@@ -3785,8 +3834,8 @@ msgstr ""
msgid "cubic"
msgstr "cubic"
-#: htdocs/luci-static/resources/fchomo/listeners.js:743
-#: htdocs/luci-static/resources/fchomo/listeners.js:774
+#: htdocs/luci-static/resources/fchomo/listeners.js:747
+#: htdocs/luci-static/resources/fchomo/listeners.js:778
msgid "decryption"
msgstr "decryption"
@@ -3794,11 +3843,11 @@ msgstr "decryption"
msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)"
msgstr "dnsmasq 自行選擇上游服務器。 (可能影響 CDN 準確性)"
-#: htdocs/luci-static/resources/view/fchomo/node.js:2004
+#: htdocs/luci-static/resources/view/fchomo/node.js:2028
msgid "down"
msgstr "Hysteria 下載速率"
-#: htdocs/luci-static/resources/fchomo/listeners.js:778
+#: htdocs/luci-static/resources/fchomo/listeners.js:782
#: htdocs/luci-static/resources/view/fchomo/node.js:1041
#: htdocs/luci-static/resources/view/fchomo/node.js:1064
msgid "encryption"
@@ -3809,26 +3858,26 @@ msgstr "encryption"
msgid "false = bandwidth optimized downlink; true = pure Sudoku downlink."
msgstr "false = 頻寬最佳化下行 true = 純 Sudoku 下行。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1235
-#: htdocs/luci-static/resources/fchomo/listeners.js:1246
-#: htdocs/luci-static/resources/fchomo/listeners.js:1253
-#: htdocs/luci-static/resources/view/fchomo/node.js:1335
-#: htdocs/luci-static/resources/view/fchomo/node.js:1348
-#: htdocs/luci-static/resources/view/fchomo/node.js:1355
-#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/fchomo/listeners.js:1265
+#: htdocs/luci-static/resources/fchomo/listeners.js:1276
+#: htdocs/luci-static/resources/fchomo/listeners.js:1283
+#: htdocs/luci-static/resources/view/fchomo/node.js:1359
+#: htdocs/luci-static/resources/view/fchomo/node.js:1372
+#: htdocs/luci-static/resources/view/fchomo/node.js:1379
+#: htdocs/luci-static/resources/view/fchomo/node.js:1385
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1418
+#: htdocs/luci-static/resources/view/fchomo/node.js:1442
msgid "gRPC User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1423
+#: htdocs/luci-static/resources/view/fchomo/node.js:1447
msgid "gRPC ping interval"
msgstr "gRPC ping 間隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1278
-#: htdocs/luci-static/resources/view/fchomo/node.js:1414
+#: htdocs/luci-static/resources/fchomo/listeners.js:1308
+#: htdocs/luci-static/resources/view/fchomo/node.js:1438
msgid "gRPC service name"
msgstr "gRPC 服務名稱"
@@ -3840,7 +3889,7 @@ msgstr "gVisor"
msgid "h2"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1530
+#: htdocs/luci-static/resources/view/fchomo/node.js:1554
msgid "h2mux"
msgstr ""
@@ -3852,12 +3901,7 @@ msgstr ""
msgid "h3-l4proxy"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:647
-#: htdocs/luci-static/resources/view/fchomo/node.js:978
-msgid "jls"
-msgstr ""
-
-#: htdocs/luci-static/resources/fchomo/listeners.js:943
+#: htdocs/luci-static/resources/fchomo/listeners.js:947
msgid "least one keypair required"
msgstr "至少需要一對密鑰"
@@ -3871,7 +3915,7 @@ msgstr "metacubexd"
#: htdocs/luci-static/resources/view/fchomo/client.js:1568
#: htdocs/luci-static/resources/view/fchomo/client.js:1802
#: htdocs/luci-static/resources/view/fchomo/client.js:1858
-#: htdocs/luci-static/resources/view/fchomo/node.js:1750
+#: htdocs/luci-static/resources/view/fchomo/node.js:1774
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:247
msgid "mihomo config"
msgstr "mihomo 配置"
@@ -3880,8 +3924,8 @@ msgstr "mihomo 配置"
msgid "mlkem768x25519plus"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1603
-#: htdocs/luci-static/resources/view/fchomo/node.js:1982
+#: htdocs/luci-static/resources/view/fchomo/node.js:1627
+#: htdocs/luci-static/resources/view/fchomo/node.js:2006
msgid "mpTCP"
msgstr "多路徑 TCP (mpTCP)"
@@ -3923,8 +3967,8 @@ msgstr "不包含 \",\""
msgid "null"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:644
-#: htdocs/luci-static/resources/fchomo/listeners.js:654
+#: htdocs/luci-static/resources/fchomo/listeners.js:645
+#: htdocs/luci-static/resources/fchomo/listeners.js:655
#: htdocs/luci-static/resources/view/fchomo/node.js:973
#: htdocs/luci-static/resources/view/fchomo/node.js:985
msgid "obfs-simple"
@@ -3938,11 +3982,11 @@ msgstr "僅當 %s 為 %s 時適用。"
msgid "only applies when %s is not %s."
msgstr "僅當 %s 不為 %s 時適用。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1963
+#: htdocs/luci-static/resources/view/fchomo/node.js:1987
msgid "override.override-expr"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1955
+#: htdocs/luci-static/resources/view/fchomo/node.js:1979
msgid "override.proxy-name"
msgstr ""
@@ -3950,8 +3994,8 @@ msgstr ""
msgid "packet addr (v2ray-core v5+)"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1288
-#: htdocs/luci-static/resources/view/fchomo/node.js:1456
+#: htdocs/luci-static/resources/fchomo/listeners.js:1318
+#: htdocs/luci-static/resources/view/fchomo/node.js:1480
msgid "packet-up"
msgstr ""
@@ -3960,8 +4004,8 @@ msgstr ""
msgid "poll"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1106
-#: htdocs/luci-static/resources/view/fchomo/node.js:1272
+#: htdocs/luci-static/resources/fchomo/listeners.js:1127
+#: htdocs/luci-static/resources/view/fchomo/node.js:1280
msgid "private key"
msgstr "私鑰"
@@ -3974,23 +4018,11 @@ msgstr "razord-meta"
msgid "requires front-end adaptation using the API."
msgstr "需要使用 API 的前端適配。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:646
-#: htdocs/luci-static/resources/view/fchomo/node.js:977
-msgid "restls"
-msgstr ""
-
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:232
msgid "rule-set"
msgstr "規則集"
-#: htdocs/luci-static/resources/fchomo/listeners.js:645
-#: htdocs/luci-static/resources/fchomo/listeners.js:655
-#: htdocs/luci-static/resources/view/fchomo/node.js:976
-#: htdocs/luci-static/resources/view/fchomo/node.js:986
-msgid "shadow-tls"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/fchomo/node.js:1528
+#: htdocs/luci-static/resources/view/fchomo/node.js:1552
msgid "smux"
msgstr ""
@@ -4003,17 +4035,17 @@ msgstr ""
msgid "src"
msgstr "src"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1286
-#: htdocs/luci-static/resources/view/fchomo/node.js:1454
+#: htdocs/luci-static/resources/fchomo/listeners.js:1316
+#: htdocs/luci-static/resources/view/fchomo/node.js:1478
msgid "stream-one"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1287
-#: htdocs/luci-static/resources/view/fchomo/node.js:1455
+#: htdocs/luci-static/resources/fchomo/listeners.js:1317
+#: htdocs/luci-static/resources/view/fchomo/node.js:1479
msgid "stream-up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1303
+#: htdocs/luci-static/resources/fchomo/listeners.js:1333
msgid "stream-up server seconds"
msgstr ""
@@ -4041,12 +4073,12 @@ msgstr "獨立標識"
msgid "unique value"
msgstr "獨立值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1998
+#: htdocs/luci-static/resources/view/fchomo/node.js:2022
msgid "up"
msgstr "Hysteria 上傳速率"
#: htdocs/luci-static/resources/fchomo/listeners.js:385
-#: htdocs/luci-static/resources/fchomo/listeners.js:698
+#: htdocs/luci-static/resources/fchomo/listeners.js:702
#: htdocs/luci-static/resources/view/fchomo/node.js:498
#: htdocs/luci-static/resources/view/fchomo/node.js:634
#: htdocs/luci-static/resources/view/fchomo/node.js:960
@@ -4055,7 +4087,7 @@ msgid "v1"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:386
-#: htdocs/luci-static/resources/fchomo/listeners.js:699
+#: htdocs/luci-static/resources/fchomo/listeners.js:703
#: htdocs/luci-static/resources/view/fchomo/node.js:499
#: htdocs/luci-static/resources/view/fchomo/node.js:961
#: htdocs/luci-static/resources/view/fchomo/node.js:1022
@@ -4063,7 +4095,7 @@ msgid "v2"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:387
-#: htdocs/luci-static/resources/fchomo/listeners.js:700
+#: htdocs/luci-static/resources/fchomo/listeners.js:704
#: htdocs/luci-static/resources/view/fchomo/node.js:500
#: htdocs/luci-static/resources/view/fchomo/node.js:1023
msgid "v3"
@@ -4084,7 +4116,7 @@ msgstr ""
msgid "valid JSON format"
msgstr "有效的 JSON 格式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1226
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
msgid "valid SHA256 string with %d characters"
msgstr "包含 %d 個字元的有效 SHA256 字串"
@@ -4130,7 +4162,7 @@ msgstr ""
msgid "yacd-meta"
msgstr "yacd-meta"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1529
+#: htdocs/luci-static/resources/view/fchomo/node.js:1553
msgid "yamux"
msgstr ""
diff --git a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_inbound b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_inbound
index 2c4557a7..6b67df3c 100755
--- a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_inbound
+++ b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_inbound
@@ -25,6 +25,30 @@ migrate() {
uci_set "$CONF" "$1" max_idle_time "$tuic_max_idle_time"
fi
+ # hysteria_up_mbps -> brutal_up_mbps
+ if isDefined "$1" hysteria_up_mbps; then
+ local hysteria_up_mbps
+ config_get hysteria_up_mbps "$1" hysteria_up_mbps ""
+ uci_remove "$CONF" "$1" hysteria_up_mbps
+ uci_set "$CONF" "$1" brutal_up_mbps "$hysteria_up_mbps"
+ fi
+
+ # hysteria_down_mbps -> brutal_down_mbps
+ if isDefined "$1" hysteria_down_mbps; then
+ local hysteria_down_mbps
+ config_get hysteria_down_mbps "$1" hysteria_down_mbps ""
+ uci_remove "$CONF" "$1" hysteria_down_mbps
+ uci_set "$CONF" "$1" brutal_down_mbps "$hysteria_down_mbps"
+ fi
+
+ # hysteria_ignore_client_bandwidth -> brutal_ignore_client_bandwidth
+ if isDefined "$1" hysteria_ignore_client_bandwidth; then
+ local hysteria_ignore_client_bandwidth
+ config_get hysteria_ignore_client_bandwidth "$1" hysteria_ignore_client_bandwidth ""
+ uci_remove "$CONF" "$1" hysteria_ignore_client_bandwidth
+ uci_set "$CONF" "$1" brutal_ignore_client_bandwidth "$hysteria_ignore_client_bandwidth"
+ fi
+
# plugin -> plugin_type
if isDefined "$1" plugin; then
local plugin
diff --git a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_node b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_node
index 111fa573..4bf0acd1 100755
--- a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_node
+++ b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_node
@@ -59,6 +59,22 @@ migrate() {
uci_set "$CONF" "$1" max_open_streams "$tuic_max_open_streams"
fi
+ # hysteria_up_mbps -> brutal_up_mbps
+ if isDefined "$1" hysteria_up_mbps; then
+ local hysteria_up_mbps
+ config_get hysteria_up_mbps "$1" hysteria_up_mbps ""
+ uci_remove "$CONF" "$1" hysteria_up_mbps
+ uci_set "$CONF" "$1" brutal_up_mbps "$hysteria_up_mbps"
+ fi
+
+ # hysteria_down_mbps -> brutal_down_mbps
+ if isDefined "$1" hysteria_down_mbps; then
+ local hysteria_down_mbps
+ config_get hysteria_down_mbps "$1" hysteria_down_mbps ""
+ uci_remove "$CONF" "$1" hysteria_down_mbps
+ uci_set "$CONF" "$1" brutal_down_mbps "$hysteria_down_mbps"
+ fi
+
# plugin -> plugin_type
if isDefined "$1" plugin; then
local plugin
diff --git a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_server b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_server
index b2218d3f..1dd0769e 100755
--- a/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_server
+++ b/luci-app-fchomo/root/etc/uci-defaults/99_luci-app-fchomo-migration_server
@@ -33,6 +33,30 @@ migrate() {
uci_set "$CONF" "$1" max_idle_time "$tuic_max_idle_time"
fi
+ # hysteria_up_mbps -> brutal_up_mbps
+ if isDefined "$1" hysteria_up_mbps; then
+ local hysteria_up_mbps
+ config_get hysteria_up_mbps "$1" hysteria_up_mbps ""
+ uci_remove "$CONF" "$1" hysteria_up_mbps
+ uci_set "$CONF" "$1" brutal_up_mbps "$hysteria_up_mbps"
+ fi
+
+ # hysteria_down_mbps -> brutal_down_mbps
+ if isDefined "$1" hysteria_down_mbps; then
+ local hysteria_down_mbps
+ config_get hysteria_down_mbps "$1" hysteria_down_mbps ""
+ uci_remove "$CONF" "$1" hysteria_down_mbps
+ uci_set "$CONF" "$1" brutal_down_mbps "$hysteria_down_mbps"
+ fi
+
+ # hysteria_ignore_client_bandwidth -> brutal_ignore_client_bandwidth
+ if isDefined "$1" hysteria_ignore_client_bandwidth; then
+ local hysteria_ignore_client_bandwidth
+ config_get hysteria_ignore_client_bandwidth "$1" hysteria_ignore_client_bandwidth ""
+ uci_remove "$CONF" "$1" hysteria_ignore_client_bandwidth
+ uci_set "$CONF" "$1" brutal_ignore_client_bandwidth "$hysteria_ignore_client_bandwidth"
+ fi
+
# plugin -> plugin_type
if isDefined "$1" plugin; then
local plugin
diff --git a/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc b/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc
index 162f87e1..13b0e6a7 100644
--- a/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc
+++ b/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc
@@ -573,11 +573,13 @@ uci.foreach(uciconf, ucinode, (cfg) => {
"reduce-rtt": strToBool(cfg.tuic_reduce_rtt),
"request-timeout": strToInt(cfg.tuic_request_timeout) || null,
+ /* Brutal */
+ up: strToInt(cfg.brutal_up_mbps),
+ down: strToInt(cfg.brutal_down_mbps),
+
/* Hysteria / Hysteria2 */
ports: isEmpty(cfg.hysteria_ports) ? null : join(',', cfg.hysteria_ports),
"hop-interval": strToInt(cfg.hysteria_hop_interval), // @DEBUG ERROR data type *utils.IntRanges[uint16]
- up: cfg.hysteria_up_mbps ? cfg.hysteria_up_mbps + ' Mbps' : null,
- down: cfg.hysteria_down_mbps ? cfg.hysteria_down_mbps + ' Mbps' : null,
obfs: cfg.hysteria_obfs_type,
"obfs-password": cfg.hysteria_obfs_password,
"obfs-min-packet-size": strToInt(cfg.hysteria_obfs_min_packet_size),
@@ -682,6 +684,10 @@ uci.foreach(uciconf, ucinode, (cfg) => {
config: cfg.tls_ech_config,
"query-server-name": cfg.tls_ech_query_server_name
} : null,
+ "jls-opts": cfg.tls_jls === '1' ? {
+ "username": cfg.tls_jls_username,
+ "password": cfg.tls_jls_password
+ } : null,
"reality-opts": cfg.tls_reality === '1' ? {
"public-key": cfg.tls_reality_public_key,
"short-id": cfg.tls_reality_short_id,
diff --git a/luci-app-fchomo/root/usr/share/ucode/fchomo.uc b/luci-app-fchomo/root/usr/share/ucode/fchomo.uc
index ad9c8701..dc4c4c4d 100644
--- a/luci-app-fchomo/root/usr/share/ucode/fchomo.uc
+++ b/luci-app-fchomo/root/usr/share/ucode/fchomo.uc
@@ -292,10 +292,12 @@ export function parseListener(cfg) {
"authentication-timeout": durationToSecond(cfg.tuic_authentication_timeout),
"max-udp-relay-packet-size": strToInt(cfg.tuic_max_udp_relay_packet_size),
+ /* Brutal */
+ up: strToInt(cfg.brutal_up_mbps),
+ down: strToInt(cfg.brutal_down_mbps),
+ "ignore-client-bandwidth": strToBool(cfg.brutal_ignore_client_bandwidth),
+
/* Hysteria2 */
- up: strToInt(cfg.hysteria_up_mbps),
- down: strToInt(cfg.hysteria_down_mbps),
- "ignore-client-bandwidth": strToBool(cfg.hysteria_ignore_client_bandwidth),
obfs: cfg.hysteria_obfs_type,
"obfs-password": cfg.hysteria_obfs_password,
"obfs-min-packet-size": strToInt(cfg.hysteria_obfs_min_packet_size),
@@ -417,7 +419,7 @@ export function parseListener(cfg) {
/* TLS fields */
...(cfg.allow_insecure === '1' ? { "allow-insecure": true } : cfg.tls === '1' ? {
- alpn: cfg.tls_alpn,
+ alpn: cfg.plugin_type in ['jls'] ? null : cfg.tls_alpn,
...(cfg.tls_reality === '1' ? {
"reality-config": {
dest: cfg.tls_reality_dest,
diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile
index b901bce5..1e94a163 100644
--- a/luci-app-passwall/Makefile
+++ b/luci-app-passwall/Makefile
@@ -7,8 +7,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall
-PKG_VERSION:=26.7.1
-PKG_RELEASE:=179
+PKG_VERSION:=26.7.15
+PKG_RELEASE:=180
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua
index 853e642b..00fd19a4 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua
@@ -441,24 +441,15 @@ o = s:option(Value, _n("tls_serverName"), "SNI " .. translate("Domain"))
o:depends({ [_n("tls")] = true })
o:depends({ [_n("protocol")] = "hysteria2" })
-if api.compare_versions(os.date("%Y.%m.%d"), "<", "3026.6.1") then
- o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
- o.default = "0"
- o:depends({ [_n("tls")] = true, [_n("reality")] = false })
- o:depends({ [_n("protocol")] = "hysteria2" })
-end
+o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)"))
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o:depends({ [_n("protocol")] = "hysteria2" })
+o.description = translate("Once set, connects only when the server’s chain fingerprint matches.") ..
+ string.format("%s", "→ " .. translate("Fetch Manually"))
-if api.compare_versions(xray_version, ">=", "26.1.31") then
- o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)"))
- o:depends({ [_n("tls")] = true, [_n("reality")] = false })
- o:depends({ [_n("protocol")] = "hysteria2" })
- o.description = translate("Once set, connects only when the server’s chain fingerprint matches.") ..
- string.format("%s", "→ " .. translate("Fetch Manually"))
-
- o = s:option(Value, _n("tls_CertByName"), translate("TLS Certificate Name (CertName)"), translate("TLS is used to verify the leaf certificate name."))
- o:depends({ [_n("tls")] = true, [_n("reality")] = false })
- o:depends({ [_n("protocol")] = "hysteria2" })
-end
+o = s:option(Value, _n("tls_CertByName"), translate("TLS Certificate Name (CertName)"), translate("TLS is used to verify the leaf certificate name."))
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o:depends({ [_n("protocol")] = "hysteria2" })
o = s:option(Flag, _n("tls_certificate"), translate("TLS Certificate (PEM)"))
o.default = "0"
diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua
index 66920df6..2ed73aea 100644
--- a/luci-app-passwall/luasrc/passwall/util_xray.lua
+++ b/luci-app-passwall/luasrc/passwall/util_xray.lua
@@ -152,21 +152,9 @@ function gen_outbound(flag, node, tag, proxy_table)
security = node.stream_security,
tlsSettings = (node.stream_security == "tls") and {
serverName = node.tls_serverName,
- allowInsecure = (function()
- if node.tls_pinSHA256 and node.tls_pinSHA256 ~= "" then return nil end
- if node.tls_allowInsecure == "1" then return true end
- end)(),
fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil,
- pinnedPeerCertSha256 = (function()
- if api.compare_versions(xray_version, "<", "26.1.31") then return nil end
- if not node.tls_pinSHA256 then return "" end
- return node.tls_pinSHA256
- end)(),
- verifyPeerCertByName = (function()
- if api.compare_versions(xray_version, "<", "26.1.31") then return nil end
- if not node.tls_CertByName then return "" end
- return node.tls_CertByName
- end)(),
+ pinnedPeerCertSha256 = node.tls_pinSHA256,
+ verifyPeerCertByName = node.tls_CertByName,
echConfigList = (node.ech == "1") and node.ech_config or nil,
certificates = (node.tls_certificate == "1" and node.tls_certificate_pem ~= "") and {
certificate = api.split(node.tls_certificate_pem, "\n"),
@@ -820,7 +808,8 @@ function gen_config_server(node)
serverNames = node.reality_serverNames or {},
privateKey = node.reality_private_key,
shortIds = node.reality_shortId or "",
- mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil
+ mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil,
+ minClientVer = "1.0.0"
} or nil
end
end
diff --git a/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm b/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm
index 895219bb..0aafedfe 100644
--- a/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm
+++ b/luci-app-passwall/luasrc/view/passwall/node_config/link_share_man.htm
@@ -1313,6 +1313,8 @@ local current_node = map:get(section)
opt.set(dom_prefix + 'utls', true);
opt.set(dom_prefix + 'fingerprint', queryParam.fp);
}
+ opt.set(dom_prefix + 'ech', !!queryParam.ech);
+ opt.set(dom_prefix + 'ech_config', queryParam.ech || '');
opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || '');
opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || '');
opt.set(
diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua
index 1c8720d1..57a1bf60 100755
--- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua
+++ b/luci-app-passwall/root/usr/share/passwall/subscribe.lua
@@ -1069,6 +1069,10 @@ local function processData(szType, content, add_mode, group, sub_cfg)
result.reality_publicKey = params.pbk or nil
result.reality_shortId = params.sid or nil
end
+ if params.ech and params.ech ~= "" then
+ result.ech = "1"
+ result.ech_config = params.ech
+ end
result.tls_pinSHA256 = params.pcs
result.tls_CertByName = params.vcn
result.tls_allowInsecure = params.allowinsecure or params.allowInsecure or params.insecure
diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile
index 441f3820..772ca3ac 100644
--- a/luci-app-passwall2/Makefile
+++ b/luci-app-passwall2/Makefile
@@ -6,8 +6,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall2
-PKG_VERSION:=26.7.12
-PKG_RELEASE:=62
+PKG_VERSION:=26.7.16
+PKG_RELEASE:=63
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
diff --git a/luci-app-passwall2/htdocs/luci-static/resources/view/passwall2/cbi.js b/luci-app-passwall2/htdocs/luci-static/resources/view/passwall2/cbi.js
new file mode 100644
index 00000000..3f9d6470
--- /dev/null
+++ b/luci-app-passwall2/htdocs/luci-static/resources/view/passwall2/cbi.js
@@ -0,0 +1,38 @@
+function is_json(str) {
+ try {
+ const result = JSON.parse(str);
+ return typeof result === 'object' && result !== null;
+ } catch (e) {
+ return false;
+ }
+}
+
+function is_timehhmm(str) {
+ const match = String(str).match(/^(\d?\d):(\d\d)$/);
+ if (match) {
+ const hour = parseInt(match[1], 10);
+ const minute = parseInt(match[2], 10);
+ if (hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59) {
+ return true;
+ }
+ }
+ return false;
+}
+
+if (typeof cbi_validators !== 'undefined' && cbi_validators !== null) {
+ cbi_validators['json'] = function() {
+ return is_json(this);
+ }
+ cbi_validators['timehhmm'] = function() {
+ return is_timehhmm(this);
+ }
+} else {
+ L.require('validation').then(function(validation) {
+ validation.types['json'] = function() {
+ return this.assert(is_json(this.value), _('Must be JSON text!'));
+ }
+ validation.types['timehhmm'] = function() {
+ return this.assert(is_timehhmm(this.value), _('valid time (hh:mm)'));
+ }
+ });
+}
diff --git a/luci-app-passwall2/luasrc/controller/passwall2.lua b/luci-app-passwall2/luasrc/controller/passwall2.lua
index c01dbae0..29c9d841 100644
--- a/luci-app-passwall2/luasrc/controller/passwall2.lua
+++ b/luci-app-passwall2/luasrc/controller/passwall2.lua
@@ -114,6 +114,8 @@ function index()
--[[geoview]]
entry({"admin", "services", appname, "geo_view"}, call("geo_view")).leaf = true
+
+ entry({"admin", "services", appname, "fetch_certsha256"}, call("fetch_certsha256")).leaf = true
end
function check_site(host, port)
@@ -995,3 +997,17 @@ function flush_set()
http.redirect(api.url("log"))
end
end
+
+function fetch_certsha256()
+ local id = http.formvalue("id") or ""
+ local address = (id ~= "") and uci:get(appname, id, "address") or ""
+ local port = (id ~= "") and uci:get(appname, id, "port") or 0
+ local sni = (id ~= "") and uci:get(appname, id, "tls_serverName") or ""
+ sni = (sni ~= "") and sni or address
+ if address == "" or port == 0 then
+ http_write_json_error()
+ return
+ end
+ local data = api.fetch_cert_sha256(address, port, sni, 5)
+ http_write_json(data ~= "" and { code = 1, data = data } or { code = 0 })
+end
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua
index 3df0c9f7..0b815a51 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl.lua
@@ -2,6 +2,8 @@ local api = require "luci.passwall2.api"
local appname = api.appname
local sys = api.sys
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -13,7 +15,8 @@ o.rmempty = false
o.default = false
-- [[ ACLs Settings ]]--
-s = m:section(TypedSection, "acl_rule")
+local cfgname = "acl_rule"
+s = m:section(TypedSection, cfgname)
s.template = "cbi/tblsection"
s.sortable = true
s.anonymous = true
@@ -65,4 +68,9 @@ i.cfgvalue = function(t, n)
return v
end
-return m
+local sortable = Template(appname .. "/cbi/sortable")
+sortable.api = api
+sortable.target_cfgname = cfgname
+m:append(sortable)
+
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua
index b8b77501..b366d623 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua
@@ -1,6 +1,8 @@
local api = require "luci.passwall2.api"
local appname = api.appname
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -379,4 +381,4 @@ for k, v in pairs(nodes_table) do
end
end
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/app_update.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/app_update.lua
index afdef1b9..462046e3 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/app_update.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/app_update.lua
@@ -2,6 +2,8 @@ local api = require "luci.passwall2.api"
local com = require "luci.passwall2.com"
local appname = api.appname
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -28,4 +30,4 @@ o.cfgvalue = function(t, n)
return string.format('%s', translate("if you want to run from memory, change the path, /tmp beginning then save the application and update it manually."))
end
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/geoview.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/geoview.lua
index 071d8e80..abd9c1f1 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/geoview.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/geoview.lua
@@ -1,5 +1,5 @@
local api = require "luci.passwall2.api"
-local appname = "passwall2"
+local appname = api.appname
local fs = api.fs
local uci = api.uci
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua
index 0afe66f8..d00c8f1b 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua
@@ -4,6 +4,8 @@ datatypes = api.datatypes
has_singbox = api.finded_com("sing-box")
has_xray = api.finded_com("xray")
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -387,4 +389,4 @@ footer.shunt_list = api.jsonc.stringify(shunt_list)
m:append(footer)
m:append(Template(appname .. "/global/status_bottom"))
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/haproxy.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/haproxy.lua
index 6a8732ee..06dad374 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/haproxy.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/haproxy.lua
@@ -15,6 +15,8 @@ for k, e in ipairs(api.get_valid_nodes()) do
end
end
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -100,7 +102,8 @@ end
o:depends("health_check_type", "passwall_logic")
-- [[ Balancing Settings ]]--
-s = m:section(TypedSection, "haproxy_config", translate("Node List"))
+local cfgname = "haproxy_config"
+s = m:section(TypedSection, cfgname, translate("Node List"))
s.description = "" ..
translate("Add a node, Export Of Multi WAN Only support Multi Wan. Load specific gravity range 1-256. Multiple primary servers can be load balanced, standby will only be enabled when the primary server is offline! Multiple groups can be set, Haproxy port same one for each group.") .. "
" ..
translate("Note that the node configuration parameters for load balancing must be consistent when use TCP health check type, otherwise it cannot be used normally!") .. ""
@@ -176,6 +179,11 @@ o:value(0, translate("Primary"))
o:value(1, translate("Standby"))
o.rmempty = false
+local sortable = Template(appname .. "/cbi/sortable")
+sortable.api = api
+sortable.target_cfgname = cfgname
+m:append(sortable)
+
m:append(Template(appname .. "/haproxy/js"))
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_config.lua
index 5051bd7b..ead7043f 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_config.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_config.lua
@@ -1,6 +1,8 @@
api = require "luci.passwall2.api"
appname = api.appname
+api.set_default_cbi()
+
m = Map(appname, translate("Node Config"))
m.redirect = api.url()
api.set_apply_on_parse(m)
@@ -94,7 +96,6 @@ local footer = Template(appname .. "/node_config/footer")
footer.api = api
footer.config = m.config
footer.section = arg[1]
-
m:append(footer)
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua
index 745188de..37fb1867 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua
@@ -3,6 +3,8 @@ local appname = api.appname
local datatypes = api.datatypes
local sys = api.sys
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -33,4 +35,4 @@ s:append(Template(appname .. "/node_list/link_add_node"))
m:append(Template(appname .. "/node_list/node_list"))
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua
index 7140ac5c..6ffdd44a 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua
@@ -38,6 +38,8 @@ if has_hysteria2 then
table.insert(hysteria2_type, s)
end
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -124,7 +126,8 @@ o.cfgvalue = function(self, section)
translate("Manual subscription All"))
end
-s = m:section(TypedSection, "subscribe_list", "", "" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "")
+local cfgname = "subscribe_list"
+s = m:section(TypedSection, cfgname, "", "" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "")
s.addremove = true
s.anonymous = true
s.sortable = true
@@ -144,7 +147,7 @@ o.validate = function(self, value, section)
return nil, translate("Remark cannot be empty.")
end
local duplicate = false
- m.uci:foreach(appname, "subscribe_list", function(e)
+ m.uci:foreach(appname, cfgname, function(e)
if e[".name"] ~= section and e["remark"] and e["remark"]:lower() == value:lower() then
duplicate = true
return false
@@ -219,6 +222,11 @@ o.cfgvalue = function(self, section)
section, translate("Manual subscription"))
end
+local sortable = Template(appname .. "/cbi/sortable")
+sortable.api = api
+sortable.target_cfgname = cfgname
+m:append(sortable)
+
m:append(Template(appname .. "/node_subscribe/js"))
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua
index b5068ccc..198e19bc 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua
@@ -1,6 +1,8 @@
local api = require "luci.passwall2.api"
local appname = api.appname
+api.set_default_cbi()
+
m = Map(appname)
m.redirect = api.url("node_subscribe")
api.set_apply_on_parse(m)
@@ -255,13 +257,7 @@ for t = 0, 23 do
end
end
o.default = "0:00"
-o.validate = function(self, value)
- local b = api.is_timehhmm(value)
- if b then
- return value
- end
- return nil
-end
+o.datatype = "timehhmm"
o:depends("update_week_mode", "0")
o:depends("update_week_mode", "1")
o:depends("update_week_mode", "2")
@@ -336,4 +332,4 @@ o.description = translate("Some subscription providers may require a hardware id
translate("Enabling this option will send a hashed HWID when updating subscriptions.") .. "
" ..
translate("This may reveal limited hardware information. Enable only if you trust your provider.")
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua
index a715756c..b46db196 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua
@@ -8,6 +8,8 @@ local port_validate = function(self, value, t)
return value:gsub("-", ":")
end
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -53,13 +55,7 @@ for index, value in ipairs({"stop", "start", "restart"}) do
end
end
o.default = "0:00"
- o.validate = function(self, value)
- local b = api.is_timehhmm(value)
- if b then
- return value
- end
- return nil
- end
+ o.datatype = "timehhmm"
o:depends(value .. "_week_mode", "0")
o:depends(value .. "_week_mode", "1")
o:depends(value .. "_week_mode", "2")
@@ -312,4 +308,4 @@ if has_singbox then
o.default = 0
end
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/rule.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/rule.lua
index 2fba7319..e0b65f42 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/rule.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/rule.lua
@@ -1,6 +1,8 @@
local api = require "luci.passwall2.api"
local appname = api.appname
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -59,13 +61,7 @@ for t = 0, 23 do
end
end
o.default = "0:00"
-o.validate = function(self, value)
- local b = api.is_timehhmm(value)
- if b then
- return value
- end
- return nil
-end
+o.datatype = "timehhmm"
o:depends("update_week_mode", "0")
o:depends("update_week_mode", "1")
o:depends("update_week_mode", "2")
@@ -92,7 +88,8 @@ end
s:append(Template(appname .. "/rule/rule_version"))
-s = m:section(TypedSection, "shunt_rules", "Sing-Box/Xray " .. translate("Shunt Rule"), "" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "")
+local cfgname = "shunt_rules"
+s = m:section(TypedSection, cfgname, "Sing-Box/Xray " .. translate("Shunt Rule"), "" .. translate("Please note attention to the priority, the higher the order, the higher the priority.") .. "")
s.template = "cbi/tblsection"
s.anonymous = false
s.addremove = true
@@ -113,4 +110,9 @@ end
o = s:option(DummyValue, "remarks", translate("Remarks"))
-return m
+local sortable = Template(appname .. "/cbi/sortable")
+sortable.api = api
+sortable.target_cfgname = cfgname
+m:append(sortable)
+
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua
index e154fa84..f7035984 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua
@@ -2,6 +2,8 @@ local api = require "luci.passwall2.api"
local appname = api.appname
local datatypes = api.datatypes
+api.set_default_cbi()
+
m = Map(appname, "Sing-Box/Xray " .. translate("Shunt Rule"))
m.redirect = api.url("rule")
api.set_apply_on_parse(m)
@@ -248,4 +250,4 @@ ip_list.description = "
"
o = s:option(Flag, "invert", "invert", translate("Invert match result.") .. " " .. translate("Only support Sing-Box."))
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua
index 59723a56..9d9ac64a 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/socks_config.lua
@@ -1,6 +1,8 @@
local api = require "luci.passwall2.api"
local appname = api.appname
+api.set_default_cbi()
+
m = Map(appname)
api.set_apply_on_parse(m)
@@ -80,23 +82,14 @@ o = s:option(Flag, "enable_autoswitch", translate("Auto Switch"))
o.default = 0
o.rmempty = false
-o = s:option(Value, "autoswitch_testing_time", translate("How often to test"), translate("Units:seconds"))
-o.datatype = "min(10)"
-o.default = 30
+o = s:option(ListValue, "backup_node_add_mode", translate("Backup Node Addition Method"))
o:depends("enable_autoswitch", true)
+o.default = "manual"
+o:value("manual", translate("Manual"))
+o:value("batch", translate("Batch"))
-o = s:option(Value, "autoswitch_connect_timeout", translate("Timeout seconds"), translate("Units:seconds"))
-o.datatype = "min(1)"
-o.default = 3
-o:depends("enable_autoswitch", true)
-
-o = s:option(Value, "autoswitch_retry_num", translate("Timeout retry num"))
-o.datatype = "min(1)"
-o.default = 1
-o:depends("enable_autoswitch", true)
-
o = s:option(DynamicList, "autoswitch_backup_node", translate("List of backup nodes"))
-o:depends("enable_autoswitch", true)
+o:depends("backup_node_add_mode", "manual")
o.template = appname .. "/cbi/nodes_dynamiclist"
o.group = {}
o.write = function(self, section, value)
@@ -118,6 +111,44 @@ for i, v in pairs(nodes_table) do
socks_node.group[#socks_node.group+1] = (v.group and v.group ~= "") and v.group or translate("default")
end
+o = s:option(MultiValue, "backup_node_group", translate("Select Group"))
+o:depends("backup_node_add_mode", "batch")
+o.widget = "checkbox"
+o:value("default", translate("default"))
+local groups = {}
+m.uci:foreach(appname, "nodes", function(s)
+ if s.group and s.group ~= "" then
+ groups[s.group] = true
+ end
+end)
+for k, v in pairs(groups) do
+ o:value(api.UrlEncode(k), k)
+end
+
+o = s:option(Value, "backup_node_match_rule", translate("Node Matching Rules"))
+o:depends("backup_node_add_mode", "batch")
+local descrStr = "Example: ^A && B && !C && D$
"
+descrStr = descrStr .. "This means the node remark must start with A (^), include B, exclude C (!), and end with D ($).
"
+descrStr = descrStr .. "Conditions are joined by && (AND), and their order does not affect the result.
"
+descrStr = descrStr .. "Multiple groups can be separated by || (OR), matching succeeds if any group matches.
"
+descrStr = descrStr .. "Example: A && B || C && D means (A AND B) OR (C AND D)."
+o.description = translate(descrStr)
+
+o = s:option(Value, "autoswitch_testing_time", translate("How often to test"), translate("Units:seconds"))
+o.datatype = "min(10)"
+o.default = 30
+o:depends("enable_autoswitch", true)
+
+o = s:option(Value, "autoswitch_connect_timeout", translate("Timeout seconds"), translate("Units:seconds"))
+o.datatype = "min(1)"
+o.default = 3
+o:depends("enable_autoswitch", true)
+
+o = s:option(Value, "autoswitch_retry_num", translate("Timeout retry num"))
+o.datatype = "min(1)"
+o.default = 1
+o:depends("enable_autoswitch", true)
+
o = s:option(Flag, "autoswitch_restore_switch", translate("Restore Switch"), translate("When detects main node is available, switch back to the main node."))
o:depends("enable_autoswitch", true)
@@ -134,6 +165,6 @@ o:depends("enable_autoswitch", true)
o = s:option(DummyValue, "btn")
o.template = appname .. "/socks_auto_switch/btn"
-o:depends("enable_autoswitch", true)
+o:depends("backup_node_add_mode", "manual")
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
index 9fc3f6eb..12e44eb6 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
@@ -442,22 +442,15 @@ o = s:option(Value, _n("tls_serverName"), "SNI " .. translate("Domain"))
o:depends({ [_n("tls")] = true })
o:depends({ [_n("protocol")] = "hysteria2" })
-if api.compare_versions(os.date("%Y.%m.%d"), "<", "3026.6.1") then
- o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
- o.default = "0"
- o:depends({ [_n("tls")] = true, [_n("reality")] = false })
- o:depends({ [_n("protocol")] = "hysteria2" })
-end
+o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)"))
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o:depends({ [_n("protocol")] = "hysteria2" })
+o.description = translate("Once set, connects only when the server’s chain fingerprint matches.") ..
+ string.format("%s", "→ " .. translate("Fetch Manually"))
-if api.compare_versions(xray_version, ">=", "26.1.31") then
- o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)"))
- o:depends({ [_n("tls")] = true, [_n("reality")] = false })
- o:depends({ [_n("protocol")] = "hysteria2" })
-
- o = s:option(Value, _n("tls_CertByName"), translate("TLS Certificate Name (CertName)"), translate("TLS is used to verify the leaf certificate name."))
- o:depends({ [_n("tls")] = true, [_n("reality")] = false })
- o:depends({ [_n("protocol")] = "hysteria2" })
-end
+o = s:option(Value, _n("tls_CertByName"), translate("TLS Certificate Name (CertName)"), translate("TLS is used to verify the leaf certificate name."))
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o:depends({ [_n("protocol")] = "hysteria2" })
o = s:option(Flag, _n("tls_certificate"), translate("TLS Certificate (PEM)"))
o.default = "0"
@@ -671,6 +664,14 @@ o = s:option(TextValue, _n("xhttp_extra"), " ", translate("An XHttpObject in J
o:depends({ [_n("use_xhttp_extra")] = true })
o.rows = 10
o.wrap = "off"
+o.datatype = "json"
+local o_validate = o.validate
+o.validate = function(self, value)
+ value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n")
+ local v = o_validate(self, value)
+ if v then return v end
+ return nil, "XHTTP Extra " .. translate("Must be JSON text!")
+end
o.custom_cfgvalue = function(self, section, value)
local raw = m:get(section, "xhttp_extra")
if raw then
@@ -693,14 +694,6 @@ o.custom_write = function(self, section, value)
m:del(section, "download_address")
end
end
-o.validate = function(self, value)
- value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n")
- if api.jsonc.parse(value) then
- return value
- else
- return nil, "XHTTP Extra " .. translate("Must be JSON text!")
- end
-end
o.custom_remove = function(self, section, value)
m:del(section, "xhttp_extra")
m:del(section, "download_address")
@@ -758,6 +751,14 @@ o.rows = 10
o.wrap = "off"
o.description = translate("An FinalMaskObject in JSON format, used for sharing.") .. "
" ..
translate("Custom finalmask overrides mkcp, hysteria2, fragment, noise, and related settings.")
+o.datatype = "json"
+local o_validate = o.validate
+o.validate = function(self, value)
+ value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n")
+ local v = o_validate(self, value)
+ if v then return v end
+ return nil, "FinalMask " .. translate("Must be JSON text!")
+end
o.custom_cfgvalue = function(self, section, value)
local raw = m:get(section, "finalmask")
if raw then
@@ -767,14 +768,6 @@ end
o.custom_write = function(self, section, value)
m:set(section, "finalmask", api.base64Encode(value) or "")
end
-o.validate = function(self, value)
- value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n")
- if api.jsonc.parse(value) then
- return value
- else
- return nil, "FinalMask " .. translate("Must be JSON text!")
- end
-end
--[[Fast Open]]
o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/index.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/index.lua
index 70bec3f8..33f24596 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/index.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/index.lua
@@ -1,4 +1,7 @@
local api = require "luci.passwall2.api"
+local appname = api.appname
+
+api.set_default_cbi()
m = Map("passwall2_server", translate("Server-Side"))
api.set_apply_on_parse(m)
@@ -10,7 +13,8 @@ t.addremove = false
e = t:option(Flag, "enable", translate("Enable"))
e.rmempty = false
-t = m:section(TypedSection, "user", translate("Users Manager"))
+local cfgname = "user"
+t = m:section(TypedSection, cfgname, translate("Users Manager"))
t.anonymous = true
t.addremove = true
t.sortable = true
@@ -85,8 +89,14 @@ e = t:option(Flag, "log", translate("Log"))
e.default = "1"
e.rmempty = false
-m:append(Template("passwall2/server/log"))
+local sortable = Template(appname .. "/cbi/sortable")
+sortable.api = api
+sortable.appname = m.config
+sortable.target_cfgname = cfgname
+m:append(sortable)
-m:append(Template("passwall2/server/users_list_status"))
-return m
+m:append(Template(appname .. "/server/log"))
+m:append(Template(appname .. "/server/users_list_status"))
+
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria2.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria2.lua
index 0b0dd1e2..5473fc30 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria2.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/hysteria2.lua
@@ -129,12 +129,12 @@ o = s:option(TextValue, _n("custom_config"), translate("Custom Config"))
o.rows = 10
o.wrap = "off"
o:depends({ [_n("custom")] = true })
-o.validate = function(self, value, t)
- if value and api.jsonc.parse(value) then
- return value
- else
- return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
- end
+o.datatype = "json"
+local o_validate = o.validate
+o.validate = function(self, value)
+ local v = o_validate(self, value)
+ if v then return v end
+ return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
end
o.custom_cfgvalue = function(self, section, value)
local config_str = m:get(section, "config_str")
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
index cf944c3f..09dd948d 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
@@ -412,6 +412,7 @@ o = s:option(TextValue, _n("finalmask"), "FinalMask JSON")
o:depends({ [_n("use_finalmask")] = true })
o.rows = 10
o.wrap = "off"
+o.datatype = "json"
o.custom_cfgvalue = function(self, section, value)
local raw = m:get(section, "finalmask")
if raw then
@@ -421,14 +422,6 @@ end
o.custom_write = function(self, section, value)
m:set(section, "finalmask", api.base64Encode(value) or "")
end
-o.validate = function(self, value)
- value = api.trim(value):gsub("\r\n", "\n"):gsub("^[ \t]*\n", ""):gsub("\n[ \t]*$", ""):gsub("\n[ \t]*\n", "\n")
- if api.jsonc.parse(value) then
- return value
- else
- return nil, "FinalMask " .. translate("Must be JSON text!")
- end
-end
--[[acceptProxyProtocol]]
o = s:option(Flag, _n("acceptProxyProtocol"), translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used."))
@@ -523,16 +516,16 @@ for _, d in ipairs(netdev_list) do
o:value(d.name, d.label)
end
-o = s:option(TextValue, _n("custom_config"), translate("Custom Config"))
+o = s:option(TextValue, _n("custom_config"), translate("Custom Config") .. " (JSON)")
o.rows = 10
o.wrap = "off"
o:depends({ [_n("custom")] = true })
-o.validate = function(self, value, t)
- if value and api.jsonc.parse(value) then
- return value
- else
- return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
- end
+o.datatype = "json"
+local o_validate = o.validate
+o.validate = function(self, value)
+ local v = o_validate(self, value)
+ if v then return v end
+ return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
end
o.custom_cfgvalue = function(self, section, value)
local config_str = m:get(section, "config_str")
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua
index d45dc4ad..8f906243 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/sing-box.lua
@@ -489,16 +489,16 @@ for _, d in ipairs(netdev_list) do
o:value(d.name, d.label)
end
-o = s:option(TextValue, _n("custom_config"), translate("Custom Config"))
+o = s:option(TextValue, _n("custom_config"), translate("Custom Config") .. " (JSON)")
o.rows = 10
o.wrap = "off"
o:depends({ [_n("custom")] = true })
-o.validate = function(self, value, t)
- if value and api.jsonc.parse(value) then
- return value
- else
- return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
- end
+o.datatype = "json"
+local o_validate = o.validate
+o.validate = function(self, value)
+ local v = o_validate(self, value)
+ if v then return v end
+ return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
end
o.custom_cfgvalue = function(self, section, value)
local config_str = m:get(section, "config_str")
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ss-rust.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ss-rust.lua
index d0939430..a6bca4f9 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ss-rust.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ss-rust.lua
@@ -49,16 +49,16 @@ o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"))
o.default = "0"
o:depends({ [_n("custom")] = false })
-o = s:option(TextValue, _n("custom_config"), translate("Custom Config"))
+o = s:option(TextValue, _n("custom_config"), translate("Custom Config") .. " (JSON)")
o.rows = 10
o.wrap = "off"
o:depends({ [_n("custom")] = true })
-o.validate = function(self, value, t)
- if value and api.jsonc.parse(value) then
- return value
- else
- return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
- end
+o.datatype = "json"
+local o_validate = o.validate
+o.validate = function(self, value)
+ local v = o_validate(self, value)
+ if v then return v end
+ return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
end
o.custom_cfgvalue = function(self, section, value)
local config_str = m:get(section, "config_str")
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ssr.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ssr.lua
index 02a94f61..d77cf74c 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ssr.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ssr.lua
@@ -76,16 +76,16 @@ o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"))
o.default = "0"
o:depends({ [_n("custom")] = false })
-o = s:option(TextValue, _n("custom_config"), translate("Custom Config"))
+o = s:option(TextValue, _n("custom_config"), translate("Custom Config") .. " (JSON)")
o.rows = 10
o.wrap = "off"
o:depends({ [_n("custom")] = true })
-o.validate = function(self, value, t)
- if value and api.jsonc.parse(value) then
- return value
- else
- return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
- end
+o.datatype = "json"
+local o_validate = o.validate
+o.validate = function(self, value)
+ local v = o_validate(self, value)
+ if v then return v end
+ return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
end
o.custom_cfgvalue = function(self, section, value)
local config_str = m:get(section, "config_str")
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua
index c50d5ca9..b3da0a04 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/user.lua
@@ -2,6 +2,8 @@ api = require "luci.passwall2.api"
appname = api.appname
fs = api.fs
+api.set_default_cbi()
+
m = Map("passwall2_server", translate("Server Config"))
m.redirect = api.url("server")
api.set_apply_on_parse(m)
@@ -54,4 +56,4 @@ footer.config = m.config
footer.section = arg[1]
m:append(footer)
-return m
+return api.return_map(m)
diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua
index 7da2d87a..18a13dec 100644
--- a/luci-app-passwall2/luasrc/passwall2/api.lua
+++ b/luci-app-passwall2/luasrc/passwall2/api.lua
@@ -367,8 +367,16 @@ function strToTable(str)
return loadstring("return " .. str)()
end
-function is_timehhmm(timeStr)
- local hour, minute = string.match(timeStr, "^(%d?%d):(%d%d)$")
+function is_json(str)
+ if str and jsonc.parse(str) then
+ return true
+ end
+ return false
+end
+datatypes.json = is_json
+
+function is_timehhmm(str)
+ local hour, minute = string.match(str, "^(%d?%d):(%d%d)$")
if hour and minute then
hour = tonumber(hour)
minute = tonumber(minute)
@@ -378,6 +386,7 @@ function is_timehhmm(timeStr)
end
return false
end
+datatypes.timehhmm = is_timehhmm
function is_normal_node(e)
if e and e.type and e.protocol and (e.protocol == "_balancing" or e.protocol == "_shunt" or e.protocol == "_iface" or e.protocol == "_urltest") then
@@ -1380,6 +1389,40 @@ function set_apply_on_parse(map)
end
end
+function set_default_cbi()
+ local cbi = require "luci.cbi"
+ if true then
+ --TextValue
+ local TextValue = cbi.TextValue
+ local original_init = TextValue.__init__
+ function TextValue.__init__(self, ...)
+ original_init(self, ...)
+ self.template = appname .. "/cbi/tvalue"
+ end
+ end
+end
+
+function return_map(map)
+ local cbi = require "luci.cbi"
+ local api = require "luci.passwall2.api"
+ if true then
+ -- header
+ local header = cbi.Template(appname .. "/cbi/header")
+ header.api = api
+ header.config = map.config
+ table.insert(map.children, 1, header)
+ end
+ if true then
+ -- footer
+ local footer = cbi.Template(appname .. "/cbi/footer")
+ footer.api = api
+ footer.config = map.config
+ map:append(footer)
+ end
+
+ return map
+end
+
function luci_types(id, m, s, type_name, option_prefix)
local fv_type
local field_type = s.fields["type"]
@@ -1585,6 +1628,56 @@ function match_node_rule(name, rule)
return false
end
+local normal_nodes = {}
+function get_batch_nodes(node)
+ if #normal_nodes == 0 then
+ for k, e in ipairs(get_valid_nodes()) do
+ if e.node_type == "normal" and (not e.chain_proxy or e.chain_proxy == "") then
+ normal_nodes[#normal_nodes + 1] = {
+ id = e[".name"],
+ remarks = e["remarks"],
+ group = e["group"]
+ }
+ end
+ end
+ end
+ if not node.node_group or node.node_group == "" then return {} end
+ local nodes = {}
+ for g in node.node_group:gmatch("%S+") do
+ g = UrlDecode(g)
+ for k, v in pairs(normal_nodes) do
+ local gn = (v.group and v.group ~= "") and v.group or "default"
+ if gn:lower() == g:lower() and match_node_rule(v.remarks, node.node_match_rule) then
+ nodes[#nodes + 1] = v.id
+ end
+ end
+ end
+ return nodes
+end
+
+function get_socks_backup_nodes(id)
+ id = trim(id)
+ if id == "" then return "" end
+ local socks = uci:get_all(appname, id)
+ local nodes
+ if socks.backup_node_add_mode and socks.backup_node_add_mode == "batch" then
+ local node = {}
+ node.node_group = socks.backup_node_group
+ node.node_match_rule = socks.backup_node_match_rule
+ nodes = get_batch_nodes(node)
+ else
+ nodes = socks.autoswitch_backup_node
+ end
+ local backup_nodes, seen = {}, {}
+ for _, v in ipairs(nodes or {}) do
+ if v ~= socks.node and not seen[v] then
+ seen[v] = true
+ table.insert(backup_nodes, v)
+ end
+ end
+ return table.concat(backup_nodes, " ")
+end
+
function get_core(field, candidates)
local v = uci:get(appname, "@global_subscribe[0]", field)
if v and v ~= "" then
@@ -1610,6 +1703,26 @@ function cleanEmptyTables(t)
return next(t) and t or nil
end
+function fetch_cert_sha256(host, port, sni, timeout)
+ if not host then return "" end
+ port = tonumber(port) or 443
+ sni = sni or host
+ timeout = tonumber(timeout) or 5
+ local cmd = string.format(
+ "timeout %d openssl s_client -connect %s:%d -servername %s -showcerts /dev/null " ..
+ "| awk 'BEGIN{c=0}/BEGIN CERT/{c++} c==1{print} /END CERT/{if(c==1)exit}' " ..
+ "| openssl x509 -outform der 2>/dev/null " ..
+ "| sha256sum 2>/dev/null",
+ timeout, host, port, sni
+ )
+ local out = trim(sys.exec(cmd))
+ local fp = out:match("^([0-9a-fA-F]+)")
+ if not fp or fp:lower():match("^e3b0c44298fc1c149afbf4c8996fb924") then
+ return ""
+ end
+ return fp:upper()
+end
+
function get_dnsmasq_server_domain()
local dnsmasq_server = uci:get("dhcp", "@dnsmasq[0]", "server")
local dnsmasq_server_t = {}
diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
index bbb5e872..f25afa17 100644
--- a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
+++ b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
@@ -1329,33 +1329,6 @@ function gen_config(var)
return result
end
- local nodes_list = {}
- function get_urltest_batch_nodes(_node)
- if #nodes_list == 0 then
- for k, e in ipairs(api.get_valid_nodes()) do
- if e.node_type == "normal" and (not e.chain_proxy or e.chain_proxy == "") then
- nodes_list[#nodes_list + 1] = {
- id = e[".name"],
- remarks = e["remarks"],
- group = e["group"]
- }
- end
- end
- end
- if not _node.node_group or _node.node_group == "" then return {} end
- local nodes = {}
- for g in _node.node_group:gmatch("%S+") do
- g = api.UrlDecode(g)
- for k, v in pairs(nodes_list) do
- local gn = (v.group and v.group ~= "") and v.group or "default"
- if gn:lower() == g:lower() and api.match_node_rule(v.remarks, _node.node_match_rule) then
- nodes[#nodes + 1] = v.id
- end
- end
- end
- return nodes
- end
-
function get_node_by_id(node_id)
if not node_id or node_id == "" or node_id == "nil" then return nil end
if node_id:find("Socks_") then
@@ -1377,7 +1350,7 @@ function gen_config(var)
-- new urltest
local ut_nodes
if _node.node_add_mode and _node.node_add_mode == "batch" then
- ut_nodes = get_urltest_batch_nodes(_node)
+ ut_nodes = api.get_batch_nodes(_node)
else
ut_nodes = _node.urltest_node
end
diff --git a/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/luci-app-passwall2/luasrc/passwall2/util_xray.lua
index 21d387cd..914320be 100644
--- a/luci-app-passwall2/luasrc/passwall2/util_xray.lua
+++ b/luci-app-passwall2/luasrc/passwall2/util_xray.lua
@@ -176,21 +176,9 @@ function gen_outbound(flag, node, tag, proxy_table)
security = node.stream_security,
tlsSettings = (node.stream_security == "tls") and {
serverName = node.tls_serverName,
- allowInsecure = (function()
- if node.tls_pinSHA256 and node.tls_pinSHA256 ~= "" then return nil end
- if node.tls_allowInsecure == "1" then return true end
- end)(),
fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil,
- pinnedPeerCertSha256 = (function()
- if api.compare_versions(xray_version, "<", "26.1.31") then return nil end
- if not node.tls_pinSHA256 then return "" end
- return node.tls_pinSHA256
- end)(),
- verifyPeerCertByName = (function()
- if api.compare_versions(xray_version, "<", "26.1.31") then return nil end
- if not node.tls_CertByName then return "" end
- return node.tls_CertByName
- end)(),
+ pinnedPeerCertSha256 = node.tls_pinSHA256,
+ verifyPeerCertByName = node.tls_CertByName,
echConfigList = (node.ech == "1") and node.ech_config or nil,
certificates = (node.tls_certificate == "1" and node.tls_certificate_pem ~= "") and {
certificate = api.split(node.tls_certificate_pem, "\n"),
@@ -839,7 +827,8 @@ function gen_config_server(node)
serverNames = node.reality_serverNames or {},
privateKey = node.reality_private_key,
shortIds = node.reality_shortId or "",
- mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil
+ mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil,
+ minClientVer = "1.0.0"
} or nil
end
end
@@ -1032,33 +1021,6 @@ function gen_config(var)
end
end
- local nodes_list = {}
- function get_balancer_batch_nodes(_node)
- if #nodes_list == 0 then
- for k, e in ipairs(api.get_valid_nodes()) do
- if e.node_type == "normal" and (not e.chain_proxy or e.chain_proxy == "") then
- nodes_list[#nodes_list + 1] = {
- id = e[".name"],
- remarks = e["remarks"],
- group = e["group"]
- }
- end
- end
- end
- if not _node.node_group or _node.node_group == "" then return {} end
- local nodes = {}
- for g in _node.node_group:gmatch("%S+") do
- g = api.UrlDecode(g)
- for k, v in pairs(nodes_list) do
- local gn = (v.group and v.group ~= "") and v.group or "default"
- if gn:lower() == g:lower() and api.match_node_rule(v.remarks, _node.node_match_rule) then
- nodes[#nodes + 1] = v.id
- end
- end
- end
- return nodes
- end
-
function gen_loopback(outbound_tag, loopback_dst)
if not outbound_tag or outbound_tag == "" then return nil end
local inbound_tag = loopback_dst and "lo-to-" .. loopback_dst or outbound_tag .. "-lo"
@@ -1090,7 +1052,7 @@ function gen_config(var)
-- new balancer
local blc_nodes
if _node.node_add_mode and _node.node_add_mode == "batch" then
- blc_nodes = get_balancer_batch_nodes(_node)
+ blc_nodes = api.get_batch_nodes(_node)
else
blc_nodes = _node.balancing_node
end
diff --git a/luci-app-passwall2/luasrc/view/passwall2/cbi/footer.htm b/luci-app-passwall2/luasrc/view/passwall2/cbi/footer.htm
new file mode 100644
index 00000000..46a25d3e
--- /dev/null
+++ b/luci-app-passwall2/luasrc/view/passwall2/cbi/footer.htm
@@ -0,0 +1 @@
+
diff --git a/luci-app-passwall2/luasrc/view/passwall2/cbi/header.htm b/luci-app-passwall2/luasrc/view/passwall2/cbi/header.htm
new file mode 100644
index 00000000..5d284d90
--- /dev/null
+++ b/luci-app-passwall2/luasrc/view/passwall2/cbi/header.htm
@@ -0,0 +1,2 @@
+
+
diff --git a/luci-app-passwall2/luasrc/view/passwall2/cbi/sortable.htm b/luci-app-passwall2/luasrc/view/passwall2/cbi/sortable.htm
new file mode 100644
index 00000000..2f508eaf
--- /dev/null
+++ b/luci-app-passwall2/luasrc/view/passwall2/cbi/sortable.htm
@@ -0,0 +1,159 @@
+<%
+local api = self.api
+local appname = self.appname or api.appname
+local target_cfgname = self.target_cfgname
+-%>
+
+
+
\ No newline at end of file
diff --git a/luci-app-passwall2/luasrc/view/passwall2/cbi/tvalue.htm b/luci-app-passwall2/luasrc/view/passwall2/cbi/tvalue.htm
new file mode 100644
index 00000000..8037b3d2
--- /dev/null
+++ b/luci-app-passwall2/luasrc/view/passwall2/cbi/tvalue.htm
@@ -0,0 +1,13 @@
+<%+cbi/valueheader%>
+
+<%+cbi/valuefooter%>
diff --git a/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm b/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm
index aca4d853..f993843d 100644
--- a/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm
+++ b/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm
@@ -2,46 +2,8 @@
local api = require "luci.passwall2.api"
local appname = api.appname
-%>
-
diff --git a/luci-app-passwall2/luasrc/view/passwall2/rule/rule_version.htm b/luci-app-passwall2/luasrc/view/passwall2/rule/rule_version.htm
index f5fbce49..8dbed277 100644
--- a/luci-app-passwall2/luasrc/view/passwall2/rule/rule_version.htm
+++ b/luci-app-passwall2/luasrc/view/passwall2/rule/rule_version.htm
@@ -4,44 +4,12 @@ local fs = api.fs
local has_old_geoip = fs.access("/tmp/bak_v2ray/geoip.dat")
local has_old_geosite = fs.access("/tmp/bak_v2ray/geosite.dat")
-%>
-
@@ -157,118 +125,5 @@ local has_old_geosite = fs.access("/tmp/bak_v2ray/geosite.dat")
}
);
}
-
- //分流规则添加拖拽排序
- document.addEventListener("DOMContentLoaded", function () {
- function initSortableForTable() {
- var section = document.getElementById("cbi-<%=api.appname%>-shunt_rules");
- if (!section) return;
-
- // === 插入 drag handle ===
- var rows = section.querySelectorAll("tr");
- rows.forEach(function(row) {
- var btn = row.querySelector(".cbi-button-remove:last-of-type");
- if (!btn) return;
- if (btn.nextElementSibling && btn.nextElementSibling.classList.contains("drag-handle")) return;
- var handle = document.createElement("span");
- handle.className = "drag-handle center";
- handle.title = "<%:Drag to reorder%>";
- handle.innerHTML = "⠿";
- btn.after(handle);
- });
-
- // === 初始化 Sortable ===
- var table = section.getElementsByTagName("table")[0];
- if (!table) return;
- var root = table.tBodies[0] || table;
- if (root._sortable_initialized) return root._sortable_instance;
- root._sortable_initialized = true;
-
- // 保存原始顺序
- root._origOrder = getCurrentOrder(root);
-
- try {
- root._sortable_instance = Sortable.create(root, {
- handle: ".drag-handle",
- draggable: "tr.cbi-section-table-row",
- animation: 150,
- ghostClass: "dragging-row",
- fallbackOnBody: true,
- forceFallback: false,
- swapThreshold: 0.65,
- onEnd: function (evt) {
- updateHiddenInput(root, section);
- }
- });
- return root._sortable_instance;
- } catch (e) {
- root._sortable_initialized = false;
- console.error("Sortable init failed:", e);
- }
- }
-
- // 获取 table 当前行顺序
- function getCurrentOrder(root) {
- var order = [];
- var rows = root.querySelectorAll("tr.cbi-section-table-row");
- rows.forEach(function (tr) {
- var id = tr.id || "";
- if (id.startsWith("cbi-<%=api.appname%>-"))
- id = id.replace("cbi-<%=api.appname%>-", "");
- order.push(id);
- });
- return order;
- }
-
- // 拖拽完成后更新 hidden input
- function updateHiddenInput(root, section) {
- var newOrder = getCurrentOrder(root);
- var changed = newOrder.join(" ") !== root._origOrder.join(" ");
- var hiddenInput = section.querySelector('input[type="hidden"][id^="cbi.sts."]');
- if (hiddenInput) {
- hiddenInput.value = changed ? newOrder.join(" ") : "";
- }
- }
-
- // 隐藏18.06 up/down 列
- function hideSortColumn(section) {
- var table = section.getElementsByTagName("table")[0];
- if(!table) return;
- var rows = table.querySelectorAll("tr.cbi-section-table-row");
- if(!rows.length) return;
- var colCount = rows[0].children.length, sortCol = -1;
- for(var col=0; col= THRESHOLD)
- setTimeout(initSortableForTable, 200);
- else
- requestAnimationFrame(tick);
- }
- tick();
- })();
- });
//]]>
diff --git a/luci-app-passwall2/po/fa/passwall2.po b/luci-app-passwall2/po/fa/passwall2.po
index 3c185094..cd8e2625 100644
--- a/luci-app-passwall2/po/fa/passwall2.po
+++ b/luci-app-passwall2/po/fa/passwall2.po
@@ -379,6 +379,9 @@ msgstr "توزیع بار"
msgid "Node Addition Method"
msgstr "روش افزودن گره"
+msgid "Backup Node Addition Method"
+msgstr "روش افزودن گره پشتیبان"
+
msgid "Manual"
msgstr "دستی"
@@ -1651,6 +1654,12 @@ msgstr "گواهی TLS (PEM)"
msgid "Full certificate (chain), PEM format."
msgstr "گواهی کامل (زنجیرهای)، فرمت PEM."
+msgid "Fetch Manually"
+msgstr "دریافت دستی"
+
+msgid "Fetch Failed"
+msgstr "واکشی ناموفق"
+
msgid "ECH Config"
msgstr "پیکربندی ECH"
@@ -2400,4 +2409,7 @@ msgid "Gecko Packet Size (min)"
msgstr "اندازه بسته Gecko (دقیقه)"
msgid "Gecko Packet Size (max)"
-msgstr "اندازه بسته Gecko (حداکثر)"
\ No newline at end of file
+msgstr "اندازه بسته Gecko (حداکثر)"
+
+msgid "valid time (hh:mm)"
+msgstr "زمان معتبر (ساعت:میلیمتر)"
diff --git a/luci-app-passwall2/po/ru/passwall2.po b/luci-app-passwall2/po/ru/passwall2.po
index 4bea8828..04797312 100644
--- a/luci-app-passwall2/po/ru/passwall2.po
+++ b/luci-app-passwall2/po/ru/passwall2.po
@@ -376,6 +376,9 @@ msgstr "Балансировка"
msgid "Node Addition Method"
msgstr "Способ добавления узлов"
+msgid "Backup Node Addition Method"
+msgstr "Метод добавления резервного узла"
+
msgid "Manual"
msgstr "Вручную"
@@ -1652,6 +1655,12 @@ msgstr "Сертификат TLS (PEM)"
msgid "Full certificate (chain), PEM format."
msgstr "Полный сертификат (цепочка), формат PEM."
+msgid "Fetch Manually"
+msgstr "Получить вручную"
+
+msgid "Fetch Failed"
+msgstr "Не удалось получить данные."
+
msgid "ECH Config"
msgstr "Конфигурация ECH"
@@ -2399,3 +2408,6 @@ msgstr "Размер упаковки Gecko (мин)"
msgid "Gecko Packet Size (max)"
msgstr "Размер упаковки Gecko (макс)"
+
+msgid "valid time (hh:mm)"
+msgstr "Время действия (чч:мм)"
diff --git a/luci-app-passwall2/po/zh-cn/passwall2.po b/luci-app-passwall2/po/zh-cn/passwall2.po
index da052b98..baad1ec2 100644
--- a/luci-app-passwall2/po/zh-cn/passwall2.po
+++ b/luci-app-passwall2/po/zh-cn/passwall2.po
@@ -376,6 +376,9 @@ msgstr "负载均衡"
msgid "Node Addition Method"
msgstr "节点添加方式"
+msgid "Backup Node Addition Method"
+msgstr "后备节点添加方式"
+
msgid "Manual"
msgstr "手动"
@@ -1643,6 +1646,12 @@ msgstr "TLS 证书(PEM)"
msgid "Full certificate (chain), PEM format."
msgstr "完整证书(链),PEM 格式。"
+msgid "Fetch Manually"
+msgstr "手动获取"
+
+msgid "Fetch Failed"
+msgstr "获取失败"
+
msgid "ECH Config"
msgstr "ECH 配置"
@@ -2387,3 +2396,6 @@ msgstr "Gecko 包大小(最小)"
msgid "Gecko Packet Size (max)"
msgstr "Gecko 包大小(最大)"
+
+msgid "valid time (hh:mm)"
+msgstr "有效时间(hh:mm)"
diff --git a/luci-app-passwall2/po/zh-tw/passwall2.po b/luci-app-passwall2/po/zh-tw/passwall2.po
index 9245e80e..c7b79250 100644
--- a/luci-app-passwall2/po/zh-tw/passwall2.po
+++ b/luci-app-passwall2/po/zh-tw/passwall2.po
@@ -376,6 +376,9 @@ msgstr "負載均衡"
msgid "Node Addition Method"
msgstr "節點新增方式"
+msgid "Backup Node Addition Method"
+msgstr "備用節點新增方式"
+
msgid "Manual"
msgstr "手動"
@@ -1643,6 +1646,12 @@ msgstr "TLS 憑證(PEM)"
msgid "Full certificate (chain), PEM format."
msgstr "完整憑證(鏈),PEM 格式。"
+msgid "Fetch Manually"
+msgstr "手動獲取"
+
+msgid "Fetch Failed"
+msgstr "獲取失敗"
+
msgid "ECH Config"
msgstr "ECH 配置"
@@ -2393,3 +2402,6 @@ msgstr "Gecko 包大小(最小)"
msgid "Gecko Packet Size (max)"
msgstr "Gecko 包大小(最大)"
+
+msgid "valid time (hh:mm)"
+msgstr "有效時間(hh:mm)"
diff --git a/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2 b/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2
index 4b503027..6f7740fb 100644
--- a/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2
+++ b/luci-app-passwall2/root/etc/uci-defaults/luci-passwall2
@@ -62,6 +62,10 @@ chmod +x /usr/share/passwall2/*.sh
[ "$(uci -q get passwall2.@global_xray[0].sniffing)" == "1" ] && [ "$(uci -q get passwall2.@global_xray[0].route_only)" != "1" ] && uci -q set passwall2.@global_xray[0].sniffing_override_dest=1
uci -q delete passwall2.@global_xray[0].sniffing
uci -q delete passwall2.@global_xray[0].route_only
+frag_len=$(uci -q get passwall2.@global_xray[0].fragment_length)
+[ -n "$frag_len" ] && uci -q set passwall2.@global_xray[0].fragment_lengths="$frag_len" && uci -q delete passwall2.@global_xray[0].fragment_length
+frag_dly=$(uci -q get passwall2.@global_xray[0].fragment_delay)
+[ -n "$frag_dly" ] && uci -q set passwall2.@global_xray[0].fragment_delays="$frag_dly" && uci -q delete passwall2.@global_xray[0].fragment_delay
uci -q commit passwall2
sed -i "s#add_from#group#g" /etc/config/passwall2 2>/dev/null
diff --git a/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh b/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh
index 310a2070..54b8b23f 100755
--- a/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh
+++ b/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh
@@ -166,9 +166,8 @@ start() {
retry_num=$(config_n_get $id autoswitch_retry_num 1)
restore_switch=$(config_n_get $id autoswitch_restore_switch 0)
probe_url=$(config_n_get $id autoswitch_probe_url "https://www.google.com/generate_204")
- backup_node=$(config_n_get $id autoswitch_backup_node)
+ backup_node=$(lua_api "get_socks_backup_nodes(\"${id}\")")
if [ -n "$backup_node" ]; then
- backup_node=$(echo "$backup_node" | tr -s ' ' '\n' | uniq | tr -s '\n' ' ')
backup_node_num=$(printf "%s\n" "$backup_node" | wc -w)
if [ "$backup_node_num" -eq 1 ]; then
[ "$main_node" = "$backup_node" ] && return
diff --git a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
index 2ec0ca8d..c5f81cbf 100755
--- a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
+++ b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
@@ -1368,6 +1368,10 @@ local function processData(szType, content, add_mode, group, sub_cfg)
result.reality_publicKey = params.pbk or nil
result.reality_shortId = params.sid or nil
end
+ if params.ech and params.ech ~= "" then
+ result.ech = "1"
+ result.ech_config = params.ech
+ end
result.tls_pinSHA256 = params.pcs
result.tls_CertByName = params.vcn
local insecure = params.allowinsecure or params.allowInsecure or params.insecure
diff --git a/luci-app-ssr-plus/Makefile b/luci-app-ssr-plus/Makefile
index 561417eb..27790221 100644
--- a/luci-app-ssr-plus/Makefile
+++ b/luci-app-ssr-plus/Makefile
@@ -4,7 +4,7 @@ LUCI_TITLE:=luci-app-ssr-plus
LUCI_PKGARCH:=all
PKG_NAME:=luci-app-ssr-plus
PKG_VERSION:=196
-PKG_RELEASE:=44
+PKG_RELEASE:=45
PKG_CONFIG_DEPENDS:= \
CONFIG_PACKAGE_$(PKG_NAME)_Iptables_Transparent_Proxy \
diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua
index 7795aed3..a36c25ac 100755
--- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua
+++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua
@@ -499,7 +499,10 @@ Xray.outbounds = {
fingerprint = server.fingerprint,
allowInsecure = (function()
if server.tls_CertSha and server.tls_CertSha ~= "" then return nil end
- return server.insecure == "1"
+ if os.date("%Y.%m.%d") < "2026.06.01" then
+ return server.insecure == "1"
+ end
+ return nil
end)(),
serverName = server.tls_host,
certificates = server.certificate and {
diff --git a/netdata/Makefile b/netdata/Makefile
index f5afe529..70e13c61 100644
--- a/netdata/Makefile
+++ b/netdata/Makefile
@@ -8,8 +8,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=netdata
-PKG_VERSION:=2.10.3
-PKG_RELEASE:=13
+PKG_VERSION:=2.10.4
+PKG_RELEASE:=14
PKG_MAINTAINER:=Josef Schlehofer , Daniel Engberg
PKG_LICENSE:=GPL-3.0-or-later
diff --git a/openwrt-alwaysonline/Makefile b/openwrt-alwaysonline/Makefile
index 82cb429b..3b091611 100644
--- a/openwrt-alwaysonline/Makefile
+++ b/openwrt-alwaysonline/Makefile
@@ -8,12 +8,12 @@ PKG_NAME:=alwaysonline
PKG_UPSTREAM_VERSION:=1.2.1
PKG_UPSTREAM_GITHASH:=206292ca68e4d6c81b215163a7bbd0cd2eb36860
PKG_VERSION:=$(PKG_UPSTREAM_VERSION)~$(call version_abbrev,$(PKG_UPSTREAM_GITHASH))
-PKG_RELEASE:=8
+PKG_RELEASE:=9
UCI_VERSION:=0.2025.01.25
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/Jamesits/alwaysonline.git
-PKG_SOURCE_VERSION:=0b7050013224cea1e9d4843817f9baa12b0bfe19
+PKG_SOURCE_VERSION:=e5f20a72c8cf6a9ce0c5901e84dff18e96df5812
PKG_MIRROR_HASH:=skip
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION)
diff --git a/tcptraceroute/Makefile b/tcptraceroute/Makefile
index dad0bf8f..6a796c0c 100644
--- a/tcptraceroute/Makefile
+++ b/tcptraceroute/Makefile
@@ -10,12 +10,13 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=tcptraceroute
PKG_REALVERSION:=1.5beta7
PKG_VERSION:=1.5_beta7
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=tcptraceroute-$(PKG_REALVERSION)
PKG_SOURCE_URL:=https://github.com/mct/tcptraceroute.git
+
include $(INCLUDE_DIR)/package.mk
define Package/tcptraceroute
diff --git a/xray-core/Makefile b/xray-core/Makefile
index 88f6d844..271099ea 100644
--- a/xray-core/Makefile
+++ b/xray-core/Makefile
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=Xray-core
PKG_VERSION:=26.7.11
-PKG_RELEASE:=19
+PKG_RELEASE:=20
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/XTLS/Xray-core/tar.gz/v$(PKG_VERSION)?
diff --git a/xray-core/patches/AllowInsecure.patch b/xray-core/patches/AllowInsecure.patch
deleted file mode 100644
index b43b5618..00000000
--- a/xray-core/patches/AllowInsecure.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/infra/conf/transport_internet.go
-+++ b/infra/conf/transport_internet.go
-@@ -14,7 +14,6 @@ import (
- "strconv"
- "strings"
- "syscall"
-- "time"
-
- "github.com/xtls/xray-core/common"
- "github.com/xtls/xray-core/common/errors"
-@@ -699,12 +698,7 @@ func (c *TLSConfig) Build() (proto.Message, error) {
- config.MasterKeyLog = c.MasterKeyLog
-
- if c.AllowInsecure {
-- if time.Now().After(time.Date(2026, 6, 1, 0, 0, 0, 0, time.UTC)) {
-- return nil, errors.PrintRemovedFeatureError(`"allowInsecure"`, `"pinnedPeerCertSha256"`)
-- } else {
-- errors.LogWarning(context.Background(), `"allowInsecure" will be removed automatically after 2026-06-01, please use "pinnedPeerCertSha256"(pcs) and "verifyPeerCertByName"(vcn) instead, PLEASE CONTACT YOUR SERVICE PROVIDER (AIRPORT)`)
-- config.AllowInsecure = true
-- }
-+ config.AllowInsecure = true
- }
- if c.PinnedPeerCertSha256 != "" {
- for v := range strings.SplitSeq(c.PinnedPeerCertSha256, ",") {
diff --git a/z8102/Makefile b/z8102/Makefile
index 238edc0a..3202f24b 100644
--- a/z8102/Makefile
+++ b/z8102/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=z8102
PKG_VERSION:=0.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_MAINTAINER:=Yannick Chabanois
diff --git a/z8102/files/etc/init.d/z8102 b/z8102/files/etc/init.d/z8102
index 8a2ca411..e0b60f08 100755
--- a/z8102/files/etc/init.d/z8102
+++ b/z8102/files/etc/init.d/z8102
@@ -12,13 +12,15 @@ log() {
modem_reset()
{
modemnb=$1
- # sim
- if [ -e /sys/class/gpio/sim${modemnb}/value ]; then
- echo "0" > /sys/class/gpio/sim${modemnb}/value
- elif [ -f /usr/bin/gpiofind ]; then
- gpioset `gpiofind "sim=${modemnb}"`=0
- else
- gpioset -t0 sim${modemnb}=0
+ if [ -z "$(cat /etc/board.json | grep z8802)" ]; then
+ # sim
+ if [ -e /sys/class/gpio/sim${modemnb}/value ]; then
+ echo "0" > /sys/class/gpio/sim${modemnb}/value
+ elif [ -f /usr/bin/gpiofind ]; then
+ gpioset `gpiofind "sim=${modemnb}"`=0
+ else
+ gpioset -t0 sim${modemnb}=0
+ fi
fi
# stop modem