diff --git a/cloudreve/Makefile b/cloudreve/Makefile
index d601167a..042f30db 100644
--- a/cloudreve/Makefile
+++ b/cloudreve/Makefile
@@ -6,11 +6,11 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=cloudreve
PKG_VERSION:=4.15.0
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/cloudreve/Cloudreve.git
-PKG_SOURCE_VERSION:=006680c5df8b529ab52656133fc220ad73ab57ff
+PKG_SOURCE_VERSION:=58b83ea1e4727f9665a06b46c7f17cb4b4c174a5
PKG_MIRROR_HASH:=skip
PKG_LICENSE:=GPL-3.0-only
diff --git a/hickory-dns/Makefile b/hickory-dns/Makefile
index 46800430..76acb714 100644
--- a/hickory-dns/Makefile
+++ b/hickory-dns/Makefile
@@ -1,16 +1,16 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=hickory-dns
-PKG_VERSION:=2026.04.01~b57b7ae
-PKG_RELEASE:=8
+PKG_VERSION:=2026.04.02~54a81de
+PKG_RELEASE:=9
-HICKORY_COMMIT:=b57b7aec2c6c18d64b90f01c97595171963e0e56
+HICKORY_COMMIT:=54a81deefb24bb97df466b9032d5928345fffdde
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://codeload.github.com/hickory-dns/hickory-dns/tar.gz/b57b7aec2c6c18d64b90f01c97595171963e0e56?
+PKG_SOURCE_URL:=https://codeload.github.com/hickory-dns/hickory-dns/tar.gz/54a81deefb24bb97df466b9032d5928345fffdde?
PKG_HASH:=skip
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-b57b7aec2c6c18d64b90f01c97595171963e0e56
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-54a81deefb24bb97df466b9032d5928345fffdde
PKG_BUILD_DEPENDS:=rust/host
PKG_BUILD_PARALLEL:=1
diff --git a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js
index 221326c4..c25eda71 100644
--- a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js
+++ b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js
@@ -1130,18 +1130,26 @@ return view.extend({
so.value('h2', _('HTTPUpgrade'));
so.value('grpc', _('gRPC'));
so.value('ws', _('WebSocket'));
+ so.value('xhttp', _('XHTTP'));
so.validate = function(section_id, value) {
const type = this.section.getOption('type').formvalue(section_id);
switch (type) {
case 'vmess':
- case 'vless':
if (!['http', 'h2', 'grpc', 'ws'].includes(value))
return _('Expecting: only support %s.').format(_('HTTP') +
' / ' + _('HTTPUpgrade') +
' / ' + _('gRPC') +
' / ' + _('WebSocket'));
break;
+ case 'vless':
+ if (!['http', 'h2', 'grpc', 'ws', 'xhttp'].includes(value))
+ return _('Expecting: only support %s.').format(_('HTTP') +
+ ' / ' + _('HTTPUpgrade') +
+ ' / ' + _('gRPC') +
+ ' / ' + _('WebSocket') +
+ ' / ' + _('XHTTP'));
+ break;
case 'trojan':
if (!['grpc', 'ws'].includes(value))
return _('Expecting: only support %s.').format(_('gRPC') +
@@ -1162,6 +1170,12 @@ return view.extend({
so.depends({transport_enabled: '1', transport_type: 'h2'});
so.modalonly = true;
+ so = ss.taboption('field_transport', form.DynamicList, 'transport_host', _('Server hostname'));
+ so.datatype = 'hostname';
+ so.placeholder = 'example.com';
+ so.depends({transport_enabled: '1', transport_type: 'xhttp'});
+ so.modalonly = true;
+
so = ss.taboption('field_transport', form.Value, 'transport_http_method', _('HTTP request method'));
so.value('GET', _('GET'));
so.value('POST', _('POST'));
@@ -1182,13 +1196,13 @@ return view.extend({
so.placeholder = '/';
so.default = '/';
so.rmempty = false;
- so.depends({transport_enabled: '1', transport_type: /^(h2|ws)$/});
+ so.depends({transport_enabled: '1', transport_type: /^(h2|ws|xhttp)$/});
so.modalonly = true;
so = ss.taboption('field_transport', hm.TextValue, 'transport_http_headers', _('HTTP header'));
- so.placeholder = '{\n "Host": "example.com",\n "Connection": [\n "keep-alive"\n ]\n}';
+ so.placeholder = '{\n "Host": "example.com",\n "Connection": [\n "keep-alive"\n ],\n "X-Forwarded-For": "" // XHTTP\n}';
so.validate = hm.validateJson;
- so.depends({transport_enabled: '1', transport_type: /^(http|ws)$/});
+ so.depends({transport_enabled: '1', transport_type: /^(http|ws|xhttp)$/});
so.modalonly = true;
so = ss.taboption('field_transport', form.Value, 'transport_grpc_servicename', _('gRPC service name'));
@@ -1229,6 +1243,23 @@ return view.extend({
so.depends({transport_enabled: '1', transport_type: 'ws', transport_ws_v2ray_http_upgrade: '1'});
so.modalonly = true;
+ so = ss.taboption('field_transport', form.ListValue, 'transport_xhttp_mode', _('XHTTP mode'));
+ so.value('stream-one', _('stream-one'));
+ so.value('stream-up', _('stream-up'));
+ so.value('packet-up', _('packet-up'));
+ so.depends({transport_enabled: '1', transport_type: 'xhttp'});
+ so.modalonly = true;
+
+ so = ss.taboption('field_transport', form.Flag, 'transport_xhttp_no_grpc_header', _('No gRPC header'));
+ so.default = so.disabled;
+ so.depends({transport_enabled: '1', transport_type: 'xhttp'});
+ so.modalonly = true;
+
+ so = ss.taboption('field_transport', form.Value, 'transport_xhttp_x_padding_bytes', _('Padding bytes'));
+ so.placeholder = '100-1000';
+ so.depends({transport_enabled: '1', transport_type: 'xhttp'});
+ so.modalonly = true;
+
/* Multiplex fields */ // TCP protocol only
so = ss.taboption('field_general', form.Flag, 'smux_enabled', _('Multiplex'));
so.default = so.disabled;
diff --git a/luci-app-fchomo/po/templates/fchomo.pot b/luci-app-fchomo/po/templates/fchomo.pot
index c9fd29bb..c00e0b3a 100644
--- a/luci-app-fchomo/po/templates/fchomo.pot
+++ b/luci-app-fchomo/po/templates/fchomo.pot
@@ -39,10 +39,10 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1056
#: htdocs/luci-static/resources/view/fchomo/client.js:1057
#: htdocs/luci-static/resources/view/fchomo/client.js:1278
-#: htdocs/luci-static/resources/view/fchomo/node.js:1758
-#: htdocs/luci-static/resources/view/fchomo/node.js:1764
-#: htdocs/luci-static/resources/view/fchomo/node.js:1778
-#: htdocs/luci-static/resources/view/fchomo/node.js:1784
+#: htdocs/luci-static/resources/view/fchomo/node.js:1788
+#: htdocs/luci-static/resources/view/fchomo/node.js:1794
+#: htdocs/luci-static/resources/view/fchomo/node.js:1808
+#: htdocs/luci-static/resources/view/fchomo/node.js:1814
msgid "-- Please choose --"
msgstr ""
@@ -173,11 +173,11 @@ msgstr ""
msgid "Add a inbound"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1349
+#: htdocs/luci-static/resources/view/fchomo/node.js:1379
msgid "Add a provider"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1734
+#: htdocs/luci-static/resources/view/fchomo/node.js:1764
msgid "Add a proxy chain"
msgstr ""
@@ -201,11 +201,11 @@ msgstr ""
msgid "Add a sub rule"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1559
+#: htdocs/luci-static/resources/view/fchomo/node.js:1589
msgid "Add prefix"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1563
+#: htdocs/luci-static/resources/view/fchomo/node.js:1593
msgid "Add suffix"
msgstr ""
@@ -332,13 +332,13 @@ msgid "Binary mrs"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:734
-#: htdocs/luci-static/resources/view/fchomo/node.js:1319
-#: htdocs/luci-static/resources/view/fchomo/node.js:1632
+#: htdocs/luci-static/resources/view/fchomo/node.js:1349
+#: htdocs/luci-static/resources/view/fchomo/node.js:1662
msgid "Bind interface"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1320
-#: htdocs/luci-static/resources/view/fchomo/node.js:1633
+#: htdocs/luci-static/resources/view/fchomo/node.js:1350
+#: htdocs/luci-static/resources/view/fchomo/node.js:1663
msgid "Bind outbound interface."
msgstr ""
@@ -508,7 +508,7 @@ msgstr ""
msgid "Complete"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1579
+#: htdocs/luci-static/resources/view/fchomo/node.js:1609
msgid "Configuration Items"
msgstr ""
@@ -526,14 +526,14 @@ msgid "Content copied to clipboard!"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:670
-#: htdocs/luci-static/resources/view/fchomo/node.js:1489
-#: htdocs/luci-static/resources/view/fchomo/node.js:1515
+#: htdocs/luci-static/resources/view/fchomo/node.js:1519
+#: htdocs/luci-static/resources/view/fchomo/node.js:1545
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:339
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:365
msgid "Content will not be verified, Please make sure you enter it correctly."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1488
+#: htdocs/luci-static/resources/view/fchomo/node.js:1518
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:338
msgid "Contents"
msgstr ""
@@ -558,7 +558,7 @@ msgstr ""
msgid "Custom Direct List"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1550
+#: htdocs/luci-static/resources/view/fchomo/node.js:1580
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:400
msgid "Custom HTTP header."
msgstr ""
@@ -626,11 +626,11 @@ msgstr ""
msgid "Destination addresses allowed to be forwarded via Wireguard."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1757
+#: htdocs/luci-static/resources/view/fchomo/node.js:1787
msgid "Destination provider"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1763
+#: htdocs/luci-static/resources/view/fchomo/node.js:1793
msgid "Destination proxy node"
msgstr ""
@@ -638,8 +638,8 @@ msgstr ""
msgid "Dial fields"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1770
-#: htdocs/luci-static/resources/view/fchomo/node.js:1790
+#: htdocs/luci-static/resources/view/fchomo/node.js:1800
+#: htdocs/luci-static/resources/view/fchomo/node.js:1820
msgid "Different chain head/tail"
msgstr ""
@@ -709,15 +709,15 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1577
#: htdocs/luci-static/resources/view/fchomo/node.js:1038
-#: htdocs/luci-static/resources/view/fchomo/node.js:1619
+#: htdocs/luci-static/resources/view/fchomo/node.js:1649
msgid "Donot verifying server certificate."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1298
+#: htdocs/luci-static/resources/view/fchomo/node.js:1328
msgid "Download bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1299
+#: htdocs/luci-static/resources/view/fchomo/node.js:1329
msgid "Download bandwidth in Mbps."
msgstr ""
@@ -758,11 +758,11 @@ msgstr ""
msgid "ETag support"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1211
+#: htdocs/luci-static/resources/view/fchomo/node.js:1225
msgid "Early Data first packet length limit."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1217
+#: htdocs/luci-static/resources/view/fchomo/node.js:1231
msgid "Early Data header name"
msgstr ""
@@ -778,7 +778,7 @@ msgstr ""
msgid "Edit ruleset"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1486
+#: htdocs/luci-static/resources/view/fchomo/node.js:1516
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:336
msgid "Editer"
msgstr ""
@@ -798,9 +798,9 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:401
#: htdocs/luci-static/resources/view/fchomo/global.js:680
#: htdocs/luci-static/resources/view/fchomo/node.js:234
-#: htdocs/luci-static/resources/view/fchomo/node.js:1459
-#: htdocs/luci-static/resources/view/fchomo/node.js:1655
-#: htdocs/luci-static/resources/view/fchomo/node.js:1744
+#: htdocs/luci-static/resources/view/fchomo/node.js:1489
+#: htdocs/luci-static/resources/view/fchomo/node.js:1685
+#: htdocs/luci-static/resources/view/fchomo/node.js:1774
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:264
#: htdocs/luci-static/resources/view/fchomo/server.js:49
msgid "Enable"
@@ -827,15 +827,15 @@ msgstr ""
msgid "Enable ECH"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1286
+#: htdocs/luci-static/resources/view/fchomo/node.js:1316
msgid "Enable TCP Brutal"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1287
+#: htdocs/luci-static/resources/view/fchomo/node.js:1317
msgid "Enable TCP Brutal congestion control algorithm"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1275
+#: htdocs/luci-static/resources/view/fchomo/node.js:1305
msgid "Enable multiplexing only for TCP."
msgstr ""
@@ -844,16 +844,16 @@ msgstr ""
msgid "Enable obfuscate for downlink"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1269
+#: htdocs/luci-static/resources/view/fchomo/node.js:1299
msgid "Enable padding"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1280
+#: htdocs/luci-static/resources/view/fchomo/node.js:1310
msgid "Enable statistic"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:871
-#: htdocs/luci-static/resources/view/fchomo/node.js:1601
+#: htdocs/luci-static/resources/view/fchomo/node.js:1631
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with Multiplex."
msgstr ""
@@ -892,7 +892,7 @@ msgid ""
"if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1713
+#: htdocs/luci-static/resources/view/fchomo/node.js:1743
msgid "Exclude matched node types."
msgstr ""
@@ -903,7 +903,7 @@ msgid ""
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1161
-#: htdocs/luci-static/resources/view/fchomo/node.js:1706
+#: htdocs/luci-static/resources/view/fchomo/node.js:1736
msgid "Exclude nodes that meet keywords or regexps."
msgstr ""
@@ -912,12 +912,12 @@ msgid "Expand/Collapse result"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1121
-#: htdocs/luci-static/resources/view/fchomo/node.js:1691
+#: htdocs/luci-static/resources/view/fchomo/node.js:1721
msgid "Expected HTTP code. 204 will be used if empty."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1123
-#: htdocs/luci-static/resources/view/fchomo/node.js:1693
+#: htdocs/luci-static/resources/view/fchomo/node.js:1723
msgid "Expected status"
msgstr ""
@@ -960,8 +960,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:491
#: htdocs/luci-static/resources/view/fchomo/node.js:942
#: htdocs/luci-static/resources/view/fchomo/node.js:1030
-#: htdocs/luci-static/resources/view/fchomo/node.js:1770
-#: htdocs/luci-static/resources/view/fchomo/node.js:1790
+#: htdocs/luci-static/resources/view/fchomo/node.js:1800
+#: htdocs/luci-static/resources/view/fchomo/node.js:1820
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:291
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:305
msgid "Expecting: %s"
@@ -971,6 +971,7 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:984
#: htdocs/luci-static/resources/view/fchomo/node.js:1140
#: htdocs/luci-static/resources/view/fchomo/node.js:1147
+#: htdocs/luci-static/resources/view/fchomo/node.js:1155
msgid "Expecting: only support %s."
msgstr ""
@@ -1020,7 +1021,7 @@ msgid "Fallback filter"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1156
-#: htdocs/luci-static/resources/view/fchomo/node.js:1700
+#: htdocs/luci-static/resources/view/fchomo/node.js:1730
msgid "Filter nodes that meet keywords or regexps."
msgstr ""
@@ -1061,8 +1062,8 @@ msgid ""
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1122
-#: htdocs/luci-static/resources/view/fchomo/node.js:1569
-#: htdocs/luci-static/resources/view/fchomo/node.js:1692
+#: htdocs/luci-static/resources/view/fchomo/node.js:1599
+#: htdocs/luci-static/resources/view/fchomo/node.js:1722
msgid ""
"For format see %s."
@@ -1088,7 +1089,7 @@ msgstr ""
msgid "FullCombo Shark!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1166
+#: htdocs/luci-static/resources/view/fchomo/node.js:1180
msgid "GET"
msgstr ""
@@ -1103,7 +1104,7 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:119
#: htdocs/luci-static/resources/view/fchomo/client.js:1009
#: htdocs/luci-static/resources/view/fchomo/node.js:222
-#: htdocs/luci-static/resources/view/fchomo/node.js:1449
+#: htdocs/luci-static/resources/view/fchomo/node.js:1479
msgid "General fields"
msgstr ""
@@ -1189,12 +1190,13 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:816
#: htdocs/luci-static/resources/view/fchomo/node.js:1129
#: htdocs/luci-static/resources/view/fchomo/node.js:1140
+#: htdocs/luci-static/resources/view/fchomo/node.js:1147
msgid "HTTP"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:267
-#: htdocs/luci-static/resources/view/fchomo/node.js:1188
-#: htdocs/luci-static/resources/view/fchomo/node.js:1549
+#: htdocs/luci-static/resources/view/fchomo/node.js:1202
+#: htdocs/luci-static/resources/view/fchomo/node.js:1579
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:399
msgid "HTTP header"
msgstr ""
@@ -1220,7 +1222,7 @@ msgstr ""
msgid "HTTP mask: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1165
+#: htdocs/luci-static/resources/view/fchomo/node.js:1179
msgid "HTTP request method"
msgstr ""
@@ -1242,6 +1244,7 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:978
#: htdocs/luci-static/resources/view/fchomo/node.js:1130
#: htdocs/luci-static/resources/view/fchomo/node.js:1141
+#: htdocs/luci-static/resources/view/fchomo/node.js:1148
msgid "HTTPUpgrade"
msgstr ""
@@ -1266,27 +1269,27 @@ msgid "Health check"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1091
-#: htdocs/luci-static/resources/view/fchomo/node.js:1660
+#: htdocs/luci-static/resources/view/fchomo/node.js:1690
msgid "Health check URL"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1120
-#: htdocs/luci-static/resources/view/fchomo/node.js:1690
+#: htdocs/luci-static/resources/view/fchomo/node.js:1720
msgid "Health check expected status"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1100
-#: htdocs/luci-static/resources/view/fchomo/node.js:1670
+#: htdocs/luci-static/resources/view/fchomo/node.js:1700
msgid "Health check interval"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1107
-#: htdocs/luci-static/resources/view/fchomo/node.js:1677
+#: htdocs/luci-static/resources/view/fchomo/node.js:1707
msgid "Health check timeout"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1011
-#: htdocs/luci-static/resources/view/fchomo/node.js:1451
+#: htdocs/luci-static/resources/view/fchomo/node.js:1481
msgid "Health fields"
msgstr ""
@@ -1337,8 +1340,8 @@ msgstr ""
msgid "IP override"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1331
-#: htdocs/luci-static/resources/view/fchomo/node.js:1646
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1676
msgid "IP version"
msgstr ""
@@ -1399,8 +1402,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1713
#: htdocs/luci-static/resources/view/fchomo/client.js:1748
#: htdocs/luci-static/resources/view/fchomo/client.js:1769
-#: htdocs/luci-static/resources/view/fchomo/node.js:1356
-#: htdocs/luci-static/resources/view/fchomo/node.js:1437
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
+#: htdocs/luci-static/resources/view/fchomo/node.js:1467
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:153
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:241
msgid "Import mihomo config"
@@ -1416,12 +1419,12 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:181
#: htdocs/luci-static/resources/view/fchomo/node.js:286
#: htdocs/luci-static/resources/view/fchomo/node.js:292
-#: htdocs/luci-static/resources/view/fchomo/node.js:1607
-#: htdocs/luci-static/resources/view/fchomo/node.js:1613
+#: htdocs/luci-static/resources/view/fchomo/node.js:1637
+#: htdocs/luci-static/resources/view/fchomo/node.js:1643
msgid "In Mbps."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1527
+#: htdocs/luci-static/resources/view/fchomo/node.js:1557
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:377
msgid "In bytes. %s will be used if empty."
msgstr ""
@@ -1433,7 +1436,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1108
#: htdocs/luci-static/resources/view/fchomo/client.js:1137
-#: htdocs/luci-static/resources/view/fchomo/node.js:1678
+#: htdocs/luci-static/resources/view/fchomo/node.js:1708
msgid "In millisecond. %s will be used if empty."
msgstr ""
@@ -1442,7 +1445,7 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:428
#: htdocs/luci-static/resources/view/fchomo/node.js:604
#: htdocs/luci-static/resources/view/fchomo/node.js:611
-#: htdocs/luci-static/resources/view/fchomo/node.js:1204
+#: htdocs/luci-static/resources/view/fchomo/node.js:1218
msgid "In seconds."
msgstr ""
@@ -1451,8 +1454,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:430
#: htdocs/luci-static/resources/view/fchomo/global.js:515
#: htdocs/luci-static/resources/view/fchomo/node.js:280
-#: htdocs/luci-static/resources/view/fchomo/node.js:1533
-#: htdocs/luci-static/resources/view/fchomo/node.js:1671
+#: htdocs/luci-static/resources/view/fchomo/node.js:1563
+#: htdocs/luci-static/resources/view/fchomo/node.js:1701
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:383
msgid "In seconds. %s will be used if empty."
msgstr ""
@@ -1498,7 +1501,7 @@ msgstr ""
msgid "Info"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1466
+#: htdocs/luci-static/resources/view/fchomo/node.js:1496
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:279
msgid "Inline"
msgstr ""
@@ -1535,14 +1538,14 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1719
#: htdocs/luci-static/resources/view/fchomo/client.js:1775
#: htdocs/luci-static/resources/view/fchomo/node.js:229
-#: htdocs/luci-static/resources/view/fchomo/node.js:1454
-#: htdocs/luci-static/resources/view/fchomo/node.js:1739
+#: htdocs/luci-static/resources/view/fchomo/node.js:1484
+#: htdocs/luci-static/resources/view/fchomo/node.js:1769
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:259
msgid "Label"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1114
-#: htdocs/luci-static/resources/view/fchomo/node.js:1684
+#: htdocs/luci-static/resources/view/fchomo/node.js:1714
msgid "Lazy"
msgstr ""
@@ -1591,7 +1594,7 @@ msgstr ""
msgid "Load balance"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1464
+#: htdocs/luci-static/resources/view/fchomo/node.js:1494
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:277
msgid "Local"
msgstr ""
@@ -1625,9 +1628,11 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:324
#: htdocs/luci-static/resources/fchomo/listeners.js:325
#: htdocs/luci-static/resources/fchomo/listeners.js:326
+#: htdocs/luci-static/resources/fchomo/listeners.js:331
#: htdocs/luci-static/resources/view/fchomo/node.js:409
#: htdocs/luci-static/resources/view/fchomo/node.js:410
#: htdocs/luci-static/resources/view/fchomo/node.js:411
+#: htdocs/luci-static/resources/view/fchomo/node.js:416
msgid "Low-entropy data stream"
msgstr ""
@@ -1677,7 +1682,7 @@ msgstr ""
msgid "Match rule set."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1210
+#: htdocs/luci-static/resources/view/fchomo/node.js:1224
msgid "Max Early Data"
msgstr ""
@@ -1704,12 +1709,12 @@ msgstr ""
msgid "Max upload speed"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
-#: htdocs/luci-static/resources/view/fchomo/node.js:1263
+#: htdocs/luci-static/resources/view/fchomo/node.js:1277
+#: htdocs/luci-static/resources/view/fchomo/node.js:1293
msgid "Maximum connections"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1261
+#: htdocs/luci-static/resources/view/fchomo/node.js:1291
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1727,7 +1732,7 @@ msgid ""
"rate."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1260
+#: htdocs/luci-static/resources/view/fchomo/node.js:1290
msgid "Maximum streams"
msgstr ""
@@ -1752,7 +1757,7 @@ msgstr ""
msgid "Min of idle sessions to keep"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1254
+#: htdocs/luci-static/resources/view/fchomo/node.js:1284
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr ""
@@ -1762,8 +1767,8 @@ msgstr ""
msgid "Minimum padding rate"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1253
-#: htdocs/luci-static/resources/view/fchomo/node.js:1263
+#: htdocs/luci-static/resources/view/fchomo/node.js:1283
+#: htdocs/luci-static/resources/view/fchomo/node.js:1293
msgid "Minimum streams"
msgstr ""
@@ -1780,7 +1785,7 @@ msgstr ""
msgid "Mixed port"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1233
+#: htdocs/luci-static/resources/view/fchomo/node.js:1263
msgid "Multiplex"
msgstr ""
@@ -1802,7 +1807,7 @@ msgstr ""
msgid "Name of the Proxy group as outbound."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1539
+#: htdocs/luci-static/resources/view/fchomo/node.js:1569
msgid "Name of the Proxy group to download provider."
msgstr ""
@@ -1834,8 +1839,12 @@ msgstr ""
msgid "No add'l params"
msgstr ""
+#: htdocs/luci-static/resources/view/fchomo/node.js:1252
+msgid "No gRPC header"
+msgstr ""
+
#: htdocs/luci-static/resources/view/fchomo/client.js:1115
-#: htdocs/luci-static/resources/view/fchomo/node.js:1685
+#: htdocs/luci-static/resources/view/fchomo/node.js:1715
msgid "No testing is performed when this provider node is not in use."
msgstr ""
@@ -1854,17 +1863,17 @@ msgid "Node"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1160
-#: htdocs/luci-static/resources/view/fchomo/node.js:1705
+#: htdocs/luci-static/resources/view/fchomo/node.js:1735
msgid "Node exclude filter"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:1712
+#: htdocs/luci-static/resources/view/fchomo/node.js:1742
msgid "Node exclude type"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1155
-#: htdocs/luci-static/resources/view/fchomo/node.js:1699
+#: htdocs/luci-static/resources/view/fchomo/node.js:1729
msgid "Node filter"
msgstr ""
@@ -1942,7 +1951,7 @@ msgid "Override destination"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1010
-#: htdocs/luci-static/resources/view/fchomo/node.js:1450
+#: htdocs/luci-static/resources/view/fchomo/node.js:1480
msgid "Override fields"
msgstr ""
@@ -1970,11 +1979,11 @@ msgstr ""
msgid "Overview"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1167
+#: htdocs/luci-static/resources/view/fchomo/node.js:1181
msgid "POST"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1168
+#: htdocs/luci-static/resources/view/fchomo/node.js:1182
msgid "PUT"
msgstr ""
@@ -1982,6 +1991,10 @@ msgstr ""
msgid "Packet encoding"
msgstr ""
+#: htdocs/luci-static/resources/view/fchomo/node.js:1257
+msgid "Padding bytes"
+msgstr ""
+
#: htdocs/luci-static/resources/fchomo/listeners.js:458
msgid "Padding scheme"
msgstr ""
@@ -2001,7 +2014,7 @@ msgid "Password"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:587
-#: htdocs/luci-static/resources/view/fchomo/node.js:1514
+#: htdocs/luci-static/resources/view/fchomo/node.js:1544
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:364
msgid "Payload"
msgstr ""
@@ -2041,8 +2054,8 @@ msgid ""
"standards."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1487
-#: htdocs/luci-static/resources/view/fchomo/node.js:1513
+#: htdocs/luci-static/resources/view/fchomo/node.js:1517
+#: htdocs/luci-static/resources/view/fchomo/node.js:1543
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:337
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:363
msgid ""
@@ -2056,7 +2069,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1445
#: htdocs/luci-static/resources/view/fchomo/client.js:1697
#: htdocs/luci-static/resources/view/fchomo/client.js:1749
-#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/view/fchomo/node.js:1387
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:154
msgid "Please type %s fields of mihomo config."
msgstr ""
@@ -2123,10 +2136,10 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:736
#: htdocs/luci-static/resources/view/fchomo/global.js:753
-#: htdocs/luci-static/resources/view/fchomo/node.js:1321
-#: htdocs/luci-static/resources/view/fchomo/node.js:1327
-#: htdocs/luci-static/resources/view/fchomo/node.js:1634
-#: htdocs/luci-static/resources/view/fchomo/node.js:1641
+#: htdocs/luci-static/resources/view/fchomo/node.js:1351
+#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/view/fchomo/node.js:1664
+#: htdocs/luci-static/resources/view/fchomo/node.js:1671
msgid "Priority: Proxy Node > Global."
msgstr ""
@@ -2148,7 +2161,7 @@ msgid "Process matching mode"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/global.js:684
-#: htdocs/luci-static/resources/view/fchomo/node.js:1239
+#: htdocs/luci-static/resources/view/fchomo/node.js:1269
msgid "Protocol"
msgstr ""
@@ -2163,13 +2176,13 @@ msgid ""
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1055
-#: htdocs/luci-static/resources/view/fchomo/node.js:1340
-#: htdocs/luci-static/resources/view/fchomo/node.js:1349
-#: htdocs/luci-static/resources/view/fchomo/node.js:1750
+#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1379
+#: htdocs/luci-static/resources/view/fchomo/node.js:1780
msgid "Provider"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1520
+#: htdocs/luci-static/resources/view/fchomo/node.js:1550
msgid "Provider URL"
msgstr ""
@@ -2192,19 +2205,19 @@ msgid "Proxy MAC-s"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1749
+#: htdocs/luci-static/resources/view/fchomo/node.js:1779
msgid "Proxy Node"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1725
-#: htdocs/luci-static/resources/view/fchomo/node.js:1734
+#: htdocs/luci-static/resources/view/fchomo/node.js:1755
+#: htdocs/luci-static/resources/view/fchomo/node.js:1764
msgid "Proxy chain"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:530
#: htdocs/luci-static/resources/view/fchomo/client.js:783
#: htdocs/luci-static/resources/view/fchomo/client.js:1543
-#: htdocs/luci-static/resources/view/fchomo/node.js:1538
+#: htdocs/luci-static/resources/view/fchomo/node.js:1568
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:388
msgid "Proxy group"
msgstr ""
@@ -2311,7 +2324,7 @@ msgstr ""
msgid "Reload All"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1465
+#: htdocs/luci-static/resources/view/fchomo/node.js:1495
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:278
msgid "Remote"
msgstr ""
@@ -2326,18 +2339,18 @@ msgid "Remove"
msgstr ""
#: htdocs/luci-static/resources/fchomo.js:1354
-#: htdocs/luci-static/resources/view/fchomo/node.js:1441
-#: htdocs/luci-static/resources/view/fchomo/node.js:1443
+#: htdocs/luci-static/resources/view/fchomo/node.js:1471
+#: htdocs/luci-static/resources/view/fchomo/node.js:1473
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:251
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:253
msgid "Remove idles"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1567
+#: htdocs/luci-static/resources/view/fchomo/node.js:1597
msgid "Replace name"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1568
+#: htdocs/luci-static/resources/view/fchomo/node.js:1598
msgid "Replace node name."
msgstr ""
@@ -2346,8 +2359,8 @@ msgid "Request"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:996
-#: htdocs/luci-static/resources/view/fchomo/node.js:1174
-#: htdocs/luci-static/resources/view/fchomo/node.js:1181
+#: htdocs/luci-static/resources/view/fchomo/node.js:1188
+#: htdocs/luci-static/resources/view/fchomo/node.js:1195
msgid "Request path"
msgstr ""
@@ -2412,8 +2425,8 @@ msgstr ""
msgid "Routing GFW"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1326
-#: htdocs/luci-static/resources/view/fchomo/node.js:1640
+#: htdocs/luci-static/resources/view/fchomo/node.js:1356
+#: htdocs/luci-static/resources/view/fchomo/node.js:1670
msgid "Routing mark"
msgstr ""
@@ -2551,7 +2564,8 @@ msgstr ""
msgid "Server address"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1159
+#: htdocs/luci-static/resources/view/fchomo/node.js:1167
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
msgid "Server hostname"
msgstr ""
@@ -2583,7 +2597,7 @@ msgstr ""
msgid "Shadowsocks password"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1281
+#: htdocs/luci-static/resources/view/fchomo/node.js:1311
msgid "Show connections in the dashboard for breaking connections easier."
msgstr ""
@@ -2595,14 +2609,14 @@ msgstr ""
msgid "Simple round-robin all nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1526
+#: htdocs/luci-static/resources/view/fchomo/node.js:1556
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:376
msgid "Size limit"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1576
#: htdocs/luci-static/resources/view/fchomo/node.js:1037
-#: htdocs/luci-static/resources/view/fchomo/node.js:1618
+#: htdocs/luci-static/resources/view/fchomo/node.js:1648
msgid "Skip cert verify"
msgstr ""
@@ -2728,7 +2742,7 @@ msgstr ""
msgid "TCP concurrency"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1274
+#: htdocs/luci-static/resources/view/fchomo/node.js:1304
msgid "TCP only"
msgstr ""
@@ -2754,8 +2768,8 @@ msgstr ""
msgid "TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1305
-#: htdocs/luci-static/resources/view/fchomo/node.js:1585
+#: htdocs/luci-static/resources/view/fchomo/node.js:1335
+#: htdocs/luci-static/resources/view/fchomo/node.js:1615
msgid "TFO"
msgstr ""
@@ -2867,7 +2881,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1579
#: htdocs/luci-static/resources/view/fchomo/node.js:1040
-#: htdocs/luci-static/resources/view/fchomo/node.js:1621
+#: htdocs/luci-static/resources/view/fchomo/node.js:1651
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
@@ -2907,11 +2921,11 @@ msgstr ""
msgid "Traffic pattern"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1777
+#: htdocs/luci-static/resources/view/fchomo/node.js:1807
msgid "Transit proxy group"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1783
+#: htdocs/luci-static/resources/view/fchomo/node.js:1813
msgid "Transit proxy node"
msgstr ""
@@ -2973,8 +2987,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:842
#: htdocs/luci-static/resources/view/fchomo/client.js:1028
#: htdocs/luci-static/resources/view/fchomo/node.js:238
-#: htdocs/luci-static/resources/view/fchomo/node.js:1463
-#: htdocs/luci-static/resources/view/fchomo/node.js:1748
+#: htdocs/luci-static/resources/view/fchomo/node.js:1493
+#: htdocs/luci-static/resources/view/fchomo/node.js:1778
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:276
msgid "Type"
msgstr ""
@@ -2990,7 +3004,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:588
#: htdocs/luci-static/resources/view/fchomo/client.js:678
#: htdocs/luci-static/resources/view/fchomo/node.js:865
-#: htdocs/luci-static/resources/view/fchomo/node.js:1595
+#: htdocs/luci-static/resources/view/fchomo/node.js:1625
msgid "UDP"
msgstr ""
@@ -3059,7 +3073,7 @@ msgid "Unknown error: %s"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:870
-#: htdocs/luci-static/resources/view/fchomo/node.js:1600
+#: htdocs/luci-static/resources/view/fchomo/node.js:1630
msgid "UoT"
msgstr ""
@@ -3067,16 +3081,16 @@ msgstr ""
msgid "Update failed."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1532
+#: htdocs/luci-static/resources/view/fchomo/node.js:1562
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:382
msgid "Update interval"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1292
+#: htdocs/luci-static/resources/view/fchomo/node.js:1322
msgid "Upload bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1293
+#: htdocs/luci-static/resources/view/fchomo/node.js:1323
msgid "Upload bandwidth in Mbps."
msgstr ""
@@ -3141,11 +3155,11 @@ msgstr ""
msgid "Users filter mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1222
+#: htdocs/luci-static/resources/view/fchomo/node.js:1236
msgid "V2ray HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1227
+#: htdocs/luci-static/resources/view/fchomo/node.js:1241
msgid "V2ray HTTPUpgrade fast open"
msgstr ""
@@ -3159,8 +3173,8 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1469
-#: htdocs/luci-static/resources/view/fchomo/node.js:1754
+#: htdocs/luci-static/resources/view/fchomo/node.js:1499
+#: htdocs/luci-static/resources/view/fchomo/node.js:1784
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:319
msgid "Value"
msgstr ""
@@ -3200,7 +3214,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:489
#: htdocs/luci-static/resources/view/fchomo/node.js:1132
#: htdocs/luci-static/resources/view/fchomo/node.js:1143
-#: htdocs/luci-static/resources/view/fchomo/node.js:1148
+#: htdocs/luci-static/resources/view/fchomo/node.js:1150
+#: htdocs/luci-static/resources/view/fchomo/node.js:1156
msgid "WebSocket"
msgstr ""
@@ -3228,6 +3243,15 @@ msgstr ""
msgid "WireGuard requires base64-encoded private keys."
msgstr ""
+#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/view/fchomo/node.js:1151
+msgid "XHTTP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1246
+msgid "XHTTP mode"
+msgstr ""
+
#: htdocs/luci-static/resources/fchomo/listeners.js:609
msgid "XOR mode"
msgstr ""
@@ -3301,7 +3325,7 @@ msgstr ""
msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1612
+#: htdocs/luci-static/resources/view/fchomo/node.js:1642
msgid "down"
msgstr ""
@@ -3321,20 +3345,21 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:984
#: htdocs/luci-static/resources/view/fchomo/node.js:1131
#: htdocs/luci-static/resources/view/fchomo/node.js:1142
-#: htdocs/luci-static/resources/view/fchomo/node.js:1147
+#: htdocs/luci-static/resources/view/fchomo/node.js:1149
+#: htdocs/luci-static/resources/view/fchomo/node.js:1155
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1198
+#: htdocs/luci-static/resources/view/fchomo/node.js:1212
msgid "gRPC User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1203
+#: htdocs/luci-static/resources/view/fchomo/node.js:1217
msgid "gRPC ping interval"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:1003
-#: htdocs/luci-static/resources/view/fchomo/node.js:1194
+#: htdocs/luci-static/resources/view/fchomo/node.js:1208
msgid "gRPC service name"
msgstr ""
@@ -3342,7 +3367,7 @@ msgstr ""
msgid "gVisor"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1243
+#: htdocs/luci-static/resources/view/fchomo/node.js:1273
msgid "h2mux"
msgstr ""
@@ -3360,7 +3385,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1480
#: htdocs/luci-static/resources/view/fchomo/client.js:1711
#: htdocs/luci-static/resources/view/fchomo/client.js:1767
-#: htdocs/luci-static/resources/view/fchomo/node.js:1435
+#: htdocs/luci-static/resources/view/fchomo/node.js:1465
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:239
msgid "mihomo config"
msgstr ""
@@ -3369,8 +3394,8 @@ msgstr ""
msgid "mlkem768x25519plus"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1309
-#: htdocs/luci-static/resources/view/fchomo/node.js:1590
+#: htdocs/luci-static/resources/view/fchomo/node.js:1339
+#: htdocs/luci-static/resources/view/fchomo/node.js:1620
msgid "mpTCP"
msgstr ""
@@ -3426,7 +3451,7 @@ msgstr ""
msgid "only applies when %s is not %s."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1570
+#: htdocs/luci-static/resources/view/fchomo/node.js:1600
msgid "override.proxy-name"
msgstr ""
@@ -3434,6 +3459,10 @@ msgstr ""
msgid "packet addr (v2ray-core v5+)"
msgstr ""
+#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+msgid "packet-up"
+msgstr ""
+
#: htdocs/luci-static/resources/fchomo/listeners.js:391
#: htdocs/luci-static/resources/view/fchomo/node.js:458
msgid "poll"
@@ -3466,7 +3495,7 @@ msgstr ""
msgid "shadow-tls"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1241
+#: htdocs/luci-static/resources/view/fchomo/node.js:1271
msgid "smux"
msgstr ""
@@ -3479,6 +3508,10 @@ msgstr ""
msgid "src"
msgstr ""
+#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+msgid "stream-one"
+msgstr ""
+
#: htdocs/luci-static/resources/view/fchomo/node.js:491
msgid "stream/poll/auto"
msgstr ""
@@ -3503,7 +3536,7 @@ msgstr ""
msgid "unique value"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1606
+#: htdocs/luci-static/resources/view/fchomo/node.js:1636
msgid "up"
msgstr ""
@@ -3579,7 +3612,7 @@ msgstr ""
msgid "yacd-meta"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1242
+#: htdocs/luci-static/resources/view/fchomo/node.js:1272
msgid "yamux"
msgstr ""
diff --git a/luci-app-fchomo/po/zh_Hans/fchomo.po b/luci-app-fchomo/po/zh_Hans/fchomo.po
index 499ec838..7b75facc 100644
--- a/luci-app-fchomo/po/zh_Hans/fchomo.po
+++ b/luci-app-fchomo/po/zh_Hans/fchomo.po
@@ -46,10 +46,10 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1056
#: htdocs/luci-static/resources/view/fchomo/client.js:1057
#: htdocs/luci-static/resources/view/fchomo/client.js:1278
-#: htdocs/luci-static/resources/view/fchomo/node.js:1758
-#: htdocs/luci-static/resources/view/fchomo/node.js:1764
-#: htdocs/luci-static/resources/view/fchomo/node.js:1778
-#: htdocs/luci-static/resources/view/fchomo/node.js:1784
+#: htdocs/luci-static/resources/view/fchomo/node.js:1788
+#: htdocs/luci-static/resources/view/fchomo/node.js:1794
+#: htdocs/luci-static/resources/view/fchomo/node.js:1808
+#: htdocs/luci-static/resources/view/fchomo/node.js:1814
msgid "-- Please choose --"
msgstr "-- 请选择 --"
@@ -182,11 +182,11 @@ msgstr "新增 节点"
msgid "Add a inbound"
msgstr "新增 入站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1349
+#: htdocs/luci-static/resources/view/fchomo/node.js:1379
msgid "Add a provider"
msgstr "新增 供应商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1734
+#: htdocs/luci-static/resources/view/fchomo/node.js:1764
msgid "Add a proxy chain"
msgstr "新增 代理链"
@@ -210,11 +210,11 @@ msgstr "新增 服务器"
msgid "Add a sub rule"
msgstr "新增 子规则"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1559
+#: htdocs/luci-static/resources/view/fchomo/node.js:1589
msgid "Add prefix"
msgstr "添加前缀"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1563
+#: htdocs/luci-static/resources/view/fchomo/node.js:1593
msgid "Add suffix"
msgstr "添加后缀"
@@ -343,13 +343,13 @@ msgid "Binary mrs"
msgstr "二进制 mrs"
#: htdocs/luci-static/resources/view/fchomo/global.js:734
-#: htdocs/luci-static/resources/view/fchomo/node.js:1319
-#: htdocs/luci-static/resources/view/fchomo/node.js:1632
+#: htdocs/luci-static/resources/view/fchomo/node.js:1349
+#: htdocs/luci-static/resources/view/fchomo/node.js:1662
msgid "Bind interface"
msgstr "绑定接口"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1320
-#: htdocs/luci-static/resources/view/fchomo/node.js:1633
+#: htdocs/luci-static/resources/view/fchomo/node.js:1350
+#: htdocs/luci-static/resources/view/fchomo/node.js:1663
msgid "Bind outbound interface."
msgstr "绑定出站接口。"
@@ -521,7 +521,7 @@ msgstr "常用端口(绕过 P2P 流量)"
msgid "Complete"
msgstr "完成"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1579
+#: htdocs/luci-static/resources/view/fchomo/node.js:1609
msgid "Configuration Items"
msgstr "配置项"
@@ -539,14 +539,14 @@ msgid "Content copied to clipboard!"
msgstr "内容已复制到剪贴板!"
#: htdocs/luci-static/resources/view/fchomo/client.js:670
-#: htdocs/luci-static/resources/view/fchomo/node.js:1489
-#: htdocs/luci-static/resources/view/fchomo/node.js:1515
+#: htdocs/luci-static/resources/view/fchomo/node.js:1519
+#: htdocs/luci-static/resources/view/fchomo/node.js:1545
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:339
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:365
msgid "Content will not be verified, Please make sure you enter it correctly."
msgstr "内容将不会被验证,请确保输入正确。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1488
+#: htdocs/luci-static/resources/view/fchomo/node.js:1518
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:338
msgid "Contents"
msgstr "内容"
@@ -571,7 +571,7 @@ msgstr "Cron 表达式"
msgid "Custom Direct List"
msgstr "自定义直连列表"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1550
+#: htdocs/luci-static/resources/view/fchomo/node.js:1580
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:400
msgid "Custom HTTP header."
msgstr "自定义 HTTP header。"
@@ -639,11 +639,11 @@ msgstr "默认 DNS 服务器"
msgid "Destination addresses allowed to be forwarded via Wireguard."
msgstr "允许通过 WireGuard 转发的目的地址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1757
+#: htdocs/luci-static/resources/view/fchomo/node.js:1787
msgid "Destination provider"
msgstr "落地供应商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1763
+#: htdocs/luci-static/resources/view/fchomo/node.js:1793
msgid "Destination proxy node"
msgstr "落地代理节点"
@@ -651,8 +651,8 @@ msgstr "落地代理节点"
msgid "Dial fields"
msgstr "拨号字段"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1770
-#: htdocs/luci-static/resources/view/fchomo/node.js:1790
+#: htdocs/luci-static/resources/view/fchomo/node.js:1800
+#: htdocs/luci-static/resources/view/fchomo/node.js:1820
msgid "Different chain head/tail"
msgstr "不同的链头/链尾"
@@ -724,15 +724,15 @@ msgstr "不要在 ClientHello 中发送服务器名称。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1577
#: htdocs/luci-static/resources/view/fchomo/node.js:1038
-#: htdocs/luci-static/resources/view/fchomo/node.js:1619
+#: htdocs/luci-static/resources/view/fchomo/node.js:1649
msgid "Donot verifying server certificate."
msgstr "不验证服务器证书。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1298
+#: htdocs/luci-static/resources/view/fchomo/node.js:1328
msgid "Download bandwidth"
msgstr "下载带宽"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1299
+#: htdocs/luci-static/resources/view/fchomo/node.js:1329
msgid "Download bandwidth in Mbps."
msgstr "下载带宽(单位:Mbps)。"
@@ -773,11 +773,11 @@ msgstr ""
msgid "ETag support"
msgstr "ETag 支持"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1211
+#: htdocs/luci-static/resources/view/fchomo/node.js:1225
msgid "Early Data first packet length limit."
msgstr "前置数据长度阈值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1217
+#: htdocs/luci-static/resources/view/fchomo/node.js:1231
msgid "Early Data header name"
msgstr "前置数据标头"
@@ -793,7 +793,7 @@ msgstr "编辑节点"
msgid "Edit ruleset"
msgstr "编辑规则集"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1486
+#: htdocs/luci-static/resources/view/fchomo/node.js:1516
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:336
msgid "Editer"
msgstr "编辑器"
@@ -813,9 +813,9 @@ msgstr "消除加密头特征"
#: htdocs/luci-static/resources/view/fchomo/global.js:401
#: htdocs/luci-static/resources/view/fchomo/global.js:680
#: htdocs/luci-static/resources/view/fchomo/node.js:234
-#: htdocs/luci-static/resources/view/fchomo/node.js:1459
-#: htdocs/luci-static/resources/view/fchomo/node.js:1655
-#: htdocs/luci-static/resources/view/fchomo/node.js:1744
+#: htdocs/luci-static/resources/view/fchomo/node.js:1489
+#: htdocs/luci-static/resources/view/fchomo/node.js:1685
+#: htdocs/luci-static/resources/view/fchomo/node.js:1774
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:264
#: htdocs/luci-static/resources/view/fchomo/server.js:49
msgid "Enable"
@@ -846,15 +846,15 @@ msgstr ""
msgid "Enable ECH"
msgstr "启用 ECH"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1286
+#: htdocs/luci-static/resources/view/fchomo/node.js:1316
msgid "Enable TCP Brutal"
msgstr "启用 TCP Brutal"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1287
+#: htdocs/luci-static/resources/view/fchomo/node.js:1317
msgid "Enable TCP Brutal congestion control algorithm"
msgstr "启用 TCP Brutal 拥塞控制算法。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1275
+#: htdocs/luci-static/resources/view/fchomo/node.js:1305
msgid "Enable multiplexing only for TCP."
msgstr "仅为 TCP 启用多路复用。"
@@ -863,16 +863,16 @@ msgstr "仅为 TCP 启用多路复用。"
msgid "Enable obfuscate for downlink"
msgstr "启用下行链路混淆"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1269
+#: htdocs/luci-static/resources/view/fchomo/node.js:1299
msgid "Enable padding"
msgstr "启用填充"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1280
+#: htdocs/luci-static/resources/view/fchomo/node.js:1310
msgid "Enable statistic"
msgstr "启用统计"
#: htdocs/luci-static/resources/view/fchomo/node.js:871
-#: htdocs/luci-static/resources/view/fchomo/node.js:1601
+#: htdocs/luci-static/resources/view/fchomo/node.js:1631
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with Multiplex."
msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。"
@@ -911,7 +911,7 @@ msgid ""
"if empty."
msgstr "超过此限制将会触发强制健康检查。留空则使用 5。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1713
+#: htdocs/luci-static/resources/view/fchomo/node.js:1743
msgid "Exclude matched node types."
msgstr "排除匹配的节点类型。"
@@ -924,7 +924,7 @@ msgstr ""
"rel=\"noreferrer noopener\">此处。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1161
-#: htdocs/luci-static/resources/view/fchomo/node.js:1706
+#: htdocs/luci-static/resources/view/fchomo/node.js:1736
msgid "Exclude nodes that meet keywords or regexps."
msgstr "排除匹配关键词或表达式的节点。"
@@ -933,12 +933,12 @@ msgid "Expand/Collapse result"
msgstr "展开/收起 结果"
#: htdocs/luci-static/resources/view/fchomo/client.js:1121
-#: htdocs/luci-static/resources/view/fchomo/node.js:1691
+#: htdocs/luci-static/resources/view/fchomo/node.js:1721
msgid "Expected HTTP code. 204 will be used if empty."
msgstr "预期的 HTTP code。留空则使用 204。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1123
-#: htdocs/luci-static/resources/view/fchomo/node.js:1693
+#: htdocs/luci-static/resources/view/fchomo/node.js:1723
msgid "Expected status"
msgstr "预期状态"
@@ -981,8 +981,8 @@ msgstr "预期状态"
#: htdocs/luci-static/resources/view/fchomo/node.js:491
#: htdocs/luci-static/resources/view/fchomo/node.js:942
#: htdocs/luci-static/resources/view/fchomo/node.js:1030
-#: htdocs/luci-static/resources/view/fchomo/node.js:1770
-#: htdocs/luci-static/resources/view/fchomo/node.js:1790
+#: htdocs/luci-static/resources/view/fchomo/node.js:1800
+#: htdocs/luci-static/resources/view/fchomo/node.js:1820
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:291
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:305
msgid "Expecting: %s"
@@ -992,6 +992,7 @@ msgstr "请输入:%s"
#: htdocs/luci-static/resources/fchomo/listeners.js:984
#: htdocs/luci-static/resources/view/fchomo/node.js:1140
#: htdocs/luci-static/resources/view/fchomo/node.js:1147
+#: htdocs/luci-static/resources/view/fchomo/node.js:1155
msgid "Expecting: only support %s."
msgstr "请输入:仅支援 %s."
@@ -1041,7 +1042,7 @@ msgid "Fallback filter"
msgstr "後備过滤器"
#: htdocs/luci-static/resources/view/fchomo/client.js:1156
-#: htdocs/luci-static/resources/view/fchomo/node.js:1700
+#: htdocs/luci-static/resources/view/fchomo/node.js:1730
msgid "Filter nodes that meet keywords or regexps."
msgstr "过滤匹配关键字或表达式的节点。"
@@ -1084,8 +1085,8 @@ msgstr ""
"noopener\">%s."
#: htdocs/luci-static/resources/view/fchomo/client.js:1122
-#: htdocs/luci-static/resources/view/fchomo/node.js:1569
-#: htdocs/luci-static/resources/view/fchomo/node.js:1692
+#: htdocs/luci-static/resources/view/fchomo/node.js:1599
+#: htdocs/luci-static/resources/view/fchomo/node.js:1722
msgid ""
"For format see %s."
@@ -1113,7 +1114,7 @@ msgstr "格式"
msgid "FullCombo Shark!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1166
+#: htdocs/luci-static/resources/view/fchomo/node.js:1180
msgid "GET"
msgstr ""
@@ -1128,7 +1129,7 @@ msgstr "常规"
#: htdocs/luci-static/resources/fchomo/listeners.js:119
#: htdocs/luci-static/resources/view/fchomo/client.js:1009
#: htdocs/luci-static/resources/view/fchomo/node.js:222
-#: htdocs/luci-static/resources/view/fchomo/node.js:1449
+#: htdocs/luci-static/resources/view/fchomo/node.js:1479
msgid "General fields"
msgstr "常规字段"
@@ -1214,12 +1215,13 @@ msgstr "组"
#: htdocs/luci-static/resources/view/fchomo/node.js:816
#: htdocs/luci-static/resources/view/fchomo/node.js:1129
#: htdocs/luci-static/resources/view/fchomo/node.js:1140
+#: htdocs/luci-static/resources/view/fchomo/node.js:1147
msgid "HTTP"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:267
-#: htdocs/luci-static/resources/view/fchomo/node.js:1188
-#: htdocs/luci-static/resources/view/fchomo/node.js:1549
+#: htdocs/luci-static/resources/view/fchomo/node.js:1202
+#: htdocs/luci-static/resources/view/fchomo/node.js:1579
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:399
msgid "HTTP header"
msgstr "HTTP header"
@@ -1245,7 +1247,7 @@ msgstr "HTTP 伪装多路复用"
msgid "HTTP mask: %s"
msgstr "HTTP 伪装: %s"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1165
+#: htdocs/luci-static/resources/view/fchomo/node.js:1179
msgid "HTTP request method"
msgstr "HTTP 请求方法"
@@ -1267,6 +1269,7 @@ msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面
#: htdocs/luci-static/resources/fchomo/listeners.js:978
#: htdocs/luci-static/resources/view/fchomo/node.js:1130
#: htdocs/luci-static/resources/view/fchomo/node.js:1141
+#: htdocs/luci-static/resources/view/fchomo/node.js:1148
msgid "HTTPUpgrade"
msgstr ""
@@ -1291,27 +1294,27 @@ msgid "Health check"
msgstr "健康检查"
#: htdocs/luci-static/resources/view/fchomo/client.js:1091
-#: htdocs/luci-static/resources/view/fchomo/node.js:1660
+#: htdocs/luci-static/resources/view/fchomo/node.js:1690
msgid "Health check URL"
msgstr "健康检查 URL"
#: htdocs/luci-static/resources/view/fchomo/client.js:1120
-#: htdocs/luci-static/resources/view/fchomo/node.js:1690
+#: htdocs/luci-static/resources/view/fchomo/node.js:1720
msgid "Health check expected status"
msgstr "健康检查预期状态"
#: htdocs/luci-static/resources/view/fchomo/client.js:1100
-#: htdocs/luci-static/resources/view/fchomo/node.js:1670
+#: htdocs/luci-static/resources/view/fchomo/node.js:1700
msgid "Health check interval"
msgstr "健康检查间隔"
#: htdocs/luci-static/resources/view/fchomo/client.js:1107
-#: htdocs/luci-static/resources/view/fchomo/node.js:1677
+#: htdocs/luci-static/resources/view/fchomo/node.js:1707
msgid "Health check timeout"
msgstr "健康检查超时"
#: htdocs/luci-static/resources/view/fchomo/client.js:1011
-#: htdocs/luci-static/resources/view/fchomo/node.js:1451
+#: htdocs/luci-static/resources/view/fchomo/node.js:1481
msgid "Health fields"
msgstr "健康字段"
@@ -1362,8 +1365,8 @@ msgstr ""
msgid "IP override"
msgstr "IP 覆写"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1331
-#: htdocs/luci-static/resources/view/fchomo/node.js:1646
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1676
msgid "IP version"
msgstr "IP 版本"
@@ -1424,8 +1427,8 @@ msgstr "导入"
#: htdocs/luci-static/resources/view/fchomo/client.js:1713
#: htdocs/luci-static/resources/view/fchomo/client.js:1748
#: htdocs/luci-static/resources/view/fchomo/client.js:1769
-#: htdocs/luci-static/resources/view/fchomo/node.js:1356
-#: htdocs/luci-static/resources/view/fchomo/node.js:1437
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
+#: htdocs/luci-static/resources/view/fchomo/node.js:1467
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:153
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:241
msgid "Import mihomo config"
@@ -1441,12 +1444,12 @@ msgstr "导入规则集链接"
#: htdocs/luci-static/resources/fchomo/listeners.js:181
#: htdocs/luci-static/resources/view/fchomo/node.js:286
#: htdocs/luci-static/resources/view/fchomo/node.js:292
-#: htdocs/luci-static/resources/view/fchomo/node.js:1607
-#: htdocs/luci-static/resources/view/fchomo/node.js:1613
+#: htdocs/luci-static/resources/view/fchomo/node.js:1637
+#: htdocs/luci-static/resources/view/fchomo/node.js:1643
msgid "In Mbps."
msgstr "单位为 Mbps。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1527
+#: htdocs/luci-static/resources/view/fchomo/node.js:1557
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:377
msgid "In bytes. %s will be used if empty."
msgstr "单位为字节。留空则使用 %s。"
@@ -1458,7 +1461,7 @@ msgstr "单位为毫秒。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1108
#: htdocs/luci-static/resources/view/fchomo/client.js:1137
-#: htdocs/luci-static/resources/view/fchomo/node.js:1678
+#: htdocs/luci-static/resources/view/fchomo/node.js:1708
msgid "In millisecond. %s will be used if empty."
msgstr "单位为毫秒。留空则使用 %s。"
@@ -1467,7 +1470,7 @@ msgstr "单位为毫秒。留空则使用 %s。"
#: htdocs/luci-static/resources/fchomo/listeners.js:428
#: htdocs/luci-static/resources/view/fchomo/node.js:604
#: htdocs/luci-static/resources/view/fchomo/node.js:611
-#: htdocs/luci-static/resources/view/fchomo/node.js:1204
+#: htdocs/luci-static/resources/view/fchomo/node.js:1218
msgid "In seconds."
msgstr "单位为秒。"
@@ -1476,8 +1479,8 @@ msgstr "单位为秒。"
#: htdocs/luci-static/resources/view/fchomo/global.js:430
#: htdocs/luci-static/resources/view/fchomo/global.js:515
#: htdocs/luci-static/resources/view/fchomo/node.js:280
-#: htdocs/luci-static/resources/view/fchomo/node.js:1533
-#: htdocs/luci-static/resources/view/fchomo/node.js:1671
+#: htdocs/luci-static/resources/view/fchomo/node.js:1563
+#: htdocs/luci-static/resources/view/fchomo/node.js:1701
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:383
msgid "In seconds. %s will be used if empty."
msgstr "单位为秒。留空则使用 %s。"
@@ -1525,7 +1528,7 @@ msgstr "引入所有代理节点。"
msgid "Info"
msgstr "信息"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1466
+#: htdocs/luci-static/resources/view/fchomo/node.js:1496
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:279
msgid "Inline"
msgstr "内嵌"
@@ -1562,14 +1565,14 @@ msgstr "密钥对"
#: htdocs/luci-static/resources/view/fchomo/client.js:1719
#: htdocs/luci-static/resources/view/fchomo/client.js:1775
#: htdocs/luci-static/resources/view/fchomo/node.js:229
-#: htdocs/luci-static/resources/view/fchomo/node.js:1454
-#: htdocs/luci-static/resources/view/fchomo/node.js:1739
+#: htdocs/luci-static/resources/view/fchomo/node.js:1484
+#: htdocs/luci-static/resources/view/fchomo/node.js:1769
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:259
msgid "Label"
msgstr "标签"
#: htdocs/luci-static/resources/view/fchomo/client.js:1114
-#: htdocs/luci-static/resources/view/fchomo/node.js:1684
+#: htdocs/luci-static/resources/view/fchomo/node.js:1714
msgid "Lazy"
msgstr "懒惰状态"
@@ -1620,7 +1623,7 @@ msgstr "监听端口"
msgid "Load balance"
msgstr "负载均衡"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1464
+#: htdocs/luci-static/resources/view/fchomo/node.js:1494
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:277
msgid "Local"
msgstr "本地"
@@ -1654,9 +1657,11 @@ msgstr "日志等级"
#: htdocs/luci-static/resources/fchomo/listeners.js:324
#: htdocs/luci-static/resources/fchomo/listeners.js:325
#: htdocs/luci-static/resources/fchomo/listeners.js:326
+#: htdocs/luci-static/resources/fchomo/listeners.js:331
#: htdocs/luci-static/resources/view/fchomo/node.js:409
#: htdocs/luci-static/resources/view/fchomo/node.js:410
#: htdocs/luci-static/resources/view/fchomo/node.js:411
+#: htdocs/luci-static/resources/view/fchomo/node.js:416
msgid "Low-entropy data stream"
msgstr "低熵数据流"
@@ -1706,7 +1711,7 @@ msgstr "匹配响应通过 ipcidr"
msgid "Match rule set."
msgstr "匹配规则集。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1210
+#: htdocs/luci-static/resources/view/fchomo/node.js:1224
msgid "Max Early Data"
msgstr "前置数据最大值"
@@ -1733,12 +1738,12 @@ msgstr "限制打开流的数量"
msgid "Max upload speed"
msgstr "最大上传速度"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
-#: htdocs/luci-static/resources/view/fchomo/node.js:1263
+#: htdocs/luci-static/resources/view/fchomo/node.js:1277
+#: htdocs/luci-static/resources/view/fchomo/node.js:1293
msgid "Maximum connections"
msgstr "最大连接数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1261
+#: htdocs/luci-static/resources/view/fchomo/node.js:1291
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1758,7 +1763,7 @@ msgid ""
"rate."
msgstr "最大填充率必须大于等于最小填充率。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1260
+#: htdocs/luci-static/resources/view/fchomo/node.js:1290
msgid "Maximum streams"
msgstr "最大流数量"
@@ -1783,7 +1788,7 @@ msgstr "Mihomo 服务端"
msgid "Min of idle sessions to keep"
msgstr "要保留的最少闲置会话数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1254
+#: htdocs/luci-static/resources/view/fchomo/node.js:1284
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr "在打开新连接之前,连接中的最小多路复用流数量。"
@@ -1793,8 +1798,8 @@ msgstr "在打开新连接之前,连接中的最小多路复用流数量。"
msgid "Minimum padding rate"
msgstr "最小填充率"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1253
-#: htdocs/luci-static/resources/view/fchomo/node.js:1263
+#: htdocs/luci-static/resources/view/fchomo/node.js:1283
+#: htdocs/luci-static/resources/view/fchomo/node.js:1293
msgid "Minimum streams"
msgstr "最小流数量"
@@ -1811,7 +1816,7 @@ msgstr "混合 系统 TCP 栈和 gVisor UDP 栈。"
msgid "Mixed port"
msgstr "混合端口"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1233
+#: htdocs/luci-static/resources/view/fchomo/node.js:1263
msgid "Multiplex"
msgstr "多路复用"
@@ -1833,7 +1838,7 @@ msgstr "NOT"
msgid "Name of the Proxy group as outbound."
msgstr "出站代理组的名称。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1539
+#: htdocs/luci-static/resources/view/fchomo/node.js:1569
msgid "Name of the Proxy group to download provider."
msgstr "用于下载供应商订阅的代理组名称。"
@@ -1865,8 +1870,12 @@ msgstr "无需认证的 IP 范围"
msgid "No add'l params"
msgstr "无附加参数"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1252
+msgid "No gRPC header"
+msgstr "无 gRPC header"
+
#: htdocs/luci-static/resources/view/fchomo/client.js:1115
-#: htdocs/luci-static/resources/view/fchomo/node.js:1685
+#: htdocs/luci-static/resources/view/fchomo/node.js:1715
msgid "No testing is performed when this provider node is not in use."
msgstr "当此供应商的节点未使用时,不执行任何测试。"
@@ -1885,17 +1894,17 @@ msgid "Node"
msgstr "节点"
#: htdocs/luci-static/resources/view/fchomo/client.js:1160
-#: htdocs/luci-static/resources/view/fchomo/node.js:1705
+#: htdocs/luci-static/resources/view/fchomo/node.js:1735
msgid "Node exclude filter"
msgstr "排除节点"
#: htdocs/luci-static/resources/view/fchomo/client.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:1712
+#: htdocs/luci-static/resources/view/fchomo/node.js:1742
msgid "Node exclude type"
msgstr "排除节点类型"
#: htdocs/luci-static/resources/view/fchomo/client.js:1155
-#: htdocs/luci-static/resources/view/fchomo/node.js:1699
+#: htdocs/luci-static/resources/view/fchomo/node.js:1729
msgid "Node filter"
msgstr "过滤节点"
@@ -1973,7 +1982,7 @@ msgid "Override destination"
msgstr "覆盖目标地址"
#: htdocs/luci-static/resources/view/fchomo/client.js:1010
-#: htdocs/luci-static/resources/view/fchomo/node.js:1450
+#: htdocs/luci-static/resources/view/fchomo/node.js:1480
msgid "Override fields"
msgstr "覆盖字段"
@@ -2001,11 +2010,11 @@ msgstr "覆盖用于 HTTPS 记录查询的域名。"
msgid "Overview"
msgstr "概览"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1167
+#: htdocs/luci-static/resources/view/fchomo/node.js:1181
msgid "POST"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1168
+#: htdocs/luci-static/resources/view/fchomo/node.js:1182
msgid "PUT"
msgstr ""
@@ -2013,6 +2022,10 @@ msgstr ""
msgid "Packet encoding"
msgstr "数据包编码"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1257
+msgid "Padding bytes"
+msgstr "填充字节"
+
#: htdocs/luci-static/resources/fchomo/listeners.js:458
msgid "Padding scheme"
msgstr "填充方案"
@@ -2032,7 +2045,7 @@ msgid "Password"
msgstr "密码"
#: htdocs/luci-static/resources/fchomo/listeners.js:587
-#: htdocs/luci-static/resources/view/fchomo/node.js:1514
+#: htdocs/luci-static/resources/view/fchomo/node.js:1544
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:364
msgid "Payload"
msgstr "Payload"
@@ -2074,8 +2087,8 @@ msgid ""
"standards."
msgstr "链接格式标准请参考 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1487
-#: htdocs/luci-static/resources/view/fchomo/node.js:1513
+#: htdocs/luci-static/resources/view/fchomo/node.js:1517
+#: htdocs/luci-static/resources/view/fchomo/node.js:1543
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:337
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:363
msgid ""
@@ -2090,7 +2103,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1445
#: htdocs/luci-static/resources/view/fchomo/client.js:1697
#: htdocs/luci-static/resources/view/fchomo/client.js:1749
-#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/view/fchomo/node.js:1387
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:154
msgid "Please type %s fields of mihomo config."
msgstr "请输入 mihomo 配置的 %s 字段。"
@@ -2157,10 +2170,10 @@ msgstr "防止某些情况下的 ICMP 环回问题。Ping 不会显示实际延
#: htdocs/luci-static/resources/view/fchomo/global.js:736
#: htdocs/luci-static/resources/view/fchomo/global.js:753
-#: htdocs/luci-static/resources/view/fchomo/node.js:1321
-#: htdocs/luci-static/resources/view/fchomo/node.js:1327
-#: htdocs/luci-static/resources/view/fchomo/node.js:1634
-#: htdocs/luci-static/resources/view/fchomo/node.js:1641
+#: htdocs/luci-static/resources/view/fchomo/node.js:1351
+#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/view/fchomo/node.js:1664
+#: htdocs/luci-static/resources/view/fchomo/node.js:1671
msgid "Priority: Proxy Node > Global."
msgstr "优先级: 代理节点 > 全局。"
@@ -2182,7 +2195,7 @@ msgid "Process matching mode"
msgstr "进程匹配模式"
#: htdocs/luci-static/resources/view/fchomo/global.js:684
-#: htdocs/luci-static/resources/view/fchomo/node.js:1239
+#: htdocs/luci-static/resources/view/fchomo/node.js:1269
msgid "Protocol"
msgstr "协议"
@@ -2197,13 +2210,13 @@ msgid ""
msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1055
-#: htdocs/luci-static/resources/view/fchomo/node.js:1340
-#: htdocs/luci-static/resources/view/fchomo/node.js:1349
-#: htdocs/luci-static/resources/view/fchomo/node.js:1750
+#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1379
+#: htdocs/luci-static/resources/view/fchomo/node.js:1780
msgid "Provider"
msgstr "供应商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1520
+#: htdocs/luci-static/resources/view/fchomo/node.js:1550
msgid "Provider URL"
msgstr "供应商订阅 URL"
@@ -2226,19 +2239,19 @@ msgid "Proxy MAC-s"
msgstr "代理 MAC 地址"
#: htdocs/luci-static/resources/view/fchomo/node.js:208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1749
+#: htdocs/luci-static/resources/view/fchomo/node.js:1779
msgid "Proxy Node"
msgstr "代理节点"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1725
-#: htdocs/luci-static/resources/view/fchomo/node.js:1734
+#: htdocs/luci-static/resources/view/fchomo/node.js:1755
+#: htdocs/luci-static/resources/view/fchomo/node.js:1764
msgid "Proxy chain"
msgstr "代理链"
#: htdocs/luci-static/resources/fchomo/listeners.js:530
#: htdocs/luci-static/resources/view/fchomo/client.js:783
#: htdocs/luci-static/resources/view/fchomo/client.js:1543
-#: htdocs/luci-static/resources/view/fchomo/node.js:1538
+#: htdocs/luci-static/resources/view/fchomo/node.js:1568
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:388
msgid "Proxy group"
msgstr "代理组"
@@ -2345,7 +2358,7 @@ msgstr "重载"
msgid "Reload All"
msgstr "重载所有"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1465
+#: htdocs/luci-static/resources/view/fchomo/node.js:1495
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:278
msgid "Remote"
msgstr "远程"
@@ -2360,18 +2373,18 @@ msgid "Remove"
msgstr "移除"
#: htdocs/luci-static/resources/fchomo.js:1354
-#: htdocs/luci-static/resources/view/fchomo/node.js:1441
-#: htdocs/luci-static/resources/view/fchomo/node.js:1443
+#: htdocs/luci-static/resources/view/fchomo/node.js:1471
+#: htdocs/luci-static/resources/view/fchomo/node.js:1473
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:251
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:253
msgid "Remove idles"
msgstr "移除闲置"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1567
+#: htdocs/luci-static/resources/view/fchomo/node.js:1597
msgid "Replace name"
msgstr "名称替换"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1568
+#: htdocs/luci-static/resources/view/fchomo/node.js:1598
msgid "Replace node name."
msgstr "替换节点名称"
@@ -2380,8 +2393,8 @@ msgid "Request"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:996
-#: htdocs/luci-static/resources/view/fchomo/node.js:1174
-#: htdocs/luci-static/resources/view/fchomo/node.js:1181
+#: htdocs/luci-static/resources/view/fchomo/node.js:1188
+#: htdocs/luci-static/resources/view/fchomo/node.js:1195
msgid "Request path"
msgstr "请求路径"
@@ -2446,8 +2459,8 @@ msgstr "路由 DSCP"
msgid "Routing GFW"
msgstr "路由 GFW 流量"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1326
-#: htdocs/luci-static/resources/view/fchomo/node.js:1640
+#: htdocs/luci-static/resources/view/fchomo/node.js:1356
+#: htdocs/luci-static/resources/view/fchomo/node.js:1670
msgid "Routing mark"
msgstr "路由标记"
@@ -2585,7 +2598,8 @@ msgstr "服务端"
msgid "Server address"
msgstr "服务器地址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1159
+#: htdocs/luci-static/resources/view/fchomo/node.js:1167
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
msgid "Server hostname"
msgstr "服务器主机名称"
@@ -2617,7 +2631,7 @@ msgstr "Shadowsocks 加密"
msgid "Shadowsocks password"
msgstr "Shadowsocks 密码"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1281
+#: htdocs/luci-static/resources/view/fchomo/node.js:1311
msgid "Show connections in the dashboard for breaking connections easier."
msgstr "在面板中显示连接以便于打断连接。"
@@ -2629,14 +2643,14 @@ msgstr "静音"
msgid "Simple round-robin all nodes"
msgstr "简单轮替所有节点"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1526
+#: htdocs/luci-static/resources/view/fchomo/node.js:1556
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:376
msgid "Size limit"
msgstr "大小限制"
#: htdocs/luci-static/resources/view/fchomo/client.js:1576
#: htdocs/luci-static/resources/view/fchomo/node.js:1037
-#: htdocs/luci-static/resources/view/fchomo/node.js:1618
+#: htdocs/luci-static/resources/view/fchomo/node.js:1648
msgid "Skip cert verify"
msgstr "跳过证书验证"
@@ -2764,7 +2778,7 @@ msgstr "TCP"
msgid "TCP concurrency"
msgstr "TCP 并发"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1274
+#: htdocs/luci-static/resources/view/fchomo/node.js:1304
msgid "TCP only"
msgstr "仅 TCP"
@@ -2790,8 +2804,8 @@ msgstr "TCP-Keep-Alive 间隔"
msgid "TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1305
-#: htdocs/luci-static/resources/view/fchomo/node.js:1585
+#: htdocs/luci-static/resources/view/fchomo/node.js:1335
+#: htdocs/luci-static/resources/view/fchomo/node.js:1615
msgid "TFO"
msgstr "TCP 快速打开 (TFO)"
@@ -2903,7 +2917,7 @@ msgstr "此 ECH 参数需要添加到域名的 HTTPS 记录中。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1579
#: htdocs/luci-static/resources/view/fchomo/node.js:1040
-#: htdocs/luci-static/resources/view/fchomo/node.js:1621
+#: htdocs/luci-static/resources/view/fchomo/node.js:1651
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
@@ -2947,11 +2961,11 @@ msgstr "Tproxy 端口"
msgid "Traffic pattern"
msgstr "流量模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1777
+#: htdocs/luci-static/resources/view/fchomo/node.js:1807
msgid "Transit proxy group"
msgstr "中转代理组"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1783
+#: htdocs/luci-static/resources/view/fchomo/node.js:1813
msgid "Transit proxy node"
msgstr "中转代理节点"
@@ -3013,8 +3027,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:842
#: htdocs/luci-static/resources/view/fchomo/client.js:1028
#: htdocs/luci-static/resources/view/fchomo/node.js:238
-#: htdocs/luci-static/resources/view/fchomo/node.js:1463
-#: htdocs/luci-static/resources/view/fchomo/node.js:1748
+#: htdocs/luci-static/resources/view/fchomo/node.js:1493
+#: htdocs/luci-static/resources/view/fchomo/node.js:1778
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:276
msgid "Type"
msgstr "类型"
@@ -3030,7 +3044,7 @@ msgstr "类型"
#: htdocs/luci-static/resources/view/fchomo/client.js:588
#: htdocs/luci-static/resources/view/fchomo/client.js:678
#: htdocs/luci-static/resources/view/fchomo/node.js:865
-#: htdocs/luci-static/resources/view/fchomo/node.js:1595
+#: htdocs/luci-static/resources/view/fchomo/node.js:1625
msgid "UDP"
msgstr "UDP"
@@ -3099,7 +3113,7 @@ msgid "Unknown error: %s"
msgstr "未知错误:%s"
#: htdocs/luci-static/resources/view/fchomo/node.js:870
-#: htdocs/luci-static/resources/view/fchomo/node.js:1600
+#: htdocs/luci-static/resources/view/fchomo/node.js:1630
msgid "UoT"
msgstr "UDP over TCP (UoT)"
@@ -3107,16 +3121,16 @@ msgstr "UDP over TCP (UoT)"
msgid "Update failed."
msgstr "更新失败。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1532
+#: htdocs/luci-static/resources/view/fchomo/node.js:1562
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:382
msgid "Update interval"
msgstr "更新间隔"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1292
+#: htdocs/luci-static/resources/view/fchomo/node.js:1322
msgid "Upload bandwidth"
msgstr "上传带宽"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1293
+#: htdocs/luci-static/resources/view/fchomo/node.js:1323
msgid "Upload bandwidth in Mbps."
msgstr "上传带宽(单位:Mbps)。"
@@ -3181,11 +3195,11 @@ msgstr "用户名"
msgid "Users filter mode"
msgstr "使用者过滤模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1222
+#: htdocs/luci-static/resources/view/fchomo/node.js:1236
msgid "V2ray HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1227
+#: htdocs/luci-static/resources/view/fchomo/node.js:1241
msgid "V2ray HTTPUpgrade fast open"
msgstr ""
@@ -3199,8 +3213,8 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1469
-#: htdocs/luci-static/resources/view/fchomo/node.js:1754
+#: htdocs/luci-static/resources/view/fchomo/node.js:1499
+#: htdocs/luci-static/resources/view/fchomo/node.js:1784
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:319
msgid "Value"
msgstr "可视化值"
@@ -3240,7 +3254,8 @@ msgstr "警告"
#: htdocs/luci-static/resources/view/fchomo/node.js:489
#: htdocs/luci-static/resources/view/fchomo/node.js:1132
#: htdocs/luci-static/resources/view/fchomo/node.js:1143
-#: htdocs/luci-static/resources/view/fchomo/node.js:1148
+#: htdocs/luci-static/resources/view/fchomo/node.js:1150
+#: htdocs/luci-static/resources/view/fchomo/node.js:1156
msgid "WebSocket"
msgstr ""
@@ -3268,6 +3283,15 @@ msgstr "WireGuard 预共享密钥。"
msgid "WireGuard requires base64-encoded private keys."
msgstr "WireGuard 要求 base64 编码的私钥。"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/view/fchomo/node.js:1151
+msgid "XHTTP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1246
+msgid "XHTTP mode"
+msgstr "XHTTP 模式"
+
#: htdocs/luci-static/resources/fchomo/listeners.js:609
msgid "XOR mode"
msgstr "XOR 模式"
@@ -3341,7 +3365,7 @@ msgstr "decryption"
msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)"
msgstr "dnsmasq 自行选择上游服务器。 (可能影响 CDN 准确性)"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1612
+#: htdocs/luci-static/resources/view/fchomo/node.js:1642
msgid "down"
msgstr "Hysteria 下载速率"
@@ -3361,20 +3385,21 @@ msgstr "false = 带宽优化下行 true = 纯 Sudoku 下行。"
#: htdocs/luci-static/resources/fchomo/listeners.js:984
#: htdocs/luci-static/resources/view/fchomo/node.js:1131
#: htdocs/luci-static/resources/view/fchomo/node.js:1142
-#: htdocs/luci-static/resources/view/fchomo/node.js:1147
+#: htdocs/luci-static/resources/view/fchomo/node.js:1149
+#: htdocs/luci-static/resources/view/fchomo/node.js:1155
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1198
+#: htdocs/luci-static/resources/view/fchomo/node.js:1212
msgid "gRPC User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1203
+#: htdocs/luci-static/resources/view/fchomo/node.js:1217
msgid "gRPC ping interval"
msgstr "gRPC ping 间隔"
#: htdocs/luci-static/resources/fchomo/listeners.js:1003
-#: htdocs/luci-static/resources/view/fchomo/node.js:1194
+#: htdocs/luci-static/resources/view/fchomo/node.js:1208
msgid "gRPC service name"
msgstr "gRPC 服务名称"
@@ -3382,7 +3407,7 @@ msgstr "gRPC 服务名称"
msgid "gVisor"
msgstr "gVisor"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1243
+#: htdocs/luci-static/resources/view/fchomo/node.js:1273
msgid "h2mux"
msgstr ""
@@ -3400,7 +3425,7 @@ msgstr "metacubexd"
#: htdocs/luci-static/resources/view/fchomo/client.js:1480
#: htdocs/luci-static/resources/view/fchomo/client.js:1711
#: htdocs/luci-static/resources/view/fchomo/client.js:1767
-#: htdocs/luci-static/resources/view/fchomo/node.js:1435
+#: htdocs/luci-static/resources/view/fchomo/node.js:1465
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:239
msgid "mihomo config"
msgstr "mihomo 配置"
@@ -3409,8 +3434,8 @@ msgstr "mihomo 配置"
msgid "mlkem768x25519plus"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1309
-#: htdocs/luci-static/resources/view/fchomo/node.js:1590
+#: htdocs/luci-static/resources/view/fchomo/node.js:1339
+#: htdocs/luci-static/resources/view/fchomo/node.js:1620
msgid "mpTCP"
msgstr "多路径 TCP (mpTCP)"
@@ -3466,7 +3491,7 @@ msgstr "仅当 %s 为 %s 时适用。"
msgid "only applies when %s is not %s."
msgstr "仅当 %s 不为 %s 时适用。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1570
+#: htdocs/luci-static/resources/view/fchomo/node.js:1600
msgid "override.proxy-name"
msgstr ""
@@ -3474,6 +3499,10 @@ msgstr ""
msgid "packet addr (v2ray-core v5+)"
msgstr ""
+#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+msgid "packet-up"
+msgstr ""
+
#: htdocs/luci-static/resources/fchomo/listeners.js:391
#: htdocs/luci-static/resources/view/fchomo/node.js:458
msgid "poll"
@@ -3506,7 +3535,7 @@ msgstr "规则集"
msgid "shadow-tls"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1241
+#: htdocs/luci-static/resources/view/fchomo/node.js:1271
msgid "smux"
msgstr ""
@@ -3519,6 +3548,10 @@ msgstr ""
msgid "src"
msgstr "src"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+msgid "stream-one"
+msgstr ""
+
#: htdocs/luci-static/resources/view/fchomo/node.js:491
msgid "stream/poll/auto"
msgstr ""
@@ -3543,7 +3576,7 @@ msgstr "独立标识"
msgid "unique value"
msgstr "独立值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1606
+#: htdocs/luci-static/resources/view/fchomo/node.js:1636
msgid "up"
msgstr "Hysteria 上传速率"
@@ -3619,7 +3652,7 @@ msgstr ""
msgid "yacd-meta"
msgstr "yacd-meta"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1242
+#: htdocs/luci-static/resources/view/fchomo/node.js:1272
msgid "yamux"
msgstr ""
diff --git a/luci-app-fchomo/po/zh_Hant/fchomo.po b/luci-app-fchomo/po/zh_Hant/fchomo.po
index 719a10ce..9bfcb2f5 100644
--- a/luci-app-fchomo/po/zh_Hant/fchomo.po
+++ b/luci-app-fchomo/po/zh_Hant/fchomo.po
@@ -46,10 +46,10 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1056
#: htdocs/luci-static/resources/view/fchomo/client.js:1057
#: htdocs/luci-static/resources/view/fchomo/client.js:1278
-#: htdocs/luci-static/resources/view/fchomo/node.js:1758
-#: htdocs/luci-static/resources/view/fchomo/node.js:1764
-#: htdocs/luci-static/resources/view/fchomo/node.js:1778
-#: htdocs/luci-static/resources/view/fchomo/node.js:1784
+#: htdocs/luci-static/resources/view/fchomo/node.js:1788
+#: htdocs/luci-static/resources/view/fchomo/node.js:1794
+#: htdocs/luci-static/resources/view/fchomo/node.js:1808
+#: htdocs/luci-static/resources/view/fchomo/node.js:1814
msgid "-- Please choose --"
msgstr "-- 請選擇 --"
@@ -182,11 +182,11 @@ msgstr "新增 節點"
msgid "Add a inbound"
msgstr "新增 入站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1349
+#: htdocs/luci-static/resources/view/fchomo/node.js:1379
msgid "Add a provider"
msgstr "新增 供應商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1734
+#: htdocs/luci-static/resources/view/fchomo/node.js:1764
msgid "Add a proxy chain"
msgstr "新增 代理鏈"
@@ -210,11 +210,11 @@ msgstr "新增 伺服器"
msgid "Add a sub rule"
msgstr "新增 子規則"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1559
+#: htdocs/luci-static/resources/view/fchomo/node.js:1589
msgid "Add prefix"
msgstr "添加前綴"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1563
+#: htdocs/luci-static/resources/view/fchomo/node.js:1593
msgid "Add suffix"
msgstr "添加後綴"
@@ -343,13 +343,13 @@ msgid "Binary mrs"
msgstr "二進位 mrs"
#: htdocs/luci-static/resources/view/fchomo/global.js:734
-#: htdocs/luci-static/resources/view/fchomo/node.js:1319
-#: htdocs/luci-static/resources/view/fchomo/node.js:1632
+#: htdocs/luci-static/resources/view/fchomo/node.js:1349
+#: htdocs/luci-static/resources/view/fchomo/node.js:1662
msgid "Bind interface"
msgstr "綁定介面"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1320
-#: htdocs/luci-static/resources/view/fchomo/node.js:1633
+#: htdocs/luci-static/resources/view/fchomo/node.js:1350
+#: htdocs/luci-static/resources/view/fchomo/node.js:1663
msgid "Bind outbound interface."
msgstr "綁定出站介面。"
@@ -521,7 +521,7 @@ msgstr "常用連接埠(繞過 P2P 流量)"
msgid "Complete"
msgstr "完成"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1579
+#: htdocs/luci-static/resources/view/fchomo/node.js:1609
msgid "Configuration Items"
msgstr "配置項"
@@ -539,14 +539,14 @@ msgid "Content copied to clipboard!"
msgstr "內容已複製到剪貼簿!"
#: htdocs/luci-static/resources/view/fchomo/client.js:670
-#: htdocs/luci-static/resources/view/fchomo/node.js:1489
-#: htdocs/luci-static/resources/view/fchomo/node.js:1515
+#: htdocs/luci-static/resources/view/fchomo/node.js:1519
+#: htdocs/luci-static/resources/view/fchomo/node.js:1545
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:339
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:365
msgid "Content will not be verified, Please make sure you enter it correctly."
msgstr "內容將不會被驗證,請確保輸入正確。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1488
+#: htdocs/luci-static/resources/view/fchomo/node.js:1518
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:338
msgid "Contents"
msgstr "內容"
@@ -571,7 +571,7 @@ msgstr "Cron 表達式"
msgid "Custom Direct List"
msgstr "自訂直連清單"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1550
+#: htdocs/luci-static/resources/view/fchomo/node.js:1580
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:400
msgid "Custom HTTP header."
msgstr "自訂 HTTP header。"
@@ -639,11 +639,11 @@ msgstr "預設 DNS 伺服器"
msgid "Destination addresses allowed to be forwarded via Wireguard."
msgstr "允許通過 WireGuard 轉發的目的位址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1757
+#: htdocs/luci-static/resources/view/fchomo/node.js:1787
msgid "Destination provider"
msgstr "落地供應商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1763
+#: htdocs/luci-static/resources/view/fchomo/node.js:1793
msgid "Destination proxy node"
msgstr "落地代理節點"
@@ -651,8 +651,8 @@ msgstr "落地代理節點"
msgid "Dial fields"
msgstr "撥號欄位"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1770
-#: htdocs/luci-static/resources/view/fchomo/node.js:1790
+#: htdocs/luci-static/resources/view/fchomo/node.js:1800
+#: htdocs/luci-static/resources/view/fchomo/node.js:1820
msgid "Different chain head/tail"
msgstr "不同的鏈頭/鏈尾"
@@ -724,15 +724,15 @@ msgstr "不要在 ClientHello 中傳送伺服器名稱。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1577
#: htdocs/luci-static/resources/view/fchomo/node.js:1038
-#: htdocs/luci-static/resources/view/fchomo/node.js:1619
+#: htdocs/luci-static/resources/view/fchomo/node.js:1649
msgid "Donot verifying server certificate."
msgstr "不驗證伺服器憑證。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1298
+#: htdocs/luci-static/resources/view/fchomo/node.js:1328
msgid "Download bandwidth"
msgstr "下載頻寬"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1299
+#: htdocs/luci-static/resources/view/fchomo/node.js:1329
msgid "Download bandwidth in Mbps."
msgstr "下載頻寬(單位:Mbps)。"
@@ -773,11 +773,11 @@ msgstr ""
msgid "ETag support"
msgstr "ETag 支援"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1211
+#: htdocs/luci-static/resources/view/fchomo/node.js:1225
msgid "Early Data first packet length limit."
msgstr "前置數據長度閾值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1217
+#: htdocs/luci-static/resources/view/fchomo/node.js:1231
msgid "Early Data header name"
msgstr "前置數據標頭"
@@ -793,7 +793,7 @@ msgstr "編輯節點"
msgid "Edit ruleset"
msgstr "編輯規則集"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1486
+#: htdocs/luci-static/resources/view/fchomo/node.js:1516
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:336
msgid "Editer"
msgstr "編輯器"
@@ -813,9 +813,9 @@ msgstr "消除加密頭特徵"
#: htdocs/luci-static/resources/view/fchomo/global.js:401
#: htdocs/luci-static/resources/view/fchomo/global.js:680
#: htdocs/luci-static/resources/view/fchomo/node.js:234
-#: htdocs/luci-static/resources/view/fchomo/node.js:1459
-#: htdocs/luci-static/resources/view/fchomo/node.js:1655
-#: htdocs/luci-static/resources/view/fchomo/node.js:1744
+#: htdocs/luci-static/resources/view/fchomo/node.js:1489
+#: htdocs/luci-static/resources/view/fchomo/node.js:1685
+#: htdocs/luci-static/resources/view/fchomo/node.js:1774
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:264
#: htdocs/luci-static/resources/view/fchomo/server.js:49
msgid "Enable"
@@ -846,15 +846,15 @@ msgstr ""
msgid "Enable ECH"
msgstr "啟用 ECH"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1286
+#: htdocs/luci-static/resources/view/fchomo/node.js:1316
msgid "Enable TCP Brutal"
msgstr "啟用 TCP Brutal"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1287
+#: htdocs/luci-static/resources/view/fchomo/node.js:1317
msgid "Enable TCP Brutal congestion control algorithm"
msgstr "啟用 TCP Brutal 擁塞控制演算法。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1275
+#: htdocs/luci-static/resources/view/fchomo/node.js:1305
msgid "Enable multiplexing only for TCP."
msgstr "僅為 TCP 啟用多路復用。"
@@ -863,16 +863,16 @@ msgstr "僅為 TCP 啟用多路復用。"
msgid "Enable obfuscate for downlink"
msgstr "啟用下行鏈路混淆"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1269
+#: htdocs/luci-static/resources/view/fchomo/node.js:1299
msgid "Enable padding"
msgstr "啟用填充"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1280
+#: htdocs/luci-static/resources/view/fchomo/node.js:1310
msgid "Enable statistic"
msgstr "啟用統計"
#: htdocs/luci-static/resources/view/fchomo/node.js:871
-#: htdocs/luci-static/resources/view/fchomo/node.js:1601
+#: htdocs/luci-static/resources/view/fchomo/node.js:1631
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with Multiplex."
msgstr "啟用 SUoT 協議,需要服務端支援。與多路復用衝突。"
@@ -911,7 +911,7 @@ msgid ""
"if empty."
msgstr "超過此限制將會觸發強制健康檢查。留空則使用 5。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1713
+#: htdocs/luci-static/resources/view/fchomo/node.js:1743
msgid "Exclude matched node types."
msgstr "排除匹配的節點類型。"
@@ -924,7 +924,7 @@ msgstr ""
"rel=\"noreferrer noopener\">此處。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1161
-#: htdocs/luci-static/resources/view/fchomo/node.js:1706
+#: htdocs/luci-static/resources/view/fchomo/node.js:1736
msgid "Exclude nodes that meet keywords or regexps."
msgstr "排除匹配關鍵字或表達式的節點。"
@@ -933,12 +933,12 @@ msgid "Expand/Collapse result"
msgstr "展開/收起 結果"
#: htdocs/luci-static/resources/view/fchomo/client.js:1121
-#: htdocs/luci-static/resources/view/fchomo/node.js:1691
+#: htdocs/luci-static/resources/view/fchomo/node.js:1721
msgid "Expected HTTP code. 204 will be used if empty."
msgstr "預期的 HTTP code。留空則使用 204。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1123
-#: htdocs/luci-static/resources/view/fchomo/node.js:1693
+#: htdocs/luci-static/resources/view/fchomo/node.js:1723
msgid "Expected status"
msgstr "預期狀態"
@@ -981,8 +981,8 @@ msgstr "預期狀態"
#: htdocs/luci-static/resources/view/fchomo/node.js:491
#: htdocs/luci-static/resources/view/fchomo/node.js:942
#: htdocs/luci-static/resources/view/fchomo/node.js:1030
-#: htdocs/luci-static/resources/view/fchomo/node.js:1770
-#: htdocs/luci-static/resources/view/fchomo/node.js:1790
+#: htdocs/luci-static/resources/view/fchomo/node.js:1800
+#: htdocs/luci-static/resources/view/fchomo/node.js:1820
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:291
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:305
msgid "Expecting: %s"
@@ -992,6 +992,7 @@ msgstr "請輸入:%s"
#: htdocs/luci-static/resources/fchomo/listeners.js:984
#: htdocs/luci-static/resources/view/fchomo/node.js:1140
#: htdocs/luci-static/resources/view/fchomo/node.js:1147
+#: htdocs/luci-static/resources/view/fchomo/node.js:1155
msgid "Expecting: only support %s."
msgstr "請輸入:僅支援 %s."
@@ -1041,7 +1042,7 @@ msgid "Fallback filter"
msgstr "後備過濾器"
#: htdocs/luci-static/resources/view/fchomo/client.js:1156
-#: htdocs/luci-static/resources/view/fchomo/node.js:1700
+#: htdocs/luci-static/resources/view/fchomo/node.js:1730
msgid "Filter nodes that meet keywords or regexps."
msgstr "過濾匹配關鍵字或表達式的節點。"
@@ -1084,8 +1085,8 @@ msgstr ""
"noopener\">%s."
#: htdocs/luci-static/resources/view/fchomo/client.js:1122
-#: htdocs/luci-static/resources/view/fchomo/node.js:1569
-#: htdocs/luci-static/resources/view/fchomo/node.js:1692
+#: htdocs/luci-static/resources/view/fchomo/node.js:1599
+#: htdocs/luci-static/resources/view/fchomo/node.js:1722
msgid ""
"For format see %s."
@@ -1113,7 +1114,7 @@ msgstr "格式"
msgid "FullCombo Shark!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1166
+#: htdocs/luci-static/resources/view/fchomo/node.js:1180
msgid "GET"
msgstr ""
@@ -1128,7 +1129,7 @@ msgstr "常規"
#: htdocs/luci-static/resources/fchomo/listeners.js:119
#: htdocs/luci-static/resources/view/fchomo/client.js:1009
#: htdocs/luci-static/resources/view/fchomo/node.js:222
-#: htdocs/luci-static/resources/view/fchomo/node.js:1449
+#: htdocs/luci-static/resources/view/fchomo/node.js:1479
msgid "General fields"
msgstr "常規欄位"
@@ -1214,12 +1215,13 @@ msgstr "組"
#: htdocs/luci-static/resources/view/fchomo/node.js:816
#: htdocs/luci-static/resources/view/fchomo/node.js:1129
#: htdocs/luci-static/resources/view/fchomo/node.js:1140
+#: htdocs/luci-static/resources/view/fchomo/node.js:1147
msgid "HTTP"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/node.js:267
-#: htdocs/luci-static/resources/view/fchomo/node.js:1188
-#: htdocs/luci-static/resources/view/fchomo/node.js:1549
+#: htdocs/luci-static/resources/view/fchomo/node.js:1202
+#: htdocs/luci-static/resources/view/fchomo/node.js:1579
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:399
msgid "HTTP header"
msgstr "HTTP header"
@@ -1245,7 +1247,7 @@ msgstr "HTTP 偽裝多路復用"
msgid "HTTP mask: %s"
msgstr "HTTP 偽裝: %s"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1165
+#: htdocs/luci-static/resources/view/fchomo/node.js:1179
msgid "HTTP request method"
msgstr "HTTP 請求方法"
@@ -1267,6 +1269,7 @@ msgstr "身份驗證失敗時的 HTTP3 伺服器回應。預設回傳 404 頁面
#: htdocs/luci-static/resources/fchomo/listeners.js:978
#: htdocs/luci-static/resources/view/fchomo/node.js:1130
#: htdocs/luci-static/resources/view/fchomo/node.js:1141
+#: htdocs/luci-static/resources/view/fchomo/node.js:1148
msgid "HTTPUpgrade"
msgstr ""
@@ -1291,27 +1294,27 @@ msgid "Health check"
msgstr "健康檢查"
#: htdocs/luci-static/resources/view/fchomo/client.js:1091
-#: htdocs/luci-static/resources/view/fchomo/node.js:1660
+#: htdocs/luci-static/resources/view/fchomo/node.js:1690
msgid "Health check URL"
msgstr "健康檢查 URL"
#: htdocs/luci-static/resources/view/fchomo/client.js:1120
-#: htdocs/luci-static/resources/view/fchomo/node.js:1690
+#: htdocs/luci-static/resources/view/fchomo/node.js:1720
msgid "Health check expected status"
msgstr "健康檢查预期状态"
#: htdocs/luci-static/resources/view/fchomo/client.js:1100
-#: htdocs/luci-static/resources/view/fchomo/node.js:1670
+#: htdocs/luci-static/resources/view/fchomo/node.js:1700
msgid "Health check interval"
msgstr "健康檢查間隔"
#: htdocs/luci-static/resources/view/fchomo/client.js:1107
-#: htdocs/luci-static/resources/view/fchomo/node.js:1677
+#: htdocs/luci-static/resources/view/fchomo/node.js:1707
msgid "Health check timeout"
msgstr "健康檢查超时"
#: htdocs/luci-static/resources/view/fchomo/client.js:1011
-#: htdocs/luci-static/resources/view/fchomo/node.js:1451
+#: htdocs/luci-static/resources/view/fchomo/node.js:1481
msgid "Health fields"
msgstr "健康欄位"
@@ -1362,8 +1365,8 @@ msgstr ""
msgid "IP override"
msgstr "IP 覆寫"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1331
-#: htdocs/luci-static/resources/view/fchomo/node.js:1646
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1676
msgid "IP version"
msgstr "IP 版本"
@@ -1424,8 +1427,8 @@ msgstr "導入"
#: htdocs/luci-static/resources/view/fchomo/client.js:1713
#: htdocs/luci-static/resources/view/fchomo/client.js:1748
#: htdocs/luci-static/resources/view/fchomo/client.js:1769
-#: htdocs/luci-static/resources/view/fchomo/node.js:1356
-#: htdocs/luci-static/resources/view/fchomo/node.js:1437
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
+#: htdocs/luci-static/resources/view/fchomo/node.js:1467
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:153
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:241
msgid "Import mihomo config"
@@ -1441,12 +1444,12 @@ msgstr "導入規則集連結"
#: htdocs/luci-static/resources/fchomo/listeners.js:181
#: htdocs/luci-static/resources/view/fchomo/node.js:286
#: htdocs/luci-static/resources/view/fchomo/node.js:292
-#: htdocs/luci-static/resources/view/fchomo/node.js:1607
-#: htdocs/luci-static/resources/view/fchomo/node.js:1613
+#: htdocs/luci-static/resources/view/fchomo/node.js:1637
+#: htdocs/luci-static/resources/view/fchomo/node.js:1643
msgid "In Mbps."
msgstr "單位為 Mbps。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1527
+#: htdocs/luci-static/resources/view/fchomo/node.js:1557
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:377
msgid "In bytes. %s will be used if empty."
msgstr "單位為位元組。留空則使用 %s。"
@@ -1458,7 +1461,7 @@ msgstr "單位為毫秒。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1108
#: htdocs/luci-static/resources/view/fchomo/client.js:1137
-#: htdocs/luci-static/resources/view/fchomo/node.js:1678
+#: htdocs/luci-static/resources/view/fchomo/node.js:1708
msgid "In millisecond. %s will be used if empty."
msgstr "單位為毫秒。留空則使用 %s。"
@@ -1467,7 +1470,7 @@ msgstr "單位為毫秒。留空則使用 %s。"
#: htdocs/luci-static/resources/fchomo/listeners.js:428
#: htdocs/luci-static/resources/view/fchomo/node.js:604
#: htdocs/luci-static/resources/view/fchomo/node.js:611
-#: htdocs/luci-static/resources/view/fchomo/node.js:1204
+#: htdocs/luci-static/resources/view/fchomo/node.js:1218
msgid "In seconds."
msgstr "單位為秒。"
@@ -1476,8 +1479,8 @@ msgstr "單位為秒。"
#: htdocs/luci-static/resources/view/fchomo/global.js:430
#: htdocs/luci-static/resources/view/fchomo/global.js:515
#: htdocs/luci-static/resources/view/fchomo/node.js:280
-#: htdocs/luci-static/resources/view/fchomo/node.js:1533
-#: htdocs/luci-static/resources/view/fchomo/node.js:1671
+#: htdocs/luci-static/resources/view/fchomo/node.js:1563
+#: htdocs/luci-static/resources/view/fchomo/node.js:1701
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:383
msgid "In seconds. %s will be used if empty."
msgstr "單位為秒。留空則使用 %s。"
@@ -1525,7 +1528,7 @@ msgstr "引入所有代理節點。"
msgid "Info"
msgstr "訊息"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1466
+#: htdocs/luci-static/resources/view/fchomo/node.js:1496
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:279
msgid "Inline"
msgstr "內嵌"
@@ -1562,14 +1565,14 @@ msgstr "密鑰對"
#: htdocs/luci-static/resources/view/fchomo/client.js:1719
#: htdocs/luci-static/resources/view/fchomo/client.js:1775
#: htdocs/luci-static/resources/view/fchomo/node.js:229
-#: htdocs/luci-static/resources/view/fchomo/node.js:1454
-#: htdocs/luci-static/resources/view/fchomo/node.js:1739
+#: htdocs/luci-static/resources/view/fchomo/node.js:1484
+#: htdocs/luci-static/resources/view/fchomo/node.js:1769
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:259
msgid "Label"
msgstr "標籤"
#: htdocs/luci-static/resources/view/fchomo/client.js:1114
-#: htdocs/luci-static/resources/view/fchomo/node.js:1684
+#: htdocs/luci-static/resources/view/fchomo/node.js:1714
msgid "Lazy"
msgstr "懶惰狀態"
@@ -1620,7 +1623,7 @@ msgstr "監聽埠"
msgid "Load balance"
msgstr "負載均衡"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1464
+#: htdocs/luci-static/resources/view/fchomo/node.js:1494
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:277
msgid "Local"
msgstr "本地"
@@ -1654,9 +1657,11 @@ msgstr "日誌等級"
#: htdocs/luci-static/resources/fchomo/listeners.js:324
#: htdocs/luci-static/resources/fchomo/listeners.js:325
#: htdocs/luci-static/resources/fchomo/listeners.js:326
+#: htdocs/luci-static/resources/fchomo/listeners.js:331
#: htdocs/luci-static/resources/view/fchomo/node.js:409
#: htdocs/luci-static/resources/view/fchomo/node.js:410
#: htdocs/luci-static/resources/view/fchomo/node.js:411
+#: htdocs/luci-static/resources/view/fchomo/node.js:416
msgid "Low-entropy data stream"
msgstr "低熵資料流"
@@ -1706,7 +1711,7 @@ msgstr "匹配回應通過 ipcidr"
msgid "Match rule set."
msgstr "匹配規則集。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1210
+#: htdocs/luci-static/resources/view/fchomo/node.js:1224
msgid "Max Early Data"
msgstr "前置數據最大值"
@@ -1733,12 +1738,12 @@ msgstr "限制打開流的數量"
msgid "Max upload speed"
msgstr "最大上傳速度"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
-#: htdocs/luci-static/resources/view/fchomo/node.js:1263
+#: htdocs/luci-static/resources/view/fchomo/node.js:1277
+#: htdocs/luci-static/resources/view/fchomo/node.js:1293
msgid "Maximum connections"
msgstr "最大連線數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1261
+#: htdocs/luci-static/resources/view/fchomo/node.js:1291
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1758,7 +1763,7 @@ msgid ""
"rate."
msgstr "最大填充率必須大於等于最小填充率。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1260
+#: htdocs/luci-static/resources/view/fchomo/node.js:1290
msgid "Maximum streams"
msgstr "最大流數量"
@@ -1783,7 +1788,7 @@ msgstr "Mihomo 服務端"
msgid "Min of idle sessions to keep"
msgstr "要保留的最少閒置會話數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1254
+#: htdocs/luci-static/resources/view/fchomo/node.js:1284
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr "在開啟新連線之前,連線中的最小多路復用流數量。"
@@ -1793,8 +1798,8 @@ msgstr "在開啟新連線之前,連線中的最小多路復用流數量。"
msgid "Minimum padding rate"
msgstr "最小填充率"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1253
-#: htdocs/luci-static/resources/view/fchomo/node.js:1263
+#: htdocs/luci-static/resources/view/fchomo/node.js:1283
+#: htdocs/luci-static/resources/view/fchomo/node.js:1293
msgid "Minimum streams"
msgstr "最小流數量"
@@ -1811,7 +1816,7 @@ msgstr "混合 系統 TCP 堆栈和 gVisor UDP 堆栈
msgid "Mixed port"
msgstr "混合連接埠"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1233
+#: htdocs/luci-static/resources/view/fchomo/node.js:1263
msgid "Multiplex"
msgstr "多路復用"
@@ -1833,7 +1838,7 @@ msgstr "NOT"
msgid "Name of the Proxy group as outbound."
msgstr "出站代理組的名稱。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1539
+#: htdocs/luci-static/resources/view/fchomo/node.js:1569
msgid "Name of the Proxy group to download provider."
msgstr "用於下載供應商訂閱的代理組名稱。"
@@ -1865,8 +1870,12 @@ msgstr "無需認證的 IP 範圍"
msgid "No add'l params"
msgstr "無附加參數"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1252
+msgid "No gRPC header"
+msgstr "無 gRPC header"
+
#: htdocs/luci-static/resources/view/fchomo/client.js:1115
-#: htdocs/luci-static/resources/view/fchomo/node.js:1685
+#: htdocs/luci-static/resources/view/fchomo/node.js:1715
msgid "No testing is performed when this provider node is not in use."
msgstr "當此供應商的節點未使用時,不執行任何測試。"
@@ -1885,17 +1894,17 @@ msgid "Node"
msgstr "節點"
#: htdocs/luci-static/resources/view/fchomo/client.js:1160
-#: htdocs/luci-static/resources/view/fchomo/node.js:1705
+#: htdocs/luci-static/resources/view/fchomo/node.js:1735
msgid "Node exclude filter"
msgstr "排除節點"
#: htdocs/luci-static/resources/view/fchomo/client.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:1712
+#: htdocs/luci-static/resources/view/fchomo/node.js:1742
msgid "Node exclude type"
msgstr "排除節點類型"
#: htdocs/luci-static/resources/view/fchomo/client.js:1155
-#: htdocs/luci-static/resources/view/fchomo/node.js:1699
+#: htdocs/luci-static/resources/view/fchomo/node.js:1729
msgid "Node filter"
msgstr "過濾節點"
@@ -1973,7 +1982,7 @@ msgid "Override destination"
msgstr "覆蓋目標位址"
#: htdocs/luci-static/resources/view/fchomo/client.js:1010
-#: htdocs/luci-static/resources/view/fchomo/node.js:1450
+#: htdocs/luci-static/resources/view/fchomo/node.js:1480
msgid "Override fields"
msgstr "覆蓋欄位"
@@ -2001,11 +2010,11 @@ msgstr "覆蓋用於 HTTPS 記錄查詢的網域。"
msgid "Overview"
msgstr "概覽"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1167
+#: htdocs/luci-static/resources/view/fchomo/node.js:1181
msgid "POST"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1168
+#: htdocs/luci-static/resources/view/fchomo/node.js:1182
msgid "PUT"
msgstr ""
@@ -2013,6 +2022,10 @@ msgstr ""
msgid "Packet encoding"
msgstr "數據包編碼"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1257
+msgid "Padding bytes"
+msgstr "填充位元組"
+
#: htdocs/luci-static/resources/fchomo/listeners.js:458
msgid "Padding scheme"
msgstr "填充方案"
@@ -2032,7 +2045,7 @@ msgid "Password"
msgstr "密碼"
#: htdocs/luci-static/resources/fchomo/listeners.js:587
-#: htdocs/luci-static/resources/view/fchomo/node.js:1514
+#: htdocs/luci-static/resources/view/fchomo/node.js:1544
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:364
msgid "Payload"
msgstr "Payload"
@@ -2074,8 +2087,8 @@ msgid ""
"standards."
msgstr "連結格式標準請參考 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1487
-#: htdocs/luci-static/resources/view/fchomo/node.js:1513
+#: htdocs/luci-static/resources/view/fchomo/node.js:1517
+#: htdocs/luci-static/resources/view/fchomo/node.js:1543
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:337
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:363
msgid ""
@@ -2090,7 +2103,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1445
#: htdocs/luci-static/resources/view/fchomo/client.js:1697
#: htdocs/luci-static/resources/view/fchomo/client.js:1749
-#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/view/fchomo/node.js:1387
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:154
msgid "Please type %s fields of mihomo config."
msgstr "請輸入 mihomo 配置的 %s 欄位。"
@@ -2157,10 +2170,10 @@ msgstr "防止某些情況下的 ICMP 環回問題。 Ping 不會顯示實際延
#: htdocs/luci-static/resources/view/fchomo/global.js:736
#: htdocs/luci-static/resources/view/fchomo/global.js:753
-#: htdocs/luci-static/resources/view/fchomo/node.js:1321
-#: htdocs/luci-static/resources/view/fchomo/node.js:1327
-#: htdocs/luci-static/resources/view/fchomo/node.js:1634
-#: htdocs/luci-static/resources/view/fchomo/node.js:1641
+#: htdocs/luci-static/resources/view/fchomo/node.js:1351
+#: htdocs/luci-static/resources/view/fchomo/node.js:1357
+#: htdocs/luci-static/resources/view/fchomo/node.js:1664
+#: htdocs/luci-static/resources/view/fchomo/node.js:1671
msgid "Priority: Proxy Node > Global."
msgstr "優先權: 代理節點 > 全域。"
@@ -2182,7 +2195,7 @@ msgid "Process matching mode"
msgstr "進程匹配模式"
#: htdocs/luci-static/resources/view/fchomo/global.js:684
-#: htdocs/luci-static/resources/view/fchomo/node.js:1239
+#: htdocs/luci-static/resources/view/fchomo/node.js:1269
msgid "Protocol"
msgstr "協議"
@@ -2197,13 +2210,13 @@ msgid ""
msgstr "協議參數。 如啟用會隨機浪費流量(在 v2ray 中預設為啟用且無法停用)。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1055
-#: htdocs/luci-static/resources/view/fchomo/node.js:1340
-#: htdocs/luci-static/resources/view/fchomo/node.js:1349
-#: htdocs/luci-static/resources/view/fchomo/node.js:1750
+#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1379
+#: htdocs/luci-static/resources/view/fchomo/node.js:1780
msgid "Provider"
msgstr "供應商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1520
+#: htdocs/luci-static/resources/view/fchomo/node.js:1550
msgid "Provider URL"
msgstr "供應商訂閱 URL"
@@ -2226,19 +2239,19 @@ msgid "Proxy MAC-s"
msgstr "代理 MAC 位址"
#: htdocs/luci-static/resources/view/fchomo/node.js:208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1749
+#: htdocs/luci-static/resources/view/fchomo/node.js:1779
msgid "Proxy Node"
msgstr "代理節點"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1725
-#: htdocs/luci-static/resources/view/fchomo/node.js:1734
+#: htdocs/luci-static/resources/view/fchomo/node.js:1755
+#: htdocs/luci-static/resources/view/fchomo/node.js:1764
msgid "Proxy chain"
msgstr "代理鏈"
#: htdocs/luci-static/resources/fchomo/listeners.js:530
#: htdocs/luci-static/resources/view/fchomo/client.js:783
#: htdocs/luci-static/resources/view/fchomo/client.js:1543
-#: htdocs/luci-static/resources/view/fchomo/node.js:1538
+#: htdocs/luci-static/resources/view/fchomo/node.js:1568
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:388
msgid "Proxy group"
msgstr "代理組"
@@ -2345,7 +2358,7 @@ msgstr "重載"
msgid "Reload All"
msgstr "重載所有"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1465
+#: htdocs/luci-static/resources/view/fchomo/node.js:1495
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:278
msgid "Remote"
msgstr "遠端"
@@ -2360,18 +2373,18 @@ msgid "Remove"
msgstr "移除"
#: htdocs/luci-static/resources/fchomo.js:1354
-#: htdocs/luci-static/resources/view/fchomo/node.js:1441
-#: htdocs/luci-static/resources/view/fchomo/node.js:1443
+#: htdocs/luci-static/resources/view/fchomo/node.js:1471
+#: htdocs/luci-static/resources/view/fchomo/node.js:1473
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:251
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:253
msgid "Remove idles"
msgstr "移除閒置"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1567
+#: htdocs/luci-static/resources/view/fchomo/node.js:1597
msgid "Replace name"
msgstr "名稱替換"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1568
+#: htdocs/luci-static/resources/view/fchomo/node.js:1598
msgid "Replace node name."
msgstr "替換節點名稱"
@@ -2380,8 +2393,8 @@ msgid "Request"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:996
-#: htdocs/luci-static/resources/view/fchomo/node.js:1174
-#: htdocs/luci-static/resources/view/fchomo/node.js:1181
+#: htdocs/luci-static/resources/view/fchomo/node.js:1188
+#: htdocs/luci-static/resources/view/fchomo/node.js:1195
msgid "Request path"
msgstr "請求路徑"
@@ -2446,8 +2459,8 @@ msgstr "路由 DSCP"
msgid "Routing GFW"
msgstr "路由 GFW 流量"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1326
-#: htdocs/luci-static/resources/view/fchomo/node.js:1640
+#: htdocs/luci-static/resources/view/fchomo/node.js:1356
+#: htdocs/luci-static/resources/view/fchomo/node.js:1670
msgid "Routing mark"
msgstr "路由標記"
@@ -2585,7 +2598,8 @@ msgstr "服務端"
msgid "Server address"
msgstr "伺服器位址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1159
+#: htdocs/luci-static/resources/view/fchomo/node.js:1167
+#: htdocs/luci-static/resources/view/fchomo/node.js:1173
msgid "Server hostname"
msgstr "伺服器主機名稱"
@@ -2617,7 +2631,7 @@ msgstr "Shadowsocks 加密"
msgid "Shadowsocks password"
msgstr "Shadowsocks 密碼"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1281
+#: htdocs/luci-static/resources/view/fchomo/node.js:1311
msgid "Show connections in the dashboard for breaking connections easier."
msgstr "在面板中顯示連線以便於打斷連線。"
@@ -2629,14 +2643,14 @@ msgstr "靜音"
msgid "Simple round-robin all nodes"
msgstr "簡單輪替所有節點"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1526
+#: htdocs/luci-static/resources/view/fchomo/node.js:1556
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:376
msgid "Size limit"
msgstr "大小限制"
#: htdocs/luci-static/resources/view/fchomo/client.js:1576
#: htdocs/luci-static/resources/view/fchomo/node.js:1037
-#: htdocs/luci-static/resources/view/fchomo/node.js:1618
+#: htdocs/luci-static/resources/view/fchomo/node.js:1648
msgid "Skip cert verify"
msgstr "跳過憑證驗證"
@@ -2764,7 +2778,7 @@ msgstr "TCP"
msgid "TCP concurrency"
msgstr "TCP 併發"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1274
+#: htdocs/luci-static/resources/view/fchomo/node.js:1304
msgid "TCP only"
msgstr "僅 TCP"
@@ -2790,8 +2804,8 @@ msgstr "TCP-Keep-Alive 間隔"
msgid "TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1305
-#: htdocs/luci-static/resources/view/fchomo/node.js:1585
+#: htdocs/luci-static/resources/view/fchomo/node.js:1335
+#: htdocs/luci-static/resources/view/fchomo/node.js:1615
msgid "TFO"
msgstr "TCP 快速開啟 (TFO)"
@@ -2903,7 +2917,7 @@ msgstr "此 ECH 參數需要加入到網域的 HTTPS 記錄中。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1579
#: htdocs/luci-static/resources/view/fchomo/node.js:1040
-#: htdocs/luci-static/resources/view/fchomo/node.js:1621
+#: htdocs/luci-static/resources/view/fchomo/node.js:1651
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
@@ -2947,11 +2961,11 @@ msgstr "Tproxy 連接埠"
msgid "Traffic pattern"
msgstr "流量模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1777
+#: htdocs/luci-static/resources/view/fchomo/node.js:1807
msgid "Transit proxy group"
msgstr "中轉代理組"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1783
+#: htdocs/luci-static/resources/view/fchomo/node.js:1813
msgid "Transit proxy node"
msgstr "中轉代理節點"
@@ -3013,8 +3027,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:842
#: htdocs/luci-static/resources/view/fchomo/client.js:1028
#: htdocs/luci-static/resources/view/fchomo/node.js:238
-#: htdocs/luci-static/resources/view/fchomo/node.js:1463
-#: htdocs/luci-static/resources/view/fchomo/node.js:1748
+#: htdocs/luci-static/resources/view/fchomo/node.js:1493
+#: htdocs/luci-static/resources/view/fchomo/node.js:1778
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:276
msgid "Type"
msgstr "類型"
@@ -3030,7 +3044,7 @@ msgstr "類型"
#: htdocs/luci-static/resources/view/fchomo/client.js:588
#: htdocs/luci-static/resources/view/fchomo/client.js:678
#: htdocs/luci-static/resources/view/fchomo/node.js:865
-#: htdocs/luci-static/resources/view/fchomo/node.js:1595
+#: htdocs/luci-static/resources/view/fchomo/node.js:1625
msgid "UDP"
msgstr "UDP"
@@ -3099,7 +3113,7 @@ msgid "Unknown error: %s"
msgstr "未知錯誤:%s"
#: htdocs/luci-static/resources/view/fchomo/node.js:870
-#: htdocs/luci-static/resources/view/fchomo/node.js:1600
+#: htdocs/luci-static/resources/view/fchomo/node.js:1630
msgid "UoT"
msgstr "UDP over TCP (UoT)"
@@ -3107,16 +3121,16 @@ msgstr "UDP over TCP (UoT)"
msgid "Update failed."
msgstr "更新失敗。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1532
+#: htdocs/luci-static/resources/view/fchomo/node.js:1562
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:382
msgid "Update interval"
msgstr "更新間隔"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1292
+#: htdocs/luci-static/resources/view/fchomo/node.js:1322
msgid "Upload bandwidth"
msgstr "上傳頻寬"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1293
+#: htdocs/luci-static/resources/view/fchomo/node.js:1323
msgid "Upload bandwidth in Mbps."
msgstr "上傳頻寬(單位:Mbps)。"
@@ -3181,11 +3195,11 @@ msgstr "使用者名稱"
msgid "Users filter mode"
msgstr "使用者過濾模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1222
+#: htdocs/luci-static/resources/view/fchomo/node.js:1236
msgid "V2ray HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1227
+#: htdocs/luci-static/resources/view/fchomo/node.js:1241
msgid "V2ray HTTPUpgrade fast open"
msgstr ""
@@ -3199,8 +3213,8 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1469
-#: htdocs/luci-static/resources/view/fchomo/node.js:1754
+#: htdocs/luci-static/resources/view/fchomo/node.js:1499
+#: htdocs/luci-static/resources/view/fchomo/node.js:1784
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:319
msgid "Value"
msgstr "可視化值"
@@ -3240,7 +3254,8 @@ msgstr "警告"
#: htdocs/luci-static/resources/view/fchomo/node.js:489
#: htdocs/luci-static/resources/view/fchomo/node.js:1132
#: htdocs/luci-static/resources/view/fchomo/node.js:1143
-#: htdocs/luci-static/resources/view/fchomo/node.js:1148
+#: htdocs/luci-static/resources/view/fchomo/node.js:1150
+#: htdocs/luci-static/resources/view/fchomo/node.js:1156
msgid "WebSocket"
msgstr ""
@@ -3268,6 +3283,15 @@ msgstr "WireGuard 預先共用金鑰。"
msgid "WireGuard requires base64-encoded private keys."
msgstr "WireGuard 要求 base64 編碼的私鑰。"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/view/fchomo/node.js:1151
+msgid "XHTTP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1246
+msgid "XHTTP mode"
+msgstr "XHTTP 模式"
+
#: htdocs/luci-static/resources/fchomo/listeners.js:609
msgid "XOR mode"
msgstr "XOR 模式"
@@ -3341,7 +3365,7 @@ msgstr "decryption"
msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)"
msgstr "dnsmasq 自行選擇上游服務器。 (可能影響 CDN 準確性)"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1612
+#: htdocs/luci-static/resources/view/fchomo/node.js:1642
msgid "down"
msgstr "Hysteria 下載速率"
@@ -3361,20 +3385,21 @@ msgstr "false = 頻寬最佳化下行 true = 純 Sudoku 下行。"
#: htdocs/luci-static/resources/fchomo/listeners.js:984
#: htdocs/luci-static/resources/view/fchomo/node.js:1131
#: htdocs/luci-static/resources/view/fchomo/node.js:1142
-#: htdocs/luci-static/resources/view/fchomo/node.js:1147
+#: htdocs/luci-static/resources/view/fchomo/node.js:1149
+#: htdocs/luci-static/resources/view/fchomo/node.js:1155
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1198
+#: htdocs/luci-static/resources/view/fchomo/node.js:1212
msgid "gRPC User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1203
+#: htdocs/luci-static/resources/view/fchomo/node.js:1217
msgid "gRPC ping interval"
msgstr "gRPC ping 間隔"
#: htdocs/luci-static/resources/fchomo/listeners.js:1003
-#: htdocs/luci-static/resources/view/fchomo/node.js:1194
+#: htdocs/luci-static/resources/view/fchomo/node.js:1208
msgid "gRPC service name"
msgstr "gRPC 服務名稱"
@@ -3382,7 +3407,7 @@ msgstr "gRPC 服務名稱"
msgid "gVisor"
msgstr "gVisor"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1243
+#: htdocs/luci-static/resources/view/fchomo/node.js:1273
msgid "h2mux"
msgstr ""
@@ -3400,7 +3425,7 @@ msgstr "metacubexd"
#: htdocs/luci-static/resources/view/fchomo/client.js:1480
#: htdocs/luci-static/resources/view/fchomo/client.js:1711
#: htdocs/luci-static/resources/view/fchomo/client.js:1767
-#: htdocs/luci-static/resources/view/fchomo/node.js:1435
+#: htdocs/luci-static/resources/view/fchomo/node.js:1465
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:239
msgid "mihomo config"
msgstr "mihomo 配置"
@@ -3409,8 +3434,8 @@ msgstr "mihomo 配置"
msgid "mlkem768x25519plus"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1309
-#: htdocs/luci-static/resources/view/fchomo/node.js:1590
+#: htdocs/luci-static/resources/view/fchomo/node.js:1339
+#: htdocs/luci-static/resources/view/fchomo/node.js:1620
msgid "mpTCP"
msgstr "多路徑 TCP (mpTCP)"
@@ -3466,7 +3491,7 @@ msgstr "僅當 %s 為 %s 時適用。"
msgid "only applies when %s is not %s."
msgstr "僅當 %s 不為 %s 時適用。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1570
+#: htdocs/luci-static/resources/view/fchomo/node.js:1600
msgid "override.proxy-name"
msgstr ""
@@ -3474,6 +3499,10 @@ msgstr ""
msgid "packet addr (v2ray-core v5+)"
msgstr ""
+#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+msgid "packet-up"
+msgstr ""
+
#: htdocs/luci-static/resources/fchomo/listeners.js:391
#: htdocs/luci-static/resources/view/fchomo/node.js:458
msgid "poll"
@@ -3506,7 +3535,7 @@ msgstr "規則集"
msgid "shadow-tls"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1241
+#: htdocs/luci-static/resources/view/fchomo/node.js:1271
msgid "smux"
msgstr ""
@@ -3519,6 +3548,10 @@ msgstr ""
msgid "src"
msgstr "src"
+#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+msgid "stream-one"
+msgstr ""
+
#: htdocs/luci-static/resources/view/fchomo/node.js:491
msgid "stream/poll/auto"
msgstr ""
@@ -3543,7 +3576,7 @@ msgstr "獨立標識"
msgid "unique value"
msgstr "獨立值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1606
+#: htdocs/luci-static/resources/view/fchomo/node.js:1636
msgid "up"
msgstr "Hysteria 上傳速率"
@@ -3619,7 +3652,7 @@ msgstr ""
msgid "yacd-meta"
msgstr "yacd-meta"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1242
+#: htdocs/luci-static/resources/view/fchomo/node.js:1272
msgid "yamux"
msgstr ""
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 633abd73..a2ae2ccb 100644
--- a/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc
+++ b/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc
@@ -586,7 +586,7 @@ uci.foreach(uciconf, ucinode, (cfg) => {
encryption: cfg.vless_encryption === '1' ? cfg.vless_encryption_encryption : null,
/* TrustTunnel */
- "health-check": strToBool(cfg.trusttunnel_health_check === '0' ? false : true),
+ "health-check": cfg.trusttunnel_health_check === '0' ? false : true,
quic: strToBool(cfg.trusttunnel_quic),
/* WireGuard */
@@ -658,6 +658,14 @@ uci.foreach(uciconf, ucinode, (cfg) => {
"early-data-header-name": cfg.transport_ws_early_data_header,
"v2ray-http-upgrade": strToBool(cfg.transport_ws_v2ray_http_upgrade),
"v2ray-http-upgrade-fast-open": strToBool(cfg.transport_ws_v2ray_http_upgrade_fast_open)
+ } : null,
+ "xhttp-opts": cfg.transport_type === 'xhttp' ? {
+ host: cfg.transport_host,
+ path: cfg.transport_path || '/',
+ headers: cfg.transport_http_headers ? json(cfg.transport_http_headers) : null,
+ mode: cfg.transport_xhttp_mode,
+ "no-grpc-header": strToBool(cfg.transport_xhttp_no_grpc_header),
+ "x-padding-bytes": cfg.transport_xhttp_x_padding_bytes
} : null
} : {}),
diff --git a/luci-app-oaf/Makefile b/luci-app-oaf/Makefile
index 80b14288..4754883b 100644
--- a/luci-app-oaf/Makefile
+++ b/luci-app-oaf/Makefile
@@ -10,6 +10,6 @@ LUCI_PKGARCH:=all
LUCI_DEPENDS:=+appfilter +kmod-oaf +luci-compat
PKG_NAME:=luci-app-oaf
PKG_VERSION:=6.1.4
-PKG_RELEASE:=1
+PKG_RELEASE:=2
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
diff --git a/luci-app-oaf/luasrc/view/admin_network/advance.htm b/luci-app-oaf/luasrc/view/admin_network/advance.htm
index 29fcecdf..26618fc4 100644
--- a/luci-app-oaf/luasrc/view/admin_network/advance.htm
+++ b/luci-app-oaf/luasrc/view/admin_network/advance.htm
@@ -130,7 +130,7 @@
function validateLanIfname(lanIfname) {
- const regex = /^[a-zA-Z0-9-]{2,8}$/;
+ const regex = /^[a-zA-Z0-9.-]{2,8}$/;
return regex.test(lanIfname);
}
@@ -140,7 +140,7 @@
const disableHnatSwitch = document.getElementById('disableHnatSwitch').checked;
if (!validateLanIfname(lanIfname)) {
- alert('<%:Invalid LAN interface name. Please ensure it is no more than 8 characters long and contains only letters, numbers, and -.%>');
+ alert('<%:Invalid LAN interface name. Please ensure it is no more than 8 characters long and contains only letters, numbers, dot, and -.%>');
return;
}
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
index 57b6f2c8..bf3316b9 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
@@ -81,10 +81,111 @@ o = s:option(Value, "remarks", translate("Remarks"))
o.default = arg[1]
o.rmempty = false
-o = s:option(ListValue, "interface", translate("Source Interface"))
+o = s:option(Value, "interface", translate("Source Interface"))
o:value("", translate("All"))
-local wa = require "luci.tools.webadmin"
-wa.cbi_add_networks(o)
+-- Populate with actual kernel network devices instead of UCI interface names,
+-- because the backend (nftables iifname / iptables -i) matches kernel device names.
+do
+ local nfs = require "nixio.fs"
+ local _cursor = require("luci.model.uci").cursor()
+ local _sysnet = "/sys/class/net/"
+
+ -- Map UCI interface names to their device names and vice versa
+ local _iface_to_dev = {}
+ local _dev_to_ifaces = {}
+ local _iface_proto = {}
+ _cursor:foreach("network", "interface", function(sec)
+ local name = sec[".name"]
+ if name ~= "loopback" then
+ _iface_proto[name] = sec.proto
+ if sec.device then
+ _iface_to_dev[name] = sec.device
+ _dev_to_ifaces[sec.device] = _dev_to_ifaces[sec.device] or {}
+ table.insert(_dev_to_ifaces[sec.device], name)
+ end
+ end
+ end)
+
+ -- Classify device type using sysfs attributes
+ local function classify_sysfs(dev)
+ if nfs.stat(_sysnet .. dev .. "/bridge", "type") == "dir" then
+ return translate("Bridge")
+ elseif nfs.stat(_sysnet .. dev .. "/wireless", "type") == "dir" then
+ return translate("Wireless Adapter")
+ elseif dev:match("^tun") or dev:match("^tap") or dev:match("^wg") or dev:match("^ppp") then
+ return translate("Tunnel Interface")
+ else
+ return translate("Ethernet Adapter")
+ end
+ end
+
+ -- Classify offline UCI interfaces by config hints
+ local function classify_uci(dev_name, proto)
+ if dev_name and dev_name:match("^br%-") then
+ return translate("Bridge")
+ elseif proto == "wireguard" or proto == "pppoe" or proto == "pptp" or proto == "l2tp" then
+ return translate("Tunnel Interface")
+ else
+ return translate("Interface")
+ end
+ end
+
+ local _seen = {}
+ local _devices = {}
+
+ -- Active kernel devices from /sys/class/net/.
+ -- Skip bridge member ports (/master) and DSA master devices (/dsa) because
+ -- nftables iifname matches the parent bridge for routed traffic, not
+ -- individual member ports. Also skip internal virtual devices.
+ local _iter = nfs.dir(_sysnet)
+ if _iter then
+ for dev in _iter do
+ if dev ~= "lo"
+ and not dev:match("^veth")
+ and not dev:match("^ifb")
+ and not dev:match("^gre")
+ and not dev:match("^sit")
+ and not dev:match("^ip6tnl")
+ and not dev:match("^erspan")
+ and not nfs.stat(_sysnet .. dev .. "/master", "type")
+ and not nfs.stat(_sysnet .. dev .. "/dsa", "type")
+ then
+ local dtype = classify_sysfs(dev)
+ local label = dtype .. ': "' .. dev .. '"'
+ if _dev_to_ifaces[dev] then
+ label = label .. " (" .. table.concat(_dev_to_ifaces[dev], ", ") .. ")"
+ end
+ _devices[#_devices + 1] = { name = dev, label = label, sort = dtype .. ":" .. dev }
+ _seen[dev] = true
+ end
+ end
+ end
+
+ -- UCI interfaces whose device does not currently exist (down tunnels, VPNs, etc.).
+ -- Stored by UCI name since the kernel device is not available yet.
+ -- Dedup by device: if two interfaces share a device, only one is shown.
+ for iface, dev in pairs(_iface_to_dev) do
+ if not _seen[dev] then
+ local dtype = classify_uci(dev, _iface_proto[iface])
+ local label = dtype .. ': "' .. iface .. '"'
+ -- Sort offline entries after active devices
+ _devices[#_devices + 1] = { name = iface, label = label, sort = "zzz:" .. iface }
+ _seen[dev] = true
+ end
+ end
+
+ table.sort(_devices, function(a, b) return a.sort < b.sort end)
+ for _, d in ipairs(_devices) do
+ o:value(d.name, d.label)
+ end
+end
+
+o.validate = function(self, value, section)
+ if value == "" or value:match("^[a-zA-Z0-9][a-zA-Z0-9%.%_%-]*$") then
+ return value
+ end
+ return nil, translate("Invalid interface name")
+end
local mac_t = {}
sys.net.mac_hints(function(e, t)
diff --git a/luci-app-passwall/luasrc/passwall/util_hysteria2.lua b/luci-app-passwall/luasrc/passwall/util_hysteria2.lua
index f69c7164..9d2db50a 100644
--- a/luci-app-passwall/luasrc/passwall/util_hysteria2.lua
+++ b/luci-app-passwall/luasrc/passwall/util_hysteria2.lua
@@ -63,7 +63,7 @@ function gen_config(var)
local config = {
server = server,
transport = {
- type = node.protocol or "udp",
+ type = "udp",
udp = {
hopInterval = (function()
local HopIntervalStr = tostring(node.hysteria2_hop_interval or "30s")
diff --git a/luci-app-passwall/po/zh-cn/passwall.po b/luci-app-passwall/po/zh-cn/passwall.po
index 43027dd8..720bf3e9 100644
--- a/luci-app-passwall/po/zh-cn/passwall.po
+++ b/luci-app-passwall/po/zh-cn/passwall.po
@@ -1249,6 +1249,21 @@ msgstr "IP 范围"
msgid "Source Interface"
msgstr "源接口"
+msgid "Bridge"
+msgstr "网桥"
+
+msgid "Wireless Adapter"
+msgstr "无线适配器"
+
+msgid "Ethernet Adapter"
+msgstr "以太网适配器"
+
+msgid "Tunnel Interface"
+msgstr "隧道接口"
+
+msgid "Invalid interface name"
+msgstr "无效的接口名称"
+
msgid "Use Interface With ACLs"
msgstr "使用接口控制"
diff --git a/luci-app-passwall/root/usr/share/passwall/iptables.sh b/luci-app-passwall/root/usr/share/passwall/iptables.sh
index b17b6077..ed9d92e8 100755
--- a/luci-app-passwall/root/usr/share/passwall/iptables.sh
+++ b/luci-app-passwall/root/usr/share/passwall/iptables.sh
@@ -285,6 +285,10 @@ load_acl() {
local gateway device
network_get_gateway gateway "${interface}"
network_get_device device "${interface}"
+ # network_get_device returns empty for non-UP interfaces (e.g. auto='0').
+ # Try ubus directly, then check if the name is a kernel device.
+ [ -z "${device}" ] && device=$(ubus call "network.interface.${interface}" status 2>/dev/null | jsonfilter -e '@.device' 2>/dev/null)
+ [ -z "${device}" ] && [ -d "/sys/class/net/${interface}" ] && device="${interface}"
[ -z "${device}" ] && device="${interface}"
_ipt_source="-i ${device} "
msg="源接口【${device}】,"
diff --git a/luci-app-passwall/root/usr/share/passwall/nftables.sh b/luci-app-passwall/root/usr/share/passwall/nftables.sh
index 41128cbf..cc5cda51 100755
--- a/luci-app-passwall/root/usr/share/passwall/nftables.sh
+++ b/luci-app-passwall/root/usr/share/passwall/nftables.sh
@@ -326,6 +326,10 @@ load_acl() {
local gateway device
network_get_gateway gateway "${interface}"
network_get_device device "${interface}"
+ # network_get_device returns empty for non-UP interfaces (e.g. auto='0').
+ # Try ubus directly, then check if the name is a kernel device.
+ [ -z "${device}" ] && device=$(ubus call "network.interface.${interface}" status 2>/dev/null | jsonfilter -e '@.device' 2>/dev/null)
+ [ -z "${device}" ] && [ -d "/sys/class/net/${interface}" ] && device="${interface}"
[ -z "${device}" ] && device="${interface}"
_ipt_source="iifname ${device} "
msg="源接口【${device}】,"
diff --git a/luci-app-passwall/root/usr/share/passwall/utils.sh b/luci-app-passwall/root/usr/share/passwall/utils.sh
index 5ebb800c..7ed57021 100755
--- a/luci-app-passwall/root/usr/share/passwall/utils.sh
+++ b/luci-app-passwall/root/usr/share/passwall/utils.sh
@@ -395,6 +395,8 @@ add_ip2route() {
local gateway device
network_get_gateway gateway "$2"
network_get_device device "$2"
+ [ -z "${device}" ] && device=$(ubus call "network.interface.$2" status 2>/dev/null | jsonfilter -e '@.device' 2>/dev/null)
+ [ -z "${device}" ] && [ -d "/sys/class/net/$2" ] && device="$2"
[ -z "${device}" ] && device="$2"
if [ -n "${gateway}" ]; then
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 c8707f05..6f7b1866 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
@@ -76,10 +76,111 @@ o = s:option(Value, "remarks", translate("Remarks"))
o.default = arg[1]
o.rmempty = false
-o = s:option(ListValue, "interface", translate("Source Interface"))
+o = s:option(Value, "interface", translate("Source Interface"))
o:value("", translate("All"))
-local wa = require "luci.tools.webadmin"
-wa.cbi_add_networks(o)
+-- Populate with actual kernel network devices instead of UCI interface names,
+-- because the backend (nftables iifname / iptables -i) matches kernel device names.
+do
+ local nfs = require "nixio.fs"
+ local _cursor = require("luci.model.uci").cursor()
+ local _sysnet = "/sys/class/net/"
+
+ -- Map UCI interface names to their device names and vice versa
+ local _iface_to_dev = {}
+ local _dev_to_ifaces = {}
+ local _iface_proto = {}
+ _cursor:foreach("network", "interface", function(sec)
+ local name = sec[".name"]
+ if name ~= "loopback" then
+ _iface_proto[name] = sec.proto
+ if sec.device then
+ _iface_to_dev[name] = sec.device
+ _dev_to_ifaces[sec.device] = _dev_to_ifaces[sec.device] or {}
+ table.insert(_dev_to_ifaces[sec.device], name)
+ end
+ end
+ end)
+
+ -- Classify device type using sysfs attributes
+ local function classify_sysfs(dev)
+ if nfs.stat(_sysnet .. dev .. "/bridge", "type") == "dir" then
+ return translate("Bridge")
+ elseif nfs.stat(_sysnet .. dev .. "/wireless", "type") == "dir" then
+ return translate("Wireless Adapter")
+ elseif dev:match("^tun") or dev:match("^tap") or dev:match("^wg") or dev:match("^ppp") then
+ return translate("Tunnel Interface")
+ else
+ return translate("Ethernet Adapter")
+ end
+ end
+
+ -- Classify offline UCI interfaces by config hints
+ local function classify_uci(dev_name, proto)
+ if dev_name and dev_name:match("^br%-") then
+ return translate("Bridge")
+ elseif proto == "wireguard" or proto == "pppoe" or proto == "pptp" or proto == "l2tp" then
+ return translate("Tunnel Interface")
+ else
+ return translate("Interface")
+ end
+ end
+
+ local _seen = {}
+ local _devices = {}
+
+ -- Active kernel devices from /sys/class/net/.
+ -- Skip bridge member ports (/master) and DSA master devices (/dsa) because
+ -- nftables iifname matches the parent bridge for routed traffic, not
+ -- individual member ports. Also skip internal virtual devices.
+ local _iter = nfs.dir(_sysnet)
+ if _iter then
+ for dev in _iter do
+ if dev ~= "lo"
+ and not dev:match("^veth")
+ and not dev:match("^ifb")
+ and not dev:match("^gre")
+ and not dev:match("^sit")
+ and not dev:match("^ip6tnl")
+ and not dev:match("^erspan")
+ and not nfs.stat(_sysnet .. dev .. "/master", "type")
+ and not nfs.stat(_sysnet .. dev .. "/dsa", "type")
+ then
+ local dtype = classify_sysfs(dev)
+ local label = dtype .. ': "' .. dev .. '"'
+ if _dev_to_ifaces[dev] then
+ label = label .. " (" .. table.concat(_dev_to_ifaces[dev], ", ") .. ")"
+ end
+ _devices[#_devices + 1] = { name = dev, label = label, sort = dtype .. ":" .. dev }
+ _seen[dev] = true
+ end
+ end
+ end
+
+ -- UCI interfaces whose device does not currently exist (down tunnels, VPNs, etc.).
+ -- Stored by UCI name since the kernel device is not available yet.
+ -- Dedup by device: if two interfaces share a device, only one is shown.
+ for iface, dev in pairs(_iface_to_dev) do
+ if not _seen[dev] then
+ local dtype = classify_uci(dev, _iface_proto[iface])
+ local label = dtype .. ': "' .. iface .. '"'
+ -- Sort offline entries after active devices
+ _devices[#_devices + 1] = { name = iface, label = label, sort = "zzz:" .. iface }
+ _seen[dev] = true
+ end
+ end
+
+ table.sort(_devices, function(a, b) return a.sort < b.sort end)
+ for _, d in ipairs(_devices) do
+ o:value(d.name, d.label)
+ end
+end
+
+o.validate = function(self, value, section)
+ if value == "" or value:match("^[a-zA-Z0-9][a-zA-Z0-9%.%_%-]*$") then
+ return value
+ end
+ return nil, translate("Invalid interface name")
+end
local mac_t = {}
sys.net.mac_hints(function(e, t)
diff --git a/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua b/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua
index 5796424f..8d0a6473 100644
--- a/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua
+++ b/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua
@@ -60,7 +60,7 @@ function gen_config(var)
local config = {
server = server,
transport = {
- type = node.protocol or "udp",
+ type = "udp",
udp = {
hopInterval = (function()
local HopIntervalStr = tostring(node.hysteria2_hop_interval or "30s")
diff --git a/luci-app-passwall2/po/fa/passwall2.po b/luci-app-passwall2/po/fa/passwall2.po
index 5921f864..fe5a8f07 100644
--- a/luci-app-passwall2/po/fa/passwall2.po
+++ b/luci-app-passwall2/po/fa/passwall2.po
@@ -1101,6 +1101,21 @@ msgstr "محدوده IP"
msgid "Source Interface"
msgstr "رابط منبع"
+msgid "Bridge"
+msgstr "پل شبکه"
+
+msgid "Wireless Adapter"
+msgstr "آداپتور بیسیم"
+
+msgid "Ethernet Adapter"
+msgstr "آداپتور اترنت"
+
+msgid "Tunnel Interface"
+msgstr "رابط تونل"
+
+msgid "Invalid interface name"
+msgstr "نام رابط نامعتبر"
+
msgid "Use Interface With ACLs"
msgstr "استفاده از رابط با ACLها"
diff --git a/luci-app-passwall2/po/ru/passwall.po b/luci-app-passwall2/po/ru/passwall.po
index c01572f7..bdf22529 100644
--- a/luci-app-passwall2/po/ru/passwall.po
+++ b/luci-app-passwall2/po/ru/passwall.po
@@ -1100,7 +1100,22 @@ msgid "IP range"
msgstr "Диапазон IP"
msgid "Source Interface"
-msgstr "Исходящий интерфейс"
+msgstr "Интерфейс источника"
+
+msgid "Bridge"
+msgstr "Мост"
+
+msgid "Wireless Adapter"
+msgstr "Беспроводной адаптер"
+
+msgid "Ethernet Adapter"
+msgstr "Ethernet-адаптер"
+
+msgid "Tunnel Interface"
+msgstr "Туннельный интерфейс"
+
+msgid "Invalid interface name"
+msgstr "Недопустимое имя интерфейса"
msgid "Use Interface With ACLs"
msgstr "Применять правила к интерфейсу"
diff --git a/luci-app-passwall2/po/zh-cn/passwall2.po b/luci-app-passwall2/po/zh-cn/passwall2.po
index 94372fdd..fb8d2eda 100644
--- a/luci-app-passwall2/po/zh-cn/passwall2.po
+++ b/luci-app-passwall2/po/zh-cn/passwall2.po
@@ -1093,6 +1093,21 @@ msgstr "IP 范围"
msgid "Source Interface"
msgstr "源接口"
+msgid "Bridge"
+msgstr "网桥"
+
+msgid "Wireless Adapter"
+msgstr "无线适配器"
+
+msgid "Ethernet Adapter"
+msgstr "以太网适配器"
+
+msgid "Tunnel Interface"
+msgstr "隧道接口"
+
+msgid "Invalid interface name"
+msgstr "无效的接口名称"
+
msgid "Use Interface With ACLs"
msgstr "使用接口控制"
diff --git a/luci-app-passwall2/po/zh-tw/passwall2.po b/luci-app-passwall2/po/zh-tw/passwall2.po
index f48c076e..317810fd 100644
--- a/luci-app-passwall2/po/zh-tw/passwall2.po
+++ b/luci-app-passwall2/po/zh-tw/passwall2.po
@@ -1093,6 +1093,21 @@ msgstr "IP 範圍"
msgid "Source Interface"
msgstr "源接口"
+msgid "Bridge"
+msgstr "網橋"
+
+msgid "Wireless Adapter"
+msgstr "無線適配器"
+
+msgid "Ethernet Adapter"
+msgstr "乙太網適配器"
+
+msgid "Tunnel Interface"
+msgstr "隧道介面"
+
+msgid "Invalid interface name"
+msgstr "無效的介面名稱"
+
msgid "Use Interface With ACLs"
msgstr "使用接口控制"
diff --git a/luci-app-passwall2/root/usr/share/passwall2/iptables.sh b/luci-app-passwall2/root/usr/share/passwall2/iptables.sh
index 3975b844..4df18d80 100755
--- a/luci-app-passwall2/root/usr/share/passwall2/iptables.sh
+++ b/luci-app-passwall2/root/usr/share/passwall2/iptables.sh
@@ -300,6 +300,10 @@ load_acl() {
local gateway device
network_get_gateway gateway "${interface}"
network_get_device device "${interface}"
+ # network_get_device returns empty for non-UP interfaces (e.g. auto='0').
+ # Try ubus directly, then check if the name is a kernel device.
+ [ -z "${device}" ] && device=$(ubus call "network.interface.${interface}" status 2>/dev/null | jsonfilter -e '@.device' 2>/dev/null)
+ [ -z "${device}" ] && [ -d "/sys/class/net/${interface}" ] && device="${interface}"
[ -z "${device}" ] && device="${interface}"
_ipt_source="-i ${device} "
msg=$(i18n "Source iface [%s]," "${device}")
diff --git a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh
index 9989e2bb..5b048b04 100755
--- a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh
+++ b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh
@@ -338,6 +338,10 @@ load_acl() {
local gateway device
network_get_gateway gateway "${interface}"
network_get_device device "${interface}"
+ # network_get_device returns empty for non-UP interfaces (e.g. auto='0').
+ # Try ubus directly, then check if the name is a kernel device.
+ [ -z "${device}" ] && device=$(ubus call "network.interface.${interface}" status 2>/dev/null | jsonfilter -e '@.device' 2>/dev/null)
+ [ -z "${device}" ] && [ -d "/sys/class/net/${interface}" ] && device="${interface}"
[ -z "${device}" ] && device="${interface}"
_ipt_source="iifname ${device} "
msg=$(i18n "Source iface [%s]," "${device}")
diff --git a/luci-app-passwall2/root/usr/share/passwall2/utils.sh b/luci-app-passwall2/root/usr/share/passwall2/utils.sh
index 091ac529..df37abf7 100755
--- a/luci-app-passwall2/root/usr/share/passwall2/utils.sh
+++ b/luci-app-passwall2/root/usr/share/passwall2/utils.sh
@@ -348,6 +348,8 @@ add_ip2route() {
local gateway device
network_get_gateway gateway "$2"
network_get_device device "$2"
+ [ -z "${device}" ] && device=$(ubus call "network.interface.$2" status 2>/dev/null | jsonfilter -e '@.device' 2>/dev/null)
+ [ -z "${device}" ] && [ -d "/sys/class/net/$2" ] && device="$2"
[ -z "${device}" ] && device="$2"
if [ -n "${gateway}" ]; then
diff --git a/luci-theme-alpha/Makefile b/luci-theme-alpha/Makefile
index 5ccc03cc..bb934c47 100644
--- a/luci-theme-alpha/Makefile
+++ b/luci-theme-alpha/Makefile
@@ -10,8 +10,8 @@ THEME_NAME:=alpha
THEME_TITLE:=Alpha
PKG_NAME:=luci-theme-$(THEME_NAME)
-PKG_VERSION:=3.9.7_beta
-PKG_RELEASE:=4
+PKG_VERSION:=3.9.7_beta2
+PKG_RELEASE:=5
include $(INCLUDE_DIR)/package.mk
diff --git a/luci-theme-alpha/js/menu-alpha.js b/luci-theme-alpha/js/menu-alpha.js
index 1b8de894..4b7e6669 100644
--- a/luci-theme-alpha/js/menu-alpha.js
+++ b/luci-theme-alpha/js/menu-alpha.js
@@ -82,7 +82,8 @@ return baseclass.extend({
url + "/" + children[i].name,
l
),
- hasChildren = submenu.children.length;
+ hasChildren = submenu.children.length,
+ dataTitle = hasChildren ? children[i].title : _(children[i].title);
ul.appendChild(
E(
"li",
@@ -104,9 +105,8 @@ return baseclass.extend({
click: hasChildren
? ui.createHandlerFn(this, "handleMenuExpand")
: null,
- "data-title": hasChildren
- ? children[i].title
- : _(children[i].title),
+ "data-title": dataTitle,
+ "data-name": children[i].name,
},
[_(children[i].title)]
),
@@ -180,36 +180,31 @@ return baseclass.extend({
darkMask = document.querySelector(".darkMask"),
mainRight = document.querySelector(".main-right"),
mainLeft = document.querySelector(".main-left"),
- open = mainLeft.style.transform === ""; // true if currently open
-
- // If it's a resize event, we simulate that the sidebar was "open" so the logic below closes it for mobile, and opens it for desktop
+ open = mainLeft.style.transform === "";
+
if (ev.type == "resize") {
- open = true;
+ open = true;
}
-
- // Logics: 'open' true means we want to CLOSE it on mobile, but OPEN it on desktop.
- // Actually, let's make it clearer: we toggle the state.
+
var willOpen = !open;
if (ev.type == "resize") {
- willOpen = width > 1152;
+ willOpen = width > 1152;
}
if (width <= 1152) {
- // Mobile behavior
- mainLeft.style.width = ""; // Reset width
- mainLeft.style.transform = willOpen ? "" : "translateX(-20rem)";
- mainLeft.style.visibility = willOpen ? "visible" : "";
- darkMask.style.visibility = willOpen ? "visible" : "";
- darkMask.style.opacity = willOpen ? 1 : "";
- mainRight.style.width = "";
+ mainLeft.style.width = "";
+ mainLeft.style.transform = willOpen ? "" : "translateX(-20rem)";
+ mainLeft.style.visibility = willOpen ? "visible" : "";
+ darkMask.style.visibility = willOpen ? "visible" : "";
+ darkMask.style.opacity = willOpen ? 1 : "";
+ mainRight.style.width = "";
} else {
- // Desktop behavior
- mainLeft.style.width = ""; // Reset width
- mainLeft.style.transform = willOpen ? "" : "translateX(-20rem)";
- mainLeft.style.visibility = willOpen ? "visible" : "hidden";
- mainRight.style.width = willOpen ? "" : "100%";
- darkMask.style.visibility = "";
- darkMask.style.opacity = "";
+ mainLeft.style.width = "";
+ mainLeft.style.transform = willOpen ? "" : "translateX(-20rem)";
+ mainLeft.style.visibility = willOpen ? "visible" : "hidden";
+ mainRight.style.width = willOpen ? "" : "100%";
+ darkMask.style.visibility = "";
+ darkMask.style.opacity = "";
}
if (ev && ev.preventDefault) ev.preventDefault();
if (ev && ev.stopPropagation) ev.stopPropagation();
diff --git a/luci-theme-alpha/luasrc/gaya/gaya.css b/luci-theme-alpha/luasrc/gaya/gaya.css
index f0978943..ec0fd594 100755
--- a/luci-theme-alpha/luasrc/gaya/gaya.css
+++ b/luci-theme-alpha/luasrc/gaya/gaya.css
@@ -187,7 +187,7 @@
--main-menu-color: #202124;
--submenu-bg-hover: #4d5ca5;
--submenu-bg-hover-active: #09c;
- --font-body: 'Inter-Regular';
+ --font-body: 'Inter-Regular', 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Noto Sans CJK SC', sans-serif;
}
tt {
@@ -372,8 +372,20 @@
height: 100%;
margin: 0;
padding: 0;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
}
+body.lang_zh-cn,
+body.lang_zh_CN,
+body.lang_zh-hans,
+body.lang_zh_Hans,
+body.lang_zh-tw,
+body.lang_zh_TW {
+ font-family: 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Noto Sans CJK SC', sans-serif;
+}
+
select {
color: #555;
border: thin solid #ccc;
@@ -838,9 +850,13 @@
}
.main>.main-left>.nav>li>[data-title="Log out"],
- .main>.main-left>.nav>li>[data-title="Logout"] {
+.main>.main-left>.nav>li>[data-title="Logout"],
+.main>.main-left>.nav>li>[data-name="logout"] {
display: flex;
+ align-items: center;
+ justify-content: flex-start;
padding: 0.5rem 1rem;
+ padding-right: 3rem;
}
.main>.main-left>.nav>li a {
@@ -850,7 +866,9 @@
.main>.main-left>.nav>li>[data-title="Log out"],
.main>.main-left>.nav>li>[data-title="Logout"],
- .main>.main-left>.nav>li>[data-title="iStore"] {
+.main>.main-left>.nav>li>[data-title="iStore"],
+.main>.main-left>.nav>li>[data-name="logout"],
+.main>.main-left>.nav>li>[data-name="istore"] {
font-size: 1rem;
color: #fff;
}
@@ -866,6 +884,8 @@
.main>.main-left>.nav>.slide>.menu,
.main>.main-left>.nav>li>[data-title="Logout"],
.main>.main-left>.nav>li>[data-title="iStore"],
+.main>.main-left>.nav>li>[data-name="logout"],
+.main>.main-left>.nav>li>[data-name="istore"],
.main>.main-left>.nav>li>[data-title="Dashboard"] {
font-size: 1rem;
font-weight: 500;
@@ -891,7 +911,8 @@
.main>.main-left>.nav>.slide>.menu.active::before {}
- .main>.main-left>.nav>.slide>[data-title="Status"]:before {
+.main>.main-left>.nav>.slide>[data-title="Status"]:before,
+.main>.main-left>.nav>.slide>[data-name="status"]:before {
position: absolute;
right: 14px;
width: 25px;
@@ -901,7 +922,8 @@
background-size: 25px;
}
- .main>.main-left>.nav>.slide>[data-title="System"]:before {
+.main>.main-left>.nav>.slide>[data-title="System"]:before,
+.main>.main-left>.nav>.slide>[data-name="system"]:before {
position: absolute;
right: 14px;
width: 25px;
@@ -911,7 +933,8 @@
background-size: 25px;
}
- .main>.main-left>.nav>.slide>[data-title="Services"]:before {
+.main>.main-left>.nav>.slide>[data-title="Services"]:before,
+.main>.main-left>.nav>.slide>[data-name="services"]:before {
position: absolute;
right: 14px;
width: 25px;
@@ -921,7 +944,8 @@
background-size: 25px;
}
- .main>.main-left>.nav>.slide>[data-title="NAS"]:before {
+.main>.main-left>.nav>.slide>[data-title="NAS"]:before,
+.main>.main-left>.nav>.slide>[data-name="nas"]:before {
position: absolute;
right: 14px;
width: 25px;
@@ -931,7 +955,8 @@
background-size: 25px;
}
- .main>.main-left>.nav>.slide>[data-title="Modem"]:before {
+.main>.main-left>.nav>.slide>[data-title="Modem"]:before,
+.main>.main-left>.nav>.slide>[data-name="modem"]:before {
position: absolute;
right: 14px;
width: 25px;
@@ -941,7 +966,8 @@
background-size: 25px;
}
- .main>.main-left>.nav>.slide>[data-title="Network"]:before {
+.main>.main-left>.nav>.slide>[data-title="Network"]:before,
+.main>.main-left>.nav>.slide>[data-name="network"]:before {
position: absolute;
right: 14px;
width: 25px;
@@ -951,7 +977,8 @@
background-size: 25px;
}
- .main>.main-left>.nav>.slide>[data-title="VPN"]:before {
+.main>.main-left>.nav>.slide>[data-title="VPN"]:before,
+.main>.main-left>.nav>.slide>[data-name="vpn"]:before {
position: absolute;
right: 14px;
width: 25px;
@@ -961,7 +988,8 @@
background-size: 25px;
}
- .main>.main-left>.nav>.slide>[data-title="Docker"]:before {
+.main>.main-left>.nav>.slide>[data-title="Docker"]:before,
+.main>.main-left>.nav>.slide>[data-name="docker"]:before {
position: absolute;
right: 14px;
width: 25px;
@@ -971,7 +999,8 @@
background-size: 25px;
}
- .main>.main-left>.nav>li>[data-title="iStore"]:before {
+.main>.main-left>.nav>li>[data-title="iStore"]:before,
+.main>.main-left>.nav>li>[data-name="istore"]:before {
position: absolute;
right: 14px;
width: 25px;
@@ -1057,12 +1086,15 @@
}
.main>.main-left>.nav>li>[data-title="Logout"]::before,
- .main>.main-left>.nav>li>[data-title="Log out"]::before {
+.main>.main-left>.nav>li>[data-title="Log out"]::before,
+.main>.main-left>.nav>li>[data-name="logout"]::before {
position: absolute;
+ top: 50%;
right: 14px;
width: 25px;
height: 25px;
content: "";
+ transform: translateY(-50%);
background: url(./icon/logout.svg) no-repeat;
background-size: 25px;
}
@@ -1089,7 +1121,9 @@
.main>.main-left>.nav>.slide>.slide-menu>li,
.main>.main-left>.nav>li>[data-title="Logout"],
.main>.main-left>.nav>li>[data-title="Log out"],
- .main>.main-left>.nav>li>[data-title="iStore"] {
+.main>.main-left>.nav>li>[data-title="iStore"],
+.main>.main-left>.nav>li>[data-name="logout"],
+.main>.main-left>.nav>li>[data-name="istore"] {
position: relative;
overflow: hidden;
transform: translate3d(0, 0, 0);
@@ -1099,7 +1133,9 @@
.main>.main-left>.nav>.slide>.slide-menu>li::after,
.main>.main-left>.nav>li>[data-title="Logout"]::after,
.main>.main-left>.nav>li>[data-title="Log out"]::after,
- .main>.main-left>.nav>li>[data-title="iStore"]::after {
+.main>.main-left>.nav>li>[data-title="iStore"]::after,
+.main>.main-left>.nav>li>[data-name="logout"]::after,
+.main>.main-left>.nav>li>[data-name="istore"]::after {
position: absolute;
top: 0;
left: 0;
@@ -1120,7 +1156,9 @@
.main>.main-left>.nav>.slide>.slide-menu>li:active::after,
.main>.main-left>.nav>li>[data-title="Logout"]:active::after,
.main>.main-left>.nav>li>[data-title="Log out"]:active::after,
- .main>.main-left>.nav>li>[data-title="iStore"]:active::after {
+.main>.main-left>.nav>li>[data-title="iStore"]:active::after,
+.main>.main-left>.nav>li>[data-name="logout"]:active::after,
+.main>.main-left>.nav>li>[data-name="istore"]:active::after {
transition: 0s;
transform: scale(0, 0);
opacity: 0.2;
@@ -1361,6 +1399,15 @@
margin-left: 0.6rem;
}
+.btn,
+.cbi-button,
+[data-page="admin-system-opkg"] div.btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ line-height: 1.2;
+}
+
.btn:hover,
.btn:focus,
.btn:active,
@@ -2170,6 +2217,7 @@
.ifacebadge {
display: inline-flex;
+ align-items: center;
background: #ffffff33;
padding: 0.5rem 0.8rem;
border-radius: 10px;
@@ -2178,14 +2226,14 @@
td>.ifacebadge,
.td>.ifacebadge {
font-size: 0.8rem;
- background-color: #000000;
+ background-color: #222235b3;
border-radius: 10px;
}
.ifacebadge>em,
.ifacebadge>img {
display: inline-block;
- align-self: flex-start;
+ align-self: center;
margin: 0 0.2rem;
}
@@ -2213,7 +2261,7 @@
align-items: center;
flex: 1 1 auto;
min-width: 220px;
- background-color: #11111d;
+ background-color: #222235b3;
margin: 0.5em 0.25em 0;
padding: 0.5em;
border-radius: 10px;
@@ -2610,8 +2658,8 @@
}
[data-page="admin-system-opkg"] div.btn {
- display: inline;
- padding: 0.3rem 0.6rem;
+ padding: 0.3rem 0.9rem;
+ min-height: 2.3rem;
}
[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear),
@@ -2624,6 +2672,25 @@
margin: 2rem 2rem 1rem;
}
+[data-page="admin-system-opkg"] #packages {
+ border-radius: 14px;
+ overflow: hidden;
+ background-color: rgba(16, 28, 45, 0.58);
+ -webkit-backdrop-filter: blur(8px);
+ backdrop-filter: blur(8px);
+}
+
+[data-page="admin-system-opkg"] #packages>.tr>.td,
+[data-page="admin-system-opkg"] #packages tbody tr>td {
+ background-color: rgba(34, 34, 53, 0.46);
+ border-top: thin solid rgba(255, 255, 255, 0.08);
+}
+
+[data-page="admin-system-opkg"] #packages>.tr.table-titles>.th,
+[data-page="admin-system-opkg"] #packages thead tr>th {
+ background-color: rgba(12, 22, 38, 0.82);
+}
+
.td.version,
.td.size {
white-space: normal !important;
@@ -3101,7 +3168,7 @@
}
}
- @media screen and (max-width: 2000000000px) {
+ @media screen and (max-width: 2000px) {
header {
height: 3.5rem;
}
@@ -3162,8 +3229,10 @@
.main>.main-left>.nav>li a,
.main>.main-left>.nav>.slide>.menu,
.main>.main-left>.nav>li>[data-title="Logout"],
- .main>.main-left>.nav>li>[data-title="Logout"],
- .main>.main-left>.nav>li>[data-title="iStore"] {
+ .main>.main-left>.nav>li>[data-title="Log out"],
+ .main>.main-left>.nav>li>[data-title="iStore"],
+ .main>.main-left>.nav>li>[data-name="logout"],
+ .main>.main-left>.nav>li>[data-name="istore"] {
font-size: 1rem;
color: #fff;
}
@@ -3447,7 +3516,9 @@
.main>.main-left>.nav>.slide>.menu,
.main>.main-left>.nav>li>[data-title="Logout"],
.main>.main-left>.nav>li>[data-title="Log out"],
- .main>.main-left>.nav>li>[data-title="iStore"] {
+.main>.main-left>.nav>li>[data-title="iStore"],
+.main>.main-left>.nav>li>[data-name="logout"],
+.main>.main-left>.nav>li>[data-name="istore"] {
font-size: 1.1rem;
}
@@ -3596,7 +3667,7 @@
.main>.main-left>.nav>.slide>.slide-menu>li>a,
.tr[data-title]::before,
.tr.cbi-section-table-titles.named::before {
- font-size:
+ font-size: 0.8rem;
}
.cbi-value-title,
diff --git a/luci-theme-alpha/root/etc/config/alpha b/luci-theme-alpha/root/etc/config/alpha
index c3cf6736..dec05b9f 100644
--- a/luci-theme-alpha/root/etc/config/alpha
+++ b/luci-theme-alpha/root/etc/config/alpha
@@ -50,4 +50,4 @@ config navbar
option line '6'
option newtab 'No'
option icon '/www/luci-static/alpha/gaya/icon/navbar/network.png'
- option address '/cgi-bin/luci/admin/network/network'
+ option address '/cgi-bin/luci/admin/network/network'
\ No newline at end of file
diff --git a/luci-theme-alpha/template/footer.htm b/luci-theme-alpha/template/footer.htm
index 19ba1358..e764e526 100644
--- a/luci-theme-alpha/template/footer.htm
+++ b/luci-theme-alpha/template/footer.htm
@@ -24,7 +24,7 @@
end) -- Check navbar enable status local navbar_enabled=config.navbar=="1" -- Calculate number
of enabled navbar links local num_links=0 uci:foreach("alpha", "navbar" , function(section) if
section.enable=="Enable" then num_links=num_links + 1 end end) -- Calculate link width for
- responsive design local link_width=string.format("calc(100%% / %d)", num_links) -- Retrieve
+ responsive design local link_width=string.format("calc(100%% / %d)", num_links > 0 and num_links or 1) -- Retrieve
theme properties local background_color=config.color or '#2222359a' local
blur_value=tonumber(config.blur) or 20 local link_blur=string.format("blur(%dpx)", blur_value)
%>
@@ -65,7 +65,7 @@
diff --git a/luci-theme-alpha/template/footer.ut b/luci-theme-alpha/template/footer.ut
index efaa4da0..32a0a553 100644
--- a/luci-theme-alpha/template/footer.ut
+++ b/luci-theme-alpha/template/footer.ut
@@ -26,7 +26,7 @@
}
});
- let link_width = `calc(100% / ${num_links})`;
+ let link_width = `calc(100% / ${num_links > 0 ? num_links : 1})`;
let background_color = config.color || '#2222359a';
let blur_value = config.blur || 20;
let link_blur = `blur(${blur_value}px)`;
diff --git a/luci-theme-alpha/template/header.htm b/luci-theme-alpha/template/header.htm
index 411457d0..e7437541 100644
--- a/luci-theme-alpha/template/header.htm
+++ b/luci-theme-alpha/template/header.htm
@@ -69,7 +69,7 @@