mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-09-10 18:34:18 +08:00
🐤 Sync 2026-08-24 23:23:52
This commit is contained in:
@@ -124,7 +124,7 @@ unexport \
|
||||
GOBOOTSTRAP_TOOLEXEC
|
||||
|
||||
|
||||
GO_DEFAULT_VERSION:=1.26
|
||||
GO_DEFAULT_VERSION:=1.27
|
||||
GO_HOST_VERSION:=$(patsubst golang%/host,%,$(filter golang%/host,$(PKG_BUILD_DEPENDS)))
|
||||
ifeq ($(GO_HOST_VERSION),)
|
||||
GO_HOST_VERSION:=$(GO_DEFAULT_VERSION)
|
||||
|
||||
@@ -22,7 +22,7 @@ PKG_UNPACK:=$(HOST_TAR) -C "$(PKG_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DI
|
||||
HOST_UNPACK:=$(HOST_TAR) -C "$(HOST_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)"
|
||||
|
||||
# Don't strip ELF executables in test data
|
||||
RSTRIP:=$(subst $(SCRIPT_DIR)/rstrip.sh,go-strip-helper $(SCRIPT_DIR)/rstrip.sh,$(RSTRIP))
|
||||
RSTRIP:=$(subst $(SCRIPT_DIR)/rstrip.sh,../go-strip-helper $(SCRIPT_DIR)/rstrip.sh,$(RSTRIP))
|
||||
|
||||
ifeq ($(GO_TARGET_SPECTRE_SUPPORTED),1)
|
||||
PKG_CONFIG_DEPENDS+=CONFIG_GOLANG_SPECTRE
|
||||
@@ -295,5 +295,5 @@ endef
|
||||
# src/debug contains ELF executables as test data and they reference these
|
||||
# libraries we need to call this to pass CheckDependencies in package-pack.mk
|
||||
define Package/$(PKG_NAME)-tests/extra_provides
|
||||
echo 'libc.so.6' libstdc++.so.6' libtiff.so.6' | tr ' ' '\n'
|
||||
echo 'libc.so.6 libstdc++.so.6 libtiff.so.6' | tr ' ' '\n'
|
||||
endef
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=golang1.26
|
||||
GO_VERSION_MAJOR_MINOR:=1.26
|
||||
GO_VERSION_PATCH:=6
|
||||
PKG_NAME:=golang1.27
|
||||
GO_VERSION_MAJOR_MINOR:=1.27
|
||||
GO_VERSION_PATCH:=0
|
||||
GO_VERSION_RC:=
|
||||
GO_BOOTSTRAP_VERSION:=bootstrap
|
||||
PKG_HASH:=a0721c54c688901448d77ad9b3ec7ea7c474730755ff891382e92ecb93ff2cb1
|
||||
PKG_HASH:=7002403d7cc44529ef6d26f69a44818263395ead7c16c05a5808ae047ebeb0e5
|
||||
|
||||
PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_RC),.0)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH))
|
||||
PKG_FILE_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_RC),rc$(GO_VERSION_RC))$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH))
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: luci-app-ddns 2.4.0-1\n"
|
||||
"POT-Creation-Date: 2016-01-30 11:07+0100\n"
|
||||
"PO-Revision-Date: 2026-05-14 10:34+0000\n"
|
||||
"PO-Revision-Date: 2026-08-13 09:27+0000\n"
|
||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/cs/>\n"
|
||||
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 2026.5.dev0\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
|
||||
msgid "\"../\" not allowed in path for Security Reason."
|
||||
@@ -606,7 +606,7 @@ msgstr "Registrovaná IP adresa"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:567
|
||||
msgid "Reload"
|
||||
msgstr "Načíst znovu"
|
||||
msgstr "Znovunačíst"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:550
|
||||
msgid "Reload this service"
|
||||
|
||||
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: luci-app-ddns 2.4.0-1\n"
|
||||
"POT-Creation-Date: 2016-01-30 11:07+0100\n"
|
||||
"PO-Revision-Date: 2026-06-26 11:18+0000\n"
|
||||
"Last-Translator: apemay <apemay.dev@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-14 17:53+0000\n"
|
||||
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/es/>\n"
|
||||
"Language: es\n"
|
||||
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 2026.7.dev0\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
|
||||
msgid "\"../\" not allowed in path for Security Reason."
|
||||
@@ -646,7 +646,7 @@ msgstr "Ejecutar una vez"
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:231
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
|
||||
msgid "Running"
|
||||
msgstr "Ejecutando"
|
||||
msgstr "Ejecutándose"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:813
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
|
||||
@@ -839,7 +839,7 @@ msgstr "Verificar"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:965
|
||||
msgid "Warning"
|
||||
msgstr "Aviso"
|
||||
msgstr "Advertencia"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:504
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-05-02 19:29+0000\n"
|
||||
"Last-Translator: BoneNI <bounkirdni@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-15 13:06+0000\n"
|
||||
"Last-Translator: Bone NI <bounkirdni@gmail.com>\n"
|
||||
"Language-Team: Lao <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/lo/>\n"
|
||||
"Language: lo\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.17.1\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
|
||||
msgid "\"../\" not allowed in path for Security Reason."
|
||||
@@ -367,7 +367,7 @@ msgstr "ຕິດຕັ້ງບໍລິການ"
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:812
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:862
|
||||
msgid "Interface"
|
||||
msgstr "ອິນເຕີເຟດ"
|
||||
msgstr "ອິນເຕີເຟສ"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1006
|
||||
msgid "Interval to force an update at the DDNS Provider"
|
||||
@@ -487,7 +487,7 @@ msgstr "IPs ທີ່ບໍ່ແມ່ນສາທາລະນະ ແລະ ຖ
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:231
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1121
|
||||
msgid "Not Running"
|
||||
msgstr "ບໍ່ໄດ້ເຮັດວຽກ"
|
||||
msgstr "ບໍ່ເຮັດວຽກ"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
|
||||
msgid "Notice"
|
||||
|
||||
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: luci-app-ddns 2.4.0-1\n"
|
||||
"POT-Creation-Date: 2016-01-30 11:07+0100\n"
|
||||
"PO-Revision-Date: 2026-02-14 00:51+0000\n"
|
||||
"Last-Translator: Piotr Kołtun <pkoltungm@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-03 04:18+0000\n"
|
||||
"Last-Translator: Matthaiks <kitynska@gmail.com>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/pl/>\n"
|
||||
"Language: pl\n"
|
||||
@@ -12,7 +12,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.16-dev\n"
|
||||
"X-Generator: Weblate 2026.8.dev0\n"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
|
||||
msgid "\"../\" not allowed in path for Security Reason."
|
||||
@@ -509,7 +509,7 @@ msgstr "Niepubliczne i domyślnie zablokowane IP"
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:231
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1121
|
||||
msgid "Not Running"
|
||||
msgstr "Nie działa"
|
||||
msgstr "Nieuruchomione"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
|
||||
msgid "Notice"
|
||||
|
||||
@@ -2,8 +2,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: LuCI: ddns\n"
|
||||
"POT-Creation-Date: 2017-10-17 21:00+0300\n"
|
||||
"PO-Revision-Date: 2026-07-03 15:28+0000\n"
|
||||
"Last-Translator: chigelo <chigelo@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-14 12:12+0000\n"
|
||||
"Last-Translator: SnIPeRSnIPeR "
|
||||
"<snipersniper@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/ru/>\n"
|
||||
"Language: ru\n"
|
||||
@@ -12,7 +13,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"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"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
|
||||
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
|
||||
|
||||
@@ -205,7 +206,7 @@ msgstr "Версия DDNS"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:545
|
||||
msgid "Edit"
|
||||
msgstr "Редактировать"
|
||||
msgstr "Изменить"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:783
|
||||
msgid "Enable secure communication with DDNS provider"
|
||||
@@ -519,7 +520,7 @@ msgstr "Непубличные и заблокированные по умолч
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:231
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1121
|
||||
msgid "Not Running"
|
||||
msgstr "Не работает"
|
||||
msgstr "Не запущено"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
|
||||
msgid "Notice"
|
||||
@@ -709,7 +710,7 @@ msgstr "Состояние"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1117
|
||||
msgid "Status"
|
||||
msgstr "Статус"
|
||||
msgstr "Состояние"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
|
||||
msgid "Status directory"
|
||||
|
||||
+155
-119
@@ -1,22 +1,22 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-03-22 17:10+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
|
||||
"PO-Revision-Date: 2026-08-13 09:16+0000\n"
|
||||
"Last-Translator: Jonatan Nyberg <nickwick@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/sv/>\n"
|
||||
"Language: sv\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.17-dev\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
|
||||
msgid "\"../\" not allowed in path for Security Reason."
|
||||
msgstr "\"../\" ej tillåten i sökväg av säkerhetsskäl."
|
||||
msgstr "”../” är inte tillåtet i sökvägen av säkerhetsskäl."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
|
||||
msgid "A.k.a. the TOKEN at e.g. afraid.org"
|
||||
msgstr ""
|
||||
msgstr "Även kallad TOKEN, exempelvis hos afraid.org"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:458
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
|
||||
@@ -25,7 +25,7 @@ msgstr "Lägg till nya tjänster..."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
|
||||
msgid "Advanced Settings"
|
||||
msgstr "Avancerade inställningar"
|
||||
msgstr "avancerade inställningar"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
|
||||
msgid "Allow non-public IPs"
|
||||
@@ -37,34 +37,38 @@ msgstr "Grundläggande inställningar"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:903
|
||||
msgid "Bind Network"
|
||||
msgstr "Bind samman nätverk"
|
||||
msgstr "Bind till nätverk"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
|
||||
msgid "Binding to a specific network not supported"
|
||||
msgstr "Att binda samman med ett specifikt nätverk stöds inte"
|
||||
msgstr "Bindning till ett specifikt nätverk stöds inte"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
|
||||
msgid ""
|
||||
"BusyBox's nslookup and hostip do not support TCP instead of the default UDP "
|
||||
"when sending requests to the DNS server!"
|
||||
msgstr ""
|
||||
"BusyBox nslookup och hostip stöder inte TCP i stället för "
|
||||
"standardprotokollet UDP när begäranden skickas till DNS-servern!"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:372
|
||||
msgid ""
|
||||
"BusyBox's nslookup in the current compiled version does not handle given DNS "
|
||||
"Servers correctly!"
|
||||
msgstr ""
|
||||
"BusyBox nslookup i den aktuella kompilerade versionen hanterar inte angivna "
|
||||
"DNS-servrar korrekt!"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:443
|
||||
msgid "CA cert bundle file"
|
||||
msgstr "Sökväg till CA-certifikat"
|
||||
msgstr "Fil med CA-certifikatpaket"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
|
||||
msgid ""
|
||||
"CA certificate bundle file that will be used to download services data. Set "
|
||||
"IGNORE to skip certificate validation."
|
||||
msgstr ""
|
||||
"Sökvägen till CA-certifikaten som används för att ladda ner tjänstdata. Välj "
|
||||
"Fil med CA-certifikatpaket som används för att hämta tjänstedata. Ange "
|
||||
"IGNORE för att hoppa över certifikatvalidering."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:532
|
||||
@@ -77,7 +81,7 @@ msgstr "Kontrollintervall"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:996
|
||||
msgid "Check Unit"
|
||||
msgstr "Kontrollera enhet"
|
||||
msgstr "Enhet för kontrollintervall"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
|
||||
msgid "Configuration"
|
||||
@@ -90,11 +94,11 @@ msgstr "Konfigurationsfel"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:417
|
||||
msgid "Contains Log files for each running section."
|
||||
msgstr "Mappen innehåller Logg-filer för varje del som körs."
|
||||
msgstr "Innehåller loggfiler för varje aktiv sektion."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:411
|
||||
msgid "Contains PID and other status information for each running section."
|
||||
msgstr ""
|
||||
msgstr "Innehåller PID och annan statusinformation för varje aktiv sektion."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:536
|
||||
msgid "Create service"
|
||||
@@ -108,16 +112,16 @@ msgstr "Nuvarande inställning:"
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:276
|
||||
msgid "Currently DDNS updates are not started at boot or on interface events."
|
||||
msgstr ""
|
||||
"För närvarande startas DDNS-uppdateringar inte vid uppstart eller "
|
||||
"gränssnittshändelser."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:727
|
||||
msgid "Custom update script for updating your DDNS Provider."
|
||||
msgstr ""
|
||||
"Skräddarsytt uppdateringsskript att använda vid uppdatering av din DDNS-"
|
||||
"leverantör."
|
||||
msgstr "Anpassat uppdateringsskript för att uppdatera din DDNS-leverantör."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:708
|
||||
msgid "Custom update-URL"
|
||||
msgstr "Anpassad webbadress för uppdatering"
|
||||
msgstr "Anpassad uppdaterings-URL"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:726
|
||||
msgid "Custom update-script"
|
||||
@@ -130,12 +134,12 @@ msgstr "DDNS"
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:207
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
|
||||
msgid "DDNS Autostart disabled"
|
||||
msgstr "DDNS autostart inaktiverad"
|
||||
msgstr "Automatisk start av DDNS är inaktiverad"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:206
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
|
||||
msgid "DDNS Autostart enabled"
|
||||
msgstr "DDNS autostart aktiverad"
|
||||
msgstr "Automatisk start av DDNS är aktiverad"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:640
|
||||
@@ -144,11 +148,11 @@ msgstr "DDNS-tjänstleverantör"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:577
|
||||
msgid "DDns Service"
|
||||
msgstr "DDns-tjänst"
|
||||
msgstr "DDNS-tjänst"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:360
|
||||
msgid "DNS requests via TCP not supported"
|
||||
msgstr "DNS-förfrågningar via TCP stöds inte"
|
||||
msgstr "DNS-begäranden via TCP stöds inte"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:924
|
||||
msgid "DNS-Server"
|
||||
@@ -160,15 +164,15 @@ msgstr "Datumformat"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
|
||||
msgid "Defines the Web page to read systems IP-Address from."
|
||||
msgstr ""
|
||||
msgstr "Anger webbsidan som systemets IP-adress ska läsas från."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:863
|
||||
msgid "Defines the interface to read systems IP-Address from"
|
||||
msgstr ""
|
||||
msgstr "Anger gränssnittet som systemets IP-adress ska läsas från"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
|
||||
msgid "Defines the network to read systems IP-Address from"
|
||||
msgstr ""
|
||||
msgstr "Anger nätverket som systemets IP-adress ska läsas från"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
|
||||
msgid "Disabled"
|
||||
@@ -194,7 +198,7 @@ msgstr "Redigera"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:783
|
||||
msgid "Enable secure communication with DDNS provider"
|
||||
msgstr "Aktivera säker kommunikation med DDNS-leverantör"
|
||||
msgstr "Aktivera säker kommunikation med DDNS-leverantören"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:612
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1140
|
||||
@@ -207,24 +211,24 @@ msgstr "Fel"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1040
|
||||
msgid "Error Max Retry Counter"
|
||||
msgstr ""
|
||||
msgstr "Högsta antal omförsök vid fel"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1050
|
||||
msgid "Error Retry Interval"
|
||||
msgstr ""
|
||||
msgstr "Intervall för omförsök vid fel"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:877
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
|
||||
msgid "Event Network"
|
||||
msgstr ""
|
||||
msgstr "Händelsenätverk"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:855
|
||||
msgid "Example for IPv4"
|
||||
msgstr ""
|
||||
msgstr "Exempel för IPv4"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:857
|
||||
msgid "Example for IPv6"
|
||||
msgstr ""
|
||||
msgstr "Exempel för IPv6"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:975
|
||||
msgid "File"
|
||||
@@ -232,11 +236,11 @@ msgstr "Fil"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:711
|
||||
msgid "Follow instructions found on their WEB page."
|
||||
msgstr ""
|
||||
msgstr "Följ anvisningarna på leverantörens webbsida."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:403
|
||||
msgid "For supported codes look here"
|
||||
msgstr ""
|
||||
msgstr "Se här för koder som stöds"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:915
|
||||
msgid "Force IP Version"
|
||||
@@ -244,15 +248,15 @@ msgstr "Tvinga IP-version"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1005
|
||||
msgid "Force Interval"
|
||||
msgstr ""
|
||||
msgstr "Tvingat intervall"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:936
|
||||
msgid "Force TCP on DNS"
|
||||
msgstr ""
|
||||
msgstr "Tvinga TCP för DNS"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1031
|
||||
msgid "Force Unit"
|
||||
msgstr ""
|
||||
msgstr "Enhet för tvingad uppdatering"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
|
||||
msgid "Format"
|
||||
@@ -267,8 +271,8 @@ msgid ""
|
||||
"GNU Wget will use the IP of given network, cURL will use the physical "
|
||||
"interface."
|
||||
msgstr ""
|
||||
"GNU Wget kommer att använda IP-adressen för det angivna nätverket, cURL "
|
||||
"kommer att använda det fysiska gränssnittet."
|
||||
"GNU Wget använder IP-adressen för det angivna nätverket, medan cURL använder "
|
||||
"det fysiska gränssnittet."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
|
||||
msgid "Global Settings"
|
||||
@@ -276,7 +280,7 @@ msgstr "Globala inställningar"
|
||||
|
||||
#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
|
||||
msgid "Grant access to ddns procedures"
|
||||
msgstr ""
|
||||
msgstr "Ge åtkomst till DDNS-procedurer"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
|
||||
msgid "HTTPS not supported"
|
||||
@@ -284,16 +288,16 @@ msgstr "HTTPS stöds inte"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
|
||||
msgid "Hostname/FQDN to validate, whether an IP update is necessary"
|
||||
msgstr ""
|
||||
msgstr "Värdnamn/FQDN som används för att avgöra om en IP-uppdatering behövs"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:806
|
||||
msgid "IP address source"
|
||||
msgstr "IP-adressens källa"
|
||||
msgstr "Källa för IP-adress"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:503
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:629
|
||||
msgid "IP address version"
|
||||
msgstr "Version för IP-adress"
|
||||
msgstr "IP-adressversion"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:506
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:634
|
||||
@@ -302,11 +306,11 @@ msgstr "IPv4-adress"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:950
|
||||
msgid "IPv6 address must be given in square brackets"
|
||||
msgstr ""
|
||||
msgstr "IPv6-adressen måste anges inom hakparenteser"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
|
||||
msgid "IPv6 is not supported by this system"
|
||||
msgstr ""
|
||||
msgstr "IPv6 stöds inte av det här systemet"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
|
||||
msgid "IPv6 not supported"
|
||||
@@ -322,21 +326,23 @@ msgid ""
|
||||
"If Wget and cURL package are installed, Wget is used for communication by "
|
||||
"default."
|
||||
msgstr ""
|
||||
"Om paketen Wget och cURL är installerade används Wget som standard för "
|
||||
"kommunikationen."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
|
||||
msgid "If this service section is disabled it will not be started."
|
||||
msgstr ""
|
||||
msgstr "Om den här tjänstesektionen är inaktiverad startas den inte."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
|
||||
msgid "If using secure communication you should verify server certificates!"
|
||||
msgstr ""
|
||||
msgstr "Om säker kommunikation används bör servercertifikaten verifieras!"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:341
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:353
|
||||
msgid ""
|
||||
"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
|
||||
msgstr ""
|
||||
msgstr "I vissa OpenWrt-versioner är cURL/libcurl kompilerat utan proxystöd."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:963
|
||||
msgid "Info"
|
||||
@@ -351,16 +357,20 @@ msgid ""
|
||||
"Install 'bind-host' or 'knot-host' or 'drill' package if you know you need "
|
||||
"TCP for DNS requests."
|
||||
msgstr ""
|
||||
"Installera paketet ”bind-host”, ”knot-host” eller ”drill” om du vet att du "
|
||||
"behöver TCP för DNS-begäranden."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:386
|
||||
msgid ""
|
||||
"Install 'ca-certificates' package or needed certificates by hand into /etc/"
|
||||
"ssl/certs default directory"
|
||||
msgstr ""
|
||||
"Installera paketet ”ca-certificates” eller lägg manuellt de certifikat som "
|
||||
"behövs i standardkatalogen /etc/ssl/certs"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:670
|
||||
msgid "Install Service"
|
||||
msgstr ""
|
||||
msgstr "Installera tjänst"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:812
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:862
|
||||
@@ -369,15 +379,16 @@ msgstr "Gränssnitt"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1006
|
||||
msgid "Interval to force an update at the DDNS Provider"
|
||||
msgstr ""
|
||||
msgstr "Intervall för att tvinga en uppdatering hos DDNS-leverantören"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1032
|
||||
msgid "Interval unit for forced updates sent to DDNS Provider."
|
||||
msgstr ""
|
||||
"Intervallenhet för tvingade uppdateringar som skickas till DDNS-leverantören."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:997
|
||||
msgid "Interval unit to check for changed IP"
|
||||
msgstr ""
|
||||
msgstr "Intervallenhet för kontroll av ändrad IP-adress"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1145
|
||||
msgid "Last Update"
|
||||
@@ -385,11 +396,11 @@ msgstr "Senaste uppdateringen"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
|
||||
msgid "Log File Viewer"
|
||||
msgstr "Visare av loggfil"
|
||||
msgstr "Loggfilvisare"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:416
|
||||
msgid "Log directory"
|
||||
msgstr ""
|
||||
msgstr "Loggkatalog"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:428
|
||||
msgid "Log length"
|
||||
@@ -407,11 +418,13 @@ msgstr "Logga till syslog"
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1130
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
|
||||
msgid "Lookup Hostname"
|
||||
msgstr "Kolla upp värdnamn"
|
||||
msgstr "Slå upp värdnamn"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:807
|
||||
msgid "Method used to determine the system IP-Address to send in updates"
|
||||
msgstr ""
|
||||
"Metod som används för att fastställa systemets IP-adress som ska skickas i "
|
||||
"uppdateringar"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:491
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
|
||||
@@ -423,16 +436,20 @@ msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL is installed to select a network to use "
|
||||
"for communication."
|
||||
msgstr ""
|
||||
"Varken GNU Wget med SSL eller cURL är installerat, vilket krävs för att "
|
||||
"välja ett nätverk för kommunikationen."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
|
||||
msgid ""
|
||||
"Neither GNU Wget with SSL nor cURL is installed to support secure updates "
|
||||
"via HTTPS protocol."
|
||||
msgstr ""
|
||||
"Varken GNU Wget med SSL eller cURL är installerat för att stödja säkra "
|
||||
"uppdateringar via HTTPS-protokollet."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:615
|
||||
msgid "Neither from LuCI interface nor from console."
|
||||
msgstr ""
|
||||
msgstr "Varken från LuCI-gränssnittet eller från konsolen."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:810
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:844
|
||||
@@ -444,7 +461,7 @@ msgstr "Nätverk"
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:888
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:906
|
||||
msgid "Network on which the ddns-updater scripts will be started"
|
||||
msgstr ""
|
||||
msgstr "Nätverk som ddns-updater-skripten ska startas på"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:228
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1149
|
||||
@@ -453,7 +470,7 @@ msgstr "Aldrig"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:494
|
||||
msgid "New DDns Service…"
|
||||
msgstr ""
|
||||
msgstr "Ny DDNS-tjänst…"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1145
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
|
||||
@@ -462,17 +479,17 @@ msgstr "Nästa uppdatering"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1145
|
||||
msgid "Next Verify"
|
||||
msgstr ""
|
||||
msgstr "Nästa verifiering"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:227
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1135
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
|
||||
msgid "No Data"
|
||||
msgstr "Ingen Data"
|
||||
msgstr "Inga data"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:383
|
||||
msgid "No certificates found"
|
||||
msgstr "Inga ceritifikat hittades"
|
||||
msgstr "Inga certifikat hittades"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:962
|
||||
msgid "No logging"
|
||||
@@ -480,12 +497,12 @@ msgstr "Ingen loggning"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
|
||||
msgid "Non-public and by default blocked IPs"
|
||||
msgstr ""
|
||||
msgstr "Icke-offentliga och som standard blockerade IP-adresser"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:231
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1121
|
||||
msgid "Not Running"
|
||||
msgstr ""
|
||||
msgstr "Körs inte"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
|
||||
msgid "Notice"
|
||||
@@ -493,36 +510,41 @@ msgstr "Avisering"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:429
|
||||
msgid "Number of last lines stored in log files"
|
||||
msgstr ""
|
||||
msgstr "Antal senaste rader som lagras i loggfiler"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:916
|
||||
msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
|
||||
msgstr ""
|
||||
msgstr "VALFRITT: Tvinga kommunikation enbart via IPv4 eller IPv6."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:937
|
||||
msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
|
||||
msgstr ""
|
||||
"VALFRITT: Tvinga användning av TCP i stället för standardprotokollet UDP för "
|
||||
"DNS-begäranden."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:904
|
||||
msgid "OPTIONAL: Network to use for communication"
|
||||
msgstr ""
|
||||
msgstr "VALFRITT: Nätverk som ska användas för kommunikation"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
|
||||
msgid "OPTIONAL: Proxy-Server for detection and updates."
|
||||
msgstr ""
|
||||
msgstr "VALFRITT: Proxyserver för identifiering och uppdateringar."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:925
|
||||
msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
|
||||
msgstr ""
|
||||
"VALFRITT: Använd en annan DNS-server än standardservern för att identifiera "
|
||||
"”Registrerad IP”."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1041
|
||||
msgid ""
|
||||
"On Error the script will stop execution after the given number of retries."
|
||||
msgstr ""
|
||||
"Vid fel avbryter skriptet körningen efter det angivna antalet omförsök."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
|
||||
msgid "Optional Encoded Parameter"
|
||||
msgstr ""
|
||||
msgstr "Valfri kodad parameter"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
|
||||
msgid "Optional Parameter"
|
||||
@@ -530,15 +552,15 @@ msgstr "Valfri parameter"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
|
||||
msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
|
||||
msgstr ""
|
||||
msgstr "Valfritt: Ersätter [PARAMENC] i uppdaterings-URL:en (URL-kodad)"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
|
||||
msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
|
||||
msgstr ""
|
||||
msgstr "Valfritt: Ersätter [PARAMOPT] i uppdaterings-URL:en (INTE URL-kodad)"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
|
||||
msgid "PROXY-Server"
|
||||
msgstr "PROXY-server"
|
||||
msgstr "Proxyserver"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:760
|
||||
msgid "Password"
|
||||
@@ -546,34 +568,34 @@ msgstr "Lösenord"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:788
|
||||
msgid "Path to CA-Certificate"
|
||||
msgstr "Genväg till CA-certifikat"
|
||||
msgstr "Sökväg till CA-certifikat"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:312
|
||||
msgid ""
|
||||
"Please follow the instructions on OpenWrt's homepage to enable IPv6 support"
|
||||
msgstr ""
|
||||
msgstr "Följ anvisningarna på OpenWrts webbplats för att aktivera IPv6-stöd"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1086
|
||||
msgid "Please press [Read] button"
|
||||
msgstr "Vänligen tryck på [Läs]-knappen"
|
||||
msgstr "Tryck på knappen [Läs]"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:719
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:741
|
||||
msgid "Provide either an Update Script OR an Update URL"
|
||||
msgstr ""
|
||||
msgstr "Ange antingen ett uppdateringsskript ELLER en uppdaterings-URL"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1069
|
||||
msgid "Read / Reread log file"
|
||||
msgstr "Läs / Läs om loggfilen"
|
||||
msgstr "Läs/läs om loggfilen"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:693
|
||||
msgid "Really switch service?"
|
||||
msgstr ""
|
||||
msgstr "Vill du verkligen byta tjänst?"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1130
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
|
||||
msgid "Registered IP"
|
||||
msgstr "Registrerad IP"
|
||||
msgstr "Registrerad IP-adress"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:567
|
||||
msgid "Reload"
|
||||
@@ -581,27 +603,27 @@ msgstr "Ladda om"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:550
|
||||
msgid "Reload this service"
|
||||
msgstr ""
|
||||
msgstr "Ladda om den här tjänsten"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
|
||||
msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
|
||||
msgstr ""
|
||||
msgstr "Ersätter [DOMAIN] i uppdaterings-URL:en (URL-kodad)"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:761
|
||||
msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
|
||||
msgstr ""
|
||||
msgstr "Ersätter [PASSWORD] i uppdaterings-URL:en (URL-kodad)"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:755
|
||||
msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
|
||||
msgstr ""
|
||||
msgstr "Ersätter [USERNAME] i uppdaterings-URL:en (URL-kodad)"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
|
||||
msgid "Restart DDns"
|
||||
msgstr ""
|
||||
msgstr "Starta om DDNS"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1058
|
||||
msgid "Retry Unit"
|
||||
msgstr ""
|
||||
msgstr "Enhet för omförsök"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
|
||||
msgid "Run once"
|
||||
@@ -620,18 +642,18 @@ msgstr "Skript"
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:517
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
|
||||
msgid "Select a service"
|
||||
msgstr ""
|
||||
msgstr "Välj en tjänst"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:518
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:659
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:679
|
||||
msgid "Service doesn't support this IP type"
|
||||
msgstr ""
|
||||
msgstr "Tjänsten stöder inte den här IP-typen"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:669
|
||||
msgid "Service not installed"
|
||||
msgstr ""
|
||||
msgstr "Tjänsten är inte installerad"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:455
|
||||
msgid "Services"
|
||||
@@ -639,29 +661,31 @@ msgstr "Tjänster"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:450
|
||||
msgid "Services URL Download"
|
||||
msgstr ""
|
||||
msgstr "URL för hämtning av tjänster"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
|
||||
msgid "Services list last update"
|
||||
msgstr ""
|
||||
msgstr "Senaste uppdatering av tjänstelistan"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
|
||||
msgid "Setting this parameter to 0 will force the script to only run once"
|
||||
msgstr ""
|
||||
msgstr "Om parametern anges till 0 tvingas skriptet att endast köras en gång"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:451
|
||||
msgid ""
|
||||
"Source URL for services file. Defaults to the master openwrt ddns package "
|
||||
"repo."
|
||||
msgstr ""
|
||||
"Käll-URL för tjänstefilen. Standardvärdet är huvudarkivet för OpenWrts DDNS-"
|
||||
"paket."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:201
|
||||
msgid "Start DDNS"
|
||||
msgstr ""
|
||||
msgstr "Starta DDNS"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
|
||||
msgid "State"
|
||||
msgstr "Status"
|
||||
msgstr "Tillstånd"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1117
|
||||
msgid "Status"
|
||||
@@ -669,19 +693,19 @@ msgstr "Status"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
|
||||
msgid "Status directory"
|
||||
msgstr ""
|
||||
msgstr "Statuskatalog"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:566
|
||||
msgid "Stop"
|
||||
msgstr "Stopp"
|
||||
msgstr "Stoppa"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:201
|
||||
msgid "Stop DDNS"
|
||||
msgstr ""
|
||||
msgstr "Stoppa DDNS"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:555
|
||||
msgid "Stop this service"
|
||||
msgstr ""
|
||||
msgstr "Stoppa den här tjänsten"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:19
|
||||
msgid "Stopped"
|
||||
@@ -689,33 +713,35 @@ msgstr "Stoppad"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:694
|
||||
msgid "Switch service"
|
||||
msgstr ""
|
||||
msgstr "Byt tjänst"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
|
||||
msgid "The default setting of '0' will retry infinitely."
|
||||
msgstr ""
|
||||
msgstr "Standardvärdet ”0” innebär obegränsat antal omförsök."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1051
|
||||
msgid "The interval between which each subsequent retry commences."
|
||||
msgstr ""
|
||||
msgstr "Intervallet mellan varje efterföljande omförsök."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:497
|
||||
msgid "The service name is already used"
|
||||
msgstr ""
|
||||
msgstr "Tjänstenamnet används redan"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
|
||||
msgid "There is no service configured."
|
||||
msgstr "Det finns ingen tjänst inställd."
|
||||
msgstr "Ingen tjänst är konfigurerad."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
|
||||
msgid ""
|
||||
"This is only a problem with multiple WAN interfaces and your DDNS provider "
|
||||
"is unreachable via one of them."
|
||||
msgstr ""
|
||||
"Detta är endast ett problem med flera WAN-gränssnitt om din DDNS-leverantör "
|
||||
"inte kan nås via ett av dem."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1085
|
||||
msgid "This is the current content of the log file in %h for this service."
|
||||
msgstr ""
|
||||
msgstr "Detta är det aktuella innehållet i tjänstens loggfil i %h."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:210
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
|
||||
@@ -723,14 +749,16 @@ msgid ""
|
||||
"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
|
||||
"force_interval set to '0')"
|
||||
msgstr ""
|
||||
"Detta är standard om du kör DDNS-skript själv (t.ex. via cron med "
|
||||
"force_interval satt till ”0”)"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:893
|
||||
msgid "This will be autoset to the selected interface"
|
||||
msgstr ""
|
||||
msgstr "Detta ställs automatiskt in till det valda gränssnittet"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
|
||||
msgid "Timer Settings"
|
||||
msgstr ""
|
||||
msgstr "Timerinställningar"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:811
|
||||
msgid "URL"
|
||||
@@ -738,7 +766,7 @@ msgstr "URL"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:852
|
||||
msgid "URL to detect"
|
||||
msgstr "Webbadress att upptäcka"
|
||||
msgstr "URL för identifiering"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:230
|
||||
@@ -750,19 +778,19 @@ msgstr "Okänd"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
|
||||
msgid "Update DDns Services List"
|
||||
msgstr ""
|
||||
msgstr "Uppdatera listan över DDNS-tjänster"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:684
|
||||
msgid "Update URL"
|
||||
msgstr ""
|
||||
msgstr "Uppdaterings-URL"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:709
|
||||
msgid "Update URL for updating your DDNS Provider."
|
||||
msgstr ""
|
||||
msgstr "Uppdaterings-URL för att uppdatera din DDNS-leverantör."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:782
|
||||
msgid "Use HTTP Secure"
|
||||
msgstr "Använd Säker HTTP"
|
||||
msgstr "Använd HTTPS"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:435
|
||||
msgid "Use cURL"
|
||||
@@ -770,7 +798,7 @@ msgstr "Använd cURL"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:871
|
||||
msgid "User defined script to read system IP-Address"
|
||||
msgstr ""
|
||||
msgstr "Användardefinierat skript för att läsa systemets IP-adress"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:754
|
||||
msgid "Username"
|
||||
@@ -778,19 +806,19 @@ msgstr "Användarnamn"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:371
|
||||
msgid "Using specific DNS Server not supported"
|
||||
msgstr ""
|
||||
msgstr "Användning av en specifik DNS-server stöds inte"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:990
|
||||
msgid "Values below 5 minutes == 300 seconds are not supported"
|
||||
msgstr ""
|
||||
msgstr "Värden under 5 minuter, dvs. 300 sekunder, stöds inte"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
|
||||
msgid "Values lower than 'Check Interval' except '0' are invalid"
|
||||
msgstr ""
|
||||
msgstr "Värden lägre än ”Kontrollintervall”, förutom ”0”, är ogiltiga"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
|
||||
msgid "Verify"
|
||||
msgstr "Verkställ"
|
||||
msgstr "Verifiera"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:965
|
||||
msgid "Warning"
|
||||
@@ -799,51 +827,59 @@ msgstr "Varning"
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:504
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
|
||||
msgid "Which record type to update at the DDNS provider (A/AAAA)"
|
||||
msgstr ""
|
||||
msgstr "Vilken posttyp som ska uppdateras hos DDNS-leverantören (A/AAAA)"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1059
|
||||
msgid "Which time units to use for retry counters."
|
||||
msgstr ""
|
||||
msgstr "Vilka tidsenheter som ska användas för omförsöksräknare."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:974
|
||||
msgid ""
|
||||
"Writes detailed messages to log file. File will be truncated automatically."
|
||||
msgstr ""
|
||||
"Skriver detaljerade meddelanden till loggfilen. Filen trunkeras automatiskt."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
|
||||
msgid ""
|
||||
"Writes log messages to syslog. Critical Errors will always be written to "
|
||||
"syslog."
|
||||
msgstr ""
|
||||
"Skriver loggmeddelanden till syslog. Kritiska fel skrivs alltid till syslog."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:375
|
||||
msgid ""
|
||||
"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' "
|
||||
"package, if you need to specify a DNS server to detect your registered IP."
|
||||
msgstr ""
|
||||
"Du bör installera paketet ”bind-host”, ”knot-host”, ”drill” eller ”hostip” "
|
||||
"om du behöver ange en DNS-server för att identifiera din registrerade IP-"
|
||||
"adress."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
|
||||
msgid ""
|
||||
"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
|
||||
"*ssl' package."
|
||||
msgstr ""
|
||||
"Du bör installera ”wget” eller ”curl”, eller ”uclient-fetch” tillsammans med "
|
||||
"paketet ”libustream-*ssl”."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
|
||||
msgid "You should install 'wget' or 'curl' package."
|
||||
msgstr ""
|
||||
msgstr "Du bör installera paketet ”wget” eller ”curl”."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
|
||||
msgid ""
|
||||
"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
|
||||
msgstr ""
|
||||
"Du bör installera paketet ”wget” eller ”uclient-fetch” eller ersätta libcurl."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
|
||||
msgid "cURL is installed, but libcurl was compiled without proxy support."
|
||||
msgstr ""
|
||||
msgstr "cURL är installerat, men libcurl kompilerades utan proxystöd."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:348
|
||||
msgid "cURL without Proxy Support"
|
||||
msgstr "cURL utan Proxy-stöd"
|
||||
msgstr "cURL utan proxystöd"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:513
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:642
|
||||
@@ -856,7 +892,7 @@ msgstr "dagar"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
|
||||
msgid "directory or path/file"
|
||||
msgstr ""
|
||||
msgstr "katalog eller sökväg/fil"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1002
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1036
|
||||
@@ -875,7 +911,7 @@ msgstr "eller"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
|
||||
msgid "or update your system to the latest OpenWrt Release"
|
||||
msgstr ""
|
||||
msgstr "eller uppdatera systemet till den senaste OpenWrt-versionen"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1000
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1062
|
||||
@@ -884,4 +920,4 @@ msgstr "sekunder"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
|
||||
msgid "to run HTTPS without verification of server certificates (insecure)"
|
||||
msgstr "för att köra HTTPS utan verifiering av server-certifikaten (osäkert)"
|
||||
msgstr "för att köra HTTPS utan verifiering av servercertifikat (osäkert)"
|
||||
|
||||
@@ -116,6 +116,22 @@ function processLines(buffer, onChunk) {
|
||||
return buffer;
|
||||
}
|
||||
|
||||
// Parse the docker multiplexed stream format, https://docs.docker.com/reference/api/engine/version/v1.43/#stream-format
|
||||
function parse_multiplexed_stream(buffer) {
|
||||
const output = [];
|
||||
|
||||
while (buffer.length > 0) {
|
||||
if (buffer.length < 8) break; // Not enough data for header
|
||||
let stream_type = buffer.charCodeAt(0);
|
||||
let payload_length = (buffer.charCodeAt(4) << 24) | (buffer.charCodeAt(5) << 16) | (buffer.charCodeAt(6) << 8) | buffer.charCodeAt(7);
|
||||
if (buffer.length < 8 + payload_length) break; // Not enough data for payload
|
||||
let payload = buffer.slice(8, 8 + payload_length);
|
||||
output.push({ type: stream_type, payload: payload });
|
||||
buffer = buffer.slice(8 + payload_length);
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
function call_docker(method, path, options = {}) {
|
||||
return loadPromise.then(() => {
|
||||
@@ -228,20 +244,24 @@ function call_docker(method, path, options = {}) {
|
||||
let parsed = safeText || text;
|
||||
const contentType = response.headers.get('content-type') || '';
|
||||
|
||||
// Try normal JSON parse first
|
||||
try {
|
||||
parsed = JSON.parse(text);
|
||||
} catch (err) {
|
||||
// If the payload is newline-delimited JSON (Docker events), split and parse each line
|
||||
if (['application/json',
|
||||
'application/x-ndjson',
|
||||
'application/json-seq'].includes(contentType) || safeText.includes('\n')) {
|
||||
const lines = safeText.split(/\r?\n/).filter(Boolean);
|
||||
try {
|
||||
parsed = lines.map(l => JSON.parse(l));
|
||||
} catch (err2) {
|
||||
// Fall back to raw text if parsing fails
|
||||
parsed = text;
|
||||
if ("application/vnd.docker.multiplexed-stream" == contentType) {
|
||||
parsed = parse_multiplexed_stream(safeText);
|
||||
} else {
|
||||
// Try normal JSON parse first
|
||||
try {
|
||||
parsed = JSON.parse(text);
|
||||
} catch (err) {
|
||||
// If the payload is newline-delimited JSON (Docker events), split and parse each line
|
||||
if (['application/json',
|
||||
'application/x-ndjson',
|
||||
'application/json-seq'].includes(contentType) || safeText.includes('\n')) {
|
||||
const lines = safeText.split(/\r?\n/).filter(Boolean);
|
||||
try {
|
||||
parsed = lines.map(l => JSON.parse(l));
|
||||
} catch (err2) {
|
||||
// Fall back to raw text if parsing fails
|
||||
parsed = text;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1280,13 +1280,14 @@ const ansiToHtml = function(text) {
|
||||
// Escape HTML special characters
|
||||
const escapeHtml = (str) => {
|
||||
const map = {
|
||||
' ': ' ',
|
||||
'&': '&',
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
'"': '"',
|
||||
"'": '''
|
||||
};
|
||||
return str.replace(/[&<>"']/g, m => map[m]);
|
||||
return str.replace(/[&<>"' ]/g, m => map[m]);
|
||||
};
|
||||
|
||||
// Split by ANSI escape sequences and process
|
||||
|
||||
@@ -1684,7 +1684,10 @@ return dm2.dv.extend({
|
||||
return false;
|
||||
}
|
||||
|
||||
const logText = response?.body || _('No logs available');
|
||||
let logText = response?.body || _('No logs available');
|
||||
if ("application/vnd.docker.multiplexed-stream" == response?.headers['content-type']) {
|
||||
logText = (response?.body || []).map((frame)=>frame.payload).join('');
|
||||
}
|
||||
// Convert ANSI codes to HTML and set innerHTML
|
||||
logsDiv.innerHTML = dm2.ansiToHtml(logText);
|
||||
logsDiv.scrollTop = logsDiv.scrollHeight;
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-10-05 13:02+0000\n"
|
||||
"Last-Translator: A R Asad <arasad222@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-06 20:04+0000\n"
|
||||
"Last-Translator: Mehedi Hasan <asmaparvin019@gmail.com>\n"
|
||||
"Language-Team: Bengali (Bangladesh) <https://hosted.weblate.org/projects/"
|
||||
"openwrt/luciapplicationsdockerman/bn_BD/>\n"
|
||||
"Language: bn_BD\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.14-dev\n"
|
||||
"X-Generator: Weblate 2026.8.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -940,7 +940,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:359
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
msgstr "ইম্পরট"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:202
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:212
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-07-13 02:01+0000\n"
|
||||
"PO-Revision-Date: 2026-08-14 18:35+0000\n"
|
||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/cs/>\n"
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -866,7 +866,7 @@ msgstr "Název stroje"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:60
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/networks.js:178
|
||||
msgid "ID"
|
||||
msgstr "Identifikátor"
|
||||
msgstr "Identif."
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:45
|
||||
msgid "IP VLAN"
|
||||
@@ -984,7 +984,7 @@ msgstr "Info"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:73
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:72
|
||||
msgid "Ingress"
|
||||
msgstr "Dovnitř"
|
||||
msgstr "Vstup"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:73
|
||||
msgid ""
|
||||
@@ -1409,7 +1409,7 @@ msgstr "Operační výstup"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:89
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:80
|
||||
msgid "Options"
|
||||
msgstr "Možnosti"
|
||||
msgstr "Předvolby"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:46
|
||||
msgid "Overlay network"
|
||||
@@ -1641,7 +1641,7 @@ msgstr "Prostředky"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1802
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:242
|
||||
msgid "Restart"
|
||||
msgstr "Restartovat"
|
||||
msgstr "Restart"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:154
|
||||
msgctxt "daemon restart action"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-06-22 22:15+0000\n"
|
||||
"PO-Revision-Date: 2026-08-14 17:53+0000\n"
|
||||
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/es/>\n"
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 2026.7.dev0\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -1685,7 +1685,7 @@ msgstr "Ejecutar comando"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:84
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:141
|
||||
msgid "Running"
|
||||
msgstr "Ejecutando"
|
||||
msgstr "Ejecutándose"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:833
|
||||
msgid "Running Processes"
|
||||
@@ -2093,7 +2093,7 @@ msgstr "Vista general de Volúmenes"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:75
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1763
|
||||
msgid "Warning"
|
||||
msgstr "Aviso"
|
||||
msgstr "Advertencia"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1078
|
||||
msgid "WebSocket"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-06-07 18:23+0000\n"
|
||||
"PO-Revision-Date: 2026-08-16 17:38+0000\n"
|
||||
"Last-Translator: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>\n"
|
||||
"Language-Team: Irish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/ga/>\n"
|
||||
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :"
|
||||
"(n>6 && n<11) ? 3 : 4;\n"
|
||||
"X-Generator: Weblate 2026.6\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -45,7 +45,7 @@ msgstr "Aisteoir"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:582
|
||||
msgid "Add"
|
||||
msgstr "Cuir"
|
||||
msgstr "Cuir leis"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:315
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:620
|
||||
@@ -254,7 +254,7 @@ msgstr "Glanadh an taisce tógála"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1189
|
||||
msgid "Clear"
|
||||
msgstr "Soiléir"
|
||||
msgstr "Glan"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:617
|
||||
msgid "Click to add a new tag to this image"
|
||||
@@ -988,7 +988,7 @@ msgstr "Eolas"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:73
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:72
|
||||
msgid "Ingress"
|
||||
msgstr "Iontráil"
|
||||
msgstr "Dul Isteach"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:73
|
||||
msgid ""
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-12-07 21:54+0000\n"
|
||||
"PO-Revision-Date: 2026-08-05 02:03+0000\n"
|
||||
"Last-Translator: Monarch "
|
||||
"<monarch.scrap-0p@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Japanese <https://hosted.weblate.org/projects/openwrt/"
|
||||
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.15-dev\n"
|
||||
"X-Generator: Weblate 2026.8.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -759,7 +759,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:77
|
||||
msgid "Fatal"
|
||||
msgstr ""
|
||||
msgstr "致命的"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:924
|
||||
msgid "File"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-06-27 12:02+0000\n"
|
||||
"PO-Revision-Date: 2026-08-07 23:22+0000\n"
|
||||
"Last-Translator: Hyeonjeong Lee <h9101654@gmail.com>\n"
|
||||
"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/ko/>\n"
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 2026.7.dev0\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -973,7 +973,7 @@ msgstr "정보(Info)"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:73
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:72
|
||||
msgid "Ingress"
|
||||
msgstr ""
|
||||
msgstr "인그레스"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:73
|
||||
msgid ""
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-05-03 08:19+0000\n"
|
||||
"Last-Translator: BoneNI <bounkirdni@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-15 13:06+0000\n"
|
||||
"Last-Translator: Bone NI <bounkirdni@gmail.com>\n"
|
||||
"Language-Team: Lao <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/lo/>\n"
|
||||
"Language: lo\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.17.1\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -65,11 +65,11 @@ msgstr "ຂັ້ນສູງ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:590
|
||||
msgid "Aliases"
|
||||
msgstr ""
|
||||
msgstr "ນາມແຝງ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1923
|
||||
msgid "Aliases (optional):"
|
||||
msgstr ""
|
||||
msgstr "ນາມແຝງ (ເລືອກໄດ້):"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:342
|
||||
msgid "All Subtypes"
|
||||
@@ -109,7 +109,7 @@ msgstr "ສາມາດເຊື່ອມຕໍ່ໄດ້"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:139
|
||||
msgid "Available"
|
||||
msgstr "ພ້ອມໃຊ້ງານ"
|
||||
msgstr "ມີຢູ່"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:431
|
||||
msgid "Back to Containers"
|
||||
@@ -242,7 +242,7 @@ msgstr "ລ້າງ build cache ແລ້ວ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1189
|
||||
msgid "Clear"
|
||||
msgstr "ລ້າງ"
|
||||
msgstr "ລ້າງອອກ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:617
|
||||
msgid "Click to add a new tag to this image"
|
||||
@@ -477,7 +477,7 @@ msgstr "ດີບັກ (Debug)"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:753
|
||||
msgid "Default (daemon)"
|
||||
msgstr ""
|
||||
msgstr "ຄ່າເລີ່ມຕົ້ນ (daemon)"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:57
|
||||
msgid "Default bridge"
|
||||
@@ -877,7 +877,7 @@ msgstr "ທີ່ຢູ່ IPv4"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1919
|
||||
msgid "IPv4 Address (optional):"
|
||||
msgstr ""
|
||||
msgstr "ທີ່ຢູ່ IPv4 (ເລືອກໄດ້):"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:64
|
||||
msgid "IPv6"
|
||||
@@ -891,7 +891,7 @@ msgstr "ທີ່ຢູ່ IPv6"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1921
|
||||
msgid "IPv6 Address (optional):"
|
||||
msgstr ""
|
||||
msgstr "ທີ່ຢູ່ IPv6 (ເລືອກໄດ້):"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:586
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:134
|
||||
@@ -973,7 +973,7 @@ msgstr "ຂໍ້ມູນ"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:73
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:72
|
||||
msgid "Ingress"
|
||||
msgstr "Ingress"
|
||||
msgstr "ຂາເຂົ້າ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:73
|
||||
msgid ""
|
||||
@@ -1085,7 +1085,7 @@ msgstr "ຕົວເລືອກລັອກ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:751
|
||||
msgid "Log driver"
|
||||
msgstr ""
|
||||
msgstr "ໄດເວີການບັນທຶກ (Log driver)"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:745
|
||||
msgid "Log driver options"
|
||||
@@ -1211,7 +1211,7 @@ msgstr "ສະຖິຕິເນັດເວີກ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:282
|
||||
msgid "Network Aliases"
|
||||
msgstr ""
|
||||
msgstr "ນາມແຝງເຄືອຂ່າຍ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:100
|
||||
msgid "Network Configurations"
|
||||
@@ -1376,7 +1376,7 @@ msgstr "ສຳລັບເນັດເວີກທີ່ຜູ້ໃຊ້ກຳ
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:351
|
||||
msgid "Open in browser"
|
||||
msgstr ""
|
||||
msgstr "ເປີດໃນບຣາວເຊີ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:899
|
||||
msgid "Operation failed"
|
||||
@@ -1621,7 +1621,7 @@ msgstr "ຊັບພະຍາກອນ"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1802
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:242
|
||||
msgid "Restart"
|
||||
msgstr "ຣີສະຕາດ"
|
||||
msgstr "ເລີ່ມໃໝ່"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:154
|
||||
msgctxt "daemon restart action"
|
||||
@@ -2161,7 +2161,7 @@ msgstr "ອິເມຈ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:755
|
||||
msgid "json-file"
|
||||
msgstr ""
|
||||
msgstr "json-file"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:336
|
||||
msgid "kill"
|
||||
@@ -2173,7 +2173,7 @@ msgstr "ໂຫຼດ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:754
|
||||
msgid "local"
|
||||
msgstr ""
|
||||
msgstr "local"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:383
|
||||
msgid "mount"
|
||||
@@ -2189,7 +2189,7 @@ msgstr "node"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:757
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
msgstr "ບໍ່ມີ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:337
|
||||
msgid "oom"
|
||||
@@ -2258,7 +2258,7 @@ msgstr "stop"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:756
|
||||
msgid "syslog"
|
||||
msgstr ""
|
||||
msgstr "syslog"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:364
|
||||
msgid "tag"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-07-05 14:58+0000\n"
|
||||
"Last-Translator: Deni Dgabiev <ghostcraft412@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-14 12:12+0000\n"
|
||||
"Last-Translator: SnIPeRSnIPeR "
|
||||
"<snipersniper@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/ru/>\n"
|
||||
"Language: ru\n"
|
||||
@@ -9,7 +10,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"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"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -253,7 +254,7 @@ msgstr "Кэш сборки очищен"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1189
|
||||
msgid "Clear"
|
||||
msgstr "Сбросить"
|
||||
msgstr "Очистить"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:617
|
||||
msgid "Click to add a new tag to this image"
|
||||
@@ -639,7 +640,7 @@ msgstr "Дублировать/Редактировать контейнер: %s
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:422
|
||||
msgid "Edit"
|
||||
msgstr "Редактировать"
|
||||
msgstr "Изменить"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:315
|
||||
msgid "Edit Mount"
|
||||
@@ -1415,7 +1416,7 @@ msgstr "Результат операции"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:89
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:80
|
||||
msgid "Options"
|
||||
msgstr "Опции"
|
||||
msgstr "Параметры"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:46
|
||||
msgid "Overlay network"
|
||||
@@ -1472,7 +1473,7 @@ msgstr "Приостановить этот контейнер"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:86
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:143
|
||||
msgid "Paused"
|
||||
msgstr "Приостановлено"
|
||||
msgstr "На паузе"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:742
|
||||
msgid "Per CPU Stats"
|
||||
@@ -1754,7 +1755,7 @@ msgstr ""
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:354
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1801
|
||||
msgid "Start"
|
||||
msgstr "Начало"
|
||||
msgstr "Запустить"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:208
|
||||
msgid "Start this container"
|
||||
@@ -1773,7 +1774,7 @@ msgstr "Статистика"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:721
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:840
|
||||
msgid "Status"
|
||||
msgstr "Статус"
|
||||
msgstr "Состояние"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1109
|
||||
msgid "Stderr"
|
||||
@@ -2004,7 +2005,7 @@ msgstr "Возобновить этот контейнер"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:582
|
||||
msgid "Update"
|
||||
msgstr "Применить"
|
||||
msgstr "Обновить"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1358
|
||||
msgid "Updated"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-06-09 01:01+0000\n"
|
||||
"PO-Revision-Date: 2026-07-28 20:29+0000\n"
|
||||
"Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
|
||||
"Language-Team: Turkish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/tr/>\n"
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 2026.6\n"
|
||||
"X-Generator: Weblate 2026.8.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -251,7 +251,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1189
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
msgstr "Temizle"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:617
|
||||
msgid "Click to add a new tag to this image"
|
||||
@@ -326,7 +326,7 @@ msgstr ""
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1520
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1532
|
||||
msgid "Connected"
|
||||
msgstr ""
|
||||
msgstr "Bağlandı"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1063
|
||||
msgid "Connected to container console"
|
||||
@@ -541,7 +541,7 @@ msgstr ""
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1538
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1557
|
||||
msgid "Disconnected"
|
||||
msgstr ""
|
||||
msgstr "Bağlantı kesildi"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:536
|
||||
msgid "Do you want to remove the tag \"%s\"?"
|
||||
@@ -1285,7 +1285,7 @@ msgstr ""
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:679
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:249
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
msgstr "Hayır"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1877
|
||||
msgid "No additional networks available to connect"
|
||||
@@ -2073,7 +2073,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:679
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
msgstr "Evet"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:323
|
||||
msgid "attach"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-06-05 19:02+0000\n"
|
||||
"Last-Translator: 大王叫我来巡山 "
|
||||
"PO-Revision-Date: 2026-08-15 13:57+0000\n"
|
||||
"Last-Translator: Hosted Weblate user 54392 "
|
||||
"<hamburger2048@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Chinese (Simplified Han script) <https://hosted.weblate.org/"
|
||||
"projects/openwrt/luciapplicationsdockerman/zh_Hans/>\n"
|
||||
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 2026.6\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -45,7 +45,7 @@ msgstr "操作方"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:582
|
||||
msgid "Add"
|
||||
msgstr "新增"
|
||||
msgstr "添加"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:315
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:620
|
||||
@@ -972,7 +972,7 @@ msgstr "信息"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:73
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:72
|
||||
msgid "Ingress"
|
||||
msgstr "入口"
|
||||
msgstr "入站"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:73
|
||||
msgid ""
|
||||
@@ -1398,7 +1398,7 @@ msgstr "覆盖网络"
|
||||
|
||||
#: applications/luci-app-dockerman/root/usr/share/luci/menu.d/luci-app-dockerman.json:19
|
||||
msgid "Overview"
|
||||
msgstr "概况"
|
||||
msgstr "概览"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:847
|
||||
msgid "PID"
|
||||
|
||||
@@ -100,6 +100,23 @@ function coerce_values_to_string(obj) {
|
||||
return obj;
|
||||
};
|
||||
|
||||
// Parse the docker multiplexed stream format, https://docs.docker.com/reference/api/engine/version/v1.43/#stream-format
|
||||
function parse_multiplexed_stream(buffer) {
|
||||
let output = [];
|
||||
|
||||
while (length(buffer) > 0) {
|
||||
if (length(buffer) < 8) break; // Not enough data for header
|
||||
let stream_type = ord(buffer, 0);
|
||||
let payload_length = ord(buffer, 4) << 24 | ord(buffer, 5) << 16 | ord(buffer, 6) << 8 | ord(buffer, 7);
|
||||
if (length(buffer) < 8 + payload_length) break; // Not enough data for payload
|
||||
let payload = substr(buffer, 8, payload_length);
|
||||
push(output, { type: stream_type, payload: payload });
|
||||
buffer = substr(buffer, 8 + payload_length);
|
||||
}
|
||||
|
||||
return output;
|
||||
};
|
||||
|
||||
function call_docker(method, path, options) {
|
||||
options = options || {};
|
||||
const headers = options.headers || {};
|
||||
@@ -277,6 +294,8 @@ function call_docker(method, path, options) {
|
||||
} else {
|
||||
response_body = data;
|
||||
}
|
||||
} else if (response_headers['content-type'] === 'application/vnd.docker.multiplexed-stream' && response_body) {
|
||||
response_body = parse_multiplexed_stream(response_body);
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-05-03 08:19+0000\n"
|
||||
"Last-Translator: BoneNI <bounkirdni@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-15 13:06+0000\n"
|
||||
"Last-Translator: Bone NI <bounkirdni@gmail.com>\n"
|
||||
"Language-Team: Lao <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsksmbd/lo/>\n"
|
||||
"Language: lo\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.17.1\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:58
|
||||
msgid "Add optional guest access to IPC$ share, disabled by default"
|
||||
@@ -84,7 +84,7 @@ msgstr "ສືບທອດເຈົ້າຂອງ"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:36
|
||||
msgid "Interface"
|
||||
msgstr "ອິນເຕີເຟດ"
|
||||
msgstr "ອິນເຕີເຟສ"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:37
|
||||
msgid "Listen only on the given interface or, if unspecified, on lan"
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-07-14 19:03+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
|
||||
"PO-Revision-Date: 2026-08-13 09:16+0000\n"
|
||||
"Last-Translator: Jonatan Nyberg <nickwick@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsksmbd/sv/>\n"
|
||||
"Language: sv\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13-dev\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:58
|
||||
msgid "Add optional guest access to IPC$ share, disabled by default"
|
||||
msgstr ""
|
||||
"Lägg till valfri gäståtkomst till IPC$-resursen, inaktiverad som standard"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:57
|
||||
msgid "Allow guest on IPC$."
|
||||
msgstr ""
|
||||
msgstr "Tillåt gäståtkomst till IPC$."
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:103
|
||||
msgid "Allow guests"
|
||||
@@ -24,15 +25,15 @@ msgstr "Tillåt gäster"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:60
|
||||
msgid "Allow legacy (insecure) protocols/authentication."
|
||||
msgstr "TIllåt förlegade (osäkra) protokoll/autentisering."
|
||||
msgstr "Tillåt äldre (osäkra) protokoll/autentiseringsmetoder."
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:61
|
||||
msgid ""
|
||||
"Allow legacy smb(v1)/Lanman connections, needed for older devices without "
|
||||
"smb(v2.1/3) support."
|
||||
msgstr ""
|
||||
"Tillåt förlegade smb(v1)/Lanman-anslutningar, behövs för äldre enheter som "
|
||||
"saknar stöd för smb(v2.1/3)."
|
||||
"Tillåt äldre SMBv1-/Lanman-anslutningar. Krävs för äldre enheter utan stöd "
|
||||
"för SMBv2.1/3."
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:100
|
||||
msgid "Allowed users"
|
||||
@@ -44,7 +45,7 @@ msgstr "Bläddringsbar"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:119
|
||||
msgid "Create mask"
|
||||
msgstr "Skapa mask"
|
||||
msgstr "Skapandemask"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:54
|
||||
msgid "Description"
|
||||
@@ -52,7 +53,7 @@ msgstr "Beskrivning"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:125
|
||||
msgid "Directory mask"
|
||||
msgstr "Mask för mapp"
|
||||
msgstr "Katalogmask"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:34
|
||||
msgid "Edit Template"
|
||||
@@ -65,19 +66,19 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:98
|
||||
msgid "Force Root"
|
||||
msgstr ""
|
||||
msgstr "Tvinga root"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:33
|
||||
msgid "General Settings"
|
||||
msgstr "Generella inställningar"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
#: applications/luci-app-ksmbd/root/usr/share/rpcd/acl.d/luci-app-ksmbd.json:3
|
||||
msgid "Grant access to LuCI app ksmbd"
|
||||
msgstr "Tillåt åtkomst till LuCI-app ksmbd"
|
||||
msgstr "Ge LuCI-appen ksmbd åtkomst"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:114
|
||||
msgid "Hide dot files"
|
||||
msgstr ""
|
||||
msgstr "Dölj punktfiler"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:109
|
||||
msgid "Inherit owner"
|
||||
@@ -89,7 +90,8 @@ msgstr "Gränssnitt"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:37
|
||||
msgid "Listen only on the given interface or, if unspecified, on lan"
|
||||
msgstr "Lyssna endast på det givna gränssnittet eller, om ospecifierat, på LAN"
|
||||
msgstr ""
|
||||
"Lyssna endast på det angivna gränssnittet eller, om inget anges, på LAN"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:81
|
||||
msgid "Name"
|
||||
@@ -98,25 +100,27 @@ msgstr "Namn"
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:22
|
||||
#: applications/luci-app-ksmbd/root/usr/share/luci/menu.d/luci-app-ksmbd.json:3
|
||||
msgid "Network Shares"
|
||||
msgstr "Nätverksdelningar"
|
||||
msgstr "Nätverksutdelningar"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:82
|
||||
msgid "Path"
|
||||
msgstr "Genväg"
|
||||
msgstr "sökväg"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:77
|
||||
msgid ""
|
||||
"Please add directories to share. Each directory refers to a folder on a "
|
||||
"mounted device."
|
||||
msgstr ""
|
||||
"Lägg till kataloger som ska delas. Varje katalog avser en mapp på en "
|
||||
"monterad enhet."
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:92
|
||||
msgid "Read-only"
|
||||
msgstr "Endast läsbar"
|
||||
msgstr "Skrivskyddad"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:76
|
||||
msgid "Shared Directories"
|
||||
msgstr "Delade mappar"
|
||||
msgstr "Delade kataloger"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:65
|
||||
msgid ""
|
||||
@@ -125,6 +129,9 @@ msgid ""
|
||||
"('|') should not be changed. They get their values from the 'General "
|
||||
"Settings' tab."
|
||||
msgstr ""
|
||||
"Detta är innehållet i filen '/etc/ksmbd/ksmbd.conf.template', som din ksmbd-"
|
||||
"konfiguration genereras från. Värden mellan lodstreck ('|') ska inte ändras. "
|
||||
"De hämtas från fliken 'Allmänna inställningar'."
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:51
|
||||
msgid "Workgroup"
|
||||
|
||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall
|
||||
PKG_VERSION:=26.8.19
|
||||
PKG_RELEASE:=239
|
||||
PKG_RELEASE:=240
|
||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
||||
@@ -25,25 +25,25 @@ o:value("https://wifi.vivo.com.cn/generate_204", "VIVO (CN)")
|
||||
o.default = o.keylist[3]
|
||||
|
||||
if true then
|
||||
m:appendTemplate("/node_list/node_list")
|
||||
m:appendTemplate("/node_list/node_list")
|
||||
|
||||
if luci.http.formvalue("cbi.submit") == "1" then
|
||||
local group_order = {}
|
||||
group_order = luci.http.formvaluetable("group.order")
|
||||
if group_order then
|
||||
for k, v in pairs(group_order) do
|
||||
if v and v~= "" then
|
||||
local new_order = {}
|
||||
string.gsub(v, "[^" .. " " .. "]+", function(w)
|
||||
new_order[#new_order + 1] = w
|
||||
end)
|
||||
for idx, name in ipairs(new_order) do
|
||||
m.uci:reorder(m.config, name, idx - 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if luci.http.formvalue("cbi.submit") == "1" then
|
||||
local group_order = {}
|
||||
group_order = luci.http.formvaluetable("group.order")
|
||||
if group_order then
|
||||
for k, v in pairs(group_order) do
|
||||
if v and v~= "" then
|
||||
local new_order = {}
|
||||
string.gsub(v, "[^" .. " " .. "]+", function(w)
|
||||
new_order[#new_order + 1] = w
|
||||
end)
|
||||
for idx, name in ipairs(new_order) do
|
||||
m.uci:reorder(m.config, name, idx - 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return api.return_map(m)
|
||||
|
||||
@@ -117,9 +117,9 @@ end
|
||||
o = s:option(DummyValue, "_update", translate("Manual subscription All"))
|
||||
o.rawhtml = true
|
||||
o.cfgvalue = function(self, section)
|
||||
return string.format([[
|
||||
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribeAll()" value="%s" />]],
|
||||
translate("Manual subscription All"))
|
||||
return string.format([[
|
||||
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribeAll()" value="%s" />]],
|
||||
translate("Manual subscription All"))
|
||||
end
|
||||
|
||||
s = m:section(TypedSection, "subscribe_list", "", "<font color='red'>" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "</font>")
|
||||
@@ -215,9 +215,9 @@ end
|
||||
o = s:option(DummyValue, "_update", translate("Manual subscription"))
|
||||
o.rawhtml = true
|
||||
o.cfgvalue = function(self, section)
|
||||
return string.format([[
|
||||
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribe('%s')" value="%s" />]],
|
||||
section, translate("Manual subscription"))
|
||||
return string.format([[
|
||||
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribe('%s')" value="%s" />]],
|
||||
section, translate("Manual subscription"))
|
||||
end
|
||||
|
||||
m:appendTemplate("/cbi/sortable", {sectiontype = s.sectiontype})
|
||||
|
||||
@@ -916,12 +916,12 @@ function gen_config(var)
|
||||
if xray_settings.fragment == "1" then
|
||||
local lengths, delays = {}, {}
|
||||
api.trim(xray_settings.fragment_lengths):gsub("[^,]+", function(w)
|
||||
w = w:gsub("%s+", "")
|
||||
if w ~= "" then lengths[#lengths+1] = w end
|
||||
w = w:gsub("%s+", "")
|
||||
if w ~= "" then lengths[#lengths+1] = w end
|
||||
end)
|
||||
api.trim(xray_settings.fragment_delays):gsub("[^,]+", function(w)
|
||||
w = w:gsub("%s+", "")
|
||||
if w ~= "" then delays[#delays+1] = w end
|
||||
w = w:gsub("%s+", "")
|
||||
if w ~= "" then delays[#delays+1] = w end
|
||||
end)
|
||||
fragment_table = {
|
||||
type = "fragment",
|
||||
|
||||
@@ -534,7 +534,7 @@
|
||||
//自定义框
|
||||
function v_customEnter(cbid, labelSpan, hiddenInput, searchInput, panel, listContainer, customInput) {
|
||||
let inputValue = customInput.value.trim();
|
||||
if (!inputValue) {
|
||||
if (!inputValue) {
|
||||
return;
|
||||
}
|
||||
const existingItems = listContainer.querySelectorAll('li[data-key="' + inputValue + '"]');
|
||||
|
||||
@@ -3,42 +3,42 @@ local map = self.map
|
||||
local api = map.api
|
||||
-%>
|
||||
<style>
|
||||
.dns-con {
|
||||
padding: 1rem;
|
||||
}
|
||||
.faq-title {
|
||||
color: var(--primary);
|
||||
font-weight: bolder;
|
||||
margin-bottom: 0.5rem;
|
||||
display: inline-block;
|
||||
}
|
||||
.reset-title {
|
||||
color: var(--primary);
|
||||
font-weight: bolder;
|
||||
margin-bottom: 0.3rem;
|
||||
display: inline-block;
|
||||
margin-top: 1.2rem;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.dns-item {
|
||||
margin-bottom: 0.8rem;
|
||||
line-height:1.2rem;
|
||||
}
|
||||
.dns-list {
|
||||
.dns-con {
|
||||
padding: 1rem;
|
||||
}
|
||||
.faq-title {
|
||||
color: var(--primary);
|
||||
font-weight: bolder;
|
||||
margin-bottom: 0.5rem;
|
||||
display: inline-block;
|
||||
}
|
||||
.reset-title {
|
||||
color: var(--primary);
|
||||
font-weight: bolder;
|
||||
margin-bottom: 0.3rem;
|
||||
display: inline-block;
|
||||
margin-top: 1.2rem;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.dns-item {
|
||||
margin-bottom: 0.8rem;
|
||||
line-height:1.2rem;
|
||||
}
|
||||
.dns-list {
|
||||
text-indent:1rem;
|
||||
line-height: 1.2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div class="dns-con">
|
||||
<div id="faq_dns">
|
||||
<ul>
|
||||
<b class="faq-title"><%:DNS related issues:%></b>
|
||||
<b class="faq-title"><%:DNS related issues:%></b>
|
||||
<li class="dns-item">1. <span><%:Certain browsers such as Chrome have built-in DNS service, which may affect DNS resolution settings. You can go to 'Settings -> Privacy and security -> Use secure DNS' menu to turn it off.%></span></li>
|
||||
<li class="dns-item">2. <span><%:If you are unable to access the internet after reboot, please try clearing the cache of your terminal devices (make sure to close all open browser application windows first, this step is especially important):%></span>
|
||||
<ul><li class="dns-list"> ◦ <span><%:For Windows systems, open Command Prompt and run the command 'ipconfig /flushdns'.%></span></li>
|
||||
<li class="dns-list"> ◦ <span><%:For Mac systems, open Terminal and run the command 'sudo killall -HUP mDNSResponder'.%></span></li>
|
||||
<li class="dns-list"> ◦ <span><%:For mobile devices, you can clear it by reconnecting to the network, such as toggling Airplane Mode and reconnecting to WiFi.%></span></li>
|
||||
</ul>
|
||||
<ul><li class="dns-list"> ◦ <span><%:For Windows systems, open Command Prompt and run the command 'ipconfig /flushdns'.%></span></li>
|
||||
<li class="dns-list"> ◦ <span><%:For Mac systems, open Terminal and run the command 'sudo killall -HUP mDNSResponder'.%></span></li>
|
||||
<li class="dns-list"> ◦ <span><%:For mobile devices, you can clear it by reconnecting to the network, such as toggling Airplane Mode and reconnecting to WiFi.%></span></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dns-item">3. <span><%:Please make sure your device's network settings point both the DNS server and default gateway to this router, to ensure DNS queries are properly routed.%></span></li>
|
||||
</ul>
|
||||
@@ -58,7 +58,7 @@ local api = map.api
|
||||
}
|
||||
|
||||
var dom = document.getElementById("faq_reset");
|
||||
if (dom) {
|
||||
if (dom) {
|
||||
var li = "";
|
||||
li += "<a href='#' class='reset-title' onclick='hide()'>" + "<%: Hide in main menu:%>"+ "</a>" + "<br />" + "<%: Browser access: %>" + "<a href='#' onclick='hide()'>" + hide_url + "</a>" + "<br />";
|
||||
li += "<a href='#' class='reset-title'>" + "<%: Show in main menu:%>"+ "</a>" + "<br />" +"<%: Browser access: %>" + "<a href='#'>" + show_url + "</a>" + "<br />";
|
||||
|
||||
@@ -43,7 +43,7 @@ table td, .table .td {
|
||||
z-index: 99;
|
||||
text-align: center;
|
||||
background: white;
|
||||
box-shadow: darkgrey 10px 10px 30px 5px;
|
||||
box-shadow: darkgrey 10px 10px 30px 5px;
|
||||
text-align: center;
|
||||
padding: 0.5em;
|
||||
}
|
||||
@@ -55,8 +55,8 @@ table td, .table .td {
|
||||
.ping a,
|
||||
.ping_value a,
|
||||
.tcping_value a {
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
|
||||
@@ -15,8 +15,8 @@ table th, .table .th {
|
||||
|
||||
table td, .table .td {
|
||||
text-align: center;
|
||||
/* white-space: nowrap; */
|
||||
word-break: keep-all;
|
||||
/* white-space: nowrap; */
|
||||
word-break: keep-all;
|
||||
}
|
||||
|
||||
.td.cbi-section-actions {
|
||||
|
||||
@@ -75,7 +75,7 @@ local api = map.api
|
||||
if (!value) {
|
||||
alert("<%:Please enter query content!%>");
|
||||
return;
|
||||
}
|
||||
}
|
||||
lookup_btn.disabled = true;
|
||||
extract_btn.disabled = true;
|
||||
btn.value = '<%:Querying%>';
|
||||
|
||||
@@ -9,7 +9,7 @@ EEOF
|
||||
}
|
||||
|
||||
if [ -e "/etc/config/ucitrack" ]; then
|
||||
uci -q batch <<-EOF
|
||||
uci -q batch <<-EOF
|
||||
delete ucitrack.@passwall[-1]
|
||||
add ucitrack passwall
|
||||
set ucitrack.@passwall[-1].init=passwall
|
||||
|
||||
@@ -9,7 +9,7 @@ EEOF
|
||||
}
|
||||
|
||||
if [ -e "/etc/config/ucitrack" ]; then
|
||||
uci -q batch <<-EOF
|
||||
uci -q batch <<-EOF
|
||||
delete ucitrack.@passwall_server[-1]
|
||||
add ucitrack passwall_server
|
||||
set ucitrack.@passwall_server[-1].init=passwall_server
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall2
|
||||
PKG_VERSION:=26.8.20
|
||||
PKG_RELEASE:=99
|
||||
PKG_RELEASE:=100
|
||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
||||
@@ -6,13 +6,13 @@ local geo_dir = (api.uci_get_c("@global_rules[0]", "v2ray_location_asset") or "/
|
||||
local geosite_path = geo_dir .. "/geosite.dat"
|
||||
local geoip_path = geo_dir .. "/geoip.dat"
|
||||
if fs.access(geosite_path) and fs.access(geoip_path) then
|
||||
f = SimpleForm(api.c_config)
|
||||
f.reset = false
|
||||
f.submit = false
|
||||
f = SimpleForm(api.c_config)
|
||||
f.reset = false
|
||||
f.submit = false
|
||||
|
||||
local obj = Template(api.appname .. "/rule/geoview")
|
||||
obj.api = api
|
||||
f:append(obj)
|
||||
local obj = Template(api.appname .. "/rule/geoview")
|
||||
obj.api = api
|
||||
f:append(obj)
|
||||
end
|
||||
|
||||
return f
|
||||
|
||||
@@ -25,25 +25,25 @@ o:value("https://wifi.vivo.com.cn/generate_204", "VIVO (CN)")
|
||||
o.default = o.keylist[3]
|
||||
|
||||
if true then
|
||||
m:appendTemplate("/node_list/node_list")
|
||||
m:appendTemplate("/node_list/node_list")
|
||||
|
||||
if luci.http.formvalue("cbi.submit") == "1" then
|
||||
local group_order = {}
|
||||
group_order = luci.http.formvaluetable("group.order")
|
||||
if group_order then
|
||||
for k, v in pairs(group_order) do
|
||||
if v and v~= "" then
|
||||
local new_order = {}
|
||||
string.gsub(v, "[^" .. " " .. "]+", function(w)
|
||||
new_order[#new_order + 1] = w
|
||||
end)
|
||||
for idx, name in ipairs(new_order) do
|
||||
m.uci:reorder(m.config, name, idx - 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if luci.http.formvalue("cbi.submit") == "1" then
|
||||
local group_order = {}
|
||||
group_order = luci.http.formvaluetable("group.order")
|
||||
if group_order then
|
||||
for k, v in pairs(group_order) do
|
||||
if v and v~= "" then
|
||||
local new_order = {}
|
||||
string.gsub(v, "[^" .. " " .. "]+", function(w)
|
||||
new_order[#new_order + 1] = w
|
||||
end)
|
||||
for idx, name in ipairs(new_order) do
|
||||
m.uci:reorder(m.config, name, idx - 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return api.return_map(m)
|
||||
|
||||
@@ -112,8 +112,8 @@ end
|
||||
o = s:option(DummyValue, "_update", translate("Manual subscription All"))
|
||||
o.rawhtml = true
|
||||
o.cfgvalue = function(self, section)
|
||||
return string.format([[
|
||||
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribeAll()" value="%s" />]],
|
||||
return string.format([[
|
||||
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribeAll()" value="%s" />]],
|
||||
translate("Manual subscription All"))
|
||||
end
|
||||
|
||||
@@ -210,8 +210,8 @@ end
|
||||
o = s:option(DummyValue, "_update", translate("Manual subscription"))
|
||||
o.rawhtml = true
|
||||
o.cfgvalue = function(self, section)
|
||||
return string.format([[
|
||||
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribe('%s')" value="%s" />]],
|
||||
return string.format([[
|
||||
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribe('%s')" value="%s" />]],
|
||||
section, translate("Manual subscription"))
|
||||
end
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,68 +1,68 @@
|
||||
if not api.is_finded("sslocal") then
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ Shadowsocks Rust ]]
|
||||
local m, s1 = ...
|
||||
local type_name = "SS-Rust"
|
||||
|
||||
s1.fields["type"]:value(type_name, "Shadowsocks Rust")
|
||||
|
||||
if s1.val["type"] ~= type_name then
|
||||
return
|
||||
end
|
||||
|
||||
local s = NamedSection(m, arg[1], "server")
|
||||
s.type_name = type_name
|
||||
s.option_prefix = "ssrust_"
|
||||
|
||||
local ssrust_encrypt_method_list = {
|
||||
"none", "plain",
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305",
|
||||
"2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha8-poly1305", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
||||
o = s:option(Value, "address", translate("Address (Support Domain Name)"))
|
||||
|
||||
o = s:option(Value, "port", translate("Port"))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(Value, "password", translate("Password"))
|
||||
o.password = true
|
||||
|
||||
o = s:option(Value, "method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssrust_encrypt_method_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "timeout", translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
|
||||
o = s:option(Flag, "tcp_fast_open", "TCP " .. translate("Fast Open"), translate("Need node support required"))
|
||||
o.default = 0
|
||||
|
||||
o = s:option(Flag, "plugin_enabled", translate("plugin"))
|
||||
o.default = 0
|
||||
|
||||
o = s:option(Value, "plugin", "SIP003 " .. translate("plugin"), translate("Supports custom SIP003 plugins, Make sure the plugin is installed."))
|
||||
o.default = "none"
|
||||
o:value("none", translate("none"))
|
||||
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
|
||||
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
|
||||
if api.is_finded("obfs-local") then o:value("obfs-local") end
|
||||
if api.is_finded("shadow-tls") then o:value("shadow-tls") end
|
||||
o:depends({ plugin_enabled = true })
|
||||
o.validate = function(self, value, t)
|
||||
if value and value ~= "" and value ~= "none" then
|
||||
if not api.is_finded(value) then
|
||||
return nil, value .. ": " .. translate("Can't find this file!")
|
||||
else
|
||||
return value
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
o = s:option(Value, "plugin_opts", translate("opts"))
|
||||
o:depends({ plugin_enabled = true })
|
||||
|
||||
if not api.is_finded("sslocal") then
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ Shadowsocks Rust ]]
|
||||
local m, s1 = ...
|
||||
local type_name = "SS-Rust"
|
||||
|
||||
s1.fields["type"]:value(type_name, "Shadowsocks Rust")
|
||||
|
||||
if s1.val["type"] ~= type_name then
|
||||
return
|
||||
end
|
||||
|
||||
local s = NamedSection(m, arg[1], "server")
|
||||
s.type_name = type_name
|
||||
s.option_prefix = "ssrust_"
|
||||
|
||||
local ssrust_encrypt_method_list = {
|
||||
"none", "plain",
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305",
|
||||
"2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha8-poly1305", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
||||
o = s:option(Value, "address", translate("Address (Support Domain Name)"))
|
||||
|
||||
o = s:option(Value, "port", translate("Port"))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(Value, "password", translate("Password"))
|
||||
o.password = true
|
||||
|
||||
o = s:option(Value, "method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssrust_encrypt_method_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "timeout", translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
|
||||
o = s:option(Flag, "tcp_fast_open", "TCP " .. translate("Fast Open"), translate("Need node support required"))
|
||||
o.default = 0
|
||||
|
||||
o = s:option(Flag, "plugin_enabled", translate("plugin"))
|
||||
o.default = 0
|
||||
|
||||
o = s:option(Value, "plugin", "SIP003 " .. translate("plugin"), translate("Supports custom SIP003 plugins, Make sure the plugin is installed."))
|
||||
o.default = "none"
|
||||
o:value("none", translate("none"))
|
||||
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
|
||||
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
|
||||
if api.is_finded("obfs-local") then o:value("obfs-local") end
|
||||
if api.is_finded("shadow-tls") then o:value("shadow-tls") end
|
||||
o:depends({ plugin_enabled = true })
|
||||
o.validate = function(self, value, t)
|
||||
if value and value ~= "" and value ~= "none" then
|
||||
if not api.is_finded(value) then
|
||||
return nil, value .. ": " .. translate("Can't find this file!")
|
||||
else
|
||||
return value
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
o = s:option(Value, "plugin_opts", translate("opts"))
|
||||
o:depends({ plugin_enabled = true })
|
||||
|
||||
api.luci_types(s1, s)
|
||||
@@ -1,66 +1,66 @@
|
||||
if not api.is_finded("ssr-local") then
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ ShadowsocksR Libev ]]
|
||||
local m, s1 = ...
|
||||
local type_name = "SSR"
|
||||
|
||||
s1.fields["type"]:value(type_name, "ShadowsocksR Libev")
|
||||
|
||||
if s1.val["type"] ~= type_name then
|
||||
return
|
||||
end
|
||||
|
||||
local s = NamedSection(m, arg[1], "server")
|
||||
s.type_name = type_name
|
||||
s.option_prefix = "ssr_"
|
||||
|
||||
local ssr_encrypt_method_list = {
|
||||
"none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb",
|
||||
"aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr",
|
||||
"bf-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb",
|
||||
"cast5-cfb", "des-cfb", "idea-cfb", "seed-cfb", "salsa20", "chacha20",
|
||||
"chacha20-ietf"
|
||||
}
|
||||
|
||||
local ssr_protocol_list = {
|
||||
"origin", "verify_simple", "verify_deflate", "verify_sha1", "auth_simple",
|
||||
"auth_sha1", "auth_sha1_v2", "auth_sha1_v4", "auth_aes128_md5",
|
||||
"auth_aes128_sha1", "auth_chain_a", "auth_chain_b", "auth_chain_c",
|
||||
"auth_chain_d", "auth_chain_e", "auth_chain_f"
|
||||
}
|
||||
local ssr_obfs_list = {
|
||||
"plain", "http_simple", "http_post", "random_head", "tls_simple",
|
||||
"tls1.0_session_auth", "tls1.2_ticket_auth"
|
||||
}
|
||||
|
||||
o = s:option(Value, "address", translate("Address (Support Domain Name)"))
|
||||
|
||||
o = s:option(Value, "port", translate("Port"))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(Value, "password", translate("Password"))
|
||||
o.password = true
|
||||
|
||||
o = s:option(ListValue, "method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssr_encrypt_method_list) do o:value(t) end
|
||||
|
||||
o = s:option(ListValue, "protocol", translate("Protocol"))
|
||||
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "protocol_param", translate("Protocol_param"))
|
||||
|
||||
o = s:option(ListValue, "obfs", translate("Obfs"))
|
||||
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "obfs_param", translate("Obfs_param"))
|
||||
|
||||
o = s:option(Value, "timeout", translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
|
||||
o = s:option(Flag, "tcp_fast_open", "TCP " .. translate("Fast Open"), translate("Need node support required"))
|
||||
o.default = 0
|
||||
|
||||
if not api.is_finded("ssr-local") then
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ ShadowsocksR Libev ]]
|
||||
local m, s1 = ...
|
||||
local type_name = "SSR"
|
||||
|
||||
s1.fields["type"]:value(type_name, "ShadowsocksR Libev")
|
||||
|
||||
if s1.val["type"] ~= type_name then
|
||||
return
|
||||
end
|
||||
|
||||
local s = NamedSection(m, arg[1], "server")
|
||||
s.type_name = type_name
|
||||
s.option_prefix = "ssr_"
|
||||
|
||||
local ssr_encrypt_method_list = {
|
||||
"none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb",
|
||||
"aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr",
|
||||
"bf-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb",
|
||||
"cast5-cfb", "des-cfb", "idea-cfb", "seed-cfb", "salsa20", "chacha20",
|
||||
"chacha20-ietf"
|
||||
}
|
||||
|
||||
local ssr_protocol_list = {
|
||||
"origin", "verify_simple", "verify_deflate", "verify_sha1", "auth_simple",
|
||||
"auth_sha1", "auth_sha1_v2", "auth_sha1_v4", "auth_aes128_md5",
|
||||
"auth_aes128_sha1", "auth_chain_a", "auth_chain_b", "auth_chain_c",
|
||||
"auth_chain_d", "auth_chain_e", "auth_chain_f"
|
||||
}
|
||||
local ssr_obfs_list = {
|
||||
"plain", "http_simple", "http_post", "random_head", "tls_simple",
|
||||
"tls1.0_session_auth", "tls1.2_ticket_auth"
|
||||
}
|
||||
|
||||
o = s:option(Value, "address", translate("Address (Support Domain Name)"))
|
||||
|
||||
o = s:option(Value, "port", translate("Port"))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(Value, "password", translate("Password"))
|
||||
o.password = true
|
||||
|
||||
o = s:option(ListValue, "method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssr_encrypt_method_list) do o:value(t) end
|
||||
|
||||
o = s:option(ListValue, "protocol", translate("Protocol"))
|
||||
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "protocol_param", translate("Protocol_param"))
|
||||
|
||||
o = s:option(ListValue, "obfs", translate("Obfs"))
|
||||
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "obfs_param", translate("Obfs_param"))
|
||||
|
||||
o = s:option(Value, "timeout", translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
|
||||
o = s:option(Flag, "tcp_fast_open", "TCP " .. translate("Fast Open"), translate("Need node support required"))
|
||||
o.default = 0
|
||||
|
||||
api.luci_types(s1, s)
|
||||
@@ -39,7 +39,7 @@ for filename in api.fs.dir(types_dir) do
|
||||
table.insert(type_table, filename)
|
||||
end
|
||||
table.sort(type_table, function(a, b)
|
||||
return a < b
|
||||
return a < b
|
||||
end)
|
||||
|
||||
for index, value in ipairs(type_table) do
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,90 +1,90 @@
|
||||
if not api.is_finded("ssserver") then
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ Shadowsocks Rust ]]
|
||||
local m, s1 = ...
|
||||
local type_name = "SS-Rust"
|
||||
|
||||
s1.fields["type"]:value(type_name, translate("Shadowsocks Rust"))
|
||||
|
||||
if not s1.val["type"] then
|
||||
s1.val["type"] = type_name
|
||||
end
|
||||
|
||||
if s1.val["type"] and s1.val["type"] ~= type_name then
|
||||
return
|
||||
end
|
||||
|
||||
local s = NamedSection(m, arg[1], "server")
|
||||
s.type_name = type_name
|
||||
s.option_prefix = "ssrust_"
|
||||
|
||||
local ssrust_encrypt_method_list = {
|
||||
"plain", "none",
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305",
|
||||
"2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha8-poly1305", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
||||
o = s:option(Flag, "custom", translate("Use Custom Config"))
|
||||
|
||||
o = s:option(TextValue, "custom_config", translate("Custom Config") .. " (JSON)")
|
||||
o.rows = 10
|
||||
o.wrap = "off"
|
||||
o:depends({ custom = true })
|
||||
o.datatype = "json"
|
||||
local o_validate = o.validate
|
||||
o.validate = function(self, value)
|
||||
local v = o_validate(self, value)
|
||||
if v then return v end
|
||||
return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
|
||||
end
|
||||
o.custom_cfgvalue = function(self, section, value)
|
||||
local config_str = m:get(section, "config_str")
|
||||
if config_str then
|
||||
return api.base64Decode(config_str)
|
||||
end
|
||||
end
|
||||
o.custom_write = function(self, section, value)
|
||||
m:set(section, "config_str", api.base64Encode(value) or "")
|
||||
end
|
||||
|
||||
o = s:option(Value, "port", translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "user", translate("User"))
|
||||
for i, v in ipairs(user_list) do
|
||||
o:value(v[".name"], v.username)
|
||||
end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssrust_encrypt_method_list) do o:value(t) end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "timeout", translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Flag, "tcp_fast_open", "TCP " .. translate("Fast Open"))
|
||||
o.default = "0"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Flag, "firewall_allow", translate("Firewall Allow"))
|
||||
o.default = "0"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "firewall_allow_src", translate("Source zone"))
|
||||
o.nocreate = true
|
||||
o.allowany = true
|
||||
o.default = "wan"
|
||||
o.template = "cbi/firewall_zonelist"
|
||||
o:depends({ custom = false, firewall_allow = true })
|
||||
|
||||
o = s:option(Flag, "log", translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
if not api.is_finded("ssserver") then
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ Shadowsocks Rust ]]
|
||||
local m, s1 = ...
|
||||
local type_name = "SS-Rust"
|
||||
|
||||
s1.fields["type"]:value(type_name, translate("Shadowsocks Rust"))
|
||||
|
||||
if not s1.val["type"] then
|
||||
s1.val["type"] = type_name
|
||||
end
|
||||
|
||||
if s1.val["type"] and s1.val["type"] ~= type_name then
|
||||
return
|
||||
end
|
||||
|
||||
local s = NamedSection(m, arg[1], "server")
|
||||
s.type_name = type_name
|
||||
s.option_prefix = "ssrust_"
|
||||
|
||||
local ssrust_encrypt_method_list = {
|
||||
"plain", "none",
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-ietf-poly1305",
|
||||
"2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha8-poly1305", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
||||
o = s:option(Flag, "custom", translate("Use Custom Config"))
|
||||
|
||||
o = s:option(TextValue, "custom_config", translate("Custom Config") .. " (JSON)")
|
||||
o.rows = 10
|
||||
o.wrap = "off"
|
||||
o:depends({ custom = true })
|
||||
o.datatype = "json"
|
||||
local o_validate = o.validate
|
||||
o.validate = function(self, value)
|
||||
local v = o_validate(self, value)
|
||||
if v then return v end
|
||||
return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
|
||||
end
|
||||
o.custom_cfgvalue = function(self, section, value)
|
||||
local config_str = m:get(section, "config_str")
|
||||
if config_str then
|
||||
return api.base64Decode(config_str)
|
||||
end
|
||||
end
|
||||
o.custom_write = function(self, section, value)
|
||||
m:set(section, "config_str", api.base64Encode(value) or "")
|
||||
end
|
||||
|
||||
o = s:option(Value, "port", translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "user", translate("User"))
|
||||
for i, v in ipairs(user_list) do
|
||||
o:value(v[".name"], v.username)
|
||||
end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssrust_encrypt_method_list) do o:value(t) end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "timeout", translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Flag, "tcp_fast_open", "TCP " .. translate("Fast Open"))
|
||||
o.default = "0"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Flag, "firewall_allow", translate("Firewall Allow"))
|
||||
o.default = "0"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "firewall_allow_src", translate("Source zone"))
|
||||
o.nocreate = true
|
||||
o.allowany = true
|
||||
o.default = "wan"
|
||||
o.template = "cbi/firewall_zonelist"
|
||||
o:depends({ custom = false, firewall_allow = true })
|
||||
|
||||
o = s:option(Flag, "log", translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
api.luci_types(s1, s)
|
||||
@@ -1,121 +1,121 @@
|
||||
if not api.is_finded("ssr-server") then
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ ShadowsocksR ]]
|
||||
local m, s1 = ...
|
||||
local type_name = "SSR"
|
||||
|
||||
s1.fields["type"]:value(type_name, translate("ShadowsocksR"))
|
||||
|
||||
if not s1.val["type"] then
|
||||
s1.val["type"] = type_name
|
||||
end
|
||||
|
||||
if s1.val["type"] and s1.val["type"] ~= type_name then
|
||||
return
|
||||
end
|
||||
|
||||
local s = NamedSection(m, arg[1], "server")
|
||||
s.type_name = type_name
|
||||
s.option_prefix = "ssr_"
|
||||
|
||||
local ssr_encrypt_method_list = {
|
||||
"none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb",
|
||||
"aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr",
|
||||
"bf-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb",
|
||||
"cast5-cfb", "des-cfb", "idea-cfb", "seed-cfb", "salsa20", "chacha20",
|
||||
"chacha20-ietf"
|
||||
}
|
||||
|
||||
local ssr_protocol_list = {
|
||||
"origin", "verify_simple", "verify_deflate", "verify_sha1", "auth_simple",
|
||||
"auth_sha1", "auth_sha1_v2", "auth_sha1_v4", "auth_aes128_md5",
|
||||
"auth_aes128_sha1", "auth_chain_a", "auth_chain_b", "auth_chain_c",
|
||||
"auth_chain_d", "auth_chain_e", "auth_chain_f"
|
||||
}
|
||||
local ssr_obfs_list = {
|
||||
"plain", "http_simple", "http_post", "random_head", "tls_simple",
|
||||
"tls1.0_session_auth", "tls1.2_ticket_auth"
|
||||
}
|
||||
|
||||
o = s:option(Flag, "custom", translate("Use Custom Config"))
|
||||
|
||||
o = s:option(TextValue, "custom_config", translate("Custom Config") .. " (JSON)")
|
||||
o.rows = 10
|
||||
o.wrap = "off"
|
||||
o:depends({ custom = true })
|
||||
o.datatype = "json"
|
||||
local o_validate = o.validate
|
||||
o.validate = function(self, value)
|
||||
local v = o_validate(self, value)
|
||||
if v then return v end
|
||||
return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
|
||||
end
|
||||
o.custom_cfgvalue = function(self, section, value)
|
||||
local config_str = m:get(section, "config_str")
|
||||
if config_str then
|
||||
return api.base64Decode(config_str)
|
||||
end
|
||||
end
|
||||
o.custom_write = function(self, section, value)
|
||||
m:set(section, "config_str", api.base64Encode(value) or "")
|
||||
end
|
||||
|
||||
o = s:option(Value, "port", translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "user", translate("User"))
|
||||
for i, v in ipairs(user_list) do
|
||||
o:value(v[".name"], v.username)
|
||||
end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssr_encrypt_method_list) do o:value(t) end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "protocol", translate("Protocol"))
|
||||
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "protocol_param", translate("Protocol_param"))
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "obfs", translate("Obfs"))
|
||||
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "obfs_param", translate("Obfs_param"))
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "timeout", translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Flag, "tcp_fast_open", "TCP " .. translate("Fast Open"))
|
||||
o.default = "0"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Flag, "udp_forward", translate("UDP Forward"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "firewall_allow", translate("Firewall Allow"))
|
||||
o.default = "0"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "firewall_allow_src", translate("Source zone"))
|
||||
o.nocreate = true
|
||||
o.allowany = true
|
||||
o.default = "wan"
|
||||
o.template = "cbi/firewall_zonelist"
|
||||
o:depends({ custom = false, firewall_allow = true })
|
||||
|
||||
o = s:option(Flag, "log", translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
if not api.is_finded("ssr-server") then
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ ShadowsocksR ]]
|
||||
local m, s1 = ...
|
||||
local type_name = "SSR"
|
||||
|
||||
s1.fields["type"]:value(type_name, translate("ShadowsocksR"))
|
||||
|
||||
if not s1.val["type"] then
|
||||
s1.val["type"] = type_name
|
||||
end
|
||||
|
||||
if s1.val["type"] and s1.val["type"] ~= type_name then
|
||||
return
|
||||
end
|
||||
|
||||
local s = NamedSection(m, arg[1], "server")
|
||||
s.type_name = type_name
|
||||
s.option_prefix = "ssr_"
|
||||
|
||||
local ssr_encrypt_method_list = {
|
||||
"none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb",
|
||||
"aes-192-cfb", "aes-256-cfb", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr",
|
||||
"bf-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb",
|
||||
"cast5-cfb", "des-cfb", "idea-cfb", "seed-cfb", "salsa20", "chacha20",
|
||||
"chacha20-ietf"
|
||||
}
|
||||
|
||||
local ssr_protocol_list = {
|
||||
"origin", "verify_simple", "verify_deflate", "verify_sha1", "auth_simple",
|
||||
"auth_sha1", "auth_sha1_v2", "auth_sha1_v4", "auth_aes128_md5",
|
||||
"auth_aes128_sha1", "auth_chain_a", "auth_chain_b", "auth_chain_c",
|
||||
"auth_chain_d", "auth_chain_e", "auth_chain_f"
|
||||
}
|
||||
local ssr_obfs_list = {
|
||||
"plain", "http_simple", "http_post", "random_head", "tls_simple",
|
||||
"tls1.0_session_auth", "tls1.2_ticket_auth"
|
||||
}
|
||||
|
||||
o = s:option(Flag, "custom", translate("Use Custom Config"))
|
||||
|
||||
o = s:option(TextValue, "custom_config", translate("Custom Config") .. " (JSON)")
|
||||
o.rows = 10
|
||||
o.wrap = "off"
|
||||
o:depends({ custom = true })
|
||||
o.datatype = "json"
|
||||
local o_validate = o.validate
|
||||
o.validate = function(self, value)
|
||||
local v = o_validate(self, value)
|
||||
if v then return v end
|
||||
return nil, translate("Custom Config") .. " " .. translate("Must be JSON text!")
|
||||
end
|
||||
o.custom_cfgvalue = function(self, section, value)
|
||||
local config_str = m:get(section, "config_str")
|
||||
if config_str then
|
||||
return api.base64Decode(config_str)
|
||||
end
|
||||
end
|
||||
o.custom_write = function(self, section, value)
|
||||
m:set(section, "config_str", api.base64Encode(value) or "")
|
||||
end
|
||||
|
||||
o = s:option(Value, "port", translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "user", translate("User"))
|
||||
for i, v in ipairs(user_list) do
|
||||
o:value(v[".name"], v.username)
|
||||
end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssr_encrypt_method_list) do o:value(t) end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "protocol", translate("Protocol"))
|
||||
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "protocol_param", translate("Protocol_param"))
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(ListValue, "obfs", translate("Obfs"))
|
||||
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "obfs_param", translate("Obfs_param"))
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "timeout", translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Flag, "tcp_fast_open", "TCP " .. translate("Fast Open"))
|
||||
o.default = "0"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Flag, "udp_forward", translate("UDP Forward"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "firewall_allow", translate("Firewall Allow"))
|
||||
o.default = "0"
|
||||
o:depends({ custom = false })
|
||||
|
||||
o = s:option(Value, "firewall_allow_src", translate("Source zone"))
|
||||
o.nocreate = true
|
||||
o.allowany = true
|
||||
o.default = "wan"
|
||||
o.template = "cbi/firewall_zonelist"
|
||||
o:depends({ custom = false, firewall_allow = true })
|
||||
|
||||
o = s:option(Flag, "log", translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
api.luci_types(s1, s)
|
||||
@@ -464,14 +464,14 @@ datatypes.json = is_json
|
||||
|
||||
function is_timehhmm(str)
|
||||
local hour, minute = string.match(str, "^(%d?%d):(%d%d)$")
|
||||
if hour and minute then
|
||||
hour = tonumber(hour)
|
||||
minute = tonumber(minute)
|
||||
if hour >= 0 and hour <= 23 and minute >= 0 and minute <= 59 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
if hour and minute then
|
||||
hour = tonumber(hour)
|
||||
minute = tonumber(minute)
|
||||
if hour >= 0 and hour <= 23 and minute >= 0 and minute <= 59 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
datatypes.timehhmm = is_timehhmm
|
||||
|
||||
|
||||
@@ -922,12 +922,12 @@ function gen_config(var)
|
||||
if xray_settings.fragment == "1" then
|
||||
local lengths, delays = {}, {}
|
||||
api.trim(xray_settings.fragment_lengths):gsub("[^,]+", function(w)
|
||||
w = w:gsub("%s+", "")
|
||||
if w ~= "" then lengths[#lengths+1] = w end
|
||||
w = w:gsub("%s+", "")
|
||||
if w ~= "" then lengths[#lengths+1] = w end
|
||||
end)
|
||||
api.trim(xray_settings.fragment_delays):gsub("[^,]+", function(w)
|
||||
w = w:gsub("%s+", "")
|
||||
if w ~= "" then delays[#delays+1] = w end
|
||||
w = w:gsub("%s+", "")
|
||||
if w ~= "" then delays[#delays+1] = w end
|
||||
end)
|
||||
fragment_table = {
|
||||
type = "fragment",
|
||||
|
||||
@@ -534,7 +534,7 @@
|
||||
//自定义框
|
||||
function v_customEnter(cbid, labelSpan, hiddenInput, searchInput, panel, listContainer, customInput) {
|
||||
let inputValue = customInput.value.trim();
|
||||
if (!inputValue) {
|
||||
if (!inputValue) {
|
||||
return;
|
||||
}
|
||||
const existingItems = listContainer.querySelectorAll('li[data-key="' + inputValue + '"]');
|
||||
|
||||
@@ -3,28 +3,28 @@ local map = self.map
|
||||
local api = map.api
|
||||
-%>
|
||||
<style>
|
||||
.dns-con {
|
||||
padding: 1rem;
|
||||
}
|
||||
.faq-title {
|
||||
color: var(--primary);
|
||||
font-weight: bolder;
|
||||
margin-bottom: 0.5rem;
|
||||
display: inline-block;
|
||||
}
|
||||
.reset-title {
|
||||
color: var(--primary);
|
||||
font-weight: bolder;
|
||||
margin-bottom: 0.3rem;
|
||||
display: inline-block;
|
||||
margin-top: 1.2rem;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.dns-item {
|
||||
margin-bottom: 0.8rem;
|
||||
line-height:1.2rem;
|
||||
}
|
||||
.dns-list {
|
||||
.dns-con {
|
||||
padding: 1rem;
|
||||
}
|
||||
.faq-title {
|
||||
color: var(--primary);
|
||||
font-weight: bolder;
|
||||
margin-bottom: 0.5rem;
|
||||
display: inline-block;
|
||||
}
|
||||
.reset-title {
|
||||
color: var(--primary);
|
||||
font-weight: bolder;
|
||||
margin-bottom: 0.3rem;
|
||||
display: inline-block;
|
||||
margin-top: 1.2rem;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.dns-item {
|
||||
margin-bottom: 0.8rem;
|
||||
line-height:1.2rem;
|
||||
}
|
||||
.dns-list {
|
||||
text-indent:1rem;
|
||||
line-height: 1.2rem;
|
||||
}
|
||||
@@ -32,13 +32,13 @@ local api = map.api
|
||||
<div class="dns-con">
|
||||
<div id="faq_dns">
|
||||
<ul>
|
||||
<b class="faq-title"><%:DNS related issues:%></b>
|
||||
<b class="faq-title"><%:DNS related issues:%></b>
|
||||
<li class="dns-item">1. <span><%:Certain browsers such as Chrome have built-in DNS service, which may affect DNS resolution settings. You can go to 'Settings -> Privacy and security -> Use secure DNS' menu to turn it off.%></span></li>
|
||||
<li class="dns-item">2. <span><%:If you are unable to access the internet after reboot, please try clearing the cache of your terminal devices (make sure to close all open browser application windows first, this step is especially important):%></span>
|
||||
<ul><li class="dns-list"> ◦ <span><%:For Windows systems, open Command Prompt and run the command 'ipconfig /flushdns'.%></span></li>
|
||||
<li class="dns-list"> ◦ <span><%:For Mac systems, open Terminal and run the command 'sudo killall -HUP mDNSResponder'.%></span></li>
|
||||
<li class="dns-list"> ◦ <span><%:For mobile devices, you can clear it by reconnecting to the network, such as toggling Airplane Mode and reconnecting to WiFi.%></span></li>
|
||||
</ul>
|
||||
<ul><li class="dns-list"> ◦ <span><%:For Windows systems, open Command Prompt and run the command 'ipconfig /flushdns'.%></span></li>
|
||||
<li class="dns-list"> ◦ <span><%:For Mac systems, open Terminal and run the command 'sudo killall -HUP mDNSResponder'.%></span></li>
|
||||
<li class="dns-list"> ◦ <span><%:For mobile devices, you can clear it by reconnecting to the network, such as toggling Airplane Mode and reconnecting to WiFi.%></span></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dns-item">3. <span><%:Please make sure your device's network settings point both the DNS server and default gateway to this router, to ensure DNS queries are properly routed.%></span></li>
|
||||
</ul>
|
||||
@@ -58,7 +58,7 @@ local api = map.api
|
||||
}
|
||||
|
||||
var dom = document.getElementById("faq_reset");
|
||||
if (dom) {
|
||||
if (dom) {
|
||||
var li = "";
|
||||
li += "<a href='#' class='reset-title' onclick='hide()'>" + "<%: Hide in main menu:%>"+ "</a>" + "<br />" + "<%: Browser access: %>" + "<a href='#' onclick='hide()'>" + hide_url + "</a>" + "<br />";
|
||||
li += "<a href='#' class='reset-title'>" + "<%: Show in main menu:%>"+ "</a>" + "<br />" +"<%: Browser access: %>" + "<a href='#'>" + show_url + "</a>" + "<br />";
|
||||
|
||||
@@ -29,8 +29,8 @@ table th, .table .th {
|
||||
|
||||
table td, .table .td {
|
||||
text-align: center;
|
||||
/* white-space: nowrap; */
|
||||
word-break: keep-all;
|
||||
/* white-space: nowrap; */
|
||||
word-break: keep-all;
|
||||
}
|
||||
|
||||
#set_node_div {
|
||||
@@ -41,7 +41,7 @@ table td, .table .td {
|
||||
z-index: 99;
|
||||
text-align: center;
|
||||
background: white;
|
||||
box-shadow: darkgrey 10px 10px 30px 5px;
|
||||
box-shadow: darkgrey 10px 10px 30px 5px;
|
||||
text-align: center;
|
||||
padding: 0.5em;
|
||||
}
|
||||
@@ -53,8 +53,8 @@ table td, .table .td {
|
||||
.ping a,
|
||||
.ping_value a,
|
||||
.tcping_value a {
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
|
||||
@@ -74,7 +74,7 @@ local api = self.api
|
||||
if (!value) {
|
||||
alert("<%:Please enter query content!%>");
|
||||
return;
|
||||
}
|
||||
}
|
||||
lookup_btn.disabled = true;
|
||||
extract_btn.disabled = true;
|
||||
btn.value = '<%:Querying%>';
|
||||
|
||||
@@ -11,8 +11,8 @@ table th, .table .th {
|
||||
|
||||
table td, .table .td {
|
||||
text-align: center;
|
||||
/* white-space: nowrap; */
|
||||
word-break: keep-all;
|
||||
/* white-space: nowrap; */
|
||||
word-break: keep-all;
|
||||
}
|
||||
|
||||
.td.cbi-section-actions {
|
||||
|
||||
@@ -9,7 +9,7 @@ EEOF
|
||||
}
|
||||
|
||||
if [ -e "/etc/config/ucitrack" ]; then
|
||||
uci -q batch <<-EOF
|
||||
uci -q batch <<-EOF
|
||||
delete ucitrack.@passwall2[-1]
|
||||
add ucitrack passwall2
|
||||
set ucitrack.@passwall2[-1].init=passwall2
|
||||
|
||||
@@ -9,7 +9,7 @@ EEOF
|
||||
}
|
||||
|
||||
if [ -e "/etc/config/ucitrack" ]; then
|
||||
uci -q batch <<-EOF
|
||||
uci -q batch <<-EOF
|
||||
delete ucitrack.@passwall2_server[-1]
|
||||
add ucitrack passwall2_server
|
||||
set ucitrack.@passwall2_server[-1].init=passwall2_server
|
||||
|
||||
@@ -1,371 +1,371 @@
|
||||
local api = require "luci.passwall2.api"
|
||||
local c_config = api.c_config
|
||||
local sys = api.sys
|
||||
local jsonc = api.jsonc
|
||||
local fs = api.fs
|
||||
local datatypes = api.datatypes
|
||||
local TMP = {}
|
||||
|
||||
local function tinsert(table_name, val)
|
||||
if table_name and type(table_name) == "table" then
|
||||
if not TMP[table_name] then
|
||||
TMP[table_name] = {}
|
||||
end
|
||||
if TMP[table_name][val] then
|
||||
return false
|
||||
end
|
||||
table.insert(table_name, val)
|
||||
TMP[table_name][val] = true
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function backup_servers()
|
||||
local DNSMASQ_DNS = api.uci_get("dhcp", "@dnsmasq[0]", "server")
|
||||
if DNSMASQ_DNS and #DNSMASQ_DNS > 0 then
|
||||
api.uci_set_c("@global[0]", "dnsmasq_servers", DNSMASQ_DNS)
|
||||
api.uci_save_c(true)
|
||||
end
|
||||
end
|
||||
|
||||
local function restore_servers()
|
||||
local dns_table = {}
|
||||
local DNSMASQ_DNS = api.uci_get("dhcp", "@dnsmasq[0]", "server")
|
||||
if DNSMASQ_DNS and #DNSMASQ_DNS > 0 then
|
||||
for k, v in ipairs(DNSMASQ_DNS) do
|
||||
tinsert(dns_table, v)
|
||||
end
|
||||
end
|
||||
local OLD_SERVER = api.uci_get_c("@global[0]", "dnsmasq_servers")
|
||||
if OLD_SERVER and #OLD_SERVER > 0 then
|
||||
for k, v in ipairs(OLD_SERVER) do
|
||||
tinsert(dns_table, v)
|
||||
end
|
||||
api.uci_del_c("@global[0]", "dnsmasq_servers")
|
||||
api.uci_save_c(true)
|
||||
end
|
||||
if dns_table and #dns_table > 0 then
|
||||
api.uci_set("dhcp", "@dnsmasq[0]", "server", dns_table)
|
||||
api.uci_save(nil, "dhcp", true)
|
||||
end
|
||||
end
|
||||
|
||||
function stretch()
|
||||
local dnsmasq_server = api.uci_get("dhcp", "@dnsmasq[0]", "server")
|
||||
local dnsmasq_noresolv = api.uci_get("dhcp", "@dnsmasq[0]", "noresolv")
|
||||
local _flag
|
||||
if dnsmasq_server and #dnsmasq_server > 0 then
|
||||
for k, v in ipairs(dnsmasq_server) do
|
||||
if not v:find("/") then
|
||||
_flag = true
|
||||
end
|
||||
end
|
||||
end
|
||||
if not _flag and dnsmasq_noresolv == "1" then
|
||||
api.uci_del("dhcp", "@dnsmasq[0]", "noresolv")
|
||||
local RESOLVFILE = "/tmp/resolv.conf.d/resolv.conf.auto"
|
||||
local file = io.open(RESOLVFILE, "r")
|
||||
if not file then
|
||||
RESOLVFILE = "/tmp/resolv.conf.auto"
|
||||
else
|
||||
local size = file:seek("end")
|
||||
file:close()
|
||||
if size == 0 then
|
||||
RESOLVFILE = "/tmp/resolv.conf.auto"
|
||||
end
|
||||
end
|
||||
api.uci_set("dhcp", "@dnsmasq[0]", "resolvfile", RESOLVFILE)
|
||||
api.uci_save(nil, "dhcp", true)
|
||||
end
|
||||
end
|
||||
|
||||
function restart(var)
|
||||
local LOG = var["LOG"]
|
||||
sys.call("/etc/init.d/dnsmasq restart >/dev/null 2>&1")
|
||||
if LOG == "1" then
|
||||
api.log(0, api.i18n.translate("Restart dnsmasq service."))
|
||||
end
|
||||
end
|
||||
|
||||
function logic_restart(var)
|
||||
local LOG = var["LOG"]
|
||||
local DEFAULT_DNS = api.get_cache_var("DEFAULT_DNS")
|
||||
if DEFAULT_DNS then
|
||||
backup_servers()
|
||||
--sys.call("sed -i '/list server/d' /etc/config/dhcp >/dev/null 2>&1")
|
||||
local dns_table = {}
|
||||
local dnsmasq_server = api.uci_get("dhcp", "@dnsmasq[0]", "server")
|
||||
if dnsmasq_server and #dnsmasq_server > 0 then
|
||||
for k, v in ipairs(dnsmasq_server) do
|
||||
if v:find("/") then
|
||||
tinsert(dns_table, v)
|
||||
end
|
||||
end
|
||||
api.uci_set("dhcp", "@dnsmasq[0]", "server", dns_table)
|
||||
api.uci_save(nil, "dhcp", true)
|
||||
end
|
||||
sys.call("/etc/init.d/dnsmasq restart >/dev/null 2>&1")
|
||||
restore_servers()
|
||||
else
|
||||
sys.call("/etc/init.d/dnsmasq restart >/dev/null 2>&1")
|
||||
end
|
||||
if LOG == "1" then
|
||||
api.log(0, api.i18n.translate("Restart dnsmasq service."))
|
||||
end
|
||||
end
|
||||
|
||||
function copy_instance(var)
|
||||
local LISTEN_PORT = var["LISTEN_PORT"]
|
||||
local TMP_DNSMASQ_PATH = var["TMP_DNSMASQ_PATH"]
|
||||
local conf_lines = {}
|
||||
local DEFAULT_DNSMASQ_CFGID = sys.exec("echo -n $(uci -q show dhcp.@dnsmasq[0] | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')")
|
||||
for line in io.lines("/tmp/etc/dnsmasq.conf." .. DEFAULT_DNSMASQ_CFGID) do
|
||||
local filter
|
||||
if line:find("passwall2") then filter = true end
|
||||
if line:find("ubus") then filter = true end
|
||||
if line:find("dhcp") then filter = true end
|
||||
if line:find("server=") == 1 then filter = true end
|
||||
if line:find("port=") == 1 then filter = true end
|
||||
if line:find("conf%-dir=") == 1 then
|
||||
filter = true
|
||||
if TMP_DNSMASQ_PATH then
|
||||
local tmp_path = line:sub(1 + #"conf-dir=")
|
||||
sys.call(string.format("cp -r %s/* %s/ 2>/dev/null", tmp_path, TMP_DNSMASQ_PATH))
|
||||
end
|
||||
end
|
||||
if line:find("address=") == 1 or (line:find("server=") == 1 and line:find("/")) then filter = nil end
|
||||
if not filter then
|
||||
tinsert(conf_lines, line)
|
||||
end
|
||||
end
|
||||
tinsert(conf_lines, "port=" .. LISTEN_PORT)
|
||||
if TMP_DNSMASQ_PATH then
|
||||
sys.call("rm -rf " .. TMP_DNSMASQ_PATH .. "/*passwall2*")
|
||||
end
|
||||
if var["return"] == "1" then
|
||||
return conf_lines
|
||||
end
|
||||
if #conf_lines > 0 then
|
||||
local DNSMASQ_CONF = var["DNSMASQ_CONF"]
|
||||
local conf_out = io.open(DNSMASQ_CONF, "a")
|
||||
conf_out:write(table.concat(conf_lines, "\n"))
|
||||
conf_out:write("\n")
|
||||
conf_out:close()
|
||||
end
|
||||
end
|
||||
|
||||
function add_rule(var)
|
||||
local FLAG = var["FLAG"]
|
||||
local TMP_DNSMASQ_PATH = var["TMP_DNSMASQ_PATH"]
|
||||
local DNSMASQ_CONF_FILE = var["DNSMASQ_CONF_FILE"]
|
||||
local LISTEN_PORT = var["LISTEN_PORT"]
|
||||
local DEFAULT_DNS = var["DEFAULT_DNS"]
|
||||
local LOCAL_DNS = var["LOCAL_DNS"]
|
||||
local TUN_DNS = var["TUN_DNS"]
|
||||
local NFTFLAG = var["NFTFLAG"]
|
||||
local CACHE_PATH = api.CACHE_PATH
|
||||
local CACHE_FLAG = "dnsmasq_" .. FLAG
|
||||
local CACHE_DNS_PATH = CACHE_PATH .. "/" .. CACHE_FLAG
|
||||
local CACHE_TEXT_FILE = CACHE_DNS_PATH .. ".txt"
|
||||
|
||||
local list1 = {}
|
||||
|
||||
local function check_dns(domain, dns)
|
||||
if domain == "" or domain:find("#") then
|
||||
return false
|
||||
end
|
||||
if not dns then
|
||||
return
|
||||
end
|
||||
for k,v in ipairs(list1[domain].dns) do
|
||||
if dns == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function check_ipset(domain, ipset)
|
||||
if domain == "" or domain:find("#") then
|
||||
return false
|
||||
end
|
||||
if not ipset then
|
||||
return
|
||||
end
|
||||
for k,v in ipairs(list1[domain].ipsets) do
|
||||
if ipset == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function set_domain_dns(domain, dns)
|
||||
if domain == "" or domain:find("#") then
|
||||
return
|
||||
end
|
||||
if not dns then
|
||||
return
|
||||
end
|
||||
if not list1[domain] then
|
||||
list1[domain] = {
|
||||
dns = {},
|
||||
ipsets = {}
|
||||
}
|
||||
end
|
||||
for line in string.gmatch(dns, '[^' .. "," .. ']+') do
|
||||
if not check_dns(domain, line) then
|
||||
table.insert(list1[domain].dns, line)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function set_domain_ipset(domain, ipset)
|
||||
if domain == "" or domain:find("#") then
|
||||
return
|
||||
end
|
||||
if not ipset then
|
||||
return
|
||||
end
|
||||
if not list1[domain] then
|
||||
list1[domain] = {
|
||||
dns = {},
|
||||
ipsets = {}
|
||||
}
|
||||
end
|
||||
for line in string.gmatch(ipset, '[^' .. "," .. ']+') do
|
||||
if not check_ipset(domain, line) then
|
||||
table.insert(list1[domain].ipsets, line)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local cache_text = ""
|
||||
local nodes_address_md5 = sys.exec("echo -n $(uci show %s | grep '\\.address') | md5sum" % c_config)
|
||||
local new_text = TMP_DNSMASQ_PATH .. DNSMASQ_CONF_FILE .. DEFAULT_DNS .. LOCAL_DNS .. TUN_DNS .. nodes_address_md5 .. NFTFLAG
|
||||
if fs.access(CACHE_TEXT_FILE) then
|
||||
for line in io.lines(CACHE_TEXT_FILE) do
|
||||
cache_text = line
|
||||
end
|
||||
end
|
||||
|
||||
if cache_text ~= new_text then
|
||||
api.remove(CACHE_DNS_PATH .. "*")
|
||||
end
|
||||
|
||||
local dnsmasq_default_dns = TUN_DNS
|
||||
|
||||
local setflag_4= (NFTFLAG == "1") and "4#inet#passwall2#" or ""
|
||||
local setflag_6= (NFTFLAG == "1") and "6#inet#passwall2#" or ""
|
||||
|
||||
if not fs.access(CACHE_DNS_PATH) then
|
||||
fs.mkdir(CACHE_DNS_PATH)
|
||||
|
||||
local fwd_dns
|
||||
|
||||
-- Always use domestic DNS to resolve node domain names
|
||||
if true then
|
||||
fwd_dns = LOCAL_DNS
|
||||
api.uci_foreach_c("nodes", function(t)
|
||||
local function process_address(address)
|
||||
address = (address or ""):lower()
|
||||
if address == "engage.cloudflareclient.com" then return end
|
||||
if datatypes.hostname(address) then
|
||||
set_domain_dns(address, fwd_dns)
|
||||
set_domain_ipset(address, setflag_4 .. "psw2_vps," .. setflag_6 .. "psw2_vps6")
|
||||
end
|
||||
end
|
||||
process_address(t.address)
|
||||
process_address(t.download_address)
|
||||
end)
|
||||
end
|
||||
|
||||
if list1 and next(list1) then
|
||||
local server_out = io.open(CACHE_DNS_PATH .. "/001-server.conf", "a")
|
||||
local ipset_out = io.open(CACHE_DNS_PATH .. "/ipset.conf", "a")
|
||||
local set_name = "ipset"
|
||||
if NFTFLAG == "1" then
|
||||
set_name = "nftset"
|
||||
end
|
||||
for key, value in pairs(list1) do
|
||||
if value.dns and #value.dns > 0 then
|
||||
for i, dns in ipairs(value.dns) do
|
||||
server_out:write(string.format("server=/.%s/%s", key, dns) .. "\n")
|
||||
end
|
||||
end
|
||||
if value.ipsets and #value.ipsets > 0 then
|
||||
local ipsets_str = ""
|
||||
for i, ipset in ipairs(value.ipsets) do
|
||||
ipsets_str = ipsets_str .. ipset .. ","
|
||||
end
|
||||
ipsets_str = ipsets_str:sub(1, #ipsets_str - 1)
|
||||
ipset_out:write(string.format("%s=/.%s/%s", set_name, key, ipsets_str) .. "\n")
|
||||
end
|
||||
end
|
||||
server_out:close()
|
||||
ipset_out:close()
|
||||
end
|
||||
|
||||
local f_out = io.open(CACHE_TEXT_FILE, "a")
|
||||
f_out:write(new_text)
|
||||
f_out:close()
|
||||
end
|
||||
|
||||
api.remove(TMP_DNSMASQ_PATH)
|
||||
fs.symlink(CACHE_DNS_PATH, TMP_DNSMASQ_PATH)
|
||||
|
||||
if DNSMASQ_CONF_FILE ~= "nil" then
|
||||
local conf_lines = {}
|
||||
if LISTEN_PORT then
|
||||
--Copy dnsmasq instance
|
||||
conf_lines = copy_instance({
|
||||
["LISTEN_PORT"] = LISTEN_PORT,
|
||||
["TMP_DNSMASQ_PATH"] = TMP_DNSMASQ_PATH,
|
||||
["return"] = "1"
|
||||
})
|
||||
--dhcp.leases to hostsMore actions
|
||||
local hosts = api.CACHE_PATH .. "/dhcp-hosts"
|
||||
sys.call("touch " .. hosts)
|
||||
tinsert(conf_lines, "addn-hosts=" .. hosts)
|
||||
else
|
||||
--Modify the default dnsmasq service
|
||||
end
|
||||
tinsert(conf_lines, string.format("conf-dir=%s", TMP_DNSMASQ_PATH))
|
||||
if dnsmasq_default_dns then
|
||||
for s in string.gmatch(dnsmasq_default_dns, '[^' .. "," .. ']+') do
|
||||
tinsert(conf_lines, string.format("server=%s", s))
|
||||
end
|
||||
tinsert(conf_lines, "all-servers")
|
||||
tinsert(conf_lines, "no-poll")
|
||||
tinsert(conf_lines, "no-resolv")
|
||||
|
||||
if FLAG == "default" then
|
||||
api.set_cache_var("DEFAULT_DNS", DEFAULT_DNS)
|
||||
end
|
||||
end
|
||||
if #conf_lines > 0 then
|
||||
local conf_out = io.open(DNSMASQ_CONF_FILE, "a")
|
||||
conf_out:write(table.concat(conf_lines, "\n"))
|
||||
conf_out:write("\n")
|
||||
conf_out:close()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
_G.stretch = stretch
|
||||
_G.restart = restart
|
||||
_G.logic_restart = logic_restart
|
||||
_G.copy_instance = copy_instance
|
||||
_G.add_rule = add_rule
|
||||
|
||||
if arg[1] then
|
||||
local func =_G[arg[1]]
|
||||
if func then
|
||||
local var = nil
|
||||
if arg[2] then
|
||||
var = jsonc.parse(arg[2])
|
||||
end
|
||||
func(var)
|
||||
end
|
||||
end
|
||||
local api = require "luci.passwall2.api"
|
||||
local c_config = api.c_config
|
||||
local sys = api.sys
|
||||
local jsonc = api.jsonc
|
||||
local fs = api.fs
|
||||
local datatypes = api.datatypes
|
||||
local TMP = {}
|
||||
|
||||
local function tinsert(table_name, val)
|
||||
if table_name and type(table_name) == "table" then
|
||||
if not TMP[table_name] then
|
||||
TMP[table_name] = {}
|
||||
end
|
||||
if TMP[table_name][val] then
|
||||
return false
|
||||
end
|
||||
table.insert(table_name, val)
|
||||
TMP[table_name][val] = true
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function backup_servers()
|
||||
local DNSMASQ_DNS = api.uci_get("dhcp", "@dnsmasq[0]", "server")
|
||||
if DNSMASQ_DNS and #DNSMASQ_DNS > 0 then
|
||||
api.uci_set_c("@global[0]", "dnsmasq_servers", DNSMASQ_DNS)
|
||||
api.uci_save_c(true)
|
||||
end
|
||||
end
|
||||
|
||||
local function restore_servers()
|
||||
local dns_table = {}
|
||||
local DNSMASQ_DNS = api.uci_get("dhcp", "@dnsmasq[0]", "server")
|
||||
if DNSMASQ_DNS and #DNSMASQ_DNS > 0 then
|
||||
for k, v in ipairs(DNSMASQ_DNS) do
|
||||
tinsert(dns_table, v)
|
||||
end
|
||||
end
|
||||
local OLD_SERVER = api.uci_get_c("@global[0]", "dnsmasq_servers")
|
||||
if OLD_SERVER and #OLD_SERVER > 0 then
|
||||
for k, v in ipairs(OLD_SERVER) do
|
||||
tinsert(dns_table, v)
|
||||
end
|
||||
api.uci_del_c("@global[0]", "dnsmasq_servers")
|
||||
api.uci_save_c(true)
|
||||
end
|
||||
if dns_table and #dns_table > 0 then
|
||||
api.uci_set("dhcp", "@dnsmasq[0]", "server", dns_table)
|
||||
api.uci_save(nil, "dhcp", true)
|
||||
end
|
||||
end
|
||||
|
||||
function stretch()
|
||||
local dnsmasq_server = api.uci_get("dhcp", "@dnsmasq[0]", "server")
|
||||
local dnsmasq_noresolv = api.uci_get("dhcp", "@dnsmasq[0]", "noresolv")
|
||||
local _flag
|
||||
if dnsmasq_server and #dnsmasq_server > 0 then
|
||||
for k, v in ipairs(dnsmasq_server) do
|
||||
if not v:find("/") then
|
||||
_flag = true
|
||||
end
|
||||
end
|
||||
end
|
||||
if not _flag and dnsmasq_noresolv == "1" then
|
||||
api.uci_del("dhcp", "@dnsmasq[0]", "noresolv")
|
||||
local RESOLVFILE = "/tmp/resolv.conf.d/resolv.conf.auto"
|
||||
local file = io.open(RESOLVFILE, "r")
|
||||
if not file then
|
||||
RESOLVFILE = "/tmp/resolv.conf.auto"
|
||||
else
|
||||
local size = file:seek("end")
|
||||
file:close()
|
||||
if size == 0 then
|
||||
RESOLVFILE = "/tmp/resolv.conf.auto"
|
||||
end
|
||||
end
|
||||
api.uci_set("dhcp", "@dnsmasq[0]", "resolvfile", RESOLVFILE)
|
||||
api.uci_save(nil, "dhcp", true)
|
||||
end
|
||||
end
|
||||
|
||||
function restart(var)
|
||||
local LOG = var["LOG"]
|
||||
sys.call("/etc/init.d/dnsmasq restart >/dev/null 2>&1")
|
||||
if LOG == "1" then
|
||||
api.log(0, api.i18n.translate("Restart dnsmasq service."))
|
||||
end
|
||||
end
|
||||
|
||||
function logic_restart(var)
|
||||
local LOG = var["LOG"]
|
||||
local DEFAULT_DNS = api.get_cache_var("DEFAULT_DNS")
|
||||
if DEFAULT_DNS then
|
||||
backup_servers()
|
||||
--sys.call("sed -i '/list server/d' /etc/config/dhcp >/dev/null 2>&1")
|
||||
local dns_table = {}
|
||||
local dnsmasq_server = api.uci_get("dhcp", "@dnsmasq[0]", "server")
|
||||
if dnsmasq_server and #dnsmasq_server > 0 then
|
||||
for k, v in ipairs(dnsmasq_server) do
|
||||
if v:find("/") then
|
||||
tinsert(dns_table, v)
|
||||
end
|
||||
end
|
||||
api.uci_set("dhcp", "@dnsmasq[0]", "server", dns_table)
|
||||
api.uci_save(nil, "dhcp", true)
|
||||
end
|
||||
sys.call("/etc/init.d/dnsmasq restart >/dev/null 2>&1")
|
||||
restore_servers()
|
||||
else
|
||||
sys.call("/etc/init.d/dnsmasq restart >/dev/null 2>&1")
|
||||
end
|
||||
if LOG == "1" then
|
||||
api.log(0, api.i18n.translate("Restart dnsmasq service."))
|
||||
end
|
||||
end
|
||||
|
||||
function copy_instance(var)
|
||||
local LISTEN_PORT = var["LISTEN_PORT"]
|
||||
local TMP_DNSMASQ_PATH = var["TMP_DNSMASQ_PATH"]
|
||||
local conf_lines = {}
|
||||
local DEFAULT_DNSMASQ_CFGID = sys.exec("echo -n $(uci -q show dhcp.@dnsmasq[0] | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')")
|
||||
for line in io.lines("/tmp/etc/dnsmasq.conf." .. DEFAULT_DNSMASQ_CFGID) do
|
||||
local filter
|
||||
if line:find("passwall2") then filter = true end
|
||||
if line:find("ubus") then filter = true end
|
||||
if line:find("dhcp") then filter = true end
|
||||
if line:find("server=") == 1 then filter = true end
|
||||
if line:find("port=") == 1 then filter = true end
|
||||
if line:find("conf%-dir=") == 1 then
|
||||
filter = true
|
||||
if TMP_DNSMASQ_PATH then
|
||||
local tmp_path = line:sub(1 + #"conf-dir=")
|
||||
sys.call(string.format("cp -r %s/* %s/ 2>/dev/null", tmp_path, TMP_DNSMASQ_PATH))
|
||||
end
|
||||
end
|
||||
if line:find("address=") == 1 or (line:find("server=") == 1 and line:find("/")) then filter = nil end
|
||||
if not filter then
|
||||
tinsert(conf_lines, line)
|
||||
end
|
||||
end
|
||||
tinsert(conf_lines, "port=" .. LISTEN_PORT)
|
||||
if TMP_DNSMASQ_PATH then
|
||||
sys.call("rm -rf " .. TMP_DNSMASQ_PATH .. "/*passwall2*")
|
||||
end
|
||||
if var["return"] == "1" then
|
||||
return conf_lines
|
||||
end
|
||||
if #conf_lines > 0 then
|
||||
local DNSMASQ_CONF = var["DNSMASQ_CONF"]
|
||||
local conf_out = io.open(DNSMASQ_CONF, "a")
|
||||
conf_out:write(table.concat(conf_lines, "\n"))
|
||||
conf_out:write("\n")
|
||||
conf_out:close()
|
||||
end
|
||||
end
|
||||
|
||||
function add_rule(var)
|
||||
local FLAG = var["FLAG"]
|
||||
local TMP_DNSMASQ_PATH = var["TMP_DNSMASQ_PATH"]
|
||||
local DNSMASQ_CONF_FILE = var["DNSMASQ_CONF_FILE"]
|
||||
local LISTEN_PORT = var["LISTEN_PORT"]
|
||||
local DEFAULT_DNS = var["DEFAULT_DNS"]
|
||||
local LOCAL_DNS = var["LOCAL_DNS"]
|
||||
local TUN_DNS = var["TUN_DNS"]
|
||||
local NFTFLAG = var["NFTFLAG"]
|
||||
local CACHE_PATH = api.CACHE_PATH
|
||||
local CACHE_FLAG = "dnsmasq_" .. FLAG
|
||||
local CACHE_DNS_PATH = CACHE_PATH .. "/" .. CACHE_FLAG
|
||||
local CACHE_TEXT_FILE = CACHE_DNS_PATH .. ".txt"
|
||||
|
||||
local list1 = {}
|
||||
|
||||
local function check_dns(domain, dns)
|
||||
if domain == "" or domain:find("#") then
|
||||
return false
|
||||
end
|
||||
if not dns then
|
||||
return
|
||||
end
|
||||
for k,v in ipairs(list1[domain].dns) do
|
||||
if dns == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function check_ipset(domain, ipset)
|
||||
if domain == "" or domain:find("#") then
|
||||
return false
|
||||
end
|
||||
if not ipset then
|
||||
return
|
||||
end
|
||||
for k,v in ipairs(list1[domain].ipsets) do
|
||||
if ipset == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function set_domain_dns(domain, dns)
|
||||
if domain == "" or domain:find("#") then
|
||||
return
|
||||
end
|
||||
if not dns then
|
||||
return
|
||||
end
|
||||
if not list1[domain] then
|
||||
list1[domain] = {
|
||||
dns = {},
|
||||
ipsets = {}
|
||||
}
|
||||
end
|
||||
for line in string.gmatch(dns, '[^' .. "," .. ']+') do
|
||||
if not check_dns(domain, line) then
|
||||
table.insert(list1[domain].dns, line)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function set_domain_ipset(domain, ipset)
|
||||
if domain == "" or domain:find("#") then
|
||||
return
|
||||
end
|
||||
if not ipset then
|
||||
return
|
||||
end
|
||||
if not list1[domain] then
|
||||
list1[domain] = {
|
||||
dns = {},
|
||||
ipsets = {}
|
||||
}
|
||||
end
|
||||
for line in string.gmatch(ipset, '[^' .. "," .. ']+') do
|
||||
if not check_ipset(domain, line) then
|
||||
table.insert(list1[domain].ipsets, line)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local cache_text = ""
|
||||
local nodes_address_md5 = sys.exec("echo -n $(uci show %s | grep '\\.address') | md5sum" % c_config)
|
||||
local new_text = TMP_DNSMASQ_PATH .. DNSMASQ_CONF_FILE .. DEFAULT_DNS .. LOCAL_DNS .. TUN_DNS .. nodes_address_md5 .. NFTFLAG
|
||||
if fs.access(CACHE_TEXT_FILE) then
|
||||
for line in io.lines(CACHE_TEXT_FILE) do
|
||||
cache_text = line
|
||||
end
|
||||
end
|
||||
|
||||
if cache_text ~= new_text then
|
||||
api.remove(CACHE_DNS_PATH .. "*")
|
||||
end
|
||||
|
||||
local dnsmasq_default_dns = TUN_DNS
|
||||
|
||||
local setflag_4= (NFTFLAG == "1") and "4#inet#passwall2#" or ""
|
||||
local setflag_6= (NFTFLAG == "1") and "6#inet#passwall2#" or ""
|
||||
|
||||
if not fs.access(CACHE_DNS_PATH) then
|
||||
fs.mkdir(CACHE_DNS_PATH)
|
||||
|
||||
local fwd_dns
|
||||
|
||||
-- Always use domestic DNS to resolve node domain names
|
||||
if true then
|
||||
fwd_dns = LOCAL_DNS
|
||||
api.uci_foreach_c("nodes", function(t)
|
||||
local function process_address(address)
|
||||
address = (address or ""):lower()
|
||||
if address == "engage.cloudflareclient.com" then return end
|
||||
if datatypes.hostname(address) then
|
||||
set_domain_dns(address, fwd_dns)
|
||||
set_domain_ipset(address, setflag_4 .. "psw2_vps," .. setflag_6 .. "psw2_vps6")
|
||||
end
|
||||
end
|
||||
process_address(t.address)
|
||||
process_address(t.download_address)
|
||||
end)
|
||||
end
|
||||
|
||||
if list1 and next(list1) then
|
||||
local server_out = io.open(CACHE_DNS_PATH .. "/001-server.conf", "a")
|
||||
local ipset_out = io.open(CACHE_DNS_PATH .. "/ipset.conf", "a")
|
||||
local set_name = "ipset"
|
||||
if NFTFLAG == "1" then
|
||||
set_name = "nftset"
|
||||
end
|
||||
for key, value in pairs(list1) do
|
||||
if value.dns and #value.dns > 0 then
|
||||
for i, dns in ipairs(value.dns) do
|
||||
server_out:write(string.format("server=/.%s/%s", key, dns) .. "\n")
|
||||
end
|
||||
end
|
||||
if value.ipsets and #value.ipsets > 0 then
|
||||
local ipsets_str = ""
|
||||
for i, ipset in ipairs(value.ipsets) do
|
||||
ipsets_str = ipsets_str .. ipset .. ","
|
||||
end
|
||||
ipsets_str = ipsets_str:sub(1, #ipsets_str - 1)
|
||||
ipset_out:write(string.format("%s=/.%s/%s", set_name, key, ipsets_str) .. "\n")
|
||||
end
|
||||
end
|
||||
server_out:close()
|
||||
ipset_out:close()
|
||||
end
|
||||
|
||||
local f_out = io.open(CACHE_TEXT_FILE, "a")
|
||||
f_out:write(new_text)
|
||||
f_out:close()
|
||||
end
|
||||
|
||||
api.remove(TMP_DNSMASQ_PATH)
|
||||
fs.symlink(CACHE_DNS_PATH, TMP_DNSMASQ_PATH)
|
||||
|
||||
if DNSMASQ_CONF_FILE ~= "nil" then
|
||||
local conf_lines = {}
|
||||
if LISTEN_PORT then
|
||||
--Copy dnsmasq instance
|
||||
conf_lines = copy_instance({
|
||||
["LISTEN_PORT"] = LISTEN_PORT,
|
||||
["TMP_DNSMASQ_PATH"] = TMP_DNSMASQ_PATH,
|
||||
["return"] = "1"
|
||||
})
|
||||
--dhcp.leases to hostsMore actions
|
||||
local hosts = api.CACHE_PATH .. "/dhcp-hosts"
|
||||
sys.call("touch " .. hosts)
|
||||
tinsert(conf_lines, "addn-hosts=" .. hosts)
|
||||
else
|
||||
--Modify the default dnsmasq service
|
||||
end
|
||||
tinsert(conf_lines, string.format("conf-dir=%s", TMP_DNSMASQ_PATH))
|
||||
if dnsmasq_default_dns then
|
||||
for s in string.gmatch(dnsmasq_default_dns, '[^' .. "," .. ']+') do
|
||||
tinsert(conf_lines, string.format("server=%s", s))
|
||||
end
|
||||
tinsert(conf_lines, "all-servers")
|
||||
tinsert(conf_lines, "no-poll")
|
||||
tinsert(conf_lines, "no-resolv")
|
||||
|
||||
if FLAG == "default" then
|
||||
api.set_cache_var("DEFAULT_DNS", DEFAULT_DNS)
|
||||
end
|
||||
end
|
||||
if #conf_lines > 0 then
|
||||
local conf_out = io.open(DNSMASQ_CONF_FILE, "a")
|
||||
conf_out:write(table.concat(conf_lines, "\n"))
|
||||
conf_out:write("\n")
|
||||
conf_out:close()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
_G.stretch = stretch
|
||||
_G.restart = restart
|
||||
_G.logic_restart = logic_restart
|
||||
_G.copy_instance = copy_instance
|
||||
_G.add_rule = add_rule
|
||||
|
||||
if arg[1] then
|
||||
local func =_G[arg[1]]
|
||||
if func then
|
||||
local var = nil
|
||||
if arg[2] then
|
||||
var = jsonc.parse(arg[2])
|
||||
end
|
||||
func(var)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
if #arg > 0 then
|
||||
local api = require "luci.passwall2.api"
|
||||
local str = arg[1]
|
||||
table.remove(arg, 1)
|
||||
print(api.i18n.translatef(str, unpack(arg)))
|
||||
end
|
||||
if #arg > 0 then
|
||||
local api = require "luci.passwall2.api"
|
||||
local str = arg[1]
|
||||
table.remove(arg, 1)
|
||||
print(api.i18n.translatef(str, unpack(arg)))
|
||||
end
|
||||
|
||||
@@ -891,7 +891,7 @@ add_firewall_rule() {
|
||||
|
||||
del_firewall_rule() {
|
||||
for nft in "dstnat" "srcnat" "nat_output" "mangle_prerouting" "mangle_output"; do
|
||||
local handles=$(nft -a list chain $NFTABLE_NAME ${nft} 2>/dev/null | grep -E "PSW2_" | awk -F '# handle ' '{print$2}')
|
||||
local handles=$(nft -a list chain $NFTABLE_NAME ${nft} 2>/dev/null | grep -E "PSW2_" | awk -F '# handle ' '{print$2}')
|
||||
for handle in $handles; do
|
||||
nft delete rule $NFTABLE_NAME ${nft} handle ${handle} 2>/dev/null
|
||||
done
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-05-02 12:03+0000\n"
|
||||
"Last-Translator: BoneNI <bounkirdni@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-15 13:06+0000\n"
|
||||
"Last-Translator: Bone NI <bounkirdni@gmail.com>\n"
|
||||
"Language-Team: Lao <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssamba4/lo/>\n"
|
||||
"Language: lo\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.17.1\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:120
|
||||
msgid "Allow guests"
|
||||
@@ -121,7 +121,7 @@ msgstr "ສືບທອດເຈົ້າຂອງ"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:34
|
||||
msgid "Interface"
|
||||
msgstr "ອິນເຕີເຟດ"
|
||||
msgstr "ອິນເຕີເຟສ"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:35
|
||||
msgid "Listen only on the given interface or, if unspecified, on lan"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2025-07-14 19:03+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
|
||||
"PO-Revision-Date: 2026-08-13 09:16+0000\n"
|
||||
"Last-Translator: Jonatan Nyberg <nickwick@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssamba4/sv/>\n"
|
||||
"Language: sv\n"
|
||||
@@ -10,7 +10,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13-dev\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:120
|
||||
msgid "Allow guests"
|
||||
@@ -18,15 +18,15 @@ msgstr "Tillåt gäster"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:67
|
||||
msgid "Allow legacy (insecure) protocols/authentication."
|
||||
msgstr "TIllåt förlegade (osäkra) protokoll/autentisering."
|
||||
msgstr "Tillåt äldre (osäkra) protokoll/autentiseringsmetoder."
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:68
|
||||
msgid ""
|
||||
"Allow legacy smb(v1)/Lanman connections, needed for older devices without "
|
||||
"smb(v2.1/3) support."
|
||||
msgstr ""
|
||||
"Tillåt förlegade smb(v1)/Lanman-anslutningar, behövs för äldre enheter som "
|
||||
"saknar stöd för smb(v2.1/3)."
|
||||
"Tillåt äldre SMBv1-/Lanman-anslutningar. Krävs för äldre enheter utan stöd "
|
||||
"för SMBv2.1/3."
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:117
|
||||
msgid "Allowed users"
|
||||
@@ -34,7 +34,7 @@ msgstr "Tillåtna användare"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:151
|
||||
msgid "Apple Time-machine share"
|
||||
msgstr ""
|
||||
msgstr "Apple Time Machine-utdelning"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:104
|
||||
msgid "Browse-able"
|
||||
@@ -42,7 +42,7 @@ msgstr "Bläddringsbar"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:136
|
||||
msgid "Create mask"
|
||||
msgstr "Skapa mask"
|
||||
msgstr "Skapandemask"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:54
|
||||
msgid "Description"
|
||||
@@ -50,19 +50,19 @@ msgstr "Beskrivning"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:142
|
||||
msgid "Directory mask"
|
||||
msgstr "Mask för mapp"
|
||||
msgstr "Katalogmask"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:74
|
||||
msgid "Disable Active Directory Domain Controller"
|
||||
msgstr ""
|
||||
msgstr "Inaktivera Active Directory-domänkontrollant"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:71
|
||||
msgid "Disable Netbios"
|
||||
msgstr ""
|
||||
msgstr "Inaktivera NetBIOS"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:77
|
||||
msgid "Disable Winbind"
|
||||
msgstr ""
|
||||
msgstr "Inaktivera Winbind"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:32
|
||||
msgid "Edit Template"
|
||||
@@ -70,16 +70,15 @@ msgstr "Redigera mall"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:32
|
||||
msgid "Edit the template that is used for generating the samba configuration."
|
||||
msgstr ""
|
||||
"Redigera mallen som används för att generera konfigurationen för samba."
|
||||
msgstr "Redigera mallen som används för att generera Samba-konfigurationen."
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:57
|
||||
msgid "Enable extra Tuning"
|
||||
msgstr ""
|
||||
msgstr "Aktivera extra finjustering"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:64
|
||||
msgid "Enable macOS compatible shares"
|
||||
msgstr ""
|
||||
msgstr "Aktivera macOS-kompatibla utdelningar"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:58
|
||||
msgid ""
|
||||
@@ -87,32 +86,37 @@ msgid ""
|
||||
"speeds and better operation via WiFi. Not recommend if multiple clients "
|
||||
"write to the same files, at the same time!"
|
||||
msgstr ""
|
||||
"Aktivera vissa community-utvecklade finjusteringsparametrar som kan "
|
||||
"förbättra skrivhastigheten och funktionen via Wi‑Fi. Rekommenderas inte om "
|
||||
"flera klienter skriver till samma filer samtidigt!"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:65
|
||||
msgid ""
|
||||
"Enables Apple's AAPL extension globally and adds macOS compatibility options "
|
||||
"to all shares."
|
||||
msgstr ""
|
||||
"Aktiverar Apples AAPL-tillägg globalt och lägger till macOS-"
|
||||
"kompatibilitetsalternativ för alla utdelningar."
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:115
|
||||
msgid "Force Root"
|
||||
msgstr ""
|
||||
msgstr "Tvinga root"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:61
|
||||
msgid "Force synchronous I/O"
|
||||
msgstr ""
|
||||
msgstr "Tvinga synkron I/O"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:31
|
||||
msgid "General Settings"
|
||||
msgstr "Generella inställningar"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
#: applications/luci-app-samba4/root/usr/share/rpcd/acl.d/luci-app-samba4.json:3
|
||||
msgid "Grant access to LuCI app samba4"
|
||||
msgstr ""
|
||||
msgstr "Ge åtkomst till LuCI-appen samba4"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:126
|
||||
msgid "Guests only"
|
||||
msgstr ""
|
||||
msgstr "Endast gäster"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:131
|
||||
msgid "Inherit owner"
|
||||
@@ -124,7 +128,8 @@ msgstr "Gränssnitt"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:35
|
||||
msgid "Listen only on the given interface or, if unspecified, on lan"
|
||||
msgstr "Lyssna endast på det givna gränssnittet eller, om ospecifierat, på LAN"
|
||||
msgstr ""
|
||||
"Lyssna endast på det angivna gränssnittet eller, om inget anges, på LAN"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:98
|
||||
msgid "Name"
|
||||
@@ -133,31 +138,35 @@ msgstr "Namn"
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:23
|
||||
#: applications/luci-app-samba4/root/usr/share/luci/menu.d/luci-app-samba4.json:3
|
||||
msgid "Network Shares"
|
||||
msgstr "Nätverksdelningar"
|
||||
msgstr "Nätverksutdelningar"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:62
|
||||
msgid ""
|
||||
"On lower-end devices may increase speeds, by forcing synchronous I/O instead "
|
||||
"of the default asynchronous."
|
||||
msgstr ""
|
||||
"På enklare enheter kan detta öka hastigheten genom att tvinga synkron I/O i "
|
||||
"stället för den asynkrona standardinställningen."
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:99
|
||||
msgid "Path"
|
||||
msgstr "Genväg"
|
||||
msgstr "sökväg"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:94
|
||||
msgid ""
|
||||
"Please add directories to share. Each directory refers to a folder on a "
|
||||
"mounted device."
|
||||
msgstr ""
|
||||
"Lägg till kataloger som ska delas. Varje katalog avser en mapp på en "
|
||||
"monterad enhet."
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:109
|
||||
msgid "Read-only"
|
||||
msgstr "Endast läsbar"
|
||||
msgstr "Skrivskyddad"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:93
|
||||
msgid "Shared Directories"
|
||||
msgstr "Delade mappar"
|
||||
msgstr "Delade kataloger"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:82
|
||||
msgid ""
|
||||
@@ -166,14 +175,17 @@ msgid ""
|
||||
"('|') should not be changed. They get their values from the 'General "
|
||||
"Settings' tab."
|
||||
msgstr ""
|
||||
"Detta är innehållet i filen ”/etc/samba/smb.conf.template”, som Samba-"
|
||||
"konfigurationen genereras från. Värden omslutna av lodstreck (”|”) ska inte "
|
||||
"ändras. De hämtar sina värden från fliken ”Allmänna inställningar”."
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:153
|
||||
msgid "Time-machine size in GB"
|
||||
msgstr ""
|
||||
msgstr "Time Machine-storlek i GB"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:148
|
||||
msgid "Vfs objects"
|
||||
msgstr ""
|
||||
msgstr "VFS-objekt"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:51
|
||||
msgid "Workgroup"
|
||||
|
||||
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
PKG_MAINTAINER:=Nick Peng <pymumu@gmail.com>
|
||||
PKG_VERSION:=1.2025.47.2
|
||||
PKG_RELEASE:=11
|
||||
PKG_RELEASE:=12
|
||||
|
||||
LUCI_TITLE:=LuCI for smartdns
|
||||
LUCI_DESCRIPTION:=Provides Luci for smartdns
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2026-05-22 21:11+0000\n"
|
||||
"PO-Revision-Date: 2026-08-13 09:27+0000\n"
|
||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssmartdns/cs/>\n"
|
||||
@@ -10,7 +10,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 2026.6.dev0\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:791
|
||||
msgid "Additional Args for upstream dns servers"
|
||||
@@ -583,7 +583,7 @@ msgstr "Režim odpovědi"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1173
|
||||
msgid "Restart"
|
||||
msgstr "Restartovat"
|
||||
msgstr "Restart"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1164
|
||||
msgid "Restart Service"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2026-03-08 17:32+0000\n"
|
||||
"Last-Translator: hmzs <hmzs@1szer1.hu>\n"
|
||||
"PO-Revision-Date: 2026-08-05 16:35+0000\n"
|
||||
"Last-Translator: Granilla Péter <granilla.peter3@gmail.com>\n"
|
||||
"Language-Team: Hungarian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssmartdns/hu/>\n"
|
||||
"Language: hu\n"
|
||||
@@ -10,7 +10,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.17-dev\n"
|
||||
"X-Generator: Weblate 2026.8.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:791
|
||||
msgid "Additional Args for upstream dns servers"
|
||||
@@ -155,7 +155,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:559
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
msgstr "Leírás"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:75
|
||||
msgid "Dnsmasq Forwarded To Smartdns Failure"
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-05-02 12:02+0000\n"
|
||||
"Last-Translator: BoneNI <bounkirdni@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-15 13:06+0000\n"
|
||||
"Last-Translator: Bone NI <bounkirdni@gmail.com>\n"
|
||||
"Language-Team: Lao <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssmartdns/lo/>\n"
|
||||
"Language: lo\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.17.1\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:791
|
||||
msgid "Additional Args for upstream dns servers"
|
||||
@@ -568,7 +568,7 @@ msgstr "ຮູບແບບການຕອບສະໜອງ"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1173
|
||||
msgid "Restart"
|
||||
msgstr "ຣີສະຕາດ"
|
||||
msgstr "ເລີ່ມໃໝ່"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1164
|
||||
msgid "Restart Service"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2026-04-25 12:14+0000\n"
|
||||
"PO-Revision-Date: 2026-08-14 12:12+0000\n"
|
||||
"Last-Translator: SnIPeRSnIPeR "
|
||||
"<snipersniper@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
@@ -12,7 +12,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"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"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:791
|
||||
msgid "Additional Args for upstream dns servers"
|
||||
@@ -823,7 +823,7 @@ msgstr "Ошибка формата URL, формат: http:// или https://"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:522
|
||||
msgid "Update"
|
||||
msgstr "Обновление"
|
||||
msgstr "Обновить"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:513
|
||||
msgid "Update Files"
|
||||
|
||||
+179
-138
@@ -1,8 +1,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2026-03-22 17:10+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
|
||||
"PO-Revision-Date: 2026-08-13 09:17+0000\n"
|
||||
"Last-Translator: Jonatan Nyberg <nickwick@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssmartdns/sv/>\n"
|
||||
"Language: sv\n"
|
||||
@@ -10,7 +10,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.17-dev\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:791
|
||||
msgid "Additional Args for upstream dns servers"
|
||||
@@ -21,50 +21,56 @@ msgstr "Ytterligare argument för uppströms DNS-servrar"
|
||||
msgid ""
|
||||
"Additional Flags for rules, read help on domain-rule for more information."
|
||||
msgstr ""
|
||||
"Ytterligare flaggor för regler. Läs hjälpen för domain-rule för mer "
|
||||
"information."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:884
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1088
|
||||
msgid "Additional Rule Flag"
|
||||
msgstr ""
|
||||
msgstr "Ytterligare regelflagga"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:345
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:478
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:790
|
||||
msgid "Additional Server Args"
|
||||
msgstr ""
|
||||
msgstr "Ytterligare serverargument"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:346
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:479
|
||||
msgid ""
|
||||
"Additional server args, refer to the help description of the bind option."
|
||||
msgstr ""
|
||||
"Ytterligare serverargument. Se hjälpbeskrivningen för alternativet bind."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:131
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:638
|
||||
msgid "Advanced Settings"
|
||||
msgstr "Avancerade inställningar"
|
||||
msgstr "avancerade inställningar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:252
|
||||
msgid ""
|
||||
"Attempts to serve old responses from cache with a TTL of 0 in the response "
|
||||
"without waiting for the actual resolution to finish."
|
||||
msgstr ""
|
||||
"Försöker svara med gamla cachelagrade svar med TTL 0 utan att vänta på att "
|
||||
"den faktiska namnuppslagningen ska slutföras."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
|
||||
msgid "Automatically Set Dnsmasq"
|
||||
msgstr ""
|
||||
msgstr "Konfigurera Dnsmasq automatiskt"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:160
|
||||
msgid "Automatically set as upstream of dnsmasq when port changes."
|
||||
msgstr ""
|
||||
"Ange automatiskt SmartDNS som uppströmsserver för dnsmasq när porten ändras."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:228
|
||||
msgid "Bind Device"
|
||||
msgstr ""
|
||||
msgstr "Bind till enhet"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:233
|
||||
msgid "Bind Device Name"
|
||||
msgstr ""
|
||||
msgstr "Namn på enhet att binda till"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:997
|
||||
msgid "Block domain"
|
||||
@@ -76,11 +82,11 @@ msgstr "Blockera domän."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:261
|
||||
msgid "Cache Persist"
|
||||
msgstr ""
|
||||
msgstr "Beständig cache"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:257
|
||||
msgid "Cache Size"
|
||||
msgstr "Cache-storlek"
|
||||
msgstr "Cachestorlek"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:120
|
||||
msgid "Collecting data ..."
|
||||
@@ -91,18 +97,20 @@ msgid ""
|
||||
"Configure IP blacklists that will be filtered from the results of specific "
|
||||
"DNS server."
|
||||
msgstr ""
|
||||
"Konfigurera IP-blockeringslistor som filtreras bort från resultaten från en "
|
||||
"viss DNS-server."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:928
|
||||
msgid "Configure block domain list."
|
||||
msgstr ""
|
||||
msgstr "Konfigurera listan över blockerade domäner."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:949
|
||||
msgid "Configure domain rule list."
|
||||
msgstr ""
|
||||
msgstr "Konfigurera listan med domänregler."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:899
|
||||
msgid "Configure forwarding domain name list."
|
||||
msgstr ""
|
||||
msgstr "Konfigurera listan över domännamn som ska vidarebefordras."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:136
|
||||
msgid "Custom Settings"
|
||||
@@ -110,40 +118,40 @@ msgstr "Anpassade inställningar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:804
|
||||
msgid "DNS Block Setting"
|
||||
msgstr ""
|
||||
msgstr "Inställningar för DNS-blockering"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:803
|
||||
msgid "DNS Forwarding Setting"
|
||||
msgstr ""
|
||||
msgstr "Inställningar för DNS-vidarebefordran"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:647
|
||||
msgid "DNS Server Name"
|
||||
msgstr ""
|
||||
msgstr "DNS-servernamn"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:674
|
||||
msgid "DNS Server group"
|
||||
msgstr ""
|
||||
msgstr "DNS-servergrupp"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:812
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:966
|
||||
msgid "DNS Server group belongs to, such as office, home."
|
||||
msgstr ""
|
||||
msgstr "DNS-servergruppen som servern tillhör, till exempel kontor eller hem."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:650
|
||||
msgid "DNS Server ip"
|
||||
msgstr ""
|
||||
msgstr "DNS-serverns IP-adress"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:655
|
||||
msgid "DNS Server port"
|
||||
msgstr ""
|
||||
msgstr "DNS-serverport"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:664
|
||||
msgid "DNS Server type"
|
||||
msgstr ""
|
||||
msgstr "DNS-servertyp"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:257
|
||||
msgid "DNS domain result cache size"
|
||||
msgstr ""
|
||||
msgstr "Cachestorlek för DNS-domänresultat"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:486
|
||||
msgid "DNS64"
|
||||
@@ -151,7 +159,7 @@ msgstr "DNS64"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:133
|
||||
msgid "DNS64 Server Settings"
|
||||
msgstr ""
|
||||
msgstr "DNS64-serverinställningar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:559
|
||||
msgid "Description"
|
||||
@@ -159,16 +167,16 @@ msgstr "Beskrivning"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:75
|
||||
msgid "Dnsmasq Forwarded To Smartdns Failure"
|
||||
msgstr ""
|
||||
msgstr "Misslyckad vidarebefordran från Dnsmasq till SmartDNS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:718
|
||||
msgid "Do not check certificate."
|
||||
msgstr ""
|
||||
msgstr "Kontrollera inte certifikatet."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:396
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:837
|
||||
msgid "Do not check speed."
|
||||
msgstr ""
|
||||
msgstr "Kontrollera inte hastigheten."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:806
|
||||
msgid "Domain Address"
|
||||
@@ -177,30 +185,30 @@ msgstr "Domänens adress"
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:899
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:928
|
||||
msgid "Domain List"
|
||||
msgstr "Domän-lista"
|
||||
msgstr "Domänlista"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:890
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:920
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:990
|
||||
msgid "Domain List File"
|
||||
msgstr ""
|
||||
msgstr "Domänlistefil"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:805
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:948
|
||||
msgid "Domain Rule List"
|
||||
msgstr ""
|
||||
msgstr "Lista med domänregler"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:964
|
||||
msgid "Domain Rule Name"
|
||||
msgstr ""
|
||||
msgstr "Namn på domänregel"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:799
|
||||
msgid "Domain Rules"
|
||||
msgstr "Domän-regler"
|
||||
msgstr "Domänregler"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:799
|
||||
msgid "Domain Rules Settings"
|
||||
msgstr ""
|
||||
msgstr "Inställningar för domänregler"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:323
|
||||
msgid "Domain TTL"
|
||||
@@ -208,15 +216,15 @@ msgstr "Domän-TTL"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:335
|
||||
msgid "Domain TTL Max"
|
||||
msgstr ""
|
||||
msgstr "Maximal domän-TTL"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:327
|
||||
msgid "Domain TTL Min"
|
||||
msgstr ""
|
||||
msgstr "Minimal domän-TTL"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:245
|
||||
msgid "Domain prefetch"
|
||||
msgstr ""
|
||||
msgstr "Förhämtning av domäner"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1158
|
||||
msgid "Donate"
|
||||
@@ -224,7 +232,7 @@ msgstr "Donera"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1157
|
||||
msgid "Donate to smartdns"
|
||||
msgstr ""
|
||||
msgstr "Donera till SmartDNS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:525
|
||||
msgid "Download Files"
|
||||
@@ -232,18 +240,20 @@ msgstr "Hämta filer"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:134
|
||||
msgid "Download Files Setting"
|
||||
msgstr ""
|
||||
msgstr "Inställningar för filhämtning"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:134
|
||||
msgid ""
|
||||
"Download domain list files for domain-rule and include config files, please "
|
||||
"refresh the page after download to take effect."
|
||||
msgstr ""
|
||||
"Hämta domänlistefiler för domain-rule och inkluderade konfigurationsfiler. "
|
||||
"Uppdatera sidan efter hämtningen för att ändringarna ska börja gälla."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:239
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1006
|
||||
msgid "Dual-stack IP Selection"
|
||||
msgstr ""
|
||||
msgstr "IP-val för dual-stack"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:141
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:370
|
||||
@@ -254,53 +264,53 @@ msgstr "Aktivera"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:494
|
||||
msgid "Enable Auto Update"
|
||||
msgstr ""
|
||||
msgstr "Aktivera automatisk uppdatering"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:240
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1007
|
||||
msgid "Enable IP selection between IPV4 and IPV6"
|
||||
msgstr ""
|
||||
msgstr "Aktivera IP-val mellan IPv4 och IPv6"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:223
|
||||
msgid "Enable IPV6 DNS Server"
|
||||
msgstr ""
|
||||
msgstr "Aktivera IPv6-DNS-server"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:218
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:383
|
||||
msgid "Enable TCP DNS Server"
|
||||
msgstr ""
|
||||
msgstr "Aktivera TCP-DNS-server"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:494
|
||||
msgid "Enable daily auto update."
|
||||
msgstr ""
|
||||
msgstr "Aktivera daglig automatisk uppdatering."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:246
|
||||
msgid "Enable domain prefetch, accelerate domain response speed."
|
||||
msgstr ""
|
||||
msgstr "Aktivera förhämtning av domäner för snabbare domänsvar."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:371
|
||||
msgid "Enable or disable second DNS server."
|
||||
msgstr ""
|
||||
msgstr "Aktivera eller inaktivera den sekundära DNS-servern."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:141
|
||||
msgid "Enable or disable smartdns server"
|
||||
msgstr ""
|
||||
msgstr "Aktivera eller inaktivera SmartDNS-servern"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:693
|
||||
msgid "Exclude DNS Server from default group."
|
||||
msgstr ""
|
||||
msgstr "Uteslut DNS-servern från standardgruppen."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:693
|
||||
msgid "Exclude Default Group"
|
||||
msgstr ""
|
||||
msgstr "Uteslut standardgruppen"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:214
|
||||
msgid "Fastest IP"
|
||||
msgstr ""
|
||||
msgstr "Snabbaste IP-adress"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:215
|
||||
msgid "Fastest Response"
|
||||
msgstr "Snabbast svar"
|
||||
msgstr "Snabbaste svar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:534
|
||||
msgid "File Name"
|
||||
@@ -312,7 +322,7 @@ msgstr "Filtyp"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:701
|
||||
msgid "Filtering IP with blacklist"
|
||||
msgstr ""
|
||||
msgstr "Filtrera IP-adresser med blockeringslista"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:213
|
||||
msgid "First Ping"
|
||||
@@ -323,42 +333,44 @@ msgstr "Första ping"
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:841
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1055
|
||||
msgid "Force AAAA SOA"
|
||||
msgstr ""
|
||||
msgstr "Tvinga SOA för AAAA"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:271
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:435
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:841
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1055
|
||||
msgid "Force AAAA SOA."
|
||||
msgstr ""
|
||||
msgstr "Tvinga SOA för AAAA."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:276
|
||||
msgid "Force HTTPS SOA"
|
||||
msgstr ""
|
||||
msgstr "Tvinga SOA för HTTPS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:276
|
||||
msgid "Force HTTPS SOA."
|
||||
msgstr ""
|
||||
msgstr "Tvinga SOA för HTTPS."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:127
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:130
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:637
|
||||
msgid "General Settings"
|
||||
msgstr "Generella inställningar"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:598
|
||||
msgid "Generate Coredump"
|
||||
msgstr ""
|
||||
msgstr "Generera kärndump"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:599
|
||||
msgid ""
|
||||
"Generate Coredump file when smartdns crash, coredump file is located at /tmp/"
|
||||
"smartdns.xxx.core."
|
||||
msgstr ""
|
||||
"Generera en kärndumpfil när SmartDNS kraschar. Kärndumpfilen sparas i /tmp/"
|
||||
"smartdns.xxx.core."
|
||||
|
||||
#: applications/luci-app-smartdns/root/usr/share/rpcd/acl.d/luci-app-smartdns.json:3
|
||||
msgid "Grant access to LuCI app smartdns"
|
||||
msgstr ""
|
||||
msgstr "Ge åtkomst till LuCI-appen SmartDNS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:736
|
||||
msgid "HTTP Host"
|
||||
@@ -366,53 +378,57 @@ msgstr "HTTP-värd"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:807
|
||||
msgid "IP Blacklist"
|
||||
msgstr ""
|
||||
msgstr "IP-blockeringslista"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:700
|
||||
msgid "IP Blacklist Filtering"
|
||||
msgstr ""
|
||||
msgstr "Filtrering med IP-blockeringslista"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:223
|
||||
msgid "IPV6 Server"
|
||||
msgstr "IPV6-server"
|
||||
msgstr "IPv6-server"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:439
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:845
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1061
|
||||
msgid "IPset Name"
|
||||
msgstr ""
|
||||
msgstr "IPset-namn"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:439
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:845
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1061
|
||||
msgid "IPset name."
|
||||
msgstr ""
|
||||
msgstr "IPset-namn."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1137
|
||||
msgid "If you like this software, please buy me a cup of coffee."
|
||||
msgstr ""
|
||||
msgstr "Om du uppskattar programvaran får du gärna bjuda mig på en kopp kaffe."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:352
|
||||
msgid "Include Config Files<br>/etc/smartdns/conf.d"
|
||||
msgstr ""
|
||||
msgstr "Inkludera konfigurationsfiler<br>/etc/smartdns/conf.d"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:353
|
||||
msgid ""
|
||||
"Include other config files from /etc/smartdns/conf.d or custom path, can be "
|
||||
"downloaded from the download page."
|
||||
msgstr ""
|
||||
"Inkludera andra konfigurationsfiler från /etc/smartdns/conf.d eller en "
|
||||
"anpassad sökväg. Filer kan hämtas från hämtningssidan."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:282
|
||||
msgid "Ipset name, Add domain result to ipset when speed check fails."
|
||||
msgstr ""
|
||||
"IPset-namn. Lägg till domänresultatet i ipset när hastighetskontrollen "
|
||||
"misslyckas."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:526
|
||||
msgid "List of files to download."
|
||||
msgstr ""
|
||||
msgstr "Lista över filer som ska hämtas."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:228
|
||||
msgid "Listen only on the specified interfaces."
|
||||
msgstr ""
|
||||
msgstr "Lyssna endast på de angivna gränssnitten."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:152
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:376
|
||||
@@ -421,7 +437,7 @@ msgstr "Lokal port"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:623
|
||||
msgid "Log File"
|
||||
msgstr "Logg-fil"
|
||||
msgstr "Loggfil"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:607
|
||||
msgid "Log Level"
|
||||
@@ -429,42 +445,42 @@ msgstr "Loggnivå"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:619
|
||||
msgid "Log Number"
|
||||
msgstr "Logg-nummer"
|
||||
msgstr "Antal loggfiler"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:603
|
||||
msgid "Log Size"
|
||||
msgstr "Logg-storlek"
|
||||
msgstr "Loggstorlek"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:756
|
||||
msgid "Marking Packets"
|
||||
msgstr ""
|
||||
msgstr "Paketmarkering"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:336
|
||||
msgid "Maximum TTL for all domain result."
|
||||
msgstr ""
|
||||
msgstr "Maximal TTL för alla domänresultat."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:328
|
||||
msgid "Minimum TTL for all domain result."
|
||||
msgstr ""
|
||||
msgstr "Minimal TTL för alla domänresultat."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:458
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:864
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1067
|
||||
msgid "NFTset Name"
|
||||
msgstr ""
|
||||
msgstr "NFTset-namn"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:315
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:470
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:876
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1080
|
||||
msgid "NFTset name format error, format: [#[4|6]:[family#table#set]]"
|
||||
msgstr ""
|
||||
msgstr "Felaktigt format för NFTset-namn. Format: [#[4|6]:[family#table#set]]"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:458
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:864
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1067
|
||||
msgid "NFTset name, format: [#[4|6]:[family#table#set]]"
|
||||
msgstr ""
|
||||
msgstr "NFTset-namn. Format: [#[4|6]:[family#table#set]]"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:65
|
||||
msgid "NOT RUNNING"
|
||||
@@ -472,13 +488,15 @@ msgstr "KÖRS INTE"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:233
|
||||
msgid "Name of device name listen on."
|
||||
msgstr ""
|
||||
msgstr "Namnet på enheten som ska avlyssnas."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:303
|
||||
msgid ""
|
||||
"Nftset name, Add domain result to nftset when speed check fails, format: "
|
||||
"[#[4|6]:[family#table#set]]"
|
||||
msgstr ""
|
||||
"NFTset-namn. Lägg till domänresultatet i nftset när hastighetskontrollen "
|
||||
"misslyckas. Format: [#[4|6]:[family#table#set]]"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1013
|
||||
msgid "No"
|
||||
@@ -486,15 +504,15 @@ msgstr "Nej"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:281
|
||||
msgid "No Speed IPset Name"
|
||||
msgstr ""
|
||||
msgstr "IPset-namn utan hastighetskontroll"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:302
|
||||
msgid "No Speed NFTset Name"
|
||||
msgstr ""
|
||||
msgstr "NFTset-namn utan hastighetskontroll"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:717
|
||||
msgid "No check certificate"
|
||||
msgstr ""
|
||||
msgstr "Kontrollera inte certifikatet"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:176
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:999
|
||||
@@ -504,32 +522,35 @@ msgstr "Ingen"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:783
|
||||
msgid "Only socks5 proxy support udp server."
|
||||
msgstr ""
|
||||
msgstr "Endast SOCKS5-proxy stöder UDP-server."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:779
|
||||
msgid "Please set proxy server first."
|
||||
msgstr ""
|
||||
msgstr "Konfigurera proxyservern först."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:566
|
||||
msgid "Proxy Server"
|
||||
msgstr "Proxy-server"
|
||||
msgstr "Proxyserver"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:135
|
||||
msgid "Proxy Server Settings"
|
||||
msgstr ""
|
||||
msgstr "Proxyserverinställningar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:566
|
||||
msgid "Proxy Server URL, format: [socks5|http]://user:pass@ip:port."
|
||||
msgstr ""
|
||||
msgstr "Proxyserverns URL. Format: [socks5|http]://user:pass@ip:port."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:574
|
||||
msgid ""
|
||||
"Proxy server URL format error, format: [socks5|http]://user:pass@ip:port."
|
||||
msgstr ""
|
||||
"Felaktigt URL-format för proxyserver. Format: [socks5|http]://"
|
||||
"user:pass@ip:port."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:389
|
||||
msgid "Query DNS through specific dns server group, such as office, home."
|
||||
msgstr ""
|
||||
"Gör DNS-frågor via en viss DNS-servergrupp, till exempel kontor eller hem."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:63
|
||||
msgid "RUNNING"
|
||||
@@ -537,24 +558,24 @@ msgstr "KÖRS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:340
|
||||
msgid "Reply Domain TTL Max"
|
||||
msgstr ""
|
||||
msgstr "Maximal TTL i domänsvar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:341
|
||||
msgid "Reply maximum TTL for all domain result."
|
||||
msgstr ""
|
||||
msgstr "Maximal TTL som ska anges i svar för alla domänresultat."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1149
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1150
|
||||
msgid "Report bugs"
|
||||
msgstr "Rapportera buggar"
|
||||
msgstr "Rapportera fel"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:266
|
||||
msgid "Resolve Local Hostnames"
|
||||
msgstr ""
|
||||
msgstr "Slå upp lokala värdnamn"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:266
|
||||
msgid "Resolve local hostnames by reading Dnsmasq lease file."
|
||||
msgstr ""
|
||||
msgstr "Slå upp lokala värdnamn genom att läsa Dnsmasqs lease-fil."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:208
|
||||
msgid "Response Mode"
|
||||
@@ -570,56 +591,60 @@ msgstr "Starta om tjänsten"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:132
|
||||
msgid "Second Server Settings"
|
||||
msgstr ""
|
||||
msgstr "Inställningar för sekundär server"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:251
|
||||
msgid "Serve expired"
|
||||
msgstr ""
|
||||
msgstr "Använd utgångna svar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:388
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:812
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:966
|
||||
msgid "Server Group"
|
||||
msgstr ""
|
||||
msgstr "Servergrupp"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:832
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:986
|
||||
msgid "Server Group %s not exists"
|
||||
msgstr ""
|
||||
msgstr "Servergruppen %s finns inte"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:146
|
||||
msgid "Server Name"
|
||||
msgstr "Server-namn"
|
||||
msgstr "Servernamn"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:806
|
||||
msgid "Set Specific domain ip address."
|
||||
msgstr ""
|
||||
msgstr "Ange en specifik IP-adress för domänen."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:805
|
||||
msgid "Set Specific domain rule list."
|
||||
msgstr ""
|
||||
msgstr "Ange en specifik lista med domänregler."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:807
|
||||
msgid "Set Specific ip blacklist."
|
||||
msgstr ""
|
||||
msgstr "Ange en specifik IP-blockeringslista."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:708
|
||||
msgid "Set TLS hostname to verify."
|
||||
msgstr ""
|
||||
msgstr "Ange TLS-värdnamn som ska verifieras."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:757
|
||||
msgid "Set mark on packets."
|
||||
msgstr ""
|
||||
msgstr "Ange markering på paket."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:737
|
||||
msgid ""
|
||||
"Set the HTTP host used for the query. Use this parameter when the host of "
|
||||
"the URL address is an IP address."
|
||||
msgstr ""
|
||||
"Ange HTTP-värden som används för frågan. Använd parametern när värden i URL-"
|
||||
"adressen är en IP-adress."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:727
|
||||
msgid "Sets the server name indication for query. '-' for disable SNI name."
|
||||
msgstr ""
|
||||
"Anger Server Name Indication (SNI) för frågan. Använd ”-” för att inaktivera "
|
||||
"SNI-namn."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:127
|
||||
msgid "Settings"
|
||||
@@ -627,56 +652,56 @@ msgstr "Inställningar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:401
|
||||
msgid "Skip Address Rules"
|
||||
msgstr ""
|
||||
msgstr "Hoppa över adressregler"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:430
|
||||
msgid "Skip Cache"
|
||||
msgstr ""
|
||||
msgstr "Hoppa över cache"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:430
|
||||
msgid "Skip Cache."
|
||||
msgstr ""
|
||||
msgstr "Hoppa över cache."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:424
|
||||
msgid "Skip Dualstack Selection"
|
||||
msgstr ""
|
||||
msgstr "Hoppa över dual-stack-val"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:425
|
||||
msgid "Skip Dualstack Selection."
|
||||
msgstr ""
|
||||
msgstr "Hoppa över dual-stack-val."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:413
|
||||
msgid "Skip Ipset Rule"
|
||||
msgstr ""
|
||||
msgstr "Hoppa över ipset-regel"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:407
|
||||
msgid "Skip Nameserver Rule"
|
||||
msgstr ""
|
||||
msgstr "Hoppa över namnserverregel"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:419
|
||||
msgid "Skip SOA Address Rule"
|
||||
msgstr ""
|
||||
msgstr "Hoppa över SOA-adressregel"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:420
|
||||
msgid "Skip SOA address rules."
|
||||
msgstr ""
|
||||
msgstr "Hoppa över SOA-adressregler."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:395
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:836
|
||||
msgid "Skip Speed Check"
|
||||
msgstr ""
|
||||
msgstr "Hoppa över hastighetskontroll"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:402
|
||||
msgid "Skip address rules."
|
||||
msgstr ""
|
||||
msgstr "Hoppa över adressregler."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:414
|
||||
msgid "Skip ipset rules."
|
||||
msgstr ""
|
||||
msgstr "Hoppa över ipset-regler."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:408
|
||||
msgid "Skip nameserver rules."
|
||||
msgstr ""
|
||||
msgstr "Hoppa över namnserverregler."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:94
|
||||
#: applications/luci-app-smartdns/root/usr/share/luci/menu.d/luci-app-smartdns.json:3
|
||||
@@ -692,35 +717,42 @@ msgid ""
|
||||
"SmartDNS is a local high-performance DNS server, supports finding fastest "
|
||||
"IP, supports ad filtering, and supports avoiding DNS poisoning."
|
||||
msgstr ""
|
||||
"SmartDNS är en lokal högpresterande DNS-server som kan hitta den snabbaste "
|
||||
"IP-adressen, filtrera annonser och motverka DNS-förgiftning."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1141
|
||||
msgid "SmartDNS official website"
|
||||
msgstr ""
|
||||
msgstr "SmartDNS officiella webbplats"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:376
|
||||
msgid "Smartdns local server port"
|
||||
msgstr ""
|
||||
msgstr "SmartDNS lokala serverport"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:153
|
||||
msgid ""
|
||||
"Smartdns local server port, smartdns will be automatically set as main dns "
|
||||
"when the port is 53."
|
||||
msgstr ""
|
||||
"SmartDNS lokala serverport. SmartDNS anges automatiskt som huvudsaklig DNS-"
|
||||
"server när porten är 53."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:209
|
||||
msgid ""
|
||||
"Smartdns response mode, First Ping: return the first ping IP, Fastest IP: "
|
||||
"return the fastest IP, Fastest Response: return the fastest DNS response."
|
||||
msgstr ""
|
||||
"SmartDNS svarsläge. Första ping: returnera den första IP-adressen som svarar "
|
||||
"på ping. Snabbaste IP: returnera den snabbaste IP-adressen. Snabbaste svar: "
|
||||
"returnera det snabbaste DNS-svaret."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:146
|
||||
msgid "Smartdns server name"
|
||||
msgstr ""
|
||||
msgstr "SmartDNS-servernamn"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:168
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1015
|
||||
msgid "Smartdns speed check mode."
|
||||
msgstr ""
|
||||
msgstr "SmartDNS-läge för hastighetskontroll."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1118
|
||||
msgid ""
|
||||
@@ -728,16 +760,19 @@ msgid ""
|
||||
"in the domains are never forwarded and always replied to with the specified "
|
||||
"IP address which may be IPv4 or IPv6."
|
||||
msgstr ""
|
||||
"Ange en IP-adress som ska returneras för alla värdar i de angivna domänerna. "
|
||||
"Frågor inom domänerna vidarebefordras aldrig utan besvaras alltid med den "
|
||||
"angivna IP-adressen, som kan vara IPv4 eller IPv6."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:168
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1015
|
||||
msgid "Speed Check Mode"
|
||||
msgstr ""
|
||||
msgstr "Läge för hastighetskontroll"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:201
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1049
|
||||
msgid "Speed check mode is invalid."
|
||||
msgstr ""
|
||||
msgstr "Läget för hastighetskontroll är ogiltigt."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:218
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:383
|
||||
@@ -747,23 +782,23 @@ msgstr "TCP-server"
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:195
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1043
|
||||
msgid "TCP port is empty"
|
||||
msgstr ""
|
||||
msgstr "TCP-port saknas"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:707
|
||||
msgid "TLS Hostname Verify"
|
||||
msgstr ""
|
||||
msgstr "Verifiering av TLS-värdnamn"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:726
|
||||
msgid "TLS SNI name"
|
||||
msgstr ""
|
||||
msgstr "TLS-SNI-namn"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:745
|
||||
msgid "TLS SPKI Pinning"
|
||||
msgstr ""
|
||||
msgstr "TLS-SPKI-pinning"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:323
|
||||
msgid "TTL for all domain result."
|
||||
msgstr ""
|
||||
msgstr "TTL för alla domänresultat."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1136
|
||||
msgid "Technical Support"
|
||||
@@ -775,7 +810,7 @@ msgstr "URL"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:547
|
||||
msgid "URL format error, format: http:// or https://"
|
||||
msgstr ""
|
||||
msgstr "Felaktigt URL-format. Format: http:// eller https://"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:522
|
||||
msgid "Update"
|
||||
@@ -787,15 +822,15 @@ msgstr "Uppdatera filer"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:499
|
||||
msgid "Upload Config File"
|
||||
msgstr ""
|
||||
msgstr "Ladda upp konfigurationsfil"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:506
|
||||
msgid "Upload Domain List File"
|
||||
msgstr ""
|
||||
msgstr "Ladda upp domänlistefil"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:507
|
||||
msgid "Upload domain list file to /etc/smartdns/domain-set"
|
||||
msgstr ""
|
||||
msgstr "Ladda upp domänlistefil till /etc/smartdns/domain-set"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:891
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:991
|
||||
@@ -803,14 +838,16 @@ msgid ""
|
||||
"Upload domain list file, or configure auto download from Download File "
|
||||
"Setting page."
|
||||
msgstr ""
|
||||
"Ladda upp en domänlistefil eller konfigurera automatisk hämtning på sidan "
|
||||
"med inställningar för filhämtning."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:920
|
||||
msgid "Upload domain list file."
|
||||
msgstr ""
|
||||
msgstr "Ladda upp domänlistefil."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:500
|
||||
msgid "Upload smartdns config file to /etc/smartdns/conf.d"
|
||||
msgstr ""
|
||||
msgstr "Ladda upp SmartDNS-konfigurationsfil till /etc/smartdns/conf.d"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:630
|
||||
msgid "Upstream Servers"
|
||||
@@ -821,6 +858,8 @@ msgid ""
|
||||
"Upstream Servers, support UDP, TCP protocol. Please configure multiple DNS "
|
||||
"servers, including multiple foreign DNS servers."
|
||||
msgstr ""
|
||||
"Uppströmsservrar med stöd för UDP- och TCP-protokoll. Konfigurera flera DNS-"
|
||||
"servrar, inklusive flera externa DNS-servrar."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:764
|
||||
msgid "Use Proxy"
|
||||
@@ -828,7 +867,7 @@ msgstr "Använd proxy"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:765
|
||||
msgid "Use proxy to connect to upstream DNS server."
|
||||
msgstr ""
|
||||
msgstr "Använd proxy för att ansluta till uppströms DNS-server."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:746
|
||||
msgid ""
|
||||
@@ -836,10 +875,12 @@ msgid ""
|
||||
"SPKI fingerprint, leaving blank to indicate that the validity of TLS is not "
|
||||
"verified."
|
||||
msgstr ""
|
||||
"Används för att verifiera TLS-serverns giltighet. Värdet är ett Base64-kodat "
|
||||
"SPKI-fingeravtryck. Lämna tomt om TLS-serverns giltighet inte ska verifieras."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:261
|
||||
msgid "Write cache to disk on exit and load on startup."
|
||||
msgstr ""
|
||||
msgstr "Skriv cachen till disk vid avslutning och läs in den vid start."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1012
|
||||
msgid "Yes"
|
||||
@@ -855,7 +896,7 @@ msgstr "standard"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:554
|
||||
msgid "domain list (/etc/smartdns/domain-set)"
|
||||
msgstr ""
|
||||
msgstr "domänlista (/etc/smartdns/domain-set)"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:669
|
||||
msgid "https"
|
||||
@@ -865,19 +906,19 @@ msgstr "https"
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:451
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:857
|
||||
msgid "ipset name format error, format: [#[4|6]:]ipsetname"
|
||||
msgstr ""
|
||||
msgstr "Felaktigt format för ipset-namn. Format: [#[4|6]:]ipsetname"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1142
|
||||
msgid "open website"
|
||||
msgstr "öppna hemsida"
|
||||
msgstr "öppna webbplatsen"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:555
|
||||
msgid "smartdns config (/etc/smartdns/conf.d)"
|
||||
msgstr ""
|
||||
msgstr "SmartDNS-konfiguration (/etc/smartdns/conf.d)"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:584
|
||||
msgid "smartdns custom settings"
|
||||
msgstr ""
|
||||
msgstr "Anpassade SmartDNS-inställningar"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:667
|
||||
msgid "tcp"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2026-03-22 17:10+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
|
||||
"PO-Revision-Date: 2026-08-13 09:16+0000\n"
|
||||
"Last-Translator: Jonatan Nyberg <nickwick@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationstransmission/sv/>\n"
|
||||
"Language: sv\n"
|
||||
@@ -10,7 +10,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.17-dev\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:65
|
||||
msgid "Alternative download speed"
|
||||
@@ -22,19 +22,19 @@ msgstr "Alternativ hastighet aktiverat"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:277
|
||||
msgid "Alternative speed time begin"
|
||||
msgstr ""
|
||||
msgstr "Starttid för alternativ hastighet"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:283
|
||||
msgid "Alternative speed time day"
|
||||
msgstr ""
|
||||
msgstr "Dagar för alternativ hastighet"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:280
|
||||
msgid "Alternative speed time end"
|
||||
msgstr ""
|
||||
msgstr "Sluttid för alternativ hastighet"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:274
|
||||
msgid "Alternative speed timing enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera tidsstyrning för alternativ hastighet"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:62
|
||||
msgid "Alternative upload speed"
|
||||
@@ -50,11 +50,11 @@ msgstr "Inställningar för bandbredd"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:174
|
||||
msgid "Binding address IPv4"
|
||||
msgstr ""
|
||||
msgstr "Bindningsadress för IPv4"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:176
|
||||
msgid "Binding address IPv6"
|
||||
msgstr ""
|
||||
msgstr "Bindningsadress för IPv6"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:86
|
||||
msgid "Block list enabled"
|
||||
@@ -74,12 +74,11 @@ msgstr "Storlek på cache i MB"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:50
|
||||
msgid "Config file directory"
|
||||
msgstr "Ställ in fil-mapp"
|
||||
msgstr "Konfigurationsfilens katalog"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:53
|
||||
#, fuzzy
|
||||
msgid "Custom Web UI directory"
|
||||
msgstr "Ställ in fil-mapp"
|
||||
msgstr "Egen katalog för webbgränssnitt"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:133
|
||||
msgid "DHT enabled"
|
||||
@@ -87,11 +86,11 @@ msgstr "DHT aktiverat"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:151
|
||||
msgid "Debug"
|
||||
msgstr "Felsök"
|
||||
msgstr "Felsökning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:97
|
||||
msgid "Download directory"
|
||||
msgstr "Nedladdningsmapp"
|
||||
msgstr "Hämtningskatalog"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:211
|
||||
msgid "Download queue enabled"
|
||||
@@ -131,7 +130,7 @@ msgstr "Fullständig"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:183
|
||||
msgid "Global peer limit"
|
||||
msgstr ""
|
||||
msgstr "Global gräns för jämlikar"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:44
|
||||
msgid "Global settings"
|
||||
@@ -139,23 +138,23 @@ msgstr "Globala inställningar"
|
||||
|
||||
#: applications/luci-app-transmission/root/usr/share/rpcd/acl.d/luci-app-transmission.json:3
|
||||
msgid "Grant UCI access for luci-app-transmission"
|
||||
msgstr ""
|
||||
msgstr "Ge luci-app-transmission åtkomst till UCI"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:289
|
||||
msgid "Idle seeding limit"
|
||||
msgstr ""
|
||||
msgstr "Gräns för inaktiv seedning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:286
|
||||
msgid "Idle seeding limit enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera gräns för inaktiv seedning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:102
|
||||
msgid "Incomplete directory"
|
||||
msgstr "Ej komplett mapp"
|
||||
msgstr "Ofullständig katalog"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:99
|
||||
msgid "Incomplete directory enabled"
|
||||
msgstr "Ej komplett mapp aktiverad"
|
||||
msgstr "Katalog för ofullständiga hämtningar aktiverad"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:150
|
||||
msgid "Info"
|
||||
@@ -187,6 +186,9 @@ msgid ""
|
||||
"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - "
|
||||
"8, Thursday - 16, Friday - 32, Saturday - 64"
|
||||
msgstr ""
|
||||
"Tal/bitfält. Börja med 0 och lägg sedan till ett värde för varje dag som "
|
||||
"schemaläggaren ska vara aktiverad. Söndag – 1, måndag – 2, tisdag – 4, "
|
||||
"onsdag – 8, torsdag – 16, fredag – 32, lördag – 64"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:106
|
||||
msgid "Off"
|
||||
@@ -194,7 +196,7 @@ msgstr "Av"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:38
|
||||
msgid "Open Web Interface"
|
||||
msgstr "Öppna webbgränssnittet"
|
||||
msgstr "öppna webbgränssnittet"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:153
|
||||
msgid "PEX enabled"
|
||||
@@ -202,69 +204,67 @@ msgstr "PEX aktiverat"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:190
|
||||
msgid "Peer Port settings"
|
||||
msgstr ""
|
||||
msgstr "Inställningar för jämlikeport"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:178
|
||||
msgid "Peer congestion algorithm"
|
||||
msgstr ""
|
||||
msgstr "Överbelastningsalgoritm för jämlikar"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:185
|
||||
msgid "Peer limit per torrent"
|
||||
msgstr ""
|
||||
msgstr "Gräns för jämlikar per torrent"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:193
|
||||
msgid "Peer port"
|
||||
msgstr ""
|
||||
msgstr "Jämlikeport"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:198
|
||||
msgid "Peer port random high"
|
||||
msgstr ""
|
||||
msgstr "Övre gräns för slumpmässig jämlikeport"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:201
|
||||
msgid "Peer port random low"
|
||||
msgstr ""
|
||||
msgstr "Nedre gräns för slumpmässig jämlikeport"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:195
|
||||
msgid "Peer port random on start"
|
||||
msgstr ""
|
||||
msgstr "Slumpa jämlikeport vid start"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:171
|
||||
msgid "Peer settings"
|
||||
msgstr ""
|
||||
msgstr "Inställningar för jämlikar"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:187
|
||||
msgid "Peer socket <abbr title=\"Type of Service\">TOS</abbr>"
|
||||
msgstr ""
|
||||
msgstr "<abbr title=\"Type of Service\">TOS</abbr> för jämlikesocket"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:204
|
||||
msgid "Port forwarding enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera portvidarebefordran"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:105
|
||||
msgid "Preallocation"
|
||||
msgstr "Fördelning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:138
|
||||
#, fuzzy
|
||||
msgid "Prefer encrypted"
|
||||
msgstr "Föredraget"
|
||||
msgstr "Föredra krypterat"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:137
|
||||
#, fuzzy
|
||||
msgid "Prefer unencrypted"
|
||||
msgstr "Föredraget"
|
||||
msgstr "Föredra okrypterat"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:156
|
||||
msgid "Prefetch enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera förhämtning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:214
|
||||
msgid "Queue stalled enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera kö för avstannade torrentar"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:223
|
||||
msgid "Queue stalled minutes"
|
||||
msgstr ""
|
||||
msgstr "Minuter innan en torrent räknas som avstannad"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:208
|
||||
msgid "Queueing"
|
||||
@@ -287,14 +287,12 @@ msgid "RPC enabled"
|
||||
msgstr "RPC aktiverat"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:249
|
||||
#, fuzzy
|
||||
msgid "RPC host whitelist"
|
||||
msgstr "Vitlista för RPC"
|
||||
msgstr "Tillåtelselista för RPC-värdar"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:245
|
||||
#, fuzzy
|
||||
msgid "RPC host whitelist enabled"
|
||||
msgstr "Vitlistan för RPC aktiverad"
|
||||
msgstr "Tillåtelselista för RPC-värdar aktiverad"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:266
|
||||
msgid "RPC password"
|
||||
@@ -314,23 +312,23 @@ msgstr "RPC-användarnamn"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:256
|
||||
msgid "RPC whitelist"
|
||||
msgstr "Vitlista för RPC"
|
||||
msgstr "RPC-tillåtelselista"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:252
|
||||
msgid "RPC whitelist enabled"
|
||||
msgstr "Vitlistan för RPC aktiverad"
|
||||
msgstr "RPC-tillåtelselista aktiverad"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:295
|
||||
msgid "Ratio limit"
|
||||
msgstr ""
|
||||
msgstr "Kvotgräns"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:292
|
||||
msgid "Ratio limit enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera kvotgräns"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:181
|
||||
msgid "Recycle peer id after"
|
||||
msgstr ""
|
||||
msgstr "Återanvänd jämlike-ID efter"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:110
|
||||
msgid "Rename partial files"
|
||||
@@ -338,15 +336,15 @@ msgstr "Döp om icke fullständiga filer"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:139
|
||||
msgid "Require encrypted"
|
||||
msgstr ""
|
||||
msgstr "Kräv krypterat"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:52
|
||||
msgid "Run daemon as group"
|
||||
msgstr "Kör daemon som grupp"
|
||||
msgstr "Kör demonen som grupp"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:51
|
||||
msgid "Run daemon as user"
|
||||
msgstr "Kör daemon som användare"
|
||||
msgstr "Kör demonen som användare"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:271
|
||||
msgid "Scheduling"
|
||||
@@ -354,39 +352,39 @@ msgstr "Schemaläggning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:158
|
||||
msgid "Scrape paused torrents enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera scrape för pausade torrentar"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:161
|
||||
msgid "Script torrent done enabled"
|
||||
msgstr ""
|
||||
msgstr "Kör skript när torrent är klar"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:164
|
||||
msgid "Script torrent done filename"
|
||||
msgstr ""
|
||||
msgstr "Skriptfil att köra när torrent är klar"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:220
|
||||
msgid "Seed queue enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera seedningskö"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:226
|
||||
msgid "Seed queue size"
|
||||
msgstr ""
|
||||
msgstr "Storlek på seedningskö"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:71
|
||||
msgid "Speed limit down"
|
||||
msgstr ""
|
||||
msgstr "Hastighetsgräns för hämtning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:68
|
||||
msgid "Speed limit down enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera hastighetsgräns för hämtning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:77
|
||||
msgid "Speed limit up"
|
||||
msgstr ""
|
||||
msgstr "Hastighetsgräns för uppladdning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:74
|
||||
msgid "Speed limit up enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktivera hastighetsgräns för uppladdning"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:179
|
||||
msgid ""
|
||||
@@ -413,7 +411,7 @@ msgstr "Släng de ordinarie torrent-filerna i papperskorgen"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:80
|
||||
msgid "Upload slots per torrent"
|
||||
msgstr ""
|
||||
msgstr "Uppladdningsplatser per torrent"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:124
|
||||
msgid "Watch directory"
|
||||
@@ -421,7 +419,7 @@ msgstr "Övervaka mapp"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:274
|
||||
msgid "When enabled, this will toggle the <b>alt-speed-enabled</b> setting"
|
||||
msgstr ""
|
||||
msgstr "När detta är aktiverat växlas inställningen <b>alt-speed-enabled</b>"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:181
|
||||
msgid "hours"
|
||||
@@ -430,7 +428,7 @@ msgstr "timmar"
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:277
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:280
|
||||
msgid "in minutes from midnight"
|
||||
msgstr ""
|
||||
msgstr "i minuter från midnatt"
|
||||
|
||||
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:167
|
||||
msgid "uTP enabled"
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-05-02 12:18+0000\n"
|
||||
"Last-Translator: BoneNI <bounkirdni@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-15 13:06+0000\n"
|
||||
"Last-Translator: Bone NI <bounkirdni@gmail.com>\n"
|
||||
"Language-Team: Lao <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationswatchcat/lo/>\n"
|
||||
"Language: lo\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.17.1\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:94
|
||||
msgid ""
|
||||
@@ -138,7 +138,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:102
|
||||
msgid "Interface"
|
||||
msgstr "ອິນເຕີເຟດ"
|
||||
msgstr "ອິນເຕີເຟສ"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:103
|
||||
msgid "Interface to monitor and/or restart"
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2025-07-15 10:11+0000\n"
|
||||
"Last-Translator: Stefan Bjornelund the Gnome "
|
||||
"<stefan.bjornelund.gnome@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-13 08:03+0000\n"
|
||||
"Last-Translator: Jonatan Nyberg <nickwick@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationswatchcat/sv/>\n"
|
||||
"Language: sv\n"
|
||||
@@ -11,7 +10,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13-dev\n"
|
||||
"X-Generator: Weblate 2026.9.dev0\n"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:94
|
||||
msgid ""
|
||||
@@ -34,6 +33,9 @@ msgid ""
|
||||
"ModemManager, you can have Watchcat restart your ModemManager interface by "
|
||||
"specifying its name."
|
||||
msgstr ""
|
||||
"<i>Gäller lägena Ping-omstart och Starta om gränssnitt</i> <br /> Om du "
|
||||
"använder ModemManager kan Watchcat starta om ditt ModemManager-gränssnitt om "
|
||||
"du anger dess namn."
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:104
|
||||
msgid ""
|
||||
@@ -50,7 +52,7 @@ msgstr "Adress-familjen för att pinga värden"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:65
|
||||
msgid "Any"
|
||||
msgstr ""
|
||||
msgstr "Valfri"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:84
|
||||
msgid "Big: 248 bytes"
|
||||
@@ -66,7 +68,7 @@ msgstr "Påtvinga fördröjning av omstart"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:19
|
||||
msgid "General Settings"
|
||||
msgstr "Generella inställningar"
|
||||
msgstr "Allmänna inställningar"
|
||||
|
||||
#: applications/luci-app-watchcat/root/usr/share/rpcd/acl.d/luci-app-watchcat.json:3
|
||||
msgid "Grant access to LuCI app watchcat"
|
||||
@@ -78,10 +80,13 @@ msgid ""
|
||||
"host becomes unreachable. Click the <b>Add</b> button at the bottom to set "
|
||||
"up more than one action."
|
||||
msgstr ""
|
||||
"Här kan du konfigurera flera kontroller och åtgärder som ska utföras om en "
|
||||
"värd blir onåbar. Klicka på knappen <b>Lägg till</b> längst ned för att "
|
||||
"konfigurera fler än en åtgärd."
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:52
|
||||
msgid "Hosts To Check"
|
||||
msgstr ""
|
||||
msgstr "Värdar att kontrollera"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:71
|
||||
msgid ""
|
||||
@@ -92,6 +97,11 @@ msgid ""
|
||||
"b></li><li>1 hour would be: <b>1h</b></li><li>1 week would be: <b>7d</b></"
|
||||
"li><ul>"
|
||||
msgstr ""
|
||||
"Hur ofta värden ovan ska pingas. <br /><br />Standardenheten är sekunder "
|
||||
"utan suffix, men du kan använda suffixet <b>m</b> för minuter, <b>h</b> för "
|
||||
"timmar eller <b>d</b> för dagar. <br /><br /> Exempel:<ul><li>10 sekunder: "
|
||||
"<b>10</b> eller <b>10s</b></li><li>5 minuter: <b>5m</b></li><li>1 timme: "
|
||||
"<b>1h</b></li><li>1 vecka: <b>7d</b></li><ul>"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:85
|
||||
msgid "Huge: 1492 bytes"
|
||||
@@ -99,7 +109,7 @@ msgstr "Jättestor: 1492 bytes"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:52
|
||||
msgid "IP addresses or hostnames to ping."
|
||||
msgstr ""
|
||||
msgstr "IP-adresser eller värdnamn som ska pingas."
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:118
|
||||
msgid ""
|
||||
@@ -122,6 +132,15 @@ msgid ""
|
||||
"li><li>5 minutes would be: <b>5m</b></li><li> 1 hour would be: <b>1h</b></"
|
||||
"li><li>1 week would be: <b>7d</b></li><ul>"
|
||||
msgstr ""
|
||||
"I läget Periodisk omstart anger detta hur ofta enheten ska startas om. <br /"
|
||||
"> I läget Ping-omstart anger det den längsta tiden utan svar från värden som "
|
||||
"ska kontrolleras innan en omstart görs. <br /> I läget Starta om nätverk "
|
||||
"eller Kör skript anger det den längsta tiden utan svar från värden innan "
|
||||
"gränssnittet startas om eller skriptet körs. <br /><br />Standardenheten är "
|
||||
"sekunder utan suffix, men du kan använda suffixet <b>m</b> för minuter, "
|
||||
"<b>h</b> för timmar eller <b>d</b> för dagar. <br /><br />Exempel:<ul><li>10 "
|
||||
"sekunder: <b>10</b> eller <b>10s</b></li><li>5 minuter: <b>5m</b></li><li>1 "
|
||||
"timme: <b>1h</b></li><li>1 vecka: <b>7d</b></li><ul>"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:102
|
||||
msgid "Interface"
|
||||
@@ -168,6 +187,12 @@ msgid ""
|
||||
"time. <br /> Run Script: Run a script if a ping to a specified host fails "
|
||||
"for a specified duration of time. <br />"
|
||||
msgstr ""
|
||||
"Ping-omstart: Starta om enheten om ping till en angiven värd misslyckas "
|
||||
"under en angiven tidsperiod. <br /> Periodisk omstart: Starta om enheten "
|
||||
"efter ett angivet tidsintervall. <br /> Starta om gränssnitt: Starta om ett "
|
||||
"nätverksgränssnitt om ping till en angiven värd misslyckas under en angiven "
|
||||
"tidsperiod. <br /> Kör skript: Kör ett skript om ping till en angiven värd "
|
||||
"misslyckas under en angiven tidsperiod. <br />"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:29
|
||||
msgid "Restart Interface"
|
||||
@@ -186,6 +211,8 @@ msgid ""
|
||||
"Script to run when the host has not responded for the specified duration of "
|
||||
"time. The script is passed the interface name as $1"
|
||||
msgstr ""
|
||||
"Skript som ska köras när värden inte har svarat under den angivna "
|
||||
"tidsperioden. Gränssnittsnamnet skickas till skriptet som $1"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:81
|
||||
msgid "Small: 1 byte"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2026-04-18 17:10+0000\n"
|
||||
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-08-06 20:04+0000\n"
|
||||
"Last-Translator: egemen <egmen@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Turkish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationswatchcat/tr/>\n"
|
||||
"Language: tr\n"
|
||||
@@ -10,7 +10,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
"X-Generator: Weblate 2026.8.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:94
|
||||
msgid ""
|
||||
@@ -87,7 +87,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:52
|
||||
msgid "Hosts To Check"
|
||||
msgstr ""
|
||||
msgstr "Kontrol Edilecek Sunucular"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:71
|
||||
msgid ""
|
||||
@@ -111,7 +111,7 @@ msgstr "Çok Büyük: 1492 bayt"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:52
|
||||
msgid "IP addresses or hostnames to ping."
|
||||
msgstr ""
|
||||
msgstr "Ping atılacak IP adresleri veya ana bilgisayar adları."
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:118
|
||||
msgid ""
|
||||
|
||||
@@ -17,7 +17,7 @@ LUCI_NAME:=luci-theme-footstrap
|
||||
FOOTSTRAP_VERSION?=
|
||||
ifneq ($(FOOTSTRAP_VERSION),)
|
||||
PKG_VERSION:=$(FOOTSTRAP_VERSION)
|
||||
PKG_RELEASE:=34
|
||||
PKG_RELEASE:=35
|
||||
endif
|
||||
|
||||
LUCI_TITLE:=Footstrap Theme
|
||||
|
||||
@@ -226,15 +226,24 @@ function scrollTop() {
|
||||
}
|
||||
|
||||
function scrolling() { return Date.now() < _movingUntil; }
|
||||
/* how many times the offset has moved in this stretch: >1 is a scroll, 1 is a compensation */
|
||||
let _steps = 0;
|
||||
|
||||
function sampleMotion() {
|
||||
const y = scrollTop();
|
||||
if (_lastOffset === null || y !== _lastOffset) {
|
||||
/* HOW MANY TIMES the offset has moved inside this stretch of movement, not just that it did.
|
||||
* One step is what a compensation looks like — the engine puts the offset somewhere and it
|
||||
* stays there. A scroll is a SERIES. `lateDrift()` is the only caller that needs to tell the
|
||||
* two apart, and this is the cheapest thing that can: it is counted in a loop that already
|
||||
* runs, from a value it already reads. */
|
||||
if (_lastOffset !== null) _steps++;
|
||||
_lastOffset = y;
|
||||
_movingUntil = Date.now() + SCROLL_IDLE;
|
||||
}
|
||||
if (scrolling()) { requestAnimationFrame(sampleMotion); return; }
|
||||
_sampling = false;
|
||||
_steps = 0;
|
||||
/* the reader has stopped: this is a still moment, so the floor and the reference both belong to
|
||||
* where the page now stands */
|
||||
holdFloor();
|
||||
@@ -242,9 +251,18 @@ function sampleMotion() {
|
||||
/* the page has held still for SCROLL_IDLE: whatever was put off may run now */
|
||||
if (_deferred) {
|
||||
_deferred = false;
|
||||
const ref = anchorRef();
|
||||
/* NO CORRECTION FOR THIS BATCH, and that is deliberate. What runs here is work the fitters
|
||||
* put off because the reader was moving; the page they are about to change is a page the
|
||||
* reader has just scrolled through, and the two references available are both wrong for it.
|
||||
* A FRESH one describes the page after the scroll — against an offset WebKit may not have
|
||||
* laid out yet, which made the theme undo the reader's own move (measured at 1440, top,
|
||||
* Compact: parked at 591, put back to 0). The one from the last STILL page describes where
|
||||
* the reader was before the flick, and correcting to it drags them back there — the gate
|
||||
* caught exactly that as a 231px jump landing inside a scroll, on all three engines. Nothing
|
||||
* here is a poll tick: the fitters do not grow the page under anybody, they re-measure what
|
||||
* the scroll already showed. The next mutation corrects against a reference taken while the
|
||||
* page was still, which is the one that is true. */
|
||||
run();
|
||||
scheduleAnchor(ref);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,12 +277,26 @@ function noteMotion() {
|
||||
* and `scroll` does not bubble from an element — it only travels down the capture phase, which is
|
||||
* how the sidebar layout's inner scroller is seen as well as the document. The events only START
|
||||
* the sampler; whether the page is still moving is the sampler's answer, not theirs. */
|
||||
/* IS THE READER DRIVING, as opposed to the page moving?
|
||||
*
|
||||
* `scrolling()` above cannot tell those apart, and must not: every pass that reads layout has to
|
||||
* stay out of a moving page whoever is moving it. `lateDrift()` asks the other question — a scroll
|
||||
* offset that changed because the ENGINE compensated a mutation is precisely what it exists to
|
||||
* inspect, and gating it on `scrolling()` made it fire never (measured: `late:busy` on every tick,
|
||||
* because the engine's own correction starts the motion sampler). A gesture is what says the reader
|
||||
* is driving, so the gesture is what it asks about. `mousedown` is in the list for the scrollbar
|
||||
* thumb and `keydown` for Page Down, neither of which produces a wheel or a touch. */
|
||||
let _userUntil = 0;
|
||||
function noteUser() {
|
||||
_userUntil = Date.now() + SCROLL_IDLE;
|
||||
noteMotion();
|
||||
}
|
||||
|
||||
(function watchMotion() {
|
||||
const opts = { passive: true, capture: true };
|
||||
window.addEventListener('scroll', noteMotion, opts);
|
||||
window.addEventListener('wheel', noteMotion, opts);
|
||||
window.addEventListener('touchstart', noteMotion, opts);
|
||||
window.addEventListener('touchmove', noteMotion, opts);
|
||||
for (const name of [ 'wheel', 'touchstart', 'touchmove', 'mousedown', 'keydown' ])
|
||||
window.addEventListener(name, noteUser, opts);
|
||||
})();
|
||||
|
||||
/* Next frame, at most once per frame (rule 3). */
|
||||
@@ -346,7 +378,9 @@ function watch(el) {
|
||||
* a drift under a pixel is rounding rather than movement. */
|
||||
/* DOES THE ENGINE ANCHOR AT ALL? Chromium and Firefox compensate a height change above the viewport
|
||||
* by themselves — the reader stays where they were and the scroll offset moves under them. WebKit
|
||||
* has never implemented it, so on Safari and on every iPhone the same poll tick moves the page:
|
||||
* did not implement it until recently, so on an older Safari and on every iPhone of that vintage the
|
||||
* same poll tick moves the page (a current WebKit anchors, and gets the COLLAPSE case wrong instead —
|
||||
* lateDrift() below):
|
||||
* measured with the engine's anchoring suppressed, a 120px growth above the fold moves the reader
|
||||
* 120px, and 0px with it on.
|
||||
*
|
||||
@@ -389,13 +423,24 @@ function forgetRest() {
|
||||
_restPage = null;
|
||||
}
|
||||
function rememberRest() {
|
||||
if (ENGINE_ANCHORS || scrolling()) return;
|
||||
if (scrolling()) return;
|
||||
/* A PAGE AT THE TOP HAS NOTHING TO BE PUT BACK TO, so it does not pay for a reference. Every
|
||||
* correction here gives back offset the reader lost; at offset 0 there is none to lose, and the
|
||||
* hit test plus rect that anchorRef() costs (0.2ms typical, 6ms worst on a poll-dirtied WebKit
|
||||
* layout, measured on the stands) buys nothing. The offset is still remembered — it is one read,
|
||||
* and `anchorFor()`'s clamp test is written in terms of it. */
|
||||
if (ENGINE_ANCHORS && scrollTop() <= 0) {
|
||||
_rest = null;
|
||||
_restAt = 0;
|
||||
_restPage = pageStamp();
|
||||
return;
|
||||
}
|
||||
const ref = anchorRef();
|
||||
/* the offset it was taken at travels with it: a reference is only about the page, and the page
|
||||
* moving under the reader is a different fact from the reader moving through it */
|
||||
_restAt = scrollTop();
|
||||
_restPage = pageStamp();
|
||||
_rest = ref ? { el: ref.el, top: ref.top, at: _restAt } : null;
|
||||
_rest = ref ? { el: ref.el, top: ref.top, at: _restAt, sec: ref.sec, secTop: ref.secTop } : null;
|
||||
}
|
||||
|
||||
/* -> the reference to correct against: the pre-mutation one where the engine leaves that to us, the
|
||||
@@ -428,8 +473,14 @@ function anchorFor() {
|
||||
* is shorter now, the browser clamps the write straight back and the reader keeps the offset they
|
||||
* already had. The element path below stays preferred where it survives, because it compensates
|
||||
* the height change the tick brought with it as well. */
|
||||
if (!_rest || !_rest.el.isConnected)
|
||||
return clamped ? { by: _restAt - at } : anchorRef();
|
||||
if (!_rest || !_rest.el.isConnected) {
|
||||
if (clamped) return { by: _restAt - at };
|
||||
/* the element is gone but its section is not — see anchorRef() for why that is the common
|
||||
* case rather than an edge one */
|
||||
if (_rest && _rest.sec && _rest.sec.isConnected && at === _restAt)
|
||||
return { el: _rest.sec, top: _rest.secTop, slack: 0 };
|
||||
return anchorRef();
|
||||
}
|
||||
/* THE READER MOVED, NOT THE PAGE. A reference taken at one offset says nothing about a document
|
||||
* seen from another: correcting against it would drag the page back to where the reader had
|
||||
* scrolled FROM. So an offset that is not the one the reference was captured at normally means
|
||||
@@ -455,7 +506,15 @@ function anchorFor() {
|
||||
*
|
||||
* Measured on the same harness with the reader flicking while the swap lands: the theme writes
|
||||
* no offset at all, before this change and after it. */
|
||||
if (at !== _rest.at && !clamped) return anchorRef();
|
||||
/* THE READER MOVED, SO THERE IS NOTHING TO PUT BACK — and taking a fresh reference here is worse
|
||||
* than taking none. `anchorRef()` reads a rect, and a scroll that has only just landed leaves
|
||||
* WebKit reporting the NEW `scrollTop` against the OLD layout: the reference then describes the
|
||||
* page from before the scroll, the correction a frame later measures the scroll itself, and the
|
||||
* reader is dragged back to where they started. Measured on the 24.10 stand at 1440, top layout,
|
||||
* Compact density: parked at 591, put back to 0, every run, on both the engine-anchoring path and
|
||||
* the fallback. A tick that lands right after a scroll compensates nothing; the next still moment
|
||||
* takes a reference that is true. */
|
||||
if (at !== _rest.at && !clamped) return null;
|
||||
/* HOW MUCH OF THE DRIFT IS ALREADY ACCOUNTED FOR. applyAnchor() refuses a correction bigger than
|
||||
* a viewport because a drift that size normally means the view replaced its whole subtree and
|
||||
* the reference is describing a page that no longer exists. A clamp is the one drift that big
|
||||
@@ -496,15 +555,65 @@ function anchorRef() {
|
||||
let y = 1;
|
||||
let el = document.elementFromPoint(x, y);
|
||||
const chrome = el && el.closest ? el.closest('[data-fs-chrome]') : null;
|
||||
if (chrome) {
|
||||
y = Math.max(1, Math.round(chrome.getBoundingClientRect().bottom) + 1);
|
||||
el = document.elementFromPoint(x, y);
|
||||
}
|
||||
if (!el || !host.contains(el)) return null;
|
||||
if (chrome) y = Math.max(1, Math.round(chrome.getBoundingClientRect().bottom) + 1);
|
||||
|
||||
/* THE HIT IS A SEARCH, NOT A SINGLE PROBE, and neither the host nor anything outside it counts.
|
||||
*
|
||||
* `elementFromPoint` answers with whatever is topmost, and two of those answers are useless here.
|
||||
* `#view` itself comes back wherever the point lands in a GAP — the margin between two sections,
|
||||
* the gutter of the Overview's two-column grid — and the host's own top does not move when a poll
|
||||
* changes something inside it, so a drift measured against it is zero on every tick, for ever.
|
||||
* And a point above the first section answers with `.fs-content`, which is not inside the host at
|
||||
* all: the first version returned null there without trying anywhere else, so on 25.12's Overview
|
||||
* at 1440 the theme had no reference AT ALL and a 120px growth moved the page 120px.
|
||||
*
|
||||
* So: take the whole STACK at the point (what a gap belongs to is directly underneath it), and if
|
||||
* that yields nothing inside the host, step down the viewport and ask again. */
|
||||
const floor = Math.max(1, Math.round(window.innerHeight || 800));
|
||||
const pick = (yy) => {
|
||||
if (typeof document.elementsFromPoint === 'function') {
|
||||
for (const cand of document.elementsFromPoint(x, yy))
|
||||
if (cand !== host && host.contains(cand)) return cand;
|
||||
return null;
|
||||
}
|
||||
const one = document.elementFromPoint(x, yy);
|
||||
return (one && one !== host && host.contains(one)) ? one : null;
|
||||
};
|
||||
el = null;
|
||||
for (let step = 0; step < 5 && !el; step++)
|
||||
el = pick(Math.min(floor - 1, y + (Math.round(floor * 0.12) * step)));
|
||||
if (!el) return null;
|
||||
const table = el.closest('.table.fs-dt');
|
||||
if (table) el = table.parentElement;
|
||||
if (!el || !host.contains(el)) return null;
|
||||
return { el, top: el.getBoundingClientRect().top };
|
||||
if (table) {
|
||||
const up = table.parentElement;
|
||||
el = (up && up !== host && host.contains(up)) ? up : table;
|
||||
}
|
||||
if (!el || el === host || !host.contains(el)) return null;
|
||||
/* `getClientRects()`, not `offsetParent` plus a `getComputedStyle` fallback: the question is only
|
||||
* "is this box in the layout at all", an element the table gate is holding out of it has no rects,
|
||||
* and resolving style on every settled pass to learn that would cost more than the rect already
|
||||
* read above. A box with no rects reports a top of 0 — a reference to nowhere. */
|
||||
if (!el.getClientRects().length) return null;
|
||||
/* AND A SECOND REFERENCE THAT SURVIVES THE TICK. `dom.content()` replaces a section's CHILDREN,
|
||||
* so the element the hit landed on is usually gone by the time the correction runs — and where
|
||||
* the tick also grew the page, nothing was clamped either, so the "give back what the engine
|
||||
* took" path has no number and the theme takes a fresh reference and measures a drift of zero.
|
||||
* That is a section swap nobody compensates: measured on 25.12's Overview at 1440 with the
|
||||
* engine's anchoring suppressed, the page moved 136px under the reader.
|
||||
*
|
||||
* The wrapper is what survives — the stock poll refreshes a `.cbi-section` in place and never
|
||||
* rebuilds it — so it is kept alongside, and used only when the precise reference is gone. */
|
||||
/* the nearest ANCESTOR that a tick does not replace — `closest()` on the element itself is not it:
|
||||
* where the hit already climbed to the `.cbi-section` (which is what happens on any page whose
|
||||
* section is one table), `closest('.cbi-section')` answers with that same element, and a fallback
|
||||
* that is the reference is no fallback at all. */
|
||||
let keep = el.parentElement;
|
||||
while (keep && keep !== host && !keep.classList.contains('cbi-section')
|
||||
&& !keep.classList.contains('cbi-map') && !keep.classList.contains('fs-ovl'))
|
||||
keep = keep.parentElement;
|
||||
if (!keep || keep === host || !host.contains(keep)) keep = null;
|
||||
return { el, top: el.getBoundingClientRect().top,
|
||||
sec: keep, secTop: keep ? keep.getBoundingClientRect().top : 0 };
|
||||
}
|
||||
|
||||
let _anchorPending = null;
|
||||
@@ -517,6 +626,58 @@ function anchorEnabled() {
|
||||
try { return localStorage.getItem('fsAnchor') !== 'off'; }
|
||||
catch (e) { return true; }
|
||||
}
|
||||
/* ---- WHAT THE ENGINE'S OWN ANCHORING LEAVES BEHIND ----
|
||||
*
|
||||
* Scroll anchoring keeps a reference element still while things above it change size. It is not the
|
||||
* same promise as "a section can vanish and come back": `dom.content()` — every LuCI poll — empties
|
||||
* a container before it refills it, the offset is clamped into a document that is briefly shorter,
|
||||
* and what the engine does on the way back is its own business. Chromium lands exactly where it
|
||||
* started. WebKit OVERSHOOTS — measured on the 24.10 stand's Overview at 390 and at 1440, in both
|
||||
* layouts: a swap that grew a section by 120px moved the offset by 180, so the reader ended 60px
|
||||
* up the page on every tick. That is what a Safari user sees as the page creeping while they read.
|
||||
*
|
||||
* WHY THE OFFSET CANNOT ANSWER THIS, and why this is not a browser test. The first version compared
|
||||
* the offset with what it had been and gave back the difference; it never fired, because the offset
|
||||
* came back LARGER, not smaller. A `CSS.supports('overflow-anchor')` test cannot separate the two
|
||||
* behaviours either — WebKit shipped the property, so every engine now claims it — and a synthetic
|
||||
* probe that performs the collapse itself calls Firefox broken as well, because a real page puts
|
||||
* layout and a frame between the collapse and the refill and a probe does not. Both were measured,
|
||||
* both were wrong, and the second one cost Chromium and Firefox 15px of drift they did not have.
|
||||
*
|
||||
* So nothing is assumed: the element the reader was looking at is asked where it is now, TWO FRAMES
|
||||
* after the mutation — long enough for the engine to have finished its own correction. An engine
|
||||
* that got it right reports a drift of zero and this does nothing at all. What is left over is what
|
||||
* nobody put back, and it is given back here. The same guards as the main correction: not while the
|
||||
* reader scrolls, not across a navigation, and never more than a viewport — a drift that size means
|
||||
* the reference is describing a page that no longer exists. */
|
||||
let _lateFrame = 0;
|
||||
function lateDrift(ref) {
|
||||
/* the reference from BEFORE this tick, captured by the caller: `run()` re-remembers it on its way
|
||||
* through, and a reference taken after the mutation describes the page as the mutation left it —
|
||||
* the drift it would report is zero by construction */
|
||||
if (_lateFrame || !ref) return;
|
||||
_lateFrame = requestAnimationFrame(() => {
|
||||
_lateFrame = requestAnimationFrame(() => {
|
||||
_lateFrame = 0;
|
||||
/* NOT `scrolling()`: the engine's own compensation moves the offset and therefore starts
|
||||
* the motion sampler, so gating on that skipped every tick this exists for (measured —
|
||||
* the check reported "busy" on all of them). Two narrower questions instead: is the
|
||||
* reader driving (a gesture), and is the offset STREAMING (moving repeatedly, which a
|
||||
* one-shot compensation never does but a scroll always does). Either one means hands off. */
|
||||
if (!anchorEnabled() || Date.now() < _userUntil || (scrolling() && _steps > 1)) return;
|
||||
if (!ref.el.isConnected || _restPage !== pageStamp()) return;
|
||||
const drift = ref.el.getBoundingClientRect().top - ref.top;
|
||||
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 may have been clamped short; the reader is where they are now */
|
||||
_restAt = scrollTop();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function scheduleAnchor(ref) {
|
||||
if (!ref || !anchorEnabled()) return;
|
||||
if (_anchorPending) return;
|
||||
@@ -535,6 +696,13 @@ function scheduleAnchor(ref) {
|
||||
}
|
||||
function applyAnchor(ref) {
|
||||
if (!ref) return;
|
||||
/* NOT INTO A MOVING PAGE. The correction is scheduled from the mutation and applied a frame
|
||||
* later, and the reader can start scrolling in between — the reference is then describing a page
|
||||
* they have already left, and putting them back on it is the jump this whole file exists to
|
||||
* prevent. `anchorRef()` refuses to TAKE a reference during a flick for the same reason; nothing
|
||||
* refused to USE one, and the gate caught it as a 231px correction landing inside a scroll on
|
||||
* all three engines once the reference stopped being re-read at apply time. */
|
||||
if (scrolling()) return;
|
||||
/* through scroller(), not a second probe of its own: the two asked the same question in the
|
||||
* same two lines and could already answer differently within one frame */
|
||||
const sc = scroller();
|
||||
@@ -588,9 +756,28 @@ function observeContent() {
|
||||
* see anchorFor(): where the engine does no anchoring of its own that reference comes from
|
||||
* the last still moment, because by the time this callback runs the poll has already moved
|
||||
* the page */
|
||||
const ref = anchorFor();
|
||||
/* ONE CORRECTION PER ENGINE, and which one depends on whether the engine is doing the job.
|
||||
*
|
||||
* Where it anchors, the immediate correction is not just redundant, it is harmful: the
|
||||
* reference it uses is read HERE, in the same instant the poll mutated the page, and after a
|
||||
* scroll WebKit hands back the new `scrollTop` before the layout that goes with it. The drift
|
||||
* then measures the reader's own move and the correction undoes it — measured on the 24.10
|
||||
* stand at 1440 in the top layout at Compact: the page went back to 0 from 591, every run.
|
||||
* What that engine needs is the RESIDUE, two frames later, once its own anchoring has run
|
||||
* and the layout is settled — which is lateDrift().
|
||||
*
|
||||
* Where it does not anchor, nobody else will put the reader back within the frame, so the
|
||||
* immediate correction stays, measured against the reference from the last still page. */
|
||||
const settled = _rest;
|
||||
const ref = ENGINE_ANCHORS ? null : anchorFor();
|
||||
run();
|
||||
scheduleAnchor(ref);
|
||||
/* one or the other, never a fallthrough from one to the other: where the engine does not
|
||||
* anchor, `anchorFor()` returning nothing means it has DECIDED not to correct this tick (the
|
||||
* reader moved, or there is no reference worth using), and handing that case to the deferred
|
||||
* path corrects it two frames later instead — measured as a 320px correction landing inside
|
||||
* a flick, on all three engines. */
|
||||
if (ENGINE_ANCHORS) lateDrift(settled);
|
||||
else scheduleAnchor(ref);
|
||||
});
|
||||
for (const host of [ document.getElementById('view') || document.body, document.getElementById('modal_overlay') ]) {
|
||||
if (!host) continue;
|
||||
@@ -638,6 +825,17 @@ return baseclass.extend({
|
||||
scrolling,
|
||||
deferMeasurement,
|
||||
|
||||
/* -> the offset this file last took a reference at, or null before it has taken one.
|
||||
*
|
||||
* FOR THE GATES, and it is not a convenience: every correction here is measured against a
|
||||
* reference captured while the page was still, so a probe that grows the page before that
|
||||
* reference exists measures the guard rather than the anchor. There is no way to ask that from
|
||||
* outside — "is it scrolling" answers a different question, and answers "no" both before the
|
||||
* motion sampler starts and after it finishes, which in WebKit are 1.5 seconds apart. Waiting a
|
||||
* flat interval instead made tools/scroll-anchor.mjs report a jump on every WebKit run and none
|
||||
* on the other two engines, with the theme identical on all three. */
|
||||
restAt: () => _restAt,
|
||||
|
||||
/* "THE OFFSET IS MINE NOW, FORGET WHAT YOU REMEMBERED." Called by fs-router where it resets both
|
||||
* scrollers for an incoming page, and it is not a courtesy — without it the correction below
|
||||
* fights that reset. The router resets synchronously and stamps `body[data-page]` an await later,
|
||||
|
||||
@@ -80,6 +80,35 @@
|
||||
/* @endmirror */
|
||||
}
|
||||
|
||||
/* ...AND BACK ABOVE THE BAR ONCE THAT COLUMN BECOMES A CARD.
|
||||
*
|
||||
* The rule above puts the value BESIDE the bar because a table column shares its row with other
|
||||
* columns and a value floated over the bar would land on the row divider. A carded row is not
|
||||
* that: `.fs-stacked` gives each cell half the card, so "beside" is outside the cell — the value
|
||||
* ran across the neighbouring column and over the label above it. Reported twice from a phone
|
||||
* (`RSSI: 52% (-59dBm)` sitting on SIGNAL STRENGTH and on the Transferred figures next to it),
|
||||
* on luci-mod-dashboard's Wireless list, at every density.
|
||||
*
|
||||
* So the card puts it back where the default has it — over the bar's far edge, on the line the
|
||||
* label already owns — and buys that line: the bar takes a top margin of one --fs-type-xs line,
|
||||
* so the value sits between the label and the bar instead of on either. Measured at 390px on all
|
||||
* three densities: 6-9px of overlap before, none after.
|
||||
*
|
||||
* The selector carries `:has(.tr.table-titles)` for specificity alone: that is what the beside-rule
|
||||
* above matches on, and `:has()` counts its argument — (0,6,0) — so a plainer selector here lost
|
||||
* and the value stayed beside the bar (measured: `margin-inline-end` still 40px). The title row
|
||||
* is still in the DOM when the table is carded; the card only hides it. */
|
||||
.cbi-section .table.fs-stacked:has(.tr.table-titles) .td .cbi-progressbar {
|
||||
margin-inline-end: 0;
|
||||
margin-block-start: calc(var(--fs-type-xs) * var(--fs-leading));
|
||||
}
|
||||
.cbi-section .table.fs-stacked:has(.tr.table-titles) .td .cbi-progressbar::after {
|
||||
inset-inline: auto 0;
|
||||
bottom: calc(100% + var(--fs-space-1));
|
||||
top: auto;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
/* Progressbar rows in a section table (luci-app-cpu-status): keep the native label | bar
|
||||
* row, just centre the cells vertically. */
|
||||
.cbi-section .table:not([id]):not(.cbi-section-table) .tr:has(.cbi-progressbar) .td { vertical-align: middle; }
|
||||
|
||||
@@ -268,7 +268,16 @@
|
||||
* The cost is that a row of a data table can no longer be the anchor. On the page where that
|
||||
* would matter most — Processes at 390px, which is one long table — inserting a row above the
|
||||
* reader moves the content 285px with this rule and 285px without it: those rows were never being
|
||||
* chosen anyway. */
|
||||
* chosen anyway.
|
||||
*
|
||||
* WHAT COVERS THAT PAGE INSTEAD is fs-fit.js, and it did not until recently: a page that is one
|
||||
* table has the table as a DIRECT child of `#view`, the theme's own reference climbs out of the
|
||||
* table to its parent, and the parent was the host — so the climb gave up and nothing held the
|
||||
* reader there on any engine. It anchors on the TABLE ITSELF in that case now. Its height is
|
||||
* what this rule calls falsified; where the box STARTS is decided by what sits above it, and that
|
||||
* is all a reference needs. Measured at 390px with the engine's anchoring suppressed: 120px of
|
||||
* growth above the fold moved the page 120px before, 0px after, on chromium, firefox and webkit
|
||||
* alike. */
|
||||
.table.fs-dt { overflow-anchor: none; }
|
||||
|
||||
.cbi-section .table:is([id], .fs-dt) .tr:not(.table-titles):not(.placeholder):hover .td { background: var(--fs-panel2); }
|
||||
|
||||
@@ -232,6 +232,19 @@
|
||||
* .cbi-title-buttons`; Status → Channel Analysis puts "Refresh Channels" there, a
|
||||
* third-party app may put anything). Nothing gave it a bottom margin, so it sat flush
|
||||
* against the first .cbi-section below and read as part of that card instead of as a
|
||||
* page-level action. Same 16px every .cbi-section already uses. */
|
||||
.cbi-title-buttons { margin-bottom: var(--fs-card-gap); }
|
||||
* page-level action. Same 16px every .cbi-section already uses.
|
||||
*
|
||||
* And a TOP margin for the same reason at the other edge: the row sits directly under the page
|
||||
* heading with nothing between them — measured at 0px on Status → Channel Analysis, where
|
||||
* "Refresh Channels" touched the "Channel Analysis" title (reported upstream against v0.14).
|
||||
* Half the bottom gap, because a heading and its own action belong together; the full one would
|
||||
* read as a separate block. */
|
||||
.cbi-title-buttons { margin-block: var(--fs-space-2) var(--fs-card-gap); }
|
||||
|
||||
/* The per-section Delete button (`.cbi-section-remove`, what luci-base renders for every NAMED
|
||||
* section: SQM's queues, the firewall's zones, any app that lets you add and drop instances) sat
|
||||
* flush against whatever follows it — usually that section's own tab bar. Reported upstream on
|
||||
* SQM, but nothing here is about SQM: it is one class luci-base gives every such section, and
|
||||
* the gap belongs to the pattern rather than to the page. */
|
||||
.cbi-section-remove { margin-bottom: var(--fs-space-2); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user