Compare commits

...
2 Commits
Author SHA1 Message Date
github-actions[bot] 2b9479b1ed 🚀 Sync 2026-09-03 03:25:04 2026-09-03 03:25:04 +08:00
github-actions[bot] 610ab4b79a 🎄 Sync 2026-09-02 23:53:04 2026-09-02 23:53:04 +08:00
68 changed files with 1460 additions and 1111 deletions
+2 -2
View File
@@ -10,8 +10,8 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_BAIDUDRIVE:=$(ARCH) PKG_ARCH_BAIDUDRIVE:=$(ARCH)
PKG_NAME:=baidudrive PKG_NAME:=baidudrive
PKG_VERSION:=linkeasefull-runtime-v3.0.16 PKG_VERSION:=linkeasefull-runtime-v3.0.17
PKG_RELEASE:=18 PKG_RELEASE:=19
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/baidudrive-runtime-v$(PKG_VERSION)/ PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/baidudrive-runtime-v$(PKG_VERSION)/
PKG_HASH:=skip PKG_HASH:=skip
+2 -2
View File
@@ -9,8 +9,8 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_DOCKERMANAGER:=$(ARCH) PKG_ARCH_DOCKERMANAGER:=$(ARCH)
PKG_NAME:=dockermanager PKG_NAME:=dockermanager
PKG_VERSION:=linkeasefull-runtime-v3.0.16 PKG_VERSION:=linkeasefull-runtime-v3.0.17
PKG_RELEASE:=4 PKG_RELEASE:=5
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/dockermanager-runtime-v$(PKG_VERSION)/ PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/dockermanager-runtime-v$(PKG_VERSION)/
PKG_HASH:=skip PKG_HASH:=skip
+2 -2
View File
@@ -9,8 +9,8 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_kaiplus:=$(ARCH) PKG_ARCH_kaiplus:=$(ARCH)
PKG_NAME:=kaiplus PKG_NAME:=kaiplus
PKG_VERSION:=linkeasefull-runtime-v3.0.16 PKG_VERSION:=linkeasefull-runtime-v3.0.17
PKG_RELEASE:=8 PKG_RELEASE:=9
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/kaiplus-runtime-v$(PKG_VERSION)/ PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/kaiplus-runtime-v$(PKG_VERSION)/
PKG_HASH:=skip PKG_HASH:=skip
+2 -2
View File
@@ -12,7 +12,7 @@ PKG_ARCH_LINKEASE:=$(ARCH)
PKG_NAME:=linkease-common-bin PKG_NAME:=linkease-common-bin
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable # use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
PKG_SOURCE_DATE:=1.7.5 PKG_SOURCE_DATE:=1.7.5
PKG_RELEASE:=20 PKG_RELEASE:=21
ARCH_HEXCODE:= ARCH_HEXCODE:=
ifeq ($(ARCH),x86_64) ifeq ($(ARCH),x86_64)
@@ -28,7 +28,7 @@ else ifeq ($(ARCH),mipsel)
ARCH_HEXCODE=1b0c ARCH_HEXCODE=1b0c
endif endif
PKG_SOURCE_VERSION:=be8ef471de3f6385bf2d570bd4048328361c24c0 PKG_SOURCE_VERSION:=68f013896321ab995075e3daa11681977ab05f93
PKG_SOURCE:=linkease-common-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE).tar.gz PKG_SOURCE:=linkease-common-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/linkease-runtime-v$(PKG_SOURCE_DATE)/ PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/linkease-runtime-v$(PKG_SOURCE_DATE)/
PKG_BUILD_DIR:=$(BUILD_DIR)/linkease-common-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE) PKG_BUILD_DIR:=$(BUILD_DIR)/linkease-common-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE)
+2 -2
View File
@@ -12,7 +12,7 @@ PKG_ARCH_LINKEASE:=$(ARCH)
PKG_NAME:=linkease PKG_NAME:=linkease
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable # use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
PKG_SOURCE_DATE:=1.7.5 PKG_SOURCE_DATE:=1.7.5
PKG_RELEASE:=23 PKG_RELEASE:=24
ARCH_HEXCODE:= ARCH_HEXCODE:=
ifeq ($(ARCH),x86_64) ifeq ($(ARCH),x86_64)
@@ -28,7 +28,7 @@ else ifeq ($(ARCH),mipsel)
ARCH_HEXCODE=1b0c ARCH_HEXCODE=1b0c
endif endif
PKG_SOURCE_VERSION:=be8ef471de3f6385bf2d570bd4048328361c24c0 PKG_SOURCE_VERSION:=68f013896321ab995075e3daa11681977ab05f93
PKG_SOURCE:=linkease-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE).tar.gz PKG_SOURCE:=linkease-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/linkease-runtime-v$(PKG_SOURCE_DATE)/ PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/linkease-runtime-v$(PKG_SOURCE_DATE)/
PKG_BUILD_DIR:=$(BUILD_DIR)/linkease-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE) PKG_BUILD_DIR:=$(BUILD_DIR)/linkease-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE)
+3 -3
View File
@@ -10,8 +10,8 @@ PKG_ARCH_LINKEASE:=$(ARCH)
PKG_NAME:=linkeasefull PKG_NAME:=linkeasefull
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable # use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
PKG_SOURCE_DATE:=3.0.16 PKG_SOURCE_DATE:=3.0.17
PKG_RELEASE:=22 PKG_RELEASE:=23
ARCH_HEXCODE:= ARCH_HEXCODE:=
ifeq ($(ARCH),x86_64) ifeq ($(ARCH),x86_64)
@@ -24,7 +24,7 @@ LINKEASE_RUNTIME_ARCH:=arm64
PKG_HASH:=skip PKG_HASH:=skip
endif endif
PKG_SOURCE_VERSION:=be8ef471de3f6385bf2d570bd4048328361c24c0 PKG_SOURCE_VERSION:=68f013896321ab995075e3daa11681977ab05f93
PKG_SOURCE:=linkease-runtime-$(PKG_SOURCE_DATE)-linux-$(LINKEASE_RUNTIME_ARCH).tar.gz PKG_SOURCE:=linkease-runtime-$(PKG_SOURCE_DATE)-linux-$(LINKEASE_RUNTIME_ARCH).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/linkeasefull-runtime-v$(PKG_SOURCE_DATE)/ PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/linkeasefull-runtime-v$(PKG_SOURCE_DATE)/
PKG_BUILD_DIR:=$(BUILD_DIR)/linkease-runtime-$(PKG_SOURCE_DATE)-linux-$(LINKEASE_RUNTIME_ARCH) PKG_BUILD_DIR:=$(BUILD_DIR)/linkease-runtime-$(PKG_SOURCE_DATE)-linux-$(LINKEASE_RUNTIME_ARCH)
+1 -1
View File
@@ -12,7 +12,7 @@ LUCI_DEPENDS:=+luci-base +logd +jsonfilter
LUCI_PKGARCH:=all LUCI_PKGARCH:=all
PKG_VERSION:=0.1.37 PKG_VERSION:=0.1.37
PKG_RELEASE:=4 PKG_RELEASE:=5
# Reproducible build: honor SOURCE_DATE_EPOCH from the build environment (set by docker-sdk.sh / CI). # Reproducible build: honor SOURCE_DATE_EPOCH from the build environment (set by docker-sdk.sh / CI).
ifdef SOURCE_DATE_EPOCH ifdef SOURCE_DATE_EPOCH
@@ -531,6 +531,11 @@ return view.extend({
err = _('Rule labels unavailable'); err = _('Rule labels unavailable');
text = text ? text + ' \u00b7 ' + err : err; text = text ? text + ' \u00b7 ' + err : err;
} }
const warnings = (this.loggingStatus && this.loggingStatus.warnings) || [];
if (warnings.indexOf('timeout_missing') >= 0) {
const warn = _('Limited diagnostics — timeout command missing');
text = text ? text + ' \u00b7 ' + warn : warn;
}
label.textContent = text; label.textContent = text;
} }
@@ -543,6 +548,7 @@ return view.extend({
} catch (e) { } catch (e) {
this.loggingStatus = null; this.loggingStatus = null;
} }
this.updateBackendUi();
this.updateLoggingToolbarUi(); this.updateLoggingToolbarUi();
this.updateEmptyStateUi(); this.updateEmptyStateUi();
}, },
+168 -164
View File
@@ -12,78 +12,78 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:909 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:926
msgid "%d matching · %d/%d stored" msgid "%d matching · %d/%d stored"
msgstr "%d matching · %d/%d stored" msgstr "%d matching · %d/%d stored"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:912 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:929
msgid "0 matching · %d/%d stored" msgid "0 matching · %d/%d stored"
msgstr "0 matching · %d/%d stored" msgstr "0 matching · %d/%d stored"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251
msgid "Accessible (teal/orange)" msgid "Accessible (teal/orange)"
msgstr "Barrierefrei (teal/orange)" msgstr "Barrierefrei (teal/orange)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32
msgid "Action" msgid "Action"
msgstr "Aktion" msgstr "Aktion"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:601 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:618
msgid "Administrator access is required to disable logging." msgid "Administrator access is required to disable logging."
msgstr "" msgstr ""
"Zum Deaktivieren der Protokollierung sind Administratorrechte erforderlich." "Zum Deaktivieren der Protokollierung sind Administratorrechte erforderlich."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:586
msgid "Administrator access is required to enable logging." msgid "Administrator access is required to enable logging."
msgstr "" msgstr ""
"Zum Aktivieren der Protokollierung sind Administratorrechte erforderlich." "Zum Aktivieren der Protokollierung sind Administratorrechte erforderlich."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1092
msgid "Also seen" msgid "Also seen"
msgstr "Weitere" msgstr "Weitere"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:554 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:571
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:590 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:607
msgid "Another change is staged for the firewall; apply or revert it first." msgid "Another change is staged for the firewall; apply or revert it first."
msgstr "" msgstr ""
"Eine andere Änderung an der Firewall ist vorgemerkt; zuerst anwenden oder " "Eine andere Änderung an der Firewall ist vorgemerkt; zuerst anwenden oder "
"verwerfen." "verwerfen."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1652 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658
msgid "Any action" msgid "Any action"
msgstr "Beliebige Aktion" msgstr "Beliebige Aktion"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1079 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1085
msgid "Any protocol" msgid "Any protocol"
msgstr "Beliebiges Protokoll" msgstr "Beliebiges Protokoll"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113
msgid "Before you enable logging" msgid "Before you enable logging"
msgstr "Before you enable logging" msgstr "Before you enable logging"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:552 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569
msgid "Cannot enable logging until kernel log modules are installed." msgid "Cannot enable logging until kernel log modules are installed."
msgstr "" msgstr ""
"Protokollierung kann erst aktiviert werden, wenn die Kernel-Log-Module " "Protokollierung kann erst aktiviert werden, wenn die Kernel-Log-Module "
"installiert sind." "installiert sind."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116
msgid "Changes:" msgid "Changes:"
msgstr "Changes:" msgstr "Changes:"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250
msgid "Classic (green/red)" msgid "Classic (green/red)"
msgstr "Klassisch (grün/rot)" msgstr "Klassisch (grün/rot)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1636 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1642
msgid "Classic uses green/red; Accessible uses teal/orange" msgid "Classic uses green/red; Accessible uses teal/orange"
msgstr "Klassisch verwendet grün/rot; Barrierefrei verwendet teal/orange" msgstr "Klassisch verwendet grün/rot; Barrierefrei verwendet teal/orange"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116
msgid "Clear all" msgid "Clear all"
msgstr "Alle löschen" msgstr "Alle löschen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1698
msgid "" msgid ""
"Click a cell to filter · ≠ on a chip to exclude · Ctrl+click a rule for " "Click a cell to filter · ≠ on a chip to exclude · Ctrl+click a rule for "
"firewall settings · in Simple view, click a row for the full message" "firewall settings · in Simple view, click a row for the full message"
@@ -92,7 +92,7 @@ msgstr ""
"auf eine Regel für Firewall-Einstellungen · in der Einfachen Ansicht Zeile " "auf eine Regel für Firewall-Einstellungen · in der Einfachen Ansicht Zeile "
"anklicken für die vollständige Meldung" "anklicken für die vollständige Meldung"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1713 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1719
msgid "" msgid ""
"Click a row (Time or other non-link cells) to see the full log line (Simple " "Click a row (Time or other non-link cells) to see the full log line (Simple "
"view)." "view)."
@@ -100,11 +100,11 @@ msgstr ""
"Klicken Sie auf eine Zeile (Zeit oder andere Nicht-Link-Zellen), um die " "Klicken Sie auf eine Zeile (Zeit oder andere Nicht-Link-Zellen), um die "
"vollständige Log-Zeile zu sehen (Einfache Ansicht)." "vollständige Log-Zeile zu sehen (Einfache Ansicht)."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113
msgid "Click a row for the full message" msgid "Click a row for the full message"
msgstr "Zeile anklicken für die vollständige Meldung" msgstr "Zeile anklicken für die vollständige Meldung"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1720
msgid "" msgid ""
"Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a " "Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a "
"chip) to exclude." "chip) to exclude."
@@ -112,87 +112,87 @@ msgstr ""
"Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a " "Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a "
"chip) to exclude." "chip) to exclude."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1080 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086
msgid "Common" msgid "Common"
msgstr "Häufig" msgstr "Häufig"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:927 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:944
msgid "Connection lost — retrying…" msgid "Connection lost — retrying…"
msgstr "Connection lost — retrying…" msgstr "Connection lost — retrying…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:592 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:609
msgid "Could not disable logging." msgid "Could not disable logging."
msgstr "Protokollierung konnte nicht deaktiviert werden." msgstr "Protokollierung konnte nicht deaktiviert werden."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:556 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573
msgid "Could not enable logging." msgid "Could not enable logging."
msgstr "Protokollierung konnte nicht aktiviert werden." msgstr "Protokollierung konnte nicht aktiviert werden."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680
msgid "Custom protocol (prefix ! to exclude). Overrides the menu when set." msgid "Custom protocol (prefix ! to exclude). Overrides the menu when set."
msgstr "" msgstr ""
"Eigenes Protokoll (! zum Ausschließen). Überschreibt das Menü, wenn gesetzt." "Eigenes Protokoll (! zum Ausschließen). Überschreibt das Menü, wenn gesetzt."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42
msgid "DPort" msgid "DPort"
msgstr "Ziel-Port" msgstr "Ziel-Port"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40
msgid "Destination" msgid "Destination"
msgstr "Ziel" msgstr "Ziel"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1685 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1691
msgid "Destination IP contains (! to exclude)" msgid "Destination IP contains (! to exclude)"
msgstr "Ziel-IP enthält (! zum Ausschließen)" msgstr "Ziel-IP enthält (! zum Ausschließen)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692
msgid "Destination port (! to exclude)" msgid "Destination port (! to exclude)"
msgstr "Ziel-Port (! zum Ausschließen)" msgstr "Ziel-Port (! zum Ausschließen)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1577 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1583
msgid "Detail" msgid "Detail"
msgstr "Detail" msgstr "Detail"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37
msgid "Dir" msgid "Dir"
msgstr "Richtung" msgstr "Richtung"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85
msgid "Disabling…" msgid "Disabling…"
msgstr "Disabling…" msgstr "Disabling…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1616
msgid "Display options" msgid "Display options"
msgstr "Anzeigeoptionen" msgstr "Anzeigeoptionen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1710 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716
msgid "Display options on the bar set Limit, row tint, palette, and hostnames." msgid "Display options on the bar set Limit, row tint, palette, and hostnames."
msgstr "" msgstr ""
"Anzeigeoptionen in der Leiste setzen Limit, Zeilenfärbung, Palette und " "Anzeigeoptionen in der Leiste setzen Limit, Zeilenfärbung, Palette und "
"Hostnamen." "Hostnamen."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121
msgid "Does not change:" msgid "Does not change:"
msgstr "Does not change:" msgstr "Does not change:"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138
msgid "Dont show this again" msgid "Dont show this again"
msgstr "Dont show this again" msgstr "Dont show this again"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enable WAN drop/reject logging" msgid "Enable WAN drop/reject logging"
msgstr "Enable WAN drop/reject logging" msgstr "Enable WAN drop/reject logging"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104
msgid "Enable WAN zone drop/reject logging (same as Network → Firewall)." msgid "Enable WAN zone drop/reject logging (same as Network → Firewall)."
msgstr "Enable WAN zone drop/reject logging (same as Network → Firewall)." msgstr "Enable WAN zone drop/reject logging (same as Network → Firewall)."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
msgid "Enable logging" msgid "Enable logging"
msgstr "Protokollierung aktivieren" msgstr "Protokollierung aktivieren"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1709 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715
msgid "" msgid ""
"Enable logging turns on WAN zone drop/reject logging only (same as Network → " "Enable logging turns on WAN zone drop/reject logging only (same as Network → "
"Firewall). It does not add rules or log normal LAN browsing." "Firewall). It does not add rules or log normal LAN browsing."
@@ -200,57 +200,57 @@ msgstr ""
"Enable logging turns on WAN zone drop/reject logging only (same as Network → " "Enable logging turns on WAN zone drop/reject logging only (same as Network → "
"Firewall). It does not add rules or log normal LAN browsing." "Firewall). It does not add rules or log normal LAN browsing."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enabling…" msgid "Enabling…"
msgstr "Enabling…" msgstr "Enabling…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1093 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099
msgid "Exclude" msgid "Exclude"
msgstr "Ausschließen" msgstr "Ausschließen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Exclude instead" msgid "Exclude instead"
msgstr "Stattdessen ausschließen" msgstr "Stattdessen ausschließen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71
msgid "Filter by %s" msgid "Filter by %s"
msgstr "Filtern nach %s" msgstr "Filtern nach %s"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136
msgid "Filter by interface" msgid "Filter by interface"
msgstr "Nach Schnittstelle filtern" msgstr "Nach Schnittstelle filtern"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112
msgid "Filter logs by rule (hint: %s). Ctrl+click to open firewall settings." msgid "Filter logs by rule (hint: %s). Ctrl+click to open firewall settings."
msgstr "" msgstr ""
"Logs nach Regel filtern (Hinweis: %s). Strg+Klick öffnet die Firewall-" "Logs nach Regel filtern (Hinweis: %s). Strg+Klick öffnet die Firewall-"
"Einstellungen." "Einstellungen."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1534 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1540
#: openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3
msgid "Firewall Live View" msgid "Firewall Live View"
msgstr "Firewall-Live-Ansicht" msgstr "Firewall-Live-Ansicht"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43
msgid "Flags" msgid "Flags"
msgstr "Flags" msgstr "Flags"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45
msgid "Flow" msgid "Flow"
msgstr "Fluss" msgstr "Fluss"
#: openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3
msgid "Grant access to firewall live log view" msgid "Grant access to firewall live log view"
msgstr "Zugriff auf die Live-Ansicht der Firewall-Protokolle gewähren" msgstr "Zugriff auf die Live-Ansicht der Firewall-Protokolle gewähren"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1706 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1712
msgid "Help" msgid "Help"
msgstr "Hilfe" msgstr "Hilfe"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:878 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:895
msgid "" msgid ""
"High event rate — table refresh is throttled to protect the browser. The " "High event rate — table refresh is throttled to protect the browser. The "
"buffer still updates; refresh will resume automatically." "buffer still updates; refresh will resume automatically."
@@ -258,15 +258,15 @@ msgstr ""
"High event rate — table refresh is throttled to protect the browser. The " "High event rate — table refresh is throttled to protect the browser. The "
"buffer still updates; refresh will resume automatically." "buffer still updates; refresh will resume automatically."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1084 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1090
msgid "ICMPv6" msgid "ICMPv6"
msgstr "ICMPv6" msgstr "ICMPv6"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35
msgid "IN" msgid "IN"
msgstr "EINGANG" msgstr "EINGANG"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1723
msgid "" msgid ""
"If Row tint looks missing, the active LuCI theme may omit success/error or " "If Row tint looks missing, the active LuCI theme may omit success/error or "
"info/warn CSS variables; fwlive falls back to local colors (air-gapped, no " "info/warn CSS variables; fwlive falls back to local colors (air-gapped, no "
@@ -276,7 +276,7 @@ msgstr ""
"möglicherweise keine Erfolgs/Fehler-CSS-Variablen; fwlive fällt auf lokale " "möglicherweise keine Erfolgs/Fehler-CSS-Variablen; fwlive fällt auf lokale "
"Farben zurück (air-gapped, keine Daten verlassen das Gerät)." "Farben zurück (air-gapped, keine Daten verlassen das Gerät)."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205
msgid "" msgid ""
"If the WAN is quiet, wait for probes or use the optional ping check in " "If the WAN is quiet, wait for probes or use the optional ping check in "
"Help / the enabling-logs guide." "Help / the enabling-logs guide."
@@ -284,28 +284,28 @@ msgstr ""
"If the WAN is quiet, wait for probes or use the optional ping check in " "If the WAN is quiet, wait for probes or use the optional ping check in "
"Help / the enabling-logs guide." "Help / the enabling-logs guide."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Include instead" msgid "Include instead"
msgstr "Stattdessen einschließen" msgstr "Stattdessen einschließen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34
msgid "Interface" msgid "Interface"
msgstr "Schnittstelle" msgstr "Schnittstelle"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1682 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1688
msgid "Interface (prefix ! to exclude)" msgid "Interface (prefix ! to exclude)"
msgstr "Schnittstelle (! voranstellen zum Ausschließen)" msgstr "Schnittstelle (! voranstellen zum Ausschließen)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232
msgid "Ill configure this under Network → Firewall" msgid "Ill configure this under Network → Firewall"
msgstr "Ill configure this under Network → Firewall" msgstr "Ill configure this under Network → Firewall"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194
msgid "Kernel log modules missing" msgid "Kernel log modules missing"
msgstr "Kernel log modules missing" msgstr "Kernel log modules missing"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195
msgid "" msgid ""
"Kernel netfilter log modules are missing. Install kmod-nf-log-ipv4 and kmod-" "Kernel netfilter log modules are missing. Install kmod-nf-log-ipv4 and kmod-"
"nf-log-ipv6 (or kmod-nf-log / kmod-nf-log6), then reload the firewall." "nf-log-ipv6 (or kmod-nf-log / kmod-nf-log6), then reload the firewall."
@@ -314,70 +314,74 @@ msgstr ""
"kmod-nf-log-ipv6 (oder kmod-nf-log / kmod-nf-log6) und laden Sie dann die " "kmod-nf-log-ipv6 (oder kmod-nf-log / kmod-nf-log6) und laden Sie dann die "
"Firewall neu." "Firewall neu."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44
msgid "Len" msgid "Len"
msgstr "Länge" msgstr "Länge"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1613 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1619
msgid "Limit" msgid "Limit"
msgstr "Limit" msgstr "Limit"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:536
msgid "Limited diagnostics — timeout command missing"
msgstr "Eingeschränkte Diagnose — timeout-Befehl fehlt"
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210
msgid "Logging is off on this router" msgid "Logging is off on this router"
msgstr "Logging is off on this router" msgstr "Logging is off on this router"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256
msgid "Manual test (System → Terminal):" msgid "Manual test (System → Terminal):"
msgstr "Manueller Test (System → Terminal):" msgstr "Manueller Test (System → Terminal):"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1584 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1590
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1589 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1595
msgid "Message" msgid "Message"
msgstr "Nachricht" msgstr "Nachricht"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686
msgid "More filters" msgid "More filters"
msgstr "Weitere Filter" msgstr "Weitere Filter"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37
msgid "Network → Firewall" msgid "Network → Firewall"
msgstr "Network → Firewall" msgstr "Network → Firewall"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187
msgid "" msgid ""
"No WAN firewall zone found in /etc/config/firewall. Configure zones under" "No WAN firewall zone found in /etc/config/firewall. Configure zones under"
msgstr "" msgstr ""
"Keine WAN-Firewall-Zone in /etc/config/firewall gefunden. Konfigurieren Sie " "Keine WAN-Firewall-Zone in /etc/config/firewall gefunden. Konfigurieren Sie "
"Zonen unter" "Zonen unter"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185
msgid "No WAN zone found" msgid "No WAN zone found"
msgstr "No WAN zone found" msgstr "No WAN zone found"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163
msgid "Not now" msgid "Not now"
msgstr "Not now" msgstr "Not now"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220
msgid "Nothing changes until you click Enable." msgid "Nothing changes until you click Enable."
msgstr "Nothing changes until you click Enable." msgstr "Nothing changes until you click Enable."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36
msgid "OUT" msgid "OUT"
msgstr "AUSGANG" msgstr "AUSGANG"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1604 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610
msgid "One line" msgid "One line"
msgstr "Einzeilig" msgstr "Einzeilig"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206
msgid "Open firewall zone settings" msgid "Open firewall zone settings"
msgstr "Firewall-Zonen-Einstellungen öffnen" msgstr "Firewall-Zonen-Einstellungen öffnen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211
msgid "" msgid ""
"OpenWrt does not write firewall events to the log until you turn logging on. " "OpenWrt does not write firewall events to the log until you turn logging on. "
"Live View only shows what the firewall already logs — it does not add allow/" "Live View only shows what the firewall already logs — it does not add allow/"
@@ -387,44 +391,44 @@ msgstr ""
"Live View only shows what the firewall already logs — it does not add allow/" "Live View only shows what the firewall already logs — it does not add allow/"
"deny rules." "deny rules."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1632 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1638
msgid "Palette" msgid "Palette"
msgstr "Palette" msgstr "Palette"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:989 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1554 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1560
msgid "Pause" msgid "Pause"
msgstr "Pause" msgstr "Pause"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:987 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
msgid "Paused" msgid "Paused"
msgstr "Pausiert" msgstr "Pausiert"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38
msgid "Proto" msgid "Proto"
msgstr "Protokoll" msgstr "Protokoll"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674
msgid "Protocol — common values" msgid "Protocol — common values"
msgstr "Protokoll — häufige Werte" msgstr "Protokoll — häufige Werte"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1656
msgid "Quick search" msgid "Quick search"
msgstr "Schnellsuche" msgstr "Schnellsuche"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91
msgid "Remove filter" msgid "Remove filter"
msgstr "Filter entfernen" msgstr "Filter entfernen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:989 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
msgid "Resume" msgid "Resume"
msgstr "Fortsetzen" msgstr "Fortsetzen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1625 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1631
msgid "Row tint" msgid "Row tint"
msgstr "Zeileneinfärbung" msgstr "Zeileneinfärbung"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1721
msgid "" msgid ""
"Row tint shows pass/deny row backgrounds when checked. Choose Classic (green/" "Row tint shows pass/deny row backgrounds when checked. Choose Classic (green/"
"red, default) or Accessible (teal/orange). Action text stays colored either " "red, default) or Accessible (teal/orange). Action text stays colored either "
@@ -434,7 +438,7 @@ msgstr ""
"Klassisch (grün/rot, Standard) oder Barrierefrei (teal/orange). Aktionstext " "Klassisch (grün/rot, Standard) oder Barrierefrei (teal/orange). Aktionstext "
"bleibt in beiden Fällen farbig." "bleibt in beiden Fällen farbig."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1544 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1550
msgid "" msgid ""
"Row tint used a local color fallback because the active LuCI theme did not " "Row tint used a local color fallback because the active LuCI theme did not "
"apply pass/deny backgrounds." "apply pass/deny backgrounds."
@@ -442,51 +446,51 @@ msgstr ""
"Die Zeileneinfärbung verwendete einen lokalen Farbfallback, da das aktive " "Die Zeileneinfärbung verwendete einen lokalen Farbfallback, da das aktive "
"LuCI-Theme keine Erlauben/Verweigern-Hintergründe anwendet." "LuCI-Theme keine Erlauben/Verweigern-Hintergründe anwendet."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33
msgid "Rule" msgid "Rule"
msgstr "Regel" msgstr "Regel"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:934 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:527
msgid "Rule labels incomplete — map truncated" msgid "Rule labels incomplete — map truncated"
msgstr "Rule labels incomplete — map truncated" msgstr "Rule labels incomplete — map truncated"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:938 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:531
msgid "Rule labels unavailable" msgid "Rule labels unavailable"
msgstr "Rule labels unavailable" msgstr "Rule labels unavailable"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:936 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:529
msgid "Rule labels unavailable — temp file failed" msgid "Rule labels unavailable — temp file failed"
msgstr "Rule labels unavailable — temp file failed" msgstr "Rule labels unavailable — temp file failed"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41
msgid "SPort" msgid "SPort"
msgstr "Quell-Port" msgstr "Quell-Port"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1644 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650
msgid "Show hostnames" msgid "Show hostnames"
msgstr "Hostnamen anzeigen" msgstr "Hostnamen anzeigen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1623 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1629
msgid "Show pass/deny row background colors" msgid "Show pass/deny row background colors"
msgstr "Pass/Deny-Zeilenhintergrundfarben anzeigen" msgstr "Pass/Deny-Zeilenhintergrundfarben anzeigen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1570 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1576
msgid "Simple" msgid "Simple"
msgstr "Einfach" msgstr "Einfach"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39
msgid "Source" msgid "Source"
msgstr "Quelle" msgstr "Quelle"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1683 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1689
msgid "Source IP contains (! to exclude)" msgid "Source IP contains (! to exclude)"
msgstr "Quell-IP enthält (! zum Ausschließen)" msgstr "Quell-IP enthält (! zum Ausschließen)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1684 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1690
msgid "Source port (! to exclude)" msgid "Source port (! to exclude)"
msgstr "Quell-Port (! zum Ausschließen)" msgstr "Quell-Port (! zum Ausschließen)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1711 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717
msgid "" msgid ""
"The rate shown for WAN logging is the firewall zone log_limit. OpenWrt " "The rate shown for WAN logging is the firewall zone log_limit. OpenWrt "
"defaults to 10/minute when no explicit limit is configured; fwlive does not " "defaults to 10/minute when no explicit limit is configured; fwlive does not "
@@ -496,7 +500,7 @@ msgstr ""
"OpenWrt-Standard ist 10/Minute ohne explizites Limit; fwlive setzt diese " "OpenWrt-Standard ist 10/Minute ohne explizites Limit; fwlive setzt diese "
"Grenze nicht." "Grenze nicht."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1708 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714
msgid "" msgid ""
"The table updates automatically when your firewall logs traffic. Use Pause " "The table updates automatically when your firewall logs traffic. Use Pause "
"if it moves too fast." "if it moves too fast."
@@ -504,15 +508,15 @@ msgstr ""
"Die Tabelle aktualisiert sich automatisch, wenn Ihre Firewall Verkehr " "Die Tabelle aktualisiert sich automatisch, wenn Ihre Firewall Verkehr "
"protokolliert. Pause nutzen, wenn es zu schnell wird." "protokolliert. Pause nutzen, wenn es zu schnell wird."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1551
msgid "Theme tint fallback" msgid "Theme tint fallback"
msgstr "Theme-Farb-Fallback" msgstr "Theme-Farb-Fallback"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31
msgid "Time" msgid "Time"
msgstr "Zeit" msgstr "Zeit"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219
msgid "" msgid ""
"Turns on WAN zone drop/reject logging (same as Network → Firewall → wan → " "Turns on WAN zone drop/reject logging (same as Network → Firewall → wan → "
"Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal " "Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal "
@@ -522,25 +526,25 @@ msgstr ""
"Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal " "Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal "
"LAN browsing is not logged." "LAN browsing is not logged."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126
msgid "Undo:" msgid "Undo:"
msgstr "Undo:" msgstr "Undo:"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1722
msgid "Use Detail for all columns (flags, length, raw message)." msgid "Use Detail for all columns (flags, length, raw message)."
msgstr "" msgstr ""
"Verwenden Sie „Detail“ für alle Spalten (Flags, Länge, rohe Nachricht)." "Verwenden Sie „Detail“ für alle Spalten (Flags, Länge, rohe Nachricht)."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1558 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1564
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1562 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1568
msgid "View" msgid "View"
msgstr "Ansicht" msgstr "Ansicht"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:598 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:615
msgid "WAN drop/reject logging is off." msgid "WAN drop/reject logging is off."
msgstr "WAN drop/reject logging is off." msgstr "WAN drop/reject logging is off."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204
msgid "" msgid ""
"WAN drop/reject logging is on. Blocked inbound WAN traffic will show up " "WAN drop/reject logging is on. Blocked inbound WAN traffic will show up "
"here. Normal LAN browsing will not." "here. Normal LAN browsing will not."
@@ -548,7 +552,7 @@ msgstr ""
"WAN drop/reject logging is on. Blocked inbound WAN traffic will show up " "WAN drop/reject logging is on. Blocked inbound WAN traffic will show up "
"here. Normal LAN browsing will not." "here. Normal LAN browsing will not."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:562 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:579
msgid "" msgid ""
"WAN drop/reject logging is on. Blocked inbound traffic should appear here as " "WAN drop/reject logging is on. Blocked inbound traffic should appear here as "
"it happens — not normal LAN browsing." "it happens — not normal LAN browsing."
@@ -556,157 +560,157 @@ msgstr ""
"WAN drop/reject logging is on. Blocked inbound traffic should appear here as " "WAN drop/reject logging is on. Blocked inbound traffic should appear here as "
"it happens — not normal LAN browsing." "it happens — not normal LAN browsing."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:564 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:581
msgid "WAN logging is already enabled." msgid "WAN logging is already enabled."
msgstr "WAN-Protokollierung ist bereits aktiviert." msgstr "WAN-Protokollierung ist bereits aktiviert."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88
msgid "WAN logging on" msgid "WAN logging on"
msgstr "WAN-Protokollierung: EIN" msgstr "WAN-Protokollierung: EIN"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94
msgid "WAN logging on (%s). Click to disable." msgid "WAN logging on (%s). Click to disable."
msgstr "WAN-Protokollierung: EIN (%s). Klicken zum Deaktivieren." msgstr "WAN-Protokollierung: EIN (%s). Klicken zum Deaktivieren."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77
msgid "WAN logging unavailable: missing kernel log modules" msgid "WAN logging unavailable: missing kernel log modules"
msgstr "WAN-Protokollierung nicht verfügbar: fehlende Kernel-Log-Module" msgstr "WAN-Protokollierung nicht verfügbar: fehlende Kernel-Log-Module"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70
msgid "WAN logging unavailable: no WAN zone" msgid "WAN logging unavailable: no WAN zone"
msgstr "WAN-Protokollierung nicht verfügbar: keine WAN-Zone" msgstr "WAN-Protokollierung nicht verfügbar: keine WAN-Zone"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203
msgid "Waiting for firewall events" msgid "Waiting for firewall events"
msgstr "Waiting for firewall events" msgstr "Waiting for firewall events"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:987 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1539 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545
msgid "Watching" msgid "Watching"
msgstr "Beobachtet" msgstr "Beobachtet"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1597 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1603
msgid "Wrap" msgid "Wrap"
msgstr "Umbrechen" msgstr "Umbrechen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123
msgid "allow/deny rules, LAN logging, or anything else." msgid "allow/deny rules, LAN logging, or anything else."
msgstr "allow/deny rules, LAN logging, or anything else." msgstr "allow/deny rules, LAN logging, or anything else."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:811 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:828
msgid "buffer full" msgid "buffer full"
msgstr "Puffer voll" msgstr "Puffer voll"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81
msgid "default 10/minute" msgid "default 10/minute"
msgstr "Standard 10/Minute" msgstr "Standard 10/Minute"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28
msgid "is" msgid "is"
msgstr "ist" msgstr "ist"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:806 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:823
msgid "loading buffer" msgid "loading buffer"
msgstr "Lade Puffer" msgstr "Lade Puffer"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:906 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:923
msgid "loading…" msgid "loading…"
msgstr "loading…" msgstr "loading…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44
msgid "not" msgid "not"
msgstr "nicht" msgstr "nicht"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1107
msgid "not AH" msgid "not AH"
msgstr "nicht AH" msgstr "nicht AH"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1106
msgid "not ESP" msgid "not ESP"
msgstr "nicht ESP" msgstr "nicht ESP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1105
msgid "not GRE" msgid "not GRE"
msgstr "nicht GRE" msgstr "nicht GRE"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1096 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102
msgid "not ICMP" msgid "not ICMP"
msgstr "nicht ICMP" msgstr "nicht ICMP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1097 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1103
msgid "not ICMPv6" msgid "not ICMPv6"
msgstr "nicht ICMPv6" msgstr "nicht ICMPv6"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1098 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1104
msgid "not IGMP" msgid "not IGMP"
msgstr "nicht IGMP" msgstr "nicht IGMP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1108
msgid "not SCTP" msgid "not SCTP"
msgstr "nicht SCTP" msgstr "nicht SCTP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1094 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100
msgid "not TCP" msgid "not TCP"
msgstr "nicht TCP" msgstr "nicht TCP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1095 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101
msgid "not UDP" msgid "not UDP"
msgstr "nicht UDP" msgstr "nicht UDP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1660 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1666
msgid "not block" msgid "not block"
msgstr "nicht blockieren" msgstr "nicht blockieren"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1659 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1665
msgid "not drop" msgid "not drop"
msgstr "nicht verwerfen" msgstr "nicht verwerfen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1664
msgid "not pass" msgid "not pass"
msgstr "nicht erlauben" msgstr "nicht erlauben"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1661 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1667
msgid "not reject" msgid "not reject"
msgstr "nicht zurückweisen" msgstr "nicht zurückweisen"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1662 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668
msgid "not unknown" msgid "not unknown"
msgstr "nicht unbekannt" msgstr "nicht unbekannt"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1673 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1679
msgid "or type…" msgid "or type…"
msgstr "oder tippen…" msgstr "oder tippen…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:813 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:830
msgid "render paused (high rate)" msgid "render paused (high rate)"
msgstr "Rendering pausiert (hohe Rate)" msgstr "Rendering pausiert (hohe Rate)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:815 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:832
msgid "scroll frozen — scroll to top to follow live" msgid "scroll frozen — scroll to top to follow live"
msgstr "scroll frozen — scroll to top to follow live" msgstr "scroll frozen — scroll to top to follow live"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118
msgid "sets log on the WAN firewall zone and reloads the firewall." msgid "sets log on the WAN firewall zone and reloads the firewall."
msgstr "sets log on the WAN firewall zone and reloads the firewall." msgstr "sets log on the WAN firewall zone and reloads the firewall."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258
msgid "then ping the router." msgid "then ping the router."
msgstr "dann den Router anpingen." msgstr "dann den Router anpingen."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128
msgid "turn it back off with the WAN logging on control on the watch strip." msgid "turn it back off with the WAN logging on control on the watch strip."
msgstr "turn it back off with the WAN logging on control on the watch strip." msgstr "turn it back off with the WAN logging on control on the watch strip."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:513 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:512
msgid "using fw4" msgid "using fw4"
msgstr "mit fw4" msgstr "mit fw4"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:511 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:510
msgid "using iptables" msgid "using iptables"
msgstr "mit iptables" msgstr "mit iptables"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89
msgid "· %s" msgid "· %s"
msgstr "· %s" msgstr "· %s"
+168 -164
View File
@@ -13,82 +13,82 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:909 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:926
msgid "%d matching · %d/%d stored" msgid "%d matching · %d/%d stored"
msgstr "%d matching · %d/%d stored" msgstr "%d matching · %d/%d stored"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:912 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:929
msgid "0 matching · %d/%d stored" msgid "0 matching · %d/%d stored"
msgstr "0 matching · %d/%d stored" msgstr "0 matching · %d/%d stored"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251
msgid "Accessible (teal/orange)" msgid "Accessible (teal/orange)"
msgstr "Доступный (бирюзовый/оранжевый)" msgstr "Доступный (бирюзовый/оранжевый)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32
msgid "Action" msgid "Action"
msgstr "Действие" msgstr "Действие"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:601 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:618
msgid "Administrator access is required to disable logging." msgid "Administrator access is required to disable logging."
msgstr "" msgstr ""
"Для отключения журналирования требуются права аÐ" "Для отключения журналирования требуются права аÐ"
"´Ð¼Ð¸Ð½Ð¸ÑÑ‚ратора." "´Ð¼Ð¸Ð½Ð¸ÑÑ‚ратора."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:586
msgid "Administrator access is required to enable logging." msgid "Administrator access is required to enable logging."
msgstr "" msgstr ""
"Для включения журналирования требуются права аÐ" "Для включения журналирования требуются права аÐ"
"´Ð¼Ð¸Ð½Ð¸ÑÑ‚ратора." "´Ð¼Ð¸Ð½Ð¸ÑÑ‚ратора."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1092
msgid "Also seen" msgid "Also seen"
msgstr "Также встречаются" msgstr "Также встречаются"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:554 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:571
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:590 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:607
msgid "Another change is staged for the firewall; apply or revert it first." msgid "Another change is staged for the firewall; apply or revert it first."
msgstr "" msgstr ""
"В брандмауэре уже есть другое незафиксированное изменение; сначала примените " "В брандмауэре уже есть другое незафиксированное изменение; сначала примените "
"или отмените его." "или отмените его."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1652 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658
msgid "Any action" msgid "Any action"
msgstr "Любое действие" msgstr "Любое действие"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1079 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1085
msgid "Any protocol" msgid "Any protocol"
msgstr "Любой протокол" msgstr "Любой протокол"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113
msgid "Before you enable logging" msgid "Before you enable logging"
msgstr "Before you enable logging" msgstr "Before you enable logging"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:552 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569
msgid "Cannot enable logging until kernel log modules are installed." msgid "Cannot enable logging until kernel log modules are installed."
msgstr "" msgstr ""
"Невозможно включить журналирование, пока не " "Невозможно включить журналирование, пока не "
"установлены модули журнала ядра." "установлены модули журнала ядра."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116
msgid "Changes:" msgid "Changes:"
msgstr "Changes:" msgstr "Changes:"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250
msgid "Classic (green/red)" msgid "Classic (green/red)"
msgstr "Классический (зелёный/красный)" msgstr "Классический (зелёный/красный)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1636 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1642
msgid "Classic uses green/red; Accessible uses teal/orange" msgid "Classic uses green/red; Accessible uses teal/orange"
msgstr "" msgstr ""
"Классический — зелёный/красный; доступный — " "Классический — зелёный/красный; доступный — "
"бирюзовый/оранжевый" "бирюзовый/оранжевый"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116
msgid "Clear all" msgid "Clear all"
msgstr "Очистить всё" msgstr "Очистить всё"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1698
msgid "" msgid ""
"Click a cell to filter · ≠ on a chip to exclude · Ctrl+click a rule for " "Click a cell to filter · ≠ on a chip to exclude · Ctrl+click a rule for "
"firewall settings · in Simple view, click a row for the full message" "firewall settings · in Simple view, click a row for the full message"
@@ -97,7 +97,7 @@ msgstr ""
"правилу для настроек МЭ · в Простом виде щёлкните строку для полного " "правилу для настроек МЭ · в Простом виде щёлкните строку для полного "
"сообщения" "сообщения"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1713 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1719
msgid "" msgid ""
"Click a row (Time or other non-link cells) to see the full log line (Simple " "Click a row (Time or other non-link cells) to see the full log line (Simple "
"view)." "view)."
@@ -105,11 +105,11 @@ msgstr ""
"Щёлкните строку (Время или другие ячейки без ссылки), чтобы увидеть полную " "Щёлкните строку (Время или другие ячейки без ссылки), чтобы увидеть полную "
"строку журнала (Простой вид)." "строку журнала (Простой вид)."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113
msgid "Click a row for the full message" msgid "Click a row for the full message"
msgstr "Щёлкните строку для полного сообщения" msgstr "Щёлкните строку для полного сообщения"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1720
msgid "" msgid ""
"Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a " "Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a "
"chip) to exclude." "chip) to exclude."
@@ -117,86 +117,86 @@ msgstr ""
"Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a " "Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a "
"chip) to exclude." "chip) to exclude."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1080 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086
msgid "Common" msgid "Common"
msgstr "Частые" msgstr "Частые"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:927 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:944
msgid "Connection lost — retrying…" msgid "Connection lost — retrying…"
msgstr "Connection lost — retrying…" msgstr "Connection lost — retrying…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:592 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:609
msgid "Could not disable logging." msgid "Could not disable logging."
msgstr "Не удалось отключить журналирование." msgstr "Не удалось отключить журналирование."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:556 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573
msgid "Could not enable logging." msgid "Could not enable logging."
msgstr "Не удалось включить журналирование." msgstr "Не удалось включить журналирование."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680
msgid "Custom protocol (prefix ! to exclude). Overrides the menu when set." msgid "Custom protocol (prefix ! to exclude). Overrides the menu when set."
msgstr "Свой протокол (! для исключения). Переопределяет меню, если задан." msgstr "Свой протокол (! для исключения). Переопределяет меню, если задан."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42
msgid "DPort" msgid "DPort"
msgstr "Порт назн." msgstr "Порт назн."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40
msgid "Destination" msgid "Destination"
msgstr "Назначение" msgstr "Назначение"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1685 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1691
msgid "Destination IP contains (! to exclude)" msgid "Destination IP contains (! to exclude)"
msgstr "IP назначения содержит (! для исключения)" msgstr "IP назначения содержит (! для исключения)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692
msgid "Destination port (! to exclude)" msgid "Destination port (! to exclude)"
msgstr "Порт назначения (! для исключения)" msgstr "Порт назначения (! для исключения)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1577 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1583
msgid "Detail" msgid "Detail"
msgstr "Подробно" msgstr "Подробно"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37
msgid "Dir" msgid "Dir"
msgstr "Напр." msgstr "Напр."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85
msgid "Disabling…" msgid "Disabling…"
msgstr "Disabling…" msgstr "Disabling…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1616
msgid "Display options" msgid "Display options"
msgstr "Параметры отображения" msgstr "Параметры отображения"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1710 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716
msgid "Display options on the bar set Limit, row tint, palette, and hostnames." msgid "Display options on the bar set Limit, row tint, palette, and hostnames."
msgstr "" msgstr ""
"Параметры отображения на панели задают лимит, окраску строк, палитру и имена " "Параметры отображения на панели задают лимит, окраску строк, палитру и имена "
"узлов." "узлов."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121
msgid "Does not change:" msgid "Does not change:"
msgstr "Does not change:" msgstr "Does not change:"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138
msgid "Dont show this again" msgid "Dont show this again"
msgstr "Dont show this again" msgstr "Dont show this again"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enable WAN drop/reject logging" msgid "Enable WAN drop/reject logging"
msgstr "Enable WAN drop/reject logging" msgstr "Enable WAN drop/reject logging"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104
msgid "Enable WAN zone drop/reject logging (same as Network → Firewall)." msgid "Enable WAN zone drop/reject logging (same as Network → Firewall)."
msgstr "Enable WAN zone drop/reject logging (same as Network → Firewall)." msgstr "Enable WAN zone drop/reject logging (same as Network → Firewall)."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
msgid "Enable logging" msgid "Enable logging"
msgstr "Включить журнал" msgstr "Включить журнал"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1709 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715
msgid "" msgid ""
"Enable logging turns on WAN zone drop/reject logging only (same as Network → " "Enable logging turns on WAN zone drop/reject logging only (same as Network → "
"Firewall). It does not add rules or log normal LAN browsing." "Firewall). It does not add rules or log normal LAN browsing."
@@ -204,57 +204,57 @@ msgstr ""
"Enable logging turns on WAN zone drop/reject logging only (same as Network → " "Enable logging turns on WAN zone drop/reject logging only (same as Network → "
"Firewall). It does not add rules or log normal LAN browsing." "Firewall). It does not add rules or log normal LAN browsing."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enabling…" msgid "Enabling…"
msgstr "Enabling…" msgstr "Enabling…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1093 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099
msgid "Exclude" msgid "Exclude"
msgstr "Исключить" msgstr "Исключить"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Exclude instead" msgid "Exclude instead"
msgstr "Исключить вместо этого" msgstr "Исключить вместо этого"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71
msgid "Filter by %s" msgid "Filter by %s"
msgstr "Фильтр по %s" msgstr "Фильтр по %s"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136
msgid "Filter by interface" msgid "Filter by interface"
msgstr "Фильтр по интерфейсу" msgstr "Фильтр по интерфейсу"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112
msgid "Filter logs by rule (hint: %s). Ctrl+click to open firewall settings." msgid "Filter logs by rule (hint: %s). Ctrl+click to open firewall settings."
msgstr "" msgstr ""
"Фильтр журналов по правилу (подсказка: %s). " "Фильтр журналов по правилу (подсказка: %s). "
"Ctrl+клик открывает настройки файрвола." "Ctrl+клик открывает настройки файрвола."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1534 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1540
#: openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3
msgid "Firewall Live View" msgid "Firewall Live View"
msgstr "Просмотр файрвола в реальном времени" msgstr "Просмотр файрвола в реальном времени"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43
msgid "Flags" msgid "Flags"
msgstr "Флаги" msgstr "Флаги"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45
msgid "Flow" msgid "Flow"
msgstr "Поток" msgstr "Поток"
#: openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3
msgid "Grant access to firewall live log view" msgid "Grant access to firewall live log view"
msgstr "Предоставить доступ к живому просмотру журнала межсетевого экрана" msgstr "Предоставить доступ к живому просмотру журнала межсетевого экрана"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1706 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1712
msgid "Help" msgid "Help"
msgstr "Справка" msgstr "Справка"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:878 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:895
msgid "" msgid ""
"High event rate — table refresh is throttled to protect the browser. The " "High event rate — table refresh is throttled to protect the browser. The "
"buffer still updates; refresh will resume automatically." "buffer still updates; refresh will resume automatically."
@@ -262,15 +262,15 @@ msgstr ""
"High event rate — table refresh is throttled to protect the browser. The " "High event rate — table refresh is throttled to protect the browser. The "
"buffer still updates; refresh will resume automatically." "buffer still updates; refresh will resume automatically."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1084 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1090
msgid "ICMPv6" msgid "ICMPv6"
msgstr "ICMPv6" msgstr "ICMPv6"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35
msgid "IN" msgid "IN"
msgstr "ВХОД" msgstr "ВХОД"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1723
msgid "" msgid ""
"If Row tint looks missing, the active LuCI theme may omit success/error or " "If Row tint looks missing, the active LuCI theme may omit success/error or "
"info/warn CSS variables; fwlive falls back to local colors (air-gapped, no " "info/warn CSS variables; fwlive falls back to local colors (air-gapped, no "
@@ -280,7 +280,7 @@ msgstr ""
"активная тема LuCI может не содержать CSS-" "активная тема LuCI может не содержать CSS-"
"переменные успе" "переменные успе"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205
msgid "" msgid ""
"If the WAN is quiet, wait for probes or use the optional ping check in " "If the WAN is quiet, wait for probes or use the optional ping check in "
"Help / the enabling-logs guide." "Help / the enabling-logs guide."
@@ -288,28 +288,28 @@ msgstr ""
"If the WAN is quiet, wait for probes or use the optional ping check in " "If the WAN is quiet, wait for probes or use the optional ping check in "
"Help / the enabling-logs guide." "Help / the enabling-logs guide."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Include instead" msgid "Include instead"
msgstr "Включить вместо этого" msgstr "Включить вместо этого"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34
msgid "Interface" msgid "Interface"
msgstr "Интерфейс" msgstr "Интерфейс"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1682 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1688
msgid "Interface (prefix ! to exclude)" msgid "Interface (prefix ! to exclude)"
msgstr "Интерфейс (! в начале для исключения)" msgstr "Интерфейс (! в начале для исключения)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232
msgid "Ill configure this under Network → Firewall" msgid "Ill configure this under Network → Firewall"
msgstr "Ill configure this under Network → Firewall" msgstr "Ill configure this under Network → Firewall"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194
msgid "Kernel log modules missing" msgid "Kernel log modules missing"
msgstr "Kernel log modules missing" msgstr "Kernel log modules missing"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195
msgid "" msgid ""
"Kernel netfilter log modules are missing. Install kmod-nf-log-ipv4 and kmod-" "Kernel netfilter log modules are missing. Install kmod-nf-log-ipv4 and kmod-"
"nf-log-ipv6 (or kmod-nf-log / kmod-nf-log6), then reload the firewall." "nf-log-ipv6 (or kmod-nf-log / kmod-nf-log6), then reload the firewall."
@@ -318,69 +318,73 @@ msgstr ""
"kmod-nf-log-ipv4 и kmod-nf-log-ipv6 (или kmod-nf-log / kmod-nf-log6), " "kmod-nf-log-ipv4 и kmod-nf-log-ipv6 (или kmod-nf-log / kmod-nf-log6), "
"затем перезагрузите файрвол." "затем перезагрузите файрвол."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44
msgid "Len" msgid "Len"
msgstr "Длина" msgstr "Длина"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1613 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1619
msgid "Limit" msgid "Limit"
msgstr "Лимит" msgstr "Лимит"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:536
msgid "Limited diagnostics — timeout command missing"
msgstr "Ограниченная диагностика — отсутствует команда timeout"
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210
msgid "Logging is off on this router" msgid "Logging is off on this router"
msgstr "Logging is off on this router" msgstr "Logging is off on this router"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256
msgid "Manual test (System → Terminal):" msgid "Manual test (System → Terminal):"
msgstr "Ручной тест (Система → Терминал):" msgstr "Ручной тест (Система → Терминал):"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1584 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1590
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1589 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1595
msgid "Message" msgid "Message"
msgstr "Сообщение" msgstr "Сообщение"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686
msgid "More filters" msgid "More filters"
msgstr "Больше фильтров" msgstr "Больше фильтров"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37
msgid "Network → Firewall" msgid "Network → Firewall"
msgstr "Network → Firewall" msgstr "Network → Firewall"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187
msgid "" msgid ""
"No WAN firewall zone found in /etc/config/firewall. Configure zones under" "No WAN firewall zone found in /etc/config/firewall. Configure zones under"
msgstr "" msgstr ""
"Зона WAN брандмауэра не найдена в /etc/config/firewall. Настройте зоны в" "Зона WAN брандмауэра не найдена в /etc/config/firewall. Настройте зоны в"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185
msgid "No WAN zone found" msgid "No WAN zone found"
msgstr "No WAN zone found" msgstr "No WAN zone found"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163
msgid "Not now" msgid "Not now"
msgstr "Not now" msgstr "Not now"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220
msgid "Nothing changes until you click Enable." msgid "Nothing changes until you click Enable."
msgstr "Nothing changes until you click Enable." msgstr "Nothing changes until you click Enable."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36
msgid "OUT" msgid "OUT"
msgstr "ВЫХОД" msgstr "ВЫХОД"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1604 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610
msgid "One line" msgid "One line"
msgstr "Одна строка" msgstr "Одна строка"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206
msgid "Open firewall zone settings" msgid "Open firewall zone settings"
msgstr "Открыть настройки зон файрвола" msgstr "Открыть настройки зон файрвола"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211
msgid "" msgid ""
"OpenWrt does not write firewall events to the log until you turn logging on. " "OpenWrt does not write firewall events to the log until you turn logging on. "
"Live View only shows what the firewall already logs — it does not add allow/" "Live View only shows what the firewall already logs — it does not add allow/"
@@ -390,44 +394,44 @@ msgstr ""
"Live View only shows what the firewall already logs — it does not add allow/" "Live View only shows what the firewall already logs — it does not add allow/"
"deny rules." "deny rules."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1632 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1638
msgid "Palette" msgid "Palette"
msgstr "Палитра" msgstr "Палитра"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:989 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1554 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1560
msgid "Pause" msgid "Pause"
msgstr "Пауза" msgstr "Пауза"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:987 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
msgid "Paused" msgid "Paused"
msgstr "Пауза" msgstr "Пауза"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38
msgid "Proto" msgid "Proto"
msgstr "Протокол" msgstr "Протокол"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674
msgid "Protocol — common values" msgid "Protocol — common values"
msgstr "Протокол — частые значения" msgstr "Протокол — частые значения"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1656
msgid "Quick search" msgid "Quick search"
msgstr "Быстрый поиск" msgstr "Быстрый поиск"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91
msgid "Remove filter" msgid "Remove filter"
msgstr "Удалить фильтр" msgstr "Удалить фильтр"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:989 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
msgid "Resume" msgid "Resume"
msgstr "Продолжить" msgstr "Продолжить"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1625 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1631
msgid "Row tint" msgid "Row tint"
msgstr "Цвет строк" msgstr "Цвет строк"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1721
msgid "" msgid ""
"Row tint shows pass/deny row backgrounds when checked. Choose Classic (green/" "Row tint shows pass/deny row backgrounds when checked. Choose Classic (green/"
"red, default) or Accessible (teal/orange). Action text stays colored either " "red, default) or Accessible (teal/orange). Action text stays colored either "
@@ -437,7 +441,7 @@ msgstr ""
"классический (зелёный/красный, по умолчанию) или доступный (бирюзовый/" "классический (зелёный/красный, по умолчанию) или доступный (бирюзовый/"
"оранжевый). Цвет текста действия сохраняется в любом случае." "оранжевый). Цвет текста действия сохраняется в любом случае."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1544 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1550
msgid "" msgid ""
"Row tint used a local color fallback because the active LuCI theme did not " "Row tint used a local color fallback because the active LuCI theme did not "
"apply pass/deny backgrounds." "apply pass/deny backgrounds."
@@ -446,51 +450,51 @@ msgstr ""
"локальный запасной цвет, так как активная тема " "локальный запасной цвет, так как активная тема "
"LuCI не применяет фон пропуска/отказа." "LuCI не применяет фон пропуска/отказа."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33
msgid "Rule" msgid "Rule"
msgstr "Правило" msgstr "Правило"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:934 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:527
msgid "Rule labels incomplete — map truncated" msgid "Rule labels incomplete — map truncated"
msgstr "Rule labels incomplete — map truncated" msgstr "Rule labels incomplete — map truncated"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:938 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:531
msgid "Rule labels unavailable" msgid "Rule labels unavailable"
msgstr "Rule labels unavailable" msgstr "Rule labels unavailable"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:936 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:529
msgid "Rule labels unavailable — temp file failed" msgid "Rule labels unavailable — temp file failed"
msgstr "Rule labels unavailable — temp file failed" msgstr "Rule labels unavailable — temp file failed"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41
msgid "SPort" msgid "SPort"
msgstr "Порт ист." msgstr "Порт ист."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1644 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650
msgid "Show hostnames" msgid "Show hostnames"
msgstr "Показывать имена " msgstr "Показывать имена "
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1623 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1629
msgid "Show pass/deny row background colors" msgid "Show pass/deny row background colors"
msgstr "Показывать цвета фона строк pass/deny" msgstr "Показывать цвета фона строк pass/deny"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1570 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1576
msgid "Simple" msgid "Simple"
msgstr "Простой" msgstr "Простой"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39
msgid "Source" msgid "Source"
msgstr "Источник" msgstr "Источник"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1683 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1689
msgid "Source IP contains (! to exclude)" msgid "Source IP contains (! to exclude)"
msgstr "IP источника содержит (! для исключения)" msgstr "IP источника содержит (! для исключения)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1684 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1690
msgid "Source port (! to exclude)" msgid "Source port (! to exclude)"
msgstr "Порт источника (! для исключения)" msgstr "Порт источника (! для исключения)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1711 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717
msgid "" msgid ""
"The rate shown for WAN logging is the firewall zone log_limit. OpenWrt " "The rate shown for WAN logging is the firewall zone log_limit. OpenWrt "
"defaults to 10/minute when no explicit limit is configured; fwlive does not " "defaults to 10/minute when no explicit limit is configured; fwlive does not "
@@ -500,7 +504,7 @@ msgstr ""
"умолчанию OpenWrt: 10/мин без явного лимита; fwlive " "умолчанию OpenWrt: 10/мин без явного лимита; fwlive "
"сам лимит не задаёт." "сам лимит не задаёт."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1708 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714
msgid "" msgid ""
"The table updates automatically when your firewall logs traffic. Use Pause " "The table updates automatically when your firewall logs traffic. Use Pause "
"if it moves too fast." "if it moves too fast."
@@ -509,15 +513,15 @@ msgstr ""
"файрвол пишет в журнал. Используйте Паузу, если " "файрвол пишет в журнал. Используйте Паузу, если "
"слишком быстро." "слишком быстро."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1551
msgid "Theme tint fallback" msgid "Theme tint fallback"
msgstr "Запасной цвет темы" msgstr "Запасной цвет темы"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31
msgid "Time" msgid "Time"
msgstr "Время" msgstr "Время"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219
msgid "" msgid ""
"Turns on WAN zone drop/reject logging (same as Network → Firewall → wan → " "Turns on WAN zone drop/reject logging (same as Network → Firewall → wan → "
"Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal " "Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal "
@@ -527,25 +531,25 @@ msgstr ""
"Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal " "Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal "
"LAN browsing is not logged." "LAN browsing is not logged."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126
msgid "Undo:" msgid "Undo:"
msgstr "Undo:" msgstr "Undo:"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1722
msgid "Use Detail for all columns (flags, length, raw message)." msgid "Use Detail for all columns (flags, length, raw message)."
msgstr "" msgstr ""
"Используйте «Подробно» для всех столбцов (флаги, длина, исходное сообщение)." "Используйте «Подробно» для всех столбцов (флаги, длина, исходное сообщение)."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1558 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1564
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1562 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1568
msgid "View" msgid "View"
msgstr "Вид" msgstr "Вид"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:598 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:615
msgid "WAN drop/reject logging is off." msgid "WAN drop/reject logging is off."
msgstr "WAN drop/reject logging is off." msgstr "WAN drop/reject logging is off."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204
msgid "" msgid ""
"WAN drop/reject logging is on. Blocked inbound WAN traffic will show up " "WAN drop/reject logging is on. Blocked inbound WAN traffic will show up "
"here. Normal LAN browsing will not." "here. Normal LAN browsing will not."
@@ -553,7 +557,7 @@ msgstr ""
"WAN drop/reject logging is on. Blocked inbound WAN traffic will show up " "WAN drop/reject logging is on. Blocked inbound WAN traffic will show up "
"here. Normal LAN browsing will not." "here. Normal LAN browsing will not."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:562 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:579
msgid "" msgid ""
"WAN drop/reject logging is on. Blocked inbound traffic should appear here as " "WAN drop/reject logging is on. Blocked inbound traffic should appear here as "
"it happens — not normal LAN browsing." "it happens — not normal LAN browsing."
@@ -561,159 +565,159 @@ msgstr ""
"WAN drop/reject logging is on. Blocked inbound traffic should appear here as " "WAN drop/reject logging is on. Blocked inbound traffic should appear here as "
"it happens — not normal LAN browsing." "it happens — not normal LAN browsing."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:564 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:581
msgid "WAN logging is already enabled." msgid "WAN logging is already enabled."
msgstr "WAN-журналирование уже включено." msgstr "WAN-журналирование уже включено."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88
msgid "WAN logging on" msgid "WAN logging on"
msgstr "WAN-журнал: ВКЛ" msgstr "WAN-журнал: ВКЛ"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94
msgid "WAN logging on (%s). Click to disable." msgid "WAN logging on (%s). Click to disable."
msgstr "WAN-журнал: ВКЛ (%s). Нажмите, чтобы отключить." msgstr "WAN-журнал: ВКЛ (%s). Нажмите, чтобы отключить."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77
msgid "WAN logging unavailable: missing kernel log modules" msgid "WAN logging unavailable: missing kernel log modules"
msgstr "" msgstr ""
"WAN-журналирование недоступно: отсутствуют модули " "WAN-журналирование недоступно: отсутствуют модули "
"журнала ядра" "журнала ядра"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70
msgid "WAN logging unavailable: no WAN zone" msgid "WAN logging unavailable: no WAN zone"
msgstr "WAN-журналирование недоступно: нет зоны WAN" msgstr "WAN-журналирование недоступно: нет зоны WAN"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203
msgid "Waiting for firewall events" msgid "Waiting for firewall events"
msgstr "Waiting for firewall events" msgstr "Waiting for firewall events"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:987 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1539 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545
msgid "Watching" msgid "Watching"
msgstr "Наблюдение" msgstr "Наблюдение"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1597 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1603
msgid "Wrap" msgid "Wrap"
msgstr "Перенос" msgstr "Перенос"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123
msgid "allow/deny rules, LAN logging, or anything else." msgid "allow/deny rules, LAN logging, or anything else."
msgstr "allow/deny rules, LAN logging, or anything else." msgstr "allow/deny rules, LAN logging, or anything else."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:811 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:828
msgid "buffer full" msgid "buffer full"
msgstr "буфер заполнен" msgstr "буфер заполнен"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81
msgid "default 10/minute" msgid "default 10/minute"
msgstr "по умолчанию 10/мин" msgstr "по умолчанию 10/мин"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28
msgid "is" msgid "is"
msgstr "есть" msgstr "есть"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:806 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:823
msgid "loading buffer" msgid "loading buffer"
msgstr "загрузка буфера" msgstr "загрузка буфера"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:906 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:923
msgid "loading…" msgid "loading…"
msgstr "loading…" msgstr "loading…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44
msgid "not" msgid "not"
msgstr "не" msgstr "не"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1107
msgid "not AH" msgid "not AH"
msgstr "не AH" msgstr "не AH"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1106
msgid "not ESP" msgid "not ESP"
msgstr "не ESP" msgstr "не ESP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1105
msgid "not GRE" msgid "not GRE"
msgstr "не GRE" msgstr "не GRE"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1096 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102
msgid "not ICMP" msgid "not ICMP"
msgstr "не ICMP" msgstr "не ICMP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1097 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1103
msgid "not ICMPv6" msgid "not ICMPv6"
msgstr "не ICMPv6" msgstr "не ICMPv6"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1098 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1104
msgid "not IGMP" msgid "not IGMP"
msgstr "не IGMP" msgstr "не IGMP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1108
msgid "not SCTP" msgid "not SCTP"
msgstr "не SCTP" msgstr "не SCTP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1094 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100
msgid "not TCP" msgid "not TCP"
msgstr "не TCP" msgstr "не TCP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1095 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101
msgid "not UDP" msgid "not UDP"
msgstr "не UDP" msgstr "не UDP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1660 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1666
msgid "not block" msgid "not block"
msgstr "не блокировать" msgstr "не блокировать"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1659 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1665
msgid "not drop" msgid "not drop"
msgstr "не отбрасывать" msgstr "не отбрасывать"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1664
msgid "not pass" msgid "not pass"
msgstr "не пропускать" msgstr "не пропускать"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1661 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1667
msgid "not reject" msgid "not reject"
msgstr "не отклонять" msgstr "не отклонять"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1662 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668
msgid "not unknown" msgid "not unknown"
msgstr "не неизвестно" msgstr "не неизвестно"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1673 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1679
msgid "or type…" msgid "or type…"
msgstr "или введите…" msgstr "или введите…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:813 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:830
msgid "render paused (high rate)" msgid "render paused (high rate)"
msgstr "рендеринг приостановлен (высокая частота)" msgstr "рендеринг приостановлен (высокая частота)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:815 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:832
msgid "scroll frozen — scroll to top to follow live" msgid "scroll frozen — scroll to top to follow live"
msgstr "scroll frozen — scroll to top to follow live" msgstr "scroll frozen — scroll to top to follow live"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118
msgid "sets log on the WAN firewall zone and reloads the firewall." msgid "sets log on the WAN firewall zone and reloads the firewall."
msgstr "sets log on the WAN firewall zone and reloads the firewall." msgstr "sets log on the WAN firewall zone and reloads the firewall."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258
msgid "then ping the router." msgid "then ping the router."
msgstr "затем выполните ping маршрутизатора." msgstr "затем выполните ping маршрутизатора."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128
msgid "turn it back off with the WAN logging on control on the watch strip." msgid "turn it back off with the WAN logging on control on the watch strip."
msgstr "turn it back off with the WAN logging on control on the watch strip." msgstr "turn it back off with the WAN logging on control on the watch strip."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:513 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:512
msgid "using fw4" msgid "using fw4"
msgstr "используется fw4" msgstr "используется fw4"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:511 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:510
msgid "using iptables" msgid "using iptables"
msgstr "используется iptables" msgstr "используется iptables"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89
msgid "· %s" msgid "· %s"
msgstr "· %s" msgstr "· %s"
+168 -164
View File
@@ -1,648 +1,652 @@
msgid "" msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8" msgstr "Content-Type: text/plain; charset=UTF-8"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:909 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:926
msgid "%d matching · %d/%d stored" msgid "%d matching · %d/%d stored"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:912 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:929
msgid "0 matching · %d/%d stored" msgid "0 matching · %d/%d stored"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251
msgid "Accessible (teal/orange)" msgid "Accessible (teal/orange)"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32
msgid "Action" msgid "Action"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:601 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:618
msgid "Administrator access is required to disable logging." msgid "Administrator access is required to disable logging."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:586
msgid "Administrator access is required to enable logging." msgid "Administrator access is required to enable logging."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1092
msgid "Also seen" msgid "Also seen"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:554 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:571
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:590 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:607
msgid "Another change is staged for the firewall; apply or revert it first." msgid "Another change is staged for the firewall; apply or revert it first."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1652 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658
msgid "Any action" msgid "Any action"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1079 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1085
msgid "Any protocol" msgid "Any protocol"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113
msgid "Before you enable logging" msgid "Before you enable logging"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:552 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569
msgid "Cannot enable logging until kernel log modules are installed." msgid "Cannot enable logging until kernel log modules are installed."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116
msgid "Changes:" msgid "Changes:"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250
msgid "Classic (green/red)" msgid "Classic (green/red)"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1636 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1642
msgid "Classic uses green/red; Accessible uses teal/orange" msgid "Classic uses green/red; Accessible uses teal/orange"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116
msgid "Clear all" msgid "Clear all"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1698
msgid "" msgid ""
"Click a cell to filter · ≠ on a chip to exclude · Ctrl+click a rule for " "Click a cell to filter · ≠ on a chip to exclude · Ctrl+click a rule for "
"firewall settings · in Simple view, click a row for the full message" "firewall settings · in Simple view, click a row for the full message"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1713 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1719
msgid "" msgid ""
"Click a row (Time or other non-link cells) to see the full log line (Simple " "Click a row (Time or other non-link cells) to see the full log line (Simple "
"view)." "view)."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113
msgid "Click a row for the full message" msgid "Click a row for the full message"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1720
msgid "" msgid ""
"Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a " "Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a "
"chip) to exclude." "chip) to exclude."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1080 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086
msgid "Common" msgid "Common"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:927 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:944
msgid "Connection lost — retrying…" msgid "Connection lost — retrying…"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:592 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:609
msgid "Could not disable logging." msgid "Could not disable logging."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:556 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573
msgid "Could not enable logging." msgid "Could not enable logging."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680
msgid "Custom protocol (prefix ! to exclude). Overrides the menu when set." msgid "Custom protocol (prefix ! to exclude). Overrides the menu when set."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42
msgid "DPort" msgid "DPort"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40
msgid "Destination" msgid "Destination"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1685 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1691
msgid "Destination IP contains (! to exclude)" msgid "Destination IP contains (! to exclude)"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692
msgid "Destination port (! to exclude)" msgid "Destination port (! to exclude)"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1577 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1583
msgid "Detail" msgid "Detail"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37
msgid "Dir" msgid "Dir"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85
msgid "Disabling…" msgid "Disabling…"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1616
msgid "Display options" msgid "Display options"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1710 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716
msgid "Display options on the bar set Limit, row tint, palette, and hostnames." msgid "Display options on the bar set Limit, row tint, palette, and hostnames."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121
msgid "Does not change:" msgid "Does not change:"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138
msgid "Dont show this again" msgid "Dont show this again"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enable WAN drop/reject logging" msgid "Enable WAN drop/reject logging"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104
msgid "Enable WAN zone drop/reject logging (same as Network → Firewall)." msgid "Enable WAN zone drop/reject logging (same as Network → Firewall)."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
msgid "Enable logging" msgid "Enable logging"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1709 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715
msgid "" msgid ""
"Enable logging turns on WAN zone drop/reject logging only (same as Network → " "Enable logging turns on WAN zone drop/reject logging only (same as Network → "
"Firewall). It does not add rules or log normal LAN browsing." "Firewall). It does not add rules or log normal LAN browsing."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enabling…" msgid "Enabling…"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1093 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099
msgid "Exclude" msgid "Exclude"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Exclude instead" msgid "Exclude instead"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71
msgid "Filter by %s" msgid "Filter by %s"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136
msgid "Filter by interface" msgid "Filter by interface"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112
msgid "Filter logs by rule (hint: %s). Ctrl+click to open firewall settings." msgid "Filter logs by rule (hint: %s). Ctrl+click to open firewall settings."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1534 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1540
#: openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3
msgid "Firewall Live View" msgid "Firewall Live View"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43
msgid "Flags" msgid "Flags"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45
msgid "Flow" msgid "Flow"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3
msgid "Grant access to firewall live log view" msgid "Grant access to firewall live log view"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1706 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1712
msgid "Help" msgid "Help"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:878 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:895
msgid "" msgid ""
"High event rate — table refresh is throttled to protect the browser. The " "High event rate — table refresh is throttled to protect the browser. The "
"buffer still updates; refresh will resume automatically." "buffer still updates; refresh will resume automatically."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1084 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1090
msgid "ICMPv6" msgid "ICMPv6"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35
msgid "IN" msgid "IN"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1723
msgid "" msgid ""
"If Row tint looks missing, the active LuCI theme may omit success/error or " "If Row tint looks missing, the active LuCI theme may omit success/error or "
"info/warn CSS variables; fwlive falls back to local colors (air-gapped, no " "info/warn CSS variables; fwlive falls back to local colors (air-gapped, no "
"data leaves the device)." "data leaves the device)."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205
msgid "" msgid ""
"If the WAN is quiet, wait for probes or use the optional ping check in " "If the WAN is quiet, wait for probes or use the optional ping check in "
"Help / the enabling-logs guide." "Help / the enabling-logs guide."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Include instead" msgid "Include instead"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34
msgid "Interface" msgid "Interface"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1682 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1688
msgid "Interface (prefix ! to exclude)" msgid "Interface (prefix ! to exclude)"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232
msgid "Ill configure this under Network → Firewall" msgid "Ill configure this under Network → Firewall"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194
msgid "Kernel log modules missing" msgid "Kernel log modules missing"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195
msgid "" msgid ""
"Kernel netfilter log modules are missing. Install kmod-nf-log-ipv4 and kmod-" "Kernel netfilter log modules are missing. Install kmod-nf-log-ipv4 and kmod-"
"nf-log-ipv6 (or kmod-nf-log / kmod-nf-log6), then reload the firewall." "nf-log-ipv6 (or kmod-nf-log / kmod-nf-log6), then reload the firewall."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44
msgid "Len" msgid "Len"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1613 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1619
msgid "Limit" msgid "Limit"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:536
msgid "Limited diagnostics — timeout command missing"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210
msgid "Logging is off on this router" msgid "Logging is off on this router"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256
msgid "Manual test (System → Terminal):" msgid "Manual test (System → Terminal):"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1584 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1590
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1589 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1595
msgid "Message" msgid "Message"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686
msgid "More filters" msgid "More filters"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37
msgid "Network → Firewall" msgid "Network → Firewall"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187
msgid "" msgid ""
"No WAN firewall zone found in /etc/config/firewall. Configure zones under" "No WAN firewall zone found in /etc/config/firewall. Configure zones under"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185
msgid "No WAN zone found" msgid "No WAN zone found"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163
msgid "Not now" msgid "Not now"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220
msgid "Nothing changes until you click Enable." msgid "Nothing changes until you click Enable."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36
msgid "OUT" msgid "OUT"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1604 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610
msgid "One line" msgid "One line"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206
msgid "Open firewall zone settings" msgid "Open firewall zone settings"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211
msgid "" msgid ""
"OpenWrt does not write firewall events to the log until you turn logging on. " "OpenWrt does not write firewall events to the log until you turn logging on. "
"Live View only shows what the firewall already logs — it does not add allow/" "Live View only shows what the firewall already logs — it does not add allow/"
"deny rules." "deny rules."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1632 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1638
msgid "Palette" msgid "Palette"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:989 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1554 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1560
msgid "Pause" msgid "Pause"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:987 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
msgid "Paused" msgid "Paused"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38
msgid "Proto" msgid "Proto"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674
msgid "Protocol — common values" msgid "Protocol — common values"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1656
msgid "Quick search" msgid "Quick search"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91
msgid "Remove filter" msgid "Remove filter"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:989 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
msgid "Resume" msgid "Resume"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1625 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1631
msgid "Row tint" msgid "Row tint"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1721
msgid "" msgid ""
"Row tint shows pass/deny row backgrounds when checked. Choose Classic (green/" "Row tint shows pass/deny row backgrounds when checked. Choose Classic (green/"
"red, default) or Accessible (teal/orange). Action text stays colored either " "red, default) or Accessible (teal/orange). Action text stays colored either "
"way." "way."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1544 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1550
msgid "" msgid ""
"Row tint used a local color fallback because the active LuCI theme did not " "Row tint used a local color fallback because the active LuCI theme did not "
"apply pass/deny backgrounds." "apply pass/deny backgrounds."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33
msgid "Rule" msgid "Rule"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:934 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:527
msgid "Rule labels incomplete — map truncated" msgid "Rule labels incomplete — map truncated"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:938 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:531
msgid "Rule labels unavailable" msgid "Rule labels unavailable"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:936 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:529
msgid "Rule labels unavailable — temp file failed" msgid "Rule labels unavailable — temp file failed"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41
msgid "SPort" msgid "SPort"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1644 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650
msgid "Show hostnames" msgid "Show hostnames"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1623 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1629
msgid "Show pass/deny row background colors" msgid "Show pass/deny row background colors"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1570 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1576
msgid "Simple" msgid "Simple"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39
msgid "Source" msgid "Source"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1683 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1689
msgid "Source IP contains (! to exclude)" msgid "Source IP contains (! to exclude)"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1684 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1690
msgid "Source port (! to exclude)" msgid "Source port (! to exclude)"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1711 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717
msgid "" msgid ""
"The rate shown for WAN logging is the firewall zone log_limit. OpenWrt " "The rate shown for WAN logging is the firewall zone log_limit. OpenWrt "
"defaults to 10/minute when no explicit limit is configured; fwlive does not " "defaults to 10/minute when no explicit limit is configured; fwlive does not "
"impose this cap." "impose this cap."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1708 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714
msgid "" msgid ""
"The table updates automatically when your firewall logs traffic. Use Pause " "The table updates automatically when your firewall logs traffic. Use Pause "
"if it moves too fast." "if it moves too fast."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1551
msgid "Theme tint fallback" msgid "Theme tint fallback"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31
msgid "Time" msgid "Time"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219
msgid "" msgid ""
"Turns on WAN zone drop/reject logging (same as Network → Firewall → wan → " "Turns on WAN zone drop/reject logging (same as Network → Firewall → wan → "
"Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal " "Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal "
"LAN browsing is not logged." "LAN browsing is not logged."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126
msgid "Undo:" msgid "Undo:"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1722
msgid "Use Detail for all columns (flags, length, raw message)." msgid "Use Detail for all columns (flags, length, raw message)."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1558 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1564
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1562 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1568
msgid "View" msgid "View"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:598 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:615
msgid "WAN drop/reject logging is off." msgid "WAN drop/reject logging is off."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204
msgid "" msgid ""
"WAN drop/reject logging is on. Blocked inbound WAN traffic will show up " "WAN drop/reject logging is on. Blocked inbound WAN traffic will show up "
"here. Normal LAN browsing will not." "here. Normal LAN browsing will not."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:562 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:579
msgid "" msgid ""
"WAN drop/reject logging is on. Blocked inbound traffic should appear here as " "WAN drop/reject logging is on. Blocked inbound traffic should appear here as "
"it happens — not normal LAN browsing." "it happens — not normal LAN browsing."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:564 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:581
msgid "WAN logging is already enabled." msgid "WAN logging is already enabled."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88
msgid "WAN logging on" msgid "WAN logging on"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94
msgid "WAN logging on (%s). Click to disable." msgid "WAN logging on (%s). Click to disable."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77
msgid "WAN logging unavailable: missing kernel log modules" msgid "WAN logging unavailable: missing kernel log modules"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70
msgid "WAN logging unavailable: no WAN zone" msgid "WAN logging unavailable: no WAN zone"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203
msgid "Waiting for firewall events" msgid "Waiting for firewall events"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:987 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1539 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545
msgid "Watching" msgid "Watching"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1597 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1603
msgid "Wrap" msgid "Wrap"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123
msgid "allow/deny rules, LAN logging, or anything else." msgid "allow/deny rules, LAN logging, or anything else."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:811 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:828
msgid "buffer full" msgid "buffer full"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81
msgid "default 10/minute" msgid "default 10/minute"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28
msgid "is" msgid "is"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:806 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:823
msgid "loading buffer" msgid "loading buffer"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:906 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:923
msgid "loading…" msgid "loading…"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44
msgid "not" msgid "not"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1107
msgid "not AH" msgid "not AH"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1106
msgid "not ESP" msgid "not ESP"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1105
msgid "not GRE" msgid "not GRE"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1096 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102
msgid "not ICMP" msgid "not ICMP"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1097 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1103
msgid "not ICMPv6" msgid "not ICMPv6"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1098 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1104
msgid "not IGMP" msgid "not IGMP"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1108
msgid "not SCTP" msgid "not SCTP"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1094 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100
msgid "not TCP" msgid "not TCP"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1095 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101
msgid "not UDP" msgid "not UDP"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1660 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1666
msgid "not block" msgid "not block"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1659 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1665
msgid "not drop" msgid "not drop"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1664
msgid "not pass" msgid "not pass"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1661 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1667
msgid "not reject" msgid "not reject"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1662 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668
msgid "not unknown" msgid "not unknown"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1673 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1679
msgid "or type…" msgid "or type…"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:813 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:830
msgid "render paused (high rate)" msgid "render paused (high rate)"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:815 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:832
msgid "scroll frozen — scroll to top to follow live" msgid "scroll frozen — scroll to top to follow live"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118
msgid "sets log on the WAN firewall zone and reloads the firewall." msgid "sets log on the WAN firewall zone and reloads the firewall."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258
msgid "then ping the router." msgid "then ping the router."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128
msgid "turn it back off with the WAN logging on control on the watch strip." msgid "turn it back off with the WAN logging on control on the watch strip."
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:513 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:512
msgid "using fw4" msgid "using fw4"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:511 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:510
msgid "using iptables" msgid "using iptables"
msgstr "" msgstr ""
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89
msgid "· %s" msgid "· %s"
msgstr "" msgstr ""
+169 -165
View File
@@ -12,72 +12,72 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:909 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:926
msgid "%d matching · %d/%d stored" msgid "%d matching · %d/%d stored"
msgstr "%d matching · %d/%d stored" msgstr "%d matching · %d/%d stored"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:912 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:929
msgid "0 matching · %d/%d stored" msgid "0 matching · %d/%d stored"
msgstr "0 matching · %d/%d stored" msgstr "0 matching · %d/%d stored"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251
msgid "Accessible (teal/orange)" msgid "Accessible (teal/orange)"
msgstr "可访问(青绿/橙色)" msgstr "可访问(青绿/橙色)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32
msgid "Action" msgid "Action"
msgstr "动作" msgstr "动作"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:601 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:618
msgid "Administrator access is required to disable logging." msgid "Administrator access is required to disable logging."
msgstr "需要管理员权限才能" msgstr "需要管理员权限才能"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:586
msgid "Administrator access is required to enable logging." msgid "Administrator access is required to enable logging."
msgstr "需要管理员权限才能开启日志记录。" msgstr "需要管理员权限才能开启日志记录。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1092
msgid "Also seen" msgid "Also seen"
msgstr "其他常见" msgstr "其他常见"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:554 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:571
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:590 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:607
msgid "Another change is staged for the firewall; apply or revert it first." msgid "Another change is staged for the firewall; apply or revert it first."
msgstr "防火墙另有未提交的更改;请先应用或还原。" msgstr "防火墙另有未提交的更改;请先应用或还原。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1652 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658
msgid "Any action" msgid "Any action"
msgstr "所有动作" msgstr "所有动作"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1079 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1085
msgid "Any protocol" msgid "Any protocol"
msgstr "任意协议" msgstr "任意协议"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113
msgid "Before you enable logging" msgid "Before you enable logging"
msgstr "Before you enable logging" msgstr "Before you enable logging"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:552 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569
msgid "Cannot enable logging until kernel log modules are installed." msgid "Cannot enable logging until kernel log modules are installed."
msgstr "å" msgstr "无法启用日志记录,直到内核日志模块已安装。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116
msgid "Changes:" msgid "Changes:"
msgstr "Changes:" msgstr "Changes:"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250
msgid "Classic (green/red)" msgid "Classic (green/red)"
msgstr "经" msgstr "经"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1636 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1642
msgid "Classic uses green/red; Accessible uses teal/orange" msgid "Classic uses green/red; Accessible uses teal/orange"
msgstr "经" msgstr "经"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116
msgid "Clear all" msgid "Clear all"
msgstr "æ" msgstr "æ"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1698
msgid "" msgid ""
"Click a cell to filter · ≠ on a chip to exclude · Ctrl+click a rule for " "Click a cell to filter · ≠ on a chip to exclude · Ctrl+click a rule for "
"firewall settings · in Simple view, click a row for the full message" "firewall settings · in Simple view, click a row for the full message"
@@ -85,17 +85,17 @@ msgstr ""
"点击单元格筛选 · 芯片上的 ≠ 排除 · Ctrl+点击规则打开防火墙设置 · 在简单视图中" "点击单元格筛选 · 芯片上的 ≠ 排除 · Ctrl+点击规则打开防火墙设置 · 在简单视图中"
"点击行查看完整消息" "点击行查看完整消息"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1713 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1719
msgid "" msgid ""
"Click a row (Time or other non-link cells) to see the full log line (Simple " "Click a row (Time or other non-link cells) to see the full log line (Simple "
"view)." "view)."
msgstr "点击一行(时间或其他非链接单元格)可查看完整日志行(简单视图)。" msgstr "点击一行(时间或其他非链接单元格)可查看完整日志行(简单视图)。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113
msgid "Click a row for the full message" msgid "Click a row for the full message"
msgstr "点击行可查看完整消息" msgstr "点击行可查看完整消息"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1720
msgid "" msgid ""
"Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a " "Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a "
"chip) to exclude." "chip) to exclude."
@@ -103,84 +103,84 @@ msgstr ""
"Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a " "Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a "
"chip) to exclude." "chip) to exclude."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1080 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086
msgid "Common" msgid "Common"
msgstr "常用" msgstr "常用"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:927 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:944
msgid "Connection lost — retrying…" msgid "Connection lost — retrying…"
msgstr "Connection lost — retrying…" msgstr "Connection lost — retrying…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:592 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:609
msgid "Could not disable logging." msgid "Could not disable logging."
msgstr "无法" msgstr "无法"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:556 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573
msgid "Could not enable logging." msgid "Could not enable logging."
msgstr "无法开启日志记录。" msgstr "无法开启日志记录。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680
msgid "Custom protocol (prefix ! to exclude). Overrides the menu when set." msgid "Custom protocol (prefix ! to exclude). Overrides the menu when set."
msgstr "自定义协议(! 排除)。有内容时覆盖菜单。" msgstr "自定义协议(! 排除)。有内容时覆盖菜单。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42
msgid "DPort" msgid "DPort"
msgstr "目标端口" msgstr "目标端口"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40
msgid "Destination" msgid "Destination"
msgstr "目标地址" msgstr "目标地址"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1685 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1691
msgid "Destination IP contains (! to exclude)" msgid "Destination IP contains (! to exclude)"
msgstr "目标 IP å" msgstr "目标 IP å"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692
msgid "Destination port (! to exclude)" msgid "Destination port (! to exclude)"
msgstr "目标端口(! 表示排除)" msgstr "目标端口(! 表示排除)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1577 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1583
msgid "Detail" msgid "Detail"
msgstr "详细" msgstr "详细"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37
msgid "Dir" msgid "Dir"
msgstr "方向" msgstr "方向"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85
msgid "Disabling…" msgid "Disabling…"
msgstr "Disabling…" msgstr "Disabling…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1616
msgid "Display options" msgid "Display options"
msgstr "显示选项" msgstr "显示选项"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1710 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716
msgid "Display options on the bar set Limit, row tint, palette, and hostnames." msgid "Display options on the bar set Limit, row tint, palette, and hostnames."
msgstr "栏上的显示选项可设置行数限制、行着色、调色板和主机名。" msgstr "栏上的显示选项可设置行数限制、行着色、调色板和主机名。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121
msgid "Does not change:" msgid "Does not change:"
msgstr "Does not change:" msgstr "Does not change:"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138
msgid "Dont show this again" msgid "Dont show this again"
msgstr "Dont show this again" msgstr "Dont show this again"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enable WAN drop/reject logging" msgid "Enable WAN drop/reject logging"
msgstr "Enable WAN drop/reject logging" msgstr "Enable WAN drop/reject logging"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104
msgid "Enable WAN zone drop/reject logging (same as Network → Firewall)." msgid "Enable WAN zone drop/reject logging (same as Network → Firewall)."
msgstr "Enable WAN zone drop/reject logging (same as Network → Firewall)." msgstr "Enable WAN zone drop/reject logging (same as Network → Firewall)."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
msgid "Enable logging" msgid "Enable logging"
msgstr "开启日志" msgstr "开启日志"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1709 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715
msgid "" msgid ""
"Enable logging turns on WAN zone drop/reject logging only (same as Network → " "Enable logging turns on WAN zone drop/reject logging only (same as Network → "
"Firewall). It does not add rules or log normal LAN browsing." "Firewall). It does not add rules or log normal LAN browsing."
@@ -188,55 +188,55 @@ msgstr ""
"Enable logging turns on WAN zone drop/reject logging only (same as Network → " "Enable logging turns on WAN zone drop/reject logging only (same as Network → "
"Firewall). It does not add rules or log normal LAN browsing." "Firewall). It does not add rules or log normal LAN browsing."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enabling…" msgid "Enabling…"
msgstr "Enabling…" msgstr "Enabling…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1093 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099
msgid "Exclude" msgid "Exclude"
msgstr "排除" msgstr "排除"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Exclude instead" msgid "Exclude instead"
msgstr "改为排除" msgstr "改为排除"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71
msgid "Filter by %s" msgid "Filter by %s"
msgstr "按 %s 筛选" msgstr "按 %s 筛选"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136
msgid "Filter by interface" msgid "Filter by interface"
msgstr "按接口筛选" msgstr "按接口筛选"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112
msgid "Filter logs by rule (hint: %s). Ctrl+click to open firewall settings." msgid "Filter logs by rule (hint: %s). Ctrl+click to open firewall settings."
msgstr "按规则筛选日志(提示:%s)。Ctrl+点击可打开防火墙设置。" msgstr "按规则筛选日志(提示:%s)。Ctrl+点击可打开防火墙设置。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1534 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1540
#: openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3
msgid "Firewall Live View" msgid "Firewall Live View"
msgstr "防火墙实时视图" msgstr "防火墙实时视图"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43
msgid "Flags" msgid "Flags"
msgstr "标志" msgstr "标志"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45
msgid "Flow" msgid "Flow"
msgstr "流" msgstr "流"
#: openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3
msgid "Grant access to firewall live log view" msgid "Grant access to firewall live log view"
msgstr "授予防火墙实时日志视图的访问权限" msgstr "授予防火墙实时日志视图的访问权限"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1706 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1712
msgid "Help" msgid "Help"
msgstr "帮助" msgstr "帮助"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:878 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:895
msgid "" msgid ""
"High event rate — table refresh is throttled to protect the browser. The " "High event rate — table refresh is throttled to protect the browser. The "
"buffer still updates; refresh will resume automatically." "buffer still updates; refresh will resume automatically."
@@ -244,15 +244,15 @@ msgstr ""
"High event rate — table refresh is throttled to protect the browser. The " "High event rate — table refresh is throttled to protect the browser. The "
"buffer still updates; refresh will resume automatically." "buffer still updates; refresh will resume automatically."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1084 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1090
msgid "ICMPv6" msgid "ICMPv6"
msgstr "ICMPv6" msgstr "ICMPv6"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35
msgid "IN" msgid "IN"
msgstr "IN" msgstr "IN"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1723
msgid "" msgid ""
"If Row tint looks missing, the active LuCI theme may omit success/error or " "If Row tint looks missing, the active LuCI theme may omit success/error or "
"info/warn CSS variables; fwlive falls back to local colors (air-gapped, no " "info/warn CSS variables; fwlive falls back to local colors (air-gapped, no "
@@ -261,7 +261,7 @@ msgstr ""
"如果行染色看起来缺失,当前 LuCI 主题可能未提供成功/错误 CSS 变量;fwlive " "如果行染色看起来缺失,当前 LuCI 主题可能未提供成功/错误 CSS 变量;fwlive "
"会回退到本地颜色(隔离运行,数据不会离开本机)。" "会回退到本地颜色(隔离运行,数据不会离开本机)。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205
msgid "" msgid ""
"If the WAN is quiet, wait for probes or use the optional ping check in " "If the WAN is quiet, wait for probes or use the optional ping check in "
"Help / the enabling-logs guide." "Help / the enabling-logs guide."
@@ -269,95 +269,99 @@ msgstr ""
"If the WAN is quiet, wait for probes or use the optional ping check in " "If the WAN is quiet, wait for probes or use the optional ping check in "
"Help / the enabling-logs guide." "Help / the enabling-logs guide."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Include instead" msgid "Include instead"
msgstr "改为å" msgstr "改为å"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34
msgid "Interface" msgid "Interface"
msgstr "接口" msgstr "接口"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1682 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1688
msgid "Interface (prefix ! to exclude)" msgid "Interface (prefix ! to exclude)"
msgstr "接口(! 前缀表示排除)" msgstr "接口(! 前缀表示排除)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232
msgid "Ill configure this under Network → Firewall" msgid "Ill configure this under Network → Firewall"
msgstr "Ill configure this under Network → Firewall" msgstr "Ill configure this under Network → Firewall"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194
msgid "Kernel log modules missing" msgid "Kernel log modules missing"
msgstr "Kernel log modules missing" msgstr "Kernel log modules missing"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195
msgid "" msgid ""
"Kernel netfilter log modules are missing. Install kmod-nf-log-ipv4 and kmod-" "Kernel netfilter log modules are missing. Install kmod-nf-log-ipv4 and kmod-"
"nf-log-ipv6 (or kmod-nf-log / kmod-nf-log6), then reload the firewall." "nf-log-ipv6 (or kmod-nf-log / kmod-nf-log6), then reload the firewall."
msgstr "缺少å" msgstr "缺少å"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44
msgid "Len" msgid "Len"
msgstr "长度" msgstr "长度"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1613 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1619
msgid "Limit" msgid "Limit"
msgstr "限制" msgstr "限制"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:536
msgid "Limited diagnostics — timeout command missing"
msgstr "诊断功能受限 — 缺少 timeout 命令"
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210
msgid "Logging is off on this router" msgid "Logging is off on this router"
msgstr "Logging is off on this router" msgstr "Logging is off on this router"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256
msgid "Manual test (System → Terminal):" msgid "Manual test (System → Terminal):"
msgstr "手动测试(系统 → 终端):" msgstr "手动测试(系统 → 终端):"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1584 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1590
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1589 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1595
msgid "Message" msgid "Message"
msgstr "消息" msgstr "消息"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686
msgid "More filters" msgid "More filters"
msgstr "更多筛选" msgstr "更多筛选"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37
msgid "Network → Firewall" msgid "Network → Firewall"
msgstr "Network → Firewall" msgstr "Network → Firewall"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187
msgid "" msgid ""
"No WAN firewall zone found in /etc/config/firewall. Configure zones under" "No WAN firewall zone found in /etc/config/firewall. Configure zones under"
msgstr "在 /etc/config/firewall 中未找到 WAN 防火墙区域。请在以下位置配置区域" msgstr "在 /etc/config/firewall 中未找到 WAN 防火墙区域。请在以下位置配置区域"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185
msgid "No WAN zone found" msgid "No WAN zone found"
msgstr "No WAN zone found" msgstr "No WAN zone found"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163
msgid "Not now" msgid "Not now"
msgstr "Not now" msgstr "Not now"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220
msgid "Nothing changes until you click Enable." msgid "Nothing changes until you click Enable."
msgstr "Nothing changes until you click Enable." msgstr "Nothing changes until you click Enable."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36
msgid "OUT" msgid "OUT"
msgstr "出接口" msgstr "出接口"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1604 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610
msgid "One line" msgid "One line"
msgstr "单行" msgstr "单行"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206
msgid "Open firewall zone settings" msgid "Open firewall zone settings"
msgstr "打开防火墙区域设置" msgstr "打开防火墙区域设置"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211
msgid "" msgid ""
"OpenWrt does not write firewall events to the log until you turn logging on. " "OpenWrt does not write firewall events to the log until you turn logging on. "
"Live View only shows what the firewall already logs — it does not add allow/" "Live View only shows what the firewall already logs — it does not add allow/"
@@ -367,44 +371,44 @@ msgstr ""
"Live View only shows what the firewall already logs — it does not add allow/" "Live View only shows what the firewall already logs — it does not add allow/"
"deny rules." "deny rules."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1632 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1638
msgid "Palette" msgid "Palette"
msgstr "Palette" msgstr "Palette"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:989 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1554 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1560
msgid "Pause" msgid "Pause"
msgstr "暂停" msgstr "暂停"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:987 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
msgid "Paused" msgid "Paused"
msgstr "已暂停" msgstr "已暂停"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38
msgid "Proto" msgid "Proto"
msgstr "协议" msgstr "协议"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674
msgid "Protocol — common values" msgid "Protocol — common values"
msgstr "协议 — 常用值" msgstr "协议 — 常用值"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1656
msgid "Quick search" msgid "Quick search"
msgstr "快速搜索" msgstr "快速搜索"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91
msgid "Remove filter" msgid "Remove filter"
msgstr "移除筛选" msgstr "移除筛选"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:989 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
msgid "Resume" msgid "Resume"
msgstr "ç»§ç»­" msgstr "ç»§ç»­"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1625 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1631
msgid "Row tint" msgid "Row tint"
msgstr "行染色" msgstr "行染色"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1721
msgid "" msgid ""
"Row tint shows pass/deny row backgrounds when checked. Choose Classic (green/" "Row tint shows pass/deny row backgrounds when checked. Choose Classic (green/"
"red, default) or Accessible (teal/orange). Action text stays colored either " "red, default) or Accessible (teal/orange). Action text stays colored either "
@@ -413,78 +417,78 @@ msgstr ""
"勾选后行着色显示放行/拒绝行背景。可选经典(绿/红,默认)或无障碍(青绿/橙)。" "勾选后行着色显示放行/拒绝行背景。可选经典(绿/红,默认)或无障碍(青绿/橙)。"
"操作文本在两种模式下均保持着色。" "操作文本在两种模式下均保持着色。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1544 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1550
msgid "" msgid ""
"Row tint used a local color fallback because the active LuCI theme did not " "Row tint used a local color fallback because the active LuCI theme did not "
"apply pass/deny backgrounds." "apply pass/deny backgrounds."
msgstr "行染色使用了本地颜色回退,因为当前 LuCI 主题未应用放行/拒绝背景色。" msgstr "行染色使用了本地颜色回退,因为当前 LuCI 主题未应用放行/拒绝背景色。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33
msgid "Rule" msgid "Rule"
msgstr "规则" msgstr "规则"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:934 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:527
msgid "Rule labels incomplete — map truncated" msgid "Rule labels incomplete — map truncated"
msgstr "Rule labels incomplete — map truncated" msgstr "Rule labels incomplete — map truncated"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:938 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:531
msgid "Rule labels unavailable" msgid "Rule labels unavailable"
msgstr "Rule labels unavailable" msgstr "Rule labels unavailable"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:936 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:529
msgid "Rule labels unavailable — temp file failed" msgid "Rule labels unavailable — temp file failed"
msgstr "Rule labels unavailable — temp file failed" msgstr "Rule labels unavailable — temp file failed"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41
msgid "SPort" msgid "SPort"
msgstr "源端口" msgstr "源端口"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1644 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650
msgid "Show hostnames" msgid "Show hostnames"
msgstr "显示主机名" msgstr "显示主机名"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1623 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1629
msgid "Show pass/deny row background colors" msgid "Show pass/deny row background colors"
msgstr "显示放行/拒绝行背景色" msgstr "显示放行/拒绝行背景色"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1570 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1576
msgid "Simple" msgid "Simple"
msgstr "简洁" msgstr "简洁"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39
msgid "Source" msgid "Source"
msgstr "源地址" msgstr "源地址"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1683 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1689
msgid "Source IP contains (! to exclude)" msgid "Source IP contains (! to exclude)"
msgstr "源 IP å" msgstr "源 IP å"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1684 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1690
msgid "Source port (! to exclude)" msgid "Source port (! to exclude)"
msgstr "源端口(! 表示排除)" msgstr "源端口(! 表示排除)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1711 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717
msgid "" msgid ""
"The rate shown for WAN logging is the firewall zone log_limit. OpenWrt " "The rate shown for WAN logging is the firewall zone log_limit. OpenWrt "
"defaults to 10/minute when no explicit limit is configured; fwlive does not " "defaults to 10/minute when no explicit limit is configured; fwlive does not "
"impose this cap." "impose this cap."
msgstr "WAN 日志显示的速率是防火墙区域的 log_limit。未" msgstr "WAN 日志显示的速率是防火墙区域的 log_limit。未"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1708 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714
msgid "" msgid ""
"The table updates automatically when your firewall logs traffic. Use Pause " "The table updates automatically when your firewall logs traffic. Use Pause "
"if it moves too fast." "if it moves too fast."
msgstr "防火墙写" msgstr "防火墙写"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1551
msgid "Theme tint fallback" msgid "Theme tint fallback"
msgstr "主题着色回退" msgstr "主题着色回退"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31
msgid "Time" msgid "Time"
msgstr "时间" msgstr "时间"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219
msgid "" msgid ""
"Turns on WAN zone drop/reject logging (same as Network → Firewall → wan → " "Turns on WAN zone drop/reject logging (same as Network → Firewall → wan → "
"Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal " "Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal "
@@ -494,24 +498,24 @@ msgstr ""
"Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal " "Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal "
"LAN browsing is not logged." "LAN browsing is not logged."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126
msgid "Undo:" msgid "Undo:"
msgstr "Undo:" msgstr "Undo:"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1722
msgid "Use Detail for all columns (flags, length, raw message)." msgid "Use Detail for all columns (flags, length, raw message)."
msgstr "使用「详细」可查看全部列(标志、长度、原始消息)。" msgstr "使用「详细」可查看全部列(标志、长度、原始消息)。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1558 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1564
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1562 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1568
msgid "View" msgid "View"
msgstr "视图" msgstr "视图"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:598 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:615
msgid "WAN drop/reject logging is off." msgid "WAN drop/reject logging is off."
msgstr "WAN drop/reject logging is off." msgstr "WAN drop/reject logging is off."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204
msgid "" msgid ""
"WAN drop/reject logging is on. Blocked inbound WAN traffic will show up " "WAN drop/reject logging is on. Blocked inbound WAN traffic will show up "
"here. Normal LAN browsing will not." "here. Normal LAN browsing will not."
@@ -519,7 +523,7 @@ msgstr ""
"WAN drop/reject logging is on. Blocked inbound WAN traffic will show up " "WAN drop/reject logging is on. Blocked inbound WAN traffic will show up "
"here. Normal LAN browsing will not." "here. Normal LAN browsing will not."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:562 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:579
msgid "" msgid ""
"WAN drop/reject logging is on. Blocked inbound traffic should appear here as " "WAN drop/reject logging is on. Blocked inbound traffic should appear here as "
"it happens — not normal LAN browsing." "it happens — not normal LAN browsing."
@@ -527,157 +531,157 @@ msgstr ""
"WAN drop/reject logging is on. Blocked inbound traffic should appear here as " "WAN drop/reject logging is on. Blocked inbound traffic should appear here as "
"it happens — not normal LAN browsing." "it happens — not normal LAN browsing."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:564 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:581
msgid "WAN logging is already enabled." msgid "WAN logging is already enabled."
msgstr "WAN 日志已处于开启状态。" msgstr "WAN 日志已处于开启状态。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88
msgid "WAN logging on" msgid "WAN logging on"
msgstr "WAN 日志:开" msgstr "WAN 日志:开"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94
msgid "WAN logging on (%s). Click to disable." msgid "WAN logging on (%s). Click to disable."
msgstr "WAN 日志:开(%s)。点击可" msgstr "WAN 日志:开(%s)。点击可"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77
msgid "WAN logging unavailable: missing kernel log modules" msgid "WAN logging unavailable: missing kernel log modules"
msgstr "WAN 日志不可用:缺少å" msgstr "WAN 日志不可用:缺少å"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70
msgid "WAN logging unavailable: no WAN zone" msgid "WAN logging unavailable: no WAN zone"
msgstr "WAN 日志不可用:无 WAN 区域" msgstr "WAN 日志不可用:无 WAN 区域"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203
msgid "Waiting for firewall events" msgid "Waiting for firewall events"
msgstr "Waiting for firewall events" msgstr "Waiting for firewall events"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:987 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1539 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545
msgid "Watching" msgid "Watching"
msgstr "监视中" msgstr "监视中"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1597 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1603
msgid "Wrap" msgid "Wrap"
msgstr "自动换行" msgstr "自动换行"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123
msgid "allow/deny rules, LAN logging, or anything else." msgid "allow/deny rules, LAN logging, or anything else."
msgstr "allow/deny rules, LAN logging, or anything else." msgstr "allow/deny rules, LAN logging, or anything else."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:811 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:828
msgid "buffer full" msgid "buffer full"
msgstr "缓冲区已满" msgstr "缓冲区已满"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81
msgid "default 10/minute" msgid "default 10/minute"
msgstr "默认 10 条/分钟" msgstr "默认 10 条/分钟"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28
msgid "is" msgid "is"
msgstr "是" msgstr "是"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:806 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:823
msgid "loading buffer" msgid "loading buffer"
msgstr "正在加载缓冲区" msgstr "正在加载缓冲区"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:906 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:923
msgid "loading…" msgid "loading…"
msgstr "loading…" msgstr "loading…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44
msgid "not" msgid "not"
msgstr "非" msgstr "非"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1107
msgid "not AH" msgid "not AH"
msgstr "非 AH" msgstr "非 AH"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1106
msgid "not ESP" msgid "not ESP"
msgstr "非 ESP" msgstr "非 ESP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1105
msgid "not GRE" msgid "not GRE"
msgstr "非 GRE" msgstr "非 GRE"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1096 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102
msgid "not ICMP" msgid "not ICMP"
msgstr "非 ICMP" msgstr "非 ICMP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1097 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1103
msgid "not ICMPv6" msgid "not ICMPv6"
msgstr "非 ICMPv6" msgstr "非 ICMPv6"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1098 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1104
msgid "not IGMP" msgid "not IGMP"
msgstr "非 IGMP" msgstr "非 IGMP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1108
msgid "not SCTP" msgid "not SCTP"
msgstr "非 SCTP" msgstr "非 SCTP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1094 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100
msgid "not TCP" msgid "not TCP"
msgstr "非 TCP" msgstr "非 TCP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1095 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101
msgid "not UDP" msgid "not UDP"
msgstr "非 UDP" msgstr "非 UDP"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1660 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1666
msgid "not block" msgid "not block"
msgstr "非阻止" msgstr "非阻止"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1659 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1665
msgid "not drop" msgid "not drop"
msgstr "非丢弃" msgstr "非丢弃"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1664
msgid "not pass" msgid "not pass"
msgstr "非放行" msgstr "非放行"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1661 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1667
msgid "not reject" msgid "not reject"
msgstr "非拒绝" msgstr "非拒绝"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1662 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668
msgid "not unknown" msgid "not unknown"
msgstr "非未知" msgstr "非未知"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1673 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1679
msgid "or type…" msgid "or type…"
msgstr "或输入…" msgstr "或输入…"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:813 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:830
msgid "render paused (high rate)" msgid "render paused (high rate)"
msgstr "渲染暂停(速率过高)" msgstr "渲染暂停(速率过高)"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:815 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:832
msgid "scroll frozen — scroll to top to follow live" msgid "scroll frozen — scroll to top to follow live"
msgstr "scroll frozen — scroll to top to follow live" msgstr "scroll frozen — scroll to top to follow live"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118
msgid "sets log on the WAN firewall zone and reloads the firewall." msgid "sets log on the WAN firewall zone and reloads the firewall."
msgstr "sets log on the WAN firewall zone and reloads the firewall." msgstr "sets log on the WAN firewall zone and reloads the firewall."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258
msgid "then ping the router." msgid "then ping the router."
msgstr "然后 ping 路由器。" msgstr "然后 ping 路由器。"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128
msgid "turn it back off with the WAN logging on control on the watch strip." msgid "turn it back off with the WAN logging on control on the watch strip."
msgstr "turn it back off with the WAN logging on control on the watch strip." msgstr "turn it back off with the WAN logging on control on the watch strip."
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:513 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:512
msgid "using fw4" msgid "using fw4"
msgstr "使用 fw4" msgstr "使用 fw4"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:511 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:510
msgid "using iptables" msgid "using iptables"
msgstr "使用 iptables" msgstr "使用 iptables"
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89 #: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89
msgid "· %s" msgid "· %s"
msgstr "· %s" msgstr "· %s"
@@ -160,17 +160,17 @@ wan_log_staged_line_section() {
_line="$1" _line="$1"
case "$_line" in case "$_line" in
firewall.*.log=*) firewall.*.log=*)
_rest=${_line#firewall.} _rest=${_line#firewall.}
printf '%s' "${_rest%%.log=*}" printf '%s' "${_rest%%.log=*}"
;; ;;
-firewall.*.log) -firewall.*.log)
_rest=${_line#-firewall.} _rest=${_line#-firewall.}
printf '%s' "${_rest%.log}" printf '%s' "${_rest%.log}"
;; ;;
"- firewall."*.log) "- firewall."*.log)
_rest=${_line#- firewall.} _rest=${_line#- firewall.}
printf '%s' "${_rest%.log}" printf '%s' "${_rest%.log}"
;; ;;
esac esac
} }
@@ -375,6 +375,16 @@ logging_blockers_append() {
LOGGING_BLOCKERS="${LOGGING_BLOCKERS}\"${esc}\"" LOGGING_BLOCKERS="${LOGGING_BLOCKERS}\"${esc}\""
} }
logging_warnings_append() {
warning="$1"
[ -n "$warning" ] || return 0
esc=$(printf '%s' "$warning" | json_escape)
if [ -n "$LOGGING_WARNINGS" ]; then
LOGGING_WARNINGS="${LOGGING_WARNINGS},"
fi
LOGGING_WARNINGS="${LOGGING_WARNINGS}\"${esc}\""
}
collect_logging_blockers() { collect_logging_blockers() {
zone="$1" zone="$1"
LOGGING_BLOCKERS='' LOGGING_BLOCKERS=''
@@ -382,13 +392,22 @@ collect_logging_blockers() {
[ -n "$zone" ] || logging_blockers_append 'no_wan_zone' [ -n "$zone" ] || logging_blockers_append 'no_wan_zone'
check_nf_log_ipv4 || logging_blockers_append 'nf_log_ipv4_missing' check_nf_log_ipv4 || logging_blockers_append 'nf_log_ipv4_missing'
check_nf_log_ipv6 || logging_blockers_append 'nf_log_ipv6_missing' check_nf_log_ipv6 || logging_blockers_append 'nf_log_ipv6_missing'
# rpcd/fwlive run_with_timeout fail-closes to 127 without timeout (#229): surface as blocker.
command -v timeout >/dev/null 2>&1 || logging_blockers_append 'timeout_missing'
[ -n "$LOGGING_BLOCKERS" ] || return 0 [ -n "$LOGGING_BLOCKERS" ] || return 0
return 1 return 1
} }
collect_logging_warnings() {
LOGGING_WARNINGS=''
# rpcd/fwlive run_with_timeout fail-closes to 127 without timeout (#229).
# Warnings are diagnostics only — do not gate the enable-logging CTA.
command -v timeout >/dev/null 2>&1 || logging_warnings_append 'timeout_missing'
[ -n "$LOGGING_WARNINGS" ] || return 0
return 1
}
json_null_or_string() { json_null_or_string() {
val="$1" val="$1"
if [ -z "$val" ]; then if [ -z "$val" ]; then
@@ -415,6 +434,8 @@ build_logging_status_json() {
collect_logging_blockers "$zone" collect_logging_blockers "$zone"
blockers="[${LOGGING_BLOCKERS:-}]" blockers="[${LOGGING_BLOCKERS:-}]"
collect_logging_warnings
warnings="[${LOGGING_WARNINGS:-}]"
ready=false ready=false
if [ -n "$zone" ] && [ "$wan_log" = true ] && [ "$nf4" = true ] && [ "$nf6" = true ]; then if [ -n "$zone" ] && [ "$wan_log" = true ] && [ "$nf4" = true ] && [ "$nf6" = true ]; then
@@ -424,8 +445,8 @@ build_logging_status_json() {
zone_json=$(json_null_or_string "$zone") zone_json=$(json_null_or_string "$zone")
limit_json=$(json_null_or_string "$limit_val") limit_json=$(json_null_or_string "$limit_val")
printf '{"wan_zone":%s,"wan_log":%s,"wan_log_limit":%s,"nf_log_ipv4":%s,"nf_log_ipv6":%s,"ready":%s,"blockers":%s}' \ printf '{"wan_zone":%s,"wan_log":%s,"wan_log_limit":%s,"nf_log_ipv4":%s,"nf_log_ipv6":%s,"ready":%s,"blockers":%s,"warnings":%s}' \
"$zone_json" "$wan_log" "$limit_json" "$nf4" "$nf6" "$ready" "$blockers" "$zone_json" "$wan_log" "$limit_json" "$nf4" "$nf6" "$ready" "$blockers" "$warnings"
} }
reload_firewall() { reload_firewall() {
@@ -289,6 +289,49 @@ function parse_ss_subflows(raw, endpoints)
return subflows return subflows
end end
-- Live per-subflow TCP metrics preferring omr-sockdiag -- a raw
-- NETLINK_SOCK_DIAG/INET_DIAG query of the kernel's tcp_info straight off
-- the socket (see the omr-sockdiag package) -- over parsing "ss -tin" text.
-- Same preference order omr-metrics' 040-metrics post-tracking hook already
-- uses for its own per-WAN subflow collection. omr-sockdiag already emits
-- JSON with the field names this table already uses, so there is no text
-- parsing left to do here at all, only the same WAN attribution
-- parse_ss_subflows does above (a connection's local_ip matched against the
-- endpoints list -- omr-sockdiag has no MPTCP awareness of its own, it only
-- knows sockets).
--
-- Returns nil when the output is not usable, so the caller can fall back to
-- parse_ss_subflows. omr-sockdiag itself prints "[]" both when no sockets
-- match and when the kernel query cannot be opened; if endpoints exist, let
-- the ss fallback disambiguate that case instead of hiding live subflows.
function parse_sockdiag_subflows(raw, endpoints)
local ok, rows = pcall(jsonc.parse, raw or "")
if not ok or type(rows) ~= "table" then return nil end
if #rows == 0 and #endpoints > 0 then return nil end
local by_addr = {}
for _, ep in ipairs(endpoints) do by_addr[ep.address] = ep end
local subflows = {}
for _, row in ipairs(rows) do
local ep = by_addr[row.local_ip]
if ep then
subflows[#subflows + 1] = {
dev = ep.dev, endpoint_id = ep.id, backup = ep.backup,
local_ip = row.local_ip, local_port = row.local_port,
remote_ip = row.remote_ip, remote_port = row.remote_port,
cwnd = row.cwnd, ssthresh = row.ssthresh,
rtt = row.rtt, rttvar = row.rttvar, min_rtt = row.min_rtt,
retrans = row.retrans, retrans_total = row.retrans_total,
bytes_sent = row.bytes_sent, bytes_acked = row.bytes_acked,
bytes_retrans = row.bytes_retrans, bytes_received = row.bytes_received,
pacing_rate = row.pacing_rate, delivery_rate = row.delivery_rate,
}
end
end
return subflows
end
-- Per-WAN endpoint cross-check: for every interface the router considers -- Per-WAN endpoint cross-check: for every interface the router considers
-- multipath-enabled, is its device actually registered as an MPTCP -- multipath-enabled, is its device actually registered as an MPTCP
-- endpoint? If not, that WAN can never carry an MPTCP subflow no matter -- endpoint? If not, that WAN can never carry an MPTCP subflow no matter
@@ -839,7 +882,10 @@ local methods = {
for _, w in ipairs(wans) do for _, w in ipairs(wans) do
if w.device ~= "" then dev_to_name[w.device] = w.name end if w.device ~= "" then dev_to_name[w.device] = w.name end
end end
local subflows = parse_ss_subflows(exec_output("ss -tin 2>/dev/null"), endpoints) local subflows = parse_sockdiag_subflows(exec_output("omr-sockdiag 2>/dev/null"), endpoints)
if not subflows then
subflows = parse_ss_subflows(exec_output("ss -tin 2>/dev/null"), endpoints)
end
for _, sf in ipairs(subflows) do for _, sf in ipairs(subflows) do
sf.wan = dev_to_name[sf.dev] or sf.dev sf.wan = dev_to_name[sf.dev] or sf.dev
end end
+1 -1
View File
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall PKG_NAME:=luci-app-passwall
PKG_VERSION:=26.9.1 PKG_VERSION:=26.9.1
PKG_RELEASE:=256 PKG_RELEASE:=257
PKG_PO_VERSION:=$(PKG_VERSION) PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \ PKG_CONFIG_DEPENDS:= \
@@ -1039,7 +1039,7 @@ function geo_view()
return return
end end
local function get_rules(str, type) local function get_rules(str, type)
local rules_id = {} local rules = {}
uci_foreach("shunt_rules", function(s) uci_foreach("shunt_rules", function(s)
local list local list
if type == "geoip" then list = s.ip_list else list = s.domain_list end if type == "geoip" then list = s.ip_list else list = s.domain_list end
@@ -1048,14 +1048,18 @@ function geo_view()
local prefix, main = line:match("^(.-):(.*)") local prefix, main = line:match("^(.-):(.*)")
if not main then main = line end if not main then main = line end
if type == "geoip" and (api.datatypes.ipaddr(str) or api.datatypes.ip6addr(str)) then if type == "geoip" and (api.datatypes.ipaddr(str) or api.datatypes.ip6addr(str)) then
if main:find(str, 1, true) then rules_id[#rules_id + 1] = s[".name"] end if main:find(str, 1, true) then
table.insert(rules, {id = s[".name"], group = s.group or i18n.translate("default")})
end
else else
if main == str then rules_id[#rules_id + 1] = s[".name"] end if main == str then
table.insert(rules, {id = s[".name"], group = s.group or i18n.translate("default")})
end
end end
end end
end end
end) end)
return rules_id return rules
end end
local geo_dir = (uci_get("@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/"):match("^(.*)/") local geo_dir = (uci_get("@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/"):match("^(.*)/")
local geosite_path = geo_dir .. "/geosite.dat" local geosite_path = geo_dir .. "/geosite.dat"
@@ -1076,11 +1080,17 @@ function geo_view()
for line in geo_string:gmatch("([^\n]+)") do for line in geo_string:gmatch("([^\n]+)") do
lines[#lines + 1] = geo_type .. ":" .. line lines[#lines + 1] = geo_type .. ":" .. line
for _, r in ipairs(get_rules(line, geo_type) or {}) do for _, r in ipairs(get_rules(line, geo_type) or {}) do
if not seen[r] then seen[r] = true; rules[#rules + 1] = r end if not seen[r.id] then
seen[r.id] = true
rules[#rules + 1] = string.format("[%s]%s", r.group, r.id)
end
end end
end end
for _, r in ipairs(get_rules(value, geo_type) or {}) do for _, r in ipairs(get_rules(value, geo_type) or {}) do
if not seen[r] then seen[r] = true; rules[#rules + 1] = r end if not seen[r.id] then
seen[r.id] = true
rules[#rules + 1] = string.format("[%s]%s", r.group, r.id)
end
end end
geo_string = table.concat(lines, "\n") geo_string = table.concat(lines, "\n")
if #rules > 0 then if #rules > 0 then
@@ -160,7 +160,7 @@ o = s:option(Value, "autoswitch_retry_num", translate("Timeout retry num"))
o.datatype = "range(1,5)" o.datatype = "range(1,5)"
o.default = 1 o.default = 1
o:depends("enable_autoswitch", true) o:depends("enable_autoswitch", true)
o = s:option(Flag, "autoswitch_restore_switch", translate("Restore Switch"), translate("Immediately switch back to the main node when it becomes available.")) o = s:option(Flag, "autoswitch_restore_switch", translate("Restore Switch"), translate("Immediately switch back to the main node when it becomes available."))
o:depends("enable_autoswitch", true) o:depends("enable_autoswitch", true)
@@ -40,6 +40,7 @@ local security_list = { "none", "auto", "aes-128-gcm", "chacha20-poly1305", "zer
local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'") local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'")
local singbox_version = api.get_app_version("sing-box"):match("[^v]+") local singbox_version = api.get_app_version("sing-box"):match("[^v]+")
local version_ge_1_14_0 = api.compare_versions(singbox_version, ">=", "1.14.0")
o = s:option(ListValue, "protocol", translate("Protocol")) o = s:option(ListValue, "protocol", translate("Protocol"))
o:value("socks", "Socks") o:value("socks", "Socks")
@@ -65,6 +66,9 @@ o:value("ssh", "SSH")
if singbox_tags:find("with_naive_outbound") then if singbox_tags:find("with_naive_outbound") then
o:value("naive", "NaïveProxy") o:value("naive", "NaïveProxy")
end end
if version_ge_1_14_0 then
o:value("snell", "Snell")
end
o:value("_urltest", translate("URLTest")) o:value("_urltest", translate("URLTest"))
o:value("_shunt", translate("Shunt")) o:value("_shunt", translate("Shunt"))
o:value("_iface", translate("Custom Interface")) o:value("_iface", translate("Custom Interface"))
@@ -232,6 +236,43 @@ o:depends({ protocol = "anytls" })
o:depends({ protocol = "ssh" }) o:depends({ protocol = "ssh" })
o:depends({ protocol = "naive" }) o:depends({ protocol = "naive" })
if version_ge_1_14_0 then
-- snell
s.fields["password"]:depends({ protocol = "snell" })
o = s:option(Value, "snell_psk", translate("Pre shared key"))
o.rmempty = false
o:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_version", translate("Version"))
o:value("4")
o:value("6")
o:depends({ protocol = "snell" })
o = s:option(Flag, "snell_reuse", translate("Connection Reuse"))
o:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_network", translate("Transport"))
o:value("", "TCP UDP")
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_obfs_mode", translate("Camouflage Type"))
o:value("none")
o:value("http")
o:depends({ protocol = "snell", snell_version = "4" })
o = s:option(Value, "snell_obfs_host", translate("HTTP Host"))
o:depends({ protocol = "snell", snell_version = "4", snell_obfs_mode = "http" })
o = s:option(ListValue, "snell_mode", translate("Mode"))
o:value("default")
o:value("unshaped")
o:value("unsafe-raw")
o:depends({ protocol = "snell", snell_version = "6" })
end
o = s:option(ListValue, "security", translate("Encrypt Method")) o = s:option(ListValue, "security", translate("Encrypt Method"))
for a, t in ipairs(security_list) do o:value(t) end for a, t in ipairs(security_list) do o:value(t) end
o:depends({ protocol = "vmess" }) o:depends({ protocol = "vmess" })
@@ -364,7 +405,7 @@ if singbox_tags:find("with_quic") then
o = s:option(Flag, "hysteria2_realms", translate("Realms")) o = s:option(Flag, "hysteria2_realms", translate("Realms"))
o.default = "0" o.default = "0"
if api.compare_versions(singbox_version, ">=", "1.14.0") then if version_ge_1_14_0 then
o:depends({ protocol = "hysteria2"}) o:depends({ protocol = "hysteria2"})
else else
o:depends({ protocol = "__hide"}) o:depends({ protocol = "__hide"})
@@ -587,10 +628,10 @@ if singbox_tags:find("with_utls") then
o:depends({ protocol = "shadowsocks", tls = true }) o:depends({ protocol = "shadowsocks", tls = true })
o:depends({ protocol = "trojan", tls = true }) o:depends({ protocol = "trojan", tls = true })
o:depends({ protocol = "anytls", tls = true }) o:depends({ protocol = "anytls", tls = true })
o = s:option(Value, "reality_publicKey", translate("Public Key")) o = s:option(Value, "reality_publicKey", translate("Public Key"))
o:depends({ reality = true }) o:depends({ reality = true })
o = s:option(Value, "reality_shortId", translate("Short Id")) o = s:option(Value, "reality_shortId", translate("Short Id"))
o:depends({ reality = true }) o:depends({ reality = true })
end end
@@ -2,6 +2,7 @@ local api = require "luci.passwall.api"
api.set_default_cbi() api.set_default_cbi()
m = Map(api.s_config) m = Map(api.s_config)
m.redirect = api.url("server")
t = m:section(NamedSection, "global", "global", translate("Server-Side")) t = m:section(NamedSection, "global", "global", translate("Server-Side"))
t.anonymous = true t.anonymous = true
@@ -27,6 +27,9 @@ s.option_prefix = "singbox_"
local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'") local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'")
local local_version = api.get_app_version("sing-box"):match("[^v]+")
local version_ge_1_14_0 = api.compare_versions(local_version, ">=", "1.14.0")
local ss_method_list = { local ss_method_list = {
"none", "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", "xchacha20-ietf-poly1305", "none", "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", "xchacha20-ietf-poly1305",
"2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305" "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
@@ -56,6 +59,7 @@ o.custom_write = function(self, section, value)
end end
o = s:option(ListValue, "protocol", translate("Protocol")) o = s:option(ListValue, "protocol", translate("Protocol"))
o:value("direct", "Direct")
o:value("mixed", "Mixed") o:value("mixed", "Mixed")
o:value("socks", "Socks") o:value("socks", "Socks")
o:value("http", "HTTP") o:value("http", "HTTP")
@@ -63,29 +67,12 @@ o:value("shadowsocks", "Shadowsocks")
o:value("vmess", "Vmess") o:value("vmess", "Vmess")
o:value("vless", "VLESS") o:value("vless", "VLESS")
o:value("trojan", "Trojan") o:value("trojan", "Trojan")
o:value("naive", "Naive") if singbox_tags:find("with_naive_outbound") then
if singbox_tags:find("with_quic") then o:value("naive", "Naive")
o:value("hysteria", "Hysteria")
end
if singbox_tags:find("with_quic") then
o:value("tuic", "TUIC")
end
if singbox_tags:find("with_quic") then
o:value("hysteria2", "Hysteria2")
end end
o:value("anytls", "AnyTLS") o:value("anytls", "AnyTLS")
if singbox_tags:find("with_wireguard") then
o:value("wireguard", "WireGuard")
end
o:value("direct", "Direct")
o:depends({ custom = false }) o:depends({ custom = false })
o = s:option(DummyValue, "is_endpoint", "")
o.not_rewrite = true
o.template = m:template_path("/cbi/hidevalue")
o.value = "1"
o:depends({ custom = false, protocol = "wireguard" })
o = s:option(Value, "port", translate("Listen Port")) o = s:option(Value, "port", translate("Listen Port"))
o.datatype = "port" o.datatype = "port"
o:depends({ custom = false }) o:depends({ custom = false })
@@ -102,13 +89,13 @@ o:depends({ protocol = "vmess" })
o:depends({ protocol = "vless" }) o:depends({ protocol = "vless" })
o:depends({ protocol = "trojan" }) o:depends({ protocol = "trojan" })
o:depends({ protocol = "naive" }) o:depends({ protocol = "naive" })
o:depends({ protocol = "hysteria" })
o:depends({ protocol = "tuic" })
o:depends({ protocol = "hysteria2" })
o:depends({ protocol = "anytls" }) o:depends({ protocol = "anytls" })
o:depends({ protocol = "wireguard" })
if singbox_tags:find("with_quic") then if singbox_tags:find("with_quic") then
-- hysteria
s.fields["protocol"]:value("hysteria", "Hysteria")
s.fields["users"]:depends({ protocol = "hysteria" })
o = s:option(Value, "hysteria_obfs", translate("Obfs Password")) o = s:option(Value, "hysteria_obfs", translate("Obfs Password"))
o:depends({ protocol = "hysteria" }) o:depends({ protocol = "hysteria" })
@@ -135,6 +122,10 @@ if singbox_tags:find("with_quic") then
end end
if singbox_tags:find("with_quic") then if singbox_tags:find("with_quic") then
-- tuic
s.fields["protocol"]:value("tuic", "TUIC")
s.fields["users"]:depends({ protocol = "tuic" })
o = s:option(ListValue, "tuic_congestion_control", translate("Congestion control algorithm")) o = s:option(ListValue, "tuic_congestion_control", translate("Congestion control algorithm"))
o.default = "cubic" o.default = "cubic"
o:value("bbr", translate("BBR")) o:value("bbr", translate("BBR"))
@@ -166,6 +157,10 @@ if singbox_tags:find("with_quic") then
end end
if singbox_tags:find("with_quic") then if singbox_tags:find("with_quic") then
-- hysteria2
s.fields["protocol"]:value("hysteria2", "Hysteria2")
s.fields["users"]:depends({ protocol = "hysteria2" })
o = s:option(Flag, "hysteria2_realms", translate("Realms")) o = s:option(Flag, "hysteria2_realms", translate("Realms"))
o.default = "0" o.default = "0"
o:depends({ protocol = "hysteria2"}) o:depends({ protocol = "hysteria2"})
@@ -436,6 +431,10 @@ o.default = "50"
o:depends({ tcpbrutal = true }) o:depends({ tcpbrutal = true })
if singbox_tags:find("with_wireguard") then if singbox_tags:find("with_wireguard") then
-- wireguard
s.fields["protocol"]:value("wireguard", "WireGuard")
s.fields["users"]:depends({ protocol = "wireguard" })
o = s:option(Flag, "wireguard_system_interface", translate("System interface")) o = s:option(Flag, "wireguard_system_interface", translate("System interface"))
o.default = 0 o.default = 0
o:depends({ protocol = "wireguard" }) o:depends({ protocol = "wireguard" })
@@ -460,6 +459,32 @@ if singbox_tags:find("with_wireguard") then
o:depends({ protocol = "wireguard" }) o:depends({ protocol = "wireguard" })
end end
if version_ge_1_14_0 then
-- snell
s.fields["protocol"]:value("snell", "Snell")
s.fields["users"]:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_version", translate("Version"))
o:value("5")
o:value("6")
o:depends({ protocol = "snell" })
o = s:option(Value, "snell_psk", translate("Pre shared key"))
o.rmempty = false
o:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_obfs_mode", translate("Obfs"))
o:value("none")
o:value("http")
o:depends({ protocol = "snell", snell_version = "5" })
o = s:option(ListValue, "snell_mode", translate("Mode"))
o:value("default")
o:value("unshaped")
o:value("unsafe-raw")
o:depends({ protocol = "snell", snell_version = "6" })
end
o = s:option(Flag, "firewall_allow", translate("Firewall Allow")) o = s:option(Flag, "firewall_allow", translate("Firewall Allow"))
o.default = "0" o.default = "0"
o:depends({ custom = false }) o:depends({ custom = false })
@@ -597,6 +597,7 @@ function gen_outbound(flag, node, tag, proxy_table)
realm.address = nil realm.address = nil
realm.port = nil realm.port = nil
realm.port_mapping = (node.hysteria2_realm_upnp == "1") and { enabled = true } or nil realm.port_mapping = (node.hysteria2_realm_upnp == "1") and { enabled = true } or nil
realm.http_client = "direct_http_client"
return realm return realm
end end
return nil return nil
@@ -645,6 +646,19 @@ function gen_outbound(flag, node, tag, proxy_table)
} }
end end
if node.protocol == "snell" then
protocol_table = {
version = tonumber(node.snell_version),
psk = node.snell_psk,
userkey = node.password,
reuse = node.snell_reuse == "1" and true or false,
network = node.snell_network,
obfs_mode = node.snell_version == "4" and node.snell_obfs_mode or nil,
obfs_host = node.snell_version == "4" and node.snell_obfs_host or nil,
mode = node.snell_version == "6" and node.snell_mode or nil,
}
end
if protocol_table then if protocol_table then
for key, value in pairs(protocol_table) do for key, value in pairs(protocol_table) do
result[key] = value result[key] = value
@@ -801,6 +815,10 @@ function gen_config_server(node)
u.allowed_ips = user.allowed_ips or {} u.allowed_ips = user.allowed_ips or {}
u.persistent_keepalive_interval = 0 u.persistent_keepalive_interval = 0
end end
if node.protocol == "snell" then
u.name = user.username
u.userkey = user.password
end
users[#users + 1] = u users[#users + 1] = u
end end
end end
@@ -953,6 +971,7 @@ function gen_config_server(node)
realm.port = nil realm.port = nil
realm.stun_domain_resolver = "direct" realm.stun_domain_resolver = "direct"
realm.port_mapping = (node.hysteria2_realm_upnp == "1") and { enabled = true } or nil realm.port_mapping = (node.hysteria2_realm_upnp == "1") and { enabled = true } or nil
realm.http_client = { detour = "direct" }
return realm return realm
end end
return nil return nil
@@ -981,6 +1000,16 @@ function gen_config_server(node)
end end
end end
if node.protocol == "snell" then
protocol_table = {
users = users,
version = tonumber(node.snell_version),
psk = node.snell_psk,
obfs_mode = node.snell_version == "5" and node.snell_obfs_mode or nil,
mode = node.snell_version == "6" and node.snell_mode or nil,
}
end
if node.protocol == "direct" then if node.protocol == "direct" then
protocol_table = { protocol_table = {
network = (node.d_protocol ~= "TCP,UDP") and node.d_protocol or nil, network = (node.d_protocol ~= "TCP,UDP") and node.d_protocol or nil,
@@ -1167,8 +1196,8 @@ function gen_config(var)
format = format, format = format,
path = _type == "local" and w or nil, path = _type == "local" and w or nil,
url = _type == "remote" and w or nil, url = _type == "remote" and w or nil,
--download_detour = _type == "remote" and "", http_client = _type == "remote" and "remote_http_client" or nil,
--update_interval = _type == "remote" and "", --update_interval = _type == "remote" and "1d" or nil,
} }
end end
end end
@@ -1621,7 +1650,7 @@ function gen_config(var)
end end
end end
end end
local rule = { local rule = {
action = "route", action = "route",
inbound = inboundTag, inbound = inboundTag,
@@ -2202,7 +2231,37 @@ function gen_config(var)
table.insert(route.rule_set, v) table.insert(route.rule_set, v)
end end
end end
local http_clients
if outbounds then
local proxy_tag = COMMON.default_outbound_tag
if proxy_tag == "block" or proxy_tag == "direct" then -- 如默认节点是特殊节点,则选一个可用节点作为出口(urltest优先)
local first_node
for _, v in ipairs(outbounds) do
if not v["_flag_proxy_tag"] and not v.detour and v["_id"] and ((v.server and (v.server_port or v.server_ports)) or v.type == "urltest") then
first_node = first_node or v.tag
if v.type == "urltest" then
proxy_tag = v.tag
break
end
end
end
if proxy_tag == COMMON.default_outbound_tag then
proxy_tag = first_node
end
end
http_clients = {
{
tag = "remote_http_client",
detour = proxy_tag
},
{
tag = "direct_http_client",
detour = "direct"
}
}
end
if inbounds or outbounds then if inbounds or outbounds then
local config = { local config = {
log = { log = {
@@ -2219,8 +2278,10 @@ function gen_config(var)
outbounds = outbounds, outbounds = outbounds,
-- 路由 -- 路由
route = route, route = route,
--实验性 -- 实验性
experimental = experimental, experimental = experimental,
-- HTTP Client
http_clients = http_clients
} }
table.insert(outbounds, { table.insert(outbounds, {
type = "direct", type = "direct",
@@ -2349,7 +2410,7 @@ function gen_proto_config(var)
} }
if outbound then table.insert(outbounds, outbound) end if outbound then table.insert(outbounds, outbound) end
end end
local config = { local config = {
log = { log = {
disabled = true, disabled = true,
@@ -213,7 +213,7 @@
if (!rgb) return 'unknown'; // Handle invalid colors if (!rgb) return 'unknown'; // Handle invalid colors
// Calculate YIQ brightness (human eye perception) // Calculate YIQ brightness (human eye perception)
const brightness = ((rgb.r * 299) + (rgb.g * 587) + (rgb.b * 114)) / 1000; const brightness = ((rgb.r * 299) + (rgb.g * 587) + (rgb.b * 114)) / 1000;
return brightness > 128 ? 'light' : 'dark'; return brightness > 128 ? 'light' : 'dark';
} }
@@ -207,7 +207,7 @@
if (!rgb) return 'unknown'; // Handle invalid colors if (!rgb) return 'unknown'; // Handle invalid colors
// Calculate YIQ brightness (human eye perception) // Calculate YIQ brightness (human eye perception)
const brightness = ((rgb.r * 299) + (rgb.g * 587) + (rgb.b * 114)) / 1000; const brightness = ((rgb.r * 299) + (rgb.g * 587) + (rgb.b * 114)) / 1000;
return brightness > 128 ? 'light' : 'dark'; return brightness > 128 ? 'light' : 'dark';
} }
@@ -538,7 +538,7 @@
"&":"&amp;", "<":"&lt;", ">":"&gt;", '"':"&quot;", "'":"&#39;" "&":"&amp;", "<":"&lt;", ">":"&gt;", '"':"&quot;", "'":"&#39;"
}[c])); }[c]));
} }
function lv_change(cbid, listContainer, hiddenSelect, labelSpan, searchInput, new_key, new_text) { function lv_change(cbid, listContainer, hiddenSelect, labelSpan, searchInput, new_key, new_text) {
//改值 //改值
hiddenSelect.options[0].value = new_key; hiddenSelect.options[0].value = new_key;
@@ -549,7 +549,7 @@
lv_highlightSelectedItem(listContainer, hiddenSelect); lv_highlightSelectedItem(listContainer, hiddenSelect);
lv_updateGroupCounts(cbid, listContainer, hiddenSelect, searchInput); lv_updateGroupCounts(cbid, listContainer, hiddenSelect, searchInput);
} }
function lv_render_dropdown_list(cbid, panel, listContainer, hiddenSelect, labelSpan, searchInput, display) { function lv_render_dropdown_list(cbid, panel, listContainer, hiddenSelect, labelSpan, searchInput, display) {
if (window.lv_dropdown_rendered[cbid]) return; if (window.lv_dropdown_rendered[cbid]) return;
const data = window.lv_dropdown_data[cbid]; const data = window.lv_dropdown_data[cbid];
@@ -163,7 +163,7 @@
if (!rgb) return 'unknown'; // Handle invalid colors if (!rgb) return 'unknown'; // Handle invalid colors
// Calculate YIQ brightness (human eye perception) // Calculate YIQ brightness (human eye perception)
const brightness = ((rgb.r * 299) + (rgb.g * 587) + (rgb.b * 114)) / 1000; const brightness = ((rgb.r * 299) + (rgb.g * 587) + (rgb.b * 114)) / 1000;
return brightness > 128 ? 'light' : 'dark'; return brightness > 128 ? 'light' : 'dark';
} }
@@ -202,7 +202,7 @@
if (!rgb) return 'unknown'; // Handle invalid colors if (!rgb) return 'unknown'; // Handle invalid colors
// Calculate YIQ brightness (human eye perception) // Calculate YIQ brightness (human eye perception)
const brightness = ((rgb.r * 299) + (rgb.g * 587) + (rgb.b * 114)) / 1000; const brightness = ((rgb.r * 299) + (rgb.g * 587) + (rgb.b * 114)) / 1000;
return brightness > 128 ? 'light' : 'dark'; return brightness > 128 ? 'light' : 'dark';
} }
@@ -36,7 +36,7 @@ local appname = self.appname or map.config
background-color: rgba(131, 191, 255, 0.7) !important; background-color: rgba(131, 191, 255, 0.7) !important;
box-shadow: 0 4px 6px rgba(0,0,0,0.1); box-shadow: 0 4px 6px rgba(0,0,0,0.1);
} }
@media screen and (max-width: 1152px) { @media screen and (max-width: 1152px) {
#cbi-<%=appname%>-<%=sectiontype%> .cbi-section-table-titles { #cbi-<%=appname%>-<%=sectiontype%> .cbi-section-table-titles {
display: none !important; display: none !important;
@@ -116,7 +116,7 @@ local appname = self.appname or map.config
hiddenInput.value = changed ? newOrder.join(" ") : ""; hiddenInput.value = changed ? newOrder.join(" ") : "";
} }
} }
// hide lua luci version up/down // hide lua luci version up/down
function hideSortColumn(section) { function hideSortColumn(section) {
var table = section.getElementsByTagName("table")[0]; var table = section.getElementsByTagName("table")[0];
@@ -50,13 +50,13 @@ local api = map.api
var origin = window.location.origin; var origin = window.location.origin;
var hide_url = origin + "<%=api.url("hide")%>"; var hide_url = origin + "<%=api.url("hide")%>";
var show_url = origin + "<%=api.url("show")%>"; var show_url = origin + "<%=api.url("show")%>";
function hide(url) { function hide(url) {
if (confirm('<%:Are you sure to hide?%>') == true) { if (confirm('<%:Are you sure to hide?%>') == true) {
window.location.href = hide_url; window.location.href = hide_url;
} }
} }
var dom = document.getElementById("faq_reset"); var dom = document.getElementById("faq_reset");
if (dom) { if (dom) {
var li = ""; var li = "";
@@ -79,28 +79,28 @@
} }
} }
} }
function switch_gfw_mode() { function switch_gfw_mode() {
opt.set("use_gfw_list", true); opt.set("use_gfw_list", true);
opt.set("chn_list", "0"); opt.set("chn_list", "0");
opt.set("tcp_proxy_mode", "disable"); opt.set("tcp_proxy_mode", "disable");
opt.set("udp_proxy_mode", "disable"); opt.set("udp_proxy_mode", "disable");
} }
function switch_chnroute_mode() { function switch_chnroute_mode() {
opt.set("use_gfw_list", true); opt.set("use_gfw_list", true);
opt.set("chn_list", "direct"); opt.set("chn_list", "direct");
opt.set("tcp_proxy_mode", "proxy"); opt.set("tcp_proxy_mode", "proxy");
opt.set("udp_proxy_mode", "proxy"); opt.set("udp_proxy_mode", "proxy");
} }
function switch_returnhome_mode() { function switch_returnhome_mode() {
opt.set("use_gfw_list", false); opt.set("use_gfw_list", false);
opt.set("chn_list", "proxy"); opt.set("chn_list", "proxy");
opt.set("tcp_proxy_mode", "disable"); opt.set("tcp_proxy_mode", "disable");
opt.set("udp_proxy_mode", "disable"); opt.set("udp_proxy_mode", "disable");
} }
function switch_global_mode() { function switch_global_mode() {
opt.set("use_gfw_list", false); opt.set("use_gfw_list", false);
opt.set("chn_list", "0"); opt.set("chn_list", "0");
@@ -95,7 +95,7 @@ local current_node = map:get(section)
}; };
return r; return r;
} }
function genQrcode(btn, urlname, sid) { function genQrcode(btn, urlname, sid) {
var qrcode_div = document.getElementById("qrcode_div"); var qrcode_div = document.getElementById("qrcode_div");
qrcode_div.style.display = null; qrcode_div.style.display = null;
@@ -201,7 +201,7 @@ local current_node = map:get(section)
url = b64encsafe(v_method.value + ":" + v_password.value) + "@" + url = b64encsafe(v_method.value + ":" + v_password.value) + "@" +
_address + ":" + _address + ":" +
v_port.value + "/?"; v_port.value + "/?";
var shadow_tls; var shadow_tls;
//生成SS Shadow-TLS 插件参数 //生成SS Shadow-TLS 插件参数
const generateShadowTLSBase64 = function(paramStr) { const generateShadowTLSBase64 = function(paramStr) {
@@ -595,9 +595,9 @@ local current_node = map:get(section)
params += opt.query("pcs", dom_prefix + "tls_pinSHA256"); params += opt.query("pcs", dom_prefix + "tls_pinSHA256");
params += opt.query("vcn", dom_prefix + "tls_CertByName"); params += opt.query("vcn", dom_prefix + "tls_CertByName");
params += opt.query("ech", dom_prefix + "ech_config"); params += opt.query("ech", dom_prefix + "ech_config");
var v_password = null; var v_password = null;
if (v_type === "Hysteria2") { if (v_type === "Hysteria2") {
v_password = opt.get("hysteria2_auth_password"); v_password = opt.get("hysteria2_auth_password");
var dom_obfs_type = opt.get("hysteria2_obfs_type"); var dom_obfs_type = opt.get("hysteria2_obfs_type");
@@ -1127,7 +1127,7 @@ local current_node = map:get(section)
var kv = ws_path_params_array[i].split('='); var kv = ws_path_params_array[i].split('=');
ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || ''); ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || '');
} }
if (ws_path_params.ed) { if (ws_path_params.ed) {
opt.set(dom_prefix + 'ws_path', ws_path); opt.set(dom_prefix + 'ws_path', ws_path);
opt.set(dom_prefix + 'ws_enableEarlyData', true); opt.set(dom_prefix + 'ws_enableEarlyData', true);
@@ -1165,7 +1165,7 @@ local current_node = map:get(section)
opt.set(dom_prefix + 'uot', queryParam.udp); opt.set(dom_prefix + 'uot', queryParam.udp);
opt.set(dom_prefix + 'use_finalmask', !!queryParam.fm); opt.set(dom_prefix + 'use_finalmask', !!queryParam.fm);
opt.set(dom_prefix + 'finalmask', queryParam.fm || ""); opt.set(dom_prefix + 'finalmask', queryParam.fm || "");
if (queryParam["shadow-tls"]) { if (queryParam["shadow-tls"]) {
//解析SS Shadow-TLS 插件参数 //解析SS Shadow-TLS 插件参数
const parseShadowTLSParams = function(base64Str, outObj) { const parseShadowTLSParams = function(base64Str, outObj) {
@@ -1274,7 +1274,7 @@ local current_node = map:get(section)
var kv = ws_path_params_array[i].split('='); var kv = ws_path_params_array[i].split('=');
ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || ''); ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || '');
} }
if (ws_path_params.ed) { if (ws_path_params.ed) {
opt.set(dom_prefix + 'ws_path', ws_path); opt.set(dom_prefix + 'ws_path', ws_path);
opt.set(dom_prefix + 'ws_enableEarlyData', true); opt.set(dom_prefix + 'ws_enableEarlyData', true);
@@ -1416,7 +1416,7 @@ local current_node = map:get(section)
var kv = ws_path_params_array[i].split('='); var kv = ws_path_params_array[i].split('=');
ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || ''); ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || '');
} }
if (ws_path_params.ed) { if (ws_path_params.ed) {
opt.set(dom_prefix + 'ws_path', ws_path); opt.set(dom_prefix + 'ws_path', ws_path);
opt.set(dom_prefix + 'ws_enableEarlyData', true); opt.set(dom_prefix + 'ws_enableEarlyData', true);
@@ -1452,7 +1452,7 @@ local current_node = map:get(section)
} else if (has_xray) { } else if (has_xray) {
dom_prefix = "xray_"; dom_prefix = "xray_";
} }
var m = parseNodeUrl(ssrurl); var m = parseNodeUrl(ssrurl);
var password = m.passwd; var password = m.passwd;
if (password === "") { if (password === "") {
@@ -1559,7 +1559,7 @@ local current_node = map:get(section)
var kv = ws_path_params_array[i].split('='); var kv = ws_path_params_array[i].split('=');
ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || ''); ws_path_params[decodeURIComponent(kv[0]).toLowerCase()] = decodeURIComponent(kv[1] || '');
} }
if (ws_path_params.ed) { if (ws_path_params.ed) {
opt.set(dom_prefix + 'ws_path', ws_path); opt.set(dom_prefix + 'ws_path', ws_path);
opt.set(dom_prefix + 'ws_enableEarlyData', true); opt.set(dom_prefix + 'ws_enableEarlyData', true);
@@ -1110,7 +1110,7 @@ table td, .table .td {
const dom = document.getElementById('modal-mask'); const dom = document.getElementById('modal-mask');
dom.style.display = 'block'; dom.style.display = 'block';
dom.innerHTML = '<div style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;"><%:Processing, please wait…%></div>'; dom.innerHTML = '<div style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;"><%:Processing, please wait…%></div>';
const chunkSize = 1000; // Fragmented sending to overcome uhttpd's limitations, with each fragment containing 1000 characters. const chunkSize = 1000; // Fragmented sending to overcome uhttpd's limitations, with each fragment containing 1000 characters.
const totalChunks = Math.ceil(link.length / chunkSize); const totalChunks = Math.ceil(link.length / chunkSize);
let currentChunk = 0; let currentChunk = 0;
@@ -1213,7 +1213,7 @@ table td, .table .td {
} }
} }
} }
const set_node_div = { const set_node_div = {
section: '', section: '',
open(cbi_id, protocol) { open(cbi_id, protocol) {
@@ -1546,7 +1546,7 @@ table td, .table .td {
onChange("auto_detection_time", auto_detection_time); onChange("auto_detection_time", auto_detection_time);
}); });
}); });
const links = document.querySelectorAll('a'); const links = document.querySelectorAll('a');
links.forEach(link => { links.forEach(link => {
link.addEventListener('click', (e) => { link.addEventListener('click', (e) => {
@@ -393,7 +393,7 @@ table td, .table .td {
'' + table_html + '' + table_html +
'</div>' '</div>'
} }
function addTabDOM(li, content) { function addTabDOM(li, content) {
let tab_ul_html = '<ul class="cbi-tabmenu">'; let tab_ul_html = '<ul class="cbi-tabmenu">';
let tab_content_html = '<<%=section_tag%> class="cbi-section-shunt_rule cbi-section-shunt_rule-tabbed" id="cbi-<%=appname%>-shunt_rules">'; let tab_content_html = '<<%=section_tag%> class="cbi-section-shunt_rule cbi-section-shunt_rule-tabbed" id="cbi-<%=appname%>-shunt_rules">';
@@ -417,7 +417,7 @@ table td, .table .td {
if (default_group) { if (default_group) {
cbi_t_switch("<%=appname%>.shunt_rules", default_group) cbi_t_switch("<%=appname%>.shunt_rules", default_group)
} }
origin_group_shunt_rule_order = {}; origin_group_shunt_rule_order = {};
for (let group in group_shunt_rules) { for (let group in group_shunt_rules) {
origin_group_shunt_rule_order[group] = get_shunt_rule_order(group); origin_group_shunt_rule_order[group] = get_shunt_rule_order(group);
@@ -17,7 +17,7 @@ local prefix = self.option_prefix or ""
if (x && x.status == 200 && data.code == 1) { if (x && x.status == 200 && data.code == 1) {
const private_key_dom = getOption("<%=self.config%>", "<%=section%>", "<%=prefix%>wireguard_private_key"); const private_key_dom = getOption("<%=self.config%>", "<%=section%>", "<%=prefix%>wireguard_private_key");
private_key_dom.value = data.data.private_key; private_key_dom.value = data.data.private_key;
const public_key_dom = getOption("<%=self.config%>", "<%=section%>", "<%=prefix%>wireguard_public_key"); const public_key_dom = getOption("<%=self.config%>", "<%=section%>", "<%=prefix%>wireguard_public_key");
public_key_dom.value = data.data.public_key; public_key_dom.value = data.data.public_key;
} else { } else {
@@ -21,7 +21,7 @@ local sectiontype = self.sectiontype
} }
); );
} }
var edit_btn = document.getElementById("cbi-<%=config%>-<%=sectiontype%>").getElementsByClassName("cbi-button cbi-button-edit"); var edit_btn = document.getElementById("cbi-<%=config%>-<%=sectiontype%>").getElementsByClassName("cbi-button cbi-button-edit");
for (var i = 0; i < edit_btn.length; i++) { for (var i = 0; i < edit_btn.length; i++) {
try { try {
+3
View File
@@ -2225,3 +2225,6 @@ msgstr "密码套件"
msgid "Configures the list of supported cipher suites, separated by :" msgid "Configures the list of supported cipher suites, separated by :"
msgstr "配置支持的密码套件列表,以冒号 (:) 分隔。" msgstr "配置支持的密码套件列表,以冒号 (:) 分隔。"
msgid "Connection Reuse"
msgstr "连接复用"
@@ -26,10 +26,10 @@
cat /dev/null > ${LOCK_FILE} cat /dev/null > ${LOCK_FILE}
fi fi
echo $$ > ${LOCK_FILE} echo $$ > ${LOCK_FILE}
/etc/init.d/${CONFIG} restart >/dev/null 2>&1 & /etc/init.d/${CONFIG} restart >/dev/null 2>&1 &
logger -p notice -t network -s "${CONFIG}: restart when $INTERFACE ifup" logger -p notice -t network -s "${CONFIG}: restart when $INTERFACE ifup"
rm -rf ${LOCK_FILE} rm -rf ${LOCK_FILE}
} }
} }
@@ -223,7 +223,7 @@ run_xray() {
json_add_string "dns_socks_port" "${dns_socks_port}" json_add_string "dns_socks_port" "${dns_socks_port}"
} }
[ -n "$dns_listen_port" ] && json_add_string "dns_listen_port" "${dns_listen_port}" [ -n "$dns_listen_port" ] && json_add_string "dns_listen_port" "${dns_listen_port}"
if [ -n "$direct_dns_udp_server" ]; then if [ -n "$direct_dns_udp_server" ]; then
direct_dns_port=$(echo ${direct_dns_udp_server} | awk -F '#' '{print $2}') direct_dns_port=$(echo ${direct_dns_udp_server} | awk -F '#' '{print $2}')
json_add_string "direct_dns_udp_server" "$(echo ${direct_dns_udp_server} | awk -F '#' '{print $1}')" json_add_string "direct_dns_udp_server" "$(echo ${direct_dns_udp_server} | awk -F '#' '{print $1}')"
@@ -1295,7 +1295,7 @@ start_dns() {
ln_run "$(first_type dnsmasq)" "dnsmasq_direct" "/dev/null" -C ${DIRECT_DNSMASQ_CONF} -x ${GLOBAL_ACL_PATH}/direct_dnsmasq.pid ln_run "$(first_type dnsmasq)" "dnsmasq_direct" "/dev/null" -C ${DIRECT_DNSMASQ_CONF} -x ${GLOBAL_ACL_PATH}/direct_dnsmasq.pid
echo "${DIRECT_DNSMASQ_PORT}" > ${GLOBAL_ACL_PATH}/direct_dnsmasq_port echo "${DIRECT_DNSMASQ_PORT}" > ${GLOBAL_ACL_PATH}/direct_dnsmasq_port
} }
#Rewrite the default DNS service configuration #Rewrite the default DNS service configuration
#Modify the default dnsmasq service #Modify the default dnsmasq service
lua $APP_PATH/helper_dnsmasq.lua stretch lua $APP_PATH/helper_dnsmasq.lua stretch
@@ -1662,7 +1662,7 @@ start() {
sysctl -w net.bridge.bridge-nf-call-ip6tables=0 >/dev/null 2>&1 sysctl -w net.bridge.bridge-nf-call-ip6tables=0 >/dev/null 2>&1
} }
fi fi
start_crontab start_crontab
echolog "运行完成!\n" echolog "运行完成!\n"
@@ -491,7 +491,6 @@ if IS_SHUNT_NODE then
} }
insert_array_after(config_lines, tmp_lines, "#--4") insert_array_after(config_lines, tmp_lines, "#--4")
end end
end end
if is_file_nonzero(file_shunt_host) then if is_file_nonzero(file_shunt_host) then
@@ -325,7 +325,7 @@ load_acl() {
continue continue
fi fi
msg="$remarks】,${msg}" msg="$remarks】,${msg}"
ipt_tmp=$ipt_n ipt_tmp=$ipt_n
[ -n "${is_tproxy}" ] && ipt_tmp=$ipt_m [ -n "${is_tproxy}" ] && ipt_tmp=$ipt_m
@@ -340,7 +340,7 @@ load_acl() {
echolog " - ${msg}不代理所有 TCP 端口" echolog " - ${msg}不代理所有 TCP 端口"
fi fi
} }
[ "$udp_no_redir_ports" != "disable" ] && { [ "$udp_no_redir_ports" != "disable" ] && {
if ! has_1_65535 "$udp_no_redir_ports"; then if ! has_1_65535 "$udp_no_redir_ports"; then
[ "$_ipv4" != "1" ] && add_port_rules "$ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp" $udp_no_redir_ports "-j RETURN" 2>/dev/null [ "$_ipv4" != "1" ] && add_port_rules "$ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -p udp" $udp_no_redir_ports "-j RETURN" 2>/dev/null
@@ -352,7 +352,7 @@ load_acl() {
echolog " - ${msg}不代理所有 UDP 端口" echolog " - ${msg}不代理所有 UDP 端口"
fi fi
} }
local dns_redirect local dns_redirect
[ $(config_n_get @global[0] dns_redirect "1") = "1" ] && dns_redirect=53 [ $(config_n_get @global[0] dns_redirect "1") = "1" ] && dns_redirect=53
if ([ -n "$tcp_port" ] && [ -n "${tcp_proxy_mode}" ]) || ([ -n "$udp_port" ] && [ -n "${udp_proxy_mode}" ]); then if ([ -n "$tcp_port" ] && [ -n "${tcp_proxy_mode}" ]) || ([ -n "$udp_port" ] && [ -n "${udp_proxy_mode}" ]); then
@@ -463,7 +463,7 @@ load_acl() {
$ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -m mark --mark 88 -j ACCEPT 2>/dev/null $ip6t_m -A PSW $(comment "$remarks") ${_ipt_source} -m mark --mark 88 -j ACCEPT 2>/dev/null
} }
} }
[ -n "$tcp_port" ] && { [ -n "$tcp_port" ] && {
if [ -n "${tcp_proxy_mode}" ]; then if [ -n "${tcp_proxy_mode}" ]; then
msg2="${msg}代理 TCP 使用节点[$node_remark]" msg2="${msg}代理 TCP 使用节点[$node_remark]"
@@ -475,7 +475,7 @@ load_acl() {
msg2="${msg2}(REDIRECT:${tcp_port})" msg2="${msg2}(REDIRECT:${tcp_port})"
ipt_j="$(REDIRECT $tcp_port)" ipt_j="$(REDIRECT $tcp_port)"
fi fi
[ "$accept_icmp" = "1" ] && { [ "$accept_icmp" = "1" ] && {
[ "${use_fakedns}" = "1" ] && $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} -d $FAKE_IP $(REDIRECT) [ "${use_fakedns}" = "1" ] && $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} -d $FAKE_IP $(REDIRECT)
[ "${use_proxy_list}" = "1" ] && $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} $(dst $black_set_name) $(REDIRECT) [ "${use_proxy_list}" = "1" ] && $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} $(dst $black_set_name) $(REDIRECT)
@@ -484,7 +484,7 @@ load_acl() {
[ "${use_shunt_node}" = "1" ] && $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} $(dst $shunt_set_name) $(REDIRECT) [ "${use_shunt_node}" = "1" ] && $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} $(dst $shunt_set_name) $(REDIRECT)
[ "${tcp_proxy_mode}" != "disable" ] && $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} $(REDIRECT) [ "${tcp_proxy_mode}" != "disable" ] && $ipt_n -A PSW $(comment "$remarks") -p icmp ${_ipt_source} $(REDIRECT)
} }
[ "$accept_icmpv6" = "1" ] && [ "$PROXY_IPV6" = "1" ] && [ "$_ipv4" != "1" ] && { [ "$accept_icmpv6" = "1" ] && [ "$PROXY_IPV6" = "1" ] && [ "$_ipv4" != "1" ] && {
[ "${use_fakedns}" = "1" ] && $ip6t_n -A PSW $(comment "$remarks") -p ipv6-icmp ${_ipt_source} -d $FAKE_IP_6 $(REDIRECT) 2>/dev/null [ "${use_fakedns}" = "1" ] && $ip6t_n -A PSW $(comment "$remarks") -p ipv6-icmp ${_ipt_source} -d $FAKE_IP_6 $(REDIRECT) 2>/dev/null
[ "${use_proxy_list}" = "1" ] && $ip6t_n -A PSW $(comment "$remarks") -p ipv6-icmp ${_ipt_source} $(dst $black6_set_name) $(REDIRECT) 2>/dev/null [ "${use_proxy_list}" = "1" ] && $ip6t_n -A PSW $(comment "$remarks") -p ipv6-icmp ${_ipt_source} $(dst $black6_set_name) $(REDIRECT) 2>/dev/null
@@ -555,7 +555,7 @@ load_acl() {
unset tcp_port udp_port node_remark _acl_list use_shunt_node dns_redirect use_fakedns unset tcp_port udp_port node_remark _acl_list use_shunt_node dns_redirect use_fakedns
done done
} }
[ "$ENABLED_DEFAULT_ACL" = 1 ] && [ "$CLIENT_PROXY" = 1 ] && { [ "$ENABLED_DEFAULT_ACL" = 1 ] && [ "$CLIENT_PROXY" = 1 ] && {
msg="【默认】," msg="【默认】,"
local ipt_tmp=$ipt_n local ipt_tmp=$ipt_n
@@ -571,7 +571,7 @@ load_acl() {
echolog " - ${msg}不代理所有 TCP 端口" echolog " - ${msg}不代理所有 TCP 端口"
fi fi
} }
[ "$UDP_NO_REDIR_PORTS" != "disable" ] && { [ "$UDP_NO_REDIR_PORTS" != "disable" ] && {
add_port_rules "$ip6t_m -A PSW $(comment "默认") -p udp" $UDP_NO_REDIR_PORTS "-j RETURN" add_port_rules "$ip6t_m -A PSW $(comment "默认") -p udp" $UDP_NO_REDIR_PORTS "-j RETURN"
add_port_rules "$ipt_m -A PSW $(comment "默认") -p udp" $UDP_NO_REDIR_PORTS "-j RETURN" add_port_rules "$ipt_m -A PSW $(comment "默认") -p udp" $UDP_NO_REDIR_PORTS "-j RETURN"
@@ -582,7 +582,7 @@ load_acl() {
echolog " - ${msg}不代理所有 UDP 端口" echolog " - ${msg}不代理所有 UDP 端口"
fi fi
} }
local DNS_REDIRECT local DNS_REDIRECT
[ $(config_n_get @global[0] dns_redirect "1") = "1" ] && DNS_REDIRECT=53 [ $(config_n_get @global[0] dns_redirect "1") = "1" ] && DNS_REDIRECT=53
if [ -n "$NODE" ] && ([ -n "${TCP_PROXY_MODE}" ] || [ -n "${UDP_PROXY_MODE}" ]); then if [ -n "$NODE" ] && ([ -n "${TCP_PROXY_MODE}" ] || [ -n "${UDP_PROXY_MODE}" ]); then
@@ -590,7 +590,7 @@ load_acl() {
else else
[ -n "${DIRECT_DNSMASQ_PORT}" ] && DNS_REDIRECT=${DIRECT_DNSMASQ_PORT} [ -n "${DIRECT_DNSMASQ_PORT}" ] && DNS_REDIRECT=${DIRECT_DNSMASQ_PORT}
fi fi
if [ -n "${DNS_REDIRECT}" ]; then if [ -n "${DNS_REDIRECT}" ]; then
$ipt_m -A PSW $(comment "默认") -p udp --dport 53 -j RETURN $ipt_m -A PSW $(comment "默认") -p udp --dport 53 -j RETURN
$ip6t_m -A PSW $(comment "默认") -p udp --dport 53 -j RETURN 2>/dev/null $ip6t_m -A PSW $(comment "默认") -p udp --dport 53 -j RETURN 2>/dev/null
@@ -609,7 +609,7 @@ load_acl() {
[ "${USE_BLOCK_LIST}" = "1" ] && $ip6t_m -A PSW $(comment "默认") $(dst $IPSET_BLOCK6) -j MARK --set-mark 88 2>/dev/null [ "${USE_BLOCK_LIST}" = "1" ] && $ip6t_m -A PSW $(comment "默认") $(dst $IPSET_BLOCK6) -j MARK --set-mark 88 2>/dev/null
[ "${USE_DIRECT_LIST}" = "1" ] && $ip6t_m -A PSW $(comment "默认") $(dst $IPSET_WHITE6) -j RETURN 2>/dev/null [ "${USE_DIRECT_LIST}" = "1" ] && $ip6t_m -A PSW $(comment "默认") $(dst $IPSET_WHITE6) -j RETURN 2>/dev/null
} }
[ "$TCP_PROXY_DROP_PORTS" != "disable" ] && { [ "$TCP_PROXY_DROP_PORTS" != "disable" ] && {
[ "$PROXY_IPV6" = "1" ] && { [ "$PROXY_IPV6" = "1" ] && {
[ "${USE_FAKEDNS}" = "1" ] && add_port_rules "$ip6t_m -A PSW $(comment "默认") -p tcp" $TCP_PROXY_DROP_PORTS "-d $FAKE_IP_6 -j MARK --set-mark 88" [ "${USE_FAKEDNS}" = "1" ] && add_port_rules "$ip6t_m -A PSW $(comment "默认") -p tcp" $TCP_PROXY_DROP_PORTS "-d $FAKE_IP_6 -j MARK --set-mark 88"
@@ -627,7 +627,7 @@ load_acl() {
[ "${TCP_PROXY_MODE}" != "disable" ] && add_port_rules "$ipt_m -A PSW $(comment "默认") -p tcp" $TCP_PROXY_DROP_PORTS "-j MARK --set-mark 88" [ "${TCP_PROXY_MODE}" != "disable" ] && add_port_rules "$ipt_m -A PSW $(comment "默认") -p tcp" $TCP_PROXY_DROP_PORTS "-j MARK --set-mark 88"
echolog " - ${msg}屏蔽代理 TCP 端口[${TCP_PROXY_DROP_PORTS}]" echolog " - ${msg}屏蔽代理 TCP 端口[${TCP_PROXY_DROP_PORTS}]"
} }
[ "$UDP_PROXY_DROP_PORTS" != "disable" ] && { [ "$UDP_PROXY_DROP_PORTS" != "disable" ] && {
[ "$PROXY_IPV6" = "1" ] && { [ "$PROXY_IPV6" = "1" ] && {
[ "${USE_FAKEDNS}" = "1" ] && add_port_rules "$ip6t_m -A PSW $(comment "默认") -p udp" $UDP_PROXY_DROP_PORTS "-d $FAKE_IP_6 -j MARK --set-mark 88" [ "${USE_FAKEDNS}" = "1" ] && add_port_rules "$ip6t_m -A PSW $(comment "默认") -p udp" $UDP_PROXY_DROP_PORTS "-d $FAKE_IP_6 -j MARK --set-mark 88"
@@ -667,7 +667,7 @@ load_acl() {
msg2="${msg2}(REDIRECT:${REDIR_PORT})" msg2="${msg2}(REDIRECT:${REDIR_PORT})"
ipt_j="$(REDIRECT $REDIR_PORT)" ipt_j="$(REDIRECT $REDIR_PORT)"
fi fi
[ "$accept_icmp" = "1" ] && { [ "$accept_icmp" = "1" ] && {
[ "${USE_FAKEDNS}" = "1" ] && $ipt_n -A PSW $(comment "默认") -p icmp -d $FAKE_IP $(REDIRECT) [ "${USE_FAKEDNS}" = "1" ] && $ipt_n -A PSW $(comment "默认") -p icmp -d $FAKE_IP $(REDIRECT)
[ "${USE_PROXY_LIST}" = "1" ] && $ipt_n -A PSW $(comment "默认") -p icmp $(dst $IPSET_BLACK) $(REDIRECT) [ "${USE_PROXY_LIST}" = "1" ] && $ipt_n -A PSW $(comment "默认") -p icmp $(dst $IPSET_BLACK) $(REDIRECT)
@@ -676,7 +676,7 @@ load_acl() {
[ "${USE_SHUNT_NODE}" = "1" ] && $ipt_n -A PSW $(comment "默认") -p icmp $(dst $IPSET_SHUNT) $(REDIRECT) [ "${USE_SHUNT_NODE}" = "1" ] && $ipt_n -A PSW $(comment "默认") -p icmp $(dst $IPSET_SHUNT) $(REDIRECT)
[ "${TCP_PROXY_MODE}" != "disable" ] && $ipt_n -A PSW $(comment "默认") -p icmp $(REDIRECT) [ "${TCP_PROXY_MODE}" != "disable" ] && $ipt_n -A PSW $(comment "默认") -p icmp $(REDIRECT)
} }
[ "$accept_icmpv6" = "1" ] && [ "$PROXY_IPV6" = "1" ] && { [ "$accept_icmpv6" = "1" ] && [ "$PROXY_IPV6" = "1" ] && {
[ "${USE_FAKEDNS}" = "1" ] && $ip6t_n -A PSW $(comment "默认") -p ipv6-icmp -d $FAKE_IP_6 $(REDIRECT) [ "${USE_FAKEDNS}" = "1" ] && $ip6t_n -A PSW $(comment "默认") -p ipv6-icmp -d $FAKE_IP_6 $(REDIRECT)
[ "${USE_PROXY_LIST}" = "1" ] && $ip6t_n -A PSW $(comment "默认") -p ipv6-icmp $(dst $IPSET_BLACK6) $(REDIRECT) [ "${USE_PROXY_LIST}" = "1" ] && $ip6t_n -A PSW $(comment "默认") -p ipv6-icmp $(dst $IPSET_BLACK6) $(REDIRECT)
@@ -982,7 +982,7 @@ add_firewall_rule() {
echolog " - [$?]解析并加入[分流节点] GeoIP 到 IPSET 完成" echolog " - [$?]解析并加入[分流节点] GeoIP 到 IPSET 完成"
fi fi
} }
get_local_ips ip4 | sed "s/^/add $IPSET_LOCAL /" | ipset -! -R get_local_ips ip4 | sed "s/^/add $IPSET_LOCAL /" | ipset -! -R
get_local_ips ip6 | sed "s/^/add $IPSET_LOCAL6 /" | ipset -! -R get_local_ips ip6 | sed "s/^/add $IPSET_LOCAL6 /" | ipset -! -R
@@ -1185,7 +1185,7 @@ add_firewall_rule() {
else else
ipt_j="$(REDIRECT $REDIR_PORT)" ipt_j="$(REDIRECT $REDIR_PORT)"
fi fi
msg="【路由器本机】," msg="【路由器本机】,"
[ "$TCP_NO_REDIR_PORTS" != "disable" ] && { [ "$TCP_NO_REDIR_PORTS" != "disable" ] && {
add_port_rules "$ipt_tmp -A PSW_OUTPUT -p tcp" $TCP_NO_REDIR_PORTS "-j RETURN" add_port_rules "$ipt_tmp -A PSW_OUTPUT -p tcp" $TCP_NO_REDIR_PORTS "-j RETURN"
@@ -1197,7 +1197,7 @@ add_firewall_rule() {
echolog " - ${msg}不代理所有 TCP 端口" echolog " - ${msg}不代理所有 TCP 端口"
fi fi
} }
[ "$UDP_NO_REDIR_PORTS" != "disable" ] && { [ "$UDP_NO_REDIR_PORTS" != "disable" ] && {
add_port_rules "$ipt_m -A PSW_OUTPUT -p udp" $UDP_NO_REDIR_PORTS "-j RETURN" add_port_rules "$ipt_m -A PSW_OUTPUT -p udp" $UDP_NO_REDIR_PORTS "-j RETURN"
add_port_rules "$ip6t_m -A PSW_OUTPUT -p udp" $UDP_NO_REDIR_PORTS "-j RETURN" add_port_rules "$ip6t_m -A PSW_OUTPUT -p udp" $UDP_NO_REDIR_PORTS "-j RETURN"
@@ -1228,7 +1228,7 @@ add_firewall_rule() {
[ "${LOCALHOST_TCP_PROXY_MODE}" != "disable" ] && add_port_rules "$ipt_m -A PSW_OUTPUT -p tcp" $TCP_PROXY_DROP_PORTS "-j MARK --set-mark 88" [ "${LOCALHOST_TCP_PROXY_MODE}" != "disable" ] && add_port_rules "$ipt_m -A PSW_OUTPUT -p tcp" $TCP_PROXY_DROP_PORTS "-j MARK --set-mark 88"
echolog " - ${msg}屏蔽代理 TCP 端口[${TCP_PROXY_DROP_PORTS}]" echolog " - ${msg}屏蔽代理 TCP 端口[${TCP_PROXY_DROP_PORTS}]"
} }
[ "$UDP_PROXY_DROP_PORTS" != "disable" ] && { [ "$UDP_PROXY_DROP_PORTS" != "disable" ] && {
[ "${USE_FAKEDNS}" = "1" ] && add_port_rules "$ipt_m -A PSW_OUTPUT -p udp" $UDP_PROXY_DROP_PORTS "-d $FAKE_IP -j MARK --set-mark 88" [ "${USE_FAKEDNS}" = "1" ] && add_port_rules "$ipt_m -A PSW_OUTPUT -p udp" $UDP_PROXY_DROP_PORTS "-d $FAKE_IP -j MARK --set-mark 88"
[ "${USE_PROXY_LIST}" = "1" ] && add_port_rules "$ipt_m -A PSW_OUTPUT -p udp" $UDP_PROXY_DROP_PORTS "$(dst $IPSET_BLACK) -j MARK --set-mark 88" [ "${USE_PROXY_LIST}" = "1" ] && add_port_rules "$ipt_m -A PSW_OUTPUT -p udp" $UDP_PROXY_DROP_PORTS "$(dst $IPSET_BLACK) -j MARK --set-mark 88"
@@ -1374,7 +1374,7 @@ add_firewall_rule() {
$ipt_m -I OUTPUT $(comment "mangle-OUTPUT-PSW") -o lo -j RETURN $ipt_m -I OUTPUT $(comment "mangle-OUTPUT-PSW") -o lo -j RETURN
insert_rule_before "$ipt_m" "OUTPUT" "mwan3" "$(comment mangle-OUTPUT-PSW) -m mark --mark ${FWMARK} -j RETURN" insert_rule_before "$ipt_m" "OUTPUT" "mwan3" "$(comment mangle-OUTPUT-PSW) -m mark --mark ${FWMARK} -j RETURN"
$ip6t_m -I OUTPUT $(comment "mangle-OUTPUT-PSW") -o lo -j RETURN $ip6t_m -I OUTPUT $(comment "mangle-OUTPUT-PSW") -o lo -j RETURN
insert_rule_before "$ip6t_m" "OUTPUT" "mwan3" "$(comment mangle-OUTPUT-PSW) -m mark --mark ${FWMARK} -j RETURN" insert_rule_before "$ip6t_m" "OUTPUT" "mwan3" "$(comment mangle-OUTPUT-PSW) -m mark --mark ${FWMARK} -j RETURN"
} }
@@ -26,7 +26,7 @@ while [ "$ENABLED" -eq 1 ]; do
IFS= read -r cmd < "$file" IFS= read -r cmd < "$file"
[ -z "$cmd" ] && continue [ -z "$cmd" ] && continue
cmd_check=$(printf '%s' "$cmd" | sed 's/>.*$//;s/[[:space:]]*$//') cmd_check=$(printf '%s' "$cmd" | sed 's/>.*$//;s/[[:space:]]*$//')
case "$cmd_check" in case "$cmd_check" in
*dns2socks*) cmd_check=${cmd_check//:/ } ;; *dns2socks*) cmd_check=${cmd_check//:/ } ;;
esac esac
@@ -381,7 +381,7 @@ load_acl() {
continue continue
fi fi
msg="$remarks】,${msg}" msg="$remarks】,${msg}"
[ "$tcp_no_redir_ports" != "disable" ] && { [ "$tcp_no_redir_ports" != "disable" ] && {
if ! has_1_65535 "$tcp_no_redir_ports"; then if ! has_1_65535 "$tcp_no_redir_ports"; then
nft "add rule $NFTABLE_NAME $nft_prerouting_chain ${_ipt_source} ip protocol tcp $(factor $tcp_no_redir_ports "tcp dport") counter return comment \"$remarks\"" nft "add rule $NFTABLE_NAME $nft_prerouting_chain ${_ipt_source} ip protocol tcp $(factor $tcp_no_redir_ports "tcp dport") counter return comment \"$remarks\""
@@ -393,7 +393,7 @@ load_acl() {
echolog " - ${msg}不代理所有 TCP 端口" echolog " - ${msg}不代理所有 TCP 端口"
fi fi
} }
[ "$udp_no_redir_ports" != "disable" ] && { [ "$udp_no_redir_ports" != "disable" ] && {
if ! has_1_65535 "$udp_no_redir_ports"; then if ! has_1_65535 "$udp_no_redir_ports"; then
nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_no_redir_ports "udp dport") counter return comment \"$remarks\"" nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_no_redir_ports "udp dport") counter return comment \"$remarks\""
@@ -484,7 +484,7 @@ load_acl() {
[ "${use_block_list}" = "1" ] && nft_rule_dual "PSW_MANGLE_V6" "${_ipt_source} ip6 daddr" "$NFTSET_BLOCK6" "counter reject comment \"$remarks\"" [ "${use_block_list}" = "1" ] && nft_rule_dual "PSW_MANGLE_V6" "${_ipt_source} ip6 daddr" "$NFTSET_BLOCK6" "counter reject comment \"$remarks\""
[ "${use_direct_list}" = "1" ] && nft_rule_dual "PSW_MANGLE_V6" "${_ipt_source} ip6 daddr" "$NFTSET_WHITE6" "counter return comment \"$remarks\"" [ "${use_direct_list}" = "1" ] && nft_rule_dual "PSW_MANGLE_V6" "${_ipt_source} ip6 daddr" "$NFTSET_WHITE6" "counter return comment \"$remarks\""
} }
[ "$tcp_proxy_drop_ports" != "disable" ] && { [ "$tcp_proxy_drop_ports" != "disable" ] && {
[ "$PROXY_IPV6" = "1" ] && [ "$_ipv4" != "1" ] && { [ "$PROXY_IPV6" = "1" ] && [ "$_ipv4" != "1" ] && {
[ "${use_fakedns}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip6 daddr $FAKE_IP_6 counter reject comment \"$remarks\"" 2>/dev/null [ "${use_fakedns}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip6 daddr $FAKE_IP_6 counter reject comment \"$remarks\"" 2>/dev/null
@@ -502,7 +502,7 @@ load_acl() {
[ "${tcp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") counter reject comment \"$remarks\"" [ "${tcp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") counter reject comment \"$remarks\""
echolog " - ${msg}屏蔽代理 TCP 端口[${tcp_proxy_drop_ports}]" echolog " - ${msg}屏蔽代理 TCP 端口[${tcp_proxy_drop_ports}]"
} }
[ "$udp_proxy_drop_ports" != "disable" ] && { [ "$udp_proxy_drop_ports" != "disable" ] && {
[ "$PROXY_IPV6" = "1" ] && [ "$_ipv4" != "1" ] && { [ "$PROXY_IPV6" = "1" ] && [ "$_ipv4" != "1" ] && {
[ "${use_fakedns}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip6 daddr $FAKE_IP_6 counter reject comment \"$remarks\"" 2>/dev/null [ "${use_fakedns}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip6 daddr $FAKE_IP_6 counter reject comment \"$remarks\"" 2>/dev/null
@@ -534,7 +534,7 @@ load_acl() {
nft_chain="PSW_NAT" nft_chain="PSW_NAT"
nft_j="$(REDIRECT $tcp_port)" nft_j="$(REDIRECT $tcp_port)"
fi fi
[ "$accept_icmp" = "1" ] && { [ "$accept_icmp" = "1" ] && {
[ "${use_direct_list}" = "1" ] && nft_rule_dual "PSW_ICMP_REDIRECT" "ip protocol icmp ${_ipt_source} ip daddr" "$NFTSET_WHITE" "counter return comment \"$remarks\"" [ "${use_direct_list}" = "1" ] && nft_rule_dual "PSW_ICMP_REDIRECT" "ip protocol icmp ${_ipt_source} ip daddr" "$NFTSET_WHITE" "counter return comment \"$remarks\""
[ "${use_fakedns}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} ip daddr $FAKE_IP $(REDIRECT) comment \"$remarks\"" [ "${use_fakedns}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} ip daddr $FAKE_IP $(REDIRECT) comment \"$remarks\""
@@ -727,7 +727,7 @@ load_acl() {
nft_chain="PSW_NAT" nft_chain="PSW_NAT"
nft_j="$(REDIRECT $REDIR_PORT)" nft_j="$(REDIRECT $REDIR_PORT)"
fi fi
[ "$accept_icmp" = "1" ] && { [ "$accept_icmp" = "1" ] && {
[ "${USE_DIRECT_LIST}" = "1" ] && nft_rule_dual "PSW_ICMP_REDIRECT" "ip daddr" "$NFTSET_WHITE" "counter return comment \"默认\"" [ "${USE_DIRECT_LIST}" = "1" ] && nft_rule_dual "PSW_ICMP_REDIRECT" "ip daddr" "$NFTSET_WHITE" "counter return comment \"默认\""
[ "${USE_FAKEDNS}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ip daddr $FAKE_IP $(REDIRECT) comment \"默认\"" [ "${USE_FAKEDNS}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ip daddr $FAKE_IP $(REDIRECT) comment \"默认\""
@@ -1271,7 +1271,7 @@ add_firewall_rule() {
[ "$ENABLED_DEFAULT_ACL" = 1 ] && { [ "$ENABLED_DEFAULT_ACL" = 1 ] && {
msg="【路由器本机】," msg="【路由器本机】,"
[ "$TCP_NO_REDIR_PORTS" != "disable" ] && { [ "$TCP_NO_REDIR_PORTS" != "disable" ] && {
nft "add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp $(factor $TCP_NO_REDIR_PORTS "tcp dport") counter return" nft "add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp $(factor $TCP_NO_REDIR_PORTS "tcp dport") counter return"
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto tcp $(factor $TCP_NO_REDIR_PORTS "tcp dport") counter return" nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto tcp $(factor $TCP_NO_REDIR_PORTS "tcp dport") counter return"
@@ -1282,7 +1282,7 @@ add_firewall_rule() {
echolog " - ${msg}不代理所有 TCP 端口" echolog " - ${msg}不代理所有 TCP 端口"
fi fi
} }
[ "$UDP_NO_REDIR_PORTS" != "disable" ] && { [ "$UDP_NO_REDIR_PORTS" != "disable" ] && {
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp $(factor $UDP_NO_REDIR_PORTS "udp dport") counter return" nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp $(factor $UDP_NO_REDIR_PORTS "udp dport") counter return"
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto udp $(factor $UDP_NO_REDIR_PORTS "udp dport") counter return" nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto udp $(factor $UDP_NO_REDIR_PORTS "udp dport") counter return"
@@ -1313,7 +1313,7 @@ add_firewall_rule() {
[ "${LOCALHOST_TCP_PROXY_MODE}" != "disable" ] && nft add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") counter reject [ "${LOCALHOST_TCP_PROXY_MODE}" != "disable" ] && nft add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") counter reject
echolog " - ${msg}屏蔽代理 TCP 端口[${TCP_PROXY_DROP_PORTS}]" echolog " - ${msg}屏蔽代理 TCP 端口[${TCP_PROXY_DROP_PORTS}]"
} }
[ "$UDP_PROXY_DROP_PORTS" != "disable" ] && { [ "$UDP_PROXY_DROP_PORTS" != "disable" ] && {
[ "${USE_FAKEDNS}" = "1" ] && nft add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr $FAKE_IP $(factor $UDP_PROXY_DROP_PORTS "udp dport") counter reject [ "${USE_FAKEDNS}" = "1" ] && nft add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr $FAKE_IP $(factor $UDP_PROXY_DROP_PORTS "udp dport") counter reject
[ "${USE_PROXY_LIST}" = "1" ] && nft_rule_dual "PSW_OUTPUT_MANGLE" "ip protocol udp ip daddr" "$NFTSET_BLACK" "$(factor $UDP_PROXY_DROP_PORTS "udp dport") counter reject" [ "${USE_PROXY_LIST}" = "1" ] && nft_rule_dual "PSW_OUTPUT_MANGLE" "ip protocol udp ip daddr" "$NFTSET_BLACK" "$(factor $UDP_PROXY_DROP_PORTS "udp dport") counter reject"
@@ -510,7 +510,7 @@ local function fetch_rule(rule_name, rule_type, url, exclude_domain, max_retries
local set_name = "psw_" .. rule_name local set_name = "psw_" .. rule_name
if rule_name == "chnroute" then set_name = "psw_chn" if rule_name == "chnroute" then set_name = "psw_chn"
elseif rule_name == "chnroute6" then set_name = "psw_chn6" end elseif rule_name == "chnroute6" then set_name = "psw_chn6" end
local addr_type = (rule_type == "ip4") and "ipv4_addr" or "ipv6_addr" local addr_type = (rule_type == "ip4") and "ipv4_addr" or "ipv6_addr"
gen_cache(set_name, addr_type, file_tmp, nft_file) gen_cache(set_name, addr_type, file_tmp, nft_file)
os.execute(string.format("mv -f %s %s.nft", nft_file, rule_final_path)) os.execute(string.format("mv -f %s %s.nft", nft_file, rule_final_path))
@@ -1047,7 +1047,7 @@ local function processData(szType, content, add_mode, group, sub_cfg)
log("跳过 Trojan 节点,因未适配到 Trojan 核心程序,或未正确设置节点使用类型。") log("跳过 Trojan 节点,因未适配到 Trojan 核心程序,或未正确设置节点使用类型。")
return nil return nil
end end
local alias = "" local alias = ""
if content:find("#") then if content:find("#") then
local idx_sp = content:find("#") local idx_sp = content:find("#")
@@ -1391,7 +1391,7 @@ local function processData(szType, content, add_mode, group, sub_cfg)
content = content:sub(0, idx_sp - 1) content = content:sub(0, idx_sp - 1)
end end
result.remarks = UrlDecode(alias) result.remarks = UrlDecode(alias)
local query = split(content:gsub("/%?", "?"), '%?') local query = split(content:gsub("/%?", "?"), '%?')
local host_port = query[1] local host_port = query[1]
local params = {} local params = {}
+2 -2
View File
@@ -6,8 +6,8 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall2 PKG_NAME:=luci-app-passwall2
PKG_VERSION:=26.8.27 PKG_VERSION:=26.9.2
PKG_RELEASE:=107 PKG_RELEASE:=109
PKG_PO_VERSION:=$(PKG_VERSION) PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \ PKG_CONFIG_DEPENDS:= \
@@ -853,7 +853,7 @@ function geo_view()
return return
end end
local function get_rules(str, type) local function get_rules(str, type)
local rules_id = {} local rules = {}
uci_foreach("shunt_rules", function(s) uci_foreach("shunt_rules", function(s)
local list local list
if type == "geoip" then list = s.ip_list else list = s.domain_list end if type == "geoip" then list = s.ip_list else list = s.domain_list end
@@ -862,14 +862,18 @@ function geo_view()
local prefix, main = line:match("^(.-):(.*)") local prefix, main = line:match("^(.-):(.*)")
if not main then main = line end if not main then main = line end
if type == "geoip" and (api.datatypes.ipaddr(str) or api.datatypes.ip6addr(str)) then if type == "geoip" and (api.datatypes.ipaddr(str) or api.datatypes.ip6addr(str)) then
if main:find(str, 1, true) then rules_id[#rules_id + 1] = s[".name"] end if main:find(str, 1, true) then
table.insert(rules, {id = s[".name"], group = s.group or i18n.translate("default")})
end
else else
if main == str then rules_id[#rules_id + 1] = s[".name"] end if main == str then
table.insert(rules, {id = s[".name"], group = s.group or i18n.translate("default")})
end
end end
end end
end end
end) end)
return rules_id return rules
end end
local geo_dir = (uci_get("@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/"):match("^(.*)/") local geo_dir = (uci_get("@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/"):match("^(.*)/")
local geosite_path = geo_dir .. "/geosite.dat" local geosite_path = geo_dir .. "/geosite.dat"
@@ -890,11 +894,17 @@ function geo_view()
for line in geo_string:gmatch("([^\n]+)") do for line in geo_string:gmatch("([^\n]+)") do
lines[#lines + 1] = geo_type .. ":" .. line lines[#lines + 1] = geo_type .. ":" .. line
for _, r in ipairs(get_rules(line, geo_type) or {}) do for _, r in ipairs(get_rules(line, geo_type) or {}) do
if not seen[r] then seen[r] = true; rules[#rules + 1] = r end if not seen[r.id] then
seen[r.id] = true
rules[#rules + 1] = string.format("[%s]%s", r.group, r.id)
end
end end
end end
for _, r in ipairs(get_rules(value, geo_type) or {}) do for _, r in ipairs(get_rules(value, geo_type) or {}) do
if not seen[r] then seen[r] = true; rules[#rules + 1] = r end if not seen[r.id] then
seen[r.id] = true
rules[#rules + 1] = string.format("[%s]%s", r.group, r.id)
end
end end
geo_string = table.concat(lines, "\n") geo_string = table.concat(lines, "\n")
if #rules > 0 then if #rules > 0 then
@@ -40,6 +40,7 @@ local security_list = { "none", "auto", "aes-128-gcm", "chacha20-poly1305", "zer
local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'") local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'")
local singbox_version = api.get_app_version("sing-box"):match("[^v]+") local singbox_version = api.get_app_version("sing-box"):match("[^v]+")
local version_ge_1_14_0 = api.compare_versions(singbox_version, ">=", "1.14.0")
o = s:option(ListValue, "protocol", translate("Protocol")) o = s:option(ListValue, "protocol", translate("Protocol"))
o:value("socks", "Socks") o:value("socks", "Socks")
@@ -68,6 +69,9 @@ o:value("ssh", "SSH")
if singbox_tags:find("with_naive_outbound") then if singbox_tags:find("with_naive_outbound") then
o:value("naive", "NaïveProxy") o:value("naive", "NaïveProxy")
end end
if version_ge_1_14_0 then
o:value("snell", "Snell")
end
o:value("_urltest", translate("URLTest")) o:value("_urltest", translate("URLTest"))
o:value("_shunt", translate("Shunt")) o:value("_shunt", translate("Shunt"))
o:value("_iface", translate("Custom Interface")) o:value("_iface", translate("Custom Interface"))
@@ -237,6 +241,43 @@ o:depends({ protocol = "anytls" })
o:depends({ protocol = "ssh" }) o:depends({ protocol = "ssh" })
o:depends({ protocol = "naive" }) o:depends({ protocol = "naive" })
if version_ge_1_14_0 then
-- snell
s.fields["password"]:depends({ protocol = "snell" })
o = s:option(Value, "snell_psk", translate("Pre shared key"))
o.rmempty = false
o:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_version", translate("Version"))
o:value("4")
o:value("6")
o:depends({ protocol = "snell" })
o = s:option(Flag, "snell_reuse", translate("reuse"))
o:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_network", translate("Transport"))
o:value("", "TCP UDP")
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_obfs_mode", translate("Camouflage Type"))
o:value("none")
o:value("http")
o:depends({ protocol = "snell", snell_version = "4" })
o = s:option(Value, "snell_obfs_host", translate("HTTP Host"))
o:depends({ protocol = "snell", snell_version = "4", snell_obfs_mode = "http" })
o = s:option(ListValue, "snell_mode", translate("Mode"))
o:value("default")
o:value("unshaped")
o:value("unsafe-raw")
o:depends({ protocol = "snell", snell_version = "6" })
end
o = s:option(ListValue, "security", translate("Encrypt Method")) o = s:option(ListValue, "security", translate("Encrypt Method"))
for a, t in ipairs(security_list) do o:value(t) end for a, t in ipairs(security_list) do o:value(t) end
o:depends({ protocol = "vmess" }) o:depends({ protocol = "vmess" })
@@ -400,7 +441,7 @@ if singbox_tags:find("with_quic") then
o = s:option(Flag, "hysteria2_realms", translate("Realms")) o = s:option(Flag, "hysteria2_realms", translate("Realms"))
o.default = "0" o.default = "0"
if api.compare_versions(singbox_version, ">=", "1.14.0") then if version_ge_1_14_0 then
o:depends({ protocol = "hysteria2"}) o:depends({ protocol = "hysteria2"})
else else
o:depends({ protocol = "__hide"}) o:depends({ protocol = "__hide"})
@@ -2,6 +2,7 @@ local api = require "luci.passwall2.api"
api.set_default_cbi() api.set_default_cbi()
m = Map(api.s_config) m = Map(api.s_config)
m.redirect = api.url("server")
t = m:section(NamedSection, "global", "global", translate("Server-Side")) t = m:section(NamedSection, "global", "global", translate("Server-Side"))
t.anonymous = true t.anonymous = true
@@ -27,6 +27,9 @@ s.option_prefix = "singbox_"
local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'") local singbox_tags = luci.sys.exec(singbox_bin .. " version | grep 'Tags:' | awk '{print $2}'")
local local_version = api.get_app_version("sing-box"):match("[^v]+")
local version_ge_1_14_0 = api.compare_versions(local_version, ">=", "1.14.0")
local ss_method_list = { local ss_method_list = {
"none", "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", "xchacha20-ietf-poly1305", "none", "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", "xchacha20-ietf-poly1305",
"2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305" "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
@@ -56,6 +59,7 @@ o.custom_write = function(self, section, value)
end end
o = s:option(ListValue, "protocol", translate("Protocol")) o = s:option(ListValue, "protocol", translate("Protocol"))
o:value("direct", "Direct")
o:value("mixed", "Mixed") o:value("mixed", "Mixed")
o:value("socks", "Socks") o:value("socks", "Socks")
o:value("http", "HTTP") o:value("http", "HTTP")
@@ -64,28 +68,9 @@ o:value("vmess", "Vmess")
o:value("vless", "VLESS") o:value("vless", "VLESS")
o:value("trojan", "Trojan") o:value("trojan", "Trojan")
o:value("naive", "Naive") o:value("naive", "Naive")
if singbox_tags:find("with_quic") then
o:value("hysteria", "Hysteria")
end
if singbox_tags:find("with_quic") then
o:value("tuic", "TUIC")
end
if singbox_tags:find("with_quic") then
o:value("hysteria2", "Hysteria2")
end
o:value("anytls", "AnyTLS") o:value("anytls", "AnyTLS")
if singbox_tags:find("with_wireguard") then
o:value("wireguard", "WireGuard")
end
o:value("direct", "Direct")
o:depends({ custom = false }) o:depends({ custom = false })
o = s:option(DummyValue, "is_endpoint", "")
o.not_rewrite = true
o.template = m:template_path("/cbi/hidevalue")
o.value = "1"
o:depends({ custom = false, protocol = "wireguard" })
o = s:option(Value, "port", translate("Listen Port")) o = s:option(Value, "port", translate("Listen Port"))
o.datatype = "port" o.datatype = "port"
o:depends({ custom = false }) o:depends({ custom = false })
@@ -102,13 +87,13 @@ o:depends({ protocol = "vmess" })
o:depends({ protocol = "vless" }) o:depends({ protocol = "vless" })
o:depends({ protocol = "trojan" }) o:depends({ protocol = "trojan" })
o:depends({ protocol = "naive" }) o:depends({ protocol = "naive" })
o:depends({ protocol = "hysteria" })
o:depends({ protocol = "tuic" })
o:depends({ protocol = "hysteria2" })
o:depends({ protocol = "anytls" }) o:depends({ protocol = "anytls" })
o:depends({ protocol = "wireguard" })
if singbox_tags:find("with_quic") then if singbox_tags:find("with_quic") then
-- hysteria
s.fields["protocol"]:value("hysteria", "Hysteria")
s.fields["users"]:depends({ protocol = "hysteria" })
o = s:option(Value, "hysteria_obfs", translate("Obfs Password")) o = s:option(Value, "hysteria_obfs", translate("Obfs Password"))
o:depends({ protocol = "hysteria" }) o:depends({ protocol = "hysteria" })
@@ -135,6 +120,10 @@ if singbox_tags:find("with_quic") then
end end
if singbox_tags:find("with_quic") then if singbox_tags:find("with_quic") then
-- tuic
s.fields["protocol"]:value("tuic", "TUIC")
s.fields["users"]:depends({ protocol = "tuic" })
o = s:option(ListValue, "tuic_congestion_control", translate("Congestion control algorithm")) o = s:option(ListValue, "tuic_congestion_control", translate("Congestion control algorithm"))
o.default = "cubic" o.default = "cubic"
o:value("bbr", translate("BBR")) o:value("bbr", translate("BBR"))
@@ -166,6 +155,10 @@ if singbox_tags:find("with_quic") then
end end
if singbox_tags:find("with_quic") then if singbox_tags:find("with_quic") then
-- hysteria2
s.fields["protocol"]:value("hysteria2", "Hysteria2")
s.fields["users"]:depends({ protocol = "hysteria2" })
o = s:option(Flag, "hysteria2_realms", translate("Realms")) o = s:option(Flag, "hysteria2_realms", translate("Realms"))
o.default = "0" o.default = "0"
o:depends({ protocol = "hysteria2"}) o:depends({ protocol = "hysteria2"})
@@ -435,6 +428,10 @@ o.default = "50"
o:depends({ tcpbrutal = true }) o:depends({ tcpbrutal = true })
if singbox_tags:find("with_wireguard") then if singbox_tags:find("with_wireguard") then
-- wireguard
s.fields["protocol"]:value("wireguard", "WireGuard")
s.fields["users"]:depends({ protocol = "wireguard" })
o = s:option(Flag, "wireguard_system_interface", translate("System interface")) o = s:option(Flag, "wireguard_system_interface", translate("System interface"))
o.default = 0 o.default = 0
o:depends({ protocol = "wireguard" }) o:depends({ protocol = "wireguard" })
@@ -459,6 +456,32 @@ if singbox_tags:find("with_wireguard") then
o:depends({ protocol = "wireguard" }) o:depends({ protocol = "wireguard" })
end end
if version_ge_1_14_0 then
-- snell
s.fields["protocol"]:value("snell", "Snell")
s.fields["users"]:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_version", translate("Version"))
o:value("5")
o:value("6")
o:depends({ protocol = "snell" })
o = s:option(Value, "snell_psk", translate("Pre shared key"))
o.rmempty = false
o:depends({ protocol = "snell" })
o = s:option(ListValue, "snell_obfs_mode", translate("Obfs"))
o:value("none")
o:value("http")
o:depends({ protocol = "snell", snell_version = "5" })
o = s:option(ListValue, "snell_mode", translate("Mode"))
o:value("default")
o:value("unshaped")
o:value("unsafe-raw")
o:depends({ protocol = "snell", snell_version = "6" })
end
o = s:option(Flag, "firewall_allow", translate("Firewall Allow")) o = s:option(Flag, "firewall_allow", translate("Firewall Allow"))
o.default = "0" o.default = "0"
o:depends({ custom = false }) o:depends({ custom = false })
@@ -667,6 +667,19 @@ function gen_outbound(flag, node, tag, proxy_table)
} }
end end
if node.protocol == "snell" then
protocol_table = {
version = tonumber(node.snell_version),
psk = node.snell_psk,
userkey = node.password,
reuse = node.snell_reuse == "1" and true or false,
network = node.snell_network,
obfs_mode = node.snell_version == "4" and node.snell_obfs_mode or nil,
obfs_host = node.snell_version == "4" and node.snell_obfs_host or nil,
mode = node.snell_version == "6" and node.snell_mode or nil,
}
end
if protocol_table then if protocol_table then
for key, value in pairs(protocol_table) do for key, value in pairs(protocol_table) do
result[key] = value result[key] = value
@@ -823,6 +836,10 @@ function gen_config_server(node)
u.allowed_ips = user.allowed_ips or {} u.allowed_ips = user.allowed_ips or {}
u.persistent_keepalive_interval = 0 u.persistent_keepalive_interval = 0
end end
if node.protocol == "snell" then
u.name = user.username
u.userkey = user.password
end
users[#users + 1] = u users[#users + 1] = u
end end
end end
@@ -1003,6 +1020,16 @@ function gen_config_server(node)
end end
end end
if node.protocol == "snell" then
protocol_table = {
users = users,
version = tonumber(node.snell_version),
psk = node.snell_psk,
obfs_mode = node.snell_version == "5" and node.snell_obfs_mode or nil,
mode = node.snell_version == "6" and node.snell_mode or nil,
}
end
if node.protocol == "direct" then if node.protocol == "direct" then
protocol_table = { protocol_table = {
network = (node.d_protocol ~= "TCP,UDP") and node.d_protocol or nil, network = (node.d_protocol ~= "TCP,UDP") and node.d_protocol or nil,
@@ -1838,7 +1838,7 @@ function gen_config(var)
end end
end end
end end
if dns_outboundTag == "blackhole" then if value.outboundTag == "blackhole" then
table.insert(dns_out_rules, { table.insert(dns_out_rules, {
action = "return", action = "return",
rCode = 0, rCode = 0,
+3 -3
View File
@@ -18,12 +18,12 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-proto-wwand PKG_NAME:=luci-proto-wwand
PKG_RELEASE:=5 PKG_RELEASE:=6
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/ddimension/luci-proto-wwand.git PKG_SOURCE_URL:=https://github.com/ddimension/luci-proto-wwand.git
PKG_SOURCE_VERSION:=35f0323f5621eb06e69991f5819ff53e4ca8cc7a PKG_SOURCE_VERSION:=cc0bbfe522c7bc941a25f1ad14dfb2874660311b
PKG_SOURCE_DATE:=2026-08-31 PKG_SOURCE_DATE:=2026-09-02
PKG_MIRROR_HASH:=skip PKG_MIRROR_HASH:=skip
PKG_LICENSE:=GPL-2.0-only PKG_LICENSE:=GPL-2.0-only
+1 -1
View File
@@ -17,7 +17,7 @@ LUCI_NAME:=luci-theme-footstrap
FOOTSTRAP_VERSION?= FOOTSTRAP_VERSION?=
ifneq ($(FOOTSTRAP_VERSION),) ifneq ($(FOOTSTRAP_VERSION),)
PKG_VERSION:=$(FOOTSTRAP_VERSION) PKG_VERSION:=$(FOOTSTRAP_VERSION)
PKG_RELEASE:=52 PKG_RELEASE:=54
endif endif
LUCI_TITLE:=Footstrap Theme LUCI_TITLE:=Footstrap Theme
@@ -763,9 +763,19 @@ function build() {
]); ]);
} }
/* This tab is mounted in the stock System form, so LuCI's own Save & Apply footer sits under a
* page it does not save asked on the forum, topic 251930. Above the first section, because
* the misreading happens before anyone scrolls to Defaults. A bare `.alert-message`:
* theme/35-alerts.css keeps the tinted variants for a STATUS and a flat panel for a note. */
const note = E('div', { 'class': 'alert-message fs-ap-note' }, [
E('p', {}, [ _('Changes apply at once and live in this browser.', 'footstrap') ]),
E('p', {}, [ _('To keep them on the router, use Save as default under Defaults — not Save & Apply at the foot of the page.', 'footstrap') ])
]);
/* Colours and Surfaces are one fold: the same job, split into two headings only because a /* Colours and Surfaces are one fold: the same job, split into two headings only because a
* figure and the sheet it sits on are read differently */ * figure and the sheet it sits on are read differently */
const page = E('div', { 'class': 'fs-ap' }, [ const page = E('div', { 'class': 'fs-ap' }, [
note,
section(_('Interface', 'footstrap'), shell), section(_('Interface', 'footstrap'), shell),
foldable(_('Colours', 'footstrap'), foldable(_('Colours', 'footstrap'),
colours.concat([ E('div', { 'class': 'fs-ap-head fs-ap-sub' }, [ E('h4', {}, [ _('Surfaces', 'footstrap') ]) ]) ], surfaces), colours.concat([ E('div', { 'class': 'fs-ap-head fs-ap-sub' }, [ E('h4', {}, [ _('Surfaces', 'footstrap') ]) ]) ], surfaces),
@@ -261,6 +261,22 @@ function fitChrome() {
* fitShell's data-narrow, and is untouched here.) */ * fitShell's data-narrow, and is untouched here.) */
const topBar = !!bar && !!menu && prefs.isTopLayout(); const topBar = !!bar && !!menu && prefs.isTopLayout();
/* THE BAR MAY NOT GET SHORTER WHILE IT IS BEING MEASURED. The three classes below are taken off
* so the menu can be asked whether it fits on one row (fs-fit rule 1), and on a narrow bar that
* makes the whole chrome one row instead of two for that layout every pixel of it above the
* reader, who is moved by exactly as much and moved back a moment later. Chromium and Firefox
* hide it behind their scroll anchoring; Safari implements none, on any platform, so on an
* iPhone this is the Overview creeping up once per poll tick. Reported from one, and bisected to
* this pass on the reporter's own router: `?off=chromefit` stopped it, `?off=measure` (the
* tables' own re-measure) did not.
*
* `min-height`, not `height`: the pass may legitimately need MORE room a moment later that is
* what `fs-bar-stack` is for and a floor lets it grow while refusing the shrink. It comes off
* before `publishBarHeight()`, which must measure the bar the reader actually gets. */
const pinned = bar ? Math.round(bar.getBoundingClientRect().height) : 0;
const hadMinH = bar ? bar.style.minHeight : '';
if (pinned > 0) bar.style.minHeight = pinned + 'px';
if (bar) bar.classList.remove('fs-bar-stack', 'fs-ind-compact', 'fs-bar-actrow'); if (bar) bar.classList.remove('fs-bar-stack', 'fs-ind-compact', 'fs-bar-actrow');
fitTabStrips(); fitTabStrips();
/* ---- does the main menu fit on the brand's row? ---- /* ---- does the main menu fit on the brand's row? ----
@@ -291,6 +307,7 @@ function fitChrome() {
if (bar && (topBar || document.documentElement.hasAttribute('data-narrow'))) if (bar && (topBar || document.documentElement.hasAttribute('data-narrow')))
fitCluster(bar, menu); fitCluster(bar, menu);
if (pinned > 0) bar.style.minHeight = hadMinH;
publishBarHeight(bar); publishBarHeight(bar);
} }
@@ -470,8 +487,30 @@ function wireIndicatorCounts() {
/* ui.showIndicator replaces the label's text node on an update and appends the span on the /* ui.showIndicator replaces the label's text node on an update and appends the span on the
* first change of the session, so childList, subtree and characterData all matter. Our own * first change of the session, so childList, subtree and characterData all matter. Our own
* attribute writes do not re-enter: attributes are not observed. */ * attribute writes do not re-enter: attributes are not observed.
new MutationObserver(stamp).observe(box, { childList: true, subtree: true, characterData: true }); *
* AND THE BAR IS RE-FITTED HERE, because a pill arriving is a layout change the fit engine
* cannot see: fs-fit watches `#view` and the dialog, and `#indicators` is in the chrome. The
* cluster then wraps flexbox answers first and the compact form only follows when something
* else happens to wake the pass. Measured on WebKit at 390px in the narrow sidebar bar, a second
* indicator beside the poll pill pushed the whole page down 91px and held it there for 708 ms,
* until `fs-ind-compact` landed at 771 ms and it snapped back: a lurch down and up, once per
* appearance, which is what "the Overview twitches, as if an invisible loading bar came and
* went" is from the reader's side. Called from the same callback as `stamp()`, so the decision
* is taken in the microtask before paint and the wrapped frame is never drawn. It cannot
* re-enter: `fitChrome()` writes classes on the BAR and attributes here, and neither is what
* this observer watches.
*
* ON A PILL ARRIVING OR LEAVING, not on its text: `ui.showIndicator` rewrites the poll pill's
* label on every tick, and a fit is a handful of forced layouts running one per tick to answer
* a label that did not change width is the cost this file spends its measurements avoiding. A
* childList record is the cluster gaining or losing a member, which is the layout change that
* wraps it. */
new MutationObserver((recs) => {
stamp();
if (recs.some((r) => r.type === 'childList' && r.target === box)) fitChrome();
})
.observe(box, { childList: true, subtree: true, characterData: true });
stamp(); stamp();
} }
@@ -99,133 +99,50 @@ function run() {
* *
* Wrapping `dom.content()` itself also works, at the price of patching a luci-base API every app * Wrapping `dom.content()` itself also works, at the price of patching a luci-base API every app
* shares and up to seven read/write pairs per call. */ * shares and up to seven read/write pairs per call. */
/* A section body and a table: what `dom.content()` is called on and this can hold. Its third target, /* The three things `dom.content()` is called on: a section body, a table, and a TABLE'S BODY. The
* a table's BODY, is deliberately absent a floor there holds nothing. `min-height` is undefined on * third was missing and cost a release: on 24.10's Overview the section is a table, so nothing here
* a table box (CSS 2.1 §10.7) and WebKit acts on that: a `.table.cbi-section-table` carrying a 313px * matched, the floor held nothing, and a poll emptying it took 58px off the document under the
* floor still collapsed to 30px and the document lost 284px (webkit, /admin/network/firewall, 24.10 * reader on ImmortalWrt 24.10 with a webkit engine, where no CI job looks. tools/scroll-anchor.mjs
* and 25.12 alike; Chromium holds the 313px), and writing the floor on the `.tbody` instead loses * looks for the same three and says why. */
* the same 284px. 24.10 has no `.tbody` at all: its Overview renders `<table class="table">` with the
* rows directly inside, and the container a poll empties there is `.cbi-section > div`.
* tools/scroll-anchor.mjs looks for all three when it picks a box to collapse, which is a different
* question from which box can carry a floor. */
const SHRINKS = '.cbi-section > div, .table'; const SHRINKS = '.cbi-section > div, .table';
/* A box qualifies for a floor through its CHILDREN, so emptying it takes it out of `SHRINKS` and /* A floor is swept off the box that wears it, and the climb below can put one on a box that is not
* a floor nothing sweeps any more is a floor nothing can take off: measured on Network -> * in SHRINKS itself so emptying the table under it takes the whole section out of the sweep and
* Interfaces, a section emptied of its table kept 1299px of `min-height` for the life of the page. * the floor stays for the life of the page: 927px of blank on /admin/network/network, 13 s after
* Every floor this writes is marked, so the sweep finds its own work again whatever became of the * the section emptied (tools/floor-contract.mjs). Every floor is marked, so the sweep finds its own
* markup underneath. The attribute is in the theme's own namespace and says nothing to CSS. */ * work again whatever became of the markup underneath. The attribute is in the theme's own
* namespace and says nothing to CSS; matching on inline `min-height` instead would sweep off the
* ones an app wrote for itself. */
const FLOORED = '[data-fs-floor]'; const FLOORED = '[data-fs-floor]';
/* What the container would stand at with no floor under it, asked of the CONTENT rather than by /* The floor is the height the next tick may not go below, one per container. Cleared before the
* taking the floor off and re-measuring. * read, or each floor measures itself and never comes down; batched into one clear, one read pass
* and one write pass, so the whole sweep costs a single forced layout rather than one per element.
* *
* Clearing `min-height` to re-measure was the obvious way and is the expensive one: `min-height` is * Not while the reader scrolls: clearing to re-measure is a layout read, and a floor staying where
* a scroll-anchoring suppression trigger on the path from the anchor to the scroller * it was is still a floor.
* (css-scroll-anchoring-1 §3.2), so a clear, a forced layout and a write back tell the engine to
* drop its own compensation for that frame the theme switching off the very thing it relies on,
* once per tick.
* *
* The span of the children answers the same question with reads alone. It is the box's content * AND NOT ON A TABLE BOX, WHICH CANNOT HOLD IT. `min-height` is undefined on a table box (CSS 2.1
* height plus what the box adds below it; a collapsed margin on the last child can put it a few * §10.7) and WebKit acts on that: a `.table` wearing a 313px floor still collapsed to 30px when its
* pixels out, which a floor can afford the floor is a lower bound on a height that is about to be * rows went, and the document lost 284px on /admin/network/firewall Chromium held the 313px. So
* replaced, not a layout the page is drawn to. * the floor climbs to the first box that is not a table, where the same emptied table costs 0px on
* both engines. `getComputedStyle` resolves style, not layout, so the climb adds no forced layout.
* *
* An empty container answers 0, and the caller keeps the standing floor for exactly that reason: * Reported from an iPhone as the Overview sinking a little every five seconds: LuCI's poll takes
* `dom.content()` empties before it refills, and 0 is the number the floor exists to refuse. */ * the whole `table.table` out of the first card and puts a new one back measured on the stand,
function naturalHeight(el) { * once per `pollinterval`, 482px and between the two the section is empty. On WebKit the floor on
const last = el.lastElementChild; * the table held nothing, the offset was clamped into a document that short, and the reader was
if (!last) return 0; * left further down than they had been.
const box = el.getBoundingClientRect();
/* A BOX WITH NO HEIGHT OF ITS OWN HOLDS NOTHING UP, and asking its content how tall it would be
* gets an answer about a page that is not on screen. `visibility: hidden` leaves children in the
* layout with rects of their own, so an inactive tab pane collapsed to height 0 by
* theme/30-tables.css measures its full content here and the floor then pins that collapse
* open: on Network -> Interfaces the hidden `device` pane held 893px, and the active pane's
* content sat that much further down the page (issue #41, reported against a third-party page
* and reproduced on the stock one). The clear-and-remeasure shape this replaced read the
* collapsed height and wrote nothing, which is the behaviour restored here.
*
* A container a tick has just emptied also measures 0, and that is the same answer for the same
* reason: the floor it already wears is what holds it up, and holdFloor() leaves it alone. */
if (!box.height) return 0;
const end = last.getBoundingClientRect();
if (!end.height && !end.width) return 0; /* a last child out of the flow says nothing */
let bottom = end.bottom;
/* AND THE TEXT AFTER IT. A box whose content ends in text ends below its last ELEMENT, and
* measuring to that element writes a floor shorter than the box: `.cbi-section-descr` on
* /admin/network/dhcp measured 115px against the 156px it stands at, and a floor 41px short lets
* the document shrink under the reader during the very tick the floor is there to hold.
*
* Only the tail, not `selectNodeContents(el)`: a Range over the whole box takes in whatever is
* out of the flow inside it and writes a floor TALLER than the box instead 205px against 107
* on the Overview, which is the same blank page seen from the other side. */
if (last.nextSibling) {
const tail = document.createRange();
tail.setStartAfter(last);
tail.setEnd(el, el.childNodes.length);
const box2 = tail.getBoundingClientRect();
if (box2.height || box2.width) bottom = Math.max(bottom, box2.bottom);
}
const cs = window.getComputedStyle(el);
const below = parseFloat(cs.paddingBottom) + parseFloat(cs.borderBottomWidth);
return Math.round(bottom - box.top + (below || 0));
}
/* The floor is the height the next tick may not go below, one per box. Read in one pass and written
* in another, so the sweep costs a single forced layout rather than one per element.
* *
* WRITTEN ONLY WHERE THE VALUE CHANGES, which is the difference between a floor and a page the * The climb is the ONE part of the 0.14.4 floor kept: this pass still clears and re-measures, so a
* engine refuses to anchor: see naturalHeight() above. Measured over 25 s of real polling on the * box that cannot hold anything up measures 0 with its floor off and gets none which is why the
* Overview at 390px, the clear-and-rewrite shape wrote style 1550 times on 25.12 and 170 times on * collapsed tab pane of issue #41 cannot come back with it. */
* ImmortalWrt 24.10, of which 75 and 62 carried a value that had actually moved the rest were
* suppression bought for nothing. It is 45 writes, all of them real, on both.
*
* AND NOT ON A TABLE BOX, which cannot hold it: `min-height` is undefined there (CSS 2.1 §10.7) and
* WebKit acts on that a `.table.cbi-section-table` wearing a 313px floor still collapsed to 30px
* when its rows went, and the document lost 284px on /admin/network/firewall, the same on 24.10 and
* 25.12, while Chromium held the 313px. The `.tbody` inside it is a table box too and loses the same
* 284px. So the floor climbs to the first box that is not one the section where the same
* emptied `.tbody` costs the document 0px on both engines. `getComputedStyle` resolves style, not
* layout, so the climb adds no forced layout of its own.
*
* Not while the reader scrolls: a rect read is a forced layout, and a floor staying where it was is
* still a floor. */
/* Boxes that measured empty on the LAST pass, so a floor that is holding nothing up can be told
* from one that is holding the page still while `dom.content()` refills. WeakSet: a box the router
* has replaced is garbage, and this must not be what keeps it alive. */
const emptied = new WeakSet();
/* Off in one place, so the mark and the style can never disagree about who wears a floor. */
function dropFloor(box) {
if (box.style.minHeight) box.style.minHeight = '';
box.removeAttribute('data-fs-floor');
}
/* THE SECOND LOOK HAS TO BE SCHEDULED, not waited for. Every other pass here is driven by the
* MutationObserver on `#view`, and a container that empties and stays empty produces no further
* mutation so "clear it if it is still empty next pass" never gets a next pass, and the floor
* stands for the life of the page (measured: 1299px on Network -> Interfaces).
*
* One poll interval, because that is how long a container that is genuinely refilling may take: the
* router's own `pollinterval` when the page will say it, and its shipped default of 5 s otherwise.
* Shorter risks taking the floor away from a tick still in flight, which is the 568px clamp this
* whole mechanism exists to stop. */
let _emptyCheck = null;
function checkEmptyLater() {
if (_emptyCheck) return;
let secs = 5;
try { secs = (window.L && L.env && L.env.pollinterval) || 5; } catch (e) { /* not on a LuCI page */ }
_emptyCheck = setTimeout(() => { _emptyCheck = null; run(); }, secs * 1000);
}
function holdFloor() { function holdFloor() {
if (scrolling()) return; if (scrolling()) return;
const host = document.getElementById('view'); const host = document.getElementById('view');
if (!host) return; /* the login page has no view */ if (!host) return; /* the login page has no view */
const boxes = [], hs = [], gone = []; const boxes = [], hs = [];
host.querySelectorAll(SHRINKS + ', ' + FLOORED).forEach((el) => { host.querySelectorAll(SHRINKS).forEach((el) => {
let box = el, cs = window.getComputedStyle(el); let box = el, cs = window.getComputedStyle(el);
while (box && box !== host && cs.display.startsWith('table')) { while (box && box !== host && cs.display.startsWith('table')) {
box = box.parentElement; box = box.parentElement;
@@ -234,42 +151,13 @@ function holdFloor() {
/* several tables in one section climb to the same box; it needs one floor, not one each */ /* several tables in one section climb to the same box; it needs one floor, not one each */
if (!box || box === host || boxes.indexOf(box) !== -1) return; if (!box || box === host || boxes.indexOf(box) !== -1) return;
boxes.push(box); boxes.push(box);
/* `visibility` inherits, so this is equally true of every box inside a collapsed pane */
const hidden = cs.visibility === 'hidden';
gone.push(hidden);
hs.push(hidden ? 0 : naturalHeight(box));
}); });
host.querySelectorAll(FLOORED).forEach((box) => { if (boxes.indexOf(box) === -1) boxes.push(box); });
boxes.forEach((box) => { box.style.minHeight = ''; });
boxes.forEach((box) => hs.push(box.offsetHeight));
boxes.forEach((box, i) => { boxes.forEach((box, i) => {
/* A BOX THE READER CANNOT SEE GIVES ITS FLOOR BACK. `min-height` beats the `height: 0` an if (hs[i] > 0) { box.style.minHeight = hs[i] + 'px'; box.setAttribute('data-fs-floor', ''); }
* inactive tab pane is collapsed with (theme/30-tables.css), so a floor written while the pane else box.removeAttribute('data-fs-floor');
* was open pins the collapse open once it closes: on Network -> Interfaces the `interface`
* pane held its 1265px after the reader left it, and the tab they were looking at started
* that far down the page (issue #41). The clear-and-remeasure shape this replaced in 0.14.4
* cleared every floor each tick, so a pane going inactive lost its own on the next one; only
* a box that cannot hold anything up is cleared here, and it is re-measured the tick after it
* comes back. A collapsed pane whose floor is still standing also measures a height of its
* own, which is why refusing to write is not enough. */
if (gone[i]) { dropFloor(box); return; }
/* ZERO IS AN EMPTY BOX, and the floor it already wears is what holds it up the moment this
* whole mechanism exists for, since `dom.content()` empties before it refills.
*
* But only for the one pass. A box that is still empty on the next one is not refilling, and
* its floor is then blank page that nothing takes back: measured on Network -> Interfaces,
* a section emptied and left alone keeps 1299px of `min-height` for the life of the page,
* with the document standing at 1720px around no content at all. That is what 0.14.4 changed
* by replacing clear-and-remeasure, which read the collapsed height and wrote nothing. */
if (hs[i] <= 0) {
if (!box.style.minHeight) return;
if (emptied.has(box)) { dropFloor(box); emptied.delete(box); }
else { emptied.add(box); checkEmptyLater(); }
return;
}
emptied.delete(box);
const px = hs[i] + 'px';
if (box.style.minHeight !== px) {
box.style.minHeight = px;
box.setAttribute('data-fs-floor', '');
}
}); });
} }
@@ -353,11 +241,6 @@ function sampleMotion() {
/* the page has held still for SCROLL_IDLE: whatever was put off may run now */ /* the page has held still for SCROLL_IDLE: whatever was put off may run now */
if (_deferred) { if (_deferred) {
_deferred = false; _deferred = false;
/* where the reference stands BEFORE the put-off pass re-lays the page — see settleDrift() */
const settled = _rest;
const before = (settled && settled.el && settled.el.isConnected)
? settled.el.getBoundingClientRect().top
: ((settled && settled.sec && settled.sec.isConnected) ? settled.sec.getBoundingClientRect().top : null);
/* No correction for this batch. Both available references are wrong for a page the reader /* No correction for this batch. Both available references are wrong for a page the reader
* has just scrolled through: a fresh one is read against an offset WebKit may not have laid * has just scrolled through: a fresh one is read against an offset WebKit may not have laid
* out yet (the theme then undoes the reader's own move), and the one from the last still * out yet (the theme then undoes the reader's own move), and the one from the last still
@@ -366,77 +249,6 @@ function sampleMotion() {
* the fitters re-measure what the scroll already showed rather than growing the page and * the fitters re-measure what the scroll already showed rather than growing the page and
* the next mutation corrects against a reference taken while the page was still. */ * the next mutation corrects against a reference taken while the page was still. */
run(); run();
if (ENGINE_ANCHORS) settleDrift(settled, before);
}
}
/* ---- the put-off pass moves the page too, and nothing was looking ----
*
* A tick landing while the offset is in motion leaves its measurements to the block above, and that
* pass then re-lays the tables it could not measure. An anchoring engine answers that layout change
* the way it answers any other and `min-height`, which the floor writes on every container, is
* itself a suppression trigger on the path to the anchor (css-scroll-anchoring-1 §3.2), so the
* engine's compensation can be switched off by the very pass that needs it. Measured on
* ImmortalWrt 24.10/WebKit: this pass's 88 `min-height` writes and a 58px jump of the offset land in
* the SAME frame, 429 ms after the mutation (@390, top layout, large density, Overview).
*
* `lateDrift()` cannot see it: it is scheduled from the mutation on the same SCROLL_IDLE, so it
* measures ALONGSIDE this pass rather than after it it read a drift of zero three milliseconds
* before the page moved, and scroll-anchor reported those 58px on that cell alone out of 48.
*
* MEASURED SYNCHRONOUSLY AROUND THE PASS, not a frame or an idle window later. Two reasons, and the
* second cost a run: the reader cannot scroll between two statements, so what this sees is the
* pass's doing and nothing else a version that looked two frames later corrected inside a flick on
* three cells of the same sweep. And `getBoundingClientRect()` is exactly the operation the spec
* makes the engine flush a pending adjustment before, so the read after the pass sees the engine's
* answer rather than racing it (§2.2: the suppression window ends at the end of the event loop
* iteration, or before the next operation whose result would differ, whichever is sooner). */
function settleDrift(ref, before) {
if (before == null || !ref) return;
if (!anchorEnabled() || Date.now() < _userUntil) return;
if (_restPage !== pageStamp()) return;
const el = (ref.el && ref.el.isConnected) ? ref.el : ((ref.sec && ref.sec.isConnected) ? ref.sec : null);
if (el) putBack(el, before);
}
/* Give the reader back what moved under them: the one write both corrections make, and the rules
* that write obeys.
*
* A drift under a pixel is rounding, and an engine that answered for it reads the same. One
* viewport is the ceiling, a drift that size being a view that replaced its whole subtree rather
* than a tick anchorFor() raises it for the one drift that big with a receipt, a measured clamp.
*
* The write moves the page by exactly the drift measured, so the reference is back at the top it
* was remembered at and the next tick measures zero. Only `_restAt` moves, and the write may have
* been clamped short, so it is re-read rather than assumed; `rememberRest()` cannot do it, since
* the write starts the motion sampler and that function returns early while the page moves. */
function putBack(el, was) {
const drift = el.getBoundingClientRect().top - was;
if (Math.abs(drift) < 1 || Math.abs(drift) > (window.innerHeight || 800)) return;
const sc = scroller();
const at = sc ? sc.scrollTop : window.scrollY;
if (sc) sc.scrollTop = at + drift; else window.scrollTo(0, at + drift);
_restAt = scrollTop();
/* AND WHERE THE ELEMENT ACTUALLY LANDED, which is not always `was`. The line above used to be
* the whole of it, on the reasoning this comment states the write is exactly the drift, so the
* element is back at the top it was remembered at. It is not whenever the write was CLAMPED
* SHORT, a case the line above already allows for by re-reading the offset: the page had less
* room than the drift asked for, the element stops wherever the clamp left it, and `_rest` goes
* on naming a top nothing can reach. Every later tick then measures that unreachable difference
* and spends it on the reader: measured on webkit/Overview @390 top, `_rest` claiming 93.02 for
* an element standing at 105, and the reader 12px off on the next tick (52px at normal density).
*
* Two rects on a layout the write has already forced. The section half is re-read for the same
* reason and cannot be measured by the same probe the sweep's swap returns the very nodes it
* took out, so `_rest.el` survives it and the fallback is never reached, while a real
* `dom.content()` puts NEW nodes in and lateDrift() corrects against `sec`/`secTop` instead.
*
* `_rest.at` is deliberately NOT touched: it belongs to anchorFor(), on the path where the
* engine does no anchoring, and this fault is on the other one measured, the sweep is green
* on all 18 cells of the failing axis without it. */
if (_rest) {
if (_rest.el && _rest.el.isConnected) _rest.top = _rest.el.getBoundingClientRect().top;
if (_rest.sec && _rest.sec.isConnected) _rest.secTop = _rest.sec.getBoundingClientRect().top;
} }
} }
@@ -790,8 +602,23 @@ function lateDrift(ref) {
if (scrollTop() !== seen) return; if (scrollTop() !== seen) return;
/* the tick usually replaces the element this was taken on, so without the section /* the tick usually replaces the element this was taken on, so without the section
* fallback the correction does nothing on the tick it exists for */ * fallback the correction does nothing on the tick it exists for */
if (ref.el && ref.el.isConnected) putBack(ref.el, ref.top); let el = ref.el, was = ref.top;
else if (ref.sec && ref.sec.isConnected && ref.secTop != null) putBack(ref.sec, ref.secTop); if (!el || !el.isConnected) {
if (!ref.sec || !ref.sec.isConnected || ref.secTop == null) return;
el = ref.sec; was = ref.secTop;
}
const drift = el.getBoundingClientRect().top - was;
if (Math.abs(drift) < 1) return; /* the engine put it back */
if (Math.abs(drift) > (window.innerHeight || 800)) return;
const sc = scroller();
const at = sc ? sc.scrollTop : window.scrollY;
if (sc) sc.scrollTop = at + drift; else window.scrollTo(0, at + drift);
/* The write moves the page by exactly the drift measured, which puts the reference back
* at the top it was remembered at, so `_rest.top` still holds and the next tick
* measures zero. Only `_restAt` changes, and the write may have been clamped short, so
* it is re-read rather than assumed; `rememberRest()` cannot do it, since the write
* starts the motion sampler and that function returns early while the page moves. */
_restAt = scrollTop();
}, SCROLL_IDLE); }, SCROLL_IDLE);
}); });
} }
@@ -898,17 +725,13 @@ function observeContent() {
_moFlag = new MutationObserver(run); _moFlag = new MutationObserver(run);
_moFlag.observe(document.body, { attributes: true, attributeFilter: [ 'class' ] }); _moFlag.observe(document.body, { attributes: true, attributeFilter: [ 'class' ] });
/* A TAB SWITCH IS A LAYOUT CHANGE WITH NO MUTATION IN IT. `ui.tabs` moves no node it writes /* A TAB SWITCH MUTATES NO NODE. ui.tabs writes `data-tab-active` on the panes, so the
* `data-tab-active` on the panes so the {childList} registration above never wakes, and the * {childList} registration above never wakes and the floor the pane wore while it was open
* floor the outgoing pane wears stands until something else sweeps. `min-height` beats the * stays on it and `min-height` beats the `height: 0` an inactive pane is collapsed with
* `height: 0` an inactive pane is collapsed with (theme/30-tables.css), so that floor is blank * (theme/30-tables.css), so that floor IS blank page above the tab the reader just opened.
* page above whatever the reader just opened: measured on 25.12, System -> Startup left 2432px * Measured on 25.12, /admin/network/network, Interfaces -> Devices: 1299px left standing, the
* of it and the "Local Startup" textarea read as missing (#75), Network -> Interfaces 1299px * document at 2647px against 1720 and the content the reader came for 1559px down, still there
* until the next poll tick, i.e. one `pollinterval`. A page that does not poll never gets that * 13 s later on a page whose poll never mutates #view (tools/floor-contract.mjs, issue #75).
* tick and keeps the blank for the life of the page.
*
* `run()` direct, not the observer above: the anchoring corrections answer a poll tick that
* moved the page under a still reader, and a tab the reader clicked is neither.
* *
* A THIRD observer for the reason the second one exists observe() replaces the options of a * A THIRD observer for the reason the second one exists observe() replaces the options of a
* registration for the same node. The filter keeps it to the one attribute: `subtree: true` on * registration for the same node. The filter keeps it to the one attribute: `subtree: true` on
@@ -916,6 +739,7 @@ function observeContent() {
_moTabs = new MutationObserver(run); _moTabs = new MutationObserver(run);
for (const host of hosts) for (const host of hosts)
_moTabs.observe(host, { attributes: true, attributeFilter: [ 'data-tab-active' ], subtree: true }); _moTabs.observe(host, { attributes: true, attributeFilter: [ 'data-tab-active' ], subtree: true });
} }
return baseclass.extend({ return baseclass.extend({
+41 -8
View File
@@ -35,7 +35,7 @@ msgctxt "footstrap"
msgid "Auto-collapse" msgid "Auto-collapse"
msgstr "Colapso automático" msgstr "Colapso automático"
#: htdocs/luci-static/resources/fs-appearance.js:773 #: htdocs/luci-static/resources/fs-appearance.js:783
msgctxt "footstrap" msgctxt "footstrap"
msgid "Background" msgid "Background"
msgstr "Fondo" msgstr "Fondo"
@@ -55,6 +55,11 @@ msgctxt "footstrap"
msgid "Cards" msgid "Cards"
msgstr "Tarjetas" msgstr "Tarjetas"
#: htdocs/luci-static/resources/fs-appearance.js:771
msgctxt "footstrap"
msgid "Changes apply at once and live in this browser."
msgstr "Los cambios se aplican al instante y viven en este navegador."
#: htdocs/luci-static/resources/fs-appearance.js:454 #: htdocs/luci-static/resources/fs-appearance.js:454
msgctxt "footstrap" msgctxt "footstrap"
msgid "Choose SVG" msgid "Choose SVG"
@@ -70,13 +75,13 @@ msgctxt "footstrap"
msgid "Clearly visible %s" msgid "Clearly visible %s"
msgstr "Bien visible %s" msgstr "Bien visible %s"
#: htdocs/luci-static/resources/fs-chrome.js:430 #: htdocs/luci-static/resources/fs-chrome.js:447
#: ucode/template/themes/footstrap/header.ut:138 #: ucode/template/themes/footstrap/header.ut:138
msgid "Collapse menu" msgid "Collapse menu"
msgstr "Contraer menú" msgstr "Contraer menú"
#: htdocs/luci-static/resources/fs-appearance.js:465 #: htdocs/luci-static/resources/fs-appearance.js:465
#: htdocs/luci-static/resources/fs-appearance.js:770 #: htdocs/luci-static/resources/fs-appearance.js:780
msgctxt "footstrap" msgctxt "footstrap"
msgid "Colours" msgid "Colours"
msgstr "Colores" msgstr "Colores"
@@ -123,7 +128,7 @@ msgctxt "footstrap"
msgid "Dark" msgid "Dark"
msgstr "Oscuro" msgstr "Oscuro"
#: htdocs/luci-static/resources/fs-appearance.js:774 #: htdocs/luci-static/resources/fs-appearance.js:784
msgctxt "footstrap" msgctxt "footstrap"
msgid "Defaults" msgid "Defaults"
msgstr "Predeterminados" msgstr "Predeterminados"
@@ -143,7 +148,7 @@ msgctxt "footstrap"
msgid "Easy to read %s" msgid "Easy to read %s"
msgstr "Se lee bien %s" msgstr "Se lee bien %s"
#: htdocs/luci-static/resources/fs-chrome.js:430 #: htdocs/luci-static/resources/fs-chrome.js:447
msgid "Expand menu" msgid "Expand menu"
msgstr "Expandir menú" msgstr "Expandir menú"
@@ -179,7 +184,7 @@ msgctxt "footstrap"
msgid "Hard to read %s — large text only" msgid "Hard to read %s — large text only"
msgstr "Se lee mal %s: solo texto grande" msgstr "Se lee mal %s: solo texto grande"
#: htdocs/luci-static/resources/fs-appearance.js:769 #: htdocs/luci-static/resources/fs-appearance.js:779
msgctxt "footstrap" msgctxt "footstrap"
msgid "Interface" msgid "Interface"
msgstr "Interfaz" msgstr "Interfaz"
@@ -397,7 +402,7 @@ msgctxt "footstrap"
msgid "Submenus" msgid "Submenus"
msgstr "Submenús" msgstr "Submenús"
#: htdocs/luci-static/resources/fs-appearance.js:771 #: htdocs/luci-static/resources/fs-appearance.js:781
msgctxt "footstrap" msgctxt "footstrap"
msgid "Surfaces" msgid "Surfaces"
msgstr "Superficies" msgstr "Superficies"
@@ -410,7 +415,7 @@ msgstr "Sistema"
msgid "System running in recovery (initramfs) mode." msgid "System running in recovery (initramfs) mode."
msgstr "El sistema se está ejecutando en modo de recuperación (initramfs)." msgstr "El sistema se está ejecutando en modo de recuperación (initramfs)."
#: htdocs/luci-static/resources/fs-select.js:647 #: htdocs/luci-static/resources/fs-select.js:662
msgid "Table" msgid "Table"
msgstr "Tabla" msgstr "Tabla"
@@ -492,6 +497,15 @@ msgctxt "footstrap"
msgid "Tint strength" msgid "Tint strength"
msgstr "Intensidad del tinte" msgstr "Intensidad del tinte"
#: htdocs/luci-static/resources/fs-appearance.js:772
msgctxt "footstrap"
msgid ""
"To keep them on the router, use Save as default under Defaults — not Save & "
"Apply at the foot of the page."
msgstr ""
"Para guardarlos en el router, usa «Guardar como predeterminado» en "
"Predeterminados, no «Guardar y aplicar» al pie de la página."
#: htdocs/luci-static/resources/fs-appearance.js:190 #: htdocs/luci-static/resources/fs-appearance.js:190
msgctxt "footstrap" msgctxt "footstrap"
msgid "Too faint to read %s" msgid "Too faint to read %s"
@@ -558,6 +572,25 @@ msgid ""
"the uploaded file could not be removed either; it is still on the router." "the uploaded file could not be removed either; it is still on the router."
msgstr "tampoco se pudo eliminar el archivo subido; sigue en el router." msgstr "tampoco se pudo eliminar el archivo subido; sigue en el router."
#~ msgctxt "footstrap"
#~ msgid ""
#~ "Everything here applies the moment you change it and is remembered in "
#~ "this browser only — the Save & Apply button at the foot of the page "
#~ "belongs to the System form and does not store it."
#~ msgstr ""
#~ "Todo lo de aquí se aplica en el momento en que lo cambias y se recuerda "
#~ "solo en este navegador: el botón «Guardar y aplicar» del pie de la página "
#~ "pertenece al formulario del Sistema y no lo guarda."
#~ msgctxt "footstrap"
#~ msgid ""
#~ "To make the current look the router's default for every browser, use Save "
#~ "as default under Defaults below."
#~ msgstr ""
#~ "Para que el aspecto actual sea el predeterminado del router para todos "
#~ "los navegadores, usa «Guardar como predeterminado» en Predeterminados más "
#~ "abajo."
#~ msgid "Loading view…" #~ msgid "Loading view…"
#~ msgstr "Cargando vista…" #~ msgstr "Cargando vista…"
+40 -8
View File
@@ -31,7 +31,7 @@ msgctxt "footstrap"
msgid "Auto-collapse" msgid "Auto-collapse"
msgstr "Сворачивать" msgstr "Сворачивать"
#: htdocs/luci-static/resources/fs-appearance.js:773 #: htdocs/luci-static/resources/fs-appearance.js:783
msgctxt "footstrap" msgctxt "footstrap"
msgid "Background" msgid "Background"
msgstr "Фон" msgstr "Фон"
@@ -51,6 +51,11 @@ msgctxt "footstrap"
msgid "Cards" msgid "Cards"
msgstr "Карточки" msgstr "Карточки"
#: htdocs/luci-static/resources/fs-appearance.js:771
msgctxt "footstrap"
msgid "Changes apply at once and live in this browser."
msgstr "Изменения применяются сразу и живут в этом браузере."
#: htdocs/luci-static/resources/fs-appearance.js:454 #: htdocs/luci-static/resources/fs-appearance.js:454
msgctxt "footstrap" msgctxt "footstrap"
msgid "Choose SVG" msgid "Choose SVG"
@@ -66,13 +71,13 @@ msgctxt "footstrap"
msgid "Clearly visible %s" msgid "Clearly visible %s"
msgstr "Хорошо видна %s" msgstr "Хорошо видна %s"
#: htdocs/luci-static/resources/fs-chrome.js:430 #: htdocs/luci-static/resources/fs-chrome.js:447
#: ucode/template/themes/footstrap/header.ut:138 #: ucode/template/themes/footstrap/header.ut:138
msgid "Collapse menu" msgid "Collapse menu"
msgstr "Свернуть меню" msgstr "Свернуть меню"
#: htdocs/luci-static/resources/fs-appearance.js:465 #: htdocs/luci-static/resources/fs-appearance.js:465
#: htdocs/luci-static/resources/fs-appearance.js:770 #: htdocs/luci-static/resources/fs-appearance.js:780
msgctxt "footstrap" msgctxt "footstrap"
msgid "Colours" msgid "Colours"
msgstr "Цвета" msgstr "Цвета"
@@ -117,7 +122,7 @@ msgctxt "footstrap"
msgid "Dark" msgid "Dark"
msgstr "Тёмная" msgstr "Тёмная"
#: htdocs/luci-static/resources/fs-appearance.js:774 #: htdocs/luci-static/resources/fs-appearance.js:784
msgctxt "footstrap" msgctxt "footstrap"
msgid "Defaults" msgid "Defaults"
msgstr "Умолчания" msgstr "Умолчания"
@@ -137,7 +142,7 @@ msgctxt "footstrap"
msgid "Easy to read %s" msgid "Easy to read %s"
msgstr "Хорошо читается %s" msgstr "Хорошо читается %s"
#: htdocs/luci-static/resources/fs-chrome.js:430 #: htdocs/luci-static/resources/fs-chrome.js:447
msgid "Expand menu" msgid "Expand menu"
msgstr "Развернуть меню" msgstr "Развернуть меню"
@@ -173,7 +178,7 @@ msgctxt "footstrap"
msgid "Hard to read %s — large text only" msgid "Hard to read %s — large text only"
msgstr "Плохо читается %s — только крупный текст" msgstr "Плохо читается %s — только крупный текст"
#: htdocs/luci-static/resources/fs-appearance.js:769 #: htdocs/luci-static/resources/fs-appearance.js:779
msgctxt "footstrap" msgctxt "footstrap"
msgid "Interface" msgid "Interface"
msgstr "Интерфейс" msgstr "Интерфейс"
@@ -390,7 +395,7 @@ msgctxt "footstrap"
msgid "Submenus" msgid "Submenus"
msgstr "Подменю" msgstr "Подменю"
#: htdocs/luci-static/resources/fs-appearance.js:771 #: htdocs/luci-static/resources/fs-appearance.js:781
msgctxt "footstrap" msgctxt "footstrap"
msgid "Surfaces" msgid "Surfaces"
msgstr "Поверхности" msgstr "Поверхности"
@@ -403,7 +408,7 @@ msgstr "Система"
msgid "System running in recovery (initramfs) mode." msgid "System running in recovery (initramfs) mode."
msgstr "Система работает в режиме восстановления (initramfs)." msgstr "Система работает в режиме восстановления (initramfs)."
#: htdocs/luci-static/resources/fs-select.js:647 #: htdocs/luci-static/resources/fs-select.js:662
msgid "Table" msgid "Table"
msgstr "Таблица" msgstr "Таблица"
@@ -485,6 +490,15 @@ msgctxt "footstrap"
msgid "Tint strength" msgid "Tint strength"
msgstr "Насыщенность оттенка" msgstr "Насыщенность оттенка"
#: htdocs/luci-static/resources/fs-appearance.js:772
msgctxt "footstrap"
msgid ""
"To keep them on the router, use Save as default under Defaults — not Save & "
"Apply at the foot of the page."
msgstr ""
"Чтобы сохранить их на роутере, нажмите «Сохранить по умолчанию» в разделе «По "
"умолчанию», а не «Сохранить и применить» внизу страницы."
#: htdocs/luci-static/resources/fs-appearance.js:190 #: htdocs/luci-static/resources/fs-appearance.js:190
msgctxt "footstrap" msgctxt "footstrap"
msgid "Too faint to read %s" msgid "Too faint to read %s"
@@ -551,6 +565,24 @@ msgid ""
"the uploaded file could not be removed either; it is still on the router." "the uploaded file could not be removed either; it is still on the router."
msgstr "загруженный файл тоже не удалось удалить — он остался на роутере." msgstr "загруженный файл тоже не удалось удалить — он остался на роутере."
#~ msgctxt "footstrap"
#~ msgid ""
#~ "Everything here applies the moment you change it and is remembered in "
#~ "this browser only — the Save & Apply button at the foot of the page "
#~ "belongs to the System form and does not store it."
#~ msgstr ""
#~ "Всё на этой странице применяется в момент изменения и запоминается только "
#~ "в этом браузере — кнопка «Сохранить и применить» внизу страницы "
#~ "принадлежит форме «Система» и настройки внешнего вида не сохраняет."
#~ msgctxt "footstrap"
#~ msgid ""
#~ "To make the current look the router's default for every browser, use Save "
#~ "as default under Defaults below."
#~ msgstr ""
#~ "Чтобы текущий вид стал умолчанием роутера для всех браузеров, нажмите "
#~ "«Сохранить по умолчанию» в разделе «По умолчанию» ниже."
#~ msgid "Loading view…" #~ msgid "Loading view…"
#~ msgstr "Загрузка представления…" #~ msgstr "Загрузка представления…"
@@ -25,7 +25,7 @@ msgctxt "footstrap"
msgid "Auto-collapse" msgid "Auto-collapse"
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-appearance.js:773 #: htdocs/luci-static/resources/fs-appearance.js:783
msgctxt "footstrap" msgctxt "footstrap"
msgid "Background" msgid "Background"
msgstr "" msgstr ""
@@ -45,6 +45,11 @@ msgctxt "footstrap"
msgid "Cards" msgid "Cards"
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-appearance.js:771
msgctxt "footstrap"
msgid "Changes apply at once and live in this browser."
msgstr ""
#: htdocs/luci-static/resources/fs-appearance.js:454 #: htdocs/luci-static/resources/fs-appearance.js:454
msgctxt "footstrap" msgctxt "footstrap"
msgid "Choose SVG" msgid "Choose SVG"
@@ -60,13 +65,13 @@ msgctxt "footstrap"
msgid "Clearly visible %s" msgid "Clearly visible %s"
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-chrome.js:430 #: htdocs/luci-static/resources/fs-chrome.js:447
#: ucode/template/themes/footstrap/header.ut:138 #: ucode/template/themes/footstrap/header.ut:138
msgid "Collapse menu" msgid "Collapse menu"
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-appearance.js:465 #: htdocs/luci-static/resources/fs-appearance.js:465
#: htdocs/luci-static/resources/fs-appearance.js:770 #: htdocs/luci-static/resources/fs-appearance.js:780
msgctxt "footstrap" msgctxt "footstrap"
msgid "Colours" msgid "Colours"
msgstr "" msgstr ""
@@ -111,7 +116,7 @@ msgctxt "footstrap"
msgid "Dark" msgid "Dark"
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-appearance.js:774 #: htdocs/luci-static/resources/fs-appearance.js:784
msgctxt "footstrap" msgctxt "footstrap"
msgid "Defaults" msgid "Defaults"
msgstr "" msgstr ""
@@ -131,7 +136,7 @@ msgctxt "footstrap"
msgid "Easy to read %s" msgid "Easy to read %s"
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-chrome.js:430 #: htdocs/luci-static/resources/fs-chrome.js:447
msgid "Expand menu" msgid "Expand menu"
msgstr "" msgstr ""
@@ -165,7 +170,7 @@ msgctxt "footstrap"
msgid "Hard to read %s — large text only" msgid "Hard to read %s — large text only"
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-appearance.js:769 #: htdocs/luci-static/resources/fs-appearance.js:779
msgctxt "footstrap" msgctxt "footstrap"
msgid "Interface" msgid "Interface"
msgstr "" msgstr ""
@@ -380,7 +385,7 @@ msgctxt "footstrap"
msgid "Submenus" msgid "Submenus"
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-appearance.js:771 #: htdocs/luci-static/resources/fs-appearance.js:781
msgctxt "footstrap" msgctxt "footstrap"
msgid "Surfaces" msgid "Surfaces"
msgstr "" msgstr ""
@@ -393,7 +398,7 @@ msgstr ""
msgid "System running in recovery (initramfs) mode." msgid "System running in recovery (initramfs) mode."
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-select.js:647 #: htdocs/luci-static/resources/fs-select.js:662
msgid "Table" msgid "Table"
msgstr "" msgstr ""
@@ -469,6 +474,13 @@ msgctxt "footstrap"
msgid "Tint strength" msgid "Tint strength"
msgstr "" msgstr ""
#: htdocs/luci-static/resources/fs-appearance.js:772
msgctxt "footstrap"
msgid ""
"To keep them on the router, use Save as default under Defaults — not Save & "
"Apply at the foot of the page."
msgstr ""
#: htdocs/luci-static/resources/fs-appearance.js:190 #: htdocs/luci-static/resources/fs-appearance.js:190
msgctxt "footstrap" msgctxt "footstrap"
msgid "Too faint to read %s" msgid "Too faint to read %s"
+34 -2
View File
@@ -18,8 +18,8 @@
* pre-paint switch in partials/head.ut (a router default outside the whitelist becomes * pre-paint switch in partials/head.ut (a router default outside the whitelist becomes
* '' and the page paints in the default palette), the label map in fs-appearance.js (an * '' and the page paints in the default palette), the label map in fs-appearance.js (an
* unnamed palette is missing from the picker, not broken), and matrix() in * unnamed palette is missing from the picker, not broken), and matrix() in
* tools/lib/gallery.mjs a palette absent there is one export-tier.mjs and * tools/lib/gallery.mjs a palette absent there is one export-tier.mjs,
* a11y-gallery.mjs never measure, so it ships ungated. * a11y-gallery.mjs and placeholder-ink.mjs never measure, so it ships ungated.
* Nothing else: layout, components and the --*-color-* export bridge key off these tokens, and * Nothing else: layout, components and the --*-color-* export bridge key off these tokens, and
* every tint, shadow and hairline is a color-mix() over them. * every tint, shadow and hairline is a color-mix() over them.
* *
@@ -99,6 +99,26 @@
--fs-good: var(--fs-good-base); --fs-good: var(--fs-good-base);
--fs-warn: var(--fs-warn-base); --fs-warn: var(--fs-warn-base);
--fs-danger: var(--fs-danger-base); --fs-danger: var(--fs-danger-base);
/* The ink of a value that is NOT there the `placeholder` attribute and the dropdown's
* `li[placeholder]` row. LuCI writes an option's DEFAULT there (`form.Value.placeholder`:
* 128 for the log buffer, 514 for the log port), so an ink that reads as body text tells
* the reader a field is set when it is empty reported against 0.14.8, forum topic 251930
* posts 82-83. --fs-dim was that ink and is not far enough away: on footstrap light's
* --fs-panel2 it measures 11.12:1 against the text's 14.84:1, which is two blacks.
*
* Derived, not hand-listed per palette, so it follows a palette that has not been written
* yet. The formula is spelt once and the STRENGTH is a token of its own, because it is the
* only part that varies per mode here, and again under prefers-contrast:more
* (theme/95-a11y-media.css); restating the whole mix in each of those four places cost 79 B
* of shipped sheet and gave three more copies to keep in step. That is also why it lives
* here rather than in 02-tokens.css's ladder the same reason --fs-accent-soft does.
*
* Light lands at 3.99-4.48:1 across the four palettes, 43-44% of the way from the value's
* ink to the field: under AA on purpose, see the dark half below for the whole argument.
* oklch because the step is a LIGHTNESS one srgb at the same 55% stops at 3.58:1. Held by
* `npm run placeholder`. */
--fs-placeholder-mix: 55%;
--fs-placeholder: color-mix(in oklch, var(--fs-text) var(--fs-placeholder-mix), var(--fs-panel2));
/* The hues the user picked, in degrees. Declared here and not only inline by /* The hues the user picked, in degrees. Declared here and not only inline by
* head.ut/fs-prefs.js, so the stylesheet stands on its own: a var() with no definition * head.ut/fs-prefs.js, so the stylesheet stands on its own: a var() with no definition
* anywhere is invalid at computed-value time and takes the whole declaration down. */ * anywhere is invalid at computed-value time and takes the whole declaration down. */
@@ -158,6 +178,18 @@
:root[data-darkmode="true"] { :root[data-darkmode="true"] {
--fs-tint-c: calc((.011 + .016 * max(0, cos((var(--fs-tint-h) - 258) * 1deg)) --fs-tint-c: calc((.011 + .016 * max(0, cos((var(--fs-tint-h) - 258) * 1deg))
- .004 * max(0, cos((var(--fs-tint-h) - 55) * 1deg))) * var(--fs-tint-strength)); - .004 * max(0, cos((var(--fs-tint-h) - 55) * 1deg))) * var(--fs-tint-strength));
/* 64%, against the 55% above, and the difference is what a dark palette can afford: its ink
* starts at 6.45:1 on --fs-panel2 where the light one has 14.84:1, so the same percentage
* would buy a hint nobody can read. It lands at 3.43-6.05:1, 33-35% of the range.
*
* BOTH modes ship below AA, and that is the decision this token exists to record: a hint
* mistaken for a value makes a reader configure the wrong thing, while a hint at 3.43:1
* makes them look twice. The AA-clearing mixes (62/80%) were measured first and moved only
* 37% and 20% of the range the same fault, quieter. 3:1 (SC 1.4.11, and SC 1.4.3's
* large-text floor) is the line NOT crossed, worst 3.43:1; prefers-contrast:more buys the
* AA ink back in both modes (theme/95-a11y-media.css); and `placeholder-ink` holds all
* three states, axe-core being excluded from this row for the same reason. */
--fs-placeholder-mix: 64%;
} }
:root[data-tint="hue"] { --fs-bg: oklch(from var(--fs-bg-base) l var(--fs-tint-c) var(--fs-tint-h)); } :root[data-tint="hue"] { --fs-bg: oklch(from var(--fs-bg-base) l var(--fs-tint-c) var(--fs-tint-h)); }
@@ -9,7 +9,7 @@
* `background: var(--fs-good-soft)` becomes invalid at computed-value time and computes to * `background: var(--fs-good-soft)` becomes invalid at computed-value time and computes to
* `unset`, which is `initial` for a non-inherited property. IACVT does not fall back to an earlier * `unset`, which is `initial` for a non-inherited property. IACVT does not fall back to an earlier
* declaration in the same block, so the two-declaration trick that works for `background: * declaration in the same block, so the two-declaration trick that works for `background:
* color-mix()` written literally does nothing for a token. 38 tokens are affected; without this * color-mix()` written literally does nothing for a token. 36 tokens are affected; without this
* block a browser below the floor paints borders in currentcolor and loses every soft surface. * block a browser below the floor paints borders in currentcolor and loses every soft surface.
* *
* color-mix() lands in Chrome 111, Firefox 113 and Safari 16.2 (all 2022-2023). See docs/css.md * color-mix() lands in Chrome 111, Firefox 113 and Safari 16.2 (all 2022-2023). See docs/css.md
@@ -62,6 +62,12 @@
* take the fixed dialog scrim. Losing it entirely would leave login text over a photo. */ * take the fixed dialog scrim. Losing it entirely would leave login text over a photo. */
--fs-photo-scrim: var(--fs-scrim); --fs-photo-scrim: var(--fs-scrim);
/* placeholder ink: the quietest ink the palette states outright. Below the floor the
* hint is back to reading like a value, which is the pre-0.14.9 look and still the
* safer degradation an unresolvable token takes `color` down to `unset`, and an
* inherited near-black placeholder over a light field beats an unstyled one. */
--fs-placeholder: var(--fs-faint);
/* export tier third-party apps read these, so they must resolve to something. /* export tier third-party apps read these, so they must resolve to something.
* -medium keeps the hue, -low degrades to the dim text colour it was mixed toward. */ * -medium keeps the hue, -low degrades to the dim text colour it was mixed toward. */
--border-color-high: var(--fs-border); --border-color-high: var(--fs-border);
@@ -173,8 +173,10 @@
/* Checkbox/radio drawing: theme/60-inputs.css absorbed whole (it undoes the generic input /* Checkbox/radio drawing: theme/60-inputs.css absorbed whole (it undoes the generic input
* box, which lives there now). */ * box, which lives there now). */
/* --fs-placeholder, not --fs-dim: a placeholder carries the option's DEFAULT and must not read
* as a value the reader typed (03-palettes.css has the numbers). */
::placeholder { ::placeholder {
color: var(--fs-dim); color: var(--fs-placeholder);
} }
/* Transitions and the focus/hover ring are the theme's one ring token (--fs-focus-ring / /* Transitions and the focus/hover ring are the theme's one ring token (--fs-focus-ring /
@@ -12,6 +12,11 @@
* the only page that draws it: an axis control is not chrome. */ * the only page that draws it: an axis control is not chrome. */
.fs-ap { display: flex; flex-direction: column; gap: var(--fs-space-5); } .fs-ap { display: flex; flex-direction: column; gap: var(--fs-space-5); }
/* The page note (fs-appearance.js). Only the outer margins: `.alert-message p` carries
* --fs-space-1 top and bottom, which at the box's own edges adds to the panel's padding and
* makes a two-sentence note look loose against every other alert on the theme. */
.fs-ap-note p:first-child { margin-top: 0; }
.fs-ap-note p:last-child { margin-bottom: 0; }
/* Grouping headings INSIDE the tab pane, not cards: the pane is already inside the stock /* Grouping headings INSIDE the tab pane, not cards: the pane is already inside the stock
* .cbi-section card, and a second border around each group is a box in a box. A hairline above * .cbi-section card, and a second border around each group is a box in a box. A hairline above
* each group does the same job except for the first, which sits under the tab strip. */ * each group does the same job except for the first, which sits under the tab strip. */
@@ -98,8 +98,8 @@
.cbi-dropdown.cbi-button > .open { .cbi-dropdown.cbi-button > .open {
margin-inline-start: .5em; margin-inline-start: .5em;
} }
/* display only: the placeholder's ink is the theme's own `li[placeholder]` --fs-faint below /* display only: the placeholder's ink is the theme's own `li[placeholder]` --fs-placeholder
* (base's --fs-dim had already lost to it by layer moving it would recolour the row) */ * below the same token base/30-forms.css gives the attribute */
.cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder] { .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder] {
display: none; display: none;
} }
@@ -246,7 +246,16 @@
.cbi-dropdown > ul > li > form, .cbi-dropdown > ul > li > form,
.cbi-dropdown > ul > li label { font-family: inherit; } .cbi-dropdown > ul > li label { font-family: inherit; }
.cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[display]:not([display="0"]) { border-inline-start: 0; } .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[display]:not([display="0"]) { border-inline-start: 0; }
.cbi-dropdown > ul > li[placeholder] { color: var(--fs-faint); } /* The same ink the `placeholder` attribute takes in base/30-forms.css "-- Please choose --" is
* the absence of a value, not one.
*
* It repeats the row rule's two selectors instead of writing `> ul > li[placeholder]` once,
* because that shorter form (0,2,2) LOSES to the row's own `color: var(--fs-text)` (0,3,2) and
* the placeholder row rendered in the value's ink on every form dropdown dead from the day it
* was written, and only visible once `placeholder-ink` measured the row. Each selector here
* out-specifies its counterpart above: (0,4,2) over (0,3,2), (0,3,2) over (0,2,2). */
.cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder],
.cbi-dropdown > ul.dropdown > li[placeholder] { color: var(--fs-placeholder); }
/* the multiselect's inline filter/create inputs moved from base with the generic `input` /* the multiselect's inline filter/create inputs moved from base with the generic `input`
* box in theme/60-inputs.css: in base these beat it in-layer, left behind they would lose * box in theme/60-inputs.css: in base these beat it in-layer, left behind they would lose
* to it by layer and render as free-standing 210px fields inside the open list */ * to it by layer and render as free-standing 210px fields inside the open list */
@@ -55,7 +55,10 @@
font-family: inherit; font-size: var(--fs-type-lg); font-weight: var(--fs-weight); line-height: 1.4; font-family: inherit; font-size: var(--fs-type-lg); font-weight: var(--fs-weight); line-height: 1.4;
} }
.fs-search-row .fs-search-input:focus { outline: none; box-shadow: none; } .fs-search-row .fs-search-input:focus { outline: none; box-shadow: none; }
.fs-search-row .fs-search-input::placeholder { color: var(--fs-faint); font-weight: var(--fs-weight); } /* one placeholder ink for the whole theme (03-palettes.css) this row is not measured by
* `placeholder-ink`, the gallery having no search dialog, and must not drift from the fields
* that are */
.fs-search-row .fs-search-input::placeholder { color: var(--fs-placeholder); font-weight: var(--fs-weight); }
.fs-search-list { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: var(--fs-space-1-5); } .fs-search-list { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: var(--fs-space-1-5); }
@@ -52,6 +52,13 @@
* measures rather than takes on trust: below 80 the fainter ink drops under AA on footstrap * measures rather than takes on trust: below 80 the fainter ink drops under AA on footstrap
* dark's --fs-panel2 (4.51:1 at 80), above 82 the high-to-low ramp falls under the 0.10 * dark's --fs-panel2 (4.51:1 at 80), above 82 the high-to-low ramp falls under the 0.10
* spread the tier promises (0.098 at 84); 82 clears both, at 4.68:1 and 0.110. * spread the tier promises (0.098 at 84); 82 clears both, at 4.68:1 and 0.110.
* - --fs-placeholder, in BOTH modes. It is the one token the theme ships deliberately under AA
* (3.99-4.48:1 light, 3.43-6.05:1 dark): a hint has to move far enough not to read as a
* typed value, and a dark palette has only 6.45:1 of ink to spend. A reader who asked the OS
* for more contrast has said which of the two they want, so the mixes go back to the
* AA-clearing 62% and 80% 4.98:1 and 4.61:1, at 37% and 20% of the ink-to-field range
* instead of 44% and 34%. Only --fs-placeholder-mix moves: the mix itself is spelt once, in
* 03-palettes.css. `placeholder-ink` measures this pass as well.
* - the focus ring: --fs-focus-ring is a tint of the accent (--fs-accent-soft, 10% light and * - the focus ring: --fs-focus-ring is a tint of the accent (--fs-accent-soft, 10% light and
* 15% dark), so at "more contrast" it carries the accent at 60% instead. Its sibling * 15% dark), so at "more contrast" it carries the accent at 60% instead. Its sibling
* --fs-focus-ring-solo is already the solid accent and needs no restatement here. */ * --fs-focus-ring-solo is already the solid accent and needs no restatement here. */
@@ -65,7 +72,12 @@
--fs-good-line: var(--fs-good); --fs-good-line-hi: var(--fs-good); --fs-good-line: var(--fs-good); --fs-good-line-hi: var(--fs-good);
--fs-warn-line: var(--fs-warn); --fs-warn-line-hi: var(--fs-warn); --fs-warn-line: var(--fs-warn); --fs-warn-line-hi: var(--fs-warn);
--fs-danger-line: var(--fs-danger); --fs-danger-line-hi: var(--fs-danger); --fs-danger-line: var(--fs-danger); --fs-danger-line-hi: var(--fs-danger);
/* the placeholder is the one token shipped under AA (see the note above); this reader
* asked for contrast, so both modes buy the AA ink back, at the percentages that clear
* it. Light here, dark in the block below per mode exactly as in 03-palettes.css. */
--fs-placeholder-mix: 62%;
} }
:root[data-darkmode="true"] { --fs-placeholder-mix: 80%; }
} }
/* forced-colors (Windows High Contrast) the OS replaces every colour the theme picked, and /* forced-colors (Windows High Contrast) the OS replaces every colour the theme picked, and
+2 -2
View File
@@ -14,8 +14,8 @@ MISE_HASH_x86_64:=3832f39c325e343f81fe3d92b2447c5d1a5eea1bc85092bb7b6c2580622264
MISE_HASH_aarch64:=06186cfbfe947049b21d58575fb0ea800cc26ed1375f20f4b678cb3a9d679437 MISE_HASH_aarch64:=06186cfbfe947049b21d58575fb0ea800cc26ed1375f20f4b678cb3a9d679437
PKG_NAME:=mise PKG_NAME:=mise
PKG_VERSION:=2026.9.0 PKG_VERSION:=2026.9.1
PKG_RELEASE:=4 PKG_RELEASE:=5
PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION)-linux-$(MISE_ARCH)-musl.tar.gz PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION)-linux-$(MISE_ARCH)-musl.tar.gz
PKG_SOURCE_URL:=https://github.com/jdx/mise/releases/download/v$(PKG_VERSION)/ PKG_SOURCE_URL:=https://github.com/jdx/mise/releases/download/v$(PKG_VERSION)/
PKG_HASH:=skip PKG_HASH:=skip
+2 -2
View File
@@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=natflow PKG_NAME:=natflow
PKG_VERSION:=20260531 PKG_VERSION:=20260531
PKG_RELEASE:=76 PKG_RELEASE:=77
PKG_SOURCE:=$(PKG_VERSION).tar.xz PKG_SOURCE:=$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/ptpt52/natflow.git PKG_SOURCE_URL:=https://github.com/ptpt52/natflow.git
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=f330072aed90336bb594da2a671475ee6499d726 PKG_SOURCE_VERSION:=8c496c4b63198a20d417d34b8fefa78feadf16c5
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com> PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
PKG_LICENSE:=GPL-2.0 PKG_LICENSE:=GPL-2.0
+1 -2
View File
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=sing-box PKG_NAME:=sing-box
PKG_VERSION:=1.14.0 PKG_VERSION:=1.14.0
PKG_RELEASE:=29 PKG_RELEASE:=30
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)? PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)?
@@ -36,7 +36,6 @@ PKG_BUILD_FLAGS:=no-mips16
GO_PKG:=github.com/sagernet/sing-box GO_PKG:=github.com/sagernet/sing-box
GO_PKG_BUILD_PKG:=$(GO_PKG)/cmd/sing-box GO_PKG_BUILD_PKG:=$(GO_PKG)/cmd/sing-box
GO_PKG_LDFLAGS_X:=$(GO_PKG)/constant.Version=$(PKG_VERSION) GO_PKG_LDFLAGS_X:=$(GO_PKG)/constant.Version=$(PKG_VERSION)
GO_PKG_LDFLAGS_X+=github.com/anytls/sing-anytls/util.Verison=mihomo/1.19.27
include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
+2 -2
View File
@@ -43,12 +43,12 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=wwand PKG_NAME:=wwand
PKG_RELEASE:=18 PKG_RELEASE:=19
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/ddimension/wwand.git PKG_SOURCE_URL:=https://github.com/ddimension/wwand.git
PKG_SOURCE_VERSION:=fb4a8ff34967a5ae1d6e882dcd78b8339f5f99d1 PKG_SOURCE_VERSION:=fb4a8ff34967a5ae1d6e882dcd78b8339f5f99d1
PKG_SOURCE_DATE:=2026-08-31 PKG_SOURCE_DATE:=2026-09-02
PKG_MIRROR_HASH:=skip PKG_MIRROR_HASH:=skip
PKG_LICENSE:=GPL-2.0-only PKG_LICENSE:=GPL-2.0-only