🎉 Sync 2026-04-03 20:25:30

This commit is contained in:
github-actions[bot] 2026-04-03 20:25:30 +08:00
parent 6b6cae9986
commit 4dbadea522
49 changed files with 754 additions and 639 deletions

View File

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: luci-app-ddns 2.4.2-1\n"
"POT-Creation-Date: 2016-09-25 10:43+0200\n"
"PO-Revision-Date: 2026-02-18 07:12+0000\n"
"Last-Translator: Werner Schleifer <werner.schleifer@gmail.com>\n"
"PO-Revision-Date: 2026-03-23 18:10+0000\n"
"Last-Translator: HerbJul <19JulianHerbst95@web.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsddns/de/>\n"
"Language: de\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 5.16.1-dev\n"
"X-Generator: Weblate 5.17-dev\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: .\n"
@ -204,7 +204,7 @@ msgstr "Dynamic-DNS-Version"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:545
msgid "Edit"
msgstr "Bearbeiten"
msgstr "Bearbeitung"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:783
msgid "Enable secure communication with DDNS provider"

View File

@ -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-03-13 14:10+0000\n"
"PO-Revision-Date: 2026-03-29 07:12+0000\n"
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsddns/es/>\n"
@ -284,7 +284,7 @@ msgstr "Ajustes globales"
#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
msgid "Grant access to ddns procedures"
msgstr "Conceder acceso a los procedimientos de DDNS"
msgstr "Conceder acceso a los procedimientos de ddns"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
msgid "HTTPS not supported"

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-09 19:11+0000\n"
"Last-Translator: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>\n"
"PO-Revision-Date: 2026-03-24 19:09+0000\n"
"Last-Translator: Highlandword9 <highlandword9@gmail.com>\n"
"Language-Team: Irish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsddns/ga/>\n"
"Language: ga\n"
@ -700,7 +700,7 @@ msgstr "Tosaigh DDNS"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
msgid "State"
msgstr "Stát"
msgstr "Staid"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1117
msgid "Status"

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-03 18:00+0000\n"
"PO-Revision-Date: 2026-03-28 14:53+0000\n"
"Last-Translator: Hyeonjeong Lee <h9101654@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsddns/ko/>\n"
@ -37,7 +37,7 @@ msgstr "기본 설정"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:903
msgid "Bind Network"
msgstr ""
msgstr "바인드 네트워크"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
msgid "Binding to a specific network not supported"
@ -48,6 +48,8 @@ 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과 hostip은 DNS 서버에 요청을 보낼 때 기본 UDP 대신 TCP를 "
"지원하지 않습니다!"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:372
msgid ""
@ -77,7 +79,7 @@ msgstr "확인 간격"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:996
msgid "Check Unit"
msgstr ""
msgstr "확인 간격 단위"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
msgid "Configuration"
@ -90,11 +92,11 @@ msgstr "설정 오류"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:417
msgid "Contains Log files for each running section."
msgstr ""
msgstr "실행 중인 각 섹션에 대한 로그 파일이 포함되어 있습니다."
#: 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 "각 실행 중인 섹션에 대한 PID 및 기타 상태 정보가 포함되어 있습니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:536
msgid "Create service"
@ -108,18 +110,20 @@ msgstr "현재 설정:"
#: 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 ""
"현재 DDNS 업데이트가 부팅 또는 인터페이스 이벤트에서 시작되지 않습니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:727
msgid "Custom update script for updating your DDNS Provider."
msgstr ""
"DDNS 서비스를 갱신하기 위한 사용자 정의 업데이트 스크립트를 설정합니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:708
msgid "Custom update-URL"
msgstr ""
msgstr "사용자 정의 업데이트 URL"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:726
msgid "Custom update-script"
msgstr ""
msgstr "사용자 정의 업데이트 스크립트"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
msgid "DDNS"
@ -192,7 +196,7 @@ msgstr "편집"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:783
msgid "Enable secure communication with DDNS provider"
msgstr ""
msgstr "DDNS 서비스와의 보안 통신(HTTPS)을 활성화합니다"
#: 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
@ -205,7 +209,7 @@ msgstr "오류(Error)"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1040
msgid "Error Max Retry Counter"
msgstr ""
msgstr "오류 시 최대 재시도 횟수"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1050
msgid "Error Retry Interval"
@ -214,7 +218,7 @@ msgstr "오류 재시도 간격"
#: 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 "이벤트 네트워크"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:855
msgid "Example for IPv4"
@ -243,7 +247,7 @@ msgstr "IP 버전 강제"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1005
#, fuzzy
msgid "Force Interval"
msgstr "강제 갱신 주기"
msgstr "강제 업데이트 간격"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:936
msgid "Force TCP on DNS"
@ -252,7 +256,7 @@ msgstr "DNS에 TCP 강제"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1031
#, fuzzy
msgid "Force Unit"
msgstr "강제 갱신 단위"
msgstr "강제 업데이트 단위"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
msgid "Format"
@ -267,10 +271,12 @@ msgid ""
"GNU Wget will use the IP of given network, cURL will use the physical "
"interface."
msgstr ""
"GNU Wget은 주어진 네트워크의 IP를 사용하고, cURL은 물리적 인터페이스를 사용합"
"니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
msgid "Global Settings"
msgstr "공통 설정"
msgstr "전역 설정"
#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
msgid "Grant access to ddns procedures"
@ -278,7 +284,7 @@ msgstr "DDNS 프로시저에 접근 권한 부여"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
msgid "HTTPS not supported"
msgstr ""
msgstr "HTTPS 미지원"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
msgid "Hostname/FQDN to validate, whether an IP update is necessary"
@ -300,15 +306,15 @@ msgstr "IPv4 주소"
#: 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 주소는 대괄호로 지정해야 합니다"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
msgid "IPv6 is not supported by this system"
msgstr ""
msgstr "IPv6은 이 시스템에서 지원되지 않습니다"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
msgid "IPv6 not supported"
msgstr ""
msgstr "IPv6 미지원"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:508
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:636
@ -319,7 +325,7 @@ msgstr "IPv6 주소"
msgid ""
"If Wget and cURL package are installed, Wget is used for communication by "
"default."
msgstr ""
msgstr "Wget과 cURL 패키지가 설치된 경우 기본적으로 통신에 Wget이 사용됩니다."
#: 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."
@ -369,23 +375,23 @@ msgstr "인터페이스"
#: 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 "DDNS 서비스에 갱신을 강제할 간격을 설정합니다"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1032
msgid "Interval unit for forced updates sent to DDNS Provider."
msgstr ""
msgstr "DDNS 서비스에 갱신을 강제할 간격의 단위를 선택합니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:997
msgid "Interval unit to check for changed IP"
msgstr ""
msgstr "IP 변경 확인 간격에 사용할 시간 단위를 설정합니다"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1145
msgid "Last Update"
msgstr ""
msgstr "최근 업데이트"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
msgid "Log File Viewer"
msgstr ""
msgstr "로그 보기"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:416
msgid "Log directory"
@ -397,17 +403,17 @@ msgstr "로그 길이"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:969
msgid "Log to file"
msgstr ""
msgstr "로그 파일에 기록"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
msgid "Log to syslog"
msgstr "시스로그에 기록"
msgstr "Syslog에 기록"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:621
#: 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 ""
msgstr "조회 호스트 이름"
#: 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"
@ -423,16 +429,20 @@ msgid ""
"Neither GNU Wget with SSL nor cURL is installed to select a network to use "
"for communication."
msgstr ""
"통신에 사용할 네트워크를 선택하기 위한, SSL이 포함된 GNU Wget이나 cURL이 설치"
"되어 있지 않습니다."
#: 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 ""
"HTTPS 프로토콜을 통한 보안 업데이트를 지원하기 위한, SSL 포함 GNU Wget이나 "
"cURL이 설치되어 있지 않습니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:615
msgid "Neither from LuCI interface nor from console."
msgstr ""
msgstr "LuCI 인터페이스도 콘솔에서도 마찬가지로 안 됩니다."
#: 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
@ -449,7 +459,7 @@ msgstr ""
#: 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
msgid "Never"
msgstr "안함"
msgstr "기록 없음"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:494
msgid "New DDns Service…"
@ -458,11 +468,11 @@ msgstr "새 DDNS 서비스 입력…"
#: 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
msgid "Next Update"
msgstr ""
msgstr "다음 업데이트"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1145
msgid "Next Verify"
msgstr ""
msgstr "다음 확인 예정"
#: 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
@ -497,44 +507,48 @@ msgstr ""
#: 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 "선택 사항. 통신 시 IPv4 또는 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 ""
msgstr "선택 사항. DNS 질의 시 기본 UDP 대신 TCP를 사용하도록 강제합니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:904
msgid "OPTIONAL: Network to use for communication"
msgstr ""
msgstr "선택 사항. 통신에 사용할 네트워크를 지정합니다"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
msgid "OPTIONAL: Proxy-Server for detection and updates."
msgstr ""
msgstr "선택 사항. 감지 및 갱신에 사용할 프록시 서버를 설정합니다."
#: 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 ""
"선택 사항. '등록된 IP'를 감지하기 위해 기본값 이외의 DNS 서버를 사용합니다."
#: 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 ""
"오류 발생 시, 설정한 재시도 횟수를 초과하면 스크립트 실행이 중지됩니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
msgid "Optional Encoded Parameter"
msgstr ""
msgstr "추가 매개변수 (인코딩)"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
msgid "Optional Parameter"
msgstr ""
msgstr "추가 매개변수"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
msgstr ""
"선택 사항. 업데이트 URL의 [PARAMENC] 문구를 치환합니다. (URL 인코딩 적용)"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
msgstr ""
"선택 사항. 업데이트 URL의 [PARAMOPT] 문구를 치환합니다. (URL 인코딩 미적용)"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
msgid "PROXY-Server"
@ -551,11 +565,11 @@ msgstr "CA 인증서 경로"
#: 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 "IPv6 지원을 활성화하려면 OpenWrt 홈페이지 상의 지침을 따르세요"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1086
msgid "Please press [Read] button"
msgstr ""
msgstr "[읽기] 버튼을 누르세요"
#: 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
@ -564,36 +578,36 @@ msgstr ""
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1069
msgid "Read / Reread log file"
msgstr ""
msgstr "로그 파일 읽기/다시 읽기"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:693
msgid "Really switch service?"
msgstr ""
msgstr "정말로 서비스를 전환합니까?"
#: 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 ""
msgstr "등록된 IP"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:567
msgid "Reload"
msgstr "다시 기"
msgstr "다시 불러오기"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:550
msgid "Reload this service"
msgstr "이 서비스의 설정을 다시 읽어옵니다"
msgstr "재시작 없이 설정 적용"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
msgstr ""
msgstr "업데이트 URL의 [DOMAIN] 문구를 치환합니다. (URL 인코딩 적용)"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:761
msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
msgstr ""
msgstr "업데이트 URL의 [PASSWORD] 문구를 치환합니다. (URL 인코딩 적용)"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:755
msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
msgstr ""
msgstr "업데이트 URL의 [USERNAME] 문구를 치환합니다. (URL 인코딩 적용)"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
msgid "Restart DDns"
@ -601,11 +615,11 @@ msgstr "DDNS 재시작"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1058
msgid "Retry Unit"
msgstr ""
msgstr "재시도 간격 단위"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
msgid "Run once"
msgstr ""
msgstr "1회 실행"
#: 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
@ -620,13 +634,13 @@ msgstr "스크립트"
#: 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 "서비스 선택"
#: 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 "서비스에서 이 IP 유형을 지원하지 않습니다"
#: 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
@ -643,11 +657,11 @@ msgstr "서비스 다운로드 URL"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
msgid "Services list last update"
msgstr ""
msgstr "서비스 목록 최근 업데이트"
#: 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 "이 값을 0으로 설정하면 스크립트가 한 번만 실행됩니다"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:451
msgid ""
@ -682,7 +696,7 @@ msgstr "DDNS 중지"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:555
msgid "Stop this service"
msgstr "서비스 중지합니다"
msgstr "서비스 중지"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:19
msgid "Stopped"
@ -690,23 +704,23 @@ msgstr "중지됨"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:694
msgid "Switch service"
msgstr ""
msgstr "서비스 전환"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
msgid "The default setting of '0' will retry infinitely."
msgstr ""
msgstr "기본 설정인 '0'은 무한히 재시도됩니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1051
msgid "The interval between which each subsequent retry commences."
msgstr ""
msgstr "각 재시도가 시작되는 시간 간격을 설정합니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:497
msgid "The service name is already used"
msgstr ""
msgstr "이미 사용 중인 서비스 이름입니다"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
msgid "There is no service configured."
msgstr ""
msgstr "설정된 서비스가 없습니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
msgid ""
@ -731,7 +745,7 @@ msgstr ""
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
msgid "Timer Settings"
msgstr ""
msgstr "타이머 설정"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:811
msgid "URL"
@ -751,15 +765,15 @@ msgstr "알 수 없음"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
msgid "Update DDns Services List"
msgstr ""
msgstr "DDNS 서비스 목록 업데이트"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:684
msgid "Update URL"
msgstr ""
msgstr "업데이트 URL"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:709
msgid "Update URL for updating your DDNS Provider."
msgstr ""
msgstr "DDNS 서비스를 갱신하기 위한 업데이트 URL을 설정합니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:782
msgid "Use HTTP Secure"
@ -783,15 +797,15 @@ msgstr "특정 DNS 서버 사용이 지원되지 않습니다."
#: 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 "5분(300초) 미만의 값은 지원되지 않습니다"
#: 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 "'확인 간격'보다 작은 값은 설정할 수 없습니다. ('0' 제외)"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
msgid "Verify"
msgstr ""
msgstr "확인 중"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:965
msgid "Warning"
@ -804,18 +818,20 @@ msgstr ""
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1059
msgid "Which time units to use for retry counters."
msgstr ""
msgstr "재시도 간격에 사용할 시간 단위를 선택합니다."
#: 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 ""
"로그 파일에 상세 메시지를 기록합니다. 파일은 용량 초과 시 자동으로 비워집니"
"다."
#: 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 ""
msgstr "로그 메시지를 syslog에 기록합니다. 치명적인 오류는 항상 기록됩니다."
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:375
msgid ""
@ -857,7 +873,7 @@ msgstr "일"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
msgid "directory or path/file"
msgstr ""
msgstr "디렉토리 또는 경로/파일"
#: 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

View File

@ -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: 2025-10-30 03:41+0000\n"
"PO-Revision-Date: 2026-03-18 02:23+0000\n"
"Last-Translator: CRISTIAN ANDREI <cristianvdr@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsddns/ro/>\n"
@ -12,7 +12,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
"X-Generator: Weblate 5.14.1-dev\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
msgid "\"../\" not allowed in path for Security Reason."
@ -77,7 +77,7 @@ msgstr ""
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:532
msgid "Cancel"
msgstr "Anulați"
msgstr "Anulare"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:981
msgid "Check Interval"

View File

@ -1,14 +1,14 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2025-04-18 02:24+0000\n"
"Last-Translator: Anders Jackson <anders.jackson@gmail.com>\n"
"PO-Revision-Date: 2026-03-22 17:10+0000\n"
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\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.11.1-dev\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
msgid "\"../\" not allowed in path for Security Reason."
@ -125,7 +125,7 @@ msgstr "Anpassat uppdateringsskript"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
msgid "DDNS"
msgstr ""
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
@ -610,7 +610,7 @@ msgstr "Kör en gång"
#: 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 "Igång"
msgstr "Körs"
#: 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

View File

@ -5,7 +5,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-03-09 19:12+0000\n"
"PO-Revision-Date: 2026-03-27 06:10+0000\n"
"Last-Translator: EESF-2 <eesf-2@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Traditional Han script) <https://hosted.weblate.org/"
"projects/openwrt/luciapplicationsddns/zh_Hant/>\n"
@ -117,7 +117,7 @@ msgstr "當前 DDNS 更新不會在系統啟動或觸發介面事件時啟動。
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:727
msgid "Custom update script for updating your DDNS Provider."
msgstr "為的 DDNS 提供者自訂更新指令碼。"
msgstr "為的 DDNS 提供者自訂更新指令碼。"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:708
msgid "Custom update-URL"
@ -353,7 +353,7 @@ msgid ""
"Install 'bind-host' or 'knot-host' or 'drill' package if you know you need "
"TCP for DNS requests."
msgstr ""
"如果需要 TCP 的 DNS 查詢,請安裝 'bind-host' 或 'knot-host' 或 'drill' 套"
"如果需要 TCP 的 DNS 查詢,請安裝 'bind-host' 或 'knot-host' 或 'drill' 套"
"件。"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:386
@ -830,7 +830,7 @@ 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 ""
"如果需要指定 DNS 伺服器以檢測已註冊 IP應安裝 'bind-host' 或 'knot-host' "
"如果需要指定 DNS 伺服器以檢測已註冊 IP應安裝 'bind-host' 或 'knot-host' "
"或 'drill' 或 'hostip' 套件。"
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-08 17:33+0000\n"
"PO-Revision-Date: 2026-03-19 18:44+0000\n"
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsdockerman/cs/>\n"
@ -2075,7 +2075,7 @@ msgstr "sestavovatel"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:324
msgid "commit"
msgstr ""
msgstr "commit"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1827
msgid "completed"

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-04 20:22+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"PO-Revision-Date: 2026-03-23 18:11+0000\n"
"Last-Translator: Werner Schleifer <werner.schleifer@gmail.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsdockerman/de/>\n"
"Language: de\n"
@ -58,19 +58,19 @@ msgstr "Host-Gerät zum Container hinzufügen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:673
msgid "Added Capabilities"
msgstr ""
msgstr "Hinzugefügte Fähigkeiten"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:616
msgid "Advanced"
msgstr ""
msgstr "Erweitert"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:342
msgid "All Subtypes"
msgstr ""
msgstr "Alle Untertypen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:73
msgid "All Types"
msgstr ""
msgstr "Alle Typen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:629
msgid "Allocates an ephemeral host port for all of a container's exposed ports"
@ -80,7 +80,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:480
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:239
msgid "Always"
msgstr ""
msgstr "Immer"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:222
msgid "Always pull image first"
@ -101,7 +101,7 @@ msgstr "API-Version"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:70
msgid "Attachable"
msgstr ""
msgstr "Anbringbar"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:139
msgid "Available"
@ -125,7 +125,7 @@ msgstr "Ein Volume mit Bindung einhängen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:732
msgid "BlkIO Stats"
msgstr ""
msgstr "BlkIO Status"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:667
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:720
@ -149,11 +149,11 @@ msgstr "Gerät der Netzwerkbrücke"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:419
msgid "Build"
msgstr ""
msgstr "Bauvorgang"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:206
msgid "Build an image."
msgstr ""
msgstr "Baue ein Image."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:72
msgid ""
@ -169,23 +169,23 @@ msgstr "CAP-ADD(--cap-add)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:839
msgid "COMMAND"
msgstr ""
msgstr "Befehl"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:672
msgid "CPU Period"
msgstr ""
msgstr "CPU-Zyklus"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:617
msgid "CPU Period (microseconds)"
msgstr ""
msgstr "CPU-Zyklus (Mikrosekunden)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:678
msgid "CPU Quota"
msgstr ""
msgstr "CPU-Anteil"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:620
msgid "CPU Quota (microseconds)"
msgstr ""
msgstr "CPU-Kontingent (Mikrosekunden)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:623
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:684
@ -194,7 +194,7 @@ msgstr "Gewichtung der CPU-Anteile"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:733
msgid "CPU Stats"
msgstr ""
msgstr "CPU-Statistiken"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:758
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:787
@ -212,7 +212,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:762
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:791
msgid "CPU usage data unavailable"
msgstr ""
msgstr "Keine Daten zur CPU-Auslastung verfügbar"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:607
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:660
@ -228,18 +228,20 @@ msgstr "Abbrechen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:35
msgid "Causes errors when a chosen API > Docker endpoint API support."
msgstr ""
"Es kommt zu Fehlern, wenn die gewählte API die Unterstützung des Docker-"
"Endpunkts übersteigt."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:882
msgid "Changes"
msgstr ""
msgstr "Änderungen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:420
msgid "Clean"
msgstr ""
msgstr "Bereinigt"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:257
msgid "Cleaned build cache"
msgstr ""
msgstr "Build-Cache geleert"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1181
msgid "Clear"
@ -247,15 +249,15 @@ msgstr "Leeren"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:617
msgid "Click to add a new tag to this image"
msgstr ""
msgstr "Klicken Sie, um ein neues Tag zu diesem Bild hinzuzufügen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:531
msgid "Click to remove this tag"
msgstr ""
msgstr "Klicken Sie, um diesen Tag zu entfernen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/networks.js:213
msgid "Click to view this network"
msgstr ""
msgstr "Klicken Sie, um dieses Netzwerk zu sehen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:81
msgid "Client connection"
@ -268,29 +270,29 @@ msgstr "Befehl"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:1152
msgid "Command cancelled"
msgstr ""
msgstr "Befehl abgebrochen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:1131
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:1142
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:86
msgid "Command failed"
msgstr ""
msgstr "Befehl fehlgeschlagen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:1119
msgid "Command successful"
msgstr ""
msgstr "Befehl erfolgreich"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1012
msgid "Command:"
msgstr ""
msgstr "Befehl:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:80
msgid "Config Only"
msgstr ""
msgstr "Nur Konfiguration"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:76
msgid "ConfigFrom"
msgstr ""
msgstr "ConfigFrom"
#: applications/luci-app-dockerman/root/usr/share/luci/menu.d/luci-app-dockerman.json:28
msgid "Configuration"
@ -313,7 +315,7 @@ msgstr "Netzwerk verbinden"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1936
msgid "Connect network"
msgstr ""
msgstr "Mit dem Netzwerk verbinden"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1512
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1524
@ -322,11 +324,11 @@ msgstr "Verbunden"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1055
msgid "Connected to container console"
msgstr ""
msgstr "Mit der Container-Konsole verbunden"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1397
msgid "Connecting…"
msgstr ""
msgstr "Verbinden…"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:998
msgid "Console"
@ -334,30 +336,30 @@ msgstr "Konsole"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1000
msgid "Console Connection"
msgstr ""
msgstr "Konsolenanschluss"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1514
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1765
msgid "Console connected"
msgstr ""
msgstr "Konsole angeschlossen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1507
msgid "Console connection closed"
msgstr ""
msgstr "Konsolenverbindung geschlossen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1551
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1786
msgid "Console disconnected"
msgstr ""
msgstr "Konsole getrennt"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1571
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1586
msgid "Console is not connected"
msgstr ""
msgstr "Die Konsole ist nicht angeschlossen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:160
msgid "Container"
msgstr ""
msgstr "Behälter"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:968
msgid "Container Inspect"
@ -373,11 +375,11 @@ msgstr "Containername"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:818
msgid "Container Statistics"
msgstr ""
msgstr "Containerstatistik"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:927
msgid "Container created"
msgstr ""
msgstr "Container erstellt"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:440
msgid "Container detail"
@ -385,34 +387,38 @@ msgstr "Containerdetail"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:927
msgid "Container duplicated"
msgstr ""
msgstr "Container dupliziert"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:706
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:713
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:832
msgid "Container is not running"
msgstr ""
msgstr "Der Container läuft nicht"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1086
msgid "Container is not running. Cannot connect to WebSocket console."
msgstr ""
"Der Container läuft nicht. Es kann keine Verbindung zur WebSocket-Konsole "
"hergestellt werden."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1007
msgid "Container is not running. Cannot connect to console."
msgstr ""
"Der Container läuft nicht. Es kann keine Verbindung zur Konsole hergestellt "
"werden."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1377
msgid "Container rename"
msgstr ""
msgstr "Container umbenennen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1385
msgid "Container rename failed"
msgstr ""
msgstr "Das Umbenennen des Containers ist fehlgeschlagen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1346
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1362
msgid "Container update failed"
msgstr ""
msgstr "Die Aktualisierung des Containers ist fehlgeschlagen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:577
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:84
@ -434,19 +440,19 @@ msgstr "Erstellen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:921
msgid "Create container"
msgstr ""
msgstr "Container erstellen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:942
msgid "Create container failed"
msgstr ""
msgstr "Das Erstellen des Containers ist fehlgeschlagen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:234
msgid "Create network"
msgstr ""
msgstr "Netzwerk erstellen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:249
msgid "Create network failed"
msgstr ""
msgstr "Das Erstellen des Netzwerks ist fehlgeschlagen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:63
msgid "Create new docker container"
@ -470,7 +476,7 @@ msgstr "DNS"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:582
msgid "DNS Names"
msgstr ""
msgstr "DNS Name"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:73
msgid "Debug"
@ -482,25 +488,27 @@ msgstr "Standardbrücke"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:26
msgid "Default ps flags"
msgstr ""
msgstr "Standard-ps-Optionen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:588
msgid "Delete this volume mount"
msgstr ""
msgstr "Diese Datenträger-Einbindung löschen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:104
msgid ""
"Destinations prefixed with a Registry host matching an entry in this table "
"invoke its corresponding credentials."
msgstr ""
"Ziele, deren Hostname mit einem Eintrag in dieser Tabelle übereinstimmt, "
"rufen die entsprechenden Anmeldedaten auf."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1580
msgid "Detach signal sent (Ctrl+D)"
msgstr ""
msgstr "Signal zum Trennen gesendet (Strg+D)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:96
msgid "Detail"
msgstr ""
msgstr "Details"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:636
msgid "Device(--device)"
@ -508,7 +516,7 @@ msgstr "Gerät(--device)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:515
msgid "Devices"
msgstr ""
msgstr "Geräte"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:559
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1051
@ -518,11 +526,11 @@ msgstr "Verbindung trennen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1854
msgid "Disconnect network"
msgstr ""
msgstr "Verbindung trennen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1844
msgid "Disconnect network \"%s\" from container?"
msgstr ""
msgstr "Das Netzwerk „%s“ vom Container trennen?"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1117
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1500
@ -533,7 +541,7 @@ msgstr "Getrennt"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:536
msgid "Do you want to remove the tag \"%s\"?"
msgstr ""
msgstr "Möchtest du das Tag „%s“ entfernen?"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:16
msgid "Docker - Configuration"
@ -541,7 +549,7 @@ msgstr "Docker - Einrichtung"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:330
msgid "Docker - Container"
msgstr ""
msgstr "Docker - Container"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:189
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:49
@ -550,7 +558,7 @@ msgstr "Docker - Container"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:54
msgid "Docker - Events"
msgstr ""
msgstr "Hafenarbeiter - Ereignisse"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:36
msgid "Docker - Images"
@ -563,7 +571,7 @@ msgstr "Docker - Netzwerke"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:26
msgid "Docker - New Network"
msgstr ""
msgstr "Docker - Neues Netzwerk"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:144
msgid "Docker - Overview"
@ -592,7 +600,7 @@ msgstr "DockerMan ist ein einfacher Docker-Manager-Client für LuCI"
#: applications/luci-app-dockerman/root/usr/share/luci/menu.d/luci-app-dockerman.json:3
msgid "Dockerman JS"
msgstr ""
msgstr "Dockerman JS"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:945
msgid "Download"
@ -600,7 +608,7 @@ msgstr "Herunterladen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:276
msgid "Download a valid remote image tar."
msgstr ""
msgstr "Laden Sie einen gültigen Remote-Bild-Ter."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:63
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:41
@ -611,7 +619,7 @@ msgstr "Treiber"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:679
msgid "Dropped Capabilities"
msgstr ""
msgstr "Gelöschte Fähigkeiten"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:401
msgid "Duplicate/Edit"
@ -619,19 +627,19 @@ msgstr "Duplizieren/Bearbeiten"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:66
msgid "Duplicate/Edit Container: %s"
msgstr ""
msgstr "Duplikat/Bearbeiten Container: %"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:422
msgid "Edit"
msgstr ""
msgstr "Bearbeitung"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:297
msgid "Edit Mount"
msgstr ""
msgstr "Edit Mount"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:195
msgid "Edit this container"
msgstr ""
msgstr "Bearbeiten Sie diesen Container"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:122
msgid "Enable IPv6"
@ -639,19 +647,20 @@ msgstr "IPv6 aktivieren"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:623
msgid "Enter a new tag for image %s:"
msgstr ""
msgstr "Geben Sie einen neuen Tag für image %s ein:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:119
msgid "Enter an optional name and labels for the new volume"
msgstr ""
"Geben Sie einen optionalen Namen und Etiketten für das neue Volumen ein"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:379
msgid "Enter volume name or pick existing"
msgstr ""
msgstr "Volumenname eingeben oder bestehende auswählen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:250
msgid "Entry"
msgstr ""
msgstr "Eingang"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:494
msgid "Env"
@ -659,7 +668,7 @@ msgstr "Umgebung"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:246
msgid "Environment"
msgstr ""
msgstr "Umgebungsvariablen dumpen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:282
msgid "Environmental Variable(-e)"
@ -690,7 +699,7 @@ msgstr "Fehler"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1673
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1687
msgid "Error loading logs:"
msgstr ""
msgstr "Fehler beim Laden von Protokollen:"
#: applications/luci-app-dockerman/root/usr/share/luci/menu.d/luci-app-dockerman.json:311
msgid "Events"
@ -698,7 +707,7 @@ msgstr "Ereignisse"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:65
msgid "Example:"
msgstr ""
msgstr "Beispiel:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:84
msgid "Example: tcp://0.0.0.0:2375"
@ -711,11 +720,11 @@ msgstr "IPs ausschließen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:411
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:386
msgid "Export"
msgstr ""
msgstr "Exportieren"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:272
msgid "Export this container"
msgstr ""
msgstr "Exportieren Sie diesen Container"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:628
msgid "Exposed All Ports(-P)"
@ -727,32 +736,32 @@ msgstr "Verfügbar gemachte Ports(-p)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1770
msgid "Failed to connect to console"
msgstr ""
msgstr "Die Verbindung zur Konsole konnte nicht hergestellt werden"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:90
msgid "Failed to execute \"/etc/init.d/%s %s\" action: %s"
msgstr ""
msgstr "Die Aktion „/etc/init.d/%s %s“ konnte nicht ausgeführt werden: %s"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:321
msgid "Failed to load events: %s"
msgstr ""
msgstr "Ereignisse konnten nicht geladen werden: %s"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1675
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1686
msgid "Failed to load logs"
msgstr ""
msgstr "Das Laden der Protokolle ist fehlgeschlagen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1568
msgid "Failed to send data"
msgstr ""
msgstr "Das Senden der Daten ist fehlgeschlagen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1583
msgid "Failed to send detach signal"
msgstr ""
msgstr "Das Senden des Trennsignals ist fehlgeschlagen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1722
msgid "Failed to start console"
msgstr ""
msgstr "Versäumt, Konsole zu starten"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:77
msgid "Fatal"
@ -764,11 +773,11 @@ msgstr "Datei"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1602
msgid "File uploaded to"
msgstr ""
msgstr "Datei hochgeladen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:885
msgid "Filesystem Changes"
msgstr ""
msgstr "Dateisystem Änderungen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:463
msgid "Finish Time"
@ -778,10 +787,11 @@ msgstr "Endzeit"
msgid ""
"Flags passed to docker top (ps). Leave empty to use the built-in default."
msgstr ""
"Flaggen an die Docking-Top (ps). Lassen Sie den eingebauten Standard leer."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:50
msgid "For local dockerd socket instances only."
msgstr ""
msgstr "Gilt nur für lokale Dockerd-Socket-Instanzen."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:300
msgid "Force Remove"
@ -789,17 +799,17 @@ msgstr "Entfernen erzwingen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:423
msgid "Force remove"
msgstr ""
msgstr "Entfernen erzwingen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1306
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:745
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:153
msgid "Form is not ready yet."
msgstr ""
msgstr "Form ist noch nicht bereit."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:96
msgid "From"
msgstr ""
msgstr "Von"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:578
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:105
@ -810,7 +820,7 @@ msgstr "Gateway"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:574
msgid "Global IPv6 Address"
msgstr ""
msgstr "Global IPv6 Adresse"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:21
msgid "Global settings"
@ -818,7 +828,7 @@ msgstr "Globale Einstellungen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:23
msgid "Globals"
msgstr ""
msgstr "Allgemein"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:262
msgid "Go to relevant configuration page"
@ -830,15 +840,15 @@ msgstr "Gewähre UCI Zugriff auf luci-app-dockerman"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:470
msgid "Health Status"
msgstr ""
msgstr "Gesundheitsstatus"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:424
msgid "History"
msgstr ""
msgstr "Geschichte"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:430
msgid "Host Directory"
msgstr ""
msgstr "Host-Verzeichnis"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:483
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:622
@ -855,7 +865,7 @@ msgstr "ID"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1903
msgid "IP Address (optional):"
msgstr ""
msgstr "IP-Adresse (optional):"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:45
msgid "IP VLAN"
@ -867,7 +877,7 @@ msgstr "IP-Adressbereich"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:98
msgid "IPAM Driver"
msgstr ""
msgstr "IPAM Treiber"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:570
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:254
@ -877,13 +887,13 @@ msgstr "IPv4-Adresse"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:64
msgid "IPv6"
msgstr ""
msgstr "IPv6"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:572
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:259
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:129
msgid "IPv6 Address"
msgstr ""
msgstr "IPv6-Adresse"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:580
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:134
@ -892,7 +902,7 @@ msgstr "IPv6-Gateway"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:264
msgid "IPv6 Link-Local Address"
msgstr ""
msgstr "IPv6 Link-Lokale Adresse"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:128
msgid "IPv6 Subnet"
@ -904,7 +914,7 @@ msgstr "Abbild"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:357
msgid "Image (from image)"
msgstr ""
msgstr "Bild (aus Bild)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:456
msgid "Image ID"
@ -912,7 +922,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:113
msgid "Image create completed"
msgstr ""
msgstr "Bild erstellen abgeschlossen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:231
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:699
@ -921,7 +931,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:188
msgid "Image push completed"
msgstr ""
msgstr "Image Push abgeschlossen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:199
#: applications/luci-app-dockerman/root/usr/share/luci/menu.d/luci-app-dockerman.json:189
@ -940,11 +950,11 @@ msgstr "Importieren"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:212
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:222
msgid "In Use:"
msgstr ""
msgstr "Im Einsatz:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1105
msgid "Include logs"
msgstr ""
msgstr "Inklusive Protokolle"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:172
msgid "Index Server Address"
@ -1009,11 +1019,11 @@ msgstr "Töten"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:260
msgid "Kill this container"
msgstr ""
msgstr "Töte diesen Container"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:888
msgid "Kind"
msgstr ""
msgstr "Art"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:68
msgid "L2 bridge"
@ -1025,7 +1035,7 @@ msgstr "L3-Brücke"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:94
msgid "LAN connection"
msgstr ""
msgstr "LAN-Verbindung"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:92
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:84
@ -1033,11 +1043,11 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:132
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:243
msgid "Labels"
msgstr ""
msgstr "Etiketten"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1163
msgid "Lines to show:"
msgstr ""
msgstr "Linien zu zeigen:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:508
msgid "Links"
@ -1049,15 +1059,15 @@ msgstr "Verknüpfungen mit anderen Containern"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:309
msgid "Load Events"
msgstr ""
msgstr "Veranstaltungen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1176
msgid "Load Logs"
msgstr ""
msgstr "Logs laden"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1668
msgid "Loading logs…"
msgstr ""
msgstr "Protokolle werden geladen…"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:34
msgid "Lock API endpoint to a specific version (helps guarantee behaviour)."
@ -1265,7 +1275,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:671
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:237
msgid "No"
msgstr ""
msgstr "Nein"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1869
msgid "No additional networks available to connect"
@ -1616,7 +1626,7 @@ msgstr "Neustart"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:154
msgctxt "daemon restart action"
msgid "Restart"
msgstr ""
msgstr "Neustart"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:476
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:234
@ -1659,7 +1669,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:249
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:62
msgid "Scope"
msgstr ""
msgstr "Bereich"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:91
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:336
@ -2214,11 +2224,11 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:341
msgid "restart"
msgstr ""
msgstr "Neustart"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:363
msgid "save"
msgstr ""
msgstr "Speichern"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:412
msgid "secret"
@ -2238,7 +2248,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:364
msgid "tag"
msgstr ""
msgstr "Tag"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:419
msgid "tmpfs Options"

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-13 14:09+0000\n"
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
"PO-Revision-Date: 2026-03-28 19:26+0000\n"
"Last-Translator: Francisco Serrador <fserrador@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsdockerman/es/>\n"
"Language: es\n"
@ -97,7 +97,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:33
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:168
msgid "Api Version"
msgstr "Versión de API"
msgstr "Versión de Api"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:70
msgid "Attachable"
@ -1108,7 +1108,7 @@ msgstr "MAC VLAN"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:122
msgid "Mac Address"
msgstr "Dirección MAC"
msgstr "Dirección Mac"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:335
msgid "Manage and view container configuration"
@ -1925,7 +1925,7 @@ msgstr "Token"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:107
msgid "Tokes and Passwords are not encrypted in the uci configuration."
msgstr ""
"Los tokens y las contraseñas no están cifrados en la configuración de UCI."
"Los vales y las Contraseñas no están cifrados en la configuración de uci."
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:82
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:139

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-09 19:11+0000\n"
"Last-Translator: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>\n"
"PO-Revision-Date: 2026-03-24 19:10+0000\n"
"Last-Translator: Highlandword9 <highlandword9@gmail.com>\n"
"Language-Team: Irish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsdockerman/ga/>\n"
"Language: ga\n"
@ -1739,7 +1739,7 @@ msgstr "Tosaigh an coimeádán seo"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:161
msgid "State"
msgstr "Stát"
msgstr "Staid"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:695
msgid "Stats"

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-13 14:10+0000\n"
"PO-Revision-Date: 2026-03-16 23:10+0000\n"
"Last-Translator: Hyeonjeong Lee <h9101654@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsdockerman/ko/>\n"
@ -32,7 +32,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:249
msgid "Action"
msgstr ""
msgstr "동작"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1816
msgid "Action unavailable:"
@ -188,7 +188,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:733
msgid "CPU Stats"
msgstr ""
msgstr "CPU 통계"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:758
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:787
@ -1058,7 +1058,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:685
msgid "Log Driver"
msgstr ""
msgstr "로그 드라이버"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:71
msgid "Log Level"
@ -1066,7 +1066,7 @@ msgstr "로그 수준"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:688
msgid "Log Options"
msgstr ""
msgstr "로그 옵션"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:727
msgid "Log driver options"
@ -1094,7 +1094,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:731
msgid "Mem Stats"
msgstr ""
msgstr "메모리 통계"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:691
msgid "Memory"
@ -1186,7 +1186,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:730
msgid "Net Stats"
msgstr ""
msgstr "네트워크 통계"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:100
msgid "Network Configurations"
@ -1380,7 +1380,7 @@ msgstr "PID"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:729
msgid "PID Stats"
msgstr ""
msgstr "PID 통계"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/networks.js:189
msgid "Parent Interface"
@ -1407,7 +1407,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:928
msgid "Path:"
msgstr ""
msgstr "경로:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:390
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1797
@ -2120,7 +2120,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:334
msgid "export"
msgstr ""
msgstr "내보내기"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:206
msgid "git repositories require git installed on the docker host."
@ -2164,7 +2164,7 @@ msgstr "일시 정지"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:411
msgid "plugin"
msgstr ""
msgstr "플러그인"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:318
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:347
@ -2189,7 +2189,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:339
msgid "rename"
msgstr ""
msgstr "이름 변경"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:340
msgid "resize"
@ -2209,7 +2209,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:413
msgid "service"
msgstr ""
msgstr "서비스"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:342
msgid "start"

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2025-10-10 05:14+0000\n"
"PO-Revision-Date: 2026-03-18 02:23+0000\n"
"Last-Translator: CRISTIAN ANDREI <cristianvdr@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsdockerman/ro/>\n"
@ -9,7 +9,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
"X-Generator: Weblate 5.14-dev\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:487
msgid "/mnt/path"
@ -223,7 +223,7 @@ msgstr "CPU-uri"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1914
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:499
msgid "Cancel"
msgstr "Anulați"
msgstr "Anulare"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:35
msgid "Causes errors when a chosen API > Docker endpoint API support."
@ -243,7 +243,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1181
msgid "Clear"
msgstr ""
msgstr "Curățare"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:617
msgid "Click to add a new tag to this image"

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-02 22:45+0000\n"
"PO-Revision-Date: 2026-03-22 17:11+0000\n"
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsdockerman/sv/>\n"
@ -12,15 +12,15 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:487
msgid "/mnt/path"
msgstr ""
msgstr "/mnt/genväg"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:439
msgid "/path/in/image"
msgstr ""
msgstr "/genväg/i/avbild"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:127
msgid "0"
msgstr ""
msgstr "0"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:106
msgid "A Token is preferred over a Password."
@ -32,7 +32,7 @@ msgstr "En lista över kärnfunktioner som du kan lägga till i behållaren"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:249
msgid "Action"
msgstr ""
msgstr "Åtgärd"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1816
msgid "Action unavailable:"
@ -40,7 +40,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:249
msgid "Actor"
msgstr ""
msgstr "Skådespelare"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:564
msgid "Add"
@ -61,7 +61,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:616
msgid "Advanced"
msgstr ""
msgstr "Avancerat"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:342
msgid "All Subtypes"
@ -79,7 +79,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:480
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:239
msgid "Always"
msgstr ""
msgstr "Alltid"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:222
msgid "Always pull image first"
@ -167,7 +167,7 @@ msgstr "CAP-ADD(--cap-add)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:839
msgid "COMMAND"
msgstr ""
msgstr "KOMMANDO"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:672
msgid "CPU Period"
@ -229,7 +229,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:882
msgid "Changes"
msgstr ""
msgstr "Ändringar"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:420
msgid "Clean"
@ -280,7 +280,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1012
msgid "Command:"
msgstr ""
msgstr "Kommando:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:80
msgid "Config Only"
@ -324,7 +324,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1397
msgid "Connecting…"
msgstr ""
msgstr "Ansluter…"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:998
msgid "Console"
@ -428,7 +428,7 @@ msgstr "Containrar Översikt"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:421
msgid "Create"
msgstr ""
msgstr "Skapa"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:921
msgid "Create container"
@ -498,7 +498,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:96
msgid "Detail"
msgstr ""
msgstr "Detaljer"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:636
msgid "Device(--device)"
@ -512,7 +512,7 @@ msgstr "Enheter"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1051
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1116
msgid "Disconnect"
msgstr "Avbryt anslutning"
msgstr "Koppla ner"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1854
msgid "Disconnect network"
@ -621,7 +621,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:422
msgid "Edit"
msgstr ""
msgstr "Redigera"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:297
msgid "Edit Mount"
@ -649,7 +649,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:250
msgid "Entry"
msgstr ""
msgstr "Post"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:494
msgid "Env"
@ -657,7 +657,7 @@ msgstr "Env"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:246
msgid "Environment"
msgstr ""
msgstr "Miljö"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:282
msgid "Environmental Variable(-e)"
@ -696,7 +696,7 @@ msgstr "Händelser"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:65
msgid "Example:"
msgstr ""
msgstr "Exempel:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:84
msgid "Example: tcp://0.0.0.0:2375"
@ -709,7 +709,7 @@ msgstr "Exkludera IPs"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:411
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:386
msgid "Export"
msgstr ""
msgstr "Exportera"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:272
msgid "Export this container"
@ -797,7 +797,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:96
msgid "From"
msgstr ""
msgstr "Från"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:578
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:105
@ -832,7 +832,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:424
msgid "History"
msgstr ""
msgstr "Historik"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:430
msgid "Host Directory"
@ -875,7 +875,7 @@ msgstr "IPv4-adress"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:64
msgid "IPv6"
msgstr ""
msgstr "IPv6"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:572
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:259
@ -963,7 +963,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 "Inflöde"
msgstr "Inledning"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:73
msgid ""
@ -1031,7 +1031,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:132
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:243
msgid "Labels"
msgstr ""
msgstr "Etiketter"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1163
msgid "Lines to show:"
@ -1171,11 +1171,11 @@ msgstr "Montera tmpfs-katalogen"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:287
msgid "Mount(--mount)"
msgstr ""
msgstr "Montera(--mount)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:543
msgid "Mounts/Binds"
msgstr ""
msgstr "Monteringar/Bindningar"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:449
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:561
@ -1328,7 +1328,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:116
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:151
msgid "Now"
msgstr ""
msgstr "Nu"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:661
msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit"
@ -1339,7 +1339,7 @@ msgstr "Antal processorer. Tal är ett bråktal. 0.000 betyder ingen gräns"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1354
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:242
msgid "OK"
msgstr ""
msgstr "OK"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:665
msgid "OOM Kill Disable"
@ -1387,7 +1387,7 @@ msgstr "Överblick"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:839
msgid "PID"
msgstr ""
msgstr "PID"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:729
msgid "PID Stats"
@ -1403,7 +1403,7 @@ msgstr "Pass-through (speglar fysisk enhet till ett enda MAC VLAN)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:120
msgid "Password"
msgstr ""
msgstr "Lösenord"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:888
msgid "Path"
@ -1418,12 +1418,12 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:928
msgid "Path:"
msgstr ""
msgstr "Genväg:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:390
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1797
msgid "Pause"
msgstr ""
msgstr "Pausa"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:206
msgid "Pause this container"
@ -1432,7 +1432,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 "Pausades"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:734
msgid "Per CPU Stats"
@ -1474,7 +1474,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1027
msgid "Port:"
msgstr ""
msgstr "Port:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:501
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:164
@ -1495,7 +1495,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:822
msgid "Processes"
msgstr ""
msgstr "Processer"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:319
msgid "Propagation: private"
@ -1559,7 +1559,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:125
msgid "Registry"
msgstr ""
msgstr "Register"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:100
msgid "Registry Auth"
@ -1610,7 +1610,7 @@ msgstr "Starta om"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:154
msgctxt "daemon restart action"
msgid "Restart"
msgstr ""
msgstr "Starta om"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:476
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:234
@ -1632,7 +1632,7 @@ msgstr "Kör kommandot"
#: 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 ""
msgstr "Körs"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:825
msgid "Running Processes"
@ -1640,7 +1640,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:192
msgid "Running:"
msgstr ""
msgstr "Körs:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:839
msgid "STAT"
@ -1750,7 +1750,7 @@ msgstr "Stopp"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:155
msgctxt "daemon stop action"
msgid "Stop"
msgstr ""
msgstr "Stopp"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:248
msgid "Stop this container"
@ -1865,7 +1865,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:249
msgid "Time"
msgstr ""
msgstr "Tid"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:358
msgid "Tmpfs"
@ -1881,7 +1881,7 @@ msgstr "Tmpfs(--tmpfs)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:131
msgid "To"
msgstr ""
msgstr "Till"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:138
msgid "Token"
@ -1900,7 +1900,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:45
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:111
msgid "Total"
msgstr ""
msgstr "Totalt"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:170
msgid "Total Memory"
@ -1917,7 +1917,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:63
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:249
msgid "Type"
msgstr ""
msgstr "Typ"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1127
msgid "Type command here... (Ctrl+D to detach)"

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-13 14:10+0000\n"
"PO-Revision-Date: 2026-03-29 16:36+0000\n"
"Last-Translator: EESF-2 <eesf-2@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Traditional Han script) <https://hosted.weblate.org/"
"projects/openwrt/luciapplicationsdockerman/zh_Hant/>\n"
@ -280,7 +280,7 @@ msgstr "僅配置"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:76
msgid "ConfigFrom"
msgstr ""
msgstr "配置從"
#: applications/luci-app-dockerman/root/usr/share/luci/menu.d/luci-app-dockerman.json:28
msgid "Configuration"
@ -316,7 +316,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1397
msgid "Connecting…"
msgstr ""
msgstr "連線中…"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:998
msgid "Console"
@ -464,7 +464,7 @@ msgstr "DNS 名稱"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:73
msgid "Debug"
msgstr "錯"
msgstr "錯"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:57
msgid "Default bridge"
@ -1311,7 +1311,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:51
msgid "Note: docker provides no container import facility."
msgstr ""
msgstr "注意: docker 不提供容器匯入設施。"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:116
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:151
@ -1336,7 +1336,7 @@ msgstr "OOM 終止停用"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:481
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:240
msgid "On failure"
msgstr ""
msgstr "失敗時"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:37
msgid ""
@ -1439,7 +1439,7 @@ msgstr "請輸入子路徑"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:293
msgid "Please enter an image repo tag"
msgstr ""
msgstr "請輸入映像檔儲存庫標籤"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:299
msgid "Please enter an image source"
@ -1481,7 +1481,7 @@ msgstr "特權模式"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:822
msgid "Processes"
msgstr "程"
msgstr "程"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:319
msgid "Propagation: private"
@ -1513,7 +1513,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:608
msgid "Publish container's port(s) to the host"
msgstr "將容器連接埠發佈至主機"
msgstr "發佈容器連接埠至主機"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:361
msgid "Pull"
@ -1572,7 +1572,7 @@ msgstr "移除標籤"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:625
msgid "Repository"
msgstr ""
msgstr "儲存庫"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:658
msgid "Repository cannot be empty"
@ -1626,7 +1626,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/overview.js:192
msgid "Running:"
msgstr ""
msgstr "執行中:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:839
msgid "STAT"
@ -1644,7 +1644,7 @@ msgstr "範圍"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:91
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:336
msgid "Select Type First"
msgstr ""
msgstr "請先選擇類型"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:159
msgid "Select image tag"
@ -1661,7 +1661,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1142
msgid "Send"
msgstr ""
msgstr "發送"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:273
msgid "Set custom DNS servers"
@ -1749,7 +1749,7 @@ msgstr "已停止"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1090
msgid "Streams:"
msgstr ""
msgstr "串流:"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:104
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:103
@ -1772,7 +1772,7 @@ msgstr "成功"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:1012
msgid "Successful"
msgstr ""
msgstr "成功"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:536
msgid "Sysctl Settings"
@ -1913,7 +1913,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:980
msgid "Unexpected error"
msgstr ""
msgstr "非預期錯誤"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1346
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1631
@ -1924,16 +1924,16 @@ msgstr "未知錯誤"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:479
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:238
msgid "Unless stopped"
msgstr ""
msgstr "除非已停止"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:390
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1798
msgid "Unpause"
msgstr ""
msgstr "取消暫停"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:207
msgid "Unpause this container"
msgstr ""
msgstr "取消暫停此容器"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:564
msgid "Update"
@ -1950,11 +1950,11 @@ msgstr "上傳"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1601
msgid "Uploading file to container…"
msgstr ""
msgstr "上傳檔案到容器中…"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:698
msgid "Uploading image…"
msgstr ""
msgstr "上傳映像檔中…"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1600
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:697
@ -1995,7 +1995,7 @@ msgstr "版本"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:356
msgid "Volume (named)"
msgstr ""
msgstr "儲存區 (已命名)"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:383
msgid "Volume Name"
@ -2037,15 +2037,15 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:404
msgid "builder"
msgstr ""
msgstr "建置器"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:324
msgid "commit"
msgstr ""
msgstr "提交"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1827
msgid "completed"
msgstr ""
msgstr "已完成"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:405
msgid "config"
@ -2091,7 +2091,7 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:329
msgid "die"
msgstr ""
msgstr "die"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:373
msgid "disconnect"
@ -2188,7 +2188,7 @@ msgstr "重新命名"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:340
msgid "resize"
msgstr ""
msgstr "調整大小"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:341
msgid "restart"
@ -2228,11 +2228,11 @@ msgstr ""
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:384
msgid "unmount"
msgstr ""
msgstr "卸載"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:345
msgid "unpause"
msgstr ""
msgstr "取消暫停"
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:365
msgid "untag"

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2025-08-23 10:16+0000\n"
"PO-Revision-Date: 2026-03-18 02:23+0000\n"
"Last-Translator: CRISTIAN ANDREI <cristianvdr@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsksmbd/ro/>\n"
@ -9,7 +9,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
"X-Generator: Weblate 5.13\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:58
msgid "Add optional guest access to IPC$ share, disabled by default"
@ -17,7 +17,7 @@ msgstr ""
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:57
msgid "Allow guest on IPC$."
msgstr ""
msgstr "Permiteți oaspeți pe IPC$."
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:103
msgid "Allow guests"

View File

@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclash
PKG_VERSION:=0.47.071
PKG_RELEASE:=2
PKG_VERSION:=0.47.075
PKG_RELEASE:=3
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

View File

@ -537,10 +537,10 @@ function fetch_sub_info(sub_url, sub_ua)
local info, upload, download, total, day_expire, http_code
local used, expire, day_left, percent, surplus
info = luci.sys.exec(string.format("curl -sLI -X GET -m 10 --retry 2 -w 'http_code=%%{http_code}' -H 'User-Agent: %s' '%s'", sub_ua, sub_url))
info = luci.sys.exec(string.format("curl -sLI -X GET -m 5 --retry 2 -w 'http_code=%%{http_code}' -H 'User-Agent: %s' '%s'", sub_ua, sub_url))
local http_match = string.match(info, "http_code=(%d+)")
if not info or not http_match or tonumber(http_match) ~= 200 then
info = luci.sys.exec(string.format("curl -sLI -X GET -m 10 --retry 2 -w 'http_code=%%{http_code}' -H 'User-Agent: Quantumultx' '%s'", sub_url))
info = luci.sys.exec(string.format("curl -sLI -X GET -m 5 --retry 2 -w 'http_code=%%{http_code}' -H 'User-Agent: Quantumultx' '%s'", sub_url))
http_match = string.match(info, "http_code=(%d+)")
end
@ -735,7 +735,15 @@ function get_sub_url(filename)
function(s)
if s.name == filename and s.address and string.find(s.address, "http") then
string.gsub(s.address, '[^\n]+', function(w) table.insert(info_tb, w) end)
sub_url = info_tb[1]
if #info_tb == 1 then
local url, _ = parse_url_with_name(info_tb[1], filename)
sub_url = url
elseif #info_tb > 1 then
for _, raw in ipairs(info_tb) do
local url, name = parse_url_with_name(raw, filename)
table.insert(providers, {name = name, url = url})
end
end
end
end
)
@ -744,6 +752,10 @@ function get_sub_url(filename)
return {type = "single", url = sub_url}
end
if #providers > 0 then
return {type = "multiple", providers = providers}
end
return nil
end
@ -766,36 +778,33 @@ function sub_info_get()
if filename and not is_start() then
url_result = get_sub_url(filename)
if not url_result then
sub_info = "No Sub Info Found"
elseif url_result.type == "single" then
local info = fetch_sub_info(url_result.url, sub_ua)
if info then
table.insert(providers_data, info)
sub_info = "Successful"
else
sub_info = "No Sub Info Found"
end
elseif url_result.type == "multiple" then
for i, provider in ipairs(url_result.providers) do
local info = fetch_sub_info(provider.url, sub_ua)
if url_result then
if url_result.type == "single" then
local info = fetch_sub_info(url_result.url, sub_ua)
if info then
info.provider_name = provider.name
table.insert(providers_data, info)
end
end
if #providers_data > 0 then
sub_info = "Successful"
else
sub_info = "No Sub Info Found"
for i, provider in ipairs(url_result.providers) do
local info = fetch_sub_info(provider.url, sub_ua)
if info then
info.provider_name = provider.name
table.insert(providers_data, info)
end
end
end
end
end
if #providers_data == 0 then
if not url_result then
luci.http.status(400, "Subscription information not found")
return
end
end
luci.http.prepare_content("application/json")
luci.http.write_json({
sub_info = sub_info,
providers = providers_data,
get_time = os.time(),
url_result = url_result
@ -903,6 +912,27 @@ function action_log_level()
})
end
function action_switch_log()
local level, info
if is_running() then
local daip = daip()
local dase = dase() or ""
local cn_port = cn_port()
level = luci.http.formvalue("log_level")
if not daip or not cn_port or not level then luci.http.status(500, "Switch Faild") return end
info = luci.sys.exec(string.format('curl -sL -m 3 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XPATCH http://"%s":"%s"/configs -d \'{\"log-level\": \"%s\"}\'', dase, daip, cn_port, level))
if info ~= "" then
luci.http.status(500, "Switch Faild")
end
else
luci.http.status(500, "Switch Faild")
end
luci.http.prepare_content("application/json")
luci.http.write_json({
info = info;
})
end
local function s(e)
local t=0
local a={' B/S',' KB/S',' MB/S',' GB/S',' TB/S',' PB/S'}

View File

@ -123,6 +123,14 @@ end
o = s:option(TextValue, "address", translate("Subscribe Address"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
function o.validate(self, value)
if value then
value = value:gsub("\r\n?", "\n")
value = value:gsub("%c*$", "")
end
return value
end
---- template

View File

@ -510,8 +510,8 @@ function o.write(self, section, value)
value = value:gsub("\r\n?", "\n")
local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_chnroute_pass.list")
if value ~= old_value then
NXFS.writefile("/etc/openclash/custom/openclash_custom_chnroute_pass.list", value)
end
NXFS.writefile("/etc/openclash/custom/openclash_custom_chnroute_pass.list", value)
end
end
end

View File

@ -612,8 +612,6 @@
<link rel="stylesheet" href="/luci-static/resources/openclash/lib/codemirror.css"/>
<link rel="stylesheet" href="/luci-static/resources/openclash/theme/material.css"/>
<link rel="stylesheet" href="/luci-static/resources/openclash/theme/material-log.css"/>
<link rel="stylesheet" href="/luci-static/resources/openclash/theme/idea.css"/>
<link rel="stylesheet" href="/luci-static/resources/openclash/addon/fold/foldgutter.css"/>
<link rel="stylesheet" href="/luci-static/resources/openclash/addon/lint/lint.css">
<link rel="stylesheet" href="/luci-static/resources/openclash/addon/display/fullscreen.css">

View File

@ -2972,13 +2972,15 @@
try {
var parsedData = JSON.parse(cachedData);
if (parsedData.sub_info && parsedData.sub_info !== "No Sub Info Found") {
if (this.currentConfigFile === requestConfigFile) {
this.displaySubscriptionInfo(parsedData);
}
} else if (parsedData.sub_info === "No Sub Info Found") {
if (this.currentConfigFile === requestConfigFile) {
this.showNoInfo();
if (parsedData.providers) {
if (parsedData.providers.length > 0) {
if (this.currentConfigFile === requestConfigFile) {
this.displaySubscriptionInfo(parsedData);
}
} else {
if (this.currentConfigFile === requestConfigFile) {
this.showNoInfo();
}
}
}
@ -3006,16 +3008,32 @@
if (SubscriptionManager.currentConfigFile !== requestConfigFile) {
return;
}
if (x && x.status == 200 && status.sub_info && status.sub_info !== "No Sub Info Found") {
SubscriptionManager.retryCount = 0;
localStorage.setItem('sub_info_' + filename, JSON.stringify(status));
SubscriptionManager.displaySubscriptionInfo(status);
} else if (x && x.status == 200 && status.sub_info === "No Sub Info Found") {
SubscriptionManager.retryCount = 0;
localStorage.setItem('sub_info_' + filename, JSON.stringify(status));
SubscriptionManager.showNoInfo();
var needsErrorHandling = false;
if (x && x.status == 200 && status.providers) {
var newProvidersLength = (status.providers) ? status.providers.length : 0;
var cachedProvidersLength = (parsedData && parsedData.providers) ? parsedData.providers.length : 0;
if (newProvidersLength !== cachedProvidersLength && cachedProvidersLength > newProvidersLength) {
needsErrorHandling = true;
}
if (!needsErrorHandling) {
SubscriptionManager.retryCount = 0;
localStorage.setItem('sub_info_' + filename, JSON.stringify(status));
if (status.providers && status.providers.length === 0) {
SubscriptionManager.showNoInfo();
return;
}
SubscriptionManager.displaySubscriptionInfo(status);
return;
}
} else {
SubscriptionManager.handleError();
needsErrorHandling = true;
}
if (needsErrorHandling) {
SubscriptionManager.handleError(cachedData);
}
}, true);
}
@ -3039,15 +3057,11 @@
container.style.display = 'flex';
if (data && data.sub_info && data.sub_info !== "No Sub Info Found") {
if (data.providers && Array.isArray(data.providers) && data.providers.length > 0) {
if (data.providers.length > 1 || data.providers[0].provider_name) {
this.displayMultipleProviders(data.providers, progressSection);
} else {
this.displaySingleProvider(data.providers[0], progressSection);
}
if (data && data.providers && data.providers.length > 0) {
if (data.providers.length > 1 || data.providers[0].provider_name) {
this.displayMultipleProviders(data.providers, progressSection);
} else {
progressSection.style.display = 'none';
this.displaySingleProvider(data.providers[0], progressSection);
}
} else {
progressSection.style.display = 'none';
@ -3284,18 +3298,21 @@
}
},
handleError: function() {
if (this.retryCount >= this.maxRetries) {
handleError: function(cachedData) {
if (!cachedData) {
this.showNoInfo();
}
if (this.retryCount >= this.maxRetries) {
this.retryCount = 0;
if (this.currentConfigFile) {
if (this.currentConfigFile && cachedData) {
localStorage.removeItem('sub_info_' + this.extractFilename(this.currentConfigFile));
}
} else {
this.retryCount++;
setTimeout(function() {
SubscriptionManager.getSubscriptionInfo();
}, 5000);
}, 15000);
}
},

View File

@ -432,9 +432,11 @@
border: 1px solid #999999;
border-radius: 6px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
box-sizing: border-box;
gap: 2px;
}
.sub_provider_fill {
@ -458,6 +460,22 @@
text-overflow: ellipsis;
max-width: 100%;
padding: 0 4px;
line-height: 1;
}
.sub_provider_percent {
position: relative;
z-index: 1;
font-size: 12px;
color: #333;
font-weight: 400;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%;
padding: 0 4px;
line-height: 1;
}
/* Dark mode support */
@ -470,6 +488,10 @@
color: #e0e0e0;
}
:root[data-darkmode="true"] .sub_provider_percent {
color: #e0e0e0;
}
/* Responsive adjustments for multiple providers */
@media (max-width: 1024px) {
.sub_providers_container {
@ -483,6 +505,10 @@
.sub_provider_name {
font-size: 11px;
}
.sub_provider_percent {
font-size: 11px;
}
}
@media (max-width: 768px) {
@ -498,6 +524,10 @@
.sub_provider_name {
font-size: 10px;
}
.sub_provider_percent {
font-size: 10px;
}
}
@media (max-width: 480px) {
@ -510,6 +540,10 @@
.sub_provider_name {
font-size: 9px;
}
.sub_provider_percent {
font-size: 9px;
}
}
@media (max-width: 320px) {
@ -521,6 +555,10 @@
.sub_provider_name {
font-size: 8px;
}
.sub_provider_percent {
font-size: 8px;
}
}
</style>
@ -533,7 +571,7 @@
<div class="sub_div">
<span id='<%=idname%>' class="sub_tab"></span>
<button type="button" class="sub_setting" title='<%:Refresh%>' alt='<%:Refresh%>' onclick='return sub_info_refresh_<%=idname%>(this)'>
<button type="button" class="sub_setting" title='<%:Refresh%>' alt='<%:Refresh%>' onclick='return sub_info_refresh_<%=idname%>(true)'>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M23 4v6h-6"></path>
<path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"></path>
@ -553,7 +591,7 @@
var retry_<%=idname%> = 0;
var s_<%=idname%>;
sub_info_get_<%=idname%>();
sub_info_refresh_<%=idname%>(false);
setTimeout(function(){
initDarkMode();
@ -619,10 +657,6 @@ function progressbar_<%=idname%>(v, m, pc, np, f, t, tr) {
};
function progressbar_multi_<%=idname%>(providers) {
if (!providers || !Array.isArray(providers) || providers.length === 0) {
return '<span>No Providers</span>';
}
var providerCount = providers.length;
var itemWidth;
var containerClass = 'sub_providers_container';
@ -661,6 +695,7 @@ function progressbar_multi_<%=idname%>(providers) {
container += '<div class="sub_provider_item" style="width: ' + itemWidth + '" title="' + titleText + '">' +
'<div class="sub_provider_fill ' + bgColorClass + '" style="width: ' + percent + '%"></div>' +
'<span class="sub_provider_name">' + providerName + '</span>' +
'<span class="sub_provider_percent">' + ' (' + percent + '%)' + '</span>' +
'</div>';
});
@ -673,7 +708,7 @@ function progressbar_multi_<%=idname%>(providers) {
}
return container;
}
};
function initDragScroll_<%=idname%>() {
var container = document.getElementById('sub_providers_<%=idname%>');
@ -722,103 +757,93 @@ function initDragScroll_<%=idname%>() {
container.addEventListener('dragstart', function(e) {
e.preventDefault();
});
}
function sub_info_refresh_<%=idname%>()
{
if (s_<%=idname%>) { clearTimeout(s_<%=idname%>);};
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "sub_info_get")%>', {filename: "<%=filename%>"}, function(x, status) {
if (x && x.status == 200 && status.sub_info != "" && status.sub_info != "No Sub Info Found") {
retry_<%=idname%> = 0;
localStorage.setItem("sub_info_<%=filename%>",JSON.stringify(status));
document.getElementById('<%=idname%>').className = "sub_tab_show";
if (status.providers && Array.isArray(status.providers) && status.providers.length > 0) {
if (status.providers.length === 1) {
var provider = status.providers[0];
document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>(
(provider.surplus ? provider.surplus : provider.used),
(provider.total),
(provider.percent),
false, false,
(provider.expire),
(provider.day_left)
);
} else {
document.getElementById('<%=idname%>').innerHTML = progressbar_multi_<%=idname%>(status.providers);
}
} else {
document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>(
(status.surplus ? status.surplus : status.used),
(status.total),
(status.percent),
false, false,
(status.expire),
(status.day_left)
);
}
} else if ( x && x.status == 200 && status.sub_info == "No Sub Info Found" ) {
retry_<%=idname%> = 0;
localStorage.setItem("sub_info_<%=filename%>",JSON.stringify(status));
document.getElementById('<%=idname%>').className = "sub_tab_show";
document.getElementById('<%=idname%>').innerHTML = "<span><%:No Sub Info Found%></span>";
} else {
if (document.getElementById('<%=idname%>').innerHTML == "" || retry_<%=idname%> > 2) {
document.getElementById('<%=idname%>').className = "sub_tab_show";
document.getElementById('<%=idname%>').innerHTML = "<span style=color:red><%:Sub Info Get Error%></span>";
}
if (retry_<%=idname%> > 2) {
retry_<%=idname%> = 0;
localStorage.removeItem("sub_info_<%=filename%>");
} else {
retry_<%=idname%> ++;
s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>()",1000*120);
return
}
};
s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>()",1000*1800);
});
};
function sub_info_get_<%=idname%>()
{
if (localStorage.getItem("sub_info_<%=filename%>")) {
var save_info = JSON.parse(localStorage.getItem("sub_info_<%=filename%>"));
document.getElementById('<%=idname%>').className = "sub_tab_show";
if (save_info.sub_info == "No Sub Info Found") {
document.getElementById('<%=idname%>').innerHTML = "<span><%:No Sub Info Found%></span>";
}
else {
if (save_info.providers && Array.isArray(save_info.providers) && save_info.providers.length > 0) {
if (save_info.providers.length === 1) {
var provider = save_info.providers[0];
document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>(
(provider.surplus ? provider.surplus : provider.used),
(provider.total),
(provider.percent ? provider.percent : 0),
false, false,
(provider.expire),
(provider.day_left ? provider.day_left : 0)
);
} else {
document.getElementById('<%=idname%>').innerHTML = progressbar_multi_<%=idname%>(save_info.providers);
}
} else {
document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>(
(save_info.surplus ? save_info.surplus : save_info.used),
(save_info.total),
(save_info.percent ? save_info.percent : 0),
false, false,
(save_info.expire),
(save_info.day_left ? save_info.day_left : 0)
);
}
}
}
else {
sub_info_refresh_<%=idname%>();
};
s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>()",1000*30);
function dispaly_progressbar(id, status) {
document.getElementById(id).className = "sub_tab_show";
if (status && status.providers && status.providers.length > 0) {
if (status.providers.length === 1) {
var provider = status.providers[0];
document.getElementById(id).innerHTML = window["progressbar_" + id](
(provider.surplus ? provider.surplus : provider.used),
(provider.total),
(provider.percent),
false, false,
(provider.expire),
(provider.day_left)
);
} else {
document.getElementById(id).innerHTML = window["progressbar_multi_" + id](status.providers);
}
} else {
document.getElementById(id).innerHTML = "<span><%:No Sub Info Found%></span>";
}
};
function sub_info_refresh_<%=idname%>(force) {
if (s_<%=idname%>) { clearTimeout(s_<%=idname%>);};
if (force) {
localStorage.removeItem("sub_info_<%=filename%>");
}
var save_info = (localStorage.getItem("sub_info_<%=filename%>")) ? JSON.parse(localStorage.getItem("sub_info_<%=filename%>")) : null;
var shouldFetchNew = true;
if (save_info && !force) {
dispaly_progressbar('<%=idname%>', save_info);
if (save_info.get_time) {
var currentTime = Math.floor(Date.now() / 1000);
var cacheTime = parseInt(save_info.get_time);
var timeDiff = currentTime - cacheTime;
var halfHourInSeconds = 30 * 60;
if (timeDiff <= halfHourInSeconds) {
shouldFetchNew = false;
}
}
}
if (retry_<%=idname%> >= 3) {
localStorage.removeItem("sub_info_<%=filename%>");
retry_<%=idname%> = 0;
shouldFetchNew = false;
}
if (!shouldFetchNew) {
s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>(false)", 60000*15);
return;
}
if (!save_info) {
document.getElementById('<%=idname%>').className = "sub_tab_show";
document.getElementById('<%=idname%>').innerHTML = "<span><%:Collecting data...%></span>";
}
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "sub_info_get")%>', {filename: "<%=filename%>"}, function(x, status) {
var needsErrorHandling = false;
if (x && x.status == 200 && status.providers) {
var save_info_length = (save_info && save_info.providers) ? save_info.providers.length : 0;
var newProvidersLength = (status && status.providers) ? status.providers.length : 0;
if (save_info_length !== newProvidersLength && save_info_length > newProvidersLength) {
needsErrorHandling = true;
}
if (!needsErrorHandling) {
retry_<%=idname%> = 0;
localStorage.setItem("sub_info_<%=filename%>", JSON.stringify(status));
dispaly_progressbar('<%=idname%>', status);
}
} else {
needsErrorHandling = true;
};
if (needsErrorHandling && retry_<%=idname%> <= 2) {
retry_<%=idname%>++;
s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>(false)", 15000);
} else {
s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>(false)", 60000*15);
};
});
};
function set_subinfo_url_<%=idname%>(btn, filename) {
@ -872,14 +897,12 @@ function set_subinfo_url_<%=idname%>(btn, filename) {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "set_subinfo_url")%>', {filename: filename, url: new_url}, function(x, status) {
if (x && x.status == 200 && status.info == "Success") {
sub_info_refresh_<%=idname%>();
sub_info_refresh_<%=idname%>(true);
alert("<%:Specify subscribe infos sources url successfully!%>");
}
else if (x && x.status == 200 && status.info == "Delete success") {
sub_info_refresh_<%=idname%>();
} else if (x && x.status == 200 && status.info == "Delete success") {
sub_info_refresh_<%=idname%>(true);
alert("<%:Delete Specify Subscribe infos sources url successfully!%>");
}
else {
} else {
alert("<%:Specify subscribe infos sources url failed:%>\n" + status.info);
}
});

View File

@ -2393,9 +2393,6 @@ msgstr "Información de suscripción"
msgid "No Sub Info Found"
msgstr "No se ha encontrado información de suscripción"
msgid "Sub Info Get Error"
msgstr "Error al obtener la información de suscripción"
msgid "Router-Self Proxy"
msgstr "Proxy para tráfico del propio router"

View File

@ -2391,9 +2391,6 @@ msgstr "订阅信息"
msgid "No Sub Info Found"
msgstr "无订阅信息"
msgid "Sub Info Get Error"
msgstr "订阅信息获取失败"
msgid "Router-Self Proxy"
msgstr "*路由本机代理"

View File

@ -1042,10 +1042,10 @@ firewall_lan_ac_traffic()
rule_target_v4="! -d ${fakeip_range} ${src_ip} ${sport_ipt} ${interface_rule} ${dscp_ipt} -j ${target} -m comment --comment ${comment}"
output_rule_target_v4="! -d ${fakeip_range} ${src_ip} ${sport_ipt} ${user_rule} ${interface_rule} ${dscp_ipt} -j ${target} -m comment --comment ${comment}"
rule_target_v6_="! -d ${fakeip_range6} ${src_ip} ${sport_ipt} ${interface_rule} ${dscp_ipt} -j ${target_} -m comment --comment ${comment}"
output_rule_target_v6_="! -d ${fakeip_range6} ${src_ip} ${sport_ipt} ${user_rule} ${interface_rule} ${dscp_ipt} -j ${target_} -m comment --comment ${comment}"
rule_target_v6="! -d ${fakeip_range6} ${src_ip} ${sport_ipt} ${interface_rule} ${dscp_ipt} -j ${target} -m comment --comment ${comment}"
output_rule_target_v6="! -d ${fakeip_range6} ${src_ip} ${sport_ipt} ${user_rule} ${interface_rule} ${dscp_ipt} -j ${target} -m comment --comment ${comment}"
rule_target_v6_="! -d ${fakeip_range6} ${src_ip_v6} ${sport_ipt} ${interface_rule} ${dscp_ipt} -j ${target_} -m comment --comment ${comment}"
output_rule_target_v6_="! -d ${fakeip_range6} ${src_ip_v6} ${sport_ipt} ${user_rule} ${interface_rule} ${dscp_ipt} -j ${target_} -m comment --comment ${comment}"
rule_target_v6="! -d ${fakeip_range6} ${src_ip_v6} ${sport_ipt} ${interface_rule} ${dscp_ipt} -j ${target} -m comment --comment ${comment}"
output_rule_target_v6="! -d ${fakeip_range6} ${src_ip_v6} ${sport_ipt} ${user_rule} ${interface_rule} ${dscp_ipt} -j ${target} -m comment --comment ${comment}"
if [ "${family}" == "both" ] || [ "${family}" == "ipv4" ]; then
if [ -z "${en_mode_tun}" ] || [ "${en_mode_tun}" -eq 2 ]; then
@ -3868,7 +3868,6 @@ stop_service()
rm -rf /tmp/clash_last_version \
/tmp/openclash_last_version \
/tmp/openclash.change \
/tmp/openclash_debug.log \
/tmp/openclash_announcement \
${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute_pass.conf \
${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute6_pass.conf \

View File

@ -84,19 +84,22 @@ module YAML
indent = $1
value = $2.strip
if value.empty?
in_short_id = true
(short_id_index + 1...lines.size).each do |i|
line = lines[i]
next if line.strip.empty?
if line[/^\s*/].length <= short_id_indent_len
break
end
if line =~ LIST_ITEM_REGEX
if in_short_id
indent = $1
value = $2.strip
if value !~ QUOTED_VALUE_REGEX
lines[i] = "#{indent}- \"#{value}\"\n"
end
indent = $1
value = $2.strip
if value =~ KEY_REGEX
break
end
if value !~ QUOTED_VALUE_REGEX
lines[i] = "#{indent}- \"#{value}\"\n"
end
elsif line =~ KEY_REGEX
in_short_id = false
break
end
end

View File

@ -72,13 +72,13 @@ config_download()
LOG_TIP "Config File【$name】Downloading User-Agent【$sub_ua】..."
if [ -n "$subscribe_url_param" ] && [ -n "$c_address" ]; then
LOG_INFO "Config File【$name】Downloading URL【$c_address$subscribe_url_param】..."
DOWNLOAD_URL="${c_address}${subscribe_url_param}"
DOWNLOAD_PARAM="$sub_ua"
local DOWNLOAD_URL="${c_address}${subscribe_url_param}"
local DOWNLOAD_PARAM="$sub_ua"
fi
if [ -z "$DOWNLOAD_URL" ]; then
LOG_INFO "Config File【$name】Downloading URL【$subscribe_url】..."
DOWNLOAD_URL="${subscribe_url}"
DOWNLOAD_PARAM="$sub_ua"
local DOWNLOAD_URL="${subscribe_url}"
local DOWNLOAD_PARAM="$sub_ua"
fi
DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "$CFG_FILE" "$CONFIG_FILE" "$DOWNLOAD_PARAM"
DOWNLOAD_RESULT=$?
@ -395,9 +395,9 @@ sub_info_get()
if [ "$sub_convert" -eq 0 ]; then
subscribe_url=$address
elif [ "$sub_convert" -eq 1 ] && [ -n "$template" ]; then
while read line
do
subscribe_url=$([ -n "$subscribe_url" ] && echo "$subscribe_url|")$(urlencode "$line")
while IFS= read -r line; do
line=$(echo "$line" | tr -d '\r')
subscribe_url=$([ -n "$subscribe_url" ] && echo "$subscribe_url|")$(urlencode "$line")
done < <(echo "$address")
if [ "$template" != "0" ]; then
template_path=$(grep "^$template," /usr/share/openclash/res/sub_ini.list |awk -F ',' '{print $3}' 2>/dev/null)

View File

@ -228,7 +228,7 @@ LOG_ERROR()
{
if [ -n "${1}" ]; then
echo -e "${1}" > $START_LOG
echo -e "${LOGTIME} [error] ${1}" >> $LOG_FILE
echo -e "${LOGTIME} [Error] ${1}" >> $LOG_FILE
fi
}
@ -236,7 +236,7 @@ LOG_TIP()
{
if [ -n "${1}" ]; then
echo -e "${1}" > $START_LOG
echo -e "${LOGTIME} [tip] ${1}" >> $LOG_FILE
echo -e "${LOGTIME} [Tip] ${1}" >> $LOG_FILE
fi
}

View File

@ -182,6 +182,8 @@ done >/dev/null 2>&1
#check the clash service status
if ! ubus call service list '{"name":"openclash"}' 2>/dev/null | jsonfilter -e '@.openclash.instances.*.running' | grep -q 'true'; then
uci -q set openclash.config.enable=0
uci -q commit openclash
/etc/init.d/openclash stop >/dev/null 2>&1
exit 0
fi

View File

@ -2,11 +2,5 @@
uci_get_config() {
local key="$1"
local val
val=$(uci -q get openclash.@overwrite[0]."$key" 2>/dev/null)
if [ -n "$val" ]; then
echo "$val"
else
uci -q get openclash.config."$key"
fi
uci -q get openclash.@overwrite[0]."$key" || uci -q get openclash.config."$key"
}

View File

@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclaw
PKG_VERSION:=$(strip $(shell cat $(CURDIR)/VERSION 2>/dev/null || echo "1.0.0"))
PKG_RELEASE:=6
PKG_RELEASE:=7
PKG_MAINTAINER:=10000ge10000 <10000ge10000@users.noreply.github.com>
PKG_LICENSE:=GPL-3.0

View File

@ -481,8 +481,7 @@ function action_uninstall()
sys.exec("rm -f /tmp/openclaw-setup.* /tmp/openclaw-update.log /tmp/openclaw-plugin-upgrade.* /var/run/openclaw*.pid")
-- 清理 LuCI 缓存
sys.exec("rm -f /tmp/luci-indexcache /tmp/luci-modulecache/* 2>/dev/null")
-- 删除 openclaw 系统用户
sys.exec("sed -i '/^openclaw:/d' /etc/passwd /etc/shadow /etc/group 2>/dev/null")
-- 注意:不再删除 openclaw 系统用户,因为环境卸载后重新安装时需要该用户,且避免产生孤儿文件导致权限问题
http.prepare_content("application/json")
http.write_json({
@ -1150,15 +1149,17 @@ function action_wechat_install()
"echo '开始安装微信插件...' > /tmp/openclaw-wechat-install.log; " ..
"echo '安装路径: %s' >> /tmp/openclaw-wechat-install.log; " ..
"cd %s && " ..
"su -s /bin/sh openclaw -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw " ..
"PATH=%s/node/bin:%s/global/bin:$PATH " ..
"%s -y @tencent-weixin/openclaw-weixin-cli install' >> /tmp/openclaw-wechat-install.log 2>&1; " ..
"su -s /bin/sh -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw " ..
"PATH=%s/node/bin:%s/global/bin:$PATH; cd %s && " ..
"npm config set cache %s/.npm && " ..
"npx -y @tencent-weixin/openclaw-weixin-cli install' openclaw >> /tmp/openclaw-wechat-install.log 2>&1; " ..
"RC=$?; echo $RC > /tmp/openclaw-wechat-install.exit; " ..
"if [ $RC -eq 0 ]; then echo '✅ 微信插件安装成功!' >> /tmp/openclaw-wechat-install.log; " ..
"else echo '❌ 安装失败 (exit: '$RC')' >> /tmp/openclaw-wechat-install.log; fi " ..
") & echo $! > /tmp/openclaw-wechat-install.pid",
install_path, oc_data, oc_data, oc_data, oc_data, install_path, install_path, npx_bin
) sys.exec(install_cmd)
install_path, oc_data, oc_data, oc_data, oc_data, install_path, install_path, oc_data, oc_data
)
sys.exec(install_cmd)
http.prepare_content("application/json")
http.write_json({ status = "ok", message = "微信插件安装已在后台启动..." })
@ -1255,21 +1256,21 @@ function action_wechat_login()
-- 清理旧状态和可能的残留进程
sys.exec("kill -9 $(cat /tmp/openclaw-wechat-login.pid 2>/dev/null) 2>/dev/null")
sys.exec("pkill -f 'channels login --channel openclaw-weixin' 2>/dev/null")
sys.exec("rm -f /tmp/openclaw-wechat-qrcode.txt /tmp/openclaw-wechat-login.pid /tmp/openclaw-wechat-login.exit /tmp/openclaw-wechat-restarted") -- 后台启动登录流程,将二维码输出到文件
sys.exec("rm -f /tmp/openclaw-wechat-qrcode.txt /tmp/openclaw-wechat-login.pid /tmp/openclaw-wechat-login.exit /tmp/openclaw-wechat-restarted")
-- 后台启动登录流程,将二维码输出到文件
local login_cmd = string.format(
"( " ..
"echo '正在启动微信登录...' > /tmp/openclaw-wechat-qrcode.txt; " ..
"echo '安装路径: %s' >> /tmp/openclaw-wechat-qrcode.txt; " ..
"cd %s && " ..
"su -s /bin/sh openclaw -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw OPENCLAW_CONFIG_PATH=%s/.openclaw/openclaw.json " ..
"PATH=%s/node/bin:%s/global/bin:$PATH " ..
"%s %s channels login --channel openclaw-weixin' >> /tmp/openclaw-wechat-qrcode.txt 2>&1; " ..
"echo $? > /tmp/openclaw-wechat-login.exit; " ..
") >/dev/null 2>&1 & echo $! > /tmp/openclaw-wechat-login.pid",
install_path, oc_data, oc_data, oc_data, oc_data, oc_data, install_path, install_path, node_bin, oc_entry
) sys.exec(login_cmd)
http.prepare_content("application/json")
"su -s /bin/sh -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw OPENCLAW_CONFIG_PATH=%s/.openclaw/openclaw.json " ..
"PATH=%s/node/bin:%s/global/bin:$PATH " ..
"cd %s && %s %s channels login --channel openclaw-weixin' openclaw >> /tmp/openclaw-wechat-qrcode.txt 2>&1; " ..
"echo $? > /tmp/openclaw-wechat-login.exit; " ..
") >/dev/null 2>&1 & echo $! > /tmp/openclaw-wechat-login.pid",
install_path, oc_data, oc_data, oc_data, oc_data, oc_data, install_path, install_path, oc_data, node_bin, oc_entry
) sys.exec(login_cmd) http.prepare_content("application/json")
http.write_json({ status = "ok", message = "微信登录流程已启动" })
end
@ -1314,7 +1315,9 @@ function action_wechat_login_status()
local qrcode_url = ""
for url in qrcode:gmatch("https?://[^\n\r]+") do
qrcode_url = url
end -- 检查是否登录成功
end
-- 检查是否登录成功
local logged_in = qrcode:find("登录成功") ~= nil or qrcode:find("成功登录") ~= nil or qrcode:find("Login success") ~= nil or qrcode:find("Logged in") ~= nil
local state = "idle"
@ -1333,7 +1336,7 @@ function action_wechat_login_status()
-- 如果刚登录成功,触发一次重启,确保主进程加载微信
if state == "success" and not nixio.fs.stat("/tmp/openclaw-wechat-restarted", "type") then
sys.exec("touch /tmp/openclaw-wechat-restarted")
sys.exec("/etc/init.d/openclaw restart &")
sys.exec("/etc/init.d/openclaw restart_gateway >/dev/null 2>&1 &")
end http.prepare_content("application/json")
http.write_json({
status = "ok",
@ -1459,17 +1462,16 @@ function action_wechat_upgrade_plugin()
"echo '正在升级微信插件...' > /tmp/openclaw-wechat-install.log; " ..
"echo '安装路径: %s' >> /tmp/openclaw-wechat-install.log; " ..
"cd %s && " ..
"su -s /bin/sh openclaw -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw " ..
"PATH=%s/node/bin:%s/global/bin:$PATH " ..
"%s -y @tencent-weixin/openclaw-weixin-cli install' >> /tmp/openclaw-wechat-install.log 2>&1; " ..
"RC=$?; echo $RC > /tmp/openclaw-wechat-install.exit; " ..
"if [ $RC -eq 0 ]; then echo '✅ 微信插件升级成功!' >> /tmp/openclaw-wechat-install.log; " ..
"else echo '❌ 升级失败 (exit: '$RC')' >> /tmp/openclaw-wechat-install.log; fi " ..
") & echo $! > /tmp/openclaw-wechat-install.pid",
install_path, oc_data, oc_data, oc_data, oc_data, install_path, install_path, npx_bin
) sys.exec(upgrade_cmd)
http.prepare_content("application/json")
"su -s /bin/sh -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw " ..
"PATH=%s/node/bin:%s/global/bin:$PATH; cd %s && " ..
"npm config set cache %s/.npm && " ..
"npx -y @tencent-weixin/openclaw-weixin-cli install' openclaw >> /tmp/openclaw-wechat-install.log 2>&1; " ..
"RC=$?; echo $RC > /tmp/openclaw-wechat-install.exit; " ..
"if [ $RC -eq 0 ]; then echo '✅ 微信插件升级成功!' >> /tmp/openclaw-wechat-install.log; " ..
"else echo '❌ 升级失败 (exit: '$RC')' >> /tmp/openclaw-wechat-install.log; fi " ..
") & echo $! > /tmp/openclaw-wechat-install.pid",
install_path, oc_data, oc_data, oc_data, oc_data, install_path, install_path, oc_data, oc_data
) sys.exec(upgrade_cmd) http.prepare_content("application/json")
http.write_json({ status = "ok", message = "微信插件升级已在后台启动..." })
end
@ -1514,17 +1516,15 @@ function action_wechat_logout()
end
-- 在后台执行 logout
local logout_cmd = string.format(
"cd %s && su -s /bin/sh openclaw -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw OPENCLAW_CONFIG_PATH=%s/.openclaw/openclaw.json " ..
"PATH=%s/node/bin:%s/global/bin:$PATH " ..
"%s %s channels logout --channel openclaw-weixin --account \"%s\"'",
oc_data, oc_data, oc_data, oc_data, oc_data, install_path, install_path, node_bin, oc_entry, account_id
)
sys.exec(logout_cmd .. " >/dev/null 2>&1")
local logout_cmd = string.format(
"su -s /bin/sh -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw OPENCLAW_CONFIG_PATH=%s/.openclaw/openclaw.json " ..
"PATH=%s/node/bin:%s/global/bin:$PATH " ..
"cd %s && %s %s channels logout --channel openclaw-weixin --account \"%s\"' openclaw",
oc_data, oc_data, oc_data, oc_data, install_path, install_path, oc_data, node_bin, oc_entry, account_id
) sys.exec(logout_cmd .. " >/dev/null 2>&1")
-- 重启服务
sys.exec("/etc/init.d/openclaw restart &")
sys.exec("/etc/init.d/openclaw restart_gateway >/dev/null 2>&1 &")
http.prepare_content("application/json")
http.write_json({ status = "ok", message = "已下线账号: " .. account_id })

View File

@ -205,15 +205,19 @@ fi
# 问题: 旧版本写入的是 "openclaw-qqbot",但实际插件名是 "@tencent-connect/openclaw-qqbot"
fix_plugin_config() {
local qqbot_ext_dir="${OC_DATA}/.openclaw/extensions/openclaw-qqbot"
[ ! -d "$qqbot_ext_dir" ] && return
local weixin_ext_dir="${OC_DATA}/.openclaw/extensions/openclaw-weixin"
[ ! -d "$qqbot_ext_dir" ] && [ ! -d "$weixin_ext_dir" ] && return
[ ! -f "$CONFIG_FILE" ] && return
"$NODE_BIN" -e "
const fs=require('fs');
try{
const d=JSON.parse(fs.readFileSync('${CONFIG_FILE}','utf8'));
if(!d.plugins)d.plugins={};
let modified=false;
if(!d.plugins)d.plugins={};
if(!Array.isArray(d.plugins.allow))d.plugins.allow=[];
const hasWechat=fs.existsSync('${weixin_ext_dir}'); if(hasWechat && !d.plugins.allow.includes("@tencent-weixin/openclaw-weixin")) { d.plugins.allow.push("@tencent-weixin/openclaw-weixin"); modified=true; }
// 修复 plugins.allow 数组中的插件名称
if(Array.isArray(d.plugins.allow)){

View File

@ -389,9 +389,34 @@ install_openclaw() {
fi
}
ensure_openclaw_user() {
if ! id openclaw >/dev/null 2>&1; then
echo " 正在创建 openclaw 系统用户..."
local OC_UID=1000
while grep -q "^[^:]*:x:${OC_UID}:" /etc/passwd 2>/dev/null; do
OC_UID=$((OC_UID + 1))
done
local OC_GID=$OC_UID
while grep -q "^[^:]*:x:${OC_GID}:" /etc/group 2>/dev/null; do
OC_GID=$((OC_GID + 1))
done
if ! grep -q "^openclaw:" /etc/passwd 2>/dev/null; then
echo "openclaw:x:${OC_UID}:${OC_GID}:openclaw:/opt/openclaw/data:/bin/false" >> /etc/passwd
fi
if ! grep -q "^openclaw:" /etc/shadow 2>/dev/null; then
echo "openclaw:x:0:0:99999:7:::" >> /etc/shadow
fi
if ! grep -q "^openclaw:" /etc/group 2>/dev/null; then
echo "openclaw:x:${OC_GID}:" >> /etc/group
fi
log_info "用户 openclaw 创建成功"
fi
}
init_openclaw() {
echo ""
echo "=== 初始化 OpenClaw ==="
ensure_openclaw_user
# 创建数据目录
ensure_mkdir "$OC_DATA/.openclaw"

View File

@ -25,12 +25,11 @@ IPSET_BLACK6="passwall_black6"
IPSET_WHITE6="passwall_white6"
IPSET_BLOCK6="passwall_block6"
FORCE_INDEX=2
USE_SHUNT_TCP=0
USE_SHUNT_UDP=0
FWMARK="0x50535732"
# ASCII code for PSW1.Use whatever,just not the same.
FWMARK="0x50535731"
ipt=$(command -v iptables-legacy || command -v iptables)
ip6t=$(command -v ip6tables-legacy || command -v ip6tables)
@ -180,7 +179,8 @@ REDIRECT() {
get_jump_ipt() {
case "$1" in
direct)
local mark="-m mark ! --mark 1"
local s=""
local mark="-m mark ! --mark ${FWMARK}"
s="${mark} -j RETURN"
echo $s
;;
@ -1349,7 +1349,7 @@ del_firewall_rule() {
ip rule del fwmark ${FWMARK} lookup 999 priority 999 2>/dev/null
ip route del local 0.0.0.0/0 dev lo table 999 2>/dev/null
ip -6 rule del fwmark ${FWMARK} table 999 priority 999 2>/dev/null
ip -6 rule del fwmark ${FWMARK} lookup 999 priority 999 2>/dev/null
ip -6 route del local ::/0 dev lo table 999 2>/dev/null
destroy_ipset $IPSET_LOCAL

View File

@ -26,12 +26,11 @@ NFTSET_BLACK6="passwall_black6"
NFTSET_WHITE6="passwall_white6"
NFTSET_BLOCK6="passwall_block6"
FORCE_INDEX=0
USE_SHUNT_TCP=0
USE_SHUNT_UDP=0
FWMARK="0x50535732"
# ASCII code for PSW1.Use whatever,just not the same.
FWMARK="0x50535731"
FWI=$(uci -q get firewall.passwall.path 2>/dev/null)
FAKE_IP="198.18.0.0/15"
@ -221,10 +220,10 @@ gen_nftset() {
[ $# -gt 0 ] || [ ! -t 0 ] && insert_nftset "$nftset_name" "$timeout_argument_element" "$@"
}
get_jump_ipt() {
get_jump_nft() {
case "$1" in
direct)
echo "mark != 1 counter return"
echo "mark != ${FWMARK} counter return"
;;
proxy)
if [ -n "$2" ] && [ -n "$(echo $2 | grep "^counter")" ]; then
@ -447,14 +446,14 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip6 daddr $FAKE_IP_6 counter drop comment \"$remarks\"" 2>/dev/null
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip6 daddr @$black6_set_name counter drop comment \"$remarks\"" 2>/dev/null
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip6 daddr @$gfw6_set_name counter drop comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${chn_list} "counter drop") comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${chn_list} "counter drop") comment \"$remarks\"" 2>/dev/null
[ "${use_shunt_tcp}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip6 daddr @$shunt6_set_name counter drop comment \"$remarks\"" 2>/dev/null
[ "${tcp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") counter drop comment \"$remarks\"" 2>/dev/null
}
nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip daddr $FAKE_IP counter drop comment \"$remarks\""
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip daddr @$black_set_name counter drop comment \"$remarks\""
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip daddr @$gfw_set_name counter drop comment \"$remarks\""
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip daddr @$NFTSET_CHN $(get_jump_ipt ${chn_list} "counter drop") comment \"$remarks\""
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip daddr @$NFTSET_CHN $(get_jump_nft ${chn_list} "counter drop") comment \"$remarks\""
[ "${use_shunt_tcp}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") ip daddr @$shunt_set_name counter drop comment \"$remarks\""
[ "${tcp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp ${_ipt_source} $(factor $tcp_proxy_drop_ports "tcp dport") counter drop comment \"$remarks\""
echolog " - ${msg}屏蔽代理 TCP 端口[${tcp_proxy_drop_ports}]"
@ -465,14 +464,14 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip6 daddr $FAKE_IP_6 counter drop comment \"$remarks\"" 2>/dev/null
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip6 daddr @$black6_set_name counter drop comment \"$remarks\"" 2>/dev/null
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip6 daddr @$gfw6_set_name counter drop comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${chn_list} "counter drop") comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${chn_list} "counter drop") comment \"$remarks\"" 2>/dev/null
[ "${use_shunt_udp}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip6 daddr @$shunt6_set_name counter drop comment \"$remarks\"" 2>/dev/null
[ "${udp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") counter drop comment \"$remarks\"" 2>/dev/null
}
nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip daddr $FAKE_IP counter drop comment \"$remarks\"" 2>/dev/null
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip daddr @$black_set_name counter drop comment \"$remarks\"" 2>/dev/null
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip daddr @$gfw_set_name counter drop comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip daddr @$NFTSET_CHN $(get_jump_ipt ${chn_list} "counter drop") comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip daddr @$NFTSET_CHN $(get_jump_nft ${chn_list} "counter drop") comment \"$remarks\"" 2>/dev/null
[ "${use_shunt_udp}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") ip daddr @$shunt_set_name counter drop comment \"$remarks\"" 2>/dev/null
[ "${udp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_proxy_drop_ports "udp dport") counter drop comment \"$remarks\"" 2>/dev/null
echolog " - ${msg}屏蔽代理 UDP 端口[${udp_proxy_drop_ports}]"
@ -497,7 +496,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} ip daddr $FAKE_IP $(REDIRECT) comment \"$remarks\""
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} ip daddr @$black_set_name $(REDIRECT) comment \"$remarks\""
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} ip daddr @$gfw_set_name $(REDIRECT) comment \"$remarks\""
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} ip daddr @$NFTSET_CHN $(get_jump_ipt ${chn_list}) comment \"$remarks\""
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} ip daddr @$NFTSET_CHN $(get_jump_nft ${chn_list}) comment \"$remarks\""
[ "${use_shunt_tcp}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} ip daddr @$shunt_set_name $(REDIRECT) comment \"$remarks\""
[ "${tcp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} $(REDIRECT) comment \"$remarks\""
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ${_ipt_source} return comment \"$remarks\""
@ -508,7 +507,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ${_ipt_source} ip6 daddr $FAKE_IP_6 $(REDIRECT) comment \"$remarks\"" 2>/dev/null
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ${_ipt_source} ip6 daddr @$black6_set_name $(REDIRECT) comment \"$remarks\"" 2>/dev/null
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ${_ipt_source} ip6 daddr @$gfw6_set_name $(REDIRECT) comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ${_ipt_source} ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${chn_list}) comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ${_ipt_source} ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${chn_list}) comment \"$remarks\"" 2>/dev/null
[ "${use_shunt_tcp}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ${_ipt_source} ip6 daddr @$shunt6_set_name $(REDIRECT) comment \"$remarks\"" 2>/dev/null
[ "${tcp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ${_ipt_source} $(REDIRECT) comment \"$remarks\"" 2>/dev/null
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ${_ipt_source} return comment \"$remarks\"" 2>/dev/null
@ -517,7 +516,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ${_ipt_source} ip daddr $FAKE_IP ${nft_j} comment \"$remarks\""
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip daddr @$black_set_name ${nft_j} comment \"$remarks\" "
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip daddr @$gfw_set_name ${nft_j} comment \"$remarks\" "
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip daddr @$NFTSET_CHN $(get_jump_ipt ${chn_list} "${nft_j}") comment \"$remarks\" "
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip daddr @$NFTSET_CHN $(get_jump_nft ${chn_list} "${nft_j}") comment \"$remarks\" "
[ "${use_shunt_tcp}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip daddr @$shunt_set_name ${nft_j} comment \"$remarks\""
[ "${tcp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ${nft_j} comment \"$remarks\""
[ -n "${is_tproxy}" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ${_ipt_source} $(REDIRECT $tcp_port TPROXY4) comment \"$remarks\""
@ -526,7 +525,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} ip6 daddr $FAKE_IP_6 counter jump PSW_RULE comment \"$remarks\""
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip6 daddr @$black6_set_name counter jump PSW_RULE comment \"$remarks\"" 2>/dev/null
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip6 daddr @$gfw6_set_name counter jump PSW_RULE comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${chn_list} "counter jump PSW_RULE") comment \"$remarks\" "
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${chn_list} "counter jump PSW_RULE") comment \"$remarks\" "
[ "${use_shunt_tcp}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") ip6 daddr @$shunt6_set_name counter jump PSW_RULE comment \"$remarks\"" 2>/dev/null
[ "${tcp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(factor $tcp_redir_ports "tcp dport") counter jump PSW_RULE comment \"$remarks\"" 2>/dev/null
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ${_ipt_source} $(REDIRECT $tcp_port TPROXY) comment \"$remarks\"" 2>/dev/null
@ -548,7 +547,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} ip daddr $FAKE_IP counter jump PSW_RULE comment \"$remarks\""
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip daddr @$black_set_name counter jump PSW_RULE comment \"$remarks\""
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip daddr @$gfw_set_name counter jump PSW_RULE comment \"$remarks\""
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip daddr @$NFTSET_CHN $(get_jump_ipt ${chn_list} "counter jump PSW_RULE") comment \"$remarks\""
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip daddr @$NFTSET_CHN $(get_jump_nft ${chn_list} "counter jump PSW_RULE") comment \"$remarks\""
[ "${use_shunt_udp}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip daddr @$shunt_set_name counter jump PSW_RULE comment \"$remarks\""
[ "${udp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") counter jump PSW_RULE comment \"$remarks\""
nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ${_ipt_source} $(REDIRECT $udp_port TPROXY4) comment \"$remarks\""
@ -557,7 +556,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} ip6 daddr $FAKE_IP_6 counter jump PSW_RULE comment \"$remarks\""
[ "${use_proxy_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip6 daddr @$black6_set_name counter jump PSW_RULE comment \"$remarks\"" 2>/dev/null
[ "${use_gfw_list}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip6 daddr @$gfw6_set_name counter jump PSW_RULE comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${chn_list} "counter jump PSW_RULE") comment \"$remarks\"" 2>/dev/null
[ "${chn_list}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${chn_list} "counter jump PSW_RULE") comment \"$remarks\"" 2>/dev/null
[ "${use_shunt_udp}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") ip6 daddr @$shunt6_set_name counter jump PSW_RULE comment \"$remarks\"" 2>/dev/null
[ "${udp_proxy_mode}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_redir_ports "udp dport") counter jump PSW_RULE comment \"$remarks\"" 2>/dev/null
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ${_ipt_source} $(REDIRECT $udp_port TPROXY) comment \"$remarks\"" 2>/dev/null
@ -634,7 +633,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip6 daddr $FAKE_IP_6 counter drop comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip6 daddr @$NFTSET_BLACK6 counter drop comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip6 daddr @$NFTSET_GFW6 counter drop comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${CHN_LIST} "counter drop") comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${CHN_LIST} "counter drop") comment \"默认\""
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip6 daddr @$NFTSET_SHUNT6 counter drop comment \"默认\""
[ "${TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") counter drop comment \"默认\""
}
@ -642,7 +641,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip daddr $FAKE_IP counter drop comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip daddr @$NFTSET_BLACK counter drop comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip daddr @$NFTSET_GFW counter drop comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip daddr @$NFTSET_CHN $(get_jump_ipt ${CHN_LIST} "counter drop") comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip daddr @$NFTSET_CHN $(get_jump_nft ${CHN_LIST} "counter drop") comment \"默认\""
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") ip daddr @$NFTSET_SHUNT counter drop comment \"默认\""
[ "${TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") counter drop comment \"默认\""
echolog " - ${msg}屏蔽代理 TCP 端口[${TCP_PROXY_DROP_PORTS}]"
@ -653,14 +652,14 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip6 daddr $FAKE_IP_6 counter drop comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip6 daddr @$NFTSET_BLACK6 counter drop comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip6 daddr @$NFTSET_GFW6 counter drop comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${CHN_LIST} "counter drop") comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${CHN_LIST} "counter drop") comment \"默认\""
[ "${USE_SHUNT_UDP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip6 daddr @$NFTSET_SHUNT6 counter drop comment \"默认\""
[ "${UDP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") counter drop comment \"默认\""
}
nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip daddr $FAKE_IP counter drop comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip daddr @$NFTSET_BLACK counter drop comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip daddr @$NFTSET_GFW counter drop comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip daddr @$NFTSET_CHN $(get_jump_ipt ${CHN_LIST} "counter drop") comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip daddr @$NFTSET_CHN $(get_jump_nft ${CHN_LIST} "counter drop") comment \"默认\""
[ "${USE_SHUNT_UDP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") ip daddr @$NFTSET_SHUNT counter drop comment \"默认\""
[ "${UDP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") counter drop comment \"默认\""
echolog " - ${msg}屏蔽代理 UDP 端口[${UDP_PROXY_DROP_PORTS}]"
@ -690,7 +689,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ip daddr $FAKE_IP $(REDIRECT) comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ip daddr @$NFTSET_BLACK $(REDIRECT) comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ip daddr @$NFTSET_GFW $(REDIRECT) comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ip daddr @$NFTSET_CHN $(get_jump_ipt ${CHN_LIST}) comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ip daddr @$NFTSET_CHN $(get_jump_nft ${CHN_LIST}) comment \"默认\""
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp ip daddr @$NFTSET_SHUNT $(REDIRECT) comment \"默认\""
[ "${TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp $(REDIRECT) comment \"默认\""
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT ip protocol icmp return comment \"默认\""
@ -701,7 +700,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ip6 daddr $FAKE_IP_6 $(REDIRECT) comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ip6 daddr @$NFTSET_BLACK6 $(REDIRECT) comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ip6 daddr @$NFTSET_GFW6 $(REDIRECT) comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${CHN_LIST}) comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${CHN_LIST}) comment \"默认\""
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 ip6 daddr @$NFTSET_SHUNT6 $(REDIRECT) comment \"默认\""
[ "${TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 $(REDIRECT) comment \"默认\""
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT meta l4proto icmpv6 return comment \"默认\""
@ -710,7 +709,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ip daddr $FAKE_IP ${nft_j} comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip daddr @$NFTSET_BLACK ${nft_j} comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip daddr @$NFTSET_GFW ${nft_j} comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip daddr @$NFTSET_CHN $(get_jump_ipt ${CHN_LIST} "${nft_j}") comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip daddr @$NFTSET_CHN $(get_jump_nft ${CHN_LIST} "${nft_j}") comment \"默认\""
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip daddr @$NFTSET_SHUNT ${nft_j} comment \"默认\""
[ "${TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp $(factor $TCP_REDIR_PORTS "tcp dport") ${nft_j} comment \"默认\""
[ -n "${is_tproxy}" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp $(REDIRECT $TCP_REDIR_PORT TPROXY4) comment \"默认\""
@ -720,7 +719,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp ip6 daddr $FAKE_IP_6 counter jump PSW_RULE comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip6 daddr @$NFTSET_BLACK6 counter jump PSW_RULE comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip6 daddr @$NFTSET_GFW6 counter jump PSW_RULE comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${CHN_LIST} "counter jump PSW_RULE") comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${CHN_LIST} "counter jump PSW_RULE") comment \"默认\""
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_REDIR_PORTS "tcp dport") ip6 daddr @$NFTSET_SHUNT6 counter jump PSW_RULE comment \"默认\""
[ "${TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(factor $TCP_REDIR_PORTS "tcp dport") counter jump PSW_RULE comment \"默认\""
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp $(REDIRECT $TCP_REDIR_PORT TPROXY) comment \"默认\""
@ -743,7 +742,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp ip daddr $FAKE_IP counter jump PSW_RULE comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_REDIR_PORTS "udp dport") ip daddr @$NFTSET_BLACK counter jump PSW_RULE comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_REDIR_PORTS "udp dport") ip daddr @$NFTSET_GFW counter jump PSW_RULE comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_REDIR_PORTS "udp dport") ip daddr @$NFTSET_CHN $(get_jump_ipt ${CHN_LIST} "counter jump PSW_RULE") comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_REDIR_PORTS "udp dport") ip daddr @$NFTSET_CHN $(get_jump_nft ${CHN_LIST} "counter jump PSW_RULE") comment \"默认\""
[ "${USE_SHUNT_UDP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_REDIR_PORTS "udp dport") ip daddr @$NFTSET_SHUNT counter jump PSW_RULE comment \"默认\""
[ "${UDP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE comment \"默认\""
nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp $(REDIRECT $UDP_REDIR_PORT TPROXY4) comment \"默认\""
@ -753,7 +752,7 @@ load_acl() {
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp ip6 daddr $FAKE_IP_6 counter jump PSW_RULE comment \"默认\""
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_REDIR_PORTS "udp dport") ip6 daddr @$NFTSET_BLACK6 counter jump PSW_RULE comment \"默认\""
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_REDIR_PORTS "udp dport") ip6 daddr @$NFTSET_GFW6 counter jump PSW_RULE comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_REDIR_PORTS "udp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${CHN_LIST} "counter jump PSW_RULE") comment \"默认\""
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_REDIR_PORTS "udp dport") ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${CHN_LIST} "counter jump PSW_RULE") comment \"默认\""
[ "${USE_SHUNT_UDP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_REDIR_PORTS "udp dport") ip6 daddr @$NFTSET_SHUNT6 counter jump PSW_RULE comment \"默认\""
[ "${UDP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE comment \"默认\""
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp $(REDIRECT $UDP_REDIR_PORT TPROXY) comment \"默认\""
@ -1012,8 +1011,7 @@ add_firewall_rule() {
nft "add chain $NFTABLE_NAME PSW_DIVERT"
nft "flush chain $NFTABLE_NAME PSW_DIVERT"
nft "add rule $NFTABLE_NAME PSW_DIVERT meta l4proto tcp socket transparent 1 mark set ${FWMARK} counter accept"
nft "add rule $NFTABLE_NAME PSW_DIVERT meta l4proto udp socket transparent 1 mark set ${FWMARK} counter accept"
nft "add rule $NFTABLE_NAME PSW_DIVERT meta l4proto { tcp, udp } socket transparent 1 mark set ${FWMARK} counter accept"
nft "add chain $NFTABLE_NAME PSW_DNS"
nft "flush chain $NFTABLE_NAME PSW_DNS"
@ -1031,7 +1029,7 @@ add_firewall_rule() {
nft "add rule $NFTABLE_NAME PSW_RULE counter meta mark set ct mark"
nft "add rule $NFTABLE_NAME PSW_RULE meta mark ${FWMARK} counter return"
nft "add rule $NFTABLE_NAME PSW_RULE tcp flags & (fin|syn|rst|ack) == syn counter meta mark set ${FWMARK}"
nft "add rule $NFTABLE_NAME PSW_RULE meta l4proto udp ct state new,related counter meta mark set ${FWMARK}"
nft "add rule $NFTABLE_NAME PSW_RULE meta l4proto udp ct state { new, related } counter meta mark set ${FWMARK}"
nft "add rule $NFTABLE_NAME PSW_RULE counter ct mark set mark"
#ipv4 tproxy mode and udp
@ -1194,7 +1192,7 @@ add_firewall_rule() {
nft add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp ip daddr $FAKE_IP $(factor $TCP_PROXY_DROP_PORTS "tcp dport") counter drop
[ "${USE_PROXY_LIST}" = "1" ] && nft add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp ip daddr @$NFTSET_BLACK $(factor $TCP_PROXY_DROP_PORTS "tcp dport") counter drop
[ "${USE_GFW_LIST}" = "1" ] && nft add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp ip daddr @$NFTSET_GFW $(factor $TCP_PROXY_DROP_PORTS "tcp dport") counter drop
[ "${CHN_LIST}" != "0" ] && nft add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp ip daddr @$NFTSET_CHN $(factor $TCP_PROXY_DROP_PORTS "tcp dport") $(get_jump_ipt ${CHN_LIST} "counter drop")
[ "${CHN_LIST}" != "0" ] && nft add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp ip daddr @$NFTSET_CHN $(factor $TCP_PROXY_DROP_PORTS "tcp dport") $(get_jump_nft ${CHN_LIST} "counter drop")
[ "${USE_SHUNT_TCP}" = "1" ] && nft add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp ip daddr @$NFTSET_SHUNT $(factor $TCP_PROXY_DROP_PORTS "tcp dport") counter drop
[ "${LOCALHOST_TCP_PROXY_MODE}" != "disable" ] && nft add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp $(factor $TCP_PROXY_DROP_PORTS "tcp dport") counter drop
echolog " - ${msg}屏蔽代理 TCP 端口[${TCP_PROXY_DROP_PORTS}]"
@ -1204,7 +1202,7 @@ add_firewall_rule() {
nft add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr $FAKE_IP $(factor $UDP_PROXY_DROP_PORTS "udp dport") counter drop
[ "${USE_PROXY_LIST}" = "1" ] && nft add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_BLACK $(factor $UDP_PROXY_DROP_PORTS "udp dport") counter drop
[ "${USE_GFW_LIST}" = "1" ] && nft add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_GFW $(factor $UDP_PROXY_DROP_PORTS "udp dport") counter drop
[ "${CHN_LIST}" != "0" ] && nft add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_CHN $(factor $UDP_PROXY_DROP_PORTS "udp dport") $(get_jump_ipt ${CHN_LIST} "counter drop")
[ "${CHN_LIST}" != "0" ] && nft add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_CHN $(factor $UDP_PROXY_DROP_PORTS "udp dport") $(get_jump_nft ${CHN_LIST} "counter drop")
[ "${USE_SHUNT_UDP}" = "1" ] && nft add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_SHUNT $(factor $UDP_PROXY_DROP_PORTS "udp dport") counter drop
[ "${LOCALHOST_UDP_PROXY_MODE}" != "disable" ] && nft add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp $(factor $UDP_PROXY_DROP_PORTS "udp dport") counter drop
echolog " - ${msg}屏蔽代理 UDP 端口[${UDP_PROXY_DROP_PORTS}]"
@ -1245,7 +1243,7 @@ add_firewall_rule() {
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo ip protocol icmp ip daddr $FAKE_IP counter redirect"
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo ip protocol icmp ip daddr @$NFTSET_BLACK counter redirect"
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo ip protocol icmp ip daddr @$NFTSET_GFW counter redirect"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo ip protocol icmp ip daddr @$NFTSET_CHN $(get_jump_ipt ${CHN_LIST})"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo ip protocol icmp ip daddr @$NFTSET_CHN $(get_jump_nft ${CHN_LIST})"
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo ip protocol icmp ip daddr @$NFTSET_SHUNT counter redirect"
[ -n "${LOCALHOST_TCP_PROXY_MODE}" ] && [ "${LOCALHOST_TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo ip protocol icmp counter redirect"
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo ip protocol icmp counter return"
@ -1255,7 +1253,7 @@ add_firewall_rule() {
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo meta l4proto icmpv6 ip6 daddr $FAKE_IP_6 counter redirect"
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo meta l4proto icmpv6 ip6 daddr @$NFTSET_BLACK6 counter redirect"
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo meta l4proto icmpv6 ip6 daddr @$NFTSET_GFW6 counter redirect"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo meta l4proto icmpv6 ip6 daddr @$NFTSET_CHN6 $(get_jump_ipt ${CHN_LIST})"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo meta l4proto icmpv6 ip6 daddr @$NFTSET_CHN6 $(get_jump_nft ${CHN_LIST})"
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo meta l4proto icmpv6 ip6 daddr @$NFTSET_SHUNT6 counter redirect"
[ -n "${LOCALHOST_TCP_PROXY_MODE}" ] && [ "${LOCALHOST_TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo meta l4proto icmpv6 counter redirect"
nft "add rule $NFTABLE_NAME PSW_ICMP_REDIRECT oif lo meta l4proto icmpv6 counter return"
@ -1273,7 +1271,7 @@ add_firewall_rule() {
nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ip daddr $FAKE_IP ${nft_j}"
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ip daddr @$NFTSET_BLACK $(factor $TCP_REDIR_PORTS "tcp dport") ${nft_j}"
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ip daddr @$NFTSET_GFW $(factor $TCP_REDIR_PORTS "tcp dport") ${nft_j}"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ip daddr @$NFTSET_CHN $(factor $TCP_REDIR_PORTS "tcp dport") $(get_jump_ipt ${CHN_LIST} "${nft_j}")"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ip daddr @$NFTSET_CHN $(factor $TCP_REDIR_PORTS "tcp dport") $(get_jump_nft ${CHN_LIST} "${nft_j}")"
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp ip daddr @$NFTSET_SHUNT $(factor $TCP_REDIR_PORTS "tcp dport") ${nft_j}"
[ "${LOCALHOST_TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME $nft_chain ip protocol tcp $(factor $TCP_REDIR_PORTS "tcp dport") ${nft_j}"
[ -n "${is_tproxy}" ] && nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol tcp iif lo $(REDIRECT $TCP_REDIR_PORT TPROXY4) comment \"本机\""
@ -1287,7 +1285,7 @@ add_firewall_rule() {
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto tcp ip6 daddr $FAKE_IP_6 counter jump PSW_RULE"
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto tcp ip6 daddr @$NFTSET_BLACK6 $(factor $TCP_REDIR_PORTS "tcp dport") counter jump PSW_RULE"
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto tcp ip6 daddr @$NFTSET_GFW6 $(factor $TCP_REDIR_PORTS "tcp dport") counter jump PSW_RULE"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto tcp ip6 daddr @$NFTSET_CHN6 $(factor $TCP_REDIR_PORTS "tcp dport") $(get_jump_ipt ${CHN_LIST} "counter jump PSW_RULE")"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto tcp ip6 daddr @$NFTSET_CHN6 $(factor $TCP_REDIR_PORTS "tcp dport") $(get_jump_nft ${CHN_LIST} "counter jump PSW_RULE")"
[ "${USE_SHUNT_TCP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto tcp ip6 daddr @$NFTSET_SHUNT6 $(factor $TCP_REDIR_PORTS "tcp dport") counter jump PSW_RULE"
[ "${LOCALHOST_TCP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto tcp $(factor $TCP_REDIR_PORTS "tcp dport") counter jump PSW_RULE"
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto tcp iif lo $(REDIRECT $TCP_REDIR_PORT TPROXY) comment \"本机\""
@ -1325,7 +1323,7 @@ add_firewall_rule() {
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr $FAKE_IP counter jump PSW_RULE"
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_BLACK $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE"
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_GFW $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_CHN $(factor $UDP_REDIR_PORTS "udp dport") $(get_jump_ipt ${CHN_LIST} "counter jump PSW_RULE")"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_CHN $(factor $UDP_REDIR_PORTS "udp dport") $(get_jump_nft ${CHN_LIST} "counter jump PSW_RULE")"
[ "${USE_SHUNT_UDP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp ip daddr @$NFTSET_SHUNT $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE"
[ "${LOCALHOST_UDP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip protocol udp $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE"
nft "add rule $NFTABLE_NAME PSW_MANGLE ip protocol udp iif lo $(REDIRECT $UDP_REDIR_PORT TPROXY4) comment \"本机\""
@ -1338,7 +1336,7 @@ add_firewall_rule() {
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto udp ip6 daddr $FAKE_IP_6 counter jump PSW_RULE"
[ "${USE_PROXY_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto udp ip6 daddr @$NFTSET_BLACK6 $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE"
[ "${USE_GFW_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto udp ip6 daddr @$NFTSET_GFW6 $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto udp ip6 daddr @$NFTSET_CHN6 $(factor $UDP_REDIR_PORTS "udp dport") $(get_jump_ipt ${CHN_LIST} "counter jump PSW_RULE")"
[ "${CHN_LIST}" != "0" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto udp ip6 daddr @$NFTSET_CHN6 $(factor $UDP_REDIR_PORTS "udp dport") $(get_jump_nft ${CHN_LIST} "counter jump PSW_RULE")"
[ "${USE_SHUNT_UDP}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto udp ip6 daddr @$NFTSET_SHUNT6 $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE"
[ "${LOCALHOST_UDP_PROXY_MODE}" != "disable" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta l4proto udp $(factor $UDP_REDIR_PORTS "udp dport") counter jump PSW_RULE"
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 meta l4proto udp iif lo $(REDIRECT $UDP_REDIR_PORT TPROXY) comment \"本机\""
@ -1384,7 +1382,7 @@ del_firewall_rule() {
ip rule del fwmark ${FWMARK} lookup 999 priority 999 2>/dev/null
ip route del local 0.0.0.0/0 dev lo table 999 2>/dev/null
ip -6 rule del fwmark ${FWMARK} table 999 priority 999 2>/dev/null
ip -6 rule del fwmark ${FWMARK} lookup 999 priority 999 2>/dev/null
ip -6 route del local ::/0 dev lo table 999 2>/dev/null
destroy_nftset $NFTSET_LOCAL

View File

@ -128,9 +128,7 @@ destroy_nftset() {
gen_nft_tables() {
if ! nft list table "$NFTABLE_NAME" >/dev/null 2>&1; then
local nft_table_file="$TMP_PATH/PSW2_TABLE.nft"
# Set the correct priority to fit fw4
cat > "$nft_table_file" <<-EOF
nft -f - <<-EOF
table $NFTABLE_NAME {
chain dstnat {
type nat hook prerouting priority dstnat - 1; policy accept;
@ -146,9 +144,6 @@ gen_nft_tables() {
}
}
EOF
nft -f "$nft_table_file"
rm -rf "$nft_table_file"
fi
}
@ -715,8 +710,7 @@ add_firewall_rule() {
nft "add chain $NFTABLE_NAME PSW2_DIVERT"
nft "flush chain $NFTABLE_NAME PSW2_DIVERT"
nft "add rule $NFTABLE_NAME PSW2_DIVERT meta l4proto tcp socket transparent 1 mark set ${FWMARK} counter accept"
nft "add rule $NFTABLE_NAME PSW2_DIVERT meta l4proto udp socket transparent 1 mark set ${FWMARK} counter accept"
nft "add rule $NFTABLE_NAME PSW2_DIVERT meta l4proto { tcp, udp } socket transparent 1 mark set ${FWMARK} counter accept"
nft "add chain $NFTABLE_NAME PSW2_DNS"
nft "flush chain $NFTABLE_NAME PSW2_DNS"
@ -734,7 +728,7 @@ add_firewall_rule() {
nft "add rule $NFTABLE_NAME PSW2_RULE counter meta mark set ct mark"
nft "add rule $NFTABLE_NAME PSW2_RULE meta mark ${FWMARK} counter return"
nft "add rule $NFTABLE_NAME PSW2_RULE tcp flags & (fin|syn|rst|ack) == syn counter meta mark set ${FWMARK}"
nft "add rule $NFTABLE_NAME PSW2_RULE meta l4proto udp ct state new,related counter meta mark set ${FWMARK}"
nft "add rule $NFTABLE_NAME PSW2_RULE meta l4proto udp ct state { new, related } counter meta mark set ${FWMARK}"
nft "add rule $NFTABLE_NAME PSW2_RULE counter ct mark set mark"
#ipv4 tproxy mode and udp

View File

@ -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:=3
PKG_RELEASE:=4
LUCI_TITLE:=LuCI for smartdns
LUCI_DESCRIPTION:=Provides Luci for smartdns

View File

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2020-07-02 17:20-0300\n"
"PO-Revision-Date: 2026-03-13 14:10+0000\n"
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
"PO-Revision-Date: 2026-03-27 19:47+0000\n"
"Last-Translator: Francisco Serrador <fserrador@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationssmartdns/es/>\n"
"Language: es\n"
@ -531,7 +531,7 @@ msgstr "Ninguno"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:783
msgid "Only socks5 proxy support udp server."
msgstr "Solo el proxy Socks5 admite el servidor UDP."
msgstr "Solo el proxy Socks5 admite el servidor udp."
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:779
msgid "Please set proxy server first."
@ -627,7 +627,7 @@ msgstr "Nombre del servidor"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:806
msgid "Set Specific domain ip address."
msgstr "Establecer dirección IP de dominio específico."
msgstr "Establecer dirección ip de dominio específico."
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:805
msgid "Set Specific domain rule list."

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2026-02-18 15:43+0000\n"
"PO-Revision-Date: 2026-03-21 06:23+0000\n"
"Last-Translator: Hyeonjeong Lee <h9101654@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationssmartdns/ko/>\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.16.1-dev\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:791
msgid "Additional Args for upstream dns servers"
@ -60,11 +60,11 @@ msgstr ""
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:228
msgid "Bind Device"
msgstr ""
msgstr "장치 바인딩"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:233
msgid "Bind Device Name"
msgstr ""
msgstr "바인드 장치 이름"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:997
msgid "Block domain"

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2026-01-27 12:49+0000\n"
"PO-Revision-Date: 2026-03-22 17:10+0000\n"
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationssmartdns/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.16-dev\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:791
msgid "Additional Args for upstream dns servers"
@ -500,7 +500,7 @@ msgstr ""
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:999
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1024
msgid "None"
msgstr ""
msgstr "Ingen"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:783
msgid "Only socks5 proxy support udp server."

View File

@ -1,6 +1,6 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2026-03-13 14:10+0000\n"
"PO-Revision-Date: 2026-03-27 06:10+0000\n"
"Last-Translator: EESF-2 <eesf-2@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Traditional Han script) <https://hosted.weblate.org/"
"projects/openwrt/luciapplicationssmartdns/zh_Hant/>\n"
@ -389,7 +389,7 @@ msgstr "IP 集合名稱。"
#: 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 "如果喜歡此軟體,請買一杯咖啡給我。"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:352
msgid "Include Config Files<br>/etc/smartdns/conf.d"
@ -603,7 +603,7 @@ msgstr "設定特定網域的規則清單。"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:807
msgid "Set Specific ip blacklist."
msgstr "設定指定的 ip 黑名單列表。"
msgstr "設定指定的 ip 黑名單清單。"
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:708
msgid "Set TLS hostname to verify."

View File

@ -3,8 +3,8 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-08-21 22:06+0200\n"
"PO-Revision-Date: 2026-03-05 21:05+0000\n"
"Last-Translator: Francisco Serrador <fserrador@gmail.com>\n"
"PO-Revision-Date: 2026-03-29 07:12+0000\n"
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationstransmission/es/>\n"
"Language: es\n"

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-10-17 00:31+0200\n"
"PO-Revision-Date: 2026-02-15 08:21+0000\n"
"PO-Revision-Date: 2026-03-21 06:23+0000\n"
"Last-Translator: Hyeonjeong Lee <h9101654@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationstransmission/ko/>\n"
@ -12,7 +12,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.16-dev\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:65
msgid "Alternative download speed"
@ -52,11 +52,11 @@ msgstr "대역폭 설정"
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:174
msgid "Binding address IPv4"
msgstr ""
msgstr "IPv4 바인드 주소"
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:176
msgid "Binding address IPv6"
msgstr ""
msgstr "IPv6 바인드 주소"
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:86
msgid "Block list enabled"

View File

@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2026-01-25 20:29+0000\n"
"PO-Revision-Date: 2026-03-22 17:10+0000\n"
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationstransmission/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.16-dev\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:65
msgid "Alternative download speed"
@ -242,7 +242,7 @@ msgstr ""
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:105
msgid "Preallocation"
msgstr ""
msgstr "Fördelning"
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:138
#, fuzzy

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-10-08 14:06+0200\n"
"PO-Revision-Date: 2026-03-09 19:10+0000\n"
"PO-Revision-Date: 2026-03-27 06:10+0000\n"
"Last-Translator: EESF-2 <eesf-2@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Traditional Han script) <https://hosted.weblate.org/"
"projects/openwrt/luciapplicationstransmission/zh_Hant/>\n"
@ -91,7 +91,7 @@ msgstr "DHT 已啟用"
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:151
msgid "Debug"
msgstr "錯"
msgstr "錯"
#: applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js:97
msgid "Download directory"

View File

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2025-12-30 17:01+0000\n"
"Last-Translator: Steve <secure@mail.az>\n"
"PO-Revision-Date: 2026-03-23 18:10+0000\n"
"Last-Translator: Werner Schleifer <werner.schleifer@gmail.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationswatchcat/de/>\n"
"Language: de\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.15.1\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:94
msgid ""
@ -182,7 +182,7 @@ msgstr "Ping Paket größe"
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:27
msgid "Ping Reboot"
msgstr "Ping neustart"
msgstr "Ping-Neustart"
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:23
msgid ""

View File

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2026-02-27 01:01+0000\n"
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
"PO-Revision-Date: 2026-03-28 19:26+0000\n"
"Last-Translator: Francisco Serrador <fserrador@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationswatchcat/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 5.16.1-dev\n"
"X-Generator: Weblate 5.17-dev\n"
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:94
msgid ""
@ -156,7 +156,7 @@ msgstr "Interfaz a monitorizar y/o reiniciar"
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:86
msgid "Jumbo: 9000 bytes"
msgstr "Jumbo: 9000 bytes"
msgstr "Jumbo: 9.000 bytes"
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:22
msgid "Mode"